@hazeljs/cli 0.2.0-beta.53 → 0.2.0-beta.55
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/README.md +1 -1
- package/dist/commands/add.test.d.ts +1 -0
- package/dist/commands/add.test.js +51 -0
- package/dist/commands/generate-agent.test.d.ts +1 -0
- package/dist/commands/generate-agent.test.js +36 -0
- package/dist/commands/generate-ai-service.js +2 -2
- package/dist/commands/generate-ai-service.test.d.ts +1 -0
- package/dist/commands/generate-ai-service.test.js +41 -0
- package/dist/commands/generate-app.js +1 -1
- package/dist/commands/generate-auth.js +2 -2
- package/dist/commands/generate-auth.test.d.ts +1 -0
- package/dist/commands/generate-auth.test.js +48 -0
- package/dist/commands/generate-cache.js +2 -2
- package/dist/commands/generate-cache.test.d.ts +1 -0
- package/dist/commands/generate-cache.test.js +36 -0
- package/dist/commands/generate-config.test.d.ts +1 -0
- package/dist/commands/generate-config.test.js +35 -0
- package/dist/commands/generate-controller.test.d.ts +1 -0
- package/dist/commands/generate-controller.test.js +48 -0
- package/dist/commands/generate-cron.js +2 -2
- package/dist/commands/generate-cron.test.d.ts +1 -0
- package/dist/commands/generate-cron.test.js +42 -0
- package/dist/commands/generate-crud.js +2 -2
- package/dist/commands/generate-crud.test.d.ts +1 -0
- package/dist/commands/generate-crud.test.js +52 -0
- package/dist/commands/generate-discovery.js +2 -2
- package/dist/commands/generate-discovery.test.d.ts +1 -0
- package/dist/commands/generate-discovery.test.js +36 -0
- package/dist/commands/generate-dto.test.d.ts +1 -0
- package/dist/commands/generate-dto.test.js +44 -0
- package/dist/commands/generate-exception-filter.test.d.ts +1 -0
- package/dist/commands/generate-exception-filter.test.js +43 -0
- package/dist/commands/generate-guard.test.d.ts +1 -0
- package/dist/commands/generate-guard.test.js +41 -0
- package/dist/commands/generate-interceptor.test.d.ts +1 -0
- package/dist/commands/generate-interceptor.test.js +41 -0
- package/dist/commands/generate-middleware.test.d.ts +1 -0
- package/dist/commands/generate-middleware.test.js +41 -0
- package/dist/commands/generate-module.js +2 -2
- package/dist/commands/generate-module.test.d.ts +1 -0
- package/dist/commands/generate-module.test.js +54 -0
- package/dist/commands/generate-pipe.test.d.ts +1 -0
- package/dist/commands/generate-pipe.test.js +35 -0
- package/dist/commands/generate-rag.js +2 -2
- package/dist/commands/generate-rag.test.d.ts +1 -0
- package/dist/commands/generate-rag.test.js +35 -0
- package/dist/commands/generate-repository.js +4 -5
- package/dist/commands/generate-repository.test.d.ts +1 -0
- package/dist/commands/generate-repository.test.js +41 -0
- package/dist/commands/generate-serverless-handler.test.d.ts +1 -0
- package/dist/commands/generate-serverless-handler.test.js +42 -0
- package/dist/commands/generate-service.js +2 -2
- package/dist/commands/generate-service.test.d.ts +1 -0
- package/dist/commands/generate-service.test.js +41 -0
- package/dist/commands/generate-websocket-gateway.test.d.ts +1 -0
- package/dist/commands/generate-websocket-gateway.test.js +41 -0
- package/dist/index.test.d.ts +1 -0
- package/dist/index.test.js +93 -0
- package/dist/utils/generator.test.d.ts +1 -0
- package/dist/utils/generator.test.js +137 -0
- package/package.json +2 -2
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const generate_exception_filter_1 = require("./generate-exception-filter");
|
|
9
|
+
jest.mock('fs');
|
|
10
|
+
describe('generateExceptionFilter', () => {
|
|
11
|
+
const mockFs = fs_1.default;
|
|
12
|
+
let program;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
jest.clearAllMocks();
|
|
15
|
+
mockFs.existsSync.mockReturnValue(true);
|
|
16
|
+
mockFs.writeFileSync.mockImplementation(() => { });
|
|
17
|
+
jest.spyOn(console, 'log').mockImplementation();
|
|
18
|
+
program = new commander_1.Command();
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
jest.restoreAllMocks();
|
|
22
|
+
});
|
|
23
|
+
it('should register the filter command with alias', () => {
|
|
24
|
+
(0, generate_exception_filter_1.generateExceptionFilter)(program);
|
|
25
|
+
const cmd = program.commands.find(c => c.name() === 'filter');
|
|
26
|
+
expect(cmd).toBeDefined();
|
|
27
|
+
expect(cmd?.alias()).toBe('f');
|
|
28
|
+
});
|
|
29
|
+
it('should generate a filter file with correct suffix', async () => {
|
|
30
|
+
(0, generate_exception_filter_1.generateExceptionFilter)(program);
|
|
31
|
+
await program.parseAsync(['node', 'test', 'filter', 'http']);
|
|
32
|
+
expect(mockFs.writeFileSync).toHaveBeenCalledWith(expect.stringContaining('http.filter.ts'), expect.stringContaining('HttpExceptionFilter'));
|
|
33
|
+
});
|
|
34
|
+
it('should import correctly from @hazeljs/core', async () => {
|
|
35
|
+
(0, generate_exception_filter_1.generateExceptionFilter)(program);
|
|
36
|
+
await program.parseAsync(['node', 'test', 'filter', 'http']);
|
|
37
|
+
const writtenContent = mockFs.writeFileSync.mock.calls[0][1];
|
|
38
|
+
expect(writtenContent).toContain("from '@hazeljs/core'");
|
|
39
|
+
expect(writtenContent).toContain('Catch');
|
|
40
|
+
expect(writtenContent).toContain('logger');
|
|
41
|
+
expect(writtenContent).not.toContain("import logger from");
|
|
42
|
+
});
|
|
43
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const generate_guard_1 = require("./generate-guard");
|
|
9
|
+
jest.mock('fs');
|
|
10
|
+
describe('generateGuard', () => {
|
|
11
|
+
const mockFs = fs_1.default;
|
|
12
|
+
let program;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
jest.clearAllMocks();
|
|
15
|
+
mockFs.existsSync.mockReturnValue(true);
|
|
16
|
+
mockFs.writeFileSync.mockImplementation(() => { });
|
|
17
|
+
jest.spyOn(console, 'log').mockImplementation();
|
|
18
|
+
program = new commander_1.Command();
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
jest.restoreAllMocks();
|
|
22
|
+
});
|
|
23
|
+
it('should register the guard command with alias', () => {
|
|
24
|
+
(0, generate_guard_1.generateGuard)(program);
|
|
25
|
+
const cmd = program.commands.find(c => c.name() === 'guard');
|
|
26
|
+
expect(cmd).toBeDefined();
|
|
27
|
+
expect(cmd?.alias()).toBe('gu');
|
|
28
|
+
});
|
|
29
|
+
it('should generate a guard file with correct suffix', async () => {
|
|
30
|
+
(0, generate_guard_1.generateGuard)(program);
|
|
31
|
+
await program.parseAsync(['node', 'test', 'guard', 'auth']);
|
|
32
|
+
expect(mockFs.writeFileSync).toHaveBeenCalledWith(expect.stringContaining('auth.guard.ts'), expect.stringContaining('AuthGuard'));
|
|
33
|
+
});
|
|
34
|
+
it('should include CanActivate interface', async () => {
|
|
35
|
+
(0, generate_guard_1.generateGuard)(program);
|
|
36
|
+
await program.parseAsync(['node', 'test', 'guard', 'auth']);
|
|
37
|
+
const writtenContent = mockFs.writeFileSync.mock.calls[0][1];
|
|
38
|
+
expect(writtenContent).toContain('CanActivate');
|
|
39
|
+
expect(writtenContent).toContain('canActivate');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const generate_interceptor_1 = require("./generate-interceptor");
|
|
9
|
+
jest.mock('fs');
|
|
10
|
+
describe('generateInterceptor', () => {
|
|
11
|
+
const mockFs = fs_1.default;
|
|
12
|
+
let program;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
jest.clearAllMocks();
|
|
15
|
+
mockFs.existsSync.mockReturnValue(true);
|
|
16
|
+
mockFs.writeFileSync.mockImplementation(() => { });
|
|
17
|
+
jest.spyOn(console, 'log').mockImplementation();
|
|
18
|
+
program = new commander_1.Command();
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
jest.restoreAllMocks();
|
|
22
|
+
});
|
|
23
|
+
it('should register the interceptor command with alias', () => {
|
|
24
|
+
(0, generate_interceptor_1.generateInterceptor)(program);
|
|
25
|
+
const cmd = program.commands.find(c => c.name() === 'interceptor');
|
|
26
|
+
expect(cmd).toBeDefined();
|
|
27
|
+
expect(cmd?.alias()).toBe('i');
|
|
28
|
+
});
|
|
29
|
+
it('should generate an interceptor file with correct suffix', async () => {
|
|
30
|
+
(0, generate_interceptor_1.generateInterceptor)(program);
|
|
31
|
+
await program.parseAsync(['node', 'test', 'interceptor', 'logging']);
|
|
32
|
+
expect(mockFs.writeFileSync).toHaveBeenCalledWith(expect.stringContaining('logging.interceptor.ts'), expect.stringContaining('LoggingInterceptor'));
|
|
33
|
+
});
|
|
34
|
+
it('should implement the Interceptor interface', async () => {
|
|
35
|
+
(0, generate_interceptor_1.generateInterceptor)(program);
|
|
36
|
+
await program.parseAsync(['node', 'test', 'interceptor', 'logging']);
|
|
37
|
+
const writtenContent = mockFs.writeFileSync.mock.calls[0][1];
|
|
38
|
+
expect(writtenContent).toContain('implements Interceptor');
|
|
39
|
+
expect(writtenContent).toContain('intercept');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const generate_middleware_1 = require("./generate-middleware");
|
|
9
|
+
jest.mock('fs');
|
|
10
|
+
describe('generateMiddleware', () => {
|
|
11
|
+
const mockFs = fs_1.default;
|
|
12
|
+
let program;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
jest.clearAllMocks();
|
|
15
|
+
mockFs.existsSync.mockReturnValue(true);
|
|
16
|
+
mockFs.writeFileSync.mockImplementation(() => { });
|
|
17
|
+
jest.spyOn(console, 'log').mockImplementation();
|
|
18
|
+
program = new commander_1.Command();
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
jest.restoreAllMocks();
|
|
22
|
+
});
|
|
23
|
+
it('should register the middleware command with alias', () => {
|
|
24
|
+
(0, generate_middleware_1.generateMiddleware)(program);
|
|
25
|
+
const cmd = program.commands.find(c => c.name() === 'middleware');
|
|
26
|
+
expect(cmd).toBeDefined();
|
|
27
|
+
expect(cmd?.alias()).toBe('mw');
|
|
28
|
+
});
|
|
29
|
+
it('should generate a middleware file with correct suffix', async () => {
|
|
30
|
+
(0, generate_middleware_1.generateMiddleware)(program);
|
|
31
|
+
await program.parseAsync(['node', 'test', 'middleware', 'logger']);
|
|
32
|
+
expect(mockFs.writeFileSync).toHaveBeenCalledWith(expect.stringContaining('logger.middleware.ts'), expect.stringContaining('LoggerMiddleware'));
|
|
33
|
+
});
|
|
34
|
+
it('should import from @hazeljs/core not express', async () => {
|
|
35
|
+
(0, generate_middleware_1.generateMiddleware)(program);
|
|
36
|
+
await program.parseAsync(['node', 'test', 'middleware', 'logger']);
|
|
37
|
+
const writtenContent = mockFs.writeFileSync.mock.calls[0][1];
|
|
38
|
+
expect(writtenContent).toContain("from '@hazeljs/core'");
|
|
39
|
+
expect(writtenContent).not.toContain("from 'express'");
|
|
40
|
+
});
|
|
41
|
+
});
|
|
@@ -37,10 +37,10 @@ export class {{className}}Controller {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
`;
|
|
40
|
-
const SERVICE_TEMPLATE = `import {
|
|
40
|
+
const SERVICE_TEMPLATE = `import { Service } from '@hazeljs/core';
|
|
41
41
|
import { Create{{className}}Dto } from './dto/create-{{fileName}}.dto';
|
|
42
42
|
|
|
43
|
-
@
|
|
43
|
+
@Service()
|
|
44
44
|
export class {{className}}Service {
|
|
45
45
|
private items: any[] = [];
|
|
46
46
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const generate_module_1 = require("./generate-module");
|
|
9
|
+
jest.mock('fs');
|
|
10
|
+
describe('generateModule', () => {
|
|
11
|
+
const mockFs = fs_1.default;
|
|
12
|
+
let program;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
jest.clearAllMocks();
|
|
15
|
+
mockFs.existsSync.mockReturnValue(false);
|
|
16
|
+
mockFs.mkdirSync.mockImplementation(() => undefined);
|
|
17
|
+
mockFs.writeFileSync.mockImplementation(() => { });
|
|
18
|
+
jest.spyOn(console, 'log').mockImplementation();
|
|
19
|
+
program = new commander_1.Command();
|
|
20
|
+
});
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
jest.restoreAllMocks();
|
|
23
|
+
});
|
|
24
|
+
it('should register the module command with alias', () => {
|
|
25
|
+
(0, generate_module_1.generateModule)(program);
|
|
26
|
+
const cmd = program.commands.find(c => c.name() === 'module');
|
|
27
|
+
expect(cmd).toBeDefined();
|
|
28
|
+
expect(cmd?.alias()).toBe('m');
|
|
29
|
+
});
|
|
30
|
+
it('should generate all module files', async () => {
|
|
31
|
+
(0, generate_module_1.generateModule)(program);
|
|
32
|
+
await program.parseAsync(['node', 'test', 'module', 'user']);
|
|
33
|
+
const writtenFiles = mockFs.writeFileSync.mock.calls.map(call => call[0]);
|
|
34
|
+
expect(writtenFiles.some(f => f.includes('user.module.ts'))).toBe(true);
|
|
35
|
+
expect(writtenFiles.some(f => f.includes('user.controller.ts'))).toBe(true);
|
|
36
|
+
expect(writtenFiles.some(f => f.includes('user.service.ts'))).toBe(true);
|
|
37
|
+
expect(writtenFiles.some(f => f.includes('create-user.dto.ts'))).toBe(true);
|
|
38
|
+
expect(writtenFiles.some(f => f.includes('update-user.dto.ts'))).toBe(true);
|
|
39
|
+
});
|
|
40
|
+
it('should use @hazeljs/core imports in all generated files', async () => {
|
|
41
|
+
(0, generate_module_1.generateModule)(program);
|
|
42
|
+
await program.parseAsync(['node', 'test', 'module', 'user']);
|
|
43
|
+
const writtenContents = mockFs.writeFileSync.mock.calls.map(call => call[1]);
|
|
44
|
+
const moduleContent = writtenContents.find(c => c.includes('HazelModule'));
|
|
45
|
+
expect(moduleContent).toContain("from '@hazeljs/core'");
|
|
46
|
+
const controllerContent = writtenContents.find(c => c.includes('Controller'));
|
|
47
|
+
expect(controllerContent).toContain("from '@hazeljs/core'");
|
|
48
|
+
});
|
|
49
|
+
it('should support --dry-run flag', async () => {
|
|
50
|
+
(0, generate_module_1.generateModule)(program);
|
|
51
|
+
await program.parseAsync(['node', 'test', 'module', 'user', '--dry-run']);
|
|
52
|
+
expect(mockFs.writeFileSync).not.toHaveBeenCalled();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const generate_pipe_1 = require("./generate-pipe");
|
|
9
|
+
jest.mock('fs');
|
|
10
|
+
describe('generatePipe', () => {
|
|
11
|
+
const mockFs = fs_1.default;
|
|
12
|
+
let program;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
jest.clearAllMocks();
|
|
15
|
+
mockFs.existsSync.mockReturnValue(true);
|
|
16
|
+
mockFs.writeFileSync.mockImplementation(() => { });
|
|
17
|
+
jest.spyOn(console, 'log').mockImplementation();
|
|
18
|
+
program = new commander_1.Command();
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
jest.restoreAllMocks();
|
|
22
|
+
});
|
|
23
|
+
it('should generate a pipe file with correct suffix', async () => {
|
|
24
|
+
(0, generate_pipe_1.generatePipe)(program);
|
|
25
|
+
await program.parseAsync(['node', 'test', 'pipe', 'validation']);
|
|
26
|
+
expect(mockFs.writeFileSync).toHaveBeenCalledWith(expect.stringContaining('validation.pipe.ts'), expect.stringContaining('ValidationPipe'));
|
|
27
|
+
});
|
|
28
|
+
it('should implement PipeTransform interface', async () => {
|
|
29
|
+
(0, generate_pipe_1.generatePipe)(program);
|
|
30
|
+
await program.parseAsync(['node', 'test', 'pipe', 'validation']);
|
|
31
|
+
const writtenContent = mockFs.writeFileSync.mock.calls[0][1];
|
|
32
|
+
expect(writtenContent).toContain('PipeTransform');
|
|
33
|
+
expect(writtenContent).toContain('transform');
|
|
34
|
+
});
|
|
35
|
+
});
|
|
@@ -6,10 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.generateRag = generateRag;
|
|
7
7
|
const generator_1 = require("../utils/generator");
|
|
8
8
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
const RAG_SERVICE_TEMPLATE = `import {
|
|
9
|
+
const RAG_SERVICE_TEMPLATE = `import { Service } from '@hazeljs/core';
|
|
10
10
|
import { RAGPipeline, MemoryVectorStore } from '@hazeljs/rag';
|
|
11
11
|
|
|
12
|
-
@
|
|
12
|
+
@Service()
|
|
13
13
|
export class {{className}}RagService {
|
|
14
14
|
private pipeline: RAGPipeline;
|
|
15
15
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const generate_rag_1 = require("./generate-rag");
|
|
9
|
+
jest.mock('fs');
|
|
10
|
+
describe('generateRag', () => {
|
|
11
|
+
const mockFs = fs_1.default;
|
|
12
|
+
let program;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
jest.clearAllMocks();
|
|
15
|
+
mockFs.existsSync.mockReturnValue(true);
|
|
16
|
+
mockFs.writeFileSync.mockImplementation(() => { });
|
|
17
|
+
jest.spyOn(console, 'log').mockImplementation();
|
|
18
|
+
program = new commander_1.Command();
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
jest.restoreAllMocks();
|
|
22
|
+
});
|
|
23
|
+
it('should generate a RAG service file', async () => {
|
|
24
|
+
(0, generate_rag_1.generateRag)(program);
|
|
25
|
+
await program.parseAsync(['node', 'test', 'rag', 'knowledge']);
|
|
26
|
+
expect(mockFs.writeFileSync).toHaveBeenCalledWith(expect.stringContaining('knowledge.rag.ts'), expect.stringContaining('KnowledgeRagService'));
|
|
27
|
+
});
|
|
28
|
+
it('should import from @hazeljs/rag', async () => {
|
|
29
|
+
(0, generate_rag_1.generateRag)(program);
|
|
30
|
+
await program.parseAsync(['node', 'test', 'rag', 'knowledge']);
|
|
31
|
+
const writtenContent = mockFs.writeFileSync.mock.calls[0][1];
|
|
32
|
+
expect(writtenContent).toContain("from '@hazeljs/rag'");
|
|
33
|
+
expect(writtenContent).toContain('RAGPipeline');
|
|
34
|
+
});
|
|
35
|
+
});
|
|
@@ -2,14 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateRepository = generateRepository;
|
|
4
4
|
const generator_1 = require("../utils/generator");
|
|
5
|
-
const REPOSITORY_TEMPLATE = `import {
|
|
6
|
-
import { BaseRepository, PrismaService } from '@hazeljs/prisma';
|
|
5
|
+
const REPOSITORY_TEMPLATE = `import { Repository, BaseRepository, PrismaService } from '@hazeljs/prisma';
|
|
7
6
|
|
|
8
|
-
@Injectable()
|
|
7
|
+
// @Repository implies @Injectable() — no need for both decorators
|
|
8
|
+
@Repository({ model: '{{modelName}}' })
|
|
9
9
|
export class {{className}}Repository extends BaseRepository<any> {
|
|
10
10
|
constructor(prisma: PrismaService) {
|
|
11
|
-
|
|
12
|
-
super(prisma.client.modelName);
|
|
11
|
+
super(prisma, '{{modelName}}');
|
|
13
12
|
}
|
|
14
13
|
|
|
15
14
|
// Add custom repository methods here
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const generate_repository_1 = require("./generate-repository");
|
|
9
|
+
jest.mock('fs');
|
|
10
|
+
describe('generateRepository', () => {
|
|
11
|
+
const mockFs = fs_1.default;
|
|
12
|
+
let program;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
jest.clearAllMocks();
|
|
15
|
+
mockFs.existsSync.mockReturnValue(true);
|
|
16
|
+
mockFs.writeFileSync.mockImplementation(() => { });
|
|
17
|
+
jest.spyOn(console, 'log').mockImplementation();
|
|
18
|
+
program = new commander_1.Command();
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
jest.restoreAllMocks();
|
|
22
|
+
});
|
|
23
|
+
it('should register the repository command with alias', () => {
|
|
24
|
+
(0, generate_repository_1.generateRepository)(program);
|
|
25
|
+
const cmd = program.commands.find(c => c.name() === 'repository');
|
|
26
|
+
expect(cmd).toBeDefined();
|
|
27
|
+
expect(cmd?.alias()).toBe('repo');
|
|
28
|
+
});
|
|
29
|
+
it('should generate a repository file with correct suffix', async () => {
|
|
30
|
+
(0, generate_repository_1.generateRepository)(program);
|
|
31
|
+
await program.parseAsync(['node', 'test', 'repository', 'user']);
|
|
32
|
+
expect(mockFs.writeFileSync).toHaveBeenCalledWith(expect.stringContaining('user.repository.ts'), expect.stringContaining('UserRepository'));
|
|
33
|
+
});
|
|
34
|
+
it('should import from @hazeljs/prisma', async () => {
|
|
35
|
+
(0, generate_repository_1.generateRepository)(program);
|
|
36
|
+
await program.parseAsync(['node', 'test', 'repository', 'user']);
|
|
37
|
+
const writtenContent = mockFs.writeFileSync.mock.calls[0][1];
|
|
38
|
+
expect(writtenContent).toContain("from '@hazeljs/prisma'");
|
|
39
|
+
expect(writtenContent).toContain('BaseRepository');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const generate_serverless_handler_1 = require("./generate-serverless-handler");
|
|
9
|
+
jest.mock('fs');
|
|
10
|
+
describe('generateServerlessHandler', () => {
|
|
11
|
+
const mockFs = fs_1.default;
|
|
12
|
+
let program;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
jest.clearAllMocks();
|
|
15
|
+
mockFs.existsSync.mockReturnValue(true);
|
|
16
|
+
mockFs.writeFileSync.mockImplementation(() => { });
|
|
17
|
+
jest.spyOn(console, 'log').mockImplementation();
|
|
18
|
+
program = new commander_1.Command();
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
jest.restoreAllMocks();
|
|
22
|
+
});
|
|
23
|
+
it('should register the serverless command with alias', () => {
|
|
24
|
+
(0, generate_serverless_handler_1.generateServerlessHandler)(program);
|
|
25
|
+
const cmd = program.commands.find(c => c.name() === 'serverless');
|
|
26
|
+
expect(cmd).toBeDefined();
|
|
27
|
+
expect(cmd?.alias()).toBe('sls');
|
|
28
|
+
});
|
|
29
|
+
it('should generate a lambda handler by default', async () => {
|
|
30
|
+
(0, generate_serverless_handler_1.generateServerlessHandler)(program);
|
|
31
|
+
await program.parseAsync(['node', 'test', 'serverless', 'api']);
|
|
32
|
+
const writtenContent = mockFs.writeFileSync.mock.calls[0][1];
|
|
33
|
+
expect(writtenContent).toContain('createLambdaHandler');
|
|
34
|
+
expect(writtenContent).toContain("from '@hazeljs/serverless'");
|
|
35
|
+
});
|
|
36
|
+
it('should generate a cloud function handler', async () => {
|
|
37
|
+
(0, generate_serverless_handler_1.generateServerlessHandler)(program);
|
|
38
|
+
await program.parseAsync(['node', 'test', 'serverless', 'api', '--platform', 'cloud-function']);
|
|
39
|
+
const writtenContent = mockFs.writeFileSync.mock.calls[0][1];
|
|
40
|
+
expect(writtenContent).toContain('createCloudFunctionHandler');
|
|
41
|
+
});
|
|
42
|
+
});
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateService = generateService;
|
|
4
4
|
const generator_1 = require("../utils/generator");
|
|
5
|
-
const SERVICE_TEMPLATE = `import {
|
|
5
|
+
const SERVICE_TEMPLATE = `import { Service } from '@hazeljs/core';
|
|
6
6
|
|
|
7
|
-
@
|
|
7
|
+
@Service()
|
|
8
8
|
export class {{className}}Service {
|
|
9
9
|
constructor() {}
|
|
10
10
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const generate_service_1 = require("./generate-service");
|
|
9
|
+
jest.mock('fs');
|
|
10
|
+
describe('generateService', () => {
|
|
11
|
+
const mockFs = fs_1.default;
|
|
12
|
+
let program;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
jest.clearAllMocks();
|
|
15
|
+
mockFs.existsSync.mockReturnValue(true);
|
|
16
|
+
mockFs.writeFileSync.mockImplementation(() => { });
|
|
17
|
+
jest.spyOn(console, 'log').mockImplementation();
|
|
18
|
+
program = new commander_1.Command();
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
jest.restoreAllMocks();
|
|
22
|
+
});
|
|
23
|
+
it('should register the service command with alias', () => {
|
|
24
|
+
(0, generate_service_1.generateService)(program);
|
|
25
|
+
const cmd = program.commands.find(c => c.name() === 'service');
|
|
26
|
+
expect(cmd).toBeDefined();
|
|
27
|
+
expect(cmd?.alias()).toBe('s');
|
|
28
|
+
});
|
|
29
|
+
it('should generate a service file with correct suffix', async () => {
|
|
30
|
+
(0, generate_service_1.generateService)(program);
|
|
31
|
+
await program.parseAsync(['node', 'test', 'service', 'user']);
|
|
32
|
+
expect(mockFs.writeFileSync).toHaveBeenCalledWith(expect.stringContaining('user.service.ts'), expect.stringContaining('UserService'));
|
|
33
|
+
});
|
|
34
|
+
it('should include Service decorator', async () => {
|
|
35
|
+
(0, generate_service_1.generateService)(program);
|
|
36
|
+
await program.parseAsync(['node', 'test', 'service', 'user']);
|
|
37
|
+
const writtenContent = mockFs.writeFileSync.mock.calls[0][1];
|
|
38
|
+
expect(writtenContent).toContain('@Service()');
|
|
39
|
+
expect(writtenContent).toContain("from '@hazeljs/core'");
|
|
40
|
+
});
|
|
41
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const generate_websocket_gateway_1 = require("./generate-websocket-gateway");
|
|
9
|
+
jest.mock('fs');
|
|
10
|
+
describe('generateWebSocketGateway', () => {
|
|
11
|
+
const mockFs = fs_1.default;
|
|
12
|
+
let program;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
jest.clearAllMocks();
|
|
15
|
+
mockFs.existsSync.mockReturnValue(true);
|
|
16
|
+
mockFs.writeFileSync.mockImplementation(() => { });
|
|
17
|
+
jest.spyOn(console, 'log').mockImplementation();
|
|
18
|
+
program = new commander_1.Command();
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
jest.restoreAllMocks();
|
|
22
|
+
});
|
|
23
|
+
it('should register the gateway command with alias', () => {
|
|
24
|
+
(0, generate_websocket_gateway_1.generateWebSocketGateway)(program);
|
|
25
|
+
const cmd = program.commands.find(c => c.name() === 'gateway');
|
|
26
|
+
expect(cmd).toBeDefined();
|
|
27
|
+
expect(cmd?.alias()).toBe('ws');
|
|
28
|
+
});
|
|
29
|
+
it('should generate a gateway file with correct suffix', async () => {
|
|
30
|
+
(0, generate_websocket_gateway_1.generateWebSocketGateway)(program);
|
|
31
|
+
await program.parseAsync(['node', 'test', 'gateway', 'chat']);
|
|
32
|
+
expect(mockFs.writeFileSync).toHaveBeenCalledWith(expect.stringContaining('chat.gateway.ts'), expect.stringContaining('ChatGateway'));
|
|
33
|
+
});
|
|
34
|
+
it('should import from @hazeljs/websocket', async () => {
|
|
35
|
+
(0, generate_websocket_gateway_1.generateWebSocketGateway)(program);
|
|
36
|
+
await program.parseAsync(['node', 'test', 'gateway', 'chat']);
|
|
37
|
+
const writtenContent = mockFs.writeFileSync.mock.calls[0][1];
|
|
38
|
+
expect(writtenContent).toContain("from '@hazeljs/websocket'");
|
|
39
|
+
expect(writtenContent).toContain('@Realtime');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|