@luma-layered-ts/eslint-plugin 1.4.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 +29 -3
- 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) {
|
|
@@ -86,6 +111,7 @@ exports.ENCODING_GLOBALS = new Set([
|
|
|
86
111
|
"Temporal",
|
|
87
112
|
"globalThis",
|
|
88
113
|
"Function",
|
|
114
|
+
"Intl",
|
|
89
115
|
"parseInt",
|
|
90
116
|
"parseFloat",
|
|
91
117
|
"encodeURIComponent",
|
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":";;AAAA,oDAAoE;AACpE,sDAA+C;AAC/C,4CAUsB;AAItB,MAAM,cAAc,GAAY,EAAE,CAAC;AAEnC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAY,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;AASjE,kBAAe,IAAA,2BAAU,EAAuB;IAC9C,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,uLAAuL;SAC1L;QACD,QAAQ,EAAE;YACR,eAAe,EAAE,mDAAmD;YACpE,cAAc,EACZ,yGAAyG;YAC3G,aAAa,EACX,mHAAmH;YACrH,cAAc,EACZ,sHAAsH;YACxH,aAAa,EACX,gFAAgF;SACnF;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,CAAC,cAAc,CAAC;IAChC,MAAM,CAAC,OAAO;QACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,IAAI,IAAA,sBAAU,EAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,IAAA,4BAAgB,EAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEjD,MAAM,UAAU,GAAG,KAAK,KAAK,SAAS,CAAC;QAEvC,SAAS,WAAW,CAAC,UAAkB,EAAE,IAAmB;YAC1D,MAAM,QAAQ,GAAG,IAAA,6BAAiB,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,IAAA,8BAAkB,EAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,IAAA,iCAAqB,EAAC,UAAU,CAAC,EAAE,CAAC;oBACtC,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,gBAAgB;wBAC3B,IAAI,EAAE,EAAE,UAAU,EAAE;qBACrB,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAA,qBAAS,EAAC,KAAkB,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,iBAAiB;oBAC5B,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;iBACpC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,wDAAwD;QACxD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO;gBACL,iBAAiB,CAAC,IAAgC;oBAChD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACvC,CAAC;gBACD,gBAAgB,CAAC,IAA+B;oBAC9C,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,sBAAc,CAAC,OAAO;wBAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,EACrC,CAAC;wBACD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;gBACD,yBAAyB,CACvB,IAAwC;oBAExC,IACE,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,sBAAc,CAAC,OAAO;wBAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,QAAQ,EACzC,CAAC;wBACD,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC;aACF,CAAC;QACJ,CAAC;QAED,0CAA0C;QAC1C,OAAO;YACL,iBAAiB,CAAC,IAAgC;gBAChD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC;YACD,gBAAgB,CAAC,IAA+B;gBAC9C,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,sBAAc,CAAC,OAAO;oBAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,EACrC,CAAC;oBACD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YACD,yBAAyB,CACvB,IAAwC;gBAExC,IACE,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,sBAAc,CAAC,OAAO;oBAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,QAAQ,EACzC,CAAC;oBACD,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YAED,mBAAmB;YACnB,UAAU,CAAC,IAAyB;gBAClC,IAAI,CAAC,4BAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,OAAO;gBAC7C,IACE,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,sBAAc,CAAC,gBAAgB;oBACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI;oBAC7B,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EACrB,CAAC;oBACD,OAAO;gBACT,CAAC;gBACD,IAAI,eAAe,CAAC,IAAI,CAAC;oBAAE,OAAO;gBAElC,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,eAAe;oBAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;iBACjC,CAAC,CAAC;YACL,CAAC;YAED,0CAA0C;YAC1C,cAAc,CAAC,IAA6B;gBAC1C,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,sBAAc,CAAC,gBAAgB;oBACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU,EACvD,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAEzC,IAAI,mCAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxC,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,gBAAgB;wBAC3B,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;qBACxB,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,IAAI,MAAM,KAAK,UAAU;oBAAE,OAAO;gBAElC,IAAI,yCAA6B,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9C,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,eAAe;wBAC1B,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;qBACxB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;SACF,CAAC;QAEF,SAAS,eAAe,CAAC,IAAmB;YAC1C,IAAI,OAAO,GAA8B,IAAI,CAAC,MAAM,CAAC;YACrD,OAAO,OAAO,EAAE,CAAC;gBACf,IACE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBAC7B,OAAO,CAAC,IAAI,KAAK,sBAAc,CAAC,cAAc;oBAC9C,OAAO,CAAC,IAAI,KAAK,sBAAc,CAAC,qBAAqB,EACrD,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;YAC3B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|
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":";;AAAA,oDAAoE;AACpE,sDAA+C;AAC/C,4CAUsB;AAItB,MAAM,cAAc,GAAY,EAAE,CAAC;AAEnC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAY;IACnC,UAAU;IACV,eAAe;IACf,eAAe;IACf,UAAU;CACX,CAAC,CAAC;AAEH,yFAAyF;AACzF,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAU3E,kBAAe,IAAA,2BAAU,EAAuB;IAC9C,IAAI,EAAE,OAAO;IACb,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,kMAAkM;SACrM;QACD,QAAQ,EAAE;YACR,eAAe,EAAE,mDAAmD;YACpE,cAAc,EACZ,yGAAyG;YAC3G,aAAa,EACX,mHAAmH;YACrH,cAAc,EACZ,sHAAsH;YACxH,aAAa,EACX,gFAAgF;YAClF,oBAAoB,EAClB,+FAA+F;SAClG;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,CAAC,cAAc,CAAC;IAChC,MAAM,CAAC,OAAO;QACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,IAAI,IAAA,sBAAU,EAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,IAAA,4BAAgB,EAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE/C,MAAM,WAAW,GAAG,KAAK,KAAK,eAAe,CAAC;QAE9C,SAAS,WAAW,CAAC,UAAkB,EAAE,IAAmB;YAC1D,MAAM,QAAQ,GAAG,IAAA,6BAAiB,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,IAAA,8BAAkB,EAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,IAAA,iCAAqB,EAAC,UAAU,CAAC,EAAE,CAAC;oBACtC,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,gBAAgB;wBAC3B,IAAI,EAAE,EAAE,UAAU,EAAE;qBACrB,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAA,qBAAS,EAAC,KAAkB,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,iBAAiB;oBAC5B,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;iBACpC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO;YACL,wBAAwB;YACxB,iBAAiB,CAAC,IAAgC;gBAChD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC;YACD,gBAAgB,CAAC,IAA+B;gBAC9C,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,sBAAc,CAAC,OAAO;oBAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,EACrC,CAAC;oBACD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YACD,yBAAyB,CACvB,IAAwC;gBAExC,IACE,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,sBAAc,CAAC,OAAO;oBAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,QAAQ,EACzC,CAAC;oBACD,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YAED,2CAA2C;YAC3C,UAAU,CAAC,IAAyB;gBAClC,IAAI,CAAC,4BAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,OAAO;gBAE7C,uCAAuC;gBACvC,IACE,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,sBAAc,CAAC,gBAAgB;oBACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI;oBAC7B,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EACrB,CAAC;oBACD,OAAO;gBACT,CAAC;gBACD,qBAAqB;gBACrB,IAAI,eAAe,CAAC,IAAI,CAAC;oBAAE,OAAO;gBAElC,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,eAAe;oBAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;iBACjC,CAAC,CAAC;YACL,CAAC;YAED,kDAAkD;YAClD,cAAc,CAAC,IAA6B;gBAC1C,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,sBAAc,CAAC,gBAAgB;oBACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU,EACvD,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAEzC,kCAAkC;gBAClC,IAAI,mCAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxC,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,gBAAgB;wBAC3B,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;qBACxB,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,6BAA6B;gBAC7B,IAAI,MAAM,KAAK,UAAU;oBAAE,OAAO;gBAElC,IAAI,WAAW,EAAE,CAAC;oBAChB,4DAA4D;oBAC5D,IAAI,yBAAyB,CAAC,GAAG,CAAC,MAAM,CAAC;wBAAE,OAAO;oBAClD,IAAI,yCAA6B,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC9C,OAAO,CAAC,MAAM,CAAC;4BACb,IAAI;4BACJ,SAAS,EAAE,sBAAsB;4BACjC,IAAI,EAAE,EAAE,MAAM,EAAE;yBACjB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,8DAA8D;oBAC9D,IAAI,yCAA6B,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC9C,OAAO,CAAC,MAAM,CAAC;4BACb,IAAI;4BACJ,SAAS,EAAE,eAAe;4BAC1B,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;yBACxB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC;QAEF,SAAS,eAAe,CAAC,IAAmB;YAC1C,IAAI,OAAO,GAA8B,IAAI,CAAC,MAAM,CAAC;YACrD,OAAO,OAAO,EAAE,CAAC;gBACf,IACE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBAC7B,OAAO,CAAC,IAAI,KAAK,sBAAc,CAAC,cAAc;oBAC9C,OAAO,CAAC,IAAI,KAAK,sBAAc,CAAC,qBAAqB,EACrD,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;YAC3B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -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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"}
|