@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.
- package/bin/azure-net.js +73 -34
- package/bin/azure-net.ts +81 -34
- package/eslint.config.js +15 -0
- package/package.json +1 -1
- package/src/checks/checkDomain.js +201 -0
- package/src/checks/checkDomain.ts +223 -0
- package/src/checks/checkFoldersStructure.js +70 -0
- package/src/checks/checkFoldersStructure.ts +85 -0
- package/src/checks/checkImports.ts +166 -0
- package/src/checks/checkInternal.js +37 -0
- package/src/checks/checkInternal.ts +44 -0
- package/src/checks/checkLayerBoundaries.js +178 -0
- package/src/checks/checkLayerBoundaries.ts +216 -0
- package/src/checks/checkPresenterNames.js +202 -0
- package/src/checks/checkPresenterNames.ts +208 -0
- package/src/checks/checkProject.js +42 -0
- package/src/checks/checkProject.ts +45 -0
- package/src/checks/checkProviderGraph.js +221 -0
- package/src/checks/checkProviderGraph.ts +234 -0
- package/src/checks/checkProviderNames.js +158 -0
- package/src/checks/checkProviderNames.ts +165 -0
- package/src/checks/index.js +8 -0
- package/src/checks/index.ts +9 -0
- package/src/generate/layers/generateRepository.ts +123 -0
- package/src/generate/layers/generateRepositoryMethod.ts +102 -0
- package/src/generate/layers/generateUseCases.ts +50 -0
- package/src/generate/layers/repositoryShared.ts +657 -0
- package/src/generate/module/generateModulePreset.js +307 -0
- package/src/generate/module/generateModulePreset.ts +337 -0
- package/src/generate/module/generateSchemaFromType.js +46 -8
- package/src/generate/module/generateSchemaFromType.ts +52 -8
- package/src/generate/module/repositoryModuleShared.ts +665 -0
- package/src/utils/contextUtils.ts +89 -0
- package/src/utils/fileUtils.ts +100 -0
- package/src/utils/loadConfig.ts +69 -0
- package/src/commands/generate/generateCrudBase.js +0 -188
- package/src/commands/generate/generateCrudPresenter.js +0 -225
- package/src/commands/generate/generateModule.js +0 -31
- package/src/commands/generate/generateModuleBase.js +0 -130
- package/src/commands/generate/generateModulePresenter.js +0 -103
- package/src/commands/generate/generatePresenter.js +0 -80
- package/src/commands/generate/generateRepository.js +0 -70
- package/src/commands/generate/generateSchema.js +0 -100
- package/src/commands/generate/generateService.js +0 -66
- 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
|
+
}
|