@zukhruf/eslint 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +138 -0
- package/dist/authoring/ast.d.ts +10 -0
- package/dist/authoring/ast.d.ts.map +1 -0
- package/dist/authoring/ast.js +22 -0
- package/dist/authoring/ast.js.map +1 -0
- package/dist/authoring/import-ban.d.ts +14 -0
- package/dist/authoring/import-ban.d.ts.map +1 -0
- package/dist/authoring/import-ban.js +32 -0
- package/dist/authoring/import-ban.js.map +1 -0
- package/dist/authoring/path-scope.d.ts +12 -0
- package/dist/authoring/path-scope.d.ts.map +1 -0
- package/dist/authoring/path-scope.js +28 -0
- package/dist/authoring/path-scope.js.map +1 -0
- package/dist/authoring/rule-module.d.ts +14 -0
- package/dist/authoring/rule-module.d.ts.map +1 -0
- package/dist/authoring/rule-module.js +23 -0
- package/dist/authoring/rule-module.js.map +1 -0
- package/dist/authoring/scoped-rule.d.ts +8 -0
- package/dist/authoring/scoped-rule.d.ts.map +1 -0
- package/dist/authoring/scoped-rule.js +12 -0
- package/dist/authoring/scoped-rule.js.map +1 -0
- package/dist/authoring/selector-rule.d.ts +17 -0
- package/dist/authoring/selector-rule.d.ts.map +1 -0
- package/dist/authoring/selector-rule.js +23 -0
- package/dist/authoring/selector-rule.js.map +1 -0
- package/dist/base/config.d.ts +8 -0
- package/dist/base/config.d.ts.map +1 -0
- package/dist/base/config.js +122 -0
- package/dist/base/config.js.map +1 -0
- package/dist/base/options.d.ts +23 -0
- package/dist/base/options.d.ts.map +1 -0
- package/dist/base/options.js +22 -0
- package/dist/base/options.js.map +1 -0
- package/dist/concept.d.ts +16 -0
- package/dist/concept.d.ts.map +1 -0
- package/dist/concept.js +5 -0
- package/dist/concept.js.map +1 -0
- package/dist/diagnostics/config.d.ts +4 -0
- package/dist/diagnostics/config.d.ts.map +1 -0
- package/dist/diagnostics/config.js +25 -0
- package/dist/diagnostics/config.js.map +1 -0
- package/dist/diagnostics/consistent-event-name.d.ts +4 -0
- package/dist/diagnostics/consistent-event-name.d.ts.map +1 -0
- package/dist/diagnostics/consistent-event-name.js +72 -0
- package/dist/diagnostics/consistent-event-name.js.map +1 -0
- package/dist/diagnostics/no-fabricated-fallback.d.ts +4 -0
- package/dist/diagnostics/no-fabricated-fallback.d.ts.map +1 -0
- package/dist/diagnostics/no-fabricated-fallback.js +116 -0
- package/dist/diagnostics/no-fabricated-fallback.js.map +1 -0
- package/dist/diagnostics/no-hardcoded-id-shape.d.ts +4 -0
- package/dist/diagnostics/no-hardcoded-id-shape.d.ts.map +1 -0
- package/dist/diagnostics/no-hardcoded-id-shape.js +73 -0
- package/dist/diagnostics/no-hardcoded-id-shape.js.map +1 -0
- package/dist/environment/config.d.ts +7 -0
- package/dist/environment/config.d.ts.map +1 -0
- package/dist/environment/config.js +28 -0
- package/dist/environment/config.js.map +1 -0
- package/dist/environment/no-default-for-path-env.d.ts +10 -0
- package/dist/environment/no-default-for-path-env.d.ts.map +1 -0
- package/dist/environment/no-default-for-path-env.js +124 -0
- package/dist/environment/no-default-for-path-env.js.map +1 -0
- package/dist/environment/no-single-env-read-wrapper.d.ts +10 -0
- package/dist/environment/no-single-env-read-wrapper.d.ts.map +1 -0
- package/dist/environment/no-single-env-read-wrapper.js +76 -0
- package/dist/environment/no-single-env-read-wrapper.js.map +1 -0
- package/dist/environment/no-undeclared-process-env.d.ts +11 -0
- package/dist/environment/no-undeclared-process-env.d.ts.map +1 -0
- package/dist/environment/no-undeclared-process-env.js +195 -0
- package/dist/environment/no-undeclared-process-env.js.map +1 -0
- package/dist/files.d.ts +16 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +27 -0
- package/dist/files.js.map +1 -0
- package/dist/hono/config.d.ts +3 -0
- package/dist/hono/config.d.ts.map +1 -0
- package/dist/hono/config.js +18 -0
- package/dist/hono/config.js.map +1 -0
- package/dist/hono/no-untyped-empty-json.d.ts +8 -0
- package/dist/hono/no-untyped-empty-json.d.ts.map +1 -0
- package/dist/hono/no-untyped-empty-json.js +14 -0
- package/dist/hono/no-untyped-empty-json.js.map +1 -0
- package/dist/imports/no-deepagents-agent.d.ts +3 -0
- package/dist/imports/no-deepagents-agent.d.ts.map +1 -0
- package/dist/imports/no-deepagents-agent.js +7 -0
- package/dist/imports/no-deepagents-agent.js.map +1 -0
- package/dist/imports/no-playwright-test.d.ts +3 -0
- package/dist/imports/no-playwright-test.d.ts.map +1 -0
- package/dist/imports/no-playwright-test.js +7 -0
- package/dist/imports/no-playwright-test.js.map +1 -0
- package/dist/imports/no-state-managers.d.ts +3 -0
- package/dist/imports/no-state-managers.d.ts.map +1 -0
- package/dist/imports/no-state-managers.js +15 -0
- package/dist/imports/no-state-managers.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/island/island-scope.d.ts +10 -0
- package/dist/island/island-scope.d.ts.map +1 -0
- package/dist/island/island-scope.js +21 -0
- package/dist/island/island-scope.js.map +1 -0
- package/dist/island/no-console.d.ts +9 -0
- package/dist/island/no-console.d.ts.map +1 -0
- package/dist/island/no-console.js +39 -0
- package/dist/island/no-console.js.map +1 -0
- package/dist/island/no-generic-port.d.ts +8 -0
- package/dist/island/no-generic-port.d.ts.map +1 -0
- package/dist/island/no-generic-port.js +14 -0
- package/dist/island/no-generic-port.js.map +1 -0
- package/dist/island/no-process-env.d.ts +3 -0
- package/dist/island/no-process-env.d.ts.map +1 -0
- package/dist/island/no-process-env.js +10 -0
- package/dist/island/no-process-env.js.map +1 -0
- package/dist/island/plugin.d.ts +25 -0
- package/dist/island/plugin.d.ts.map +1 -0
- package/dist/island/plugin.js +67 -0
- package/dist/island/plugin.js.map +1 -0
- package/dist/language/no-enum.d.ts +3 -0
- package/dist/language/no-enum.d.ts.map +1 -0
- package/dist/language/no-enum.js +7 -0
- package/dist/language/no-enum.js.map +1 -0
- package/dist/nx-policy/dependency-policy.d.ts +30 -0
- package/dist/nx-policy/dependency-policy.d.ts.map +1 -0
- package/dist/nx-policy/dependency-policy.js +31 -0
- package/dist/nx-policy/dependency-policy.js.map +1 -0
- package/dist/nx-policy/island-constraint.d.ts +10 -0
- package/dist/nx-policy/island-constraint.d.ts.map +1 -0
- package/dist/nx-policy/island-constraint.js +15 -0
- package/dist/nx-policy/island-constraint.js.map +1 -0
- package/dist/nx-policy/module-boundaries.d.ts +29 -0
- package/dist/nx-policy/module-boundaries.d.ts.map +1 -0
- package/dist/nx-policy/module-boundaries.js +20 -0
- package/dist/nx-policy/module-boundaries.js.map +1 -0
- package/dist/nx-project/config.d.ts +4 -0
- package/dist/nx-project/config.d.ts.map +1 -0
- package/dist/nx-project/config.js +20 -0
- package/dist/nx-project/config.js.map +1 -0
- package/dist/nx-project/no-missing-asset-input.d.ts +9 -0
- package/dist/nx-project/no-missing-asset-input.d.ts.map +1 -0
- package/dist/nx-project/no-missing-asset-input.js +209 -0
- package/dist/nx-project/no-missing-asset-input.js.map +1 -0
- package/dist/nx.d.ts +5 -0
- package/dist/nx.d.ts.map +1 -0
- package/dist/nx.js +5 -0
- package/dist/nx.js.map +1 -0
- package/dist/packaged-app/config.d.ts +4 -0
- package/dist/packaged-app/config.d.ts.map +1 -0
- package/dist/packaged-app/config.js +19 -0
- package/dist/packaged-app/config.js.map +1 -0
- package/dist/packaged-app/no-bare-spawn.d.ts +4 -0
- package/dist/packaged-app/no-bare-spawn.d.ts.map +1 -0
- package/dist/packaged-app/no-bare-spawn.js +175 -0
- package/dist/packaged-app/no-bare-spawn.js.map +1 -0
- package/dist/plugin.d.ts +14 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +48 -0
- package/dist/plugin.js.map +1 -0
- package/dist/pulumi/config.d.ts +3 -0
- package/dist/pulumi/config.d.ts.map +1 -0
- package/dist/pulumi/config.js +17 -0
- package/dist/pulumi/config.js.map +1 -0
- package/dist/pulumi/require-server-replace-guard.d.ts +4 -0
- package/dist/pulumi/require-server-replace-guard.d.ts.map +1 -0
- package/dist/pulumi/require-server-replace-guard.js +120 -0
- package/dist/pulumi/require-server-replace-guard.js.map +1 -0
- package/dist/react/config.d.ts +4 -0
- package/dist/react/config.d.ts.map +1 -0
- package/dist/react/config.js +13 -0
- package/dist/react/config.js.map +1 -0
- package/dist/react/require-combobox-popover-modal.d.ts +10 -0
- package/dist/react/require-combobox-popover-modal.d.ts.map +1 -0
- package/dist/react/require-combobox-popover-modal.js +101 -0
- package/dist/react/require-combobox-popover-modal.js.map +1 -0
- package/dist/react-router/config.d.ts +3 -0
- package/dist/react-router/config.d.ts.map +1 -0
- package/dist/react-router/config.js +34 -0
- package/dist/react-router/config.js.map +1 -0
- package/dist/react-router/no-internal-anchor.d.ts +8 -0
- package/dist/react-router/no-internal-anchor.d.ts.map +1 -0
- package/dist/react-router/no-internal-anchor.js +14 -0
- package/dist/react-router/no-internal-anchor.js.map +1 -0
- package/dist/react-router/no-raw-route-path.d.ts +9 -0
- package/dist/react-router/no-raw-route-path.d.ts.map +1 -0
- package/dist/react-router/no-raw-route-path.js +17 -0
- package/dist/react-router/no-raw-route-path.js.map +1 -0
- package/dist/react-router/require-loader-data-type-argument.d.ts +10 -0
- package/dist/react-router/require-loader-data-type-argument.d.ts.map +1 -0
- package/dist/react-router/require-loader-data-type-argument.js +16 -0
- package/dist/react-router/require-loader-data-type-argument.js.map +1 -0
- package/dist/tailwind/class-name-check.d.ts +12 -0
- package/dist/tailwind/class-name-check.d.ts.map +1 -0
- package/dist/tailwind/class-name-check.js +16 -0
- package/dist/tailwind/class-name-check.js.map +1 -0
- package/dist/tailwind/config.d.ts +3 -0
- package/dist/tailwind/config.d.ts.map +1 -0
- package/dist/tailwind/config.js +18 -0
- package/dist/tailwind/config.js.map +1 -0
- package/dist/tailwind/no-arbitrary-z-index.d.ts +3 -0
- package/dist/tailwind/no-arbitrary-z-index.d.ts.map +1 -0
- package/dist/tailwind/no-arbitrary-z-index.js +7 -0
- package/dist/tailwind/no-arbitrary-z-index.js.map +1 -0
- package/dist/tailwind/no-h-screen.d.ts +3 -0
- package/dist/tailwind/no-h-screen.d.ts.map +1 -0
- package/dist/tailwind/no-h-screen.js +7 -0
- package/dist/tailwind/no-h-screen.js.map +1 -0
- package/dist/tailwind/no-will-change.d.ts +3 -0
- package/dist/tailwind/no-will-change.d.ts.map +1 -0
- package/dist/tailwind/no-will-change.js +7 -0
- package/dist/tailwind/no-will-change.js.map +1 -0
- package/dist/test-files/config.d.ts +3 -0
- package/dist/test-files/config.d.ts.map +1 -0
- package/dist/test-files/config.js +16 -0
- package/dist/test-files/config.js.map +1 -0
- package/dist/test-files/no-test-lifecycle-hooks.d.ts +3 -0
- package/dist/test-files/no-test-lifecycle-hooks.d.ts.map +1 -0
- package/dist/test-files/no-test-lifecycle-hooks.js +9 -0
- package/dist/test-files/no-test-lifecycle-hooks.js.map +1 -0
- package/dist/test-files/require-msw-error-on-unhandled-request.d.ts +10 -0
- package/dist/test-files/require-msw-error-on-unhandled-request.d.ts.map +1 -0
- package/dist/test-files/require-msw-error-on-unhandled-request.js +16 -0
- package/dist/test-files/require-msw-error-on-unhandled-request.js.map +1 -0
- package/dist/workspace/project-manifest.d.ts +14 -0
- package/dist/workspace/project-manifest.d.ts.map +1 -0
- package/dist/workspace/project-manifest.js +45 -0
- package/dist/workspace/project-manifest.js.map +1 -0
- package/dist/workspace/workspace-root.d.ts +12 -0
- package/dist/workspace/workspace-root.d.ts.map +1 -0
- package/dist/workspace/workspace-root.js +46 -0
- package/dist/workspace/workspace-root.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/packaged-app/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,eAAe,CAAC;AAMrD,0FAA0F;AAC1F,eAAO,MAAM,WAAW,EAAE,OAYzB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { enable } from "../concept.js";
|
|
2
|
+
import { TESTS, TYPESCRIPT } from "../files.js";
|
|
3
|
+
import noBareSpawn from "./no-bare-spawn.js";
|
|
4
|
+
const rules = { 'no-bare-spawn': noBareSpawn };
|
|
5
|
+
/** An app installed and launched outside a terminal, which gets the OS's minimal PATH. */
|
|
6
|
+
export const packagedApp = {
|
|
7
|
+
name: 'packaged-app',
|
|
8
|
+
rules,
|
|
9
|
+
config: (plugins) => [
|
|
10
|
+
{
|
|
11
|
+
name: 'zukhruf/packaged-app',
|
|
12
|
+
files: TYPESCRIPT,
|
|
13
|
+
ignores: TESTS,
|
|
14
|
+
plugins,
|
|
15
|
+
rules: enable(rules),
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/packaged-app/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAE7C,MAAM,KAAK,GAAG,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;AAE/C,0FAA0F;AAC1F,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,IAAI,EAAE,cAAc;IACpB,KAAK;IACL,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;QACnB;YACE,IAAI,EAAE,sBAAsB;YAC5B,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,KAAK;YACd,OAAO;YACP,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;SACrB;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-bare-spawn.d.ts","sourceRoot":"","sources":["../../src/packaged-app/no-bare-spawn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AA2EnC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UAsHhB,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { identifierName, isAstNode, isRecord, isType, stringsAt, } from "../authoring/ast.js";
|
|
2
|
+
import { inRoots, isTestFile } from "../authoring/path-scope.js";
|
|
3
|
+
/**
|
|
4
|
+
* A packaged app launched from the GUI does not inherit the shell's PATH: on
|
|
5
|
+
* macOS it gets launchd's `/usr/bin:/bin:/usr/sbin:/sbin`. A subprocess spawned
|
|
6
|
+
* by bare name (`spawn('docker', …)`) works in every terminal run and fails with
|
|
7
|
+
* ENOENT in every packaged build, even while the tool is installed and running.
|
|
8
|
+
* `roots` scopes the rule to the code that ships inside the app; dev tooling
|
|
9
|
+
* may use PATH freely.
|
|
10
|
+
*/
|
|
11
|
+
const SUBPROCESS_MODULES = new Set([
|
|
12
|
+
'nano-spawn',
|
|
13
|
+
'node:child_process',
|
|
14
|
+
'child_process',
|
|
15
|
+
]);
|
|
16
|
+
// exec/execSync receive a whole shell command line; the others receive argv[0].
|
|
17
|
+
const SHELL_COMMAND_FUNCTIONS = new Set(['exec', 'execSync']);
|
|
18
|
+
const CHILD_PROCESS_FUNCTIONS = new Set([
|
|
19
|
+
'spawn',
|
|
20
|
+
'spawnSync',
|
|
21
|
+
'exec',
|
|
22
|
+
'execSync',
|
|
23
|
+
'execFile',
|
|
24
|
+
'execFileSync',
|
|
25
|
+
'fork',
|
|
26
|
+
]);
|
|
27
|
+
function literalCommand(argument) {
|
|
28
|
+
if (isType(argument, 'Literal') && typeof argument['value'] === 'string') {
|
|
29
|
+
return argument['value'];
|
|
30
|
+
}
|
|
31
|
+
if (isType(argument, 'TemplateLiteral')) {
|
|
32
|
+
const expressions = argument['expressions'];
|
|
33
|
+
const quasis = argument['quasis'];
|
|
34
|
+
if (Array.isArray(expressions) &&
|
|
35
|
+
expressions.length === 0 &&
|
|
36
|
+
Array.isArray(quasis) &&
|
|
37
|
+
quasis.length === 1) {
|
|
38
|
+
const [quasi] = quasis;
|
|
39
|
+
if (isType(quasi, 'TemplateElement')) {
|
|
40
|
+
const value = quasi['value'];
|
|
41
|
+
if (isRecord(value) && typeof value['cooked'] === 'string') {
|
|
42
|
+
return value['cooked'];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
/** The text before the first whitespace: the binary of a shell command line. */
|
|
50
|
+
function firstToken(command) {
|
|
51
|
+
const end = command.search(/\s/);
|
|
52
|
+
return end === -1 ? command : command.slice(0, end);
|
|
53
|
+
}
|
|
54
|
+
function isBareName(command) {
|
|
55
|
+
return (command.length > 0 && !command.includes('/') && !command.includes('\\'));
|
|
56
|
+
}
|
|
57
|
+
const rule = {
|
|
58
|
+
meta: {
|
|
59
|
+
type: 'problem',
|
|
60
|
+
docs: {
|
|
61
|
+
description: 'disallow spawning a subprocess by bare binary name — packaged apps run under launchd PATH where it never resolves',
|
|
62
|
+
},
|
|
63
|
+
messages: {
|
|
64
|
+
noBareSpawn: 'Subprocess command "{{command}}" resolves via PATH, and a GUI-launched packaged app inherits launchd\'s PATH (/usr/bin:/bin:/usr/sbin:/sbin) where it will ENOENT even while the tool is running — dev never reproduces this because terminal runs leak the shell PATH. Use an absolute path, or talk to the tool\'s daemon or API directly (for Docker, the Engine API socket instead of the docker CLI).',
|
|
65
|
+
},
|
|
66
|
+
schema: [
|
|
67
|
+
{
|
|
68
|
+
type: 'object',
|
|
69
|
+
additionalProperties: false,
|
|
70
|
+
properties: {
|
|
71
|
+
roots: {
|
|
72
|
+
type: 'array',
|
|
73
|
+
items: { type: 'string' },
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
defaultOptions: [{ roots: [] }],
|
|
79
|
+
},
|
|
80
|
+
create(context) {
|
|
81
|
+
const filename = context.physicalFilename;
|
|
82
|
+
if (isTestFile(filename))
|
|
83
|
+
return {};
|
|
84
|
+
if (!inRoots(filename, stringsAt(context.options[0], 'roots'))) {
|
|
85
|
+
return {};
|
|
86
|
+
}
|
|
87
|
+
// local binding name -> the subprocess function it refers to
|
|
88
|
+
const trackedBindings = new Map();
|
|
89
|
+
const trackedNamespaces = new Set();
|
|
90
|
+
function checkCall(node, spawnFunction) {
|
|
91
|
+
if (!isAstNode(node))
|
|
92
|
+
return;
|
|
93
|
+
const callArguments = node['arguments'];
|
|
94
|
+
if (!Array.isArray(callArguments))
|
|
95
|
+
return;
|
|
96
|
+
const command = literalCommand(callArguments[0]);
|
|
97
|
+
if (command === undefined)
|
|
98
|
+
return;
|
|
99
|
+
const binary = SHELL_COMMAND_FUNCTIONS.has(spawnFunction)
|
|
100
|
+
? firstToken(command)
|
|
101
|
+
: command;
|
|
102
|
+
if (isBareName(binary)) {
|
|
103
|
+
context.report({
|
|
104
|
+
node,
|
|
105
|
+
messageId: 'noBareSpawn',
|
|
106
|
+
data: { command: binary },
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
ImportDeclaration(node) {
|
|
112
|
+
if (!isAstNode(node))
|
|
113
|
+
return;
|
|
114
|
+
const source = node['source'];
|
|
115
|
+
if (!isType(source, 'Literal') ||
|
|
116
|
+
typeof source['value'] !== 'string' ||
|
|
117
|
+
!SUBPROCESS_MODULES.has(source['value'])) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const specifiers = node['specifiers'];
|
|
121
|
+
if (!Array.isArray(specifiers))
|
|
122
|
+
return;
|
|
123
|
+
for (const specifier of specifiers) {
|
|
124
|
+
const local = isType(specifier, 'ImportDefaultSpecifier')
|
|
125
|
+
? identifierName(specifier['local'])
|
|
126
|
+
: undefined;
|
|
127
|
+
if (local !== undefined) {
|
|
128
|
+
// nano-spawn's default export is argv-style spawn.
|
|
129
|
+
trackedBindings.set(local, 'spawn');
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (isType(specifier, 'ImportSpecifier')) {
|
|
133
|
+
const imported = identifierName(specifier['imported']);
|
|
134
|
+
const localName = identifierName(specifier['local']);
|
|
135
|
+
if (imported !== undefined &&
|
|
136
|
+
localName !== undefined &&
|
|
137
|
+
CHILD_PROCESS_FUNCTIONS.has(imported)) {
|
|
138
|
+
trackedBindings.set(localName, imported);
|
|
139
|
+
}
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
if (isType(specifier, 'ImportNamespaceSpecifier')) {
|
|
143
|
+
const namespace = identifierName(specifier['local']);
|
|
144
|
+
if (namespace !== undefined)
|
|
145
|
+
trackedNamespaces.add(namespace);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
CallExpression(node) {
|
|
150
|
+
if (!isAstNode(node))
|
|
151
|
+
return;
|
|
152
|
+
const callee = node['callee'];
|
|
153
|
+
const calleeName = identifierName(callee);
|
|
154
|
+
if (calleeName !== undefined) {
|
|
155
|
+
const spawnFunction = trackedBindings.get(calleeName);
|
|
156
|
+
if (spawnFunction !== undefined)
|
|
157
|
+
checkCall(node, spawnFunction);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (isType(callee, 'MemberExpression') && callee['computed'] !== true) {
|
|
161
|
+
const namespace = identifierName(callee['object']);
|
|
162
|
+
const method = identifierName(callee['property']);
|
|
163
|
+
if (namespace !== undefined &&
|
|
164
|
+
method !== undefined &&
|
|
165
|
+
trackedNamespaces.has(namespace) &&
|
|
166
|
+
CHILD_PROCESS_FUNCTIONS.has(method)) {
|
|
167
|
+
checkCall(node, method);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
export default rule;
|
|
175
|
+
//# sourceMappingURL=no-bare-spawn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-bare-spawn.js","sourceRoot":"","sources":["../../src/packaged-app/no-bare-spawn.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Linter } from 'eslint';
|
|
2
|
+
declare const plugin: {
|
|
3
|
+
meta: {
|
|
4
|
+
name: string;
|
|
5
|
+
version: string;
|
|
6
|
+
namespace: string;
|
|
7
|
+
};
|
|
8
|
+
rules: {
|
|
9
|
+
[k: string]: import("eslint").Rule.RuleModule;
|
|
10
|
+
};
|
|
11
|
+
configs: Record<string, Linter.Config<import("@eslint/core", { with: { "resolution-mode": "require" } }).RulesConfig>[]>;
|
|
12
|
+
};
|
|
13
|
+
export default plugin;
|
|
14
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AAyC7C,QAAA,MAAM,MAAM;;;;;;;;;;CAUa,CAAC;AAM1B,eAAe,MAAM,CAAC"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { findPackageJSON } from 'node:module';
|
|
3
|
+
import { isRecord } from "./authoring/ast.js";
|
|
4
|
+
import { base } from "./base/config.js";
|
|
5
|
+
import { diagnostics } from "./diagnostics/config.js";
|
|
6
|
+
import { env } from "./environment/config.js";
|
|
7
|
+
import { hono } from "./hono/config.js";
|
|
8
|
+
import { nxProjectJson } from "./nx-project/config.js";
|
|
9
|
+
import { packagedApp } from "./packaged-app/config.js";
|
|
10
|
+
import { pulumi } from "./pulumi/config.js";
|
|
11
|
+
import { reactRouter } from "./react-router/config.js";
|
|
12
|
+
import { react } from "./react/config.js";
|
|
13
|
+
import { tailwind } from "./tailwind/config.js";
|
|
14
|
+
import { tests } from "./test-files/config.js";
|
|
15
|
+
const concepts = [
|
|
16
|
+
base,
|
|
17
|
+
tests,
|
|
18
|
+
diagnostics,
|
|
19
|
+
env,
|
|
20
|
+
packagedApp,
|
|
21
|
+
react,
|
|
22
|
+
reactRouter,
|
|
23
|
+
hono,
|
|
24
|
+
tailwind,
|
|
25
|
+
pulumi,
|
|
26
|
+
nxProjectJson,
|
|
27
|
+
];
|
|
28
|
+
function packageVersion() {
|
|
29
|
+
const manifest = JSON.parse(readFileSync(findPackageJSON(import.meta.url) ?? '', 'utf8'));
|
|
30
|
+
return isRecord(manifest) && typeof manifest['version'] === 'string'
|
|
31
|
+
? manifest['version']
|
|
32
|
+
: '0.0.0';
|
|
33
|
+
}
|
|
34
|
+
const configs = {};
|
|
35
|
+
const plugin = {
|
|
36
|
+
meta: {
|
|
37
|
+
name: '@zukhruf/eslint',
|
|
38
|
+
version: packageVersion(),
|
|
39
|
+
namespace: 'zukhruf',
|
|
40
|
+
},
|
|
41
|
+
rules: Object.fromEntries(concepts.flatMap((concept) => Object.entries(concept.rules))),
|
|
42
|
+
configs,
|
|
43
|
+
};
|
|
44
|
+
for (const concept of concepts) {
|
|
45
|
+
configs[concept.name] = concept.config({ zukhruf: plugin });
|
|
46
|
+
}
|
|
47
|
+
export default plugin;
|
|
48
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAE/C,MAAM,QAAQ,GAAc;IAC1B,IAAI;IACJ,KAAK;IACL,WAAW;IACX,GAAG;IACH,WAAW;IACX,KAAK;IACL,WAAW;IACX,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,aAAa;CACd,CAAC;AAEF,SAAS,cAAc;IACrB,MAAM,QAAQ,GAAY,IAAI,CAAC,KAAK,CAClC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAC7D,CAAC;IACF,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,QAAQ;QAClE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QACrB,CAAC,CAAC,OAAO,CAAC;AACd,CAAC;AAED,MAAM,OAAO,GAAoC,EAAE,CAAC;AAEpD,MAAM,MAAM,GAAG;IACb,IAAI,EAAE;QACJ,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,cAAc,EAAE;QACzB,SAAS,EAAE,SAAS;KACrB;IACD,KAAK,EAAE,MAAM,CAAC,WAAW,CACvB,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAC7D;IACD,OAAO;CACgB,CAAC;AAE1B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;IAC/B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/pulumi/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,eAAe,CAAC;AAMrD,eAAO,MAAM,MAAM,EAAE,OAWpB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { enable } from "../concept.js";
|
|
2
|
+
import { TYPESCRIPT } from "../files.js";
|
|
3
|
+
import requireServerReplaceGuard from "./require-server-replace-guard.js";
|
|
4
|
+
const rules = { 'require-server-replace-guard': requireServerReplaceGuard };
|
|
5
|
+
export const pulumi = {
|
|
6
|
+
name: 'pulumi',
|
|
7
|
+
rules,
|
|
8
|
+
config: (plugins) => [
|
|
9
|
+
{
|
|
10
|
+
name: 'zukhruf/pulumi',
|
|
11
|
+
files: TYPESCRIPT,
|
|
12
|
+
plugins,
|
|
13
|
+
rules: enable(rules),
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/pulumi/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,yBAAyB,MAAM,mCAAmC,CAAC;AAE1E,MAAM,KAAK,GAAG,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,CAAC;AAE5E,MAAM,CAAC,MAAM,MAAM,GAAY;IAC7B,IAAI,EAAE,QAAQ;IACd,KAAK;IACL,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;QACnB;YACE,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,UAAU;YACjB,OAAO;YACP,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;SACrB;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"require-server-replace-guard.d.ts","sourceRoot":"","sources":["../../src/pulumi/require-server-replace-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAkFnC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UAqEhB,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { identifierName, isType, stringsAt, } from "../authoring/ast.js";
|
|
2
|
+
/**
|
|
3
|
+
* A server that sets `ignoreChanges` is one whose replacement someone already
|
|
4
|
+
* feared: it keeps state on its local disk. `protect: true` makes a routine
|
|
5
|
+
* `pulumi up` that plans a replacement fail instead of destroying that state.
|
|
6
|
+
* `resources` lists the `module.Class` names the rule checks.
|
|
7
|
+
*/
|
|
8
|
+
function memberName(callee) {
|
|
9
|
+
if (!isType(callee, 'MemberExpression')) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
const object = callee['object'];
|
|
13
|
+
const property = callee['property'];
|
|
14
|
+
if (isType(object, 'Identifier') &&
|
|
15
|
+
isType(property, 'Identifier') &&
|
|
16
|
+
callee['computed'] !== true) {
|
|
17
|
+
const objectName = identifierName(object);
|
|
18
|
+
const propertyName = identifierName(property);
|
|
19
|
+
return objectName && propertyName
|
|
20
|
+
? `${objectName}.${propertyName}`
|
|
21
|
+
: undefined;
|
|
22
|
+
}
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
function findProperty(objectExpression, key) {
|
|
26
|
+
const properties = objectExpression['properties'];
|
|
27
|
+
if (!Array.isArray(properties)) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
for (const property of properties) {
|
|
31
|
+
if (isType(property, 'Property') &&
|
|
32
|
+
identifierName(property['key']) === key) {
|
|
33
|
+
return property;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
function hasSpreadElement(objectExpression) {
|
|
39
|
+
const properties = objectExpression['properties'];
|
|
40
|
+
return (Array.isArray(properties) &&
|
|
41
|
+
properties.some((property) => isType(property, 'SpreadElement')));
|
|
42
|
+
}
|
|
43
|
+
function isExplicitlyDisabled(node) {
|
|
44
|
+
if (isType(node, 'Literal')) {
|
|
45
|
+
return !node['value'];
|
|
46
|
+
}
|
|
47
|
+
return identifierName(node) === 'undefined';
|
|
48
|
+
}
|
|
49
|
+
function unwrapToObjectExpression(node) {
|
|
50
|
+
let current = node;
|
|
51
|
+
while (isType(current, 'TSAsExpression') ||
|
|
52
|
+
isType(current, 'TSSatisfiesExpression') ||
|
|
53
|
+
isType(current, 'TSNonNullExpression')) {
|
|
54
|
+
current = current['expression'];
|
|
55
|
+
}
|
|
56
|
+
return isType(current, 'ObjectExpression') ? current : undefined;
|
|
57
|
+
}
|
|
58
|
+
const rule = {
|
|
59
|
+
meta: {
|
|
60
|
+
type: 'problem',
|
|
61
|
+
docs: {
|
|
62
|
+
description: 'require a replace guard (protect: true) on stateful Pulumi server resources that declare ignoreChanges',
|
|
63
|
+
},
|
|
64
|
+
messages: {
|
|
65
|
+
missingProtect: 'A {{resource}} that sets `ignoreChanges` is replace-sensitive (it holds state on local disk). Add `protect: true` to its resource options so a routine `pulumi up` hard-fails instead of silently replacing — and destroying — it. Remove protect deliberately to rebuild.',
|
|
66
|
+
},
|
|
67
|
+
schema: [
|
|
68
|
+
{
|
|
69
|
+
type: 'object',
|
|
70
|
+
additionalProperties: false,
|
|
71
|
+
properties: {
|
|
72
|
+
resources: {
|
|
73
|
+
type: 'array',
|
|
74
|
+
items: { type: 'string' },
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
defaultOptions: [{ resources: ['hcloud.Server'] }],
|
|
80
|
+
},
|
|
81
|
+
create(context) {
|
|
82
|
+
const resources = stringsAt(context.options[0], 'resources');
|
|
83
|
+
return {
|
|
84
|
+
NewExpression(node) {
|
|
85
|
+
if (!isType(node, 'NewExpression')) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const resourceName = memberName(node['callee']);
|
|
89
|
+
if (!resourceName || !resources.includes(resourceName)) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const args = node['arguments'];
|
|
93
|
+
if (!Array.isArray(args) || args.length < 3) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const options = unwrapToObjectExpression(args[2]);
|
|
97
|
+
if (!options) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (!findProperty(options, 'ignoreChanges')) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (hasSpreadElement(options)) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const protect = findProperty(options, 'protect');
|
|
107
|
+
if (protect && !isExplicitlyDisabled(protect['value'])) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
context.report({
|
|
111
|
+
node: protect ?? options,
|
|
112
|
+
messageId: 'missingProtect',
|
|
113
|
+
data: { resource: resourceName },
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
export default rule;
|
|
120
|
+
//# sourceMappingURL=require-server-replace-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"require-server-replace-guard.js","sourceRoot":"","sources":["../../src/pulumi/require-server-replace-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/react/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,eAAe,CAAC;AAMrD,kEAAkE;AAClE,eAAO,MAAM,KAAK,EAAE,OAMnB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { enable } from "../concept.js";
|
|
2
|
+
import { JSX } from "../files.js";
|
|
3
|
+
import requireComboboxPopoverModal from "./require-combobox-popover-modal.js";
|
|
4
|
+
const rules = { 'require-combobox-popover-modal': requireComboboxPopoverModal };
|
|
5
|
+
/** React components built from shadcn/ui and Radix primitives. */
|
|
6
|
+
export const react = {
|
|
7
|
+
name: 'react',
|
|
8
|
+
rules,
|
|
9
|
+
config: (plugins) => [
|
|
10
|
+
{ name: 'zukhruf/react', files: JSX, plugins, rules: enable(rules) },
|
|
11
|
+
],
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/react/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,2BAA2B,MAAM,qCAAqC,CAAC;AAE9E,MAAM,KAAK,GAAG,EAAE,gCAAgC,EAAE,2BAA2B,EAAE,CAAC;AAEhF,kEAAkE;AAClE,MAAM,CAAC,MAAM,KAAK,GAAY;IAC5B,IAAI,EAAE,OAAO;IACb,KAAK;IACL,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;QACnB,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;KACrE;CACF,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Rule } from 'eslint';
|
|
2
|
+
/**
|
|
3
|
+
* A modal <Dialog> locks scrolling with react-remove-scroll, which lets wheel
|
|
4
|
+
* events through only inside the dialog's subtree. A combobox <Popover> portals
|
|
5
|
+
* to document.body, outside that subtree, so its list silently stops scrolling
|
|
6
|
+
* with the wheel unless the popover holds its own lock (`modal`).
|
|
7
|
+
*/
|
|
8
|
+
declare const rule: Rule.RuleModule;
|
|
9
|
+
export default rule;
|
|
10
|
+
//# sourceMappingURL=require-combobox-popover-modal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"require-combobox-popover-modal.d.ts","sourceRoot":"","sources":["../../src/react/require-combobox-popover-modal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AA4DnC;;;;;GAKG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UAkDhB,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { isAstNode, isType } from "../authoring/ast.js";
|
|
2
|
+
// The opening tag of a JSX element, but only for the plain-identifier form
|
|
3
|
+
// (`<Popover>`). The member/namespaced forms (`<Popover.Root>`) are not this
|
|
4
|
+
// rule's concern — the shadcn wrapper this rule guards is always used as a bare
|
|
5
|
+
// identifier.
|
|
6
|
+
function plainTag(node) {
|
|
7
|
+
if (!isType(node, 'JSXElement'))
|
|
8
|
+
return undefined;
|
|
9
|
+
const opening = node['openingElement'];
|
|
10
|
+
if (!isAstNode(opening))
|
|
11
|
+
return undefined;
|
|
12
|
+
const name = opening['name'];
|
|
13
|
+
if (!isType(name, 'JSXIdentifier') || typeof name['name'] !== 'string') {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
return { opening, name, text: name['name'] };
|
|
17
|
+
}
|
|
18
|
+
function readModal(opening) {
|
|
19
|
+
const attributes = opening['attributes'];
|
|
20
|
+
const list = Array.isArray(attributes) ? attributes : [];
|
|
21
|
+
let hasSpread = false;
|
|
22
|
+
for (const attribute of list) {
|
|
23
|
+
if (isType(attribute, 'JSXSpreadAttribute')) {
|
|
24
|
+
hasSpread = true;
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (!isType(attribute, 'JSXAttribute'))
|
|
28
|
+
continue;
|
|
29
|
+
const name = attribute['name'];
|
|
30
|
+
if (!isType(name, 'JSXIdentifier') || name['name'] !== 'modal')
|
|
31
|
+
continue;
|
|
32
|
+
const value = attribute['value'];
|
|
33
|
+
if (value === null)
|
|
34
|
+
return { kind: 'ok' }; // `<Popover modal>`
|
|
35
|
+
if (isType(value, 'JSXExpressionContainer')) {
|
|
36
|
+
const expression = value['expression'];
|
|
37
|
+
if (isType(expression, 'Literal') && expression['value'] === false) {
|
|
38
|
+
return { kind: 'false', attribute };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// `modal={true}`, `modal={someVar}`, `modal="..."` — leave the author's
|
|
42
|
+
// explicit/dynamic choice alone.
|
|
43
|
+
return { kind: 'ok' };
|
|
44
|
+
}
|
|
45
|
+
// A spread could supply `modal` at runtime; too imprecise to flag.
|
|
46
|
+
return hasSpread ? { kind: 'ok' } : { kind: 'absent' };
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* A modal <Dialog> locks scrolling with react-remove-scroll, which lets wheel
|
|
50
|
+
* events through only inside the dialog's subtree. A combobox <Popover> portals
|
|
51
|
+
* to document.body, outside that subtree, so its list silently stops scrolling
|
|
52
|
+
* with the wheel unless the popover holds its own lock (`modal`).
|
|
53
|
+
*/
|
|
54
|
+
const rule = {
|
|
55
|
+
meta: {
|
|
56
|
+
type: 'problem',
|
|
57
|
+
fixable: 'code',
|
|
58
|
+
docs: {
|
|
59
|
+
description: 'Require `modal` on a <Popover> that wraps a <Command> combobox so wheel scrolling survives inside a modal <Dialog>',
|
|
60
|
+
},
|
|
61
|
+
messages: {
|
|
62
|
+
requireModal: 'A <Popover> wrapping a <Command> combobox must set `modal`. Rendered inside a modal <Dialog>, react-remove-scroll allows wheel events only within the dialog subtree; this popover portals to document.body, so without its own lock the wheel is silently canceled (arrow keys still work via cmdk scrollIntoView). Add `modal`, or disable this line if this popover is never mounted inside a modal Dialog.',
|
|
63
|
+
noExplicitFalse: '`modal={false}` on a <Popover> wrapping a <Command> combobox reintroduces the wheel-scroll bug inside a modal <Dialog>. Remove it (default to `modal`), or disable this line if this popover is never mounted inside a modal Dialog.',
|
|
64
|
+
},
|
|
65
|
+
schema: [],
|
|
66
|
+
},
|
|
67
|
+
create(context) {
|
|
68
|
+
const reported = new Set();
|
|
69
|
+
return {
|
|
70
|
+
JSXElement(node) {
|
|
71
|
+
if (plainTag(node)?.text !== 'Command')
|
|
72
|
+
return;
|
|
73
|
+
// The nearest syntactic ancestor, so an enclosing <Popover> is matched
|
|
74
|
+
// only when the <Command> is genuinely nested inside it in the same
|
|
75
|
+
// file — the co-located shadcn combobox shape — never a sibling
|
|
76
|
+
// <Popover> elsewhere in the module.
|
|
77
|
+
const popover = context.sourceCode
|
|
78
|
+
.getAncestors(node)
|
|
79
|
+
.map(plainTag)
|
|
80
|
+
.findLast((tag) => tag?.text === 'Popover');
|
|
81
|
+
if (!popover || reported.has(popover.opening))
|
|
82
|
+
return;
|
|
83
|
+
const modal = readModal(popover.opening);
|
|
84
|
+
if (modal.kind === 'ok')
|
|
85
|
+
return;
|
|
86
|
+
reported.add(popover.opening);
|
|
87
|
+
if (modal.kind === 'absent') {
|
|
88
|
+
context.report({
|
|
89
|
+
node: popover.opening,
|
|
90
|
+
messageId: 'requireModal',
|
|
91
|
+
fix: (fixer) => fixer.insertTextAfter(popover.name, ' modal'),
|
|
92
|
+
});
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
context.report({ node: modal.attribute, messageId: 'noExplicitFalse' });
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
export default rule;
|
|
101
|
+
//# sourceMappingURL=require-combobox-popover-modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"require-combobox-popover-modal.js","sourceRoot":"","sources":["../../src/react/require-combobox-popover-modal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/react-router/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,eAAe,CAAC;AAYrD,eAAO,MAAM,WAAW,EAAE,OAsBzB,CAAC"}
|