@solid-stack/mason 1.0.34 → 1.0.35
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/dist/bin.cjs +51 -61
- package/dist/bin.cjs.map +1 -1
- package/dist/bin.js +51 -61
- package/dist/bin.js.map +1 -1
- package/dist/core/lintEngine.d.ts +6 -0
- package/dist/core/lintEngine.d.ts.map +1 -1
- package/dist/index.cjs +60 -39
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +60 -39
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lint.d.ts +6 -5
- package/dist/types/lint.d.ts.map +1 -1
- package/dist/utils/config.d.ts +9 -7
- package/dist/utils/config.d.ts.map +1 -1
- package/package.json +1 -1
- package/schema.json +7 -13
|
@@ -24,6 +24,12 @@ export interface TargetInfo {
|
|
|
24
24
|
}
|
|
25
25
|
export declare function isTestFile(filePath: string, projectRoot?: string): boolean;
|
|
26
26
|
export declare function scanDirFiles(dir: string, projectRoot?: string): string[];
|
|
27
|
+
export declare function resolveLintEnvironment(projectRoot: string): {
|
|
28
|
+
featuresBase: string;
|
|
29
|
+
sharedBase: string;
|
|
30
|
+
errorsBase: string;
|
|
31
|
+
baseErrorAbs: string;
|
|
32
|
+
};
|
|
27
33
|
export declare function classifyFile(fullPathAbs: string, featuresBaseAbs: string, sharedBaseAbs?: string, errorsBaseAbs?: string): {
|
|
28
34
|
moduleType?: ModuleType | undefined;
|
|
29
35
|
moduleName?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lintEngine.d.ts","sourceRoot":"","sources":["../../src/core/lintEngine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,sBAAsB,EAEtB,yBAAyB,EACzB,SAAS,EACT,WAAW,EACX,WAAW,EAEX,UAAU,EAEV,SAAS,EACV,MAAM,kBAAkB,CAAC;AAK1B,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,SAAgB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxC,SAAgB,UAAU,EAAE,OAAO,CAAC;IAEpC,YAAY,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,UAAU,GAAE,OAAe,EAKhF;CACF;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACtC;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAa1E;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBxE;AAED,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,aAAa,CAAC,EAAE,MAAM,EACtB,aAAa,CAAC,EAAE,MAAM,GACrB;IACD,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAC/B,
|
|
1
|
+
{"version":3,"file":"lintEngine.d.ts","sourceRoot":"","sources":["../../src/core/lintEngine.ts"],"names":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -220,20 +220,20 @@ function getConfiguredSharedDir(projectRoot, flags) {
|
|
|
220
220
|
return path26__default.default.join(projectRoot, "shared");
|
|
221
221
|
}
|
|
222
222
|
function loadLintConfig(projectRoot) {
|
|
223
|
-
const
|
|
224
|
-
if (
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}
|
|
223
|
+
const masonConfig = loadMasonConfig(projectRoot);
|
|
224
|
+
if (masonConfig) {
|
|
225
|
+
return {
|
|
226
|
+
baseErrorPath: masonConfig.paths?.baseError,
|
|
227
|
+
paths: masonConfig.paths
|
|
228
|
+
};
|
|
229
229
|
}
|
|
230
230
|
return {};
|
|
231
231
|
}
|
|
232
232
|
function getResolvedLintPaths(projectRoot, config) {
|
|
233
233
|
const masonConfig = loadMasonConfig(projectRoot);
|
|
234
|
-
const configuredFeatures = config
|
|
235
|
-
const configuredShared = config
|
|
236
|
-
const configuredErrors = config
|
|
234
|
+
const configuredFeatures = config?.paths?.features ?? masonConfig?.paths?.features;
|
|
235
|
+
const configuredShared = config?.paths?.shared ?? masonConfig?.paths?.shared;
|
|
236
|
+
const configuredErrors = config?.paths?.errors ?? masonConfig?.paths?.errors;
|
|
237
237
|
const resolveBase = (configuredPath, defaultSrc, defaultRoot) => {
|
|
238
238
|
if (configuredPath !== void 0) {
|
|
239
239
|
return path26__default.default.resolve(projectRoot, configuredPath);
|
|
@@ -4943,19 +4943,43 @@ function scanDirFiles(dir, projectRoot) {
|
|
|
4943
4943
|
}
|
|
4944
4944
|
return files;
|
|
4945
4945
|
}
|
|
4946
|
+
function resolveLintEnvironment(projectRoot) {
|
|
4947
|
+
const config = loadMasonConfig(projectRoot);
|
|
4948
|
+
const resolveDir = (configured, defaultSrc, defaultRoot) => {
|
|
4949
|
+
if (configured !== void 0) {
|
|
4950
|
+
return path26__default.default.resolve(projectRoot, configured);
|
|
4951
|
+
}
|
|
4952
|
+
const srcPath = path26__default.default.join(projectRoot, defaultSrc);
|
|
4953
|
+
if (fs17__default.default.existsSync(srcPath)) return srcPath;
|
|
4954
|
+
const rootPath = path26__default.default.join(projectRoot, defaultRoot);
|
|
4955
|
+
if (fs17__default.default.existsSync(rootPath)) return rootPath;
|
|
4956
|
+
return srcPath;
|
|
4957
|
+
};
|
|
4958
|
+
const featuresBase = resolveDir(config?.paths?.features, "src/features", "features");
|
|
4959
|
+
const sharedBase = resolveDir(config?.paths?.shared, "src/shared", "shared");
|
|
4960
|
+
const errorsBase = resolveDir(config?.paths?.errors, "src/errors", "errors");
|
|
4961
|
+
const defaultBaseErrorRelative = config?.paths?.errors ? path26__default.default.join(config.paths.errors, "AppError.ts") : fs17__default.default.existsSync(path26__default.default.join(projectRoot, "src/errors")) ? "src/errors/AppError.ts" : fs17__default.default.existsSync(path26__default.default.join(projectRoot, "errors")) ? "errors/AppError.ts" : "src/errors/AppError.ts";
|
|
4962
|
+
const baseErrorAbs = path26__default.default.resolve(
|
|
4963
|
+
projectRoot,
|
|
4964
|
+
config?.paths?.baseError || defaultBaseErrorRelative
|
|
4965
|
+
);
|
|
4966
|
+
return { featuresBase, sharedBase, errorsBase, baseErrorAbs };
|
|
4967
|
+
}
|
|
4946
4968
|
function classifyFile(fullPathAbs, featuresBaseAbs, sharedBaseAbs, errorsBaseAbs) {
|
|
4947
4969
|
if (!sharedBaseAbs || !errorsBaseAbs) {
|
|
4948
|
-
const
|
|
4949
|
-
featuresBaseAbs =
|
|
4950
|
-
sharedBaseAbs =
|
|
4951
|
-
errorsBaseAbs =
|
|
4970
|
+
const env = resolveLintEnvironment(featuresBaseAbs);
|
|
4971
|
+
featuresBaseAbs = env.featuresBase;
|
|
4972
|
+
sharedBaseAbs = env.sharedBase;
|
|
4973
|
+
errorsBaseAbs = env.errorsBase;
|
|
4952
4974
|
}
|
|
4953
4975
|
const normFullPath = path26__default.default.resolve(fullPathAbs);
|
|
4954
4976
|
const normErrorsBase = path26__default.default.resolve(errorsBaseAbs);
|
|
4955
4977
|
const normSharedBase = path26__default.default.resolve(sharedBaseAbs);
|
|
4956
4978
|
const normFeaturesBase = path26__default.default.resolve(featuresBaseAbs);
|
|
4957
|
-
const
|
|
4958
|
-
|
|
4979
|
+
const isUnder = (base, target) => {
|
|
4980
|
+
return target === base || target.startsWith(base + path26__default.default.sep);
|
|
4981
|
+
};
|
|
4982
|
+
if (isUnder(normErrorsBase, normFullPath)) {
|
|
4959
4983
|
return {
|
|
4960
4984
|
moduleType: "error",
|
|
4961
4985
|
moduleName: "global-errors",
|
|
@@ -4963,26 +4987,26 @@ function classifyFile(fullPathAbs, featuresBaseAbs, sharedBaseAbs, errorsBaseAbs
|
|
|
4963
4987
|
layer: "domain"
|
|
4964
4988
|
};
|
|
4965
4989
|
}
|
|
4966
|
-
|
|
4967
|
-
|
|
4968
|
-
const parts =
|
|
4990
|
+
if (isUnder(normSharedBase, normFullPath)) {
|
|
4991
|
+
const rel = path26__default.default.relative(normSharedBase, normFullPath).replace(/\\/g, "/");
|
|
4992
|
+
const parts = rel.split("/").filter(Boolean);
|
|
4969
4993
|
if (parts.length >= 1) {
|
|
4970
4994
|
const moduleName = parts[0];
|
|
4971
|
-
const
|
|
4995
|
+
const subfolder = parts[1];
|
|
4972
4996
|
let layer = "root";
|
|
4973
|
-
if (
|
|
4997
|
+
if (subfolder === "domain" || subfolder === "errors") {
|
|
4974
4998
|
layer = "domain";
|
|
4975
|
-
} else if (
|
|
4999
|
+
} else if (subfolder === "ports") {
|
|
4976
5000
|
layer = "ports";
|
|
4977
|
-
} else if (
|
|
5001
|
+
} else if (subfolder === "infrastructure") {
|
|
4978
5002
|
layer = "infrastructure";
|
|
4979
5003
|
}
|
|
4980
5004
|
return { moduleType: "shared", moduleName, feature: moduleName, layer };
|
|
4981
5005
|
}
|
|
4982
5006
|
}
|
|
4983
|
-
|
|
4984
|
-
|
|
4985
|
-
const parts =
|
|
5007
|
+
if (isUnder(normFeaturesBase, normFullPath)) {
|
|
5008
|
+
const rel = path26__default.default.relative(normFeaturesBase, normFullPath).replace(/\\/g, "/");
|
|
5009
|
+
const parts = rel.split("/").filter(Boolean);
|
|
4986
5010
|
if (parts.length >= 2) {
|
|
4987
5011
|
const moduleName = parts[0];
|
|
4988
5012
|
const subfolder = parts[1];
|
|
@@ -4995,7 +5019,7 @@ function classifyFile(fullPathAbs, featuresBaseAbs, sharedBaseAbs, errorsBaseAbs
|
|
|
4995
5019
|
layer = "services";
|
|
4996
5020
|
} else if (subfolder === "infrastructure") {
|
|
4997
5021
|
layer = "infrastructure";
|
|
4998
|
-
} else if (subfolder
|
|
5022
|
+
} else if (subfolder.startsWith("px") || subfolder === "presentation" || subfolder === "handlers" || subfolder === "transformers") {
|
|
4999
5023
|
layer = "presentation";
|
|
5000
5024
|
}
|
|
5001
5025
|
return { moduleType: "feature", moduleName, feature: moduleName, layer };
|
|
@@ -5024,10 +5048,10 @@ function classifyTarget(specifier, sourceFileAbs, projectRoot, featuresBaseAbs,
|
|
|
5024
5048
|
return { isExternal: true, isDiFramework: false };
|
|
5025
5049
|
}
|
|
5026
5050
|
if (!featuresBaseAbs || !sharedBaseAbs || !errorsBaseAbs) {
|
|
5027
|
-
const
|
|
5028
|
-
featuresBaseAbs = featuresBaseAbs ||
|
|
5029
|
-
sharedBaseAbs = sharedBaseAbs ||
|
|
5030
|
-
errorsBaseAbs = errorsBaseAbs ||
|
|
5051
|
+
const env = resolveLintEnvironment(projectRoot);
|
|
5052
|
+
featuresBaseAbs = featuresBaseAbs || env.featuresBase;
|
|
5053
|
+
sharedBaseAbs = sharedBaseAbs || env.sharedBase;
|
|
5054
|
+
errorsBaseAbs = errorsBaseAbs || env.errorsBase;
|
|
5031
5055
|
}
|
|
5032
5056
|
const isGlobalConfig = specifier === "@configs" || specifier.startsWith("@configs/") || specifier === "@/configs" || specifier.startsWith("@/configs/") || specifier === "~/configs" || specifier.startsWith("~/configs/") || specifier === "configs" || specifier.startsWith("configs/");
|
|
5033
5057
|
let targetAbs = null;
|
|
@@ -5668,24 +5692,21 @@ function lintCodebase(options = {}) {
|
|
|
5668
5692
|
const startTime = Date.now();
|
|
5669
5693
|
const projectRoot = options.projectRoot || findProjectRoot(options.targetDir || process.cwd());
|
|
5670
5694
|
const failFast = !options.complete;
|
|
5671
|
-
const
|
|
5672
|
-
const { featuresBase, sharedBase, errorsBase } = getResolvedLintPaths(projectRoot, lintConfig);
|
|
5695
|
+
const { featuresBase, sharedBase, errorsBase, baseErrorAbs } = resolveLintEnvironment(projectRoot);
|
|
5673
5696
|
const missingFoundations = [];
|
|
5674
5697
|
if (!fs17__default.default.existsSync(featuresBase)) missingFoundations.push("features/");
|
|
5675
5698
|
if (!fs17__default.default.existsSync(sharedBase)) missingFoundations.push("shared/");
|
|
5676
5699
|
if (!fs17__default.default.existsSync(errorsBase)) missingFoundations.push("errors/");
|
|
5677
5700
|
if (missingFoundations.length > 0) {
|
|
5678
5701
|
throw new DependencyRuleError(
|
|
5679
|
-
`Project Structure Violation: Missing required foundational directories: ${missingFoundations.join(", ")}. Every
|
|
5702
|
+
`Project Structure Violation: Missing required foundational directories: ${missingFoundations.join(", ")}. Every architecture must contain 'features/', 'shared/', and 'errors/'.`,
|
|
5680
5703
|
[],
|
|
5681
5704
|
true
|
|
5682
5705
|
);
|
|
5683
5706
|
}
|
|
5684
|
-
const baseErrorRelative = lintConfig.baseErrorPath || path26__default.default.relative(projectRoot, path26__default.default.join(errorsBase, "AppError.ts")).replace(/\\/g, "/");
|
|
5685
|
-
const baseErrorAbs = path26__default.default.resolve(projectRoot, baseErrorRelative);
|
|
5686
5707
|
if (!fs17__default.default.existsSync(baseErrorAbs)) {
|
|
5687
5708
|
throw new DependencyRuleError(
|
|
5688
|
-
`Project Structure Violation: Base error class not found at '${
|
|
5709
|
+
`Project Structure Violation: Base error class not found at '${path26__default.default.relative(projectRoot, baseErrorAbs).replace(/\\/g, "/")}'. Configure paths.baseError in mason.config.json.`,
|
|
5689
5710
|
[],
|
|
5690
5711
|
true
|
|
5691
5712
|
);
|
|
@@ -5763,7 +5784,7 @@ Code: ${v.code}`;
|
|
|
5763
5784
|
code: lineCode,
|
|
5764
5785
|
ruleId: "E3_PLAIN_ERROR_THROW",
|
|
5765
5786
|
severity: "error",
|
|
5766
|
-
advice: `Throwing plain 'Error' is prohibited. You must throw '${baseErrorClassName}' or a
|
|
5787
|
+
advice: `Throwing plain 'Error' is prohibited. You must throw '${baseErrorClassName}' or a custom error class that inherits from it.`,
|
|
5767
5788
|
fixExample: {
|
|
5768
5789
|
bad: lineCode,
|
|
5769
5790
|
good: `throw new ${baseErrorClassName}("Something went wrong");`
|
|
@@ -5793,7 +5814,7 @@ Code: ${v.code}`;
|
|
|
5793
5814
|
code: lineCode,
|
|
5794
5815
|
ruleId: "E4_MISSING_INHERITANCE",
|
|
5795
5816
|
severity: "error",
|
|
5796
|
-
advice: `Error class '${className}' must extend '${baseErrorClassName}'
|
|
5817
|
+
advice: `Error class '${className}' must extend '${baseErrorClassName}'.`,
|
|
5797
5818
|
fixExample: {
|
|
5798
5819
|
bad: lineCode,
|
|
5799
5820
|
good: `export class ${className} extends ${baseErrorClassName} { ... }`
|
|
@@ -5810,7 +5831,7 @@ Code: ${v.code}`;
|
|
|
5810
5831
|
code: lineCode,
|
|
5811
5832
|
ruleId: "E5_NATIVE_ERROR_INHERITANCE",
|
|
5812
5833
|
severity: "error",
|
|
5813
|
-
advice: `Error class '${className}' extends
|
|
5834
|
+
advice: `Error class '${className}' extends native 'Error'. It must extend your configured base error class ('${baseErrorClassName}').`,
|
|
5814
5835
|
fixExample: {
|
|
5815
5836
|
bad: lineCode,
|
|
5816
5837
|
good: `export class ${className} extends ${baseErrorClassName} { ... }`
|