@luma-layered-ts/eslint-plugin 1.3.0 → 1.5.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/lib/layers.d.ts +2 -1
- package/lib/layers.d.ts.map +1 -1
- package/lib/layers.js +33 -5
- package/lib/layers.js.map +1 -1
- package/lib/rules/next.d.ts.map +1 -1
- package/lib/rules/next.js +2 -1
- package/lib/rules/next.js.map +1 -1
- package/lib/rules/react.d.ts.map +1 -1
- package/lib/rules/react.js +10 -4
- package/lib/rules/react.js.map +1 -1
- package/lib/rules/require-layer.js +1 -1
- package/lib/rules/require-layer.js.map +1 -1
- package/lib/rules/server.d.ts.map +1 -1
- package/lib/rules/server.js +2 -1
- package/lib/rules/server.js.map +1 -1
- package/package.json +1 -1
package/lib/layers.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
export declare const LAYER_NAMES: readonly ["core", "service", "adapter", "infra", "ui/hooks", "ui/components", "ui/pages", "app/api", "app/pages"];
|
|
1
|
+
export declare const LAYER_NAMES: readonly ["core", "service", "adapter", "infra", "ui/hooks", "ui/components", "ui/containers", "ui/pages", "app/api", "app/pages"];
|
|
2
2
|
export type LayerName = (typeof LAYER_NAMES)[number];
|
|
3
3
|
export declare function isTestFile(filePath: string): boolean;
|
|
4
4
|
export declare function getLayerFromPath(filePath: string): LayerName | null;
|
|
5
5
|
export declare function getLayerFromImport(importPath: string): LayerName | null;
|
|
6
6
|
export declare function canImport(from: LayerName, to: LayerName): boolean;
|
|
7
|
+
export declare function resolveImportPath(importPath: string, fromFilePath: string): string;
|
|
7
8
|
export declare function isNonLayerAliasImport(importPath: string): boolean;
|
|
8
9
|
export declare const ENCODING_GLOBALS: Set<string>;
|
|
9
10
|
export declare const IO_GLOBALS: Set<string>;
|
package/lib/layers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../src/layers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../src/layers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,oIAWd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AA0BrD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAUnE;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAmBvE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAGjE;AAID,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,MAAM,CASR;AAID,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEjE;AAOD,eAAO,MAAM,gBAAgB,aAiB3B,CAAC;AAGH,eAAO,MAAM,UAAU,aAQrB,CAAC;AAGH,eAAO,MAAM,uBAAuB,aAWlC,CAAC;AAKH,eAAO,MAAM,6BAA6B,aAqBxC,CAAC"}
|
package/lib/layers.js
CHANGED
|
@@ -5,6 +5,7 @@ exports.isTestFile = isTestFile;
|
|
|
5
5
|
exports.getLayerFromPath = getLayerFromPath;
|
|
6
6
|
exports.getLayerFromImport = getLayerFromImport;
|
|
7
7
|
exports.canImport = canImport;
|
|
8
|
+
exports.resolveImportPath = resolveImportPath;
|
|
8
9
|
exports.isNonLayerAliasImport = isNonLayerAliasImport;
|
|
9
10
|
exports.LAYER_NAMES = [
|
|
10
11
|
"core",
|
|
@@ -13,6 +14,7 @@ exports.LAYER_NAMES = [
|
|
|
13
14
|
"infra",
|
|
14
15
|
"ui/hooks",
|
|
15
16
|
"ui/components",
|
|
17
|
+
"ui/containers",
|
|
16
18
|
"ui/pages",
|
|
17
19
|
"app/api",
|
|
18
20
|
"app/pages",
|
|
@@ -25,10 +27,18 @@ const allowedImports = {
|
|
|
25
27
|
infra: ["core", "service", "adapter"],
|
|
26
28
|
"ui/hooks": ["core", "service"],
|
|
27
29
|
"ui/components": ["core", "ui/hooks"],
|
|
28
|
-
"ui/
|
|
30
|
+
"ui/containers": ["core", "service", "ui/hooks", "ui/components"],
|
|
31
|
+
"ui/pages": ["core", "service", "ui/hooks", "ui/components", "ui/containers"],
|
|
29
32
|
// app/ layers are wiring roots (entry points) — not importable by other layers
|
|
30
33
|
"app/api": ["core", "service", "adapter", "infra"],
|
|
31
|
-
"app/pages": [
|
|
34
|
+
"app/pages": [
|
|
35
|
+
"core",
|
|
36
|
+
"service",
|
|
37
|
+
"ui/hooks",
|
|
38
|
+
"ui/components",
|
|
39
|
+
"ui/containers",
|
|
40
|
+
"ui/pages",
|
|
41
|
+
],
|
|
32
42
|
};
|
|
33
43
|
// Test and story files are excluded from layer constraint checks.
|
|
34
44
|
// They need freedom to import across layers for fixtures and mocking.
|
|
@@ -41,7 +51,7 @@ function getLayerFromPath(filePath) {
|
|
|
41
51
|
return "app/api";
|
|
42
52
|
if (filePath.match(/\/src\/app\//))
|
|
43
53
|
return "app/pages";
|
|
44
|
-
const match = filePath.match(/\/src\/(ui\/(?:hooks|components|pages)|core|service|adapter|infra)\//);
|
|
54
|
+
const match = filePath.match(/\/src\/(ui\/(?:hooks|components|containers|pages)|core|service|adapter|infra)\//);
|
|
45
55
|
if (!match)
|
|
46
56
|
return null;
|
|
47
57
|
return match[1];
|
|
@@ -69,6 +79,21 @@ function canImport(from, to) {
|
|
|
69
79
|
return true;
|
|
70
80
|
return allowedImports[from].includes(to);
|
|
71
81
|
}
|
|
82
|
+
// Resolve a relative import path against the importing file's path.
|
|
83
|
+
// Returns the resolved path for relative imports, or the original path otherwise.
|
|
84
|
+
function resolveImportPath(importPath, fromFilePath) {
|
|
85
|
+
if (!importPath.startsWith("."))
|
|
86
|
+
return importPath;
|
|
87
|
+
const fromDir = fromFilePath.replace(/\/[^/]+$/, "");
|
|
88
|
+
const parts = fromDir.split("/");
|
|
89
|
+
for (const segment of importPath.split("/")) {
|
|
90
|
+
if (segment === "..")
|
|
91
|
+
parts.pop();
|
|
92
|
+
else if (segment !== ".")
|
|
93
|
+
parts.push(segment);
|
|
94
|
+
}
|
|
95
|
+
return parts.join("/");
|
|
96
|
+
}
|
|
72
97
|
// Detect project-internal imports via path alias that should resolve to a layer but don't.
|
|
73
98
|
// Only checks @/ alias imports — relative imports (./ ../) are assumed same-layer.
|
|
74
99
|
function isNonLayerAliasImport(importPath) {
|
|
@@ -76,8 +101,8 @@ function isNonLayerAliasImport(importPath) {
|
|
|
76
101
|
}
|
|
77
102
|
// --- Encoded representation restrictions ---
|
|
78
103
|
// Globals that interact with encoded representations (serialization, parsing).
|
|
79
|
-
// globalThis
|
|
80
|
-
//
|
|
104
|
+
// globalThis/Function are included to prevent bypassing restrictions via
|
|
105
|
+
// indirect access (globalThis["JSON"], Function("return this")()).
|
|
81
106
|
exports.ENCODING_GLOBALS = new Set([
|
|
82
107
|
"JSON",
|
|
83
108
|
"String",
|
|
@@ -85,6 +110,8 @@ exports.ENCODING_GLOBALS = new Set([
|
|
|
85
110
|
"Date",
|
|
86
111
|
"Temporal",
|
|
87
112
|
"globalThis",
|
|
113
|
+
"Function",
|
|
114
|
+
"Intl",
|
|
88
115
|
"parseInt",
|
|
89
116
|
"parseFloat",
|
|
90
117
|
"encodeURIComponent",
|
|
@@ -102,6 +129,7 @@ exports.IO_GLOBALS = new Set([
|
|
|
102
129
|
"Headers",
|
|
103
130
|
"FormData",
|
|
104
131
|
"process",
|
|
132
|
+
"performance",
|
|
105
133
|
]);
|
|
106
134
|
// Schema boundary methods (decode/encode = canonical ↔ encoded conversion)
|
|
107
135
|
exports.SCHEMA_BOUNDARY_METHODS = new Set([
|
package/lib/layers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layers.js","sourceRoot":"","sources":["../src/layers.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"layers.js","sourceRoot":"","sources":["../src/layers.ts"],"names":[],"mappings":"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"}
|
package/lib/rules/next.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/rules/next.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/rules/next.ts"],"names":[],"mappings":"AAeA,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,wBAyKG"}
|
package/lib/rules/next.js
CHANGED
|
@@ -31,7 +31,8 @@ exports.default = (0, create_rule_js_1.createRule)({
|
|
|
31
31
|
return {};
|
|
32
32
|
const isApiRoute = layer === "app/api";
|
|
33
33
|
function checkImport(importPath, node) {
|
|
34
|
-
const
|
|
34
|
+
const resolved = (0, layers_js_1.resolveImportPath)(importPath, filePath);
|
|
35
|
+
const toLayer = (0, layers_js_1.getLayerFromImport)(resolved);
|
|
35
36
|
if (!toLayer) {
|
|
36
37
|
if ((0, layers_js_1.isNonLayerAliasImport)(importPath)) {
|
|
37
38
|
context.report({
|
package/lib/rules/next.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/rules/next.ts"],"names":[],"mappings":";;AAAA,oDAAoE;AACpE,sDAA+C;AAC/C,
|
|
1
|
+
{"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/rules/next.ts"],"names":[],"mappings":"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"}
|
package/lib/rules/react.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/rules/react.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/rules/react.ts"],"names":[],"mappings":"AAeA,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAarC,KAAK,SAAS,GACV,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,sBAAsB,CAAC;;;;AAE3B,wBAkKG"}
|
package/lib/rules/react.js
CHANGED
|
@@ -4,7 +4,12 @@ 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([
|
|
7
|
+
const UI_LAYERS = new Set([
|
|
8
|
+
"ui/hooks",
|
|
9
|
+
"ui/components",
|
|
10
|
+
"ui/containers",
|
|
11
|
+
"ui/pages",
|
|
12
|
+
]);
|
|
8
13
|
// components can call .display(), .trim(), .toString() — these don't interpret structure
|
|
9
14
|
const COMPONENT_ALLOWED_METHODS = new Set(["display", "trim", "toString"]);
|
|
10
15
|
exports.default = (0, create_rule_js_1.createRule)({
|
|
@@ -12,7 +17,7 @@ exports.default = (0, create_rule_js_1.createRule)({
|
|
|
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: {
|
|
18
23
|
importViolation: "'{{fromLayer}}' cannot import from '{{toLayer}}'.",
|
|
@@ -34,7 +39,8 @@ exports.default = (0, create_rule_js_1.createRule)({
|
|
|
34
39
|
return {};
|
|
35
40
|
const isComponent = layer === "ui/components";
|
|
36
41
|
function checkImport(importPath, node) {
|
|
37
|
-
const
|
|
42
|
+
const resolved = (0, layers_js_1.resolveImportPath)(importPath, filePath);
|
|
43
|
+
const toLayer = (0, layers_js_1.getLayerFromImport)(resolved);
|
|
38
44
|
if (!toLayer) {
|
|
39
45
|
if ((0, layers_js_1.isNonLayerAliasImport)(importPath)) {
|
|
40
46
|
context.report({
|
|
@@ -121,7 +127,7 @@ exports.default = (0, create_rule_js_1.createRule)({
|
|
|
121
127
|
}
|
|
122
128
|
}
|
|
123
129
|
else {
|
|
124
|
-
// hooks/pages: all string interpretation forbidden
|
|
130
|
+
// hooks/containers/pages: all string interpretation forbidden
|
|
125
131
|
if (layers_js_1.STRING_INTERPRETATION_METHODS.has(method)) {
|
|
126
132
|
context.report({
|
|
127
133
|
node,
|
package/lib/rules/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/rules/react.ts"],"names":[],"mappings":";;AAAA,oDAAoE;AACpE,sDAA+C;AAC/C,
|
|
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,
|
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/rules/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/rules/server.ts"],"names":[],"mappings":"AAgBA,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,wBA+JG"}
|
package/lib/rules/server.js
CHANGED
|
@@ -38,7 +38,8 @@ exports.default = (0, create_rule_js_1.createRule)({
|
|
|
38
38
|
return {};
|
|
39
39
|
const isInner = INNER_LAYERS.has(layer);
|
|
40
40
|
function checkImport(importPath, node) {
|
|
41
|
-
const
|
|
41
|
+
const resolved = (0, layers_js_1.resolveImportPath)(importPath, filePath);
|
|
42
|
+
const toLayer = (0, layers_js_1.getLayerFromImport)(resolved);
|
|
42
43
|
if (!toLayer) {
|
|
43
44
|
if ((0, layers_js_1.isNonLayerAliasImport)(importPath)) {
|
|
44
45
|
context.report({
|
package/lib/rules/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/rules/server.ts"],"names":[],"mappings":";;AAAA,oDAAoE;AACpE,sDAA+C;AAC/C,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/rules/server.ts"],"names":[],"mappings":"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"}
|