@clearlydev/nx-archweave 0.0.0-stage → 0.1.1

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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +265 -2
  3. package/dist/bin/review-verdict.js +330 -0
  4. package/dist/eslint/fsd-boundaries.d.ts +119 -0
  5. package/dist/eslint/fsd-boundaries.js +144 -0
  6. package/dist/eslint/index.d.ts +78 -0
  7. package/dist/eslint/index.js +256 -0
  8. package/dist/eslint/tsconfig-aliases.d.ts +18 -0
  9. package/dist/eslint/tsconfig-aliases.js +114 -0
  10. package/dist/generators/add-agent-rules/generator.js +550 -0
  11. package/dist/generators/add-agent-rules/render.js +46 -0
  12. package/dist/generators/add-backend/generator.js +784 -0
  13. package/dist/generators/add-backend/render.js +102 -0
  14. package/dist/generators/add-fsd-lite/generator.js +553 -0
  15. package/dist/generators/add-fsd-lite/render.js +72 -0
  16. package/dist/generators/add-github-templates/files/en/codeowners/.github/CODEOWNERS.template +4 -0
  17. package/dist/generators/add-github-templates/files/en/issue/.github/ISSUE_TEMPLATE/bug-report.yml.template +28 -0
  18. package/dist/generators/add-github-templates/files/en/issue/.github/ISSUE_TEMPLATE/feature-request.yml.template +17 -0
  19. package/dist/generators/add-github-templates/files/en/pr/.github/PULL_REQUEST_TEMPLATE.md.template +12 -0
  20. package/dist/generators/add-github-templates/files/ko/codeowners/.github/CODEOWNERS.template +4 -0
  21. package/dist/generators/add-github-templates/files/ko/issue/.github/ISSUE_TEMPLATE/bug-report.yml.template +28 -0
  22. package/dist/generators/add-github-templates/files/ko/issue/.github/ISSUE_TEMPLATE/feature-request.yml.template +17 -0
  23. package/dist/generators/add-github-templates/files/ko/pr/.github/PULL_REQUEST_TEMPLATE.md.template +12 -0
  24. package/dist/generators/add-github-templates/generator.js +125 -0
  25. package/dist/generators/add-github-templates/render.js +26 -0
  26. package/dist/generators/add-integration/generator.js +818 -0
  27. package/dist/generators/add-integration/render.js +34 -0
  28. package/dist/generators/add-review/generator.js +921 -0
  29. package/dist/generators/add-review/render.js +96 -0
  30. package/dist/generators/allow-builds/generator.js +436 -0
  31. package/dist/generators/allow-builds/render.js +82 -0
  32. package/dist/generators/doctor/generator.js +2431 -0
  33. package/dist/generators/doctor/integration-report.js +70 -0
  34. package/dist/generators/doctor/render.js +10 -0
  35. package/dist/generators/entity/generator.js +395 -0
  36. package/dist/generators/feature/generator.js +395 -0
  37. package/dist/generators/init/generator.js +3211 -0
  38. package/dist/generators/init/render.js +125 -0
  39. package/dist/generators/init/validation.js +74 -0
  40. package/dist/generators/install-integration/generator.js +1233 -0
  41. package/dist/generators/install-integration/render.js +128 -0
  42. package/dist/generators/page/generator.js +395 -0
  43. package/dist/generators/record-integration/generator.js +852 -0
  44. package/dist/generators/record-integration/render.js +31 -0
  45. package/dist/generators/shared/dry-run.js +12 -0
  46. package/dist/generators/shared/frontend-app.js +57 -0
  47. package/dist/generators/shared/generator.js +395 -0
  48. package/dist/generators/shared/project-type.js +39 -0
  49. package/dist/generators/shared/record-pipeline.js +34 -0
  50. package/dist/generators/shared/run-nx.js +24 -0
  51. package/dist/generators/shared/template-files.js +38 -0
  52. package/dist/generators/shared/toolkit-config-file.js +110 -0
  53. package/dist/generators/slice/core.js +185 -0
  54. package/dist/generators/slice/files/index/index.ts.template +14 -0
  55. package/dist/generators/slice/files/module/__name__.spec.ts.template +11 -0
  56. package/dist/generators/slice/files/module/__name__.ts.template +11 -0
  57. package/dist/generators/slice/files/segment/index.ts.template +20 -0
  58. package/dist/generators/slice/render.js +70 -0
  59. package/dist/generators/widget/generator.js +395 -0
  60. package/dist/index.d.ts +2 -0
  61. package/dist/index.js +680 -0
  62. package/dist/lib/nx-plugin.d.ts +2 -0
  63. package/dist/lib/nx-plugin.js +7 -0
  64. package/dist/runtime/integrations-composition-root.js +20 -0
  65. package/dist/runtime/node-command-runner.js +81 -0
  66. package/generators.json +85 -0
  67. package/package.json +95 -4
  68. package/src/generators/add-agent-rules/schema.json +43 -0
  69. package/src/generators/add-backend/schema.json +39 -0
  70. package/src/generators/add-fsd-lite/schema.json +43 -0
  71. package/src/generators/add-github-templates/schema.json +35 -0
  72. package/src/generators/add-integration/schema.json +35 -0
  73. package/src/generators/add-review/schema.json +72 -0
  74. package/src/generators/allow-builds/schema.json +20 -0
  75. package/src/generators/doctor/schema.json +20 -0
  76. package/src/generators/entity/schema.json +37 -0
  77. package/src/generators/feature/schema.json +37 -0
  78. package/src/generators/init/schema.json +98 -0
  79. package/src/generators/install-integration/schema.json +35 -0
  80. package/src/generators/page/schema.json +53 -0
  81. package/src/generators/record-integration/schema.json +26 -0
  82. package/src/generators/shared/schema.json +32 -0
  83. package/src/generators/widget/schema.json +45 -0
@@ -0,0 +1,114 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { dirname, isAbsolute, relative, resolve, sep } from 'node:path';
3
+ /**
4
+ * Import aliases from a tsconfig's `compilerOptions.paths`: every
5
+ * `"<prefix>*": ["<dir>/*"]` entry becomes `{ "<prefix>": "<dir>" }`, the directory relative
6
+ * to `cwd` (what the rule's `aliases` option takes). The `extends` chain is followed
7
+ * (relative paths only — a package preset is skipped), the nearest config winning per key;
8
+ * `baseUrl` of the config that declares the paths resolves the targets. Comments and
9
+ * trailing commas are tolerated, like tsc. Anything unreadable yields nothing: the rule
10
+ * then falls back to its default alias — a wrong alias map costs a missed report, never a
11
+ * false one, so this stays best-effort.
12
+ */
13
+ export function aliasesFromTsconfig({ cwd, tsconfig = 'tsconfig.json', maxDepth = 8 }) {
14
+ const aliases = {};
15
+ let current = resolve(cwd, tsconfig);
16
+ const seen = new Set();
17
+ for (let depth = 0; current !== null && depth < maxDepth && !seen.has(current); depth++) {
18
+ seen.add(current);
19
+ const config = readJsonc(current);
20
+ if (config === null)
21
+ break;
22
+ const compilerOptions = asRecord(config['compilerOptions']);
23
+ const paths = asRecord(compilerOptions?.['paths']);
24
+ if (paths) {
25
+ const baseUrl = typeof compilerOptions?.['baseUrl'] === 'string' ? resolve(dirname(current), compilerOptions['baseUrl']) : dirname(current);
26
+ for (const [pattern, targets] of Object.entries(paths)) {
27
+ if (!pattern.endsWith('*'))
28
+ continue;
29
+ const prefix = pattern.slice(0, -1);
30
+ if (prefix in aliases)
31
+ continue; // a nearer config already decided this prefix
32
+ const target = Array.isArray(targets) ? targets.find((t) => typeof t === 'string') : undefined;
33
+ if (target === undefined || !target.endsWith('/*'))
34
+ continue;
35
+ const dir = toPosix(relative(cwd, resolve(baseUrl, target.slice(0, -'/*'.length))));
36
+ aliases[prefix] = dir === '' ? '.' : dir;
37
+ }
38
+ }
39
+ const parent = config['extends'];
40
+ const parentPath = typeof parent === 'string' ? parent : Array.isArray(parent) ? parent.find((p) => typeof p === 'string') : undefined;
41
+ current = parentPath !== undefined && (parentPath.startsWith('.') || isAbsolute(parentPath)) ? resolveExtends(dirname(current), parentPath) : null;
42
+ }
43
+ return aliases;
44
+ }
45
+ function resolveExtends(fromDir, target) {
46
+ const candidates = [resolve(fromDir, target), resolve(fromDir, `${target}.json`)];
47
+ return candidates.find((candidate) => existsSync(candidate)) ?? null;
48
+ }
49
+ function asRecord(value) {
50
+ return typeof value === 'object' && value !== null && !Array.isArray(value) ? value : null;
51
+ }
52
+ function toPosix(path) {
53
+ return sep === '/' ? path : path.split(sep).join('/');
54
+ }
55
+ /** tsconfig is JSON with comments and trailing commas; strip both outside strings. */
56
+ export function readJsonc(path) {
57
+ let text;
58
+ try {
59
+ text = readFileSync(path, 'utf-8');
60
+ }
61
+ catch {
62
+ return null;
63
+ }
64
+ let out = '';
65
+ let mode = 'code';
66
+ for (let i = 0; i < text.length; i++) {
67
+ const c = text[i];
68
+ const d = text[i + 1];
69
+ if (mode === 'code') {
70
+ if (c === '"') {
71
+ mode = 'string';
72
+ out += c;
73
+ }
74
+ else if (c === '/' && d === '/') {
75
+ mode = 'line';
76
+ i++;
77
+ }
78
+ else if (c === '/' && d === '*') {
79
+ mode = 'block';
80
+ i++;
81
+ }
82
+ else {
83
+ out += c;
84
+ }
85
+ }
86
+ else if (mode === 'string') {
87
+ out += c;
88
+ if (c === '\\') {
89
+ out += d ?? '';
90
+ i++;
91
+ }
92
+ else if (c === '"') {
93
+ mode = 'code';
94
+ }
95
+ }
96
+ else if (mode === 'line') {
97
+ if (c === '\n') {
98
+ mode = 'code';
99
+ out += c;
100
+ }
101
+ }
102
+ else if (c === '*' && d === '/') {
103
+ mode = 'code';
104
+ i++;
105
+ }
106
+ }
107
+ try {
108
+ const parsed = JSON.parse(out.replace(/,(\s*[}\]])/g, '$1'));
109
+ return asRecord(parsed);
110
+ }
111
+ catch {
112
+ return null;
113
+ }
114
+ }