@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,241 +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 * as path from 'path';
|
|
9
|
-
import * as fs from 'fs';
|
|
10
|
-
import { pathToFileURL } from 'url';
|
|
11
|
-
import { ConfigLoaderException, ConfigFileNotFoundException, ConfigFileIsDirectoryException, ExportNotFoundException, NoConfigBoundInstancesException, MultipleConfigBoundInstancesException, InvalidConfigBoundInstanceException, ConfigFileParseException, MissingDependencyException } from '@config-bound/config-bound';
|
|
12
|
-
let ConfigLoaderService = class ConfigLoaderService {
|
|
13
|
-
async loadConfig(filePath, exportName) {
|
|
14
|
-
const absolutePath = path.resolve(filePath);
|
|
15
|
-
if (!fs.existsSync(absolutePath)) {
|
|
16
|
-
const parentDir = path.dirname(absolutePath);
|
|
17
|
-
const parentExists = fs.existsSync(parentDir);
|
|
18
|
-
let similarFiles;
|
|
19
|
-
if (parentExists) {
|
|
20
|
-
const fileName = path.basename(absolutePath);
|
|
21
|
-
const dirFiles = fs.readdirSync(parentDir);
|
|
22
|
-
similarFiles = dirFiles.filter((file) => file.toLowerCase().includes(fileName.toLowerCase().slice(0, 3)));
|
|
23
|
-
}
|
|
24
|
-
throw new ConfigFileNotFoundException(absolutePath, parentDir, parentExists, similarFiles);
|
|
25
|
-
}
|
|
26
|
-
const stat = fs.statSync(absolutePath);
|
|
27
|
-
if (stat.isDirectory()) {
|
|
28
|
-
throw new ConfigFileIsDirectoryException(absolutePath);
|
|
29
|
-
}
|
|
30
|
-
const isTypeScript = absolutePath.endsWith('.ts') || absolutePath.endsWith('.tsx');
|
|
31
|
-
let fileToLoad = absolutePath;
|
|
32
|
-
const parseExceptionBaseMessage = `TypeScript file found but no compiled .js file exists. Please compile the file first (e.g., run 'tsc' or 'npm run build').`;
|
|
33
|
-
if (isTypeScript) {
|
|
34
|
-
const jsPath = absolutePath.replace(/\.tsx?$/, '.js');
|
|
35
|
-
if (fs.existsSync(jsPath)) {
|
|
36
|
-
fileToLoad = jsPath;
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
const srcMatch = absolutePath.match(/^(.*[/\\])src([/\\].+)$/);
|
|
40
|
-
if (srcMatch) {
|
|
41
|
-
const distPath = srcMatch[1] + 'dist' + srcMatch[2].replace(/\.tsx?$/, '.js');
|
|
42
|
-
if (fs.existsSync(distPath)) {
|
|
43
|
-
fileToLoad = distPath;
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
throw new ConfigFileParseException(filePath, `${parseExceptionBaseMessage} Checked: ${jsPath} and ${distPath}`);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
throw new ConfigFileParseException(filePath, `${parseExceptionBaseMessage} Expected compiled file at: ${jsPath}`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
try {
|
|
55
|
-
const fileURL = pathToFileURL(fileToLoad).href;
|
|
56
|
-
const module = await import(fileURL);
|
|
57
|
-
let configInstance;
|
|
58
|
-
if (exportName && exportName !== 'default') {
|
|
59
|
-
configInstance = module[exportName];
|
|
60
|
-
if (!configInstance) {
|
|
61
|
-
const allExports = Object.keys(module).filter((key) => key !== '__esModule');
|
|
62
|
-
const namedExports = allExports.filter((key) => key !== 'default');
|
|
63
|
-
const hasDefault = allExports.includes('default');
|
|
64
|
-
const exportValue = module[exportName];
|
|
65
|
-
throw new ExportNotFoundException(exportName, filePath, namedExports, hasDefault, exportValue);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
else if (exportName === 'default' || !exportName) {
|
|
69
|
-
const defaultExport = module.default;
|
|
70
|
-
if (defaultExport && this.isConfigBoundInstance(defaultExport)) {
|
|
71
|
-
configInstance = defaultExport;
|
|
72
|
-
}
|
|
73
|
-
else if (!exportName) {
|
|
74
|
-
const allExports = Object.entries(module).filter(([key]) => key !== '__esModule');
|
|
75
|
-
const configExports = allExports
|
|
76
|
-
.filter(([key]) => key !== 'default')
|
|
77
|
-
.filter(([, value]) => this.isConfigBoundInstance(value));
|
|
78
|
-
if (configExports.length === 0) {
|
|
79
|
-
const nonConfigExports = allExports
|
|
80
|
-
.filter(([key]) => key !== 'default')
|
|
81
|
-
.filter(([, value]) => !this.isConfigBoundInstance(value))
|
|
82
|
-
.map(([key, value]) => [key, typeof value]);
|
|
83
|
-
const hasDefault = allExports.some(([key]) => key === 'default');
|
|
84
|
-
throw new NoConfigBoundInstancesException(filePath, nonConfigExports, hasDefault);
|
|
85
|
-
}
|
|
86
|
-
if (configExports.length > 1) {
|
|
87
|
-
const exportNames = configExports.map(([key]) => key);
|
|
88
|
-
throw new MultipleConfigBoundInstancesException(filePath, exportNames);
|
|
89
|
-
}
|
|
90
|
-
configInstance = configExports[0][1];
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
configInstance = defaultExport;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
if (!configInstance) {
|
|
97
|
-
const targetExport = exportName || 'default';
|
|
98
|
-
const allExports = Object.keys(module).filter((key) => key !== '__esModule');
|
|
99
|
-
const namedExports = allExports.filter((key) => key !== 'default');
|
|
100
|
-
const hasDefault = allExports.includes('default');
|
|
101
|
-
throw new ExportNotFoundException(targetExport, filePath, namedExports, hasDefault, module[targetExport]);
|
|
102
|
-
}
|
|
103
|
-
if (!this.isConfigBoundInstance(configInstance)) {
|
|
104
|
-
const targetExport = exportName || 'default';
|
|
105
|
-
const exportValue = module[targetExport];
|
|
106
|
-
const valueType = typeof exportValue;
|
|
107
|
-
const valueDetails = exportValue === null
|
|
108
|
-
? 'null'
|
|
109
|
-
: exportValue === undefined
|
|
110
|
-
? 'undefined'
|
|
111
|
-
: valueType === 'object'
|
|
112
|
-
? `${valueType} (missing required properties: name, sections)`
|
|
113
|
-
: valueType;
|
|
114
|
-
throw new InvalidConfigBoundInstanceException(targetExport, filePath, valueDetails);
|
|
115
|
-
}
|
|
116
|
-
return {
|
|
117
|
-
name: configInstance.name,
|
|
118
|
-
sections: configInstance.sections,
|
|
119
|
-
instance: configInstance
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
catch (error) {
|
|
123
|
-
if (error instanceof ConfigLoaderException) {
|
|
124
|
-
throw error;
|
|
125
|
-
}
|
|
126
|
-
if (error instanceof Error) {
|
|
127
|
-
if (error.message.includes('Cannot find module')) {
|
|
128
|
-
const moduleMatch = error.message.match(/Cannot find module ['"]([^'"]+)['"]/);
|
|
129
|
-
const missingModule = moduleMatch ? moduleMatch[1] : 'unknown';
|
|
130
|
-
throw new MissingDependencyException(filePath, missingModule, error.message);
|
|
131
|
-
}
|
|
132
|
-
if (error.message.includes('SyntaxError') ||
|
|
133
|
-
error.message.includes('parse') ||
|
|
134
|
-
error.message.includes('Unexpected token')) {
|
|
135
|
-
throw new ConfigFileParseException(filePath, error.message);
|
|
136
|
-
}
|
|
137
|
-
throw error;
|
|
138
|
-
}
|
|
139
|
-
throw new Error(`Failed to load config file: ${filePath}. Unexpected error: ${String(error)}`);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
async loadConfigs(filePath) {
|
|
143
|
-
const absolutePath = path.resolve(filePath);
|
|
144
|
-
if (!fs.existsSync(absolutePath)) {
|
|
145
|
-
const parentDir = path.dirname(absolutePath);
|
|
146
|
-
const parentExists = fs.existsSync(parentDir);
|
|
147
|
-
let similarFiles;
|
|
148
|
-
if (parentExists) {
|
|
149
|
-
const fileName = path.basename(absolutePath);
|
|
150
|
-
const dirFiles = fs.readdirSync(parentDir);
|
|
151
|
-
similarFiles = dirFiles.filter((file) => file.toLowerCase().includes(fileName.toLowerCase().slice(0, 3)));
|
|
152
|
-
}
|
|
153
|
-
throw new ConfigFileNotFoundException(absolutePath, parentDir, parentExists, similarFiles);
|
|
154
|
-
}
|
|
155
|
-
const stat = fs.statSync(absolutePath);
|
|
156
|
-
if (stat.isDirectory()) {
|
|
157
|
-
throw new ConfigFileIsDirectoryException(absolutePath);
|
|
158
|
-
}
|
|
159
|
-
const isTypeScript = absolutePath.endsWith('.ts') || absolutePath.endsWith('.tsx');
|
|
160
|
-
let fileToLoad = absolutePath;
|
|
161
|
-
if (isTypeScript) {
|
|
162
|
-
const jsPath = absolutePath.replace(/\.tsx?$/, '.js');
|
|
163
|
-
if (fs.existsSync(jsPath)) {
|
|
164
|
-
fileToLoad = jsPath;
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
const srcMatch = absolutePath.match(/^(.*[/\\])src([/\\].+)$/);
|
|
168
|
-
if (srcMatch) {
|
|
169
|
-
const distPath = srcMatch[1] + 'dist' + srcMatch[2].replace(/\.tsx?$/, '.js');
|
|
170
|
-
if (fs.existsSync(distPath)) {
|
|
171
|
-
fileToLoad = distPath;
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
throw new ConfigFileParseException(filePath, `TypeScript file found but no compiled .js file exists. Please compile the file first (e.g., run 'tsc' or 'npm run build'). Checked: ${jsPath} and ${distPath}`);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
throw new ConfigFileParseException(filePath, `TypeScript file found but no compiled .js file exists. Please compile the file first (e.g., run 'tsc' or 'npm run build'). Expected compiled file at: ${jsPath}`);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
try {
|
|
183
|
-
const fileURL = pathToFileURL(fileToLoad).href;
|
|
184
|
-
const module = await import(fileURL);
|
|
185
|
-
const configs = new Map();
|
|
186
|
-
if (module.default && this.isConfigBoundInstance(module.default)) {
|
|
187
|
-
configs.set('default', {
|
|
188
|
-
name: module.default.name,
|
|
189
|
-
sections: module.default.sections,
|
|
190
|
-
instance: module.default
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
for (const [exportName, exportValue] of Object.entries(module)) {
|
|
194
|
-
if (exportName !== '__esModule' &&
|
|
195
|
-
exportName !== 'default' &&
|
|
196
|
-
this.isConfigBoundInstance(exportValue)) {
|
|
197
|
-
const typedValue = exportValue;
|
|
198
|
-
configs.set(exportName, {
|
|
199
|
-
name: typedValue.name,
|
|
200
|
-
sections: typedValue.sections,
|
|
201
|
-
instance: typedValue
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
return configs;
|
|
206
|
-
}
|
|
207
|
-
catch (error) {
|
|
208
|
-
if (error instanceof ConfigLoaderException) {
|
|
209
|
-
throw error;
|
|
210
|
-
}
|
|
211
|
-
if (error instanceof Error) {
|
|
212
|
-
if (error.message.includes('Cannot find module')) {
|
|
213
|
-
const moduleMatch = error.message.match(/Cannot find module ['"]([^'"]+)['"]/);
|
|
214
|
-
const missingModule = moduleMatch ? moduleMatch[1] : 'unknown';
|
|
215
|
-
throw new MissingDependencyException(filePath, missingModule, error.message);
|
|
216
|
-
}
|
|
217
|
-
if (error.message.includes('SyntaxError') ||
|
|
218
|
-
error.message.includes('parse') ||
|
|
219
|
-
error.message.includes('Unexpected token')) {
|
|
220
|
-
throw new ConfigFileParseException(filePath, error.message);
|
|
221
|
-
}
|
|
222
|
-
throw error;
|
|
223
|
-
}
|
|
224
|
-
throw new Error(`Failed to load config file: ${filePath}. Unexpected error: ${String(error)}`);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
isConfigBoundInstance(value) {
|
|
228
|
-
return (value !== null &&
|
|
229
|
-
value !== undefined &&
|
|
230
|
-
typeof value === 'object' &&
|
|
231
|
-
'name' in value &&
|
|
232
|
-
'sections' in value &&
|
|
233
|
-
typeof value.name === 'string' &&
|
|
234
|
-
typeof value.sections === 'object');
|
|
235
|
-
}
|
|
236
|
-
};
|
|
237
|
-
ConfigLoaderService = __decorate([
|
|
238
|
-
Injectable()
|
|
239
|
-
], ConfigLoaderService);
|
|
240
|
-
export { ConfigLoaderService };
|
|
241
|
-
//# sourceMappingURL=config-loader.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.service.js","sourceRoot":"","sources":["../../src/services/config-loader.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-writer.service.d.ts","sourceRoot":"","sources":["../../src/services/file-writer.service.ts"],"names":[],"mappings":"AAIA,qBACa,iBAAiB;IAC5B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAWpD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOpC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;CAOlD"}
|
|
@@ -1,38 +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 * as fs from 'fs';
|
|
9
|
-
import * as path from 'path';
|
|
10
|
-
let FileWriterService = class FileWriterService {
|
|
11
|
-
writeToFile(filePath, content) {
|
|
12
|
-
const absolutePath = path.resolve(filePath);
|
|
13
|
-
const directory = path.dirname(absolutePath);
|
|
14
|
-
if (!fs.existsSync(directory)) {
|
|
15
|
-
fs.mkdirSync(directory, { recursive: true });
|
|
16
|
-
}
|
|
17
|
-
fs.writeFileSync(absolutePath, content, 'utf8');
|
|
18
|
-
}
|
|
19
|
-
writeToStdout(content) {
|
|
20
|
-
process.stdout.write(content);
|
|
21
|
-
if (!content.endsWith('\n')) {
|
|
22
|
-
process.stdout.write('\n');
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
write(content, outputPath) {
|
|
26
|
-
if (outputPath) {
|
|
27
|
-
this.writeToFile(outputPath, content);
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
this.writeToStdout(content);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
FileWriterService = __decorate([
|
|
35
|
-
Injectable()
|
|
36
|
-
], FileWriterService);
|
|
37
|
-
export { FileWriterService };
|
|
38
|
-
//# sourceMappingURL=file-writer.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-writer.service.js","sourceRoot":"","sources":["../../src/services/file-writer.service.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAGtB,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,WAAW,CAAC,QAAgB,EAAE,OAAe;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAE7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,aAAa,CAAC,OAAe;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,UAAmB;QACxC,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF,CAAA;AA1BY,iBAAiB;IAD7B,UAAU,EAAE;GACA,iBAAiB,CA0B7B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-writer.service.spec.d.ts","sourceRoot":"","sources":["../../src/services/file-writer.service.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { Test } from '@nestjs/testing';
|
|
2
|
-
import { FileWriterService } from './file-writer.service.js';
|
|
3
|
-
import { describe, beforeEach, afterEach, it, expect, jest } from '@jest/globals';
|
|
4
|
-
import * as fs from 'fs';
|
|
5
|
-
import * as path from 'path';
|
|
6
|
-
import * as os from 'os';
|
|
7
|
-
describe('FileWriterService', () => {
|
|
8
|
-
let service;
|
|
9
|
-
let tempDir;
|
|
10
|
-
beforeEach(async () => {
|
|
11
|
-
const module = await Test.createTestingModule({
|
|
12
|
-
providers: [FileWriterService]
|
|
13
|
-
}).compile();
|
|
14
|
-
service = module.get(FileWriterService);
|
|
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
|
-
it('should be defined', () => {
|
|
23
|
-
expect(service).toBeDefined();
|
|
24
|
-
});
|
|
25
|
-
describe('writeToFile', () => {
|
|
26
|
-
it('should write content to file', () => {
|
|
27
|
-
const filePath = path.join(tempDir, 'test.txt');
|
|
28
|
-
const content = 'Hello, World!';
|
|
29
|
-
service.writeToFile(filePath, content);
|
|
30
|
-
expect(fs.existsSync(filePath)).toBe(true);
|
|
31
|
-
const writtenContent = fs.readFileSync(filePath, 'utf8');
|
|
32
|
-
expect(writtenContent).toBe(content);
|
|
33
|
-
});
|
|
34
|
-
it('should create directories if they do not exist', () => {
|
|
35
|
-
const filePath = path.join(tempDir, 'nested', 'dir', 'test.txt');
|
|
36
|
-
const content = 'Test content';
|
|
37
|
-
service.writeToFile(filePath, content);
|
|
38
|
-
expect(fs.existsSync(filePath)).toBe(true);
|
|
39
|
-
const writtenContent = fs.readFileSync(filePath, 'utf8');
|
|
40
|
-
expect(writtenContent).toBe(content);
|
|
41
|
-
});
|
|
42
|
-
it('should overwrite existing file', () => {
|
|
43
|
-
const filePath = path.join(tempDir, 'test.txt');
|
|
44
|
-
service.writeToFile(filePath, 'First content');
|
|
45
|
-
service.writeToFile(filePath, 'Second content');
|
|
46
|
-
const writtenContent = fs.readFileSync(filePath, 'utf8');
|
|
47
|
-
expect(writtenContent).toBe('Second content');
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
describe('writeToStdout', () => {
|
|
51
|
-
let stdoutWriteSpy;
|
|
52
|
-
beforeEach(() => {
|
|
53
|
-
stdoutWriteSpy = jest
|
|
54
|
-
.spyOn(process.stdout, 'write')
|
|
55
|
-
.mockImplementation(() => true);
|
|
56
|
-
});
|
|
57
|
-
afterEach(() => {
|
|
58
|
-
stdoutWriteSpy.mockRestore();
|
|
59
|
-
});
|
|
60
|
-
it('should write content to stdout', () => {
|
|
61
|
-
const content = 'Test output';
|
|
62
|
-
service.writeToStdout(content);
|
|
63
|
-
expect(stdoutWriteSpy).toHaveBeenCalledWith(content);
|
|
64
|
-
});
|
|
65
|
-
it('should add newline if content does not end with one', () => {
|
|
66
|
-
const content = 'No newline';
|
|
67
|
-
service.writeToStdout(content);
|
|
68
|
-
expect(stdoutWriteSpy).toHaveBeenCalledWith(content);
|
|
69
|
-
expect(stdoutWriteSpy).toHaveBeenCalledWith('\n');
|
|
70
|
-
});
|
|
71
|
-
it('should not add extra newline if content already ends with one', () => {
|
|
72
|
-
const content = 'With newline\n';
|
|
73
|
-
service.writeToStdout(content);
|
|
74
|
-
expect(stdoutWriteSpy).toHaveBeenCalledWith(content);
|
|
75
|
-
expect(stdoutWriteSpy).toHaveBeenCalledTimes(1);
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
describe('write', () => {
|
|
79
|
-
it('should write to file when output path is provided', () => {
|
|
80
|
-
const filePath = path.join(tempDir, 'output.txt');
|
|
81
|
-
const content = 'File output';
|
|
82
|
-
service.write(content, filePath);
|
|
83
|
-
expect(fs.existsSync(filePath)).toBe(true);
|
|
84
|
-
const writtenContent = fs.readFileSync(filePath, 'utf8');
|
|
85
|
-
expect(writtenContent).toBe(content);
|
|
86
|
-
});
|
|
87
|
-
it('should write to stdout when output path is not provided', () => {
|
|
88
|
-
const stdoutWriteSpy = jest
|
|
89
|
-
.spyOn(process.stdout, 'write')
|
|
90
|
-
.mockImplementation(() => true);
|
|
91
|
-
const content = 'Stdout output';
|
|
92
|
-
service.write(content);
|
|
93
|
-
expect(stdoutWriteSpy).toHaveBeenCalledWith(content);
|
|
94
|
-
stdoutWriteSpy.mockRestore();
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
//# sourceMappingURL=file-writer.service.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-writer.service.spec.js","sourceRoot":"","sources":["../../src/services/file-writer.service.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { ConfigBound, TypedConfigBound, ConfigSchema } from '@config-bound/config-bound';
|
|
2
|
-
import { Section } from '@config-bound/config-bound/section';
|
|
3
|
-
export type ExportFormat = 'json' | 'yaml' | 'env';
|
|
4
|
-
export interface ExportSchemaOptions {
|
|
5
|
-
format: ExportFormat;
|
|
6
|
-
includeOmitted?: boolean;
|
|
7
|
-
pretty?: boolean;
|
|
8
|
-
}
|
|
9
|
-
export declare class SchemaExportService {
|
|
10
|
-
exportToString(configName: string, sections: Section[], configInstance: ConfigBound | TypedConfigBound<ConfigSchema>, options: ExportSchemaOptions): string;
|
|
11
|
-
private extractEnvVarPrefix;
|
|
12
|
-
getFileExtension(format: ExportFormat): string;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=schema-export.service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema-export.service.d.ts","sourceRoot":"","sources":["../../src/services/schema-export.service.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,YAAY,EACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAG7D,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBACa,mBAAmB;IAC9B,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,EAAE,EACnB,cAAc,EAAE,WAAW,GAAG,gBAAgB,CAAC,YAAY,CAAC,EAC5D,OAAO,EAAE,mBAAmB,GAC3B,MAAM;IAuBT,OAAO,CAAC,mBAAmB;IAmB3B,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;CAY/C"}
|
|
@@ -1,58 +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 { exportSchema, formatAsJSON, formatAsYAML, formatAsEnvExample } from '@config-bound/schema-export';
|
|
9
|
-
import { EnvVarBind } from '@config-bound/config-bound/bind/binds/envVar';
|
|
10
|
-
let SchemaExportService = class SchemaExportService {
|
|
11
|
-
exportToString(configName, sections, configInstance, options) {
|
|
12
|
-
const includeOmitted = options.includeOmitted || false;
|
|
13
|
-
const schema = exportSchema(configName, sections, includeOmitted);
|
|
14
|
-
switch (options.format) {
|
|
15
|
-
case 'json':
|
|
16
|
-
return formatAsJSON(schema, options.pretty !== false);
|
|
17
|
-
case 'yaml':
|
|
18
|
-
return formatAsYAML(schema);
|
|
19
|
-
case 'env': {
|
|
20
|
-
const prefix = this.extractEnvVarPrefix(configInstance);
|
|
21
|
-
return formatAsEnvExample(schema, prefix);
|
|
22
|
-
}
|
|
23
|
-
default:
|
|
24
|
-
throw new Error(`Unsupported format: ${options.format}`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
extractEnvVarPrefix(configInstance) {
|
|
28
|
-
if (!configInstance || !configInstance.binds) {
|
|
29
|
-
return undefined;
|
|
30
|
-
}
|
|
31
|
-
for (const bind of configInstance.binds) {
|
|
32
|
-
if (bind instanceof EnvVarBind) {
|
|
33
|
-
const envVarBind = bind;
|
|
34
|
-
if (envVarBind.envVarPrefix) {
|
|
35
|
-
return envVarBind.envVarPrefix;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return undefined;
|
|
40
|
-
}
|
|
41
|
-
getFileExtension(format) {
|
|
42
|
-
switch (format) {
|
|
43
|
-
case 'json':
|
|
44
|
-
return '.json';
|
|
45
|
-
case 'yaml':
|
|
46
|
-
return '.yaml';
|
|
47
|
-
case 'env':
|
|
48
|
-
return '.env.example';
|
|
49
|
-
default:
|
|
50
|
-
return '';
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
SchemaExportService = __decorate([
|
|
55
|
-
Injectable()
|
|
56
|
-
], SchemaExportService);
|
|
57
|
-
export { SchemaExportService };
|
|
58
|
-
//# sourceMappingURL=schema-export.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema-export.service.js","sourceRoot":"","sources":["../../src/services/schema-export.service.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;AAOrC,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAWnE,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B,cAAc,CACZ,UAAkB,EAClB,QAAmB,EACnB,cAA4D,EAC5D,OAA4B;QAE5B,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;QAEvD,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QAElE,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;YACvB,KAAK,MAAM;gBACT,OAAO,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;YAExD,KAAK,MAAM;gBACT,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;YAE9B,KAAK,KAAK,CAAC,CAAC,CAAC;gBAEX,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;gBACxD,OAAO,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5C,CAAC;YAED;gBACE,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAEO,mBAAmB,CACzB,cAA4D;QAE5D,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAC7C,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,KAAK,EAAE,CAAC;YACxC,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG,IAAkB,CAAC;gBACtC,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;oBAC5B,OAAO,UAAU,CAAC,YAAY,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,gBAAgB,CAAC,MAAoB;QACnC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,OAAO,CAAC;YACjB,KAAK,MAAM;gBACT,OAAO,OAAO,CAAC;YACjB,KAAK,KAAK;gBACR,OAAO,cAAc,CAAC;YACxB;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAA;AA5DY,mBAAmB;IAD/B,UAAU,EAAE;GACA,mBAAmB,CA4D/B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema-export.service.spec.d.ts","sourceRoot":"","sources":["../../src/services/schema-export.service.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { Test } from '@nestjs/testing';
|
|
2
|
-
import { SchemaExportService } from './schema-export.service.js';
|
|
3
|
-
import { describe, beforeEach, it, expect } from '@jest/globals';
|
|
4
|
-
import { ConfigBound } from '@config-bound/config-bound';
|
|
5
|
-
import { Section } from '@config-bound/config-bound/section';
|
|
6
|
-
import { Element } from '@config-bound/config-bound/element';
|
|
7
|
-
import Joi from 'joi';
|
|
8
|
-
describe('SchemaExportService', () => {
|
|
9
|
-
let service;
|
|
10
|
-
let mockConfigInstance;
|
|
11
|
-
let mockSections;
|
|
12
|
-
beforeEach(async () => {
|
|
13
|
-
const module = await Test.createTestingModule({
|
|
14
|
-
providers: [SchemaExportService]
|
|
15
|
-
}).compile();
|
|
16
|
-
service = module.get(SchemaExportService);
|
|
17
|
-
const hostElement = new Element('host', 'Database host', 'localhost', undefined, false, false, Joi.string());
|
|
18
|
-
const portElement = new Element('port', 'Database port', 5432, undefined, false, false, Joi.number());
|
|
19
|
-
const databaseSection = new Section('database', [hostElement, portElement], 'Database configuration');
|
|
20
|
-
mockSections = [databaseSection];
|
|
21
|
-
mockConfigInstance = new ConfigBound('TestConfig', [], [], undefined);
|
|
22
|
-
});
|
|
23
|
-
it('should be defined', () => {
|
|
24
|
-
expect(service).toBeDefined();
|
|
25
|
-
});
|
|
26
|
-
describe('exportToString', () => {
|
|
27
|
-
it('should export to JSON format', () => {
|
|
28
|
-
const result = service.exportToString('TestConfig', mockSections, mockConfigInstance, {
|
|
29
|
-
format: 'json',
|
|
30
|
-
pretty: true
|
|
31
|
-
});
|
|
32
|
-
expect(result).toContain('"name": "TestConfig"');
|
|
33
|
-
expect(result).toContain('"database"');
|
|
34
|
-
const parsed = JSON.parse(result);
|
|
35
|
-
expect(parsed.name).toBe('TestConfig');
|
|
36
|
-
});
|
|
37
|
-
it('should export to YAML format', () => {
|
|
38
|
-
const result = service.exportToString('TestConfig', mockSections, mockConfigInstance, {
|
|
39
|
-
format: 'yaml'
|
|
40
|
-
});
|
|
41
|
-
expect(result).toContain('name: TestConfig');
|
|
42
|
-
expect(result).toContain('- name: database');
|
|
43
|
-
});
|
|
44
|
-
it('should export to env format', () => {
|
|
45
|
-
const result = service.exportToString('TestConfig', mockSections, mockConfigInstance, {
|
|
46
|
-
format: 'env'
|
|
47
|
-
});
|
|
48
|
-
expect(result).toContain('DATABASE_HOST=');
|
|
49
|
-
expect(result).toContain('DATABASE_PORT=');
|
|
50
|
-
});
|
|
51
|
-
it('should throw error for unsupported format', () => {
|
|
52
|
-
expect(() => service.exportToString('TestConfig', mockSections, mockConfigInstance, {
|
|
53
|
-
format: 'xml'
|
|
54
|
-
})).toThrow('Unsupported format: xml');
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
describe('getFileExtension', () => {
|
|
58
|
-
it('should return correct extension for json', () => {
|
|
59
|
-
expect(service.getFileExtension('json')).toBe('.json');
|
|
60
|
-
});
|
|
61
|
-
it('should return correct extension for yaml', () => {
|
|
62
|
-
expect(service.getFileExtension('yaml')).toBe('.yaml');
|
|
63
|
-
});
|
|
64
|
-
it('should return correct extension for env', () => {
|
|
65
|
-
expect(service.getFileExtension('env')).toBe('.env.example');
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
//# sourceMappingURL=schema-export.service.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema-export.service.spec.js","sourceRoot":"","sources":["../../src/services/schema-export.service.spec.ts"],"names":[],"mappings":"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"}
|