archprint 0.14.0 → 0.15.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/CHANGELOG.md +12 -0
- package/README.md +4 -4
- package/dist/cli/adopted-rules.d.ts +21 -2
- package/dist/cli/adopted-rules.d.ts.map +1 -1
- package/dist/cli/adopted-rules.js +95 -2
- package/dist/cli/adopted-rules.js.map +1 -1
- package/dist/cli/allow.d.ts.map +1 -1
- package/dist/cli/allow.js +12 -3
- package/dist/cli/allow.js.map +1 -1
- package/dist/cli/allowed-evidence.d.ts.map +1 -1
- package/dist/cli/allowed-evidence.js +105 -0
- package/dist/cli/allowed-evidence.js.map +1 -1
- package/dist/cli/check-evaluate.d.ts.map +1 -1
- package/dist/cli/check-evaluate.js +78 -0
- package/dist/cli/check-evaluate.js.map +1 -1
- package/dist/cli/generate.d.ts.map +1 -1
- package/dist/cli/generate.js +46 -20
- package/dist/cli/generate.js.map +1 -1
- package/dist/cli/layout.d.ts +5 -2
- package/dist/cli/layout.d.ts.map +1 -1
- package/dist/cli/layout.js +43 -10
- package/dist/cli/layout.js.map +1 -1
- package/dist/cli/migrate.d.ts.map +1 -1
- package/dist/cli/migrate.js +1 -2
- package/dist/cli/migrate.js.map +1 -1
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +10 -6
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/recommend.d.ts +3 -0
- package/dist/cli/recommend.d.ts.map +1 -1
- package/dist/cli/recommend.js +16 -1
- package/dist/cli/recommend.js.map +1 -1
- package/dist/cli/report.js +1 -1
- package/dist/cli/report.js.map +1 -1
- package/dist/generator/app-isolation-emitters.d.ts +1 -0
- package/dist/generator/app-isolation-emitters.d.ts.map +1 -1
- package/dist/generator/app-isolation-emitters.js +2 -1
- package/dist/generator/app-isolation-emitters.js.map +1 -1
- package/dist/generator/env-access-emitters.d.ts +1 -0
- package/dist/generator/env-access-emitters.d.ts.map +1 -1
- package/dist/generator/env-access-emitters.js +1 -0
- package/dist/generator/env-access-emitters.js.map +1 -1
- package/dist/generator/feature-slice-emitters.d.ts +1 -0
- package/dist/generator/feature-slice-emitters.d.ts.map +1 -1
- package/dist/generator/feature-slice-emitters.js +2 -1
- package/dist/generator/feature-slice-emitters.js.map +1 -1
- package/dist/generator/role-layering-emitters.d.ts +2 -0
- package/dist/generator/role-layering-emitters.d.ts.map +1 -1
- package/dist/generator/role-layering-emitters.js +2 -1
- package/dist/generator/role-layering-emitters.js.map +1 -1
- package/dist/generator/stories-isolation-emitters.d.ts +1 -0
- package/dist/generator/stories-isolation-emitters.d.ts.map +1 -1
- package/dist/generator/stories-isolation-emitters.js +2 -1
- package/dist/generator/stories-isolation-emitters.js.map +1 -1
- package/dist/generator/ui-data-isolation-emitters.d.ts +1 -0
- package/dist/generator/ui-data-isolation-emitters.d.ts.map +1 -1
- package/dist/generator/ui-data-isolation-emitters.js +2 -1
- package/dist/generator/ui-data-isolation-emitters.js.map +1 -1
- package/dist/generator/workspace-package-emitters.d.ts +1 -0
- package/dist/generator/workspace-package-emitters.d.ts.map +1 -1
- package/dist/generator/workspace-package-emitters.js +1 -0
- package/dist/generator/workspace-package-emitters.js.map +1 -1
- package/package.json +2 -2
|
@@ -3,12 +3,13 @@ const rolePath = (role) => {
|
|
|
3
3
|
const sources = (ROLE_PATTERNS.get(role) ?? []).map((pattern) => pattern.source);
|
|
4
4
|
return sources.length === 1 ? sources[0] : `(${sources.join('|')})`;
|
|
5
5
|
};
|
|
6
|
+
export const roleLayeringRuleName = (from, to) => `no-${from.toLowerCase()}-to-${to.toLowerCase()}`;
|
|
6
7
|
const confidencePct = (boundary) => `${(boundary.gate.conditions.confidence.value * 100).toFixed(0)}%`;
|
|
7
8
|
export function toDependencyCruiserRoleLayering(boundaries, include = ['AUTO']) {
|
|
8
9
|
const forbidden = boundaries
|
|
9
10
|
.filter((boundary) => include.includes(boundary.gate.status))
|
|
10
11
|
.map((boundary) => ({
|
|
11
|
-
name:
|
|
12
|
+
name: roleLayeringRuleName(boundary.from, boundary.to),
|
|
12
13
|
comment: `Archprint inferred role layering: ${boundary.reverseFlow} ${boundary.to} file(s) depend on ${boundary.from}, not the reverse; a ${boundary.from} must not import a ${boundary.to} (confidence ${confidencePct(boundary)}).`,
|
|
13
14
|
severity: 'error',
|
|
14
15
|
from: { path: rolePath(boundary.from) },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role-layering-emitters.js","sourceRoot":"","sources":["../../src/generator/role-layering-emitters.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAG9D,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAU,EAAE;IACtC,MAAM,OAAO,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjF,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACvE,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,QAAsB,EAAU,EAAE,CACvD,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAcrE,MAAM,UAAU,+BAA+B,CAC7C,UAAmC,EACnC,UAAuC,CAAC,MAAM,CAAC;IAE/C,MAAM,SAAS,GAAG,UAAU;SACzB,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC5D,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClB,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"role-layering-emitters.js","sourceRoot":"","sources":["../../src/generator/role-layering-emitters.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAG9D,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAU,EAAE;IACtC,MAAM,OAAO,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjF,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACvE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAU,EAAE,EAAQ,EAAU,EAAE,CACnE,MAAM,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;AAEpD,MAAM,aAAa,GAAG,CAAC,QAAsB,EAAU,EAAE,CACvD,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAcrE,MAAM,UAAU,+BAA+B,CAC7C,UAAmC,EACnC,UAAuC,CAAC,MAAM,CAAC;IAE/C,MAAM,SAAS,GAAG,UAAU;SACzB,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC5D,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClB,IAAI,EAAE,oBAAoB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QACtD,OAAO,EAAE,qCAAqC,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,EAAE,sBAAsB,QAAQ,CAAC,IAAI,wBAAwB,QAAQ,CAAC,IAAI,sBAAsB,QAAQ,CAAC,EAAE,gBAAgB,aAAa,CAAC,QAAQ,CAAC,IAAI;QACrO,QAAQ,EAAE,OAAgB;QAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACvC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;KACpC,CAAC,CAAC,CAAC;IACN,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -13,5 +13,6 @@ export interface StoriesIsolationRule {
|
|
|
13
13
|
export interface StoriesIsolationConfig {
|
|
14
14
|
forbidden: StoriesIsolationRule[];
|
|
15
15
|
}
|
|
16
|
+
export declare const STORIES_ISOLATION_RULE = "no-import-stories";
|
|
16
17
|
export declare function toDependencyCruiserStoriesIsolation(analysis: StoriesIsolationAnalysis): StoriesIsolationConfig;
|
|
17
18
|
//# sourceMappingURL=stories-isolation-emitters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stories-isolation-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/stories-isolation-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAE1F,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,oBAAoB,EAAE,CAAC;CACnC;
|
|
1
|
+
{"version":3,"file":"stories-isolation-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/stories-isolation-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAE1F,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,oBAAoB,EAAE,CAAC;CACnC;AAED,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAI1D,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,wBAAwB,GACjC,sBAAsB,CAexB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export const STORIES_ISOLATION_RULE = 'no-import-stories';
|
|
1
2
|
const STORY_PATH = '\\.stories\\.(ts|tsx)$';
|
|
2
3
|
export function toDependencyCruiserStoriesIsolation(analysis) {
|
|
3
4
|
if (analysis.storyCount === 0 || analysis.gate.status !== 'AUTO')
|
|
@@ -7,7 +8,7 @@ export function toDependencyCruiserStoriesIsolation(analysis) {
|
|
|
7
8
|
return {
|
|
8
9
|
forbidden: [
|
|
9
10
|
{
|
|
10
|
-
name:
|
|
11
|
+
name: STORIES_ISOLATION_RULE,
|
|
11
12
|
comment: `Archprint inferred stories isolation: ${conform}/${analysis.storyCount} Storybook stories are loaded by Storybook and imported by nothing; importing a .stories file from other code is forbidden (confidence ${floor}).`,
|
|
12
13
|
severity: 'error',
|
|
13
14
|
from: { pathNot: STORY_PATH },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stories-isolation-emitters.js","sourceRoot":"","sources":["../../src/generator/stories-isolation-emitters.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,GAAG,wBAAwB,CAAC;AAE5C,MAAM,UAAU,mCAAmC,CACjD,QAAkC;IAElC,IAAI,QAAQ,CAAC,UAAU,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC3F,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC;IAC7D,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACjF,OAAO;QACL,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"stories-isolation-emitters.js","sourceRoot":"","sources":["../../src/generator/stories-isolation-emitters.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAE1D,MAAM,UAAU,GAAG,wBAAwB,CAAC;AAE5C,MAAM,UAAU,mCAAmC,CACjD,QAAkC;IAElC,IAAI,QAAQ,CAAC,UAAU,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC3F,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC;IAC7D,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACjF,OAAO;QACL,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,sBAAsB;gBAC5B,OAAO,EAAE,yCAAyC,OAAO,IAAI,QAAQ,CAAC,UAAU,0IAA0I,KAAK,IAAI;gBACnO,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE;gBAC7B,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;aACzB;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-data-isolation-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/ui-data-isolation-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"ui-data-isolation-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/ui-data-isolation-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAIzF,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAgB5C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,uBAAuB,GAAG,YAAY,CAezF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ROLE_PATTERNS } from '../scanner/role-classifier.js';
|
|
2
|
+
export const UI_DATA_RULE = 'no-ui-to-data';
|
|
2
3
|
const DATA_ROLES = ['DB_MODULE', 'DATA_ACCESS'];
|
|
3
4
|
const dataPath = () => {
|
|
4
5
|
const sources = DATA_ROLES.flatMap((role) => (ROLE_PATTERNS.get(role) ?? []).map((pattern) => pattern.source));
|
|
@@ -16,7 +17,7 @@ export function toDependencyCruiserUiData(analysis) {
|
|
|
16
17
|
return {
|
|
17
18
|
forbidden: [
|
|
18
19
|
{
|
|
19
|
-
name:
|
|
20
|
+
name: UI_DATA_RULE,
|
|
20
21
|
comment: `Archprint inferred UI/data separation: ${conform}/${analysis.componentCount} UI components never import the data layer (files under db, database or prisma folders, or a prisma, drizzle or kysely client file) directly; a component importing it is forbidden (confidence ${floor}).`,
|
|
21
22
|
severity: 'error',
|
|
22
23
|
from: { path: componentPath() },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-data-isolation-emitters.js","sourceRoot":"","sources":["../../src/generator/ui-data-isolation-emitters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAG9D,MAAM,UAAU,GAAoB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAEjE,MAAM,QAAQ,GAAG,GAAW,EAAE;IAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1C,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CACjE,CAAC;IACF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,GAAW,EAAE;IACjC,MAAM,OAAO,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxF,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC,CAAC;AAcF,MAAM,UAAU,yBAAyB,CAAC,QAAiC;IACzE,IAAI,QAAQ,CAAC,cAAc,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC/F,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC;IACjE,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACjF,OAAO;QACL,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"ui-data-isolation-emitters.js","sourceRoot":"","sources":["../../src/generator/ui-data-isolation-emitters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAG9D,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;AAE5C,MAAM,UAAU,GAAoB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAEjE,MAAM,QAAQ,GAAG,GAAW,EAAE;IAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1C,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CACjE,CAAC;IACF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,GAAW,EAAE;IACjC,MAAM,OAAO,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxF,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC,CAAC;AAcF,MAAM,UAAU,yBAAyB,CAAC,QAAiC;IACzE,IAAI,QAAQ,CAAC,cAAc,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC/F,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC;IACjE,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACjF,OAAO;QACL,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,0CAA0C,OAAO,IAAI,QAAQ,CAAC,cAAc,mMAAmM,KAAK,IAAI;gBACjS,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;gBAC/B,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aACzB;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { WorkspacePackageAnalysis } from '../detector/workspace-package-detector.js';
|
|
2
2
|
import { type EslintNoRestrictedImportsConfig } from './deep-relative-emitters.js';
|
|
3
|
+
export declare const WORKSPACE_PACKAGE_RULE = "workspace-package";
|
|
3
4
|
export declare function toEslintWorkspacePackageApi(analysis: WorkspacePackageAnalysis): EslintNoRestrictedImportsConfig | null;
|
|
4
5
|
//# sourceMappingURL=workspace-package-emitters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-package-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/workspace-package-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAmB,KAAK,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAIpG,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,wBAAwB,GACjC,+BAA+B,GAAG,IAAI,CAoBxC"}
|
|
1
|
+
{"version":3,"file":"workspace-package-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/workspace-package-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAmB,KAAK,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAIpG,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,wBAAwB,GACjC,+BAA+B,GAAG,IAAI,CAoBxC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { exemptImporters } from './deep-relative-emitters.js';
|
|
2
2
|
const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
3
|
+
export const WORKSPACE_PACKAGE_RULE = 'workspace-package';
|
|
3
4
|
export function toEslintWorkspacePackageApi(analysis) {
|
|
4
5
|
if (analysis.consumerCount === 0 || analysis.packages.length === 0)
|
|
5
6
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-package-emitters.js","sourceRoot":"","sources":["../../src/generator/workspace-package-emitters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAwC,MAAM,6BAA6B,CAAC;AAEpG,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAE7F,MAAM,UAAU,2BAA2B,CACzC,QAAkC;IAElC,IAAI,QAAQ,CAAC,aAAa,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChF,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5D,OAAO;QACL,GAAG,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;QACvC,KAAK,EAAE;YACL,uBAAuB,EAAE;gBACvB,OAAO;gBACP;oBACE,QAAQ,EAAE;wBACR;4BACE,KAAK,EAAE,KAAK,KAAK,IAAI;4BACrB,OAAO,EAAE,0EAA0E;yBACpF;qBACF;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"workspace-package-emitters.js","sourceRoot":"","sources":["../../src/generator/workspace-package-emitters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAwC,MAAM,6BAA6B,CAAC;AAEpG,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAE7F,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAE1D,MAAM,UAAU,2BAA2B,CACzC,QAAkC;IAElC,IAAI,QAAQ,CAAC,aAAa,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChF,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5D,OAAO;QACL,GAAG,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;QACvC,KAAK,EAAE;YACL,uBAAuB,EAAE;gBACvB,OAAO;gBACP;oBACE,QAAQ,EAAE;wBACR;4BACE,KAAK,EAAE,KAAK,KAAK,IAAI;4BACrB,OAAO,EAAE,0EAA0E;yBACpF;qBACF;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "archprint",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"mcpName": "io.github.Tommkruix/archprint",
|
|
5
5
|
"description": "Mine the architecture rules your TypeScript repo already enforces, with the evidence attached.",
|
|
6
6
|
"keywords": [
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"dependencies": {
|
|
82
82
|
"@modelcontextprotocol/sdk": "^1.31.0",
|
|
83
83
|
"commander": "^15.0.0",
|
|
84
|
-
"ignore": "7.0.
|
|
84
|
+
"ignore": "7.0.14",
|
|
85
85
|
"ts-morph": "28.0.0",
|
|
86
86
|
"typescript": "6.0.3"
|
|
87
87
|
},
|