@azure-net/cli 5.1.1 → 6.0.0-next.2

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 (176) hide show
  1. package/README.md +189 -0
  2. package/bin/azure-net.js +236 -221
  3. package/dist/bin/azure-net.d.ts +2 -0
  4. package/dist/src/checks/architecture.d.ts +20 -0
  5. package/dist/src/checks/checkDomain.d.ts +1 -0
  6. package/dist/src/checks/checkFoldersStructure.d.ts +1 -0
  7. package/dist/src/checks/checkHooks.d.ts +1 -0
  8. package/dist/src/checks/checkImports.d.ts +1 -0
  9. package/dist/src/checks/checkInternal.d.ts +1 -0
  10. package/dist/src/checks/checkLayerBoundaries.d.ts +1 -0
  11. package/dist/src/checks/checkLayerImports.d.ts +1 -0
  12. package/dist/src/checks/checkPresenterNames.d.ts +1 -0
  13. package/dist/src/checks/checkProject.d.ts +1 -0
  14. package/dist/src/checks/checkProviderGraph.d.ts +1 -0
  15. package/dist/src/checks/checkProviderNames.d.ts +1 -0
  16. package/dist/src/generate/layers/generateRepository.d.ts +1 -0
  17. package/dist/src/generate/layers/generateRepositoryMethod.d.ts +1 -0
  18. package/dist/src/generate/layers/generateUseCases.d.ts +1 -0
  19. package/dist/src/generate/module/generateDomain.d.ts +8 -0
  20. package/dist/src/generate/module/generateModule.d.ts +1 -0
  21. package/dist/src/generate/module/generateModulePreset.d.ts +1 -0
  22. package/dist/src/generate/module/generatePresenter.d.ts +29 -0
  23. package/dist/src/generate/module/generateRepository.d.ts +15 -0
  24. package/dist/src/generate/module/generateRepositoryMethod.d.ts +2 -0
  25. package/dist/src/generate/module/generateSchemaFromType.d.ts +9 -0
  26. package/dist/src/generate/module/generateStore.d.ts +1 -0
  27. package/dist/src/generate/module/generateTypesJson.d.ts +2 -0
  28. package/dist/src/generate/module/generateUseCases.d.ts +1 -0
  29. package/dist/src/generate/module/repositoryModuleShared.d.ts +89 -0
  30. package/dist/src/generate/routes/generateRoutes.d.ts +14 -0
  31. package/dist/src/generate/ui/generateComponent.d.ts +1 -0
  32. package/dist/src/generate/ui/generateDesignComponent.d.ts +1 -0
  33. package/dist/src/generate/ui/generateWidget.d.ts +1 -0
  34. package/dist/src/git/commit.d.ts +23 -0
  35. package/dist/src/git/push.d.ts +11 -0
  36. package/dist/src/git/runGit.d.ts +2 -0
  37. package/dist/src/init/initAliases.d.ts +12 -0
  38. package/dist/src/init/initEdges.d.ts +2 -0
  39. package/dist/src/init/initStructure.d.ts +1 -0
  40. package/dist/src/install/configureCommitTools.d.ts +1 -0
  41. package/dist/src/install/installFresh.d.ts +1 -0
  42. package/dist/src/migrate/migrate.d.ts +22 -0
  43. package/dist/src/migrate/presenters.d.ts +7 -0
  44. package/dist/src/plugins/addLint.d.ts +5 -0
  45. package/dist/src/scaffolds/createCoreSchema.d.ts +1 -0
  46. package/dist/src/scaffolds/createDatasource.d.ts +1 -0
  47. package/dist/src/scaffolds/createProgram.d.ts +1 -0
  48. package/dist/src/scaffolds/createResponse.d.ts +1 -0
  49. package/dist/src/scaffolds/createSchemaRule.d.ts +1 -0
  50. package/dist/src/scaffolds/createTranslationManager.d.ts +1 -0
  51. package/{src/scaffolds/index.ts → dist/src/scaffolds/index.d.ts} +0 -2
  52. package/dist/src/scaffolds/registerDatasource.d.ts +2 -0
  53. package/dist/src/scaffolds/updateDefaultFactoryConfig.d.ts +1 -0
  54. package/dist/src/utils/architecture.d.ts +31 -0
  55. package/dist/src/utils/contextUtils.d.ts +6 -0
  56. package/dist/src/utils/fileUtils.d.ts +5 -0
  57. package/dist/src/utils/flattenConfig.d.ts +2 -0
  58. package/dist/src/utils/legacyAliases.d.ts +1 -0
  59. package/dist/src/utils/loadConfig.d.ts +16 -0
  60. package/dist/src/utils/packageImports.d.ts +4 -0
  61. package/dist/src/utils/sharedFoundation.d.ts +20 -0
  62. package/dist/src/utils/viteConfig.d.ts +9 -0
  63. package/package.json +48 -36
  64. package/src/checks/architecture.js +154 -0
  65. package/src/checks/checkDomain.js +124 -154
  66. package/src/checks/checkFoldersStructure.js +64 -52
  67. package/src/checks/checkHooks.js +12 -12
  68. package/src/checks/checkImports.js +26 -142
  69. package/src/checks/checkInternal.js +27 -24
  70. package/src/checks/checkLayerBoundaries.js +22 -197
  71. package/src/checks/checkLayerImports.js +14 -134
  72. package/src/checks/checkPresenterNames.js +156 -143
  73. package/src/checks/checkProject.js +27 -26
  74. package/src/checks/checkProviderGraph.js +182 -166
  75. package/src/checks/checkProviderNames.js +123 -112
  76. package/src/generate/layers/generateRepository.js +1 -109
  77. package/src/generate/layers/generateRepositoryMethod.js +1 -90
  78. package/src/generate/layers/generateUseCases.js +1 -44
  79. package/src/generate/module/generateDomain.js +81 -105
  80. package/src/generate/module/generateModule.js +34 -68
  81. package/src/generate/module/generateModulePreset.js +188 -248
  82. package/src/generate/module/generatePresenter.js +441 -369
  83. package/src/generate/module/generateRepository.js +102 -121
  84. package/src/generate/module/generateRepositoryMethod.js +117 -0
  85. package/src/generate/module/generateSchemaFromType.js +283 -280
  86. package/src/generate/module/generateStore.js +41 -0
  87. package/src/generate/module/generateTypesJson.js +196 -195
  88. package/src/generate/module/generateUseCases.js +47 -55
  89. package/src/generate/module/repositoryModuleShared.js +480 -459
  90. package/src/generate/routes/generateRoutes.js +4 -7
  91. package/src/generate/ui/generateComponent.js +44 -64
  92. package/src/generate/ui/generateDesignComponent.js +21 -41
  93. package/src/generate/ui/generateWidget.js +21 -41
  94. package/src/git/commit.js +67 -0
  95. package/src/git/push.js +19 -0
  96. package/src/git/runGit.js +11 -0
  97. package/src/init/initAliases.js +19 -135
  98. package/src/init/initEdges.js +79 -54
  99. package/src/init/initStructure.js +31 -145
  100. package/src/install/configureCommitTools.js +1 -0
  101. package/src/install/installFresh.js +39 -68
  102. package/src/migrate/migrate.js +914 -0
  103. package/src/migrate/presenters.js +265 -0
  104. package/src/plugins/addLint.js +52 -219
  105. package/src/scaffolds/createCoreSchema.js +65 -91
  106. package/src/scaffolds/createDatasource.js +67 -101
  107. package/src/scaffolds/createProgram.js +8 -8
  108. package/src/scaffolds/createResponse.js +29 -29
  109. package/src/scaffolds/createSchemaRule.js +19 -19
  110. package/src/scaffolds/createTranslationManager.js +84 -37
  111. package/src/scaffolds/index.js +0 -2
  112. package/src/scaffolds/registerDatasource.js +59 -0
  113. package/src/scaffolds/updateDefaultFactoryConfig.js +31 -0
  114. package/src/utils/architecture.js +145 -0
  115. package/src/utils/contextUtils.js +32 -65
  116. package/src/utils/fileUtils.js +69 -50
  117. package/src/utils/flattenConfig.js +38 -0
  118. package/src/utils/legacyAliases.js +75 -0
  119. package/src/utils/loadConfig.js +76 -40
  120. package/src/utils/packageImports.js +63 -0
  121. package/src/utils/sharedFoundation.js +36 -42
  122. package/src/utils/viteConfig.js +295 -0
  123. package/.prettierrc +0 -7
  124. package/bin/azure-net.ts +0 -308
  125. package/eslint.config.js +0 -34
  126. package/src/checks/checkDomain.ts +0 -223
  127. package/src/checks/checkFoldersStructure.ts +0 -85
  128. package/src/checks/checkHooks.ts +0 -22
  129. package/src/checks/checkImports.ts +0 -193
  130. package/src/checks/checkInternal.ts +0 -48
  131. package/src/checks/checkLayerBoundaries.ts +0 -255
  132. package/src/checks/checkLayerImports.ts +0 -185
  133. package/src/checks/checkPresenterNames.ts +0 -203
  134. package/src/checks/checkProject.ts +0 -45
  135. package/src/checks/checkProviderGraph.ts +0 -234
  136. package/src/checks/checkProviderNames.ts +0 -165
  137. package/src/generate/layers/generateRepository.ts +0 -123
  138. package/src/generate/layers/generateRepositoryMethod.ts +0 -102
  139. package/src/generate/layers/generateUseCases.ts +0 -50
  140. package/src/generate/layers/repositoryShared.js +0 -506
  141. package/src/generate/layers/repositoryShared.ts +0 -662
  142. package/src/generate/module/generateDomain.ts +0 -147
  143. package/src/generate/module/generateModule.ts +0 -84
  144. package/src/generate/module/generateModulePreset.ts +0 -338
  145. package/src/generate/module/generatePresenter.ts +0 -498
  146. package/src/generate/module/generateRepository.ts +0 -158
  147. package/src/generate/module/generateSchemaFromType.ts +0 -368
  148. package/src/generate/module/generateTypesJson.ts +0 -259
  149. package/src/generate/module/generateUseCases.ts +0 -67
  150. package/src/generate/module/repositoryModuleShared.ts +0 -669
  151. package/src/generate/routes/generateRoutes.ts +0 -275
  152. package/src/generate/ui/generateComponent.ts +0 -100
  153. package/src/generate/ui/generateDesignComponent.ts +0 -71
  154. package/src/generate/ui/generateWidget.ts +0 -71
  155. package/src/init/initAliases.ts +0 -172
  156. package/src/init/initEdges.ts +0 -74
  157. package/src/init/initStructure.ts +0 -172
  158. package/src/install/installFresh.ts +0 -93
  159. package/src/plugins/addLint.ts +0 -274
  160. package/src/scaffolds/createCoreSchema.ts +0 -130
  161. package/src/scaffolds/createDatasource.ts +0 -161
  162. package/src/scaffolds/createDatasourceProvider.js +0 -127
  163. package/src/scaffolds/createDatasourceProvider.ts +0 -161
  164. package/src/scaffolds/createPresenterFactory.js +0 -83
  165. package/src/scaffolds/createPresenterFactory.ts +0 -102
  166. package/src/scaffolds/createProgram.ts +0 -19
  167. package/src/scaffolds/createResponse.ts +0 -66
  168. package/src/scaffolds/createSchemaRule.ts +0 -44
  169. package/src/scaffolds/createTranslationManager.ts +0 -80
  170. package/src/utils/contextUtils.ts +0 -88
  171. package/src/utils/fileUtils.ts +0 -74
  172. package/src/utils/loadConfig.ts +0 -68
  173. package/src/utils/sharedFoundation.ts +0 -70
  174. package/tsconfig.json +0 -19
  175. /package/{src/checks/index.ts → dist/src/checks/index.d.ts} +0 -0
  176. /package/{src/plugins/index.ts → dist/src/plugins/index.d.ts} +0 -0
@@ -0,0 +1,295 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import ts from 'typescript';
4
+ import { format, resolveConfig } from 'prettier';
5
+ import { mergeAliasesInSvelteConfig } from './legacyAliases.js';
6
+ import { ARCHITECTURE_ALIASES } from './architecture.js';
7
+ export const VITE_CONFIGS = ['vite.config.ts', 'vite.config.js', 'vite.config.mts', 'vite.config.mjs'];
8
+ export const SVELTE_CONFIGS = ['svelte.config.js', 'svelte.config.ts', 'svelte.config.mjs'];
9
+ const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });
10
+ const parse = (text) => ts.createSourceFile('config.ts', text, ts.ScriptTarget.Latest, true);
11
+ const name = (node) => node && (ts.isIdentifier(node) || ts.isStringLiteral(node)) ? node.text : undefined;
12
+ function object(expression, source, seen = new Set()) {
13
+ if (ts.isObjectLiteralExpression(expression))
14
+ return expression;
15
+ if (ts.isParenthesizedExpression(expression) || ts.isAsExpression(expression) || ts.isSatisfiesExpression(expression))
16
+ return object(expression.expression, source, seen);
17
+ if (ts.isIdentifier(expression) && !seen.has(expression.text)) {
18
+ seen.add(expression.text);
19
+ for (const statement of source.statements)
20
+ if (ts.isVariableStatement(statement))
21
+ for (const d of statement.declarationList.declarations)
22
+ if (name(d.name) === expression.text && d.initializer)
23
+ return object(d.initializer, source, seen);
24
+ }
25
+ throw new Error('Cannot safely edit dynamic SvelteKit options. Use an object literal or a local object variable in sveltekit().');
26
+ }
27
+ function kitCall(source) {
28
+ const names = new Set();
29
+ for (const s of source.statements)
30
+ if (ts.isImportDeclaration(s) && ts.isStringLiteral(s.moduleSpecifier) && s.moduleSpecifier.text === '@sveltejs/kit/vite') {
31
+ const b = s.importClause?.namedBindings;
32
+ if (b && ts.isNamedImports(b))
33
+ for (const e of b.elements)
34
+ if ((e.propertyName?.text ?? e.name.text) === 'sveltekit')
35
+ names.add(e.name.text);
36
+ }
37
+ const calls = [];
38
+ const visit = (n) => {
39
+ if (ts.isCallExpression(n) && ts.isIdentifier(n.expression) && names.has(n.expression.text))
40
+ calls.push(n);
41
+ ts.forEachChild(n, visit);
42
+ };
43
+ visit(source);
44
+ if (calls.length !== 1)
45
+ throw new Error('Expected exactly one imported sveltekit() call in vite.config. No files changed.');
46
+ return calls[0];
47
+ }
48
+ function modernOptions(input, source) {
49
+ const has = (obj, key) => obj.properties.some((p) => name(p.name) === key);
50
+ const nestedHas = (key, keys) => {
51
+ const property = input.properties.find((p) => name(p.name) === key);
52
+ if (!property || !ts.isPropertyAssignment(property))
53
+ return false;
54
+ const value = objectOrUndefined(property.initializer, source);
55
+ return value && keys.some((k) => has(value, k));
56
+ };
57
+ if (!['kit', 'vitePlugin', 'preloadStrategy'].some((k) => has(input, k)) &&
58
+ !nestedHas('files', ['lib']) &&
59
+ !nestedHas('experimental', ['handleRenderingErrors', 'instrumentation', 'tracing']) &&
60
+ !nestedHas('prerender', ['origin']) &&
61
+ !nestedHas('csrf', ['checkOrigin']))
62
+ return input.getText(source);
63
+ const print = (n) => printer.printNode(ts.EmitHint.Unspecified, n, source);
64
+ const props = [...input.properties];
65
+ const take = (items, key) => {
66
+ const found = items.findIndex((p) => name(p.name) === key);
67
+ if (found < 0)
68
+ return;
69
+ const p = items.splice(found, 1)[0];
70
+ if (!ts.isPropertyAssignment(p))
71
+ throw new Error(`Cannot safely convert option ${key}`);
72
+ return p.initializer;
73
+ };
74
+ const set = (items, key, value) => {
75
+ if (items.some((p) => name(p.name) === key))
76
+ throw new Error(`Conflicting SvelteKit option ${key}; resolve manually.`);
77
+ items.push(ts.factory.createPropertyAssignment(key, value));
78
+ };
79
+ const nested = (key, edit) => {
80
+ const value = take(props, key);
81
+ if (!value)
82
+ return;
83
+ const items = [...object(value, source).properties];
84
+ edit(items);
85
+ if (items.length)
86
+ set(props, key, ts.factory.createObjectLiteralExpression(items, true));
87
+ };
88
+ const oldKit = take(props, 'kit');
89
+ if (oldKit)
90
+ for (const p of object(oldKit, source).properties) {
91
+ if (props.some((existing) => name(existing.name) && name(existing.name) === name(p.name)))
92
+ throw new Error(`Conflicting option ${name(p.name)}`);
93
+ props.push(p);
94
+ }
95
+ const vitePlugin = take(props, 'vitePlugin');
96
+ if (vitePlugin)
97
+ for (const p of object(vitePlugin, source).properties) {
98
+ if (props.some((existing) => name(existing.name) && name(existing.name) === name(p.name)))
99
+ throw new Error(`Conflicting option ${name(p.name)}`);
100
+ props.push(p);
101
+ }
102
+ take(props, 'preloadStrategy');
103
+ nested('files', (items) => {
104
+ take(items, 'lib');
105
+ });
106
+ nested('experimental', (items) => {
107
+ take(items, 'handleRenderingErrors');
108
+ take(items, 'instrumentation');
109
+ const tracing = take(items, 'tracing');
110
+ if (tracing)
111
+ set(props, 'tracing', tracing);
112
+ });
113
+ let origin;
114
+ nested('prerender', (items) => {
115
+ origin = take(items, 'origin');
116
+ });
117
+ if (origin) {
118
+ const paths = take(props, 'paths');
119
+ const items = paths ? [...object(paths, source).properties] : [];
120
+ set(items, 'origin', origin);
121
+ set(props, 'paths', ts.factory.createObjectLiteralExpression(items, true));
122
+ }
123
+ nested('csrf', (items) => {
124
+ const check = take(items, 'checkOrigin');
125
+ if (!check)
126
+ return;
127
+ if (check.kind === ts.SyntaxKind.FalseKeyword) {
128
+ if (items.some((p) => name(p.name) === 'trustedOrigins'))
129
+ throw new Error('Resolve csrf.checkOrigin and trustedOrigins manually.');
130
+ set(items, 'trustedOrigins', ts.factory.createArrayLiteralExpression([ts.factory.createStringLiteral('*')]));
131
+ }
132
+ else if (check.kind !== ts.SyntaxKind.TrueKeyword)
133
+ throw new Error('Dynamic csrf.checkOrigin requires manual migration.');
134
+ });
135
+ return print(ts.factory.createObjectLiteralExpression(props, true));
136
+ }
137
+ /** Pure config edit; never evaluates a project's configuration. */
138
+ export function mergeKitViteConfig(content, aliases, legacy) {
139
+ let source = parse(content);
140
+ const call = kitCall(source);
141
+ let options = call.arguments[0] ? object(call.arguments[0], source) : undefined;
142
+ let optionText = options ? modernOptions(options, source) : '{}';
143
+ if (legacy) {
144
+ if (options && options.properties.length)
145
+ throw new Error('Both Vite and legacy Svelte config contain options. Merge them with sv migrate sveltekit-3 first.');
146
+ const old = parse(legacy), exported = old.statements.find(ts.isExportAssignment);
147
+ if (!exported)
148
+ throw new Error('Legacy Svelte config has no default export.');
149
+ const root = object(exported.expression, old);
150
+ optionText = modernOptions(root, old);
151
+ const imports = old.statements.filter(ts.isImportDeclaration);
152
+ const bindings = (s) => {
153
+ const names = new Set();
154
+ for (const n of s.statements) {
155
+ if (ts.isImportDeclaration(n)) {
156
+ if (n.importClause?.name)
157
+ names.add(n.importClause.name.text);
158
+ const b = n.importClause?.namedBindings;
159
+ if (b && ts.isNamespaceImport(b))
160
+ names.add(b.name.text);
161
+ if (b && ts.isNamedImports(b))
162
+ for (const e of b.elements)
163
+ names.add(e.name.text);
164
+ }
165
+ if (ts.isVariableStatement(n))
166
+ for (const d of n.declarationList.declarations)
167
+ if (ts.isIdentifier(d.name))
168
+ names.add(d.name.text);
169
+ }
170
+ return names;
171
+ };
172
+ const oldNames = bindings(old);
173
+ const currentNames = bindings(source);
174
+ for (const n of oldNames)
175
+ if (currentNames.has(n))
176
+ throw new Error(`Config binding collision: ${n}. Run sv migrate sveltekit-3 first.`);
177
+ const rootStatement = old.statements.find((s) => ts.isVariableStatement(s) &&
178
+ s.declarationList.declarations.some((d) => d.initializer && objectOrUndefined(d.initializer, old) === root));
179
+ if (rootStatement && ts.isVariableStatement(rootStatement) && rootStatement.declarationList.declarations.length !== 1)
180
+ throw new Error('Split legacy config variable declarations before migration.');
181
+ for (const statement of old.statements)
182
+ if (!ts.isImportDeclaration(statement) &&
183
+ !ts.isExportAssignment(statement) &&
184
+ statement !== rootStatement &&
185
+ !ts.isEmptyStatement(statement))
186
+ throw new Error('Complex legacy config: run sv migrate sveltekit-3 first.');
187
+ const importText = imports.map((s) => s.getText(old)).join('\n');
188
+ content = content.slice(0, call.arguments.pos) + optionText + content.slice(call.arguments.end);
189
+ content = importText + '\n' + content;
190
+ source = parse(content);
191
+ const updated = kitCall(source);
192
+ options = object(updated.arguments[0], source);
193
+ }
194
+ const synthetic = mergeAliasesInSvelteConfig(`export default { kit: ${optionText} };`, aliases);
195
+ const merged = parse(synthetic).statements.find(ts.isExportAssignment);
196
+ const kit = merged.expression.properties[0];
197
+ const replacement = kit.initializer.getText(merged.getSourceFile());
198
+ if (options)
199
+ return content.slice(0, options.getStart(source)) + replacement + content.slice(options.end);
200
+ const actual = kitCall(source);
201
+ return content.slice(0, actual.arguments.pos) + replacement + content.slice(actual.arguments.end);
202
+ }
203
+ function objectOrUndefined(e, source) {
204
+ try {
205
+ return object(e, source);
206
+ }
207
+ catch {
208
+ return undefined;
209
+ }
210
+ }
211
+ export async function formatConfig(content, file) {
212
+ return format(content, { ...(await resolveConfig(file)), filepath: file, parser: 'typescript' });
213
+ }
214
+ export async function configureKitProject() {
215
+ const root = process.cwd();
216
+ const existing = async (names) => {
217
+ for (const n of names) {
218
+ try {
219
+ await fs.access(path.join(root, n));
220
+ return path.join(root, n);
221
+ }
222
+ catch (error) {
223
+ if (error.code !== 'ENOENT')
224
+ throw error;
225
+ }
226
+ }
227
+ };
228
+ const vite = await existing(VITE_CONFIGS), legacy = await existing(SVELTE_CONFIGS);
229
+ if (!vite && !legacy) {
230
+ console.warn('No Vite config found; initialize a SvelteKit project first.');
231
+ return;
232
+ }
233
+ const file = vite ?? path.join(root, 'vite.config.ts');
234
+ const content = vite
235
+ ? await fs.readFile(vite, 'utf8')
236
+ : "import { defineConfig } from 'vite';\nimport { sveltekit } from '@sveltejs/kit/vite';\nexport default defineConfig({plugins: [sveltekit()]});\n";
237
+ const old = legacy ? await fs.readFile(legacy, 'utf8') : undefined;
238
+ const next = await formatConfig(mergeKitViteConfig(content, ARCHITECTURE_ALIASES, old), file);
239
+ if (legacy) {
240
+ const backup = await fs.mkdtemp(path.join(await fs
241
+ .mkdir(path.join(root, '.azure-net/ConfigBackups'), { recursive: true })
242
+ .then(() => path.join(root, '.azure-net/ConfigBackups')), 'kit3-'));
243
+ await fs.writeFile(path.join(backup, path.basename(legacy)), old);
244
+ if (vite)
245
+ await fs.writeFile(path.join(backup, path.basename(vite)), content);
246
+ }
247
+ await fs.writeFile(file, next);
248
+ if (legacy)
249
+ await fs.unlink(legacy);
250
+ }
251
+ export function readStaticAliases(content) {
252
+ const aliases = {};
253
+ const source = parse(content);
254
+ const visit = (n) => {
255
+ if (ts.isPropertyAssignment(n) && name(n.name) === 'alias') {
256
+ const value = objectOrUndefined(n.initializer, source);
257
+ if (value)
258
+ for (const p of value.properties)
259
+ if (ts.isPropertyAssignment(p) && name(p.name) && ts.isStringLiteral(p.initializer))
260
+ aliases[name(p.name)] = p.initializer.text;
261
+ }
262
+ ts.forEachChild(n, visit);
263
+ };
264
+ visit(source);
265
+ return aliases;
266
+ }
267
+ /** Hydratable needs Svelte async mode. Preserve all unrelated literal options. */
268
+ export function enableHydratable(content) {
269
+ const source = parse(content);
270
+ const call = kitCall(source);
271
+ const update = (value, keys) => {
272
+ const key = keys[0];
273
+ const props = [...value.properties];
274
+ const existing = props.find((p) => name(p.name) === key);
275
+ if (existing && !ts.isPropertyAssignment(existing))
276
+ throw new Error(`Cannot safely configure ${keys.join('.')}. Use literal compilerOptions.`);
277
+ if (props.some(ts.isSpreadAssignment))
278
+ throw new Error('Cannot safely enable async mode in spread options. Set compilerOptions.experimental.async: true manually.');
279
+ const next = keys.length === 1
280
+ ? ts.factory.createTrue()
281
+ : update(existing ? object(existing.initializer, source) : ts.factory.createObjectLiteralExpression(), keys.slice(1));
282
+ const index = props.findIndex((p) => name(p.name) === key);
283
+ const property = ts.factory.createPropertyAssignment(key, next);
284
+ if (index === -1)
285
+ props.push(property);
286
+ else
287
+ props[index] = property;
288
+ return ts.factory.createObjectLiteralExpression(props, true);
289
+ };
290
+ const options = call.arguments[0] ? object(call.arguments[0], source) : ts.factory.createObjectLiteralExpression();
291
+ const updated = update(options, ['compilerOptions', 'experimental', 'async']);
292
+ return (content.slice(0, call.getStart(source)) +
293
+ `${call.expression.getText(source)}(${ts.createPrinter().printNode(ts.EmitHint.Expression, updated, source)})` +
294
+ content.slice(call.end));
295
+ }
package/.prettierrc DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "useTabs": true,
3
- "singleQuote": true,
4
- "trailingComma": "none",
5
- "printWidth": 140,
6
- "semi": true
7
- }
package/bin/azure-net.ts DELETED
@@ -1,308 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { Command } from 'commander';
4
- import { addLint } from '../src/plugins/index.js';
5
-
6
- const program = new Command();
7
-
8
- program.name('azure-net').description('Azure-Net CLI generator').version('4.1.0');
9
-
10
- const addCommand = program.command('add').description('Add project integrations and plugins');
11
- const createCommand = program.command('create').description('Create project boilerplate artifacts');
12
- const initCommand = program.command('init').description('Initialize project scaffolding');
13
- const installCommand = program.command('install').description('Install project presets and flows');
14
- const generateCommand = program.command('generate').description('Generate UI artifacts');
15
- const checkCommand = program.command('check').description('Run project checks');
16
-
17
- addCommand
18
- .command('commit-tools')
19
- .description('Setup linting and commit tools')
20
- .option('-m, --manager <manager>', 'Package manager: bun | pnpm | npm | yarn')
21
- .action(addLint);
22
-
23
- createCommand
24
- .command('schema-factory')
25
- .description('Create base schema in shared essentials foundation constructs')
26
- .action(async () => {
27
- const handler = (await import('../src/scaffolds/createCoreSchema.js')).default;
28
- await handler();
29
- });
30
-
31
- createCommand
32
- .command('translation-manager')
33
- .description('Create translation manager in shared essentials localization')
34
- .action(async () => {
35
- const handler = (await import('../src/scaffolds/createTranslationManager.js')).default;
36
- await handler();
37
- });
38
-
39
- createCommand
40
- .command('presenter-factory')
41
- .description('Create presenter factory in shared essentials foundation constructs')
42
- .action(async () => {
43
- const handler = (await import('../src/scaffolds/createPresenterFactory.js')).default;
44
- await handler();
45
- });
46
-
47
- createCommand
48
- .command('schema-rule')
49
- .description('Create schema rule in shared essentials foundation constructs')
50
- .action(async () => {
51
- const handler = (await import('../src/scaffolds/createSchemaRule.js')).default;
52
- await handler();
53
- });
54
-
55
- createCommand
56
- .command('response')
57
- .description('Create response in shared essentials foundation constructs')
58
- .action(async () => {
59
- const handler = (await import('../src/scaffolds/createResponse.js')).default;
60
- await handler();
61
- });
62
-
63
- createCommand
64
- .command('datasource')
65
- .description('Create datasource in core or context infrastructure')
66
- .action(async () => {
67
- const handler = (await import('../src/scaffolds/createDatasource.js')).default;
68
- await handler();
69
- });
70
-
71
- createCommand
72
- .command('datasource-provider')
73
- .description('Create datasource provider in core or context infrastructure')
74
- .action(async () => {
75
- const handler = (await import('../src/scaffolds/createDatasourceProvider.js')).default;
76
- await handler();
77
- });
78
-
79
- initCommand
80
- .command('edges')
81
- .description('Initialize edges plugin in vite config')
82
- .action(async () => {
83
- const handler = (await import('../src/init/initEdges.js')).default;
84
- await handler();
85
- });
86
-
87
- initCommand
88
- .command('folders-structure')
89
- .description('Generate base folders structure')
90
- .action(async () => {
91
- const handler = (await import('../src/init/initStructure.js')).default;
92
- await handler();
93
- });
94
-
95
- initCommand.action(async () => {
96
- const initStructure = (await import('../src/init/initStructure.js')).default;
97
- await initStructure();
98
- });
99
-
100
- installCommand
101
- .command('fresh')
102
- .description('Run full fresh install flow (structure + optional generators)')
103
- .action(async () => {
104
- const handler = (await import('../src/install/installFresh.js')).default;
105
- await handler();
106
- });
107
-
108
- generateCommand
109
- .command('component')
110
- .description('Generate UI component')
111
- .action(async () => {
112
- const handler = (await import('../src/generate/ui/generateComponent.js')).default;
113
- await handler();
114
- });
115
-
116
- generateCommand
117
- .command('widget')
118
- .description('Generate UI widget')
119
- .action(async () => {
120
- const handler = (await import('../src/generate/ui/generateWidget.js')).default;
121
- await handler();
122
- });
123
-
124
- generateCommand
125
- .command('design-component')
126
- .description('Generate UI design component')
127
- .action(async () => {
128
- const handler = (await import('../src/generate/ui/generateDesignComponent.js')).default;
129
- await handler();
130
- });
131
-
132
- generateCommand
133
- .command('repository')
134
- .description('Generate infrastructure repository')
135
- .action(async () => {
136
- const handler = (await import('../src/generate/layers/generateRepository.js')).default;
137
- await handler();
138
- });
139
-
140
- generateCommand
141
- .command('repo')
142
- .description('Generate infrastructure repository (module flow)')
143
- .action(async () => {
144
- const handler = (await import('../src/generate/module/generateRepository.js')).default;
145
- await handler();
146
- });
147
-
148
- generateCommand
149
- .command('repository-method')
150
- .description('Generate method for an existing repository')
151
- .action(async () => {
152
- const handler = (await import('../src/generate/layers/generateRepositoryMethod.js')).default;
153
- await handler();
154
- });
155
-
156
- generateCommand
157
- .command('use-cases')
158
- .description('Generate use-cases for an existing repository')
159
- .action(async () => {
160
- const handler = (await import('../src/generate/module/generateUseCases.js')).default;
161
- await handler();
162
- });
163
-
164
- generateCommand
165
- .command('domain')
166
- .description('Generate domain module (model/ports)')
167
- .action(async () => {
168
- const handler = (await import('../src/generate/module/generateDomain.js')).default;
169
- await handler();
170
- });
171
-
172
- generateCommand
173
- .command('presenter')
174
- .description('Generate presentation layer presenter from UseCases')
175
- .action(async () => {
176
- const handler = (await import('../src/generate/module/generatePresenter.js')).default;
177
- await handler();
178
- });
179
-
180
- generateCommand
181
- .command('types-json')
182
- .description('Fill model interface keys from JSON')
183
- .action(async () => {
184
- const handler = (await import('../src/generate/module/generateTypesJson.js')).default;
185
- await handler();
186
- });
187
-
188
- generateCommand
189
- .command('schema-from-type')
190
- .description('Fill schema rules keys from schema generic type')
191
- .action(async () => {
192
- const handler = (await import('../src/generate/module/generateSchemaFromType.js')).default;
193
- await handler();
194
- });
195
-
196
- generateCommand
197
- .command('module')
198
- .description('Generate domain + repository + presenter flow')
199
- .action(async () => {
200
- const handler = (await import('../src/generate/module/generateModule.js')).default;
201
- await handler();
202
- });
203
-
204
- generateCommand
205
- .command('module-preset')
206
- .description('Generate preset CRUD-like module flow')
207
- .action(async () => {
208
- const handler = (await import('../src/generate/module/generateModulePreset.js')).default;
209
- await handler();
210
- });
211
-
212
- generateCommand
213
- .command('routes')
214
- .description('Generate typed SvelteKit routes list')
215
- .action(async () => {
216
- const handler = (await import('../src/generate/routes/generateRoutes.js')).default;
217
- await handler();
218
- });
219
-
220
- checkCommand
221
- .command('presenter-names')
222
- .description('Check duplicate presenter names in src')
223
- .action(async () => {
224
- const handler = (await import('../src/checks/checkPresenterNames.js')).default;
225
- await handler();
226
- });
227
-
228
- checkCommand
229
- .command('provider-names')
230
- .description('Check duplicate provider names in src')
231
- .action(async () => {
232
- const handler = (await import('../src/checks/checkProviderNames.js')).default;
233
- await handler();
234
- });
235
-
236
- checkCommand
237
- .command('provider-graph')
238
- .description('Check provider dependency graph for cycles')
239
- .action(async () => {
240
- const handler = (await import('../src/checks/checkProviderGraph.js')).default;
241
- await handler();
242
- });
243
-
244
- checkCommand
245
- .command('domain')
246
- .description('Check domain naming and structure rules in all contexts')
247
- .action(async () => {
248
- const handler = (await import('../src/checks/checkDomain.js')).default;
249
- await handler();
250
- });
251
-
252
- checkCommand
253
- .command('imports')
254
- .description('Check import extensions and import group order in src')
255
- .action(async () => {
256
- const handler = (await import('../src/checks/checkImports.js')).default;
257
- await handler();
258
- });
259
-
260
- checkCommand
261
- .command('hooks')
262
- .description('Check that manual SvelteKit hooks are not present')
263
- .action(async () => {
264
- const handler = (await import('../src/checks/checkHooks.js')).default;
265
- await handler();
266
- });
267
-
268
- checkCommand
269
- .command('layer-imports')
270
- .description('Check forbidden imports between layers inside each context')
271
- .action(async () => {
272
- const handler = (await import('../src/checks/checkLayerImports.js')).default;
273
- await handler();
274
- });
275
-
276
- checkCommand
277
- .command('layer-boundaries')
278
- .description('Check layer boundaries between contexts by aliases')
279
- .action(async () => {
280
- const handler = (await import('../src/checks/checkLayerBoundaries.js')).default;
281
- await handler();
282
- });
283
-
284
- checkCommand
285
- .command('folders-structure')
286
- .description('Check allowed folders structure in context layers/ui/components')
287
- .action(async () => {
288
- const handler = (await import('../src/checks/checkFoldersStructure.js')).default;
289
- await handler();
290
- });
291
-
292
- checkCommand
293
- .command('internal')
294
- .description('Run all internal azure-net checks')
295
- .action(async () => {
296
- const handler = (await import('../src/checks/checkInternal.js')).default;
297
- await handler();
298
- });
299
-
300
- checkCommand
301
- .command('project')
302
- .description('Run full project checks: format, internal, lint, typecheck')
303
- .action(async () => {
304
- const handler = (await import('../src/checks/checkProject.js')).default;
305
- await handler();
306
- });
307
-
308
- program.parse();
package/eslint.config.js DELETED
@@ -1,34 +0,0 @@
1
- import js from '@eslint/js';
2
- import tseslint from 'typescript-eslint';
3
-
4
- export default tseslint.config(
5
- {
6
- ignores: ['dist/**', 'node_modules/**']
7
- },
8
- js.configs.recommended,
9
- ...tseslint.configs.recommended,
10
- {
11
- files: ['bin/**/*.ts', 'src/plugins/**/*.ts'],
12
- languageOptions: {
13
- globals: {
14
- console: 'readonly',
15
- process: 'readonly'
16
- }
17
- }
18
- },
19
- {
20
- files: [
21
- 'src/generate/module/repositoryModuleShared.ts',
22
- 'src/generate/layers/repositoryShared.ts',
23
- 'src/generate/layers/generateUseCases.ts',
24
- 'src/generate/layers/generateRepositoryMethod.ts',
25
- 'src/generate/layers/generateRepository.ts',
26
- 'src/utils/contextUtils.ts',
27
- 'src/utils/loadConfig.ts',
28
- 'src/utils/fileUtils.ts'
29
- ],
30
- rules: {
31
- '@typescript-eslint/ban-ts-comment': 'off'
32
- }
33
- }
34
- );