@azure-net/cli 4.0.0-0 → 4.1.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 (45) hide show
  1. package/bin/azure-net.js +73 -34
  2. package/bin/azure-net.ts +81 -34
  3. package/eslint.config.js +15 -0
  4. package/package.json +1 -1
  5. package/src/checks/checkDomain.js +201 -0
  6. package/src/checks/checkDomain.ts +223 -0
  7. package/src/checks/checkFoldersStructure.js +70 -0
  8. package/src/checks/checkFoldersStructure.ts +85 -0
  9. package/src/checks/checkImports.ts +166 -0
  10. package/src/checks/checkInternal.js +37 -0
  11. package/src/checks/checkInternal.ts +44 -0
  12. package/src/checks/checkLayerBoundaries.js +178 -0
  13. package/src/checks/checkLayerBoundaries.ts +216 -0
  14. package/src/checks/checkPresenterNames.js +202 -0
  15. package/src/checks/checkPresenterNames.ts +208 -0
  16. package/src/checks/checkProject.js +42 -0
  17. package/src/checks/checkProject.ts +45 -0
  18. package/src/checks/checkProviderGraph.js +221 -0
  19. package/src/checks/checkProviderGraph.ts +234 -0
  20. package/src/checks/checkProviderNames.js +158 -0
  21. package/src/checks/checkProviderNames.ts +165 -0
  22. package/src/checks/index.js +8 -0
  23. package/src/checks/index.ts +9 -0
  24. package/src/generate/layers/generateRepository.ts +123 -0
  25. package/src/generate/layers/generateRepositoryMethod.ts +102 -0
  26. package/src/generate/layers/generateUseCases.ts +50 -0
  27. package/src/generate/layers/repositoryShared.ts +657 -0
  28. package/src/generate/module/generateModulePreset.js +307 -0
  29. package/src/generate/module/generateModulePreset.ts +337 -0
  30. package/src/generate/module/generateSchemaFromType.js +46 -8
  31. package/src/generate/module/generateSchemaFromType.ts +52 -8
  32. package/src/generate/module/repositoryModuleShared.ts +665 -0
  33. package/src/utils/contextUtils.ts +89 -0
  34. package/src/utils/fileUtils.ts +100 -0
  35. package/src/utils/loadConfig.ts +69 -0
  36. package/src/commands/generate/generateCrudBase.js +0 -188
  37. package/src/commands/generate/generateCrudPresenter.js +0 -225
  38. package/src/commands/generate/generateModule.js +0 -31
  39. package/src/commands/generate/generateModuleBase.js +0 -130
  40. package/src/commands/generate/generateModulePresenter.js +0 -103
  41. package/src/commands/generate/generatePresenter.js +0 -80
  42. package/src/commands/generate/generateRepository.js +0 -70
  43. package/src/commands/generate/generateSchema.js +0 -100
  44. package/src/commands/generate/generateService.js +0 -66
  45. package/src/commands/generate/index.js +0 -9
@@ -0,0 +1,102 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import prompts from 'prompts';
4
+ import {
5
+ appendRepositoryMethod,
6
+ ensureDomainType,
7
+ ensureRepositoryInterfaceFile,
8
+ getAvailableTsNames,
9
+ getConfigState,
10
+ getRepositoryMeta,
11
+ parseRepositoryMethods,
12
+ resolveContextAlias,
13
+ resolveRepositoriesPath,
14
+ selectContext,
15
+ promptMethodDefinition
16
+ } from './repositoryShared.js';
17
+
18
+ export default async function generateRepositoryMethod(): Promise<void> {
19
+ const contextName = await selectContext('Select context for repository method:');
20
+ if (!contextName) {
21
+ process.exitCode = 1;
22
+ return;
23
+ }
24
+
25
+ const repositoriesPath = resolveRepositoriesPath(contextName);
26
+ const repositories = await getAvailableTsNames(repositoriesPath);
27
+ if (!repositories.length) {
28
+ console.error(`❌ No repositories found in ${repositoriesPath}`);
29
+ process.exitCode = 1;
30
+ return;
31
+ }
32
+
33
+ const { repositoryName } = await prompts({
34
+ type: 'select',
35
+ name: 'repositoryName',
36
+ message: 'Select repository:',
37
+ choices: repositories.map((name: string) => ({ title: name, value: name })),
38
+ initial: 0
39
+ });
40
+
41
+ if (!repositoryName) {
42
+ process.exitCode = 1;
43
+ return;
44
+ }
45
+
46
+ const meta = getRepositoryMeta(String(repositoryName));
47
+ const repositoryPath = path.join(repositoriesPath, `${meta.className}.ts`);
48
+ const method = await promptMethodDefinition();
49
+
50
+ const ensuredResponseType = await ensureDomainType({
51
+ contextName,
52
+ domainName: meta.domainName,
53
+ typeName: method.responseType,
54
+ layer: method.responseLayer
55
+ });
56
+ method.responseType = ensuredResponseType.interfaceName;
57
+ method.responseLayer = ensuredResponseType.layer;
58
+
59
+ if (method.requestType) {
60
+ const ensuredRequestType = await ensureDomainType({
61
+ contextName,
62
+ domainName: meta.domainName,
63
+ typeName: method.requestType,
64
+ layer: method.requestLayer ?? 'ports'
65
+ });
66
+ method.requestType = ensuredRequestType.interfaceName;
67
+ method.requestLayer = ensuredRequestType.layer;
68
+ }
69
+
70
+ let repositoryContent = '';
71
+ try {
72
+ repositoryContent = await fs.readFile(repositoryPath, 'utf-8');
73
+ } catch {
74
+ console.error(`❌ Repository file not found: ${repositoryPath}`);
75
+ process.exitCode = 1;
76
+ return;
77
+ }
78
+
79
+ const existingMethods = parseRepositoryMethods(repositoryContent);
80
+ if (existingMethods.some((item) => item.name === method.name)) {
81
+ console.warn(`⚠️ Method "${method.name}" already exists in ${meta.className}.`);
82
+ process.exitCode = 1;
83
+ return;
84
+ }
85
+
86
+ const { contexts } = await getConfigState();
87
+ const contextAlias = resolveContextAlias(contexts, contextName);
88
+ await appendRepositoryMethod({
89
+ repositoryPath,
90
+ method,
91
+ contextAlias,
92
+ domainName: meta.domainName
93
+ });
94
+
95
+ await ensureRepositoryInterfaceFile({
96
+ contextName,
97
+ meta,
98
+ methods: [...existingMethods, method]
99
+ });
100
+
101
+ console.log(`✅ Method "${method.name}" added to ${meta.className}`);
102
+ }
@@ -0,0 +1,50 @@
1
+ import prompts from 'prompts';
2
+ import {
3
+ ensureUseCasesFile,
4
+ getAvailableTsNames,
5
+ getConfigState,
6
+ getRepositoryMeta,
7
+ resolveContextAlias,
8
+ resolveRepositoriesPath,
9
+ selectContext
10
+ } from './repositoryShared.js';
11
+
12
+ export default async function generateUseCases(): Promise<void> {
13
+ const contextName = await selectContext('Select context for UseCases:');
14
+ if (!contextName) {
15
+ process.exitCode = 1;
16
+ return;
17
+ }
18
+
19
+ const repositoriesPath = resolveRepositoriesPath(contextName);
20
+ const repositories = await getAvailableTsNames(repositoriesPath);
21
+ if (!repositories.length) {
22
+ console.error(`❌ No repositories found in ${repositoriesPath}`);
23
+ process.exitCode = 1;
24
+ return;
25
+ }
26
+
27
+ const { repositoryName } = await prompts({
28
+ type: 'select',
29
+ name: 'repositoryName',
30
+ message: 'Select repository:',
31
+ choices: repositories.map((name: string) => ({ title: name, value: name })),
32
+ initial: 0
33
+ });
34
+
35
+ if (!repositoryName) {
36
+ process.exitCode = 1;
37
+ return;
38
+ }
39
+
40
+ const { contexts } = await getConfigState();
41
+ const contextAlias = resolveContextAlias(contexts, contextName);
42
+ const meta = getRepositoryMeta(String(repositoryName));
43
+ const created = await ensureUseCasesFile({ contextName, contextAlias, meta });
44
+ if (!created) {
45
+ process.exitCode = 1;
46
+ return;
47
+ }
48
+
49
+ console.log(`✅ UseCases generated: ${meta.useCasesClassName}`);
50
+ }