@adbayb/stack 2.37.0 → 2.38.0-next-e94e3af

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -77,6 +77,7 @@ export const config = createConfig(
77
77
  "no-extra-boolean-cast": "error",
78
78
  "no-fallthrough": "error",
79
79
  "no-global-assign": "error",
80
+ "no-implicit-coercion": "error",
80
81
  "no-invalid-regexp": "error",
81
82
  "no-irregular-whitespace": "error",
82
83
  "no-lonely-if": "error",
@@ -124,7 +125,6 @@ export const config = createConfig(
124
125
  "prefer-spread": "error",
125
126
  "prefer-template": "error",
126
127
  "require-yield": "error",
127
- "sort-imports": ["error", { ignoreDeclarationSort: true }],
128
128
  "sort-vars": "error",
129
129
  "use-isnan": "error",
130
130
  "valid-typeof": "error",
@@ -81,6 +81,7 @@ export const config = createConfig(
81
81
  "@eslint-react/use-state": "error",
82
82
  "@eslint-react/web-api-no-leaked-event-listener": "error",
83
83
  "@eslint-react/web-api-no-leaked-fetch": "error",
84
+ "@eslint-react/web-api-no-leaked-intersection-observer": "error",
84
85
  "@eslint-react/web-api-no-leaked-interval": "error",
85
86
  "@eslint-react/web-api-no-leaked-resize-observer": "error",
86
87
  "@eslint-react/web-api-no-leaked-timeout": "error",
@@ -9,6 +9,7 @@ export const config = createConfig({
9
9
  unicorn: unicornPlugin,
10
10
  },
11
11
  rules: {
12
+ "unicorn/better-dom-traversing": "error",
12
13
  "unicorn/better-regex": "error",
13
14
  "unicorn/catch-error-name": [
14
15
  "error",
@@ -16,15 +17,21 @@ export const config = createConfig({
16
17
  name: "error",
17
18
  },
18
19
  ],
20
+ "unicorn/consistent-class-member-order": "error",
21
+ "unicorn/consistent-compound-words": "error",
19
22
  "unicorn/consistent-empty-array-spread": "error",
20
23
  "unicorn/consistent-existence-index-check": "error",
24
+ "unicorn/consistent-export-decorator-position": "error",
21
25
  "unicorn/consistent-function-scoping": "error",
26
+ "unicorn/consistent-json-file-read": "error",
27
+ "unicorn/consistent-optional-chaining": "error",
22
28
  "unicorn/consistent-template-literal-escape": "error",
23
29
  "unicorn/custom-error-definition": "error",
24
30
  "unicorn/error-message": "error",
25
31
  "unicorn/escape-case": "error",
26
32
  "unicorn/expiring-todo-comments": "error",
27
33
  "unicorn/explicit-length-check": "error",
34
+ "unicorn/explicit-timer-delay": "error",
28
35
  "unicorn/filename-case": [
29
36
  "error",
30
37
  {
@@ -32,9 +39,11 @@ export const config = createConfig({
32
39
  camelCase: true,
33
40
  pascalCase: true,
34
41
  },
42
+ checkDirectories: false,
35
43
  },
36
44
  ],
37
45
  "unicorn/isolated-functions": "error",
46
+ "unicorn/max-nested-calls": ["error", { max: 3 }],
38
47
  "unicorn/new-for-builtins": "error",
39
48
  "unicorn/no-abusive-eslint-disable": "error",
40
49
  "unicorn/no-array-callback-reference": "error",
@@ -43,81 +52,124 @@ export const config = createConfig({
43
52
  "unicorn/no-await-expression-member": "error",
44
53
  "unicorn/no-await-in-promise-methods": "error",
45
54
  "unicorn/no-console-spaces": "error",
55
+ "unicorn/no-declarations-before-early-exit": "error",
46
56
  "unicorn/no-document-cookie": "error",
57
+ "unicorn/no-duplicate-loops": "error",
47
58
  "unicorn/no-empty-file": "error",
59
+ "unicorn/no-error-property-assignment": "error",
48
60
  "unicorn/no-for-loop": "error",
49
61
  "unicorn/no-immediate-mutation": "error",
62
+ "unicorn/no-incorrect-template-string-interpolation": "error",
50
63
  "unicorn/no-instanceof-array": "error",
51
64
  "unicorn/no-invalid-fetch-options": "error",
52
65
  "unicorn/no-invalid-remove-event-listener": "error",
53
66
  "unicorn/no-lonely-if": "error",
67
+ "unicorn/no-mismatched-map-key": "error",
68
+ "unicorn/no-negated-array-predicate": "error",
69
+ "unicorn/no-negated-comparison": "error",
54
70
  "unicorn/no-negated-condition": "error",
55
71
  "unicorn/no-nested-ternary": "error",
56
72
  "unicorn/no-new-buffer": "error",
57
73
  "unicorn/no-object-as-default-parameter": "error",
74
+ "unicorn/no-object-methods-with-collections": "error",
58
75
  "unicorn/no-process-exit": "error",
76
+ "unicorn/no-redundant-comparison": "error",
77
+ "unicorn/no-return-array-push": "error",
59
78
  "unicorn/no-single-promise-in-promise-methods": "error",
60
79
  "unicorn/no-static-only-class": "error",
80
+ "unicorn/no-subtraction-comparison": "error",
61
81
  "unicorn/no-typeof-undefined": "error",
62
82
  "unicorn/no-unnecessary-array-flat-depth": "error",
63
83
  "unicorn/no-unnecessary-array-splice-count": "error",
84
+ "unicorn/no-unnecessary-global-this": "error",
64
85
  "unicorn/no-unnecessary-polyfills": "error",
65
86
  "unicorn/no-unnecessary-slice-end": "error",
87
+ "unicorn/no-unnecessary-splice": "error",
66
88
  "unicorn/no-unreadable-array-destructuring": "error",
67
89
  "unicorn/no-unreadable-iife": "error",
90
+ "unicorn/no-unreadable-object-destructuring": "error",
91
+ "unicorn/no-unsafe-buffer-conversion": "error",
92
+ "unicorn/no-unsafe-string-replacement": "error",
68
93
  "unicorn/no-unused-properties": "error",
94
+ "unicorn/no-useless-boolean-cast": "error",
69
95
  "unicorn/no-useless-collection-argument": "error",
96
+ "unicorn/no-useless-concat": "error",
97
+ "unicorn/no-useless-else": "error",
70
98
  "unicorn/no-useless-error-capture-stack-trace": "error",
71
99
  "unicorn/no-useless-fallback-in-spread": "error",
72
100
  "unicorn/no-useless-iterator-to-array": "error",
73
101
  "unicorn/no-useless-length-check": "error",
74
102
  "unicorn/no-useless-promise-resolve-reject": "error",
103
+ "unicorn/no-useless-recursion": "error",
75
104
  "unicorn/no-useless-spread": "error",
105
+ "unicorn/no-useless-template-literals": "error",
76
106
  "unicorn/no-zero-fractions": "error",
77
107
  "unicorn/number-literal-case": "error",
78
108
  "unicorn/numeric-separators-style": "error",
79
109
  "unicorn/prefer-add-event-listener": "error",
110
+ "unicorn/prefer-add-event-listener-options": "error",
80
111
  "unicorn/prefer-array-find": "error",
81
112
  "unicorn/prefer-array-flat": "error",
82
113
  "unicorn/prefer-array-flat-map": "error",
114
+ "unicorn/prefer-array-from-map": "error",
83
115
  "unicorn/prefer-array-index-of": "error",
84
116
  "unicorn/prefer-array-some": "error",
85
117
  "unicorn/prefer-at": "error",
118
+ "unicorn/prefer-await": "error",
86
119
  "unicorn/prefer-bigint-literals": "error",
87
120
  "unicorn/prefer-blob-reading-methods": "error",
88
121
  "unicorn/prefer-class-fields": "error",
89
122
  "unicorn/prefer-classlist-toggle": "error",
90
123
  "unicorn/prefer-code-point": "error",
91
124
  "unicorn/prefer-date-now": "error",
125
+ "unicorn/prefer-direct-iteration": "error",
92
126
  "unicorn/prefer-dom-node-append": "error",
93
127
  "unicorn/prefer-dom-node-remove": "error",
94
128
  "unicorn/prefer-dom-node-text-content": "error",
129
+ "unicorn/prefer-early-return": "error",
95
130
  "unicorn/prefer-event-target": "error",
96
- "unicorn/prefer-export-from": ["error", { ignoreUsedVariables: true }],
131
+ "unicorn/prefer-export-from": ["error", { checkUsedVariables: false }],
132
+ "unicorn/prefer-global-number-constants": "error",
97
133
  "unicorn/prefer-global-this": "error",
134
+ "unicorn/prefer-identifier-import-export-specifiers": "error",
98
135
  "unicorn/prefer-import-meta-properties": "error",
99
136
  "unicorn/prefer-includes": "error",
137
+ "unicorn/prefer-iterable-in-constructor": "error",
100
138
  "unicorn/prefer-keyboard-event-key": "error",
139
+ "unicorn/prefer-location-assign": "error",
101
140
  "unicorn/prefer-logical-operator-over-ternary": "error",
102
141
  "unicorn/prefer-math-min-max": "error",
103
142
  "unicorn/prefer-math-trunc": "error",
143
+ "unicorn/prefer-minimal-ternary": "error",
104
144
  "unicorn/prefer-modern-dom-apis": "error",
105
145
  "unicorn/prefer-modern-math-apis": "error",
106
146
  "unicorn/prefer-module": "error",
107
147
  "unicorn/prefer-native-coercion-functions": "error",
108
148
  "unicorn/prefer-negative-index": "error",
149
+ "unicorn/prefer-number-coercion": "error",
150
+ "unicorn/prefer-number-is-safe-integer": "error",
109
151
  "unicorn/prefer-number-properties": "error",
152
+ "unicorn/prefer-object-define-properties": "error",
153
+ "unicorn/prefer-object-destructuring-defaults": "error",
110
154
  "unicorn/prefer-object-from-entries": "error",
155
+ "unicorn/prefer-object-iterable-methods": "error",
111
156
  "unicorn/prefer-optional-catch-binding": "error",
157
+ "unicorn/prefer-path2d": "error",
158
+ "unicorn/prefer-private-class-fields": "error",
112
159
  "unicorn/prefer-prototype-methods": "error",
113
160
  "unicorn/prefer-query-selector": "error",
114
161
  "unicorn/prefer-reflect-apply": "error",
115
162
  "unicorn/prefer-regexp-test": "error",
116
163
  "unicorn/prefer-response-static-json": "error",
164
+ "unicorn/prefer-scoped-selector": "error",
117
165
  "unicorn/prefer-set-has": "error",
118
166
  "unicorn/prefer-set-size": "error",
119
167
  "unicorn/prefer-simple-condition-first": "error",
168
+ "unicorn/prefer-simple-sort-comparator": "error",
169
+ "unicorn/prefer-single-array-predicate": "error",
120
170
  "unicorn/prefer-single-call": "error",
171
+ "unicorn/prefer-single-object-destructuring": "error",
172
+ "unicorn/prefer-smaller-scope": "error",
121
173
  "unicorn/prefer-spread": "error",
122
174
  "unicorn/prefer-string-raw": "error",
123
175
  "unicorn/prefer-string-replace-all": "error",
@@ -129,6 +181,9 @@ export const config = createConfig({
129
181
  "unicorn/prefer-ternary": "error",
130
182
  "unicorn/prefer-top-level-await": "error",
131
183
  "unicorn/prefer-type-error": "error",
184
+ "unicorn/prefer-uint8array-base64": "error",
185
+ "unicorn/prefer-unicode-code-point-escapes": "error",
186
+ "unicorn/prefer-url-href": "error",
132
187
  "unicorn/prevent-abbreviations": [
133
188
  "error",
134
189
  {
@@ -137,8 +192,10 @@ export const config = createConfig({
137
192
  ],
138
193
  "unicorn/relative-url-style": ["error", "always"],
139
194
  "unicorn/require-array-join-separator": "error",
195
+ "unicorn/require-array-sort-compare": "error",
140
196
  "unicorn/require-module-attributes": "error",
141
197
  "unicorn/require-number-to-fixed-digits-argument": "error",
198
+ "unicorn/require-proxy-trap-boolean-return": "error",
142
199
  "unicorn/switch-case-braces": "error",
143
200
  "unicorn/switch-case-break-position": "error",
144
201
  "unicorn/template-indent": "error",
package/dist/index.js CHANGED
@@ -30,7 +30,8 @@ function assert(expectedCondition, createError) {
30
30
  */
31
31
  const botMessage = (input) => {
32
32
  const { type } = input;
33
- (type === "error" ? console.error : console.log)(helpers.format(`
33
+ const log = console[type === "error" ? "error" : "log"];
34
+ log(helpers.format(`
34
35
  ╭─────╮
35
36
  │ ◠ ◠ ${input.title}
36
37
  │ ${type === "error" ? "◠" : "◡"} │ ${input.description}
@@ -97,7 +98,7 @@ const request = { async get(url, responseType) {
97
98
  status: response.status,
98
99
  statusText: response.statusText
99
100
  })})`);
100
- return responseType === "text" ? response.text() : response.json();
101
+ return response[responseType === "text" ? "text" : "json"]();
101
102
  } };
102
103
  const eslint = (options) => async (files = []) => {
103
104
  let eslintFiles = [];
@@ -220,8 +221,7 @@ const checkDependency = async () => {
220
221
  }
221
222
  };
222
223
  const checkDependencyVersionRange = ({ dependencies, devDependencies, name, peerDependencies }) => {
223
- for (const dependencyName of Object.keys(devDependencies)) {
224
- const version = devDependencies[dependencyName];
224
+ for (const [dependencyName, version] of Object.entries(devDependencies)) {
225
225
  assertVersion(version, {
226
226
  consumedBy: name,
227
227
  name: dependencyName
@@ -231,8 +231,7 @@ const checkDependencyVersionRange = ({ dependencies, devDependencies, name, peer
231
231
  name: dependencyName
232
232
  });
233
233
  }
234
- for (const dependencyName of Object.keys(dependencies)) {
235
- const version = dependencies[dependencyName];
234
+ for (const [dependencyName, version] of Object.entries(dependencies)) {
236
235
  assertVersion(version, {
237
236
  consumedBy: name,
238
237
  name: dependencyName
@@ -242,8 +241,7 @@ const checkDependencyVersionRange = ({ dependencies, devDependencies, name, peer
242
241
  name: dependencyName
243
242
  });
244
243
  }
245
- for (const dependencyName of Object.keys(peerDependencies)) {
246
- const version = peerDependencies[dependencyName];
244
+ for (const [dependencyName, version] of Object.entries(peerDependencies)) {
247
245
  assertVersion(version, {
248
246
  consumedBy: name,
249
247
  name: dependencyName
@@ -261,9 +259,8 @@ const createPackagesVersionMismatchChecker = () => {
261
259
  const packageName = package_.name;
262
260
  const isDevelopment = type === "development";
263
261
  const store = isDevelopment ? monorepoDevelopmentDependencies : monorepoDependencies;
264
- const dependencies = isDevelopment ? package_.devDependencies : package_.dependencies;
265
- for (const dependencyName of Object.keys(dependencies)) {
266
- const depVersion = dependencies[dependencyName];
262
+ const dependencies = package_[isDevelopment ? "devDependencies" : "dependencies"];
263
+ for (const [dependencyName, depVersion] of Object.entries(dependencies)) {
267
264
  if (!depVersion) continue;
268
265
  const storedVersion = store.get(dependencyName);
269
266
  if (!storedVersion) {
@@ -425,13 +422,13 @@ const isDirectoryExistAndNotEmpty = (path) => {
425
422
  return existsSync(path) && readdirSync(path).length > 0;
426
423
  };
427
424
  const retrieveIgnoredFiles = async () => {
428
- return (await helpers.exec("git clean -fdXn")).split(/\n|\r\n/).filter((cleanOutput) => !PRESERVE_FILES.some((excludedFile) => cleanOutput.includes(excludedFile))).map((cleanOutput) => cleanOutput.split(" ").at(-1));
425
+ return (await helpers.exec("git clean -fdXn")).split(/\n|\r\n/).filter((cleanOutput) => PRESERVE_FILES.every((excludedFile) => !cleanOutput.includes(excludedFile))).map((cleanOutput) => cleanOutput.split(" ").at(-1));
429
426
  };
430
427
  const PRESERVE_FILES = ["node_modules"];
431
428
 
432
429
  //#endregion
433
430
  //#region package.json
434
- var version = "2.37.0";
431
+ var version = "2.38.0-next-e94e3af";
435
432
 
436
433
  //#endregion
437
434
  //#region src/commands/create.ts
@@ -598,7 +595,7 @@ const fixFormatting = async (files) => {
598
595
  if (files.length === 0) prettierFiles.push(`"**/!(${PRETTIER_IGNORE_FILES.join("|")})"`);
599
596
  else {
600
597
  prettierFiles = files.filter((file) => {
601
- return !PRETTIER_IGNORE_FILES.some((filename) => file.endsWith(filename));
598
+ return PRETTIER_IGNORE_FILES.every((filename) => !file.endsWith(filename));
602
599
  });
603
600
  if (prettierFiles.length === 0) return;
604
601
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adbayb/stack",
3
- "version": "2.37.0",
3
+ "version": "2.38.0-next-e94e3af",
4
4
  "description": "My opinionated JavaScript-based toolchain",
5
5
  "keywords": [
6
6
  "stack",
@@ -43,33 +43,33 @@
43
43
  "@changesets/cli": "^2.31.0",
44
44
  "@commitlint/cli": "^21.0.2",
45
45
  "@commitlint/config-conventional": "^21.0.2",
46
- "@eslint-react/eslint-plugin": "^5.8.7",
46
+ "@eslint-react/eslint-plugin": "^5.9.0",
47
47
  "@eslint/compat": "^2.1.0",
48
48
  "@stylistic/eslint-plugin": "^5.10.0",
49
- "@vitest/eslint-plugin": "^1.6.18",
50
- "eslint": "^10.4.1",
49
+ "@vitest/eslint-plugin": "^1.6.20",
50
+ "eslint": "^10.5.0",
51
51
  "eslint-config-prettier": "^10.1.8",
52
- "eslint-import-resolver-typescript": "^4.4.4",
52
+ "eslint-import-resolver-typescript": "^4.4.5",
53
53
  "eslint-plugin-depend": "^1.5.0",
54
54
  "eslint-plugin-import-x": "^4.16.2",
55
- "eslint-plugin-jsdoc": "^63.0.0",
56
- "eslint-plugin-mdx": "^3.7.1",
57
- "eslint-plugin-n": "^18.0.1",
55
+ "eslint-plugin-jsdoc": "^63.0.2",
56
+ "eslint-plugin-mdx": "^3.8.1",
57
+ "eslint-plugin-n": "^18.1.0",
58
58
  "eslint-plugin-perfectionist": "^5.9.0",
59
59
  "eslint-plugin-prettier": "^5.5.6",
60
60
  "eslint-plugin-sonarjs": "^4.0.3",
61
- "eslint-plugin-unicorn": "^64.0.0",
61
+ "eslint-plugin-unicorn": "^66.0.0",
62
62
  "fdir": "^6.5.0",
63
63
  "globals": "^17.6.0",
64
- "prettier": "^3.8.3",
64
+ "prettier": "^3.8.4",
65
65
  "prettier-plugin-packagejson": "^3.0.2",
66
66
  "termost": "^1.9.1",
67
- "turbo": "^2.9.16",
67
+ "turbo": "^2.9.18",
68
68
  "typescript": "^6.0.3",
69
- "typescript-eslint": "^8.60.0"
69
+ "typescript-eslint": "^8.61.0"
70
70
  },
71
71
  "devDependencies": {
72
- "@types/node": "24.12.4",
72
+ "@types/node": "24.13.2",
73
73
  "quickbundle": "3.0.0"
74
74
  },
75
75
  "publishConfig": {
@@ -14,13 +14,11 @@
14
14
  "sideEffects": false,
15
15
  "type": "module",
16
16
  "exports": {
17
- ".": {
18
- "source": "./src/index.ts",
19
- "types": "./dist/index.d.ts",
20
- "require": "./dist/index.cjs",
21
- "import": "./dist/index.mjs",
22
- "default": "./dist/index.mjs"
23
- }
17
+ "source": "./src/index.ts",
18
+ "types": "./dist/index.d.ts",
19
+ "require": "./dist/index.cjs",
20
+ "import": "./dist/index.mjs",
21
+ "default": "./dist/index.mjs"
24
22
  },
25
23
  "files": [
26
24
  "dist"
@@ -14,13 +14,11 @@
14
14
  "sideEffects": false,
15
15
  "type": "module",
16
16
  "exports": {
17
- ".": {
18
- "source": "./src/index.ts",
19
- "types": "./dist/index.d.ts",
20
- "require": "./dist/index.cjs",
21
- "import": "./dist/index.mjs",
22
- "default": "./dist/index.mjs"
23
- }
17
+ "source": "./src/index.ts",
18
+ "types": "./dist/index.d.ts",
19
+ "require": "./dist/index.cjs",
20
+ "import": "./dist/index.mjs",
21
+ "default": "./dist/index.mjs"
24
22
  },
25
23
  "files": [
26
24
  "dist"