@hazeljs/cli 0.5.4 → 0.6.5
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/@template-ai-native/package.json +1 -1
- package/README.md +140 -588
- package/cli-manifest.json +940 -0
- package/dist/commands/add.d.ts +9 -0
- package/dist/commands/add.js +35 -126
- package/dist/commands/generate-app.js +17 -230
- package/dist/commands/generate-auth.d.ts +12 -0
- package/dist/commands/generate-auth.js +12 -0
- package/dist/commands/generate-crud.d.ts +12 -0
- package/dist/commands/generate-crud.js +12 -0
- package/dist/commands/generate-dto.d.ts +12 -0
- package/dist/commands/generate-dto.js +12 -0
- package/dist/commands/generate-module.d.ts +12 -0
- package/dist/commands/generate-module.js +12 -0
- package/dist/commands/generate-simple.d.ts +74 -0
- package/dist/commands/generate-simple.js +104 -0
- package/dist/commands/generate-simple.test.js +100 -0
- package/dist/commands/info.d.ts +12 -0
- package/dist/commands/info.js +12 -0
- package/dist/commands/templates.d.ts +34 -0
- package/dist/commands/templates.js +387 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.js +50 -48
- package/dist/index.list.test.js +8 -22
- package/dist/index.test.js +19 -56
- package/dist/utils/generator-registry.d.ts +5 -0
- package/dist/utils/generator-registry.js +34 -65
- package/dist/utils/generator.d.ts +0 -1
- package/dist/utils/generator.js +0 -22
- package/dist/utils/generator.test.js +0 -28
- package/dist/utils/packages-registry.d.ts +34 -0
- package/dist/utils/packages-registry.js +380 -0
- package/package.json +7 -7
- package/dist/commands/build.d.ts +0 -2
- package/dist/commands/build.js +0 -52
- package/dist/commands/generate-agent.d.ts +0 -4
- package/dist/commands/generate-agent.js +0 -64
- package/dist/commands/generate-agent.test.js +0 -36
- package/dist/commands/generate-ai-service.d.ts +0 -4
- package/dist/commands/generate-ai-service.js +0 -54
- package/dist/commands/generate-ai-service.test.d.ts +0 -1
- package/dist/commands/generate-ai-service.test.js +0 -41
- package/dist/commands/generate-cache.d.ts +0 -4
- package/dist/commands/generate-cache.js +0 -66
- package/dist/commands/generate-cache.test.d.ts +0 -1
- package/dist/commands/generate-cache.test.js +0 -36
- package/dist/commands/generate-config.d.ts +0 -4
- package/dist/commands/generate-config.js +0 -59
- package/dist/commands/generate-config.test.d.ts +0 -1
- package/dist/commands/generate-config.test.js +0 -35
- package/dist/commands/generate-controller.d.ts +0 -4
- package/dist/commands/generate-controller.js +0 -66
- package/dist/commands/generate-controller.test.d.ts +0 -1
- package/dist/commands/generate-controller.test.js +0 -48
- package/dist/commands/generate-cron.d.ts +0 -4
- package/dist/commands/generate-cron.js +0 -61
- package/dist/commands/generate-cron.test.d.ts +0 -1
- package/dist/commands/generate-cron.test.js +0 -42
- package/dist/commands/generate-discovery.d.ts +0 -4
- package/dist/commands/generate-discovery.js +0 -63
- package/dist/commands/generate-discovery.test.d.ts +0 -1
- package/dist/commands/generate-discovery.test.js +0 -36
- package/dist/commands/generate-exception-filter.d.ts +0 -4
- package/dist/commands/generate-exception-filter.js +0 -54
- package/dist/commands/generate-exception-filter.test.d.ts +0 -1
- package/dist/commands/generate-exception-filter.test.js +0 -43
- package/dist/commands/generate-guard.d.ts +0 -4
- package/dist/commands/generate-guard.js +0 -42
- package/dist/commands/generate-guard.test.d.ts +0 -1
- package/dist/commands/generate-guard.test.js +0 -41
- package/dist/commands/generate-interceptor.d.ts +0 -4
- package/dist/commands/generate-interceptor.js +0 -43
- package/dist/commands/generate-interceptor.test.d.ts +0 -1
- package/dist/commands/generate-interceptor.test.js +0 -41
- package/dist/commands/generate-middleware.d.ts +0 -4
- package/dist/commands/generate-middleware.js +0 -47
- package/dist/commands/generate-middleware.test.d.ts +0 -1
- package/dist/commands/generate-middleware.test.js +0 -41
- package/dist/commands/generate-pipe.d.ts +0 -4
- package/dist/commands/generate-pipe.js +0 -39
- package/dist/commands/generate-pipe.test.d.ts +0 -1
- package/dist/commands/generate-pipe.test.js +0 -35
- package/dist/commands/generate-rag.d.ts +0 -4
- package/dist/commands/generate-rag.js +0 -68
- package/dist/commands/generate-rag.test.d.ts +0 -1
- package/dist/commands/generate-rag.test.js +0 -35
- package/dist/commands/generate-repository.d.ts +0 -4
- package/dist/commands/generate-repository.js +0 -46
- package/dist/commands/generate-repository.test.d.ts +0 -1
- package/dist/commands/generate-repository.test.js +0 -41
- package/dist/commands/generate-serverless-handler.d.ts +0 -4
- package/dist/commands/generate-serverless-handler.js +0 -57
- package/dist/commands/generate-serverless-handler.test.d.ts +0 -1
- package/dist/commands/generate-serverless-handler.test.js +0 -42
- package/dist/commands/generate-service.d.ts +0 -4
- package/dist/commands/generate-service.js +0 -58
- package/dist/commands/generate-service.test.d.ts +0 -1
- package/dist/commands/generate-service.test.js +0 -41
- package/dist/commands/generate-setup.d.ts +0 -4
- package/dist/commands/generate-setup.js +0 -187
- package/dist/commands/generate-setup.test.d.ts +0 -1
- package/dist/commands/generate-setup.test.js +0 -50
- package/dist/commands/generate-websocket-gateway.d.ts +0 -4
- package/dist/commands/generate-websocket-gateway.js +0 -53
- package/dist/commands/generate-websocket-gateway.test.d.ts +0 -1
- package/dist/commands/generate-websocket-gateway.test.js +0 -41
- package/dist/commands/pdf-to-audio.d.ts +0 -2
- package/dist/commands/pdf-to-audio.js +0 -170
- package/dist/commands/pdf-to-audio.test.d.ts +0 -1
- package/dist/commands/pdf-to-audio.test.js +0 -92
- package/dist/commands/start.d.ts +0 -2
- package/dist/commands/start.js +0 -61
- package/dist/commands/test.d.ts +0 -2
- package/dist/commands/test.js +0 -63
- package/dist/commands/utility-commands.test.d.ts +0 -1
- package/dist/commands/utility-commands.test.js +0 -95
- /package/dist/commands/{generate-agent.test.d.ts → generate-simple.test.d.ts} +0 -0
package/dist/index.test.js
CHANGED
|
@@ -1,48 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const commander_1 = require("commander");
|
|
4
|
-
const generate_controller_1 = require("./commands/generate-controller");
|
|
5
|
-
const generate_service_1 = require("./commands/generate-service");
|
|
6
4
|
const generate_module_1 = require("./commands/generate-module");
|
|
7
5
|
const generate_dto_1 = require("./commands/generate-dto");
|
|
8
|
-
const generate_guard_1 = require("./commands/generate-guard");
|
|
9
|
-
const generate_interceptor_1 = require("./commands/generate-interceptor");
|
|
10
|
-
const generate_middleware_1 = require("./commands/generate-middleware");
|
|
11
6
|
const generate_crud_1 = require("./commands/generate-crud");
|
|
12
7
|
const generate_auth_1 = require("./commands/generate-auth");
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const generate_agent_1 = require("./commands/generate-agent");
|
|
19
|
-
const generate_serverless_handler_1 = require("./commands/generate-serverless-handler");
|
|
20
|
-
const generate_config_1 = require("./commands/generate-config");
|
|
21
|
-
const generate_cache_1 = require("./commands/generate-cache");
|
|
22
|
-
const generate_cron_1 = require("./commands/generate-cron");
|
|
23
|
-
const generate_rag_1 = require("./commands/generate-rag");
|
|
24
|
-
const generate_discovery_1 = require("./commands/generate-discovery");
|
|
25
|
-
jest.mock('./commands/generate-controller');
|
|
26
|
-
jest.mock('./commands/generate-service');
|
|
8
|
+
const generate_simple_1 = require("./commands/generate-simple");
|
|
9
|
+
jest.mock('./commands/generate-app', () => ({
|
|
10
|
+
generateApp: jest.fn(),
|
|
11
|
+
registerGenerateApp: jest.fn(),
|
|
12
|
+
}));
|
|
27
13
|
jest.mock('./commands/generate-module');
|
|
28
14
|
jest.mock('./commands/generate-dto');
|
|
29
|
-
jest.mock('./commands/generate-guard');
|
|
30
|
-
jest.mock('./commands/generate-interceptor');
|
|
31
|
-
jest.mock('./commands/generate-middleware');
|
|
32
15
|
jest.mock('./commands/generate-crud');
|
|
33
16
|
jest.mock('./commands/generate-auth');
|
|
34
|
-
jest.mock('./commands/generate-
|
|
35
|
-
jest.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
jest.
|
|
40
|
-
jest.
|
|
41
|
-
|
|
42
|
-
jest.mock('./commands/
|
|
43
|
-
jest.mock('./commands/
|
|
44
|
-
jest.mock('./commands/generate-rag');
|
|
45
|
-
jest.mock('./commands/generate-discovery');
|
|
17
|
+
jest.mock('./commands/generate-simple', () => ({
|
|
18
|
+
registerSimpleGenerators: jest.fn(),
|
|
19
|
+
SIMPLE_GENERATORS: [
|
|
20
|
+
{ type: 'controller', description: 'REST controller', suffix: 'controller', template: '', nameRequired: true },
|
|
21
|
+
],
|
|
22
|
+
findSimpleGenerator: jest.fn(),
|
|
23
|
+
runSimpleGenerator: jest.fn(),
|
|
24
|
+
}));
|
|
25
|
+
jest.mock('./commands/info', () => ({ infoCommand: jest.fn() }));
|
|
26
|
+
jest.mock('./commands/add', () => ({ addCommand: jest.fn() }));
|
|
46
27
|
let exitSpy;
|
|
47
28
|
beforeAll(() => {
|
|
48
29
|
exitSpy = jest.spyOn(process, 'exit').mockImplementation(() => undefined);
|
|
@@ -54,39 +35,21 @@ describe('CLI', () => {
|
|
|
54
35
|
beforeEach(() => {
|
|
55
36
|
jest.clearAllMocks();
|
|
56
37
|
});
|
|
57
|
-
it('should register
|
|
38
|
+
it('should register complex and simple generator commands', () => {
|
|
58
39
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
59
40
|
require('./index');
|
|
60
|
-
//
|
|
61
|
-
expect(generate_controller_1.generateController).toHaveBeenCalled();
|
|
62
|
-
expect(generate_service_1.generateService).toHaveBeenCalled();
|
|
41
|
+
// Complex generators
|
|
63
42
|
expect(generate_module_1.generateModule).toHaveBeenCalled();
|
|
64
43
|
expect(generate_dto_1.generateDto).toHaveBeenCalled();
|
|
65
|
-
expect(generate_guard_1.generateGuard).toHaveBeenCalled();
|
|
66
|
-
expect(generate_interceptor_1.generateInterceptor).toHaveBeenCalled();
|
|
67
|
-
expect(generate_middleware_1.generateMiddleware).toHaveBeenCalled();
|
|
68
|
-
// Advanced generators
|
|
69
44
|
expect(generate_crud_1.generateCrud).toHaveBeenCalled();
|
|
70
45
|
expect(generate_auth_1.generateAuth).toHaveBeenCalled();
|
|
71
|
-
|
|
72
|
-
expect(
|
|
73
|
-
expect(generate_pipe_1.generatePipe).toHaveBeenCalled();
|
|
74
|
-
expect(generate_repository_1.generateRepository).toHaveBeenCalled();
|
|
75
|
-
expect(generate_ai_service_1.generateAIService).toHaveBeenCalled();
|
|
76
|
-
expect(generate_agent_1.generateAgent).toHaveBeenCalled();
|
|
77
|
-
expect(generate_serverless_handler_1.generateServerlessHandler).toHaveBeenCalled();
|
|
78
|
-
expect(generate_config_1.generateConfig).toHaveBeenCalled();
|
|
79
|
-
expect(generate_cache_1.generateCache).toHaveBeenCalled();
|
|
80
|
-
expect(generate_cron_1.generateCron).toHaveBeenCalled();
|
|
81
|
-
expect(generate_rag_1.generateRag).toHaveBeenCalled();
|
|
82
|
-
expect(generate_discovery_1.generateDiscovery).toHaveBeenCalled();
|
|
46
|
+
// Simple generators (config-driven)
|
|
47
|
+
expect(generate_simple_1.registerSimpleGenerators).toHaveBeenCalled();
|
|
83
48
|
});
|
|
84
49
|
it('should have generate command with alias g', () => {
|
|
85
50
|
const program = new commander_1.Command();
|
|
86
51
|
program.name('hazel').description('CLI for generating HazelJS components').version('0.2.0');
|
|
87
52
|
const generate = program.command('generate').description('Generate a new component').alias('g');
|
|
88
|
-
(0, generate_controller_1.generateController)(generate);
|
|
89
|
-
(0, generate_service_1.generateService)(generate);
|
|
90
53
|
(0, generate_module_1.generateModule)(generate);
|
|
91
54
|
expect(generate.alias()).toBe('g');
|
|
92
55
|
});
|
|
@@ -12,4 +12,9 @@ export declare const GENERATOR_LIST: GeneratorMeta[];
|
|
|
12
12
|
* For types that don't require a name (auth, config), pass a placeholder (e.g. 'auth').
|
|
13
13
|
*/
|
|
14
14
|
export declare function runGenerator(type: string, name: string, options: GenerateCLIOptions): Promise<GenerateResult>;
|
|
15
|
+
/**
|
|
16
|
+
* Get an array of all available generator type names.
|
|
17
|
+
*
|
|
18
|
+
* @returns Array of generator types (e.g. ['controller', 'service', 'module', ...])
|
|
19
|
+
*/
|
|
15
20
|
export declare function getGeneratorTypes(): string[];
|
|
@@ -3,95 +3,64 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.GENERATOR_LIST = void 0;
|
|
4
4
|
exports.runGenerator = runGenerator;
|
|
5
5
|
exports.getGeneratorTypes = getGeneratorTypes;
|
|
6
|
-
const generate_controller_1 = require("../commands/generate-controller");
|
|
7
|
-
const generate_service_1 = require("../commands/generate-service");
|
|
8
6
|
const generate_module_1 = require("../commands/generate-module");
|
|
9
7
|
const generate_dto_1 = require("../commands/generate-dto");
|
|
10
|
-
const generate_guard_1 = require("../commands/generate-guard");
|
|
11
|
-
const generate_interceptor_1 = require("../commands/generate-interceptor");
|
|
12
|
-
const generate_middleware_1 = require("../commands/generate-middleware");
|
|
13
8
|
const generate_crud_1 = require("../commands/generate-crud");
|
|
14
9
|
const generate_auth_1 = require("../commands/generate-auth");
|
|
15
|
-
const generate_websocket_gateway_1 = require("../commands/generate-websocket-gateway");
|
|
16
|
-
const generate_exception_filter_1 = require("../commands/generate-exception-filter");
|
|
17
|
-
const generate_pipe_1 = require("../commands/generate-pipe");
|
|
18
|
-
const generate_repository_1 = require("../commands/generate-repository");
|
|
19
|
-
const generate_ai_service_1 = require("../commands/generate-ai-service");
|
|
20
|
-
const generate_agent_1 = require("../commands/generate-agent");
|
|
21
|
-
const generate_serverless_handler_1 = require("../commands/generate-serverless-handler");
|
|
22
|
-
const generate_config_1 = require("../commands/generate-config");
|
|
23
|
-
const generate_cache_1 = require("../commands/generate-cache");
|
|
24
|
-
const generate_cron_1 = require("../commands/generate-cron");
|
|
25
|
-
const generate_rag_1 = require("../commands/generate-rag");
|
|
26
|
-
const generate_discovery_1 = require("../commands/generate-discovery");
|
|
27
10
|
const generate_app_1 = require("../commands/generate-app");
|
|
28
|
-
const
|
|
29
|
-
/**
|
|
30
|
-
|
|
11
|
+
const generate_simple_1 = require("../commands/generate-simple");
|
|
12
|
+
/** Complex generators that need their own files (multi-file output or custom logic) */
|
|
13
|
+
const COMPLEX_GENERATORS = [
|
|
31
14
|
{ type: 'app', description: 'Skeleton HazelJS application (minimal template)', nameRequired: true, options: ['path'] },
|
|
32
|
-
{ type: 'setup', description: 'Minimal setup starter file for a HazelJS package', nameRequired: true, options: ['path'] },
|
|
33
|
-
{ type: 'controller', description: 'REST controller', nameRequired: true },
|
|
34
|
-
{ type: 'service', description: 'Service class', nameRequired: true },
|
|
35
15
|
{ type: 'module', description: 'Module with controller, service, DTOs', nameRequired: true },
|
|
36
16
|
{ type: 'dto', description: 'Create and update DTOs', nameRequired: true },
|
|
37
|
-
{ type: 'guard', description: 'Guard (e.g. auth)', nameRequired: true },
|
|
38
|
-
{ type: 'interceptor', description: 'Interceptor', nameRequired: true },
|
|
39
|
-
{ type: 'middleware', description: 'Middleware', nameRequired: true },
|
|
40
17
|
{ type: 'crud', description: 'Full CRUD resource (controller, service, module, DTOs)', nameRequired: true, options: ['route'] },
|
|
41
18
|
{ type: 'auth', description: 'Auth module (JWT guard, service, controller, DTOs)', nameRequired: false },
|
|
42
|
-
{ type: 'gateway', description: 'WebSocket gateway', nameRequired: true },
|
|
43
|
-
{ type: 'filter', description: 'Exception filter', nameRequired: true },
|
|
44
|
-
{ type: 'pipe', description: 'Validation/transform pipe', nameRequired: true },
|
|
45
|
-
{ type: 'repository', description: 'Prisma repository', nameRequired: true },
|
|
46
|
-
{ type: 'ai-service', description: 'AI service with decorators', nameRequired: true },
|
|
47
|
-
{ type: 'agent', description: 'AI agent with @Agent and @Tool', nameRequired: true },
|
|
48
|
-
{ type: 'serverless', description: 'Serverless handler (Lambda or Cloud Function)', nameRequired: true, options: ['platform'] },
|
|
49
|
-
{ type: 'config', description: 'Config module setup', nameRequired: false },
|
|
50
|
-
{ type: 'cache', description: 'Cache service with decorators', nameRequired: true },
|
|
51
|
-
{ type: 'cron', description: 'Cron/scheduled job service', nameRequired: true },
|
|
52
|
-
{ type: 'rag', description: 'RAG (Retrieval-Augmented Generation) service', nameRequired: true },
|
|
53
|
-
{ type: 'discovery', description: 'Service discovery setup', nameRequired: true },
|
|
54
19
|
];
|
|
55
|
-
|
|
20
|
+
/** All available generator types and their metadata (for --list). */
|
|
21
|
+
exports.GENERATOR_LIST = [
|
|
22
|
+
...COMPLEX_GENERATORS,
|
|
23
|
+
...generate_simple_1.SIMPLE_GENERATORS.map((g) => ({
|
|
24
|
+
type: g.type,
|
|
25
|
+
description: g.description,
|
|
26
|
+
nameRequired: g.nameRequired,
|
|
27
|
+
options: g.extraOptions,
|
|
28
|
+
})),
|
|
29
|
+
];
|
|
30
|
+
/** Complex runners that can't be config-driven */
|
|
31
|
+
const COMPLEX_RUNNERS = {
|
|
56
32
|
app: generate_app_1.runApp,
|
|
57
|
-
setup: generate_setup_1.runSetup,
|
|
58
|
-
controller: generate_controller_1.runController,
|
|
59
|
-
service: generate_service_1.runService,
|
|
60
33
|
module: generate_module_1.runModule,
|
|
61
34
|
dto: generate_dto_1.runDto,
|
|
62
|
-
guard: generate_guard_1.runGuard,
|
|
63
|
-
interceptor: generate_interceptor_1.runInterceptor,
|
|
64
|
-
middleware: generate_middleware_1.runMiddleware,
|
|
65
35
|
crud: generate_crud_1.runCrud,
|
|
66
36
|
auth: generate_auth_1.runAuth,
|
|
67
|
-
gateway: generate_websocket_gateway_1.runWebSocketGateway,
|
|
68
|
-
filter: generate_exception_filter_1.runExceptionFilter,
|
|
69
|
-
pipe: generate_pipe_1.runPipe,
|
|
70
|
-
repository: generate_repository_1.runRepository,
|
|
71
|
-
'ai-service': generate_ai_service_1.runAIService,
|
|
72
|
-
agent: generate_agent_1.runAgent,
|
|
73
|
-
serverless: generate_serverless_handler_1.runServerlessHandler,
|
|
74
|
-
config: generate_config_1.runConfig,
|
|
75
|
-
cache: generate_cache_1.runCache,
|
|
76
|
-
cron: generate_cron_1.runCron,
|
|
77
|
-
rag: generate_rag_1.runRag,
|
|
78
|
-
discovery: generate_discovery_1.runDiscovery,
|
|
79
37
|
};
|
|
80
38
|
/**
|
|
81
39
|
* Run a generator by type and name. Use for unified `hazel generate <type> <name>`.
|
|
82
40
|
* For types that don't require a name (auth, config), pass a placeholder (e.g. 'auth').
|
|
83
41
|
*/
|
|
84
42
|
async function runGenerator(type, name, options) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
43
|
+
// Check complex runners first
|
|
44
|
+
const complexRunner = COMPLEX_RUNNERS[type];
|
|
45
|
+
if (complexRunner) {
|
|
46
|
+
return complexRunner(name, options);
|
|
47
|
+
}
|
|
48
|
+
// Check simple generators
|
|
49
|
+
const simpleConfig = (0, generate_simple_1.findSimpleGenerator)(type);
|
|
50
|
+
if (simpleConfig) {
|
|
51
|
+
return (0, generate_simple_1.runSimpleGenerator)(simpleConfig, name, options);
|
|
92
52
|
}
|
|
93
|
-
return
|
|
53
|
+
return {
|
|
54
|
+
ok: false,
|
|
55
|
+
created: [],
|
|
56
|
+
error: `Unknown generator type: "${type}". Use "hazel generate --list" to see available types.`,
|
|
57
|
+
};
|
|
94
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Get an array of all available generator type names.
|
|
61
|
+
*
|
|
62
|
+
* @returns Array of generator types (e.g. ['controller', 'service', 'module', ...])
|
|
63
|
+
*/
|
|
95
64
|
function getGeneratorTypes() {
|
|
96
65
|
return exports.GENERATOR_LIST.map((g) => g.type);
|
|
97
66
|
}
|
|
@@ -37,7 +37,6 @@ export declare class Generator {
|
|
|
37
37
|
generate(options: GeneratorOptions): Promise<GenerateResult>;
|
|
38
38
|
protected getFilePath(name: string, customPath?: string): string;
|
|
39
39
|
protected getDefaultTemplate(): string;
|
|
40
|
-
promptForOptions(options: Partial<GeneratorOptions>): Promise<GeneratorOptions>;
|
|
41
40
|
}
|
|
42
41
|
/** Output result for humans or as JSON. Use json: true to print a single JSON object to stdout. */
|
|
43
42
|
export declare function printGenerateResult(result: GenerateResult, options: {
|
package/dist/utils/generator.js
CHANGED
|
@@ -12,7 +12,6 @@ exports.printGenerateResult = printGenerateResult;
|
|
|
12
12
|
const fs_1 = __importDefault(require("fs"));
|
|
13
13
|
const path_1 = __importDefault(require("path"));
|
|
14
14
|
const chalk_1 = __importDefault(require("chalk"));
|
|
15
|
-
const inquirer_1 = __importDefault(require("inquirer"));
|
|
16
15
|
const mustache_1 = __importDefault(require("mustache"));
|
|
17
16
|
/**
|
|
18
17
|
* Shared string transformation utilities
|
|
@@ -82,27 +81,6 @@ class Generator {
|
|
|
82
81
|
getDefaultTemplate() {
|
|
83
82
|
return '';
|
|
84
83
|
}
|
|
85
|
-
async promptForOptions(options) {
|
|
86
|
-
const answers = await inquirer_1.default.prompt([
|
|
87
|
-
{
|
|
88
|
-
type: 'input',
|
|
89
|
-
name: 'name',
|
|
90
|
-
message: 'What is the name of the component?',
|
|
91
|
-
when: !options.name,
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
type: 'input',
|
|
95
|
-
name: 'path',
|
|
96
|
-
message: 'Where should the component be generated?',
|
|
97
|
-
default: 'src',
|
|
98
|
-
when: !options.path,
|
|
99
|
-
},
|
|
100
|
-
]);
|
|
101
|
-
return {
|
|
102
|
-
...options,
|
|
103
|
-
...answers,
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
84
|
}
|
|
107
85
|
exports.Generator = Generator;
|
|
108
86
|
/** Output result for humans or as JSON. Use json: true to print a single JSON object to stdout. */
|
|
@@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const fs_1 = __importDefault(require("fs"));
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const generator_1 = require("./generator");
|
|
9
|
-
const inquirer_1 = __importDefault(require("inquirer"));
|
|
10
9
|
jest.mock('fs');
|
|
11
|
-
jest.mock('inquirer');
|
|
12
10
|
describe('Generator utilities', () => {
|
|
13
11
|
describe('toPascalCase', () => {
|
|
14
12
|
it('should convert kebab-case', () => {
|
|
@@ -63,7 +61,6 @@ describe('Generator utilities', () => {
|
|
|
63
61
|
describe('Generator class', () => {
|
|
64
62
|
let generator;
|
|
65
63
|
const mockFs = fs_1.default;
|
|
66
|
-
const mockInquirer = inquirer_1.default;
|
|
67
64
|
beforeEach(() => {
|
|
68
65
|
generator = new generator_1.Generator();
|
|
69
66
|
jest.clearAllMocks();
|
|
@@ -110,29 +107,4 @@ describe('Generator class', () => {
|
|
|
110
107
|
expect(result.created[0]).toContain('test.ts');
|
|
111
108
|
});
|
|
112
109
|
});
|
|
113
|
-
describe('promptForOptions', () => {
|
|
114
|
-
it('should prompt for missing options', async () => {
|
|
115
|
-
mockInquirer.prompt.mockResolvedValue({
|
|
116
|
-
name: 'test',
|
|
117
|
-
path: 'src/test',
|
|
118
|
-
});
|
|
119
|
-
const result = await generator.promptForOptions({});
|
|
120
|
-
expect(mockInquirer.prompt).toHaveBeenCalled();
|
|
121
|
-
expect(result).toEqual({
|
|
122
|
-
name: 'test',
|
|
123
|
-
path: 'src/test',
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
it('should not prompt for provided options', async () => {
|
|
127
|
-
mockInquirer.prompt.mockResolvedValue({});
|
|
128
|
-
const result = await generator.promptForOptions({
|
|
129
|
-
name: 'test',
|
|
130
|
-
path: 'src/test',
|
|
131
|
-
});
|
|
132
|
-
expect(result).toEqual({
|
|
133
|
-
name: 'test',
|
|
134
|
-
path: 'src/test',
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
110
|
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for all HazelJS package metadata.
|
|
3
|
+
* Used by: `hazel add`, `hazel new --interactive`, and `scaffoldPackageBoilerplate`.
|
|
4
|
+
*/
|
|
5
|
+
export interface HazelPackageMeta {
|
|
6
|
+
/** Short name used in CLI (e.g. 'ai', 'auth') */
|
|
7
|
+
shortName: string;
|
|
8
|
+
/** Full npm package name */
|
|
9
|
+
npm: string;
|
|
10
|
+
/** Human-readable label for interactive prompts */
|
|
11
|
+
label: string;
|
|
12
|
+
/** Import hint shown after `hazel add` */
|
|
13
|
+
hint: string;
|
|
14
|
+
/** Module import statement for app.module.ts (null if library-only, no module) */
|
|
15
|
+
moduleImport: string | null;
|
|
16
|
+
/** The forRoot/config expression to use in imports array (null if no module) */
|
|
17
|
+
moduleExpression: string | null;
|
|
18
|
+
/** Minimal setup file content for `hazel add --setup` */
|
|
19
|
+
setupTemplate: string | null;
|
|
20
|
+
}
|
|
21
|
+
export declare const HAZEL_PACKAGES: HazelPackageMeta[];
|
|
22
|
+
/**
|
|
23
|
+
* Look up a HazelJS package by its short CLI name or full npm package name.
|
|
24
|
+
*
|
|
25
|
+
* @param nameOrNpm - Either the short name ('ai', 'auth') or full npm name ('@hazeljs/ai')
|
|
26
|
+
* @returns The matching package metadata, or undefined if not found
|
|
27
|
+
*/
|
|
28
|
+
export declare function findPackage(nameOrNpm: string): HazelPackageMeta | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Map of short CLI name → HazelPackageMeta for O(1) lookups.
|
|
31
|
+
*
|
|
32
|
+
* Example: PACKAGES_BY_NAME['ai'] returns the @hazeljs/ai package metadata.
|
|
33
|
+
*/
|
|
34
|
+
export declare const PACKAGES_BY_NAME: Record<string, HazelPackageMeta>;
|