@zyno-io/dk-server-foundation 26.225.339 → 26.228.2231
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/resources/proto/generated/devconsole/devconsole.js +1 -1
- package/dist/src/cli/dksf-create-app.d.ts +3 -0
- package/dist/src/cli/dksf-create-app.d.ts.map +1 -0
- package/dist/src/cli/dksf-create-app.js +105 -0
- package/dist/src/cli/dksf-create-app.js.map +1 -0
- package/dist/src/cli/dksf.d.ts +3 -0
- package/dist/src/cli/dksf.d.ts.map +1 -0
- package/dist/src/cli/dksf.js +17 -0
- package/dist/src/cli/dksf.js.map +1 -0
- package/dist/src/services/logger.d.ts.map +1 -1
- package/dist/src/services/logger.js +1 -2
- package/dist/src/services/logger.js.map +1 -1
- package/docs/content/README-DEV.md +1 -1
- package/docs/content/cli.md +39 -0
- package/docs/content/devconsole.md +1 -1
- package/docs/content/getting-started.md +15 -1
- package/docs/scripts/README-SCREENSHOTS.md +4 -4
- package/docs/scripts/capture-devconsole-screenshots.js +1 -1
- package/package.json +5 -2
- package/src/cli/dksf-create-app.ts +113 -0
- package/src/cli/dksf.ts +16 -0
- package/src/services/logger.ts +1 -3
- package/template-app/.env.development +8 -0
- package/template-app/package.json.tmpl +29 -0
- package/template-app/src/app.ts +13 -0
- package/template-app/src/config.ts +6 -0
- package/template-app/src/controllers/Example.controller.ts +18 -0
- package/template-app/src/database.ts +5 -0
- package/template-app/src/entities/Example.entity.ts +9 -0
- package/template-app/src/index.ts +9 -0
- package/template-app/src/migrations/.gitkeep +0 -0
- package/template-app/src/services/Example.service.ts +21 -0
- package/template-app/tsconfig.json +20 -0
package/README.md
CHANGED
|
@@ -429,7 +429,7 @@ DevConsole is localhost-only and communicates over SRPC/WebSocket for real-time
|
|
|
429
429
|
A demo app showcasing all features is included:
|
|
430
430
|
|
|
431
431
|
```bash
|
|
432
|
-
yarn
|
|
432
|
+
yarn devconsole-demo
|
|
433
433
|
# then open http://localhost:3000/_devconsole/
|
|
434
434
|
```
|
|
435
435
|
|
|
@@ -14,7 +14,7 @@ function __assignType(fn, args) {
|
|
|
14
14
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
15
15
|
// versions:
|
|
16
16
|
// protoc-gen-ts_proto v2.11.2
|
|
17
|
-
// protoc
|
|
17
|
+
// protoc v7.34.0
|
|
18
18
|
// source: devconsole.proto
|
|
19
19
|
/* eslint-disable */
|
|
20
20
|
const wire_1 = require("@bufbuild/protobuf/wire");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dksf-create-app.d.ts","sourceRoot":"","sources":["../../../src/cli/dksf-create-app.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const __ΩRecord = ['K', 'T', 'Record', 'l\'e#"Rb!b"Pde"!N#!w#y'];
|
|
6
|
+
const fs = tslib_1.__importStar(require("fs"));
|
|
7
|
+
const path = tslib_1.__importStar(require("path"));
|
|
8
|
+
function main() {
|
|
9
|
+
const args = process.argv.slice(2);
|
|
10
|
+
if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
|
|
11
|
+
printUsage();
|
|
12
|
+
process.exit(args.length === 0 ? 1 : 0);
|
|
13
|
+
}
|
|
14
|
+
const packageName = args[0];
|
|
15
|
+
const unscopedName = packageName.includes('/') ? packageName.split('/').pop() : packageName;
|
|
16
|
+
const targetDir = args[1] || unscopedName;
|
|
17
|
+
const absoluteTarget = path.resolve(targetDir);
|
|
18
|
+
if (!/^(@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(packageName)) {
|
|
19
|
+
console.error(`Error: Invalid package name: ${packageName}`);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
if (fs.existsSync(absoluteTarget)) {
|
|
23
|
+
console.error(`Error: Directory already exists: ${absoluteTarget}`);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
const packageDir = __dirname.substring(0, __dirname.lastIndexOf('dist') - 1);
|
|
27
|
+
const templateDir = path.join(packageDir, 'template-app');
|
|
28
|
+
if (!fs.existsSync(templateDir)) {
|
|
29
|
+
console.error('Error: Template directory not found. Ensure @zyno-io/dk-server-foundation is properly installed.');
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
const dbName = unscopedName.replace(/[^a-z0-9]/g, '_');
|
|
33
|
+
const redisPrefix = unscopedName.replace(/[-_.]/g, '');
|
|
34
|
+
const dksfVersion = getDksfVersion(packageDir);
|
|
35
|
+
const replacements = {
|
|
36
|
+
'%%PACKAGE_NAME%%': packageName,
|
|
37
|
+
'%%APP_DB_NAME%%': dbName,
|
|
38
|
+
'%%APP_REDIS_PREFIX%%': redisPrefix,
|
|
39
|
+
'%%DKSF_VERSION%%': dksfVersion
|
|
40
|
+
};
|
|
41
|
+
console.log(`Creating ${packageName} in ${absoluteTarget}...`);
|
|
42
|
+
console.log();
|
|
43
|
+
copyTemplate(templateDir, absoluteTarget, replacements);
|
|
44
|
+
console.log('Done! Next steps:');
|
|
45
|
+
console.log();
|
|
46
|
+
console.log(` cd ${targetDir}`);
|
|
47
|
+
console.log(' yarn install # or: npm install');
|
|
48
|
+
console.log();
|
|
49
|
+
console.log(' # Configure .env.development with your database credentials');
|
|
50
|
+
console.log(' # Then start developing:');
|
|
51
|
+
console.log(' yarn dev');
|
|
52
|
+
console.log();
|
|
53
|
+
}
|
|
54
|
+
main.__type = ['main', 'P"/!'];
|
|
55
|
+
function printUsage() {
|
|
56
|
+
console.log('Usage: dksf-create-app <package-name> [path]');
|
|
57
|
+
console.log();
|
|
58
|
+
console.log('Arguments:');
|
|
59
|
+
console.log(' <package-name> npm package name (e.g. @myorg/my-api or my-api)');
|
|
60
|
+
console.log(' [path] Output directory (defaults to the unscoped package name)');
|
|
61
|
+
console.log();
|
|
62
|
+
console.log('Examples:');
|
|
63
|
+
console.log(' npx @zyno-io/dk-server-foundation create-app @myorg/my-api');
|
|
64
|
+
console.log(' npx @zyno-io/dk-server-foundation create-app my-api ./custom-path');
|
|
65
|
+
console.log(' dksf-create-app @myorg/my-api');
|
|
66
|
+
console.log();
|
|
67
|
+
}
|
|
68
|
+
printUsage.__type = ['printUsage', 'P"/!'];
|
|
69
|
+
function getDksfVersion(packageDir) {
|
|
70
|
+
try {
|
|
71
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(packageDir, 'package.json'), 'utf-8'));
|
|
72
|
+
if (pkg.version === '0.0.0-dev')
|
|
73
|
+
return '*';
|
|
74
|
+
return `^${pkg.version}`;
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return '*';
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
getDksfVersion.__type = ['packageDir', 'getDksfVersion', 'P&2!&/"'];
|
|
81
|
+
function copyTemplate(src, dest, replacements) {
|
|
82
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
83
|
+
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
84
|
+
const srcPath = path.join(src, entry.name);
|
|
85
|
+
if (entry.isDirectory()) {
|
|
86
|
+
if (entry.name === 'dist')
|
|
87
|
+
continue;
|
|
88
|
+
copyTemplate(srcPath, path.join(dest, entry.name), replacements);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
// Rename .tmpl files (e.g. package.json.tmpl -> package.json)
|
|
92
|
+
let destName = entry.name;
|
|
93
|
+
if (destName.endsWith('.tmpl')) {
|
|
94
|
+
destName = destName.slice(0, -5);
|
|
95
|
+
}
|
|
96
|
+
let content = fs.readFileSync(srcPath, 'utf-8');
|
|
97
|
+
for (const [key, value] of Object.entries(replacements)) {
|
|
98
|
+
content = content.split(key).join(value);
|
|
99
|
+
}
|
|
100
|
+
fs.writeFileSync(path.join(dest, destName), content);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
copyTemplate.__type = ['src', 'dest', () => __ΩRecord, 'replacements', 'copyTemplate', 'P&2!&2"&&o##2$"/%'];
|
|
104
|
+
main();
|
|
105
|
+
//# sourceMappingURL=dksf-create-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dksf-create-app.js","sourceRoot":"","sources":["../../../src/cli/dksf-create-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dksf.d.ts","sourceRoot":"","sources":["../../../src/cli/dksf.ts"],"names":[],"mappings":";AAEA,QAAA,MAAO,GAAG,UAAK,IAAI,UAAyB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
const [cmd, ...rest] = process.argv.slice(2);
|
|
4
|
+
if (cmd === 'create-app') {
|
|
5
|
+
// Shift argv so dksf-create-app sees the right arguments
|
|
6
|
+
process.argv = [process.argv[0], process.argv[1], ...rest];
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
8
|
+
require('./dksf-create-app');
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
console.error('Usage: npx @zyno-io/dk-server-foundation <command>');
|
|
12
|
+
console.error();
|
|
13
|
+
console.error('Commands:');
|
|
14
|
+
console.error(' create-app <package-name> [path] Scaffold a new application');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=dksf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dksf.js","sourceRoot":"","sources":["../../../src/cli/dksf.ts"],"names":[],"mappings":";;AAEA,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE7C,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;IACvB,yDAAyD;IACzD,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3D,iEAAiE;IACjE,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACjC,CAAC;KAAM,CAAC;IACJ,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACpE,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/services/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAoB,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAWlG,eAAO,MAAM,mBAAmB,SAAsD,CAAC;AACvF,eAAO,MAAM,mBAAmB,SAA2D,CAAC;AAC5F,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAAoB,CAAC;AAC5D,eAAO,MAAM,mBAAmB,eAA0B,CAAC;AAE3D,QAAA,MAAM,eAAe;;;;;;;;;CASX,CAAC;AACX,KAAK,QAAQ,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAiCvE,eAAO,MAAM,UAAU,uCAatB,CAAC;AAEF,qBAAa,cAAe,SAAQ,MAAM;IACtC,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAE9B,YAAY,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAa9C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,cAAc;IA8BzD,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,OAAO;IAmDlE,KAAK,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI;IAK9B,eAAe;;;IAqBf,WAAW,CAAC,OAAO,EAAE,MAAM;IAI3B,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO;IAK3B,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,KAAK,GAAG,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI;CAUxH;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/services/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAoB,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAWlG,eAAO,MAAM,mBAAmB,SAAsD,CAAC;AACvF,eAAO,MAAM,mBAAmB,SAA2D,CAAC;AAC5F,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAAoB,CAAC;AAC5D,eAAO,MAAM,mBAAmB,eAA0B,CAAC;AAE3D,QAAA,MAAM,eAAe;;;;;;;;;CASX,CAAC;AACX,KAAK,QAAQ,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAiCvE,eAAO,MAAM,UAAU,uCAatB,CAAC;AAEF,qBAAa,cAAe,SAAQ,MAAM;IACtC,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAE9B,YAAY,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAa9C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,cAAc;IA8BzD,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,OAAO;IAmDlE,KAAK,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI;IAK9B,eAAe;;;IAqBf,WAAW,CAAC,OAAO,EAAE,MAAM;IAI3B,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO;IAK3B,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,KAAK,GAAG,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI;CAUxH;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,kBAI5F;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAWpF"}
|
|
@@ -209,8 +209,7 @@ ExtendedLogger.__type = [() => logger_1.Logger, () => __ΩLogData, 'scopeData',
|
|
|
209
209
|
function createLogger(subject, defaultData) {
|
|
210
210
|
const name = typeof subject === 'string' ? subject : subject.constructor.name;
|
|
211
211
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
212
|
-
return (resolver_1.r.Ω = [[() => ExtendedLogger, 'P7!']], (0, resolver_1.r)(logger_1.Logger)).scoped(name)
|
|
213
|
-
.setScopeData(defaultData);
|
|
212
|
+
return (resolver_1.r.Ω = [[() => ExtendedLogger, 'P7!']], (0, resolver_1.r)(logger_1.Logger)).scoped(name, defaultData);
|
|
214
213
|
}
|
|
215
214
|
createLogger.__type = [() => __ΩInstanceType, () => __ΩClassType, 'subject', () => __ΩLogData, 'defaultData', 'createLogger', 'PP&n"o!"J2#n$2%8"/&'];
|
|
216
215
|
function withLoggerContext(data, fn) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/services/logger.ts"],"names":[],"mappings":";;;AA2NA,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/services/logger.ts"],"names":[],"mappings":"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"}
|
package/docs/content/cli.md
CHANGED
|
@@ -130,6 +130,45 @@ node app.js worker:queue SendEmailJob '{"to":"user@example.com","subject":"Hello
|
|
|
130
130
|
|
|
131
131
|
These are installed as bin scripts by the package:
|
|
132
132
|
|
|
133
|
+
### `dksf-create-app`
|
|
134
|
+
|
|
135
|
+
Scaffold a new application from the built-in template:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# Using npx (no install required)
|
|
139
|
+
npx @zyno-io/dk-server-foundation create-app <package-name> [path]
|
|
140
|
+
|
|
141
|
+
# Or directly if dk-server-foundation is installed
|
|
142
|
+
dksf-create-app <package-name> [path]
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
| Argument | Description |
|
|
146
|
+
| ---------------- | ---------------------------------------------------------------- |
|
|
147
|
+
| `<package-name>` | npm package name (e.g. `@myorg/my-api` or `my-api`) |
|
|
148
|
+
| `[path]` | Output directory (defaults to the unscoped package name) |
|
|
149
|
+
|
|
150
|
+
The generated project includes:
|
|
151
|
+
|
|
152
|
+
- OTEL telemetry setup
|
|
153
|
+
- A single controller, service, and database entity
|
|
154
|
+
- MySQL database configuration
|
|
155
|
+
- TypeScript config with Deepkit reflection enabled
|
|
156
|
+
- Development environment defaults (`.env.development`)
|
|
157
|
+
- Standard scripts: `dev`, `build`, `test`, `migrate`, `migrate:create`, `migrate:reset`
|
|
158
|
+
|
|
159
|
+
Examples:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# Creates ./my-api/ with package name "my-api"
|
|
163
|
+
npx @zyno-io/dk-server-foundation create-app my-api
|
|
164
|
+
|
|
165
|
+
# Creates ./my-api/ with package name "@myorg/my-api"
|
|
166
|
+
npx @zyno-io/dk-server-foundation create-app @myorg/my-api
|
|
167
|
+
|
|
168
|
+
# Creates ./custom-path/ with package name "@myorg/my-api"
|
|
169
|
+
npx @zyno-io/dk-server-foundation create-app @myorg/my-api ./custom-path
|
|
170
|
+
```
|
|
171
|
+
|
|
133
172
|
### `dksf-dev`
|
|
134
173
|
|
|
135
174
|
All-in-one development workflow tool. Subcommands for cleaning, building, running dev servers, migrations, tests, and REPL.
|
|
@@ -143,7 +143,7 @@ In development, the frontend can be run standalone with `cd devconsole && npm ru
|
|
|
143
143
|
A demo application is included to showcase all DevConsole features:
|
|
144
144
|
|
|
145
145
|
```bash
|
|
146
|
-
yarn
|
|
146
|
+
yarn devconsole-demo
|
|
147
147
|
```
|
|
148
148
|
|
|
149
149
|
This starts a server at `http://localhost:3000` with auto-generated HTTP traffic, SRPC client/server chatter, worker jobs, and mutex contention. Open `http://localhost:3000/_devconsole/` to see it all in action.
|
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
# Getting Started
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## Quick Start
|
|
4
|
+
|
|
5
|
+
Scaffold a new project with a single command:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx @zyno-io/dk-server-foundation create-app @myorg/my-api
|
|
9
|
+
cd my-api
|
|
10
|
+
yarn install
|
|
11
|
+
# Configure .env.development with your database credentials
|
|
12
|
+
yarn dev
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
This generates a ready-to-run project with OTEL telemetry, a controller, a service, a database entity, and all config files. See [CLI Tools](./cli.md#dksf-create-app) for details.
|
|
16
|
+
|
|
17
|
+
## Manual Installation
|
|
4
18
|
|
|
5
19
|
```bash
|
|
6
20
|
npm install @zyno-io/dk-server-foundation
|
|
@@ -22,10 +22,10 @@ This directory contains a script to capture DevConsole screenshots for documenta
|
|
|
22
22
|
|
|
23
23
|
### Step 1: Start the Demo Application
|
|
24
24
|
|
|
25
|
-
In one terminal window, start the
|
|
25
|
+
In one terminal window, start the devconsole-demo:
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
yarn
|
|
28
|
+
yarn devconsole-demo
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
Wait for the output to show:
|
|
@@ -84,9 +84,9 @@ The script captures all DevConsole views in navigation order:
|
|
|
84
84
|
|
|
85
85
|
### "Connection refused" or "Navigation timeout"
|
|
86
86
|
|
|
87
|
-
Make sure the
|
|
87
|
+
Make sure the devconsole-demo is running:
|
|
88
88
|
```bash
|
|
89
|
-
yarn
|
|
89
|
+
yarn devconsole-demo
|
|
90
90
|
```
|
|
91
91
|
|
|
92
92
|
Check that you can access http://localhost:3000/_devconsole in your browser.
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* Prerequisites:
|
|
11
11
|
* 1. Install dependencies: cd docs && yarn install
|
|
12
12
|
* 2. Install browsers: cd docs && npx playwright install chromium
|
|
13
|
-
* 3. Start the
|
|
13
|
+
* 3. Start the devconsole-demo: yarn devconsole-demo
|
|
14
14
|
* 4. Wait for the server to be ready (check console output)
|
|
15
15
|
*
|
|
16
16
|
* Usage:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zyno-io/dk-server-foundation",
|
|
3
|
-
"version": "26.
|
|
3
|
+
"version": "26.228.2231",
|
|
4
4
|
"description": "TypeScript server foundation built on the Deepkit framework",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
"url": "https://github.com/zyno-io/dk-server-foundation/issues"
|
|
12
12
|
},
|
|
13
13
|
"bin": {
|
|
14
|
+
"dk-server-foundation": "./dist/src/cli/dksf.js",
|
|
15
|
+
"dksf-create-app": "./dist/src/cli/dksf-create-app.js",
|
|
14
16
|
"dksf-dev": "./dist/src/cli/dksf-dev.js",
|
|
15
17
|
"dksf-gen-proto": "./dist/src/cli/dksf-gen-proto.js",
|
|
16
18
|
"dksf-install": "./dist/src/cli/dksf-install.js",
|
|
@@ -27,7 +29,7 @@
|
|
|
27
29
|
"postinstall": "dksf-install || yarn postinstall:alt",
|
|
28
30
|
"postinstall:alt": "patch-package && deepkit-type-install",
|
|
29
31
|
"testapp": "yarn clean && tsc -p tsconfig.testapp.json && node dist/testapp/bootstrap server:start",
|
|
30
|
-
"
|
|
32
|
+
"devconsole-demo": "yarn build:devconsole && dksf-dev run -p tsconfig.devconsole-demo.json dist/devconsole-demo/bootstrap",
|
|
31
33
|
"gen:proto": "ts-node src/cli/dksf-gen-proto.ts resources/proto/test.proto resources/proto/generated/test && ts-node src/cli/dksf-gen-proto.ts resources/proto/devconsole.proto resources/proto/generated/devconsole"
|
|
32
34
|
},
|
|
33
35
|
"author": {
|
|
@@ -129,6 +131,7 @@
|
|
|
129
131
|
"docs/",
|
|
130
132
|
"patches/",
|
|
131
133
|
"src/",
|
|
134
|
+
"template-app/",
|
|
132
135
|
"types.d.ts",
|
|
133
136
|
"!**/*.tsbuildinfo",
|
|
134
137
|
"!**/CLAUDE.md",
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
|
|
6
|
+
function main() {
|
|
7
|
+
const args = process.argv.slice(2);
|
|
8
|
+
|
|
9
|
+
if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
|
|
10
|
+
printUsage();
|
|
11
|
+
process.exit(args.length === 0 ? 1 : 0);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const packageName = args[0];
|
|
15
|
+
const unscopedName = packageName.includes('/') ? packageName.split('/').pop()! : packageName;
|
|
16
|
+
const targetDir = args[1] || unscopedName;
|
|
17
|
+
const absoluteTarget = path.resolve(targetDir);
|
|
18
|
+
|
|
19
|
+
if (!/^(@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(packageName)) {
|
|
20
|
+
console.error(`Error: Invalid package name: ${packageName}`);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (fs.existsSync(absoluteTarget)) {
|
|
25
|
+
console.error(`Error: Directory already exists: ${absoluteTarget}`);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const packageDir = __dirname.substring(0, __dirname.lastIndexOf('dist') - 1);
|
|
30
|
+
const templateDir = path.join(packageDir, 'template-app');
|
|
31
|
+
if (!fs.existsSync(templateDir)) {
|
|
32
|
+
console.error('Error: Template directory not found. Ensure @zyno-io/dk-server-foundation is properly installed.');
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const dbName = unscopedName.replace(/[^a-z0-9]/g, '_');
|
|
37
|
+
const redisPrefix = unscopedName.replace(/[-_.]/g, '');
|
|
38
|
+
const dksfVersion = getDksfVersion(packageDir);
|
|
39
|
+
|
|
40
|
+
const replacements: Record<string, string> = {
|
|
41
|
+
'%%PACKAGE_NAME%%': packageName,
|
|
42
|
+
'%%APP_DB_NAME%%': dbName,
|
|
43
|
+
'%%APP_REDIS_PREFIX%%': redisPrefix,
|
|
44
|
+
'%%DKSF_VERSION%%': dksfVersion
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
console.log(`Creating ${packageName} in ${absoluteTarget}...`);
|
|
48
|
+
console.log();
|
|
49
|
+
|
|
50
|
+
copyTemplate(templateDir, absoluteTarget, replacements);
|
|
51
|
+
|
|
52
|
+
console.log('Done! Next steps:');
|
|
53
|
+
console.log();
|
|
54
|
+
console.log(` cd ${targetDir}`);
|
|
55
|
+
console.log(' yarn install # or: npm install');
|
|
56
|
+
console.log();
|
|
57
|
+
console.log(' # Configure .env.development with your database credentials');
|
|
58
|
+
console.log(' # Then start developing:');
|
|
59
|
+
console.log(' yarn dev');
|
|
60
|
+
console.log();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function printUsage() {
|
|
64
|
+
console.log('Usage: dksf-create-app <package-name> [path]');
|
|
65
|
+
console.log();
|
|
66
|
+
console.log('Arguments:');
|
|
67
|
+
console.log(' <package-name> npm package name (e.g. @myorg/my-api or my-api)');
|
|
68
|
+
console.log(' [path] Output directory (defaults to the unscoped package name)');
|
|
69
|
+
console.log();
|
|
70
|
+
console.log('Examples:');
|
|
71
|
+
console.log(' npx @zyno-io/dk-server-foundation create-app @myorg/my-api');
|
|
72
|
+
console.log(' npx @zyno-io/dk-server-foundation create-app my-api ./custom-path');
|
|
73
|
+
console.log(' dksf-create-app @myorg/my-api');
|
|
74
|
+
console.log();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function getDksfVersion(packageDir: string): string {
|
|
78
|
+
try {
|
|
79
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(packageDir, 'package.json'), 'utf-8'));
|
|
80
|
+
if (pkg.version === '0.0.0-dev') return '*';
|
|
81
|
+
return `^${pkg.version}`;
|
|
82
|
+
} catch {
|
|
83
|
+
return '*';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function copyTemplate(src: string, dest: string, replacements: Record<string, string>) {
|
|
88
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
89
|
+
|
|
90
|
+
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
91
|
+
const srcPath = path.join(src, entry.name);
|
|
92
|
+
|
|
93
|
+
if (entry.isDirectory()) {
|
|
94
|
+
if (entry.name === 'dist') continue;
|
|
95
|
+
copyTemplate(srcPath, path.join(dest, entry.name), replacements);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Rename .tmpl files (e.g. package.json.tmpl -> package.json)
|
|
100
|
+
let destName = entry.name;
|
|
101
|
+
if (destName.endsWith('.tmpl')) {
|
|
102
|
+
destName = destName.slice(0, -5);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
let content = fs.readFileSync(srcPath, 'utf-8');
|
|
106
|
+
for (const [key, value] of Object.entries(replacements)) {
|
|
107
|
+
content = content.split(key).join(value);
|
|
108
|
+
}
|
|
109
|
+
fs.writeFileSync(path.join(dest, destName), content);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
main();
|
package/src/cli/dksf.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const [cmd, ...rest] = process.argv.slice(2);
|
|
4
|
+
|
|
5
|
+
if (cmd === 'create-app') {
|
|
6
|
+
// Shift argv so dksf-create-app sees the right arguments
|
|
7
|
+
process.argv = [process.argv[0], process.argv[1], ...rest];
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
9
|
+
require('./dksf-create-app');
|
|
10
|
+
} else {
|
|
11
|
+
console.error('Usage: npx @zyno-io/dk-server-foundation <command>');
|
|
12
|
+
console.error();
|
|
13
|
+
console.error('Commands:');
|
|
14
|
+
console.error(' create-app <package-name> [path] Scaffold a new application');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
package/src/services/logger.ts
CHANGED
|
@@ -220,9 +220,7 @@ export class ExtendedLogger extends Logger {
|
|
|
220
220
|
export function createLogger(subject: string | InstanceType<ClassType>, defaultData?: LogData) {
|
|
221
221
|
const name = typeof subject === 'string' ? subject : subject.constructor.name;
|
|
222
222
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
223
|
-
return r<ExtendedLogger>(Logger as any)
|
|
224
|
-
.scoped(name)
|
|
225
|
-
.setScopeData(defaultData);
|
|
223
|
+
return r<ExtendedLogger>(Logger as any).scoped(name, defaultData);
|
|
226
224
|
}
|
|
227
225
|
|
|
228
226
|
export function withLoggerContext<T>(data: LogData, fn: () => Promise<T>): Promise<T> {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "%%PACKAGE_NAME%%",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"main": "./dist/src/index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"build": "dksf-dev build",
|
|
8
|
+
"dev": "dksf-dev run",
|
|
9
|
+
"migrate": "dksf-dev migrate",
|
|
10
|
+
"migrate:create": "dksf-dev migrate:create",
|
|
11
|
+
"migrate:reset": "dksf-dev migrate:reset",
|
|
12
|
+
"test": "dksf-dev test",
|
|
13
|
+
"test:debug": "dksf-dev test --debug",
|
|
14
|
+
"format": "prettier --write .",
|
|
15
|
+
"postinstall": "dksf-install"
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@deepkit/http": "1.0.19",
|
|
19
|
+
"@deepkit/logger": "1.0.19",
|
|
20
|
+
"@deepkit/orm": "1.0.19",
|
|
21
|
+
"@deepkit/type": "1.0.19",
|
|
22
|
+
"@zyno-io/dk-server-foundation": "%%DKSF_VERSION%%"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@types/node": "^22",
|
|
26
|
+
"prettier": "^3",
|
|
27
|
+
"typescript": "~5.9"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createApp } from '@zyno-io/dk-server-foundation';
|
|
2
|
+
|
|
3
|
+
import { AppConfig } from './config';
|
|
4
|
+
import { ExampleController } from './controllers/Example.controller';
|
|
5
|
+
import { DB } from './database';
|
|
6
|
+
import { ExampleService } from './services/Example.service';
|
|
7
|
+
|
|
8
|
+
export const app = createApp({
|
|
9
|
+
config: AppConfig,
|
|
10
|
+
db: DB,
|
|
11
|
+
controllers: [ExampleController],
|
|
12
|
+
providers: [ExampleService]
|
|
13
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { http, HttpBody } from '@deepkit/http';
|
|
2
|
+
|
|
3
|
+
import { ExampleService } from '../services/Example.service';
|
|
4
|
+
|
|
5
|
+
@http.controller('examples')
|
|
6
|
+
export class ExampleController {
|
|
7
|
+
constructor(private exampleService: ExampleService) {}
|
|
8
|
+
|
|
9
|
+
@http.GET()
|
|
10
|
+
async list() {
|
|
11
|
+
return this.exampleService.findAll();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@http.POST()
|
|
15
|
+
async create(body: HttpBody<{ name: string }>) {
|
|
16
|
+
return this.exampleService.create(body.name);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ActiveRecord } from '@deepkit/orm';
|
|
2
|
+
import { AutoIncrement, entity, PrimaryKey } from '@deepkit/type';
|
|
3
|
+
|
|
4
|
+
@entity.name('examples')
|
|
5
|
+
export class ExampleEntity extends ActiveRecord {
|
|
6
|
+
id!: number & AutoIncrement & PrimaryKey;
|
|
7
|
+
name!: string;
|
|
8
|
+
createdAt: Date = new Date();
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// OTEL must be initialized before all other imports
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
5
|
+
require('@zyno-io/dk-server-foundation/telemetry/otel/index.js').init();
|
|
6
|
+
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
8
|
+
const { app } = require('./app');
|
|
9
|
+
app.run();
|
|
File without changes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ScopedLogger } from '@deepkit/logger';
|
|
2
|
+
import { createPersistedEntity } from '@zyno-io/dk-server-foundation';
|
|
3
|
+
|
|
4
|
+
import { DB } from '../database';
|
|
5
|
+
import { ExampleEntity } from '../entities/Example.entity';
|
|
6
|
+
|
|
7
|
+
export class ExampleService {
|
|
8
|
+
constructor(
|
|
9
|
+
private db: DB,
|
|
10
|
+
private logger: ScopedLogger
|
|
11
|
+
) {}
|
|
12
|
+
|
|
13
|
+
async findAll(): Promise<ExampleEntity[]> {
|
|
14
|
+
return ExampleEntity.query().find();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async create(name: string): Promise<ExampleEntity> {
|
|
18
|
+
this.logger.info(`Creating example: ${name}`);
|
|
19
|
+
return createPersistedEntity(ExampleEntity, { name });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"strict": true,
|
|
4
|
+
"sourceMap": true,
|
|
5
|
+
"declaration": false,
|
|
6
|
+
"experimentalDecorators": true,
|
|
7
|
+
"moduleResolution": "nodenext",
|
|
8
|
+
"target": "ESNext",
|
|
9
|
+
"module": "NodeNext",
|
|
10
|
+
"esModuleInterop": true,
|
|
11
|
+
"rootDir": ".",
|
|
12
|
+
"outDir": "./dist",
|
|
13
|
+
"skipLibCheck": true,
|
|
14
|
+
"forceConsistentCasingInFileNames": true,
|
|
15
|
+
"isolatedModules": true
|
|
16
|
+
},
|
|
17
|
+
"include": ["src/**/*"],
|
|
18
|
+
"exclude": ["src/**/*.spec.ts"],
|
|
19
|
+
"reflection": true
|
|
20
|
+
}
|