Skip to content
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
1e64390
Initial plan
Copilot Aug 21, 2025
1f6cccb
Set up TypeScript development environment and convert first utility f…
Copilot Aug 21, 2025
76b929d
Convert utility modules and webhook service to TypeScript
Copilot Aug 21, 2025
cd26eab
Convert main application files to TypeScript and update documentation
Copilot Aug 21, 2025
5abc6db
Complete TypeScript conversion with commands, events and comprehensiv…
Copilot Aug 21, 2025
8e4fe2c
Fix Discord client TypeScript errors for yarn dev and yarn start
Copilot Aug 21, 2025
da24e53
Initial plan
Copilot Aug 21, 2025
55b49cc
Convert all CommonJS require statements to ES6 import syntax in TypeS…
Copilot Aug 21, 2025
7af396a
Update src/utils/memory.ts
warengonzaga Aug 21, 2025
d147ba8
Merge pull request #44 from wgtechlabs/copilot/fix-e2302dcf-c626-4ff9…
warengonzaga Aug 21, 2025
9d1f811
Complete TypeScript export pattern modernization - convert export = t…
Copilot Aug 21, 2025
8c0efae
Merge pull request #43 from wgtechlabs/copilot/fix-e497dca2-bd10-4ebc…
warengonzaga Aug 21, 2025
a82b902
Initial plan
Copilot Aug 21, 2025
5e919fa
Migrate logging system to @wgtechlabs/log-engine and remove emojis
Copilot Aug 21, 2025
3bd08b1
Remove legacy console logging from logger.ts and migrate to @wgtechla…
Copilot Aug 22, 2025
52d3954
Merge pull request #46 from wgtechlabs/copilot/fix-f79849e6-ba43-45b7…
warengonzaga Aug 23, 2025
53fda38
Initial plan
Copilot Aug 23, 2025
b79372d
Convert most JavaScript files to TypeScript and remove duplicates
Copilot Aug 23, 2025
7270e0a
Fix TypeScript compilation errors and export issues
Copilot Aug 23, 2025
d2b3796
Complete TypeScript conversion - all files now compile successfully
Copilot Aug 23, 2025
06d3946
☕ chore: update packages
warengonzaga Aug 23, 2025
60496f9
Merge pull request #47 from wgtechlabs/copilot/fix-72a9b4cb-3129-45ec…
warengonzaga Aug 23, 2025
1337cbf
Initial plan
Copilot Aug 23, 2025
7a6cb3d
Initial plan
Copilot Aug 23, 2025
f4d4fce
Add ESLint security plugin with comprehensive configuration
Copilot Aug 23, 2025
2e08dc9
Complete logger refactoring: Replace custom wrapper with direct @wgte…
Copilot Aug 23, 2025
4f1ab44
🐛 fix: linting issues
warengonzaga Aug 23, 2025
dce30d4
☕ chore: remove unnecessary docs
warengonzaga Aug 23, 2025
8a30e4b
Merge pull request #48 from wgtechlabs/copilot/fix-62b0ff3f-3fde-46b1…
warengonzaga Aug 23, 2025
09a059c
🐛 fix: resolve all remaining ESLint security errors
Copilot Aug 23, 2025
ead9191
Merge branch 'dev' into copilot/fix-db3f8375-2128-4b60-891c-a526bb2e8b52
warengonzaga Aug 23, 2025
37fc2d7
Merge branch 'copilot/fix-db3f8375-2128-4b60-891c-a526bb2e8b52' of ht…
warengonzaga Aug 23, 2025
3f02ec6
🐛 fix: linting errors
warengonzaga Aug 25, 2025
0776c2d
🐛 fix: linting errors
warengonzaga Aug 25, 2025
43d0ede
🐛 fix: lint warnings
warengonzaga Aug 25, 2025
a092826
Merge pull request #49 from wgtechlabs/copilot/fix-db3f8375-2128-4b60…
warengonzaga Aug 25, 2025
edac98f
✨ tweak: redis URL is now required
warengonzaga Aug 25, 2025
6a1baa0
Initial plan
Copilot Aug 25, 2025
f422308
Fix critical security and reliability issues: timing attacks, validat…
Copilot Aug 25, 2025
bdeddbf
Merge pull request #50 from wgtechlabs/copilot/fix-00055cc7-6a99-4300…
warengonzaga Aug 25, 2025
67f73bf
✨ tweak: update version number
warengonzaga Aug 25, 2025
e19937b
Initial plan
Copilot Aug 25, 2025
15547a2
feat: migrate from email type to slack type conversations
Copilot Aug 25, 2025
43ebda2
Merge pull request #52 from wgtechlabs/copilot/fix-f59afa1b-c66a-44d0…
warengonzaga Aug 25, 2025
b31fe8c
✨ tweak: add health check endpoint
warengonzaga Aug 26, 2025
62724c3
☕ chore: update version number
warengonzaga Aug 26, 2025
0462220
🐛 fix: webhook filtering
warengonzaga Aug 27, 2025
a1c8c8e
✨ tweak: update ticket embed messages
warengonzaga Aug 27, 2025
64ab8c2
Initial plan
Copilot Aug 28, 2025
9e0387c
Fix high priority issues: remove crypto dependency, fix User.tag depr…
Copilot Aug 28, 2025
b1cbbb2
Improve types and reduce duplicate validation logic in message utils
Copilot Aug 28, 2025
23034d7
Complete code review fixes: improve TypeScript config, error handling…
Copilot Aug 28, 2025
7d545ac
✨ tweak: update types and validations
warengonzaga Aug 28, 2025
d0b3644
✨ tweak: update interaction handling
warengonzaga Aug 28, 2025
20a7c67
Merge branch 'dev' into copilot/fix-8c5aa685-1254-4461-b1a4-d07151227f02
warengonzaga Aug 28, 2025
bb945a2
✨ tweak: changes based on reviews
warengonzaga Aug 28, 2025
6882741
Merge pull request #54 from wgtechlabs/copilot/fix-8c5aa685-1254-4461…
warengonzaga Aug 28, 2025
521e1db
☕ chore: add WG Code Builder chatmode
warengonzaga Aug 28, 2025
e5bb80f
✨ tweak: update startup validation
warengonzaga Aug 28, 2025
31312dc
✨ tweak: refactor code structure for improved readability and maintai…
warengonzaga Aug 28, 2025
19ec318
☕ chore: update chatmode
warengonzaga Aug 28, 2025
38634a2
✨ tweak: update unthread ticket type
warengonzaga Aug 28, 2025
1c35a88
Initial plan
Copilot Aug 28, 2025
bf3a73b
Implement high and medium priority fixes for Unthread project issues
Copilot Aug 28, 2025
2d4ac80
✨ tweak: enhance thread creation
warengonzaga Aug 28, 2025
ecfb099
✨ tweak: update customer interfaces
warengonzaga Aug 28, 2025
bf2d9d0
Update src/utils/database.ts
warengonzaga Aug 28, 2025
78d8c0f
Merge pull request #55 from wgtechlabs/copilot/fix-c14e70dc-5a45-48d4…
warengonzaga Aug 28, 2025
be5bfef
✨ tweak: enhance environment validation
warengonzaga Aug 28, 2025
c7192e6
Initial plan
Copilot Aug 28, 2025
ff7a293
Initial plan
Copilot Aug 28, 2025
980437f
Fix code review issues: markdown quote, API key validation, and retur…
Copilot Aug 28, 2025
246adb1
Implement environment variable validation and middleware fixes
Copilot Aug 28, 2025
ecd425b
Merge pull request #57 from wgtechlabs/copilot/fix-00d6382f-0a6c-4351…
warengonzaga Aug 28, 2025
4bf2014
Merge pull request #56 from wgtechlabs/copilot/fix-70e4af20-43df-4d20…
warengonzaga Aug 28, 2025
221cba0
☕ chore: update package manager
warengonzaga Aug 28, 2025
375ac91
Initial plan
Copilot Aug 28, 2025
84fa5d8
Initial plan
Copilot Aug 28, 2025
2354390
Fix hardcoded version, update environment docs, and improve JSDoc sta…
Copilot Aug 28, 2025
2e54539
Complete JSDoc standardization across utils, events, and commands
Copilot Aug 28, 2025
29380ea
Successfully upgrade ESLint to v9 and TypeScript ESLint plugins to v8
Copilot Aug 28, 2025
1b92d14
Merge pull request #59 from wgtechlabs/copilot/fix-ff7e3e35-ed1d-45a5…
warengonzaga Aug 29, 2025
06950eb
Update src/types/unthread.ts
warengonzaga Aug 29, 2025
2689b98
Merge pull request #58 from wgtechlabs/copilot/fix-a2670055-a84c-4752…
warengonzaga Aug 29, 2025
f0a1fd5
✨ tweak: update bot footer logic
warengonzaga Aug 29, 2025
b8e74f0
🐛 fix: yarn linting issues
warengonzaga Aug 29, 2025
c3bc748
✨ tweak: update command loading logs
warengonzaga Aug 29, 2025
ebec0a2
✨ tweak: enhance command validation
warengonzaga Aug 30, 2025
261d45b
Initial plan
Copilot Aug 30, 2025
bb50e92
✨ tweak: add body size limit
warengonzaga Aug 30, 2025
90a3c41
Add Dockerfile and Docker Compose configuration for Discord bot
Copilot Aug 30, 2025
f1474eb
✨ tweak: improve raw body handling
warengonzaga Aug 30, 2025
d82ace6
☕ chore: provide sample docker setup
warengonzaga Aug 30, 2025
7aaf46c
✨ tweak: update health check method
warengonzaga Aug 30, 2025
2eec866
✨ tweak: update node version
warengonzaga Aug 30, 2025
b3e3483
Merge pull request #60 from wgtechlabs/copilot/fix-3147112f-a3d7-424a…
warengonzaga Aug 30, 2025
0d9ba1c
✨ tweak: update yarn version
warengonzaga Aug 30, 2025
177075d
☕ chore: update dockerfile and readme
warengonzaga Aug 30, 2025
df703d9
☕ chore: remove docker-related files
warengonzaga Aug 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 27 additions & 5 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
{
"extends": "eslint:recommended",
"extends": [
"eslint:recommended",
"@typescript-eslint/recommended"
],
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"env": {
"node": true,
"es6": true
},
"parserOptions": {
"ecmaVersion": 2021
"ecmaVersion": 2021,
"sourceType": "module",
"project": "./tsconfig.json"
},
"rules": {
"arrow-spacing": ["warn", { "before": true, "after": true }],
Expand All @@ -27,7 +34,8 @@
"no-lonely-if": "error",
"no-multi-spaces": "error",
"no-multiple-empty-lines": ["error", { "max": 2, "maxEOF": 1, "maxBOF": 0 }],
"no-shadow": ["error", { "allow": ["err", "resolve", "reject"] }],
"no-shadow": "off",
"@typescript-eslint/no-shadow": ["error", { "allow": ["err", "resolve", "reject"] }],
"no-trailing-spaces": ["error"],
"no-var": "error",
"object-curly-spacing": ["error", "always"],
Expand All @@ -44,6 +52,20 @@
"space-infix-ops": "error",
"space-unary-ops": "error",
"spaced-comment": "error",
"yoda": "error"
}
"yoda": "error",
"@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/no-explicit-any": "warn"
},
"overrides": [
{
"files": ["*.js"],
"extends": ["eslint:recommended"],
"parser": "espree",
"rules": {
"@typescript-eslint/no-var-requires": "off"
}
}
]
}
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ web_modules/
# TypeScript cache
*.tsbuildinfo

# TypeScript build output
dist/

# Optional npm cache directory
.npm

Expand Down
6 changes: 4 additions & 2 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
{
"recommendations": [
"bierner.markdown-preview-github-styles",
"bierner.markdown-preview-github-styles",
"bierner.github-markdown-preview",
"bierner.markdown-shiki",
"bierner.color-info",
"oderwat.indent-rainbow",
"warengonzaga.bini-theme",
"arcanis.vscode-zipfs",
"dbaeumer.vscode-eslint"
]
}
}
32 changes: 32 additions & 0 deletions .yarn/sdks/eslint/bin/eslint.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env node

const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);

const relPnpApiPath = "../../../../.pnp.cjs";

const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);

const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);

if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint/bin/eslint.js
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}

const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;

// Defer to the real eslint/bin/eslint.js your application uses
module.exports = wrapWithUserWrapper(absRequire(`eslint/bin/eslint.js`));
32 changes: 32 additions & 0 deletions .yarn/sdks/eslint/lib/api.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env node

const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);

const relPnpApiPath = "../../../../.pnp.cjs";

const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);

const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);

if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}

const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;

// Defer to the real eslint your application uses
module.exports = wrapWithUserWrapper(absRequire(`eslint`));
32 changes: 32 additions & 0 deletions .yarn/sdks/eslint/lib/config-api.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env node

const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);

const relPnpApiPath = "../../../../.pnp.cjs";

const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);

const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);

if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint/config
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}

const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;

// Defer to the real eslint/config your application uses
module.exports = wrapWithUserWrapper(absRequire(`eslint/config`));
32 changes: 32 additions & 0 deletions .yarn/sdks/eslint/lib/types/config-api.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env node

const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);

const relPnpApiPath = "../../../../../.pnp.cjs";

const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);

const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);

if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint/config
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}

const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;

// Defer to the real eslint/config your application uses
module.exports = wrapWithUserWrapper(absRequire(`eslint/config`));
32 changes: 32 additions & 0 deletions .yarn/sdks/eslint/lib/types/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env node

const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);

const relPnpApiPath = "../../../../../.pnp.cjs";

const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);

const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);

if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}

const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;

// Defer to the real eslint your application uses
module.exports = wrapWithUserWrapper(absRequire(`eslint`));
32 changes: 32 additions & 0 deletions .yarn/sdks/eslint/lib/types/rules.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env node

const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);

const relPnpApiPath = "../../../../../.pnp.cjs";

const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);

const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);

if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint/rules
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}

const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;

// Defer to the real eslint/rules your application uses
module.exports = wrapWithUserWrapper(absRequire(`eslint/rules`));
32 changes: 32 additions & 0 deletions .yarn/sdks/eslint/lib/types/universal.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env node

const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);

const relPnpApiPath = "../../../../../.pnp.cjs";

const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);

const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);

if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint/universal
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}

const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;

// Defer to the real eslint/universal your application uses
module.exports = wrapWithUserWrapper(absRequire(`eslint/universal`));
32 changes: 32 additions & 0 deletions .yarn/sdks/eslint/lib/types/use-at-your-own-risk.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env node

const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);

const relPnpApiPath = "../../../../../.pnp.cjs";

const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);

const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);

if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint/use-at-your-own-risk
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}

const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;

// Defer to the real eslint/use-at-your-own-risk your application uses
module.exports = wrapWithUserWrapper(absRequire(`eslint/use-at-your-own-risk`));
32 changes: 32 additions & 0 deletions .yarn/sdks/eslint/lib/universal.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env node

const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);

const relPnpApiPath = "../../../../.pnp.cjs";

const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);

const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);

if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint/universal
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}

const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;

// Defer to the real eslint/universal your application uses
module.exports = wrapWithUserWrapper(absRequire(`eslint/universal`));
Loading