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.
Files changed (63) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +4 -4
  3. package/dist/cli/adopted-rules.d.ts +21 -2
  4. package/dist/cli/adopted-rules.d.ts.map +1 -1
  5. package/dist/cli/adopted-rules.js +95 -2
  6. package/dist/cli/adopted-rules.js.map +1 -1
  7. package/dist/cli/allow.d.ts.map +1 -1
  8. package/dist/cli/allow.js +12 -3
  9. package/dist/cli/allow.js.map +1 -1
  10. package/dist/cli/allowed-evidence.d.ts.map +1 -1
  11. package/dist/cli/allowed-evidence.js +105 -0
  12. package/dist/cli/allowed-evidence.js.map +1 -1
  13. package/dist/cli/check-evaluate.d.ts.map +1 -1
  14. package/dist/cli/check-evaluate.js +78 -0
  15. package/dist/cli/check-evaluate.js.map +1 -1
  16. package/dist/cli/generate.d.ts.map +1 -1
  17. package/dist/cli/generate.js +46 -20
  18. package/dist/cli/generate.js.map +1 -1
  19. package/dist/cli/layout.d.ts +5 -2
  20. package/dist/cli/layout.d.ts.map +1 -1
  21. package/dist/cli/layout.js +43 -10
  22. package/dist/cli/layout.js.map +1 -1
  23. package/dist/cli/migrate.d.ts.map +1 -1
  24. package/dist/cli/migrate.js +1 -2
  25. package/dist/cli/migrate.js.map +1 -1
  26. package/dist/cli/program.d.ts.map +1 -1
  27. package/dist/cli/program.js +10 -6
  28. package/dist/cli/program.js.map +1 -1
  29. package/dist/cli/recommend.d.ts +3 -0
  30. package/dist/cli/recommend.d.ts.map +1 -1
  31. package/dist/cli/recommend.js +16 -1
  32. package/dist/cli/recommend.js.map +1 -1
  33. package/dist/cli/report.js +1 -1
  34. package/dist/cli/report.js.map +1 -1
  35. package/dist/generator/app-isolation-emitters.d.ts +1 -0
  36. package/dist/generator/app-isolation-emitters.d.ts.map +1 -1
  37. package/dist/generator/app-isolation-emitters.js +2 -1
  38. package/dist/generator/app-isolation-emitters.js.map +1 -1
  39. package/dist/generator/env-access-emitters.d.ts +1 -0
  40. package/dist/generator/env-access-emitters.d.ts.map +1 -1
  41. package/dist/generator/env-access-emitters.js +1 -0
  42. package/dist/generator/env-access-emitters.js.map +1 -1
  43. package/dist/generator/feature-slice-emitters.d.ts +1 -0
  44. package/dist/generator/feature-slice-emitters.d.ts.map +1 -1
  45. package/dist/generator/feature-slice-emitters.js +2 -1
  46. package/dist/generator/feature-slice-emitters.js.map +1 -1
  47. package/dist/generator/role-layering-emitters.d.ts +2 -0
  48. package/dist/generator/role-layering-emitters.d.ts.map +1 -1
  49. package/dist/generator/role-layering-emitters.js +2 -1
  50. package/dist/generator/role-layering-emitters.js.map +1 -1
  51. package/dist/generator/stories-isolation-emitters.d.ts +1 -0
  52. package/dist/generator/stories-isolation-emitters.d.ts.map +1 -1
  53. package/dist/generator/stories-isolation-emitters.js +2 -1
  54. package/dist/generator/stories-isolation-emitters.js.map +1 -1
  55. package/dist/generator/ui-data-isolation-emitters.d.ts +1 -0
  56. package/dist/generator/ui-data-isolation-emitters.d.ts.map +1 -1
  57. package/dist/generator/ui-data-isolation-emitters.js +2 -1
  58. package/dist/generator/ui-data-isolation-emitters.js.map +1 -1
  59. package/dist/generator/workspace-package-emitters.d.ts +1 -0
  60. package/dist/generator/workspace-package-emitters.d.ts.map +1 -1
  61. package/dist/generator/workspace-package-emitters.js +1 -0
  62. package/dist/generator/workspace-package-emitters.js.map +1 -1
  63. 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: `no-${boundary.from.toLowerCase()}-to-${boundary.to.toLowerCase()}`,
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,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;QACzE,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"}
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;AAID,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,wBAAwB,GACjC,sBAAsB,CAexB"}
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: 'no-import-stories',
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,mBAAmB;gBACzB,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
+ {"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,4 +1,5 @@
1
1
  import type { UiDataIsolationAnalysis } from '../detector/ui-data-isolation-detector.js';
2
+ export declare const UI_DATA_RULE = "no-ui-to-data";
2
3
  export interface UiDataRule {
3
4
  name: string;
4
5
  comment: string;
@@ -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;AAkBzF,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
+ {"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: 'no-ui-to-data',
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,eAAe;gBACrB,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
+ {"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.14.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.12",
84
+ "ignore": "7.0.14",
85
85
  "ts-morph": "28.0.0",
86
86
  "typescript": "6.0.3"
87
87
  },