@config-bound/cli 0.1.0 → 0.2.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/CHANGELOG.md +16 -0
- package/package.json +6 -4
- package/scripts/generate-docs.ts +362 -0
- package/src/cli.module.ts +7 -1
- package/src/commands/generate-bind.command.ts +175 -0
- package/src/commands/generate.command.ts +13 -0
- package/src/services/bind-generator.service.ts +248 -0
- package/src/services/schema-export.service.spec.ts +3 -3
- package/tsconfig.json +7 -2
- package/.turbo/turbo-build.log +0 -4
- package/.turbo/turbo-format$colon$ci.log +0 -6
- package/.turbo/turbo-lint$colon$ci.log +0 -4
- package/.turbo/turbo-test.log +0 -19
- package/dist/cli.module.d.ts +0 -3
- package/dist/cli.module.d.ts.map +0 -1
- package/dist/cli.module.js +0 -29
- package/dist/cli.module.js.map +0 -1
- package/dist/commands/export.command.d.ts +0 -30
- package/dist/commands/export.command.d.ts.map +0 -1
- package/dist/commands/export.command.js +0 -226
- package/dist/commands/export.command.js.map +0 -1
- package/dist/commands/list.command.d.ts +0 -13
- package/dist/commands/list.command.d.ts.map +0 -1
- package/dist/commands/list.command.js +0 -93
- package/dist/commands/list.command.js.map +0 -1
- package/dist/main.d.ts +0 -3
- package/dist/main.d.ts.map +0 -1
- package/dist/main.js +0 -17
- package/dist/main.js.map +0 -1
- package/dist/services/config-discovery.service.d.ts +0 -15
- package/dist/services/config-discovery.service.d.ts.map +0 -1
- package/dist/services/config-discovery.service.js +0 -191
- package/dist/services/config-discovery.service.js.map +0 -1
- package/dist/services/config-discovery.service.spec.d.ts +0 -2
- package/dist/services/config-discovery.service.spec.d.ts.map +0 -1
- package/dist/services/config-discovery.service.spec.js +0 -137
- package/dist/services/config-discovery.service.spec.js.map +0 -1
- package/dist/services/config-loader.service.d.ts +0 -13
- package/dist/services/config-loader.service.d.ts.map +0 -1
- package/dist/services/config-loader.service.js +0 -241
- package/dist/services/config-loader.service.js.map +0 -1
- package/dist/services/file-writer.service.d.ts +0 -6
- package/dist/services/file-writer.service.d.ts.map +0 -1
- package/dist/services/file-writer.service.js +0 -38
- package/dist/services/file-writer.service.js.map +0 -1
- package/dist/services/file-writer.service.spec.d.ts +0 -2
- package/dist/services/file-writer.service.spec.d.ts.map +0 -1
- package/dist/services/file-writer.service.spec.js +0 -98
- package/dist/services/file-writer.service.spec.js.map +0 -1
- package/dist/services/schema-export.service.d.ts +0 -14
- package/dist/services/schema-export.service.d.ts.map +0 -1
- package/dist/services/schema-export.service.js +0 -58
- package/dist/services/schema-export.service.js.map +0 -1
- package/dist/services/schema-export.service.spec.d.ts +0 -2
- package/dist/services/schema-export.service.spec.d.ts.map +0 -1
- package/dist/services/schema-export.service.spec.js +0 -69
- package/dist/services/schema-export.service.spec.js.map +0 -1
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
import { Command, CommandRunner, Option } from 'nest-commander';
|
|
11
|
-
import { ConfigDiscoveryService } from '../services/config-discovery.service.js';
|
|
12
|
-
import chalk from 'chalk';
|
|
13
|
-
import * as path from 'path';
|
|
14
|
-
let ListCommand = class ListCommand extends CommandRunner {
|
|
15
|
-
discoveryService;
|
|
16
|
-
constructor(discoveryService) {
|
|
17
|
-
super();
|
|
18
|
-
this.discoveryService = discoveryService;
|
|
19
|
-
}
|
|
20
|
-
async run(passedParams, options) {
|
|
21
|
-
const searchPath = passedParams[0] || process.cwd();
|
|
22
|
-
const recursive = options?.recursive !== false;
|
|
23
|
-
try {
|
|
24
|
-
console.log(chalk.blue(`Searching for ConfigBound configurations in: ${searchPath}`));
|
|
25
|
-
console.log(chalk.gray(`Recursive: ${recursive ? 'yes' : 'no'}`));
|
|
26
|
-
console.log();
|
|
27
|
-
const configs = await this.discoveryService.discoverConfigs(searchPath, recursive);
|
|
28
|
-
if (configs.length === 0) {
|
|
29
|
-
console.log(chalk.yellow('No ConfigBound configurations found.'));
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
console.log(chalk.green(`Found ${configs.length} ConfigBound configuration${configs.length === 1 ? '' : 's'}:`));
|
|
33
|
-
console.log();
|
|
34
|
-
const groupedByFile = configs.reduce((acc, config) => {
|
|
35
|
-
if (!acc[config.filePath]) {
|
|
36
|
-
acc[config.filePath] = [];
|
|
37
|
-
}
|
|
38
|
-
acc[config.filePath].push(config);
|
|
39
|
-
return acc;
|
|
40
|
-
}, {});
|
|
41
|
-
for (const [filePath, fileConfigs] of Object.entries(groupedByFile)) {
|
|
42
|
-
const relativePath = path.relative(process.cwd(), filePath);
|
|
43
|
-
console.log(chalk.cyan(`📄 ${relativePath}`));
|
|
44
|
-
for (const config of fileConfigs) {
|
|
45
|
-
const exportType = config.isDefault
|
|
46
|
-
? chalk.gray('(default)')
|
|
47
|
-
: chalk.gray('(named)');
|
|
48
|
-
const configNamePart = config.configName
|
|
49
|
-
? chalk.magenta(` - ${config.configName}`)
|
|
50
|
-
: '';
|
|
51
|
-
const linePart = chalk.gray(`:${config.lineNumber}`);
|
|
52
|
-
console.log(` ${chalk.white(config.exportName)} ${exportType}${configNamePart}${linePart}`);
|
|
53
|
-
}
|
|
54
|
-
console.log();
|
|
55
|
-
}
|
|
56
|
-
console.log(chalk.gray('Tip: Use `configbound export --config <file> --name <export>` to export a specific configuration.'));
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
if (error instanceof Error) {
|
|
60
|
-
console.error(chalk.red(`Error: ${error.message}`));
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
console.error(chalk.red(`Error: ${String(error)}`));
|
|
64
|
-
}
|
|
65
|
-
process.exit(1);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
parseRecursive(val) {
|
|
69
|
-
return val !== 'false';
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
__decorate([
|
|
73
|
-
Option({
|
|
74
|
-
flags: '-r, --recursive [boolean]',
|
|
75
|
-
description: 'Search subdirectories (default: true)'
|
|
76
|
-
}),
|
|
77
|
-
__metadata("design:type", Function),
|
|
78
|
-
__metadata("design:paramtypes", [String]),
|
|
79
|
-
__metadata("design:returntype", Boolean)
|
|
80
|
-
], ListCommand.prototype, "parseRecursive", null);
|
|
81
|
-
ListCommand = __decorate([
|
|
82
|
-
Command({
|
|
83
|
-
name: 'list',
|
|
84
|
-
description: 'List all discovered ConfigBound configurations',
|
|
85
|
-
arguments: '[path]',
|
|
86
|
-
argsDescription: {
|
|
87
|
-
path: 'Directory to search (default: current directory)'
|
|
88
|
-
}
|
|
89
|
-
}),
|
|
90
|
-
__metadata("design:paramtypes", [ConfigDiscoveryService])
|
|
91
|
-
], ListCommand);
|
|
92
|
-
export { ListCommand };
|
|
93
|
-
//# sourceMappingURL=list.command.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.command.js","sourceRoot":"","sources":["../../src/commands/list.command.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AActB,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,aAAa;IACf;IAA7B,YAA6B,gBAAwC;QACnE,KAAK,EAAE,CAAC;QADmB,qBAAgB,GAAhB,gBAAgB,CAAwB;IAErE,CAAC;IAED,KAAK,CAAC,GAAG,CACP,YAAsB,EACtB,OAA4B;QAE5B,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,KAAK,KAAK,CAAC;QAE/C,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,gDAAgD,UAAU,EAAE,CAAC,CACzE,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,CACzD,UAAU,EACV,SAAS,CACV,CAAC;YAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC,CAAC;gBAClE,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CACT,SAAS,OAAO,CAAC,MAAM,6BAA6B,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CACvF,CACF,CAAC;YACF,OAAO,CAAC,GAAG,EAAE,CAAC;YAGd,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAClC,CAAC,GAAmC,EAAE,MAA2B,EAAE,EAAE;gBACnE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1B,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBAC5B,CAAC;gBACD,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClC,OAAO,GAAG,CAAC;YACb,CAAC,EACD,EAAoC,CACrC,CAAC;YAEF,KAAK,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;gBACpE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC,CAAC;gBAE9C,KAAK,MAAM,MAAM,IAAI,WAA6B,EAAE,CAAC;oBACnD,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS;wBACjC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;wBACzB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC1B,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU;wBACtC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;wBAC1C,CAAC,CAAC,EAAE,CAAC;oBACP,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;oBAErD,OAAO,CAAC,GAAG,CACT,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,cAAc,GAAG,QAAQ,EAAE,CACjF,CAAC;gBACJ,CAAC;gBACD,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;YAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,mGAAmG,CACpG,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAMD,cAAc,CAAC,GAAW;QACxB,OAAO,GAAG,KAAK,OAAO,CAAC;IACzB,CAAC;CACF,CAAA;AAHC;IAJC,MAAM,CAAC;QACN,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,uCAAuC;KACrD,CAAC;;;;iDAGD;AAzFU,WAAW;IARvB,OAAO,CAAC;QACP,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,QAAQ;QACnB,eAAe,EAAE;YACf,IAAI,EAAE,kDAAkD;SACzD;KACF,CAAC;qCAE+C,sBAAsB;GAD1D,WAAW,CA0FvB"}
|
package/dist/main.d.ts
DELETED
package/dist/main.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
|
package/dist/main.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { CommandFactory } from 'nest-commander';
|
|
3
|
-
import { CliModule } from './cli.module.js';
|
|
4
|
-
async function bootstrap() {
|
|
5
|
-
await CommandFactory.run(CliModule, {
|
|
6
|
-
logger: false,
|
|
7
|
-
errorHandler: (err) => {
|
|
8
|
-
if (err && typeof err === 'object' && 'code' in err && err.code === 'commander.help') {
|
|
9
|
-
process.exit(0);
|
|
10
|
-
}
|
|
11
|
-
console.error('Unexpected error:', err);
|
|
12
|
-
process.exit(1);
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
bootstrap();
|
|
17
|
-
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,KAAK,UAAU,SAAS;IACtB,MAAM,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE;QAClC,MAAM,EAAE,KAAK;QACb,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;YACpB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,EAAE,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export interface DiscoveredConfig {
|
|
2
|
-
filePath: string;
|
|
3
|
-
exportName: string;
|
|
4
|
-
isDefault: boolean;
|
|
5
|
-
configName?: string;
|
|
6
|
-
lineNumber: number;
|
|
7
|
-
}
|
|
8
|
-
export declare class ConfigDiscoveryService {
|
|
9
|
-
discoverConfigs(searchPath: string, recursive?: boolean): Promise<DiscoveredConfig[]>;
|
|
10
|
-
private extractConfigsFromFile;
|
|
11
|
-
private isConfigBoundCreateConfig;
|
|
12
|
-
private extractConfigName;
|
|
13
|
-
private findTypeScriptFiles;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=config-discovery.service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-discovery.service.d.ts","sourceRoot":"","sources":["../../src/services/config-discovery.service.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBACa,sBAAsB;IAC3B,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,OAAc,GACxB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAsC9B,OAAO,CAAC,sBAAsB;IA4D9B,OAAO,CAAC,yBAAyB;IA6BjC,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,mBAAmB;CA+D5B"}
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
import { Injectable } from '@nestjs/common';
|
|
8
|
-
import { Project, Node, SyntaxKind } from 'ts-morph';
|
|
9
|
-
import * as path from 'path';
|
|
10
|
-
import * as fs from 'fs';
|
|
11
|
-
import { ensureError } from '@config-bound/config-bound/utilities';
|
|
12
|
-
let ConfigDiscoveryService = class ConfigDiscoveryService {
|
|
13
|
-
async discoverConfigs(searchPath, recursive = true) {
|
|
14
|
-
const tsFiles = this.findTypeScriptFiles(searchPath, recursive);
|
|
15
|
-
const discovered = [];
|
|
16
|
-
const project = new Project({
|
|
17
|
-
skipAddingFilesFromTsConfig: true,
|
|
18
|
-
compilerOptions: {
|
|
19
|
-
allowJs: false,
|
|
20
|
-
skipLibCheck: true
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
for (const filePath of tsFiles) {
|
|
24
|
-
try {
|
|
25
|
-
project.addSourceFileAtPath(filePath);
|
|
26
|
-
}
|
|
27
|
-
catch (error) {
|
|
28
|
-
console.warn(`skipping ${filePath}: ${ensureError(error).message}`);
|
|
29
|
-
continue;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
for (const sourceFile of project.getSourceFiles()) {
|
|
33
|
-
try {
|
|
34
|
-
const configs = this.extractConfigsFromFile(sourceFile);
|
|
35
|
-
discovered.push(...configs);
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
console.warn(`skipping ${sourceFile}: ${ensureError(error).message}`);
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return discovered;
|
|
43
|
-
}
|
|
44
|
-
extractConfigsFromFile(sourceFile) {
|
|
45
|
-
const discovered = [];
|
|
46
|
-
const filePath = sourceFile.getFilePath();
|
|
47
|
-
const variableStatements = sourceFile.getVariableStatements();
|
|
48
|
-
for (const statement of variableStatements) {
|
|
49
|
-
const declarations = statement.getDeclarations();
|
|
50
|
-
for (const declaration of declarations) {
|
|
51
|
-
const initializer = declaration.getInitializer();
|
|
52
|
-
if (!initializer)
|
|
53
|
-
continue;
|
|
54
|
-
if (this.isConfigBoundCreateConfig(initializer)) {
|
|
55
|
-
const isExported = statement
|
|
56
|
-
.getModifiers()
|
|
57
|
-
.some((mod) => mod.getKind() === SyntaxKind.ExportKeyword);
|
|
58
|
-
if (isExported) {
|
|
59
|
-
const exportName = declaration.getName();
|
|
60
|
-
const configName = this.extractConfigName(initializer);
|
|
61
|
-
discovered.push({
|
|
62
|
-
filePath,
|
|
63
|
-
exportName,
|
|
64
|
-
isDefault: false,
|
|
65
|
-
configName,
|
|
66
|
-
lineNumber: declaration.getStartLineNumber()
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
const defaultExport = sourceFile.getDefaultExportSymbol();
|
|
73
|
-
if (defaultExport) {
|
|
74
|
-
const declarations = defaultExport.getDeclarations();
|
|
75
|
-
for (const declaration of declarations) {
|
|
76
|
-
if (Node.isExportAssignment(declaration)) {
|
|
77
|
-
const expression = declaration.getExpression();
|
|
78
|
-
if (this.isConfigBoundCreateConfig(expression)) {
|
|
79
|
-
const configName = this.extractConfigName(expression);
|
|
80
|
-
discovered.push({
|
|
81
|
-
filePath,
|
|
82
|
-
exportName: 'default',
|
|
83
|
-
isDefault: true,
|
|
84
|
-
configName,
|
|
85
|
-
lineNumber: declaration.getStartLineNumber()
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return discovered;
|
|
92
|
-
}
|
|
93
|
-
isConfigBoundCreateConfig(node) {
|
|
94
|
-
if (!Node.isCallExpression(node))
|
|
95
|
-
return false;
|
|
96
|
-
const expression = node.getExpression();
|
|
97
|
-
if (Node.isPropertyAccessExpression(expression)) {
|
|
98
|
-
const obj = expression.getExpression();
|
|
99
|
-
const prop = expression.getName();
|
|
100
|
-
if (Node.isIdentifier(obj) &&
|
|
101
|
-
obj.getText() === 'ConfigBound' &&
|
|
102
|
-
prop === 'createConfig') {
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
if (Node.isIdentifier(expression)) {
|
|
107
|
-
if (expression.getText() === 'createConfig') {
|
|
108
|
-
return true;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
extractConfigName(node) {
|
|
114
|
-
if (!Node.isCallExpression(node))
|
|
115
|
-
return undefined;
|
|
116
|
-
const args = node.getArguments();
|
|
117
|
-
if (args.length === 0)
|
|
118
|
-
return undefined;
|
|
119
|
-
const firstArg = args[0];
|
|
120
|
-
if (Node.isObjectLiteralExpression(firstArg)) {
|
|
121
|
-
const nameProperty = firstArg
|
|
122
|
-
.getProperties()
|
|
123
|
-
.find((prop) => Node.isPropertyAssignment(prop) && prop.getName() === 'name');
|
|
124
|
-
if (nameProperty && Node.isPropertyAssignment(nameProperty)) {
|
|
125
|
-
const initializer = nameProperty.getInitializer();
|
|
126
|
-
if (initializer && Node.isStringLiteral(initializer)) {
|
|
127
|
-
return initializer.getLiteralValue();
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
return undefined;
|
|
132
|
-
}
|
|
133
|
-
findTypeScriptFiles(searchPath, recursive) {
|
|
134
|
-
const files = [];
|
|
135
|
-
const excludedDirs = new Set([
|
|
136
|
-
'node_modules',
|
|
137
|
-
'dist',
|
|
138
|
-
'build',
|
|
139
|
-
'coverage',
|
|
140
|
-
'.git',
|
|
141
|
-
'.next',
|
|
142
|
-
'.nuxt',
|
|
143
|
-
'out',
|
|
144
|
-
'public',
|
|
145
|
-
'static',
|
|
146
|
-
'__pycache__',
|
|
147
|
-
'venv',
|
|
148
|
-
'env'
|
|
149
|
-
]);
|
|
150
|
-
function traverse(dir) {
|
|
151
|
-
let entries;
|
|
152
|
-
try {
|
|
153
|
-
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
154
|
-
}
|
|
155
|
-
catch {
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
for (const entry of entries) {
|
|
159
|
-
const fullPath = path.join(dir, entry.name);
|
|
160
|
-
if (entry.isDirectory()) {
|
|
161
|
-
if (excludedDirs.has(entry.name) || entry.name.startsWith('.')) {
|
|
162
|
-
continue;
|
|
163
|
-
}
|
|
164
|
-
if (recursive) {
|
|
165
|
-
traverse(fullPath);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
else if (entry.isFile() && entry.name.endsWith('.ts')) {
|
|
169
|
-
if (!entry.name.endsWith('.spec.ts') &&
|
|
170
|
-
!entry.name.endsWith('.test.ts') &&
|
|
171
|
-
!entry.name.endsWith('.d.ts')) {
|
|
172
|
-
files.push(fullPath);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
const stats = fs.statSync(searchPath);
|
|
178
|
-
if (stats.isDirectory()) {
|
|
179
|
-
traverse(searchPath);
|
|
180
|
-
}
|
|
181
|
-
else if (stats.isFile() && searchPath.endsWith('.ts')) {
|
|
182
|
-
files.push(searchPath);
|
|
183
|
-
}
|
|
184
|
-
return files;
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
ConfigDiscoveryService = __decorate([
|
|
188
|
-
Injectable()
|
|
189
|
-
], ConfigDiscoveryService);
|
|
190
|
-
export { ConfigDiscoveryService };
|
|
191
|
-
//# sourceMappingURL=config-discovery.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-discovery.service.js","sourceRoot":"","sources":["../../src/services/config-discovery.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-discovery.service.spec.d.ts","sourceRoot":"","sources":["../../src/services/config-discovery.service.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import { Test } from '@nestjs/testing';
|
|
2
|
-
import { ConfigDiscoveryService } from './config-discovery.service.js';
|
|
3
|
-
import { describe, beforeEach, afterEach, it, expect } from '@jest/globals';
|
|
4
|
-
import * as fs from 'fs';
|
|
5
|
-
import * as path from 'path';
|
|
6
|
-
import * as os from 'os';
|
|
7
|
-
describe('ConfigDiscoveryService', () => {
|
|
8
|
-
let service;
|
|
9
|
-
let tempDir;
|
|
10
|
-
beforeEach(async () => {
|
|
11
|
-
const module = await Test.createTestingModule({
|
|
12
|
-
providers: [ConfigDiscoveryService]
|
|
13
|
-
}).compile();
|
|
14
|
-
service = module.get(ConfigDiscoveryService);
|
|
15
|
-
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'configbound-test-'));
|
|
16
|
-
});
|
|
17
|
-
afterEach(() => {
|
|
18
|
-
if (fs.existsSync(tempDir)) {
|
|
19
|
-
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
function createTempFile(relativePath, content) {
|
|
23
|
-
const filePath = path.join(tempDir, relativePath);
|
|
24
|
-
const dir = path.dirname(filePath);
|
|
25
|
-
if (!fs.existsSync(dir)) {
|
|
26
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
27
|
-
}
|
|
28
|
-
fs.writeFileSync(filePath, content, 'utf8');
|
|
29
|
-
return filePath;
|
|
30
|
-
}
|
|
31
|
-
it('should be defined', () => {
|
|
32
|
-
expect(service).toBeDefined();
|
|
33
|
-
});
|
|
34
|
-
it('should discover named export with ConfigBound.createConfig', async () => {
|
|
35
|
-
createTempFile('config.ts', `
|
|
36
|
-
import { ConfigBound } from '@config-bound/config-bound';
|
|
37
|
-
|
|
38
|
-
export const appConfig = ConfigBound.createConfig({
|
|
39
|
-
name: 'MyApp',
|
|
40
|
-
sections: {}
|
|
41
|
-
});
|
|
42
|
-
`);
|
|
43
|
-
const configs = await service.discoverConfigs(tempDir, false);
|
|
44
|
-
expect(configs).toHaveLength(1);
|
|
45
|
-
expect(configs[0].exportName).toBe('appConfig');
|
|
46
|
-
expect(configs[0].configName).toBe('MyApp');
|
|
47
|
-
expect(configs[0].isDefault).toBe(false);
|
|
48
|
-
});
|
|
49
|
-
it('should discover named export with createConfig from named import', async () => {
|
|
50
|
-
createTempFile('config.ts', `
|
|
51
|
-
import { createConfig } from '@config-bound/config-bound';
|
|
52
|
-
|
|
53
|
-
export const dbConfig = createConfig({
|
|
54
|
-
name: 'Database',
|
|
55
|
-
sections: {}
|
|
56
|
-
});
|
|
57
|
-
`);
|
|
58
|
-
const configs = await service.discoverConfigs(tempDir, false);
|
|
59
|
-
expect(configs).toHaveLength(1);
|
|
60
|
-
expect(configs[0].exportName).toBe('dbConfig');
|
|
61
|
-
expect(configs[0].configName).toBe('Database');
|
|
62
|
-
});
|
|
63
|
-
it('should discover default export', async () => {
|
|
64
|
-
createTempFile('config.ts', `
|
|
65
|
-
import { ConfigBound } from '@config-bound/config-bound';
|
|
66
|
-
|
|
67
|
-
export default ConfigBound.createConfig({
|
|
68
|
-
name: 'DefaultConfig',
|
|
69
|
-
sections: {}
|
|
70
|
-
});
|
|
71
|
-
`);
|
|
72
|
-
const configs = await service.discoverConfigs(tempDir, false);
|
|
73
|
-
expect(configs).toHaveLength(1);
|
|
74
|
-
expect(configs[0].exportName).toBe('default');
|
|
75
|
-
expect(configs[0].isDefault).toBe(true);
|
|
76
|
-
expect(configs[0].configName).toBe('DefaultConfig');
|
|
77
|
-
});
|
|
78
|
-
it('should discover multiple exports in same file', async () => {
|
|
79
|
-
createTempFile('configs.ts', `
|
|
80
|
-
import { createConfig } from '@config-bound/config-bound';
|
|
81
|
-
|
|
82
|
-
export const config1 = createConfig({ name: 'Config1', sections: {} });
|
|
83
|
-
export const config2 = createConfig({ name: 'Config2', sections: {} });
|
|
84
|
-
`);
|
|
85
|
-
const configs = await service.discoverConfigs(tempDir, false);
|
|
86
|
-
expect(configs).toHaveLength(2);
|
|
87
|
-
expect(configs.map((c) => c.exportName).sort()).toEqual(['config1', 'config2']);
|
|
88
|
-
});
|
|
89
|
-
it('should discover configs recursively', async () => {
|
|
90
|
-
createTempFile('config1.ts', `
|
|
91
|
-
import { createConfig } from '@config-bound/config-bound';
|
|
92
|
-
export const config1 = createConfig({ name: 'Config1', sections: {} });
|
|
93
|
-
`);
|
|
94
|
-
createTempFile('subdir/config2.ts', `
|
|
95
|
-
import { createConfig } from '@config-bound/config-bound';
|
|
96
|
-
export const config2 = createConfig({ name: 'Config2', sections: {} });
|
|
97
|
-
`);
|
|
98
|
-
const configs = await service.discoverConfigs(tempDir, true);
|
|
99
|
-
expect(configs).toHaveLength(2);
|
|
100
|
-
});
|
|
101
|
-
it('should not discover configs when recursive is false', async () => {
|
|
102
|
-
createTempFile('config1.ts', `
|
|
103
|
-
import { createConfig } from '@config-bound/config-bound';
|
|
104
|
-
export const config1 = createConfig({ name: 'Config1', sections: {} });
|
|
105
|
-
`);
|
|
106
|
-
createTempFile('subdir/config2.ts', `
|
|
107
|
-
import { createConfig } from '@config-bound/config-bound';
|
|
108
|
-
export const config2 = createConfig({ name: 'Config2', sections: {} });
|
|
109
|
-
`);
|
|
110
|
-
const configs = await service.discoverConfigs(tempDir, false);
|
|
111
|
-
expect(configs).toHaveLength(1);
|
|
112
|
-
});
|
|
113
|
-
it('should skip non-exported configs', async () => {
|
|
114
|
-
createTempFile('config.ts', `
|
|
115
|
-
import { createConfig } from '@config-bound/config-bound';
|
|
116
|
-
const privateConfig = createConfig({ name: 'Private', sections: {} });
|
|
117
|
-
`);
|
|
118
|
-
const configs = await service.discoverConfigs(tempDir, false);
|
|
119
|
-
expect(configs).toHaveLength(0);
|
|
120
|
-
});
|
|
121
|
-
it('should skip test files', async () => {
|
|
122
|
-
createTempFile('config.spec.ts', `
|
|
123
|
-
import { createConfig } from '@config-bound/config-bound';
|
|
124
|
-
export const testConfig = createConfig({ name: 'Test', sections: {} });
|
|
125
|
-
`);
|
|
126
|
-
const configs = await service.discoverConfigs(tempDir, false);
|
|
127
|
-
expect(configs).toHaveLength(0);
|
|
128
|
-
});
|
|
129
|
-
it('should handle files without configs', async () => {
|
|
130
|
-
createTempFile('other.ts', `
|
|
131
|
-
export const someValue = 42;
|
|
132
|
-
`);
|
|
133
|
-
const configs = await service.discoverConfigs(tempDir, false);
|
|
134
|
-
expect(configs).toHaveLength(0);
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
//# sourceMappingURL=config-discovery.service.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-discovery.service.spec.js","sourceRoot":"","sources":["../../src/services/config-discovery.service.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Section } from '@config-bound/config-bound/section';
|
|
2
|
-
import { ConfigBound, TypedConfigBound, ConfigSchema } from '@config-bound/config-bound';
|
|
3
|
-
export interface LoadedConfig {
|
|
4
|
-
name: string;
|
|
5
|
-
sections: Section[];
|
|
6
|
-
instance: ConfigBound | TypedConfigBound<ConfigSchema>;
|
|
7
|
-
}
|
|
8
|
-
export declare class ConfigLoaderService {
|
|
9
|
-
loadConfig(filePath: string, exportName?: string): Promise<LoadedConfig>;
|
|
10
|
-
loadConfigs(filePath: string): Promise<Map<string, LoadedConfig>>;
|
|
11
|
-
private isConfigBoundInstance;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=config-loader.service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.service.d.ts","sourceRoot":"","sources":["../../src/services/config-loader.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAC7D,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,YAAY,EAUb,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,EAAE,WAAW,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;CACxD;AAED,qBACa,mBAAmB;IACxB,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC;IAiNlB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IA6HvE,OAAO,CAAC,qBAAqB;CAa9B"}
|