@luma-layered-ts/eslint-plugin 1.4.0 → 1.6.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.
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@typescript-eslint/utils");
4
+ const create_rule_js_1 = require("../create-rule.js");
5
+ const layers_js_1 = require("../layers.js");
6
+ const defaultOptions = {};
7
+ const TYPES_PACKAGE = "@luma-layered-ts/types";
8
+ // Layers that convert between canonical and encoded representations
9
+ const CODEC_LAYERS = new Set(["adapter", "infra"]);
10
+ // `parse`, `parseMove`, `decode_v2` match; `parsed`, `decoder`, `parser` do not
11
+ const CODEC_NAME = /^(?:serialize|deserialize|encode|decode|parse)(?=[A-Z0-9_]|$)/;
12
+ function isFunctionNode(node) {
13
+ return (node?.type === utils_1.AST_NODE_TYPES.ArrowFunctionExpression ||
14
+ node?.type === utils_1.AST_NODE_TYPES.FunctionExpression);
15
+ }
16
+ function keyName(key) {
17
+ if (key.type === utils_1.AST_NODE_TYPES.Identifier)
18
+ return key.name;
19
+ if (key.type === utils_1.AST_NODE_TYPES.Literal && typeof key.value === "string") {
20
+ return key.value;
21
+ }
22
+ return null;
23
+ }
24
+ exports.default = (0, create_rule_js_1.createRule)({
25
+ name: "codec-placement",
26
+ meta: {
27
+ type: "problem",
28
+ docs: {
29
+ description: "String representations are produced in adapter: functions named serialize*/deserialize*/encode*/decode*/parse* are defined only in adapter (or infra), and DisplayText.make is called only in adapter.",
30
+ },
31
+ messages: {
32
+ codecOutsideAdapter: "'{{name}}' is named as a codec (canonical <-> encoded). Define it in adapter, not in '{{layer}}'.",
33
+ displayTextOutsideAdapter: "DisplayText.make is for display formatters in adapter. In '{{layer}}', receive DisplayText from adapter instead of creating it.",
34
+ },
35
+ schema: [],
36
+ },
37
+ defaultOptions: [defaultOptions],
38
+ create(context) {
39
+ const filePath = context.filename;
40
+ if ((0, layers_js_1.isTestFile)(filePath))
41
+ return {};
42
+ const layer = (0, layers_js_1.getLayerFromPath)(filePath);
43
+ if (!layer)
44
+ return {};
45
+ const checkCodecs = !CODEC_LAYERS.has(layer);
46
+ const checkDisplayText = layer !== "adapter";
47
+ if (!checkCodecs && !checkDisplayText)
48
+ return {};
49
+ // Local names bound to DisplayText, or to the whole types package (namespace import)
50
+ const displayTextLocals = new Set();
51
+ const typesNamespaces = new Set();
52
+ function reportDisplayText(node) {
53
+ context.report({
54
+ node,
55
+ messageId: "displayTextOutsideAdapter",
56
+ data: { layer },
57
+ });
58
+ }
59
+ function check(node, name) {
60
+ if (!checkCodecs || name === null || !CODEC_NAME.test(name))
61
+ return;
62
+ context.report({
63
+ node,
64
+ messageId: "codecOutsideAdapter",
65
+ data: { name, layer },
66
+ });
67
+ }
68
+ return {
69
+ ImportDeclaration(node) {
70
+ if (!checkDisplayText || node.source.value !== TYPES_PACKAGE)
71
+ return;
72
+ for (const specifier of node.specifiers) {
73
+ if (specifier.type === utils_1.AST_NODE_TYPES.ImportNamespaceSpecifier) {
74
+ typesNamespaces.add(specifier.local.name);
75
+ }
76
+ else if (specifier.type === utils_1.AST_NODE_TYPES.ImportSpecifier &&
77
+ keyName(specifier.imported) === "DisplayText") {
78
+ displayTextLocals.add(specifier.local.name);
79
+ }
80
+ }
81
+ },
82
+ // DisplayText.make(...) / Types.DisplayText.make(...)
83
+ MemberExpression(node) {
84
+ if (!checkDisplayText ||
85
+ node.computed ||
86
+ keyName(node.property) !== "make") {
87
+ return;
88
+ }
89
+ const target = node.object;
90
+ if ((target.type === utils_1.AST_NODE_TYPES.Identifier &&
91
+ displayTextLocals.has(target.name)) ||
92
+ (target.type === utils_1.AST_NODE_TYPES.MemberExpression &&
93
+ !target.computed &&
94
+ keyName(target.property) === "DisplayText" &&
95
+ target.object.type === utils_1.AST_NODE_TYPES.Identifier &&
96
+ typesNamespaces.has(target.object.name))) {
97
+ reportDisplayText(node);
98
+ }
99
+ },
100
+ FunctionDeclaration(node) {
101
+ if (node.id)
102
+ check(node.id, node.id.name);
103
+ },
104
+ VariableDeclarator(node) {
105
+ // const { make } = DisplayText
106
+ if (checkDisplayText &&
107
+ node.id.type === utils_1.AST_NODE_TYPES.ObjectPattern &&
108
+ node.init?.type === utils_1.AST_NODE_TYPES.Identifier &&
109
+ displayTextLocals.has(node.init.name) &&
110
+ node.id.properties.some((p) => p.type === utils_1.AST_NODE_TYPES.Property &&
111
+ !p.computed &&
112
+ keyName(p.key) === "make")) {
113
+ reportDisplayText(node);
114
+ }
115
+ if (node.id.type === utils_1.AST_NODE_TYPES.Identifier &&
116
+ isFunctionNode(node.init)) {
117
+ check(node.id, node.id.name);
118
+ }
119
+ },
120
+ MethodDefinition(node) {
121
+ if (!node.computed)
122
+ check(node.key, keyName(node.key));
123
+ },
124
+ PropertyDefinition(node) {
125
+ if (!node.computed && isFunctionNode(node.value)) {
126
+ check(node.key, keyName(node.key));
127
+ }
128
+ },
129
+ Property(node) {
130
+ if (!node.computed &&
131
+ node.parent.type === utils_1.AST_NODE_TYPES.ObjectExpression &&
132
+ isFunctionNode(node.value)) {
133
+ check(node.key, keyName(node.key));
134
+ }
135
+ },
136
+ // interface Codec { serializeItem(i: Item): string }
137
+ TSMethodSignature(node) {
138
+ if (!node.computed)
139
+ check(node.key, keyName(node.key));
140
+ },
141
+ TSPropertySignature(node) {
142
+ if (!node.computed &&
143
+ node.typeAnnotation?.typeAnnotation.type ===
144
+ utils_1.AST_NODE_TYPES.TSFunctionType) {
145
+ check(node.key, keyName(node.key));
146
+ }
147
+ },
148
+ };
149
+ },
150
+ });
151
+ //# sourceMappingURL=codec-placement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec-placement.js","sourceRoot":"","sources":["../../src/rules/codec-placement.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  type Options = Record<string, never>;
2
- type MessageId = "importViolation" | "importNonLayer" | "encodedGlobal" | "schemaBoundary" | "encodedMethod";
2
+ type MessageId = "noDate" | "importViolation" | "importNonLayer" | "encodedGlobal" | "schemaBoundary" | "encodedMethod";
3
3
  declare const _default: import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleModule<MessageId, [Options], unknown, import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleListener> & {
4
4
  name: string;
5
5
  };
@@ -1 +1 @@
1
- {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/rules/next.ts"],"names":[],"mappings":"AAcA,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAKrC,KAAK,SAAS,GACV,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,eAAe,CAAC;;;;AAEpB,wBAwKG"}
1
+ {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/rules/next.ts"],"names":[],"mappings":"AAiBA,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAKrC,KAAK,SAAS,GACV,QAAQ,GACR,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,eAAe,CAAC;;;;AAEpB,wBAkLG"}
package/lib/rules/next.js CHANGED
@@ -13,6 +13,7 @@ exports.default = (0, create_rule_js_1.createRule)({
13
13
  description: "Enforce layered architecture for Next.js app router files. app/api/ has server wiring root constraints (import matrix only). app/ pages/layouts have ui/pages-equivalent constraints.",
14
14
  },
15
15
  messages: {
16
+ noDate: layers_js_1.NO_DATE_MESSAGE,
16
17
  importViolation: "'{{fromLayer}}' cannot import from '{{toLayer}}'.",
17
18
  importNonLayer: "Import '{{importPath}}' does not resolve to a recognized layer. Move the target into a layer directory.",
18
19
  encodedGlobal: "'{{name}}' is an encoded representation API. Not allowed in '{{layer}}'. Use canonical types (Effect.ts) instead.",
@@ -31,7 +32,8 @@ exports.default = (0, create_rule_js_1.createRule)({
31
32
  return {};
32
33
  const isApiRoute = layer === "app/api";
33
34
  function checkImport(importPath, node) {
34
- const toLayer = (0, layers_js_1.getLayerFromImport)(importPath);
35
+ const resolved = (0, layers_js_1.resolveImportPath)(importPath, filePath);
36
+ const toLayer = (0, layers_js_1.getLayerFromImport)(resolved);
35
37
  if (!toLayer) {
36
38
  if ((0, layers_js_1.isNonLayerAliasImport)(importPath)) {
37
39
  context.report({
@@ -53,6 +55,10 @@ exports.default = (0, create_rule_js_1.createRule)({
53
55
  // app/api: import matrix only (server-side wiring root)
54
56
  if (isApiRoute) {
55
57
  return {
58
+ "Identifier[name='Date']"(node) {
59
+ if ((0, layers_js_1.isDateReference)(node))
60
+ context.report({ node, messageId: "noDate" });
61
+ },
56
62
  ImportDeclaration(node) {
57
63
  checkImport(node.source.value, node);
58
64
  },
@@ -72,6 +78,10 @@ exports.default = (0, create_rule_js_1.createRule)({
72
78
  }
73
79
  // app/pages: same constraints as ui/pages
74
80
  return {
81
+ "Identifier[name='Date']"(node) {
82
+ if ((0, layers_js_1.isDateReference)(node))
83
+ context.report({ node, messageId: "noDate" });
84
+ },
75
85
  ImportDeclaration(node) {
76
86
  checkImport(node.source.value, node);
77
87
  },
@@ -1 +1 @@
1
- {"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/rules/next.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/rules/next.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  type Options = Record<string, never>;
2
- type MessageId = "importViolation" | "importNonLayer" | "encodedGlobal" | "schemaBoundary" | "encodedMethod" | "componentParseMethod";
2
+ type MessageId = "noDate" | "importViolation" | "importNonLayer" | "encodedGlobal" | "schemaBoundary" | "encodedMethod" | "componentParseMethod";
3
3
  declare const _default: import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleModule<MessageId, [Options], unknown, import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleListener> & {
4
4
  name: string;
5
5
  };
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/rules/react.ts"],"names":[],"mappings":"AAcA,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAQrC,KAAK,SAAS,GACV,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,sBAAsB,CAAC;;;;AAE3B,wBAiKG"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/rules/react.ts"],"names":[],"mappings":"AAiBA,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAarC,KAAK,SAAS,GACV,QAAQ,GACR,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,sBAAsB,CAAC;;;;AAE3B,wBAuKG"}
@@ -4,23 +4,29 @@ const utils_1 = require("@typescript-eslint/utils");
4
4
  const create_rule_js_1 = require("../create-rule.js");
5
5
  const layers_js_1 = require("../layers.js");
6
6
  const defaultOptions = {};
7
- const UI_LAYERS = new Set(["ui/hooks", "ui/components", "ui/pages"]);
8
- // components can call .display(), .trim(), .toString() — these don't interpret structure
9
- const COMPONENT_ALLOWED_METHODS = new Set(["display", "trim", "toString"]);
7
+ const UI_LAYERS = new Set([
8
+ "ui/hooks",
9
+ "ui/components",
10
+ "ui/containers",
11
+ "ui/pages",
12
+ ]);
13
+ // components can call .trim(), .toString() — these don't interpret structure
14
+ const COMPONENT_ALLOWED_METHODS = new Set(["trim", "toString"]);
10
15
  exports.default = (0, create_rule_js_1.createRule)({
11
16
  name: "react",
12
17
  meta: {
13
18
  type: "problem",
14
19
  docs: {
15
- description: "Enforce layered architecture for React UI layers (ui/hooks, ui/components, ui/pages). Checks imports, encoded representation globals, Schema boundary, and string interpretation.",
20
+ description: "Enforce layered architecture for React UI layers (ui/hooks, ui/components, ui/containers, ui/pages). Checks imports, encoded representation globals, Schema boundary, and string interpretation.",
16
21
  },
17
22
  messages: {
23
+ noDate: layers_js_1.NO_DATE_MESSAGE,
18
24
  importViolation: "'{{fromLayer}}' cannot import from '{{toLayer}}'.",
19
25
  importNonLayer: "Import '{{importPath}}' does not resolve to a recognized layer. Move the target into a layer directory.",
20
26
  encodedGlobal: "'{{name}}' is an encoded representation API. Not allowed in '{{layer}}'. Use canonical types (Effect.ts) instead.",
21
27
  schemaBoundary: "Schema.{{method}}() crosses the canonical/encoded boundary. Not allowed in '{{layer}}'. Decoding belongs in adapter.",
22
28
  encodedMethod: "'.{{method}}()' interprets encoded representation. Not allowed in '{{layer}}'.",
23
- componentParseMethod: "'.{{method}}()' interprets string structure. Components may only call .display() and .trim().",
29
+ componentParseMethod: "'.{{method}}()' interprets string structure. Components may only call .trim().",
24
30
  },
25
31
  schema: [],
26
32
  },
@@ -34,7 +40,8 @@ exports.default = (0, create_rule_js_1.createRule)({
34
40
  return {};
35
41
  const isComponent = layer === "ui/components";
36
42
  function checkImport(importPath, node) {
37
- const toLayer = (0, layers_js_1.getLayerFromImport)(importPath);
43
+ const resolved = (0, layers_js_1.resolveImportPath)(importPath, filePath);
44
+ const toLayer = (0, layers_js_1.getLayerFromImport)(resolved);
38
45
  if (!toLayer) {
39
46
  if ((0, layers_js_1.isNonLayerAliasImport)(importPath)) {
40
47
  context.report({
@@ -55,6 +62,10 @@ exports.default = (0, create_rule_js_1.createRule)({
55
62
  }
56
63
  return {
57
64
  // --- Import checks ---
65
+ "Identifier[name='Date']"(node) {
66
+ if ((0, layers_js_1.isDateReference)(node))
67
+ context.report({ node, messageId: "noDate" });
68
+ },
58
69
  ImportDeclaration(node) {
59
70
  checkImport(node.source.value, node);
60
71
  },
@@ -109,7 +120,7 @@ exports.default = (0, create_rule_js_1.createRule)({
109
120
  if (method === "toString")
110
121
  return;
111
122
  if (isComponent) {
112
- // Components: display/trim allowed, parse methods forbidden
123
+ // Components: trim allowed, parse methods forbidden
113
124
  if (COMPONENT_ALLOWED_METHODS.has(method))
114
125
  return;
115
126
  if (layers_js_1.STRING_INTERPRETATION_METHODS.has(method)) {
@@ -121,7 +132,7 @@ exports.default = (0, create_rule_js_1.createRule)({
121
132
  }
122
133
  }
123
134
  else {
124
- // hooks/pages: all string interpretation forbidden
135
+ // hooks/containers/pages: all string interpretation forbidden
125
136
  if (layers_js_1.STRING_INTERPRETATION_METHODS.has(method)) {
126
137
  context.report({
127
138
  node,
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/rules/react.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/rules/react.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ exports.default = (0, create_rule_js_1.createRule)({
11
11
  description: "Require all source files under src/ to belong to a recognized layer directory. Files outside layer directories bypass all layer constraint checks.",
12
12
  },
13
13
  messages: {
14
- noLayer: "This file is not in a recognized layer directory (src/{core,service,adapter,infra,ui/{hooks,components,pages},app/}). Move it to the appropriate layer so that import and encoding constraints are enforced.",
14
+ noLayer: "This file is not in a recognized layer directory (src/{core,service,adapter,infra,ui/{hooks,components,containers,pages},app/}). Move it to the appropriate layer so that import and encoding constraints are enforced.",
15
15
  },
16
16
  schema: [],
17
17
  },
@@ -1 +1 @@
1
- {"version":3,"file":"require-layer.js","sourceRoot":"","sources":["../../src/rules/require-layer.ts"],"names":[],"mappings":";;AAAA,sDAA+C;AAC/C,4CAA4D;AAG5D,MAAM,cAAc,GAAY,EAAE,CAAC;AAInC,kBAAe,IAAA,2BAAU,EAAuB;IAC9C,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,oJAAoJ;SACvJ;QACD,QAAQ,EAAE;YACR,OAAO,EACL,8MAA8M;SACjN;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,CAAC,cAAc,CAAC;IAChC,MAAM,CAAC,OAAO;QACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAElC,8BAA8B;QAC9B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,CAAC;QAE1C,+DAA+D;QAC/D,IAAI,IAAA,sBAAU,EAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpC,sCAAsC;QACtC,IAAI,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC;YAAE,OAAO,EAAE,CAAC;QAErD,MAAM,KAAK,GAAG,IAAA,4BAAgB,EAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,KAAK;YAAE,OAAO,EAAE,CAAC;QAErB,mEAAmE;QACnE,OAAO;YACL,OAAO,CAAC,IAAI;gBACV,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,SAAS;iBACrB,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"require-layer.js","sourceRoot":"","sources":["../../src/rules/require-layer.ts"],"names":[],"mappings":";;AAAA,sDAA+C;AAC/C,4CAA4D;AAG5D,MAAM,cAAc,GAAY,EAAE,CAAC;AAInC,kBAAe,IAAA,2BAAU,EAAuB;IAC9C,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,oJAAoJ;SACvJ;QACD,QAAQ,EAAE;YACR,OAAO,EACL,yNAAyN;SAC5N;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,CAAC,cAAc,CAAC;IAChC,MAAM,CAAC,OAAO;QACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAElC,8BAA8B;QAC9B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,CAAC;QAE1C,+DAA+D;QAC/D,IAAI,IAAA,sBAAU,EAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpC,sCAAsC;QACtC,IAAI,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC;YAAE,OAAO,EAAE,CAAC;QAErD,MAAM,KAAK,GAAG,IAAA,4BAAgB,EAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,KAAK;YAAE,OAAO,EAAE,CAAC;QAErB,mEAAmE;QACnE,OAAO;YACL,OAAO,CAAC,IAAI;gBACV,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,SAAS;iBACrB,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { TSESTree } from "@typescript-eslint/utils";
2
+ type Options = Record<string, never>;
3
+ type MessageId = "directiveOutsideUnsafeDir" | "effectOutsideUnsafeDir" | "lifecycleOutsideUnsafeDir" | "effectEscape" | "reactReexportAll" | "dynamicReactAccess";
4
+ export declare function isUnsafeDirFile(filePath: string): boolean;
5
+ export declare function findDirective(comment: TSESTree.Comment): string | null;
6
+ declare const _default: import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleModule<MessageId, [Options], unknown, import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleListener> & {
7
+ name: string;
8
+ };
9
+ export default _default;
10
+ //# sourceMappingURL=require-unsafe-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-unsafe-dir.d.ts","sourceRoot":"","sources":["../../src/rules/require-unsafe-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,QAAQ,EACT,MAAM,0BAA0B,CAAC;AAGlC,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAGrC,KAAK,SAAS,GACV,2BAA2B,GAC3B,wBAAwB,GACxB,2BAA2B,GAC3B,cAAc,GACd,kBAAkB,GAClB,oBAAoB,CAAC;AAEzB,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAiBD,wBAAgB,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAUtE;;;;AAwCD,wBAyKG"}
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isUnsafeDirFile = isUnsafeDirFile;
4
+ exports.findDirective = findDirective;
5
+ const utils_1 = require("@typescript-eslint/utils");
6
+ const create_rule_js_1 = require("../create-rule.js");
7
+ const defaultOptions = {};
8
+ function isUnsafeDirFile(filePath) {
9
+ return /\/_unsafe_\//.test(filePath);
10
+ }
11
+ // Directives that suppress static checks or coverage.
12
+ // `eslint <rule>: <severity>` inline config is only recognized in block comments.
13
+ const DIRECTIVE_PATTERNS = [
14
+ { pattern: /^eslint-disable(?:-line|-next-line)?(?=\s|$)/, blockOnly: false },
15
+ { pattern: /^eslint(?=\s)/, blockOnly: true },
16
+ { pattern: /^@ts-(?:ignore|expect-error|nocheck)\b/, blockOnly: false },
17
+ { pattern: /^(?:istanbul|c8|v8)\s+ignore\b/, blockOnly: false },
18
+ { pattern: /^node:coverage\s+(?:ignore|disable)\b/, blockOnly: false },
19
+ { pattern: /^biome-ignore\S*/, blockOnly: false },
20
+ { pattern: /^oxlint-disable\S*/, blockOnly: false },
21
+ ];
22
+ function findDirective(comment) {
23
+ // Leading `/` covers `/// @ts-ignore`, leading `*` covers `/** @ts-ignore */`
24
+ const text = comment.value.replace(/^[/*\s]+/, "");
25
+ const isBlock = comment.type === utils_1.AST_TOKEN_TYPES.Block;
26
+ for (const { pattern, blockOnly } of DIRECTIVE_PATTERNS) {
27
+ if (blockOnly && !isBlock)
28
+ continue;
29
+ const match = text.match(pattern);
30
+ if (match)
31
+ return match[0];
32
+ }
33
+ return null;
34
+ }
35
+ // React effect hooks: escape hatches that synchronize with the outside of React.
36
+ // Derived state, event handling and data fetching have safer alternatives.
37
+ const EFFECT_HOOKS = new Set([
38
+ "useEffect",
39
+ "useLayoutEffect",
40
+ "useInsertionEffect",
41
+ ]);
42
+ const REACT_MODULES = new Set(["react", "preact/hooks", "preact/compat"]);
43
+ // Class component counterparts of effect hooks
44
+ const LIFECYCLE_METHODS = new Set([
45
+ "componentDidMount",
46
+ "componentDidUpdate",
47
+ "componentWillUnmount",
48
+ "getSnapshotBeforeUpdate",
49
+ "componentWillMount",
50
+ "componentWillReceiveProps",
51
+ "componentWillUpdate",
52
+ "UNSAFE_componentWillMount",
53
+ "UNSAFE_componentWillReceiveProps",
54
+ "UNSAFE_componentWillUpdate",
55
+ ]);
56
+ function staticName(node) {
57
+ if (node.type === utils_1.AST_NODE_TYPES.Identifier)
58
+ return node.name;
59
+ if (node.type === utils_1.AST_NODE_TYPES.Literal && typeof node.value === "string") {
60
+ return node.value;
61
+ }
62
+ return null;
63
+ }
64
+ function isCallee(node) {
65
+ return (node.parent?.type === utils_1.AST_NODE_TYPES.CallExpression &&
66
+ node.parent.callee === node);
67
+ }
68
+ exports.default = (0, create_rule_js_1.createRule)({
69
+ name: "require-unsafe-dir",
70
+ meta: {
71
+ type: "problem",
72
+ docs: {
73
+ description: "Allow unsafe constructs only in files under a _unsafe_/ directory: check-suppressing directives (eslint-disable, @ts-ignore, coverage ignore, etc.), React effect hooks and class component lifecycle methods.",
74
+ },
75
+ messages: {
76
+ directiveOutsideUnsafeDir: "'{{directive}}' suppresses checks. Move the code that needs it into a _unsafe_/ directory.",
77
+ effectOutsideUnsafeDir: "'{{name}}' is an escape hatch. Move the code that needs it into a _unsafe_/ directory.",
78
+ lifecycleOutsideUnsafeDir: "'{{name}}' is the class component counterpart of an effect. Move the code that needs it into a _unsafe_/ directory.",
79
+ effectEscape: "'{{name}}' must be called directly. Re-exporting or aliasing it lets effects leave _unsafe_/.",
80
+ reactReexportAll: "Re-exporting all of '{{source}}' lets effect hooks leave _unsafe_/. Export by name.",
81
+ dynamicReactAccess: "Computed access on '{{name}}' hides which React API is used. Access it by name.",
82
+ },
83
+ schema: [],
84
+ },
85
+ defaultOptions: [defaultOptions],
86
+ create(context) {
87
+ const inUnsafeDir = isUnsafeDirFile(context.filename);
88
+ // Local names bound to the React module itself (default / namespace imports)
89
+ const reactNamespaces = new Set();
90
+ // Outside _unsafe_/: any use is reported. Inside: only uses other than a direct call.
91
+ function checkEffectUse(node, name, calledDirectly) {
92
+ if (!inUnsafeDir) {
93
+ context.report({
94
+ node,
95
+ messageId: "effectOutsideUnsafeDir",
96
+ data: { name },
97
+ });
98
+ }
99
+ else if (!calledDirectly) {
100
+ context.report({ node, messageId: "effectEscape", data: { name } });
101
+ }
102
+ }
103
+ function checkLifecycle(key, computed) {
104
+ if (inUnsafeDir || computed)
105
+ return;
106
+ const name = staticName(key);
107
+ if (name === null || !LIFECYCLE_METHODS.has(name))
108
+ return;
109
+ context.report({
110
+ node: key,
111
+ messageId: "lifecycleOutsideUnsafeDir",
112
+ data: { name },
113
+ });
114
+ }
115
+ return {
116
+ Program() {
117
+ if (inUnsafeDir)
118
+ return;
119
+ for (const comment of context.sourceCode.getAllComments()) {
120
+ const directive = findDirective(comment);
121
+ if (directive === null)
122
+ continue;
123
+ context.report({
124
+ loc: comment.loc,
125
+ messageId: "directiveOutsideUnsafeDir",
126
+ data: { directive },
127
+ });
128
+ }
129
+ },
130
+ ImportDeclaration(node) {
131
+ if (!REACT_MODULES.has(node.source.value))
132
+ return;
133
+ for (const specifier of node.specifiers) {
134
+ if (specifier.type !== utils_1.AST_NODE_TYPES.ImportSpecifier) {
135
+ reactNamespaces.add(specifier.local.name);
136
+ continue;
137
+ }
138
+ const name = staticName(specifier.imported);
139
+ if (name === null || !EFFECT_HOOKS.has(name))
140
+ continue;
141
+ if (!inUnsafeDir) {
142
+ checkEffectUse(specifier, name, false);
143
+ continue;
144
+ }
145
+ // import { useEffect } from "react" in _unsafe_/: every reference must be a call
146
+ for (const variable of context.sourceCode.getDeclaredVariables(specifier)) {
147
+ for (const reference of variable.references) {
148
+ // `typeof useEffect` is a value reference but only reads the type
149
+ if (!reference.isValueReference ||
150
+ reference.identifier.parent?.type === utils_1.AST_NODE_TYPES.TSTypeQuery) {
151
+ continue;
152
+ }
153
+ checkEffectUse(reference.identifier, name, isCallee(reference.identifier));
154
+ }
155
+ }
156
+ }
157
+ },
158
+ // export { useEffect } from "react"
159
+ ExportNamedDeclaration(node) {
160
+ if (node.source === null || !REACT_MODULES.has(node.source.value)) {
161
+ return;
162
+ }
163
+ for (const specifier of node.specifiers) {
164
+ const name = staticName(specifier.local);
165
+ if (name !== null && EFFECT_HOOKS.has(name)) {
166
+ context.report({
167
+ node: specifier,
168
+ messageId: "effectEscape",
169
+ data: { name },
170
+ });
171
+ }
172
+ }
173
+ },
174
+ // export * from "react"
175
+ ExportAllDeclaration(node) {
176
+ if (!REACT_MODULES.has(node.source.value))
177
+ return;
178
+ context.report({
179
+ node,
180
+ messageId: "reactReexportAll",
181
+ data: { source: node.source.value },
182
+ });
183
+ },
184
+ // React.useEffect / React["useEffect"] / React[key]
185
+ MemberExpression(node) {
186
+ const name = staticName(node.property);
187
+ if (name !== null &&
188
+ (!node.computed || node.property.type === utils_1.AST_NODE_TYPES.Literal)) {
189
+ if (EFFECT_HOOKS.has(name))
190
+ checkEffectUse(node, name, isCallee(node));
191
+ return;
192
+ }
193
+ if (node.computed &&
194
+ node.object.type === utils_1.AST_NODE_TYPES.Identifier &&
195
+ reactNamespaces.has(node.object.name)) {
196
+ context.report({
197
+ node,
198
+ messageId: "dynamicReactAccess",
199
+ data: { name: node.object.name },
200
+ });
201
+ }
202
+ },
203
+ // const { useEffect } = React
204
+ "ObjectPattern > Property"(node) {
205
+ if (node.computed)
206
+ return;
207
+ const name = staticName(node.key);
208
+ if (name !== null && EFFECT_HOOKS.has(name)) {
209
+ checkEffectUse(node, name, false);
210
+ }
211
+ },
212
+ MethodDefinition(node) {
213
+ checkLifecycle(node.key, node.computed);
214
+ },
215
+ PropertyDefinition(node) {
216
+ checkLifecycle(node.key, node.computed);
217
+ },
218
+ };
219
+ },
220
+ });
221
+ //# sourceMappingURL=require-unsafe-dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-unsafe-dir.js","sourceRoot":"","sources":["../../src/rules/require-unsafe-dir.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
- type Options = Record<string, never>;
2
- type MessageId = "importViolation" | "importNonLayer" | "encodedGlobal" | "ioGlobal" | "schemaBoundary" | "encodedMethod";
1
+ type Options = {
2
+ readonly adapterAllowedPackages?: readonly string[];
3
+ };
4
+ type MessageId = "noDate" | "importViolation" | "importNonLayer" | "encodedGlobal" | "ioGlobal" | "schemaBoundary" | "encodedMethod" | "stringConstruction" | "adapterImpure" | "adapterNodeBuiltin" | "adapterPackageNotAllowed" | "adapterAmbientLocale";
3
5
  declare const _default: import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleModule<MessageId, [Options], unknown, import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleListener> & {
4
6
  name: string;
5
7
  };
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/rules/server.ts"],"names":[],"mappings":"AAeA,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAWrC,KAAK,SAAS,GACV,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,UAAU,GACV,gBAAgB,GAChB,eAAe,CAAC;;;;AAEpB,wBA8JG"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/rules/server.ts"],"names":[],"mappings":"AA0BA,KAAK,OAAO,GAAG;IACb,QAAQ,CAAC,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrD,CAAC;AAWF,KAAK,SAAS,GACV,QAAQ,GACR,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,UAAU,GACV,gBAAgB,GAChB,eAAe,GACf,oBAAoB,GACpB,eAAe,GACf,oBAAoB,GACpB,0BAA0B,GAC1B,sBAAsB,CAAC;;;;AAE3B,wBAkYG"}