@zukhruf/eslint 0.3.41 → 0.3.43

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.
Files changed (84) hide show
  1. package/README.md +34 -15
  2. package/dist/async-values/no-promise-field.d.ts.map +1 -1
  3. package/dist/async-values/no-promise-field.js +5 -3
  4. package/dist/async-values/no-promise-field.js.map +1 -1
  5. package/dist/base/config.d.ts.map +1 -1
  6. package/dist/base/config.js +11 -2
  7. package/dist/base/config.js.map +1 -1
  8. package/dist/base/options.d.ts +4 -3
  9. package/dist/base/options.d.ts.map +1 -1
  10. package/dist/base/options.js.map +1 -1
  11. package/dist/diagnostics/config.js +2 -2
  12. package/dist/diagnostics/config.js.map +1 -1
  13. package/dist/environment/config.d.ts +1 -0
  14. package/dist/environment/config.d.ts.map +1 -1
  15. package/dist/environment/config.js +4 -2
  16. package/dist/environment/config.js.map +1 -1
  17. package/dist/environment/no-undeclared-process-env.d.ts.map +1 -1
  18. package/dist/environment/no-undeclared-process-env.js +19 -18
  19. package/dist/environment/no-undeclared-process-env.js.map +1 -1
  20. package/dist/files.d.ts +3 -0
  21. package/dist/files.d.ts.map +1 -1
  22. package/dist/files.js +3 -0
  23. package/dist/files.js.map +1 -1
  24. package/dist/hermes/plugin.d.ts.map +1 -1
  25. package/dist/hermes/plugin.js +2 -2
  26. package/dist/hermes/plugin.js.map +1 -1
  27. package/dist/hono/config.js +2 -2
  28. package/dist/hono/config.js.map +1 -1
  29. package/dist/imports/no-test-file-import.d.ts +9 -0
  30. package/dist/imports/no-test-file-import.d.ts.map +1 -0
  31. package/dist/imports/no-test-file-import.js +21 -0
  32. package/dist/imports/no-test-file-import.js.map +1 -0
  33. package/dist/index.d.ts +2 -1
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +1 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/island/plugin.d.ts.map +1 -1
  38. package/dist/island/plugin.js +3 -3
  39. package/dist/island/plugin.js.map +1 -1
  40. package/dist/manifest/manifest-policy.d.ts +3 -2
  41. package/dist/manifest/manifest-policy.d.ts.map +1 -1
  42. package/dist/manifest/manifest-policy.js +10 -3
  43. package/dist/manifest/manifest-policy.js.map +1 -1
  44. package/dist/manifest/project-build.d.ts +7 -5
  45. package/dist/manifest/project-build.d.ts.map +1 -1
  46. package/dist/manifest/project-build.js +11 -5
  47. package/dist/manifest/project-build.js.map +1 -1
  48. package/dist/manifest/test-support.d.ts +10 -0
  49. package/dist/manifest/test-support.d.ts.map +1 -0
  50. package/dist/manifest/test-support.js +52 -0
  51. package/dist/manifest/test-support.js.map +1 -0
  52. package/dist/packaged-app/config.js +2 -2
  53. package/dist/packaged-app/config.js.map +1 -1
  54. package/dist/react-router/config.d.ts.map +1 -1
  55. package/dist/react-router/config.js +16 -2
  56. package/dist/react-router/config.js.map +1 -1
  57. package/dist/react-router/options.d.ts +10 -0
  58. package/dist/react-router/options.d.ts.map +1 -0
  59. package/dist/react-router/options.js +13 -0
  60. package/dist/react-router/options.js.map +1 -0
  61. package/dist/test-files/config.d.ts.map +1 -1
  62. package/dist/test-files/config.js +15 -4
  63. package/dist/test-files/config.js.map +1 -1
  64. package/dist/test-files/no-catch-all-msw-handler.d.ts +10 -0
  65. package/dist/test-files/no-catch-all-msw-handler.d.ts.map +1 -0
  66. package/dist/test-files/no-catch-all-msw-handler.js +16 -0
  67. package/dist/test-files/no-catch-all-msw-handler.js.map +1 -0
  68. package/dist/test-files/no-direct-msw-server.d.ts +12 -0
  69. package/dist/test-files/no-direct-msw-server.d.ts.map +1 -0
  70. package/dist/test-files/no-direct-msw-server.js +67 -0
  71. package/dist/test-files/no-direct-msw-server.js.map +1 -0
  72. package/dist/test-files/no-process-env-write.d.ts +10 -0
  73. package/dist/test-files/no-process-env-write.d.ts.map +1 -0
  74. package/dist/test-files/no-process-env-write.js +21 -0
  75. package/dist/test-files/no-process-env-write.js.map +1 -0
  76. package/dist/test-files/no-timer-race.d.ts +13 -0
  77. package/dist/test-files/no-timer-race.d.ts.map +1 -0
  78. package/dist/test-files/no-timer-race.js +144 -0
  79. package/dist/test-files/no-timer-race.js.map +1 -0
  80. package/package.json +1 -1
  81. package/dist/test-files/require-msw-error-on-unhandled-request.d.ts +0 -11
  82. package/dist/test-files/require-msw-error-on-unhandled-request.d.ts.map +0 -1
  83. package/dist/test-files/require-msw-error-on-unhandled-request.js +0 -17
  84. package/dist/test-files/require-msw-error-on-unhandled-request.js.map +0 -1
@@ -0,0 +1,144 @@
1
+ import { identifierName, isAstNode, isType, } from "../authoring/ast.js";
2
+ /** Timers that take a callback: `setTimeout(() => reject(...), ms)`. */
3
+ const CALLBACK_TIMERS = new Set(['setTimeout']);
4
+ /** Timers that return a promise: `sleep(ms)`, `delay(ms)`, and `setTimeout(ms)` of `node:timers/promises`. */
5
+ const PROMISE_TIMERS = new Set(['sleep', 'delay', 'setTimeout']);
6
+ function calleeName(call) {
7
+ const callee = call['callee'];
8
+ if (isType(callee, 'MemberExpression'))
9
+ return identifierName(callee['property']);
10
+ return identifierName(callee);
11
+ }
12
+ function isTimerCall(node, names) {
13
+ if (!isType(node, 'CallExpression'))
14
+ return false;
15
+ const name = calleeName(node);
16
+ return name !== undefined && names.has(name);
17
+ }
18
+ /** Whether a reference to `variable` sits in the arguments of a callback timer. */
19
+ function calledByTimer(variable) {
20
+ return (variable?.references ?? []).some(({ identifier }) => {
21
+ let child = identifier;
22
+ let parent = isAstNode(child) ? child['parent'] : undefined;
23
+ while (isAstNode(parent)) {
24
+ if (isTimerCall(parent, CALLBACK_TIMERS) &&
25
+ Array.isArray(parent['arguments']) &&
26
+ parent['arguments'].includes(child)) {
27
+ return true;
28
+ }
29
+ child = parent;
30
+ parent = parent['parent'];
31
+ }
32
+ return false;
33
+ });
34
+ }
35
+ function declared(context, node, name) {
36
+ return context.sourceCode
37
+ .getDeclaredVariables(node)
38
+ .find((variable) => variable.name === name);
39
+ }
40
+ /** `new Promise((_, reject) => setTimeout(() => reject(...), ms))`. */
41
+ function rejectingExecutor(context, node) {
42
+ if (identifierName(node['callee']) !== 'Promise')
43
+ return false;
44
+ const executor = Array.isArray(node['arguments'])
45
+ ? node['arguments'][0]
46
+ : undefined;
47
+ if (!isType(executor, 'ArrowFunctionExpression') &&
48
+ !isType(executor, 'FunctionExpression')) {
49
+ return false;
50
+ }
51
+ const params = Array.isArray(executor['params']) ? executor['params'] : [];
52
+ return calledByTimer(declared(context, executor, identifierName(params[1])));
53
+ }
54
+ /** `sleep(ms).then(() => { throw ... })`. */
55
+ function throwingContinuation(node) {
56
+ const callee = node['callee'];
57
+ if (!isType(callee, 'MemberExpression') ||
58
+ identifierName(callee['property']) !== 'then' ||
59
+ !isTimerCall(callee['object'], PROMISE_TIMERS)) {
60
+ return false;
61
+ }
62
+ const onFulfilled = Array.isArray(node['arguments'])
63
+ ? node['arguments'][0]
64
+ : undefined;
65
+ const body = isAstNode(onFulfilled) ? onFulfilled['body'] : undefined;
66
+ return (isType(body, 'BlockStatement') &&
67
+ Array.isArray(body['body']) &&
68
+ body['body'].some((statement) => isType(statement, 'ThrowStatement')));
69
+ }
70
+ /**
71
+ * `const { promise, reject } = Promise.withResolvers()`, or any other
72
+ * destructured `reject`, with `reject` called by a timer.
73
+ */
74
+ function rejectingResolvers(context, declarator) {
75
+ const pattern = declarator['id'];
76
+ if (!isType(pattern, 'ObjectPattern'))
77
+ return false;
78
+ const properties = pattern['properties'];
79
+ if (!Array.isArray(properties))
80
+ return false;
81
+ const reject = properties.find((property) => isType(property, 'Property') &&
82
+ identifierName(property['key']) === 'reject');
83
+ return (isAstNode(reject) &&
84
+ calledByTimer(declared(context, declarator, identifierName(reject['value']))));
85
+ }
86
+ function rejectsOnTimer(context, element, resolveBinding) {
87
+ if (isType(element, 'NewExpression')) {
88
+ return rejectingExecutor(context, element);
89
+ }
90
+ if (isType(element, 'CallExpression'))
91
+ return throwingContinuation(element);
92
+ if (!resolveBinding || !isType(element, 'Identifier'))
93
+ return false;
94
+ const reference = context.sourceCode
95
+ .getScope(element)
96
+ .references.find(({ identifier }) => identifier === element);
97
+ const definition = reference?.resolved?.defs[0];
98
+ if (definition?.type !== 'Variable' || !isAstNode(definition.node)) {
99
+ return false;
100
+ }
101
+ const declarator = definition.node;
102
+ return isType(declarator['id'], 'Identifier')
103
+ ? rejectsOnTimer(context, declarator['init'], false)
104
+ : rejectingResolvers(context, declarator);
105
+ }
106
+ /**
107
+ * A race against a timer that rejects fails the test when the promise is late,
108
+ * with an error the test wrote itself, and leaves the promise running. A
109
+ * timeout belongs to the test (`{ timeout }`), or to `settleWithin`, which
110
+ * names what was late. Follows one variable: a timer built in a helper that
111
+ * returns it is not seen. A timer that resolves a marker
112
+ * (`sleep(ms).then(() => false)`, `delay(ms, 'pending')`) asserts that the
113
+ * promise stays pending, which is a different check, and stays allowed.
114
+ */
115
+ const rule = {
116
+ meta: {
117
+ type: 'problem',
118
+ docs: {
119
+ description: 'Disallow Promise.race against a timer that rejects',
120
+ },
121
+ schema: [],
122
+ messages: {
123
+ matched: 'This race fails the test when the promise is late: use settleWithin(promise, label, ms) from @zukhruf/testing/async, or give the test its own { timeout }.',
124
+ },
125
+ },
126
+ create(context) {
127
+ return {
128
+ 'CallExpression[callee.object.name="Promise"][callee.property.name="race"] > ArrayExpression.arguments'(array) {
129
+ if (!isType(array, 'ArrayExpression'))
130
+ return;
131
+ const elements = Array.isArray(array['elements'])
132
+ ? array['elements']
133
+ : [];
134
+ for (const element of elements) {
135
+ if (isAstNode(element) && rejectsOnTimer(context, element, true)) {
136
+ context.report({ node: element, messageId: 'matched' });
137
+ }
138
+ }
139
+ },
140
+ };
141
+ },
142
+ };
143
+ export default rule;
144
+ //# sourceMappingURL=no-timer-race.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-timer-race.js","sourceRoot":"","sources":["../../src/test-files/no-timer-race.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zukhruf/eslint",
3
- "version": "0.3.41",
3
+ "version": "0.3.43",
4
4
  "description": "ESLint rules and configs shared across workspaces. Every check is its own named rule, so a repo's own config cannot silently erase it.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,11 +0,0 @@
1
- /**
2
- * msw answers only what a handler lists. Without this option an unstubbed
3
- * request is warned about and sent to the real network, so the test passes on
4
- * a live dependency it never meant to touch. msw 3 names the option
5
- * `onUnhandledFrame`; msw 2 named it `onUnhandledRequest`. Scoped by the
6
- * `msw/node` import; a `listen()` on something else in the same file, called
7
- * with no argument or an object, is the one known false positive.
8
- */
9
- declare const _default: import("eslint").Rule.RuleModule;
10
- export default _default;
11
- //# sourceMappingURL=require-msw-error-on-unhandled-request.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"require-msw-error-on-unhandled-request.d.ts","sourceRoot":"","sources":["../../src/test-files/require-msw-error-on-unhandled-request.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;;AACH,wBAOG"}
@@ -1,17 +0,0 @@
1
- import { selectorRule } from "../authoring/selector-rule.js";
2
- /**
3
- * msw answers only what a handler lists. Without this option an unstubbed
4
- * request is warned about and sent to the real network, so the test passes on
5
- * a live dependency it never meant to touch. msw 3 names the option
6
- * `onUnhandledFrame`; msw 2 named it `onUnhandledRequest`. Scoped by the
7
- * `msw/node` import; a `listen()` on something else in the same file, called
8
- * with no argument or an object, is the one known false positive.
9
- */
10
- export default selectorRule({
11
- description: "Require msw's server.listen() to fail on unhandled requests",
12
- selectors: [
13
- 'Program:has(ImportDeclaration[source.value="msw/node"]) CallExpression[callee.property.name="listen"]:matches([arguments.length=0], [arguments.0.type="ObjectExpression"]):not(:has(Property[key.name=/^onUnhandled(Frame|Request)$/] > Literal[value="error"]))',
14
- ],
15
- message: "msw: server.listen() must pass { onUnhandledFrame: 'error' } (msw 2: onUnhandledRequest) so an unstubbed request fails the test instead of reaching the network.",
16
- });
17
- //# sourceMappingURL=require-msw-error-on-unhandled-request.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"require-msw-error-on-unhandled-request.js","sourceRoot":"","sources":["../../src/test-files/require-msw-error-on-unhandled-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D;;;;;;;GAOG;AACH,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,6DAA6D;IAC1E,SAAS,EAAE;QACT,kQAAkQ;KACnQ;IACD,OAAO,EACL,kKAAkK;CACrK,CAAC,CAAC"}