@modularizer/plat 0.1.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/README.md +574 -0
- package/bin/z2.js +5 -0
- package/dist/args/coerce.d.ts +54 -0
- package/dist/args/coerce.d.ts.map +1 -0
- package/dist/args/coerce.js +236 -0
- package/dist/args/coerce.js.map +1 -0
- package/dist/args/index.d.ts +2 -0
- package/dist/args/index.d.ts.map +1 -0
- package/dist/args/index.js +2 -0
- package/dist/args/index.js.map +1 -0
- package/dist/args/scalars.d.ts +87 -0
- package/dist/args/scalars.d.ts.map +1 -0
- package/dist/args/scalars.js +22 -0
- package/dist/args/scalars.js.map +1 -0
- package/dist/args/validate.d.ts +23 -0
- package/dist/args/validate.d.ts.map +1 -0
- package/dist/args/validate.js +185 -0
- package/dist/args/validate.js.map +1 -0
- package/dist/args/z2.d.ts +27 -0
- package/dist/args/z2.d.ts.map +1 -0
- package/dist/args/z2.js +24 -0
- package/dist/args/z2.js.map +1 -0
- package/dist/cli/commands/api-proxy.d.ts +9 -0
- package/dist/cli/commands/api-proxy.d.ts.map +1 -0
- package/dist/cli/commands/api-proxy.js +292 -0
- package/dist/cli/commands/api-proxy.js.map +1 -0
- package/dist/cli/commands/env.d.ts +32 -0
- package/dist/cli/commands/env.d.ts.map +1 -0
- package/dist/cli/commands/env.js +157 -0
- package/dist/cli/commands/env.js.map +1 -0
- package/dist/cli/commands/gen.d.ts +2 -0
- package/dist/cli/commands/gen.d.ts.map +1 -0
- package/dist/cli/commands/gen.js +88 -0
- package/dist/cli/commands/gen.js.map +1 -0
- package/dist/cli/commands/init-project.d.ts +9 -0
- package/dist/cli/commands/init-project.d.ts.map +1 -0
- package/dist/cli/commands/init-project.js +143 -0
- package/dist/cli/commands/init-project.js.map +1 -0
- package/dist/cli/commands/jwt-cmd.d.ts +10 -0
- package/dist/cli/commands/jwt-cmd.d.ts.map +1 -0
- package/dist/cli/commands/jwt-cmd.js +33 -0
- package/dist/cli/commands/jwt-cmd.js.map +1 -0
- package/dist/cli/commands/run.d.ts +5 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +31 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +2 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +43 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/watch.d.ts +5 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/commands/watch.js +119 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/index.d.ts +11 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +11 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/jwt-helper.d.ts +32 -0
- package/dist/cli/jwt-helper.d.ts.map +1 -0
- package/dist/cli/jwt-helper.js +84 -0
- package/dist/cli/jwt-helper.js.map +1 -0
- package/dist/cli/proxy.d.ts +40 -0
- package/dist/cli/proxy.d.ts.map +1 -0
- package/dist/cli/proxy.js +171 -0
- package/dist/cli/proxy.js.map +1 -0
- package/dist/cli/runtime.d.ts +17 -0
- package/dist/cli/runtime.d.ts.map +1 -0
- package/dist/cli/runtime.js +286 -0
- package/dist/cli/runtime.js.map +1 -0
- package/dist/cli/spec-source.d.ts +13 -0
- package/dist/cli/spec-source.d.ts.map +1 -0
- package/dist/cli/spec-source.js +207 -0
- package/dist/cli/spec-source.js.map +1 -0
- package/dist/cli/z2.d.ts +7 -0
- package/dist/cli/z2.d.ts.map +1 -0
- package/dist/cli/z2.js +93 -0
- package/dist/cli/z2.js.map +1 -0
- package/dist/client/file-transport-plugin.d.ts +25 -0
- package/dist/client/file-transport-plugin.d.ts.map +1 -0
- package/dist/client/file-transport-plugin.js +80 -0
- package/dist/client/file-transport-plugin.js.map +1 -0
- package/dist/client/http-transport-plugin.d.ts +27 -0
- package/dist/client/http-transport-plugin.d.ts.map +1 -0
- package/dist/client/http-transport-plugin.js +48 -0
- package/dist/client/http-transport-plugin.js.map +1 -0
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +6 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/openapi-client.d.ts +332 -0
- package/dist/client/openapi-client.d.ts.map +1 -0
- package/dist/client/openapi-client.js +879 -0
- package/dist/client/openapi-client.js.map +1 -0
- package/dist/client/proxy.d.ts +5 -0
- package/dist/client/proxy.d.ts.map +1 -0
- package/dist/client/proxy.js +353 -0
- package/dist/client/proxy.js.map +1 -0
- package/dist/client/request-builder.d.ts +4 -0
- package/dist/client/request-builder.d.ts.map +1 -0
- package/dist/client/request-builder.js +88 -0
- package/dist/client/request-builder.js.map +1 -0
- package/dist/client/rpc-transport-plugin.d.ts +17 -0
- package/dist/client/rpc-transport-plugin.d.ts.map +1 -0
- package/dist/client/rpc-transport-plugin.js +69 -0
- package/dist/client/rpc-transport-plugin.js.map +1 -0
- package/dist/client/tools.d.ts +69 -0
- package/dist/client/tools.d.ts.map +1 -0
- package/dist/client/tools.js +122 -0
- package/dist/client/tools.js.map +1 -0
- package/dist/client/transport-plugin.d.ts +62 -0
- package/dist/client/transport-plugin.d.ts.map +1 -0
- package/dist/client/transport-plugin.js +40 -0
- package/dist/client/transport-plugin.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/logging.d.ts +9 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +29 -0
- package/dist/logging.js.map +1 -0
- package/dist/rpc.d.ts +39 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +2 -0
- package/dist/rpc.js.map +1 -0
- package/dist/server/auth/index.d.ts +4 -0
- package/dist/server/auth/index.d.ts.map +1 -0
- package/dist/server/auth/index.js +2 -0
- package/dist/server/auth/index.js.map +1 -0
- package/dist/server/auth/jwt.d.ts +27 -0
- package/dist/server/auth/jwt.d.ts.map +1 -0
- package/dist/server/auth/jwt.js +95 -0
- package/dist/server/auth/jwt.js.map +1 -0
- package/dist/server/cache/index.d.ts +2 -0
- package/dist/server/cache/index.d.ts.map +1 -0
- package/dist/server/cache/index.js +2 -0
- package/dist/server/cache/index.js.map +1 -0
- package/dist/server/cache/utils.d.ts +30 -0
- package/dist/server/cache/utils.d.ts.map +1 -0
- package/dist/server/cache/utils.js +116 -0
- package/dist/server/cache/utils.js.map +1 -0
- package/dist/server/call-sessions.d.ts +50 -0
- package/dist/server/call-sessions.d.ts.map +1 -0
- package/dist/server/call-sessions.js +90 -0
- package/dist/server/call-sessions.js.map +1 -0
- package/dist/server/config/bucket.d.ts +9 -0
- package/dist/server/config/bucket.d.ts.map +1 -0
- package/dist/server/config/bucket.js +57 -0
- package/dist/server/config/bucket.js.map +1 -0
- package/dist/server/config/defaults.d.ts +3 -0
- package/dist/server/config/defaults.d.ts.map +1 -0
- package/dist/server/config/defaults.js +29 -0
- package/dist/server/config/defaults.js.map +1 -0
- package/dist/server/config/index.d.ts +5 -0
- package/dist/server/config/index.d.ts.map +1 -0
- package/dist/server/config/index.js +5 -0
- package/dist/server/config/index.js.map +1 -0
- package/dist/server/config/logger.d.ts +3 -0
- package/dist/server/config/logger.d.ts.map +1 -0
- package/dist/server/config/logger.js +2 -0
- package/dist/server/config/logger.js.map +1 -0
- package/dist/server/config/types.d.ts +198 -0
- package/dist/server/config/types.d.ts.map +1 -0
- package/dist/server/config/types.js +2 -0
- package/dist/server/config/types.js.map +1 -0
- package/dist/server/core.d.ts +42 -0
- package/dist/server/core.d.ts.map +1 -0
- package/dist/server/core.js +202 -0
- package/dist/server/core.js.map +1 -0
- package/dist/server/env.d.ts +39 -0
- package/dist/server/env.d.ts.map +1 -0
- package/dist/server/env.js +66 -0
- package/dist/server/env.js.map +1 -0
- package/dist/server/file-queue-protocol-plugin.d.ts +7 -0
- package/dist/server/file-queue-protocol-plugin.d.ts.map +1 -0
- package/dist/server/file-queue-protocol-plugin.js +150 -0
- package/dist/server/file-queue-protocol-plugin.js.map +1 -0
- package/dist/server/file-queue.d.ts +25 -0
- package/dist/server/file-queue.d.ts.map +1 -0
- package/dist/server/file-queue.js +2 -0
- package/dist/server/file-queue.js.map +1 -0
- package/dist/server/help.d.ts +19 -0
- package/dist/server/help.d.ts.map +1 -0
- package/dist/server/help.js +91 -0
- package/dist/server/help.js.map +1 -0
- package/dist/server/index.d.ts +29 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +29 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/operation-registry.d.ts +9 -0
- package/dist/server/operation-registry.d.ts.map +1 -0
- package/dist/server/operation-registry.js +16 -0
- package/dist/server/operation-registry.js.map +1 -0
- package/dist/server/param-aliases.d.ts +40 -0
- package/dist/server/param-aliases.d.ts.map +1 -0
- package/dist/server/param-aliases.js +112 -0
- package/dist/server/param-aliases.js.map +1 -0
- package/dist/server/protocol-plugin.d.ts +72 -0
- package/dist/server/protocol-plugin.d.ts.map +1 -0
- package/dist/server/protocol-plugin.js +2 -0
- package/dist/server/protocol-plugin.js.map +1 -0
- package/dist/server/rate-limit/index.d.ts +2 -0
- package/dist/server/rate-limit/index.d.ts.map +1 -0
- package/dist/server/rate-limit/index.js +2 -0
- package/dist/server/rate-limit/index.js.map +1 -0
- package/dist/server/rate-limit/utils.d.ts +27 -0
- package/dist/server/rate-limit/utils.d.ts.map +1 -0
- package/dist/server/rate-limit/utils.js +126 -0
- package/dist/server/rate-limit/utils.js.map +1 -0
- package/dist/server/routing.d.ts +39 -0
- package/dist/server/routing.d.ts.map +1 -0
- package/dist/server/routing.js +70 -0
- package/dist/server/routing.js.map +1 -0
- package/dist/server/rpc-protocol-plugin.d.ts +12 -0
- package/dist/server/rpc-protocol-plugin.d.ts.map +1 -0
- package/dist/server/rpc-protocol-plugin.js +134 -0
- package/dist/server/rpc-protocol-plugin.js.map +1 -0
- package/dist/server/server.d.ts +143 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +1161 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/token-limit/index.d.ts +2 -0
- package/dist/server/token-limit/index.d.ts.map +1 -0
- package/dist/server/token-limit/index.js +2 -0
- package/dist/server/token-limit/index.js.map +1 -0
- package/dist/server/token-limit/utils.d.ts +44 -0
- package/dist/server/token-limit/utils.d.ts.map +1 -0
- package/dist/server/token-limit/utils.js +260 -0
- package/dist/server/token-limit/utils.js.map +1 -0
- package/dist/server/tools.d.ts +51 -0
- package/dist/server/tools.d.ts.map +1 -0
- package/dist/server/tools.js +225 -0
- package/dist/server/tools.js.map +1 -0
- package/dist/server/transports.d.ts +25 -0
- package/dist/server/transports.d.ts.map +1 -0
- package/dist/server/transports.js +2 -0
- package/dist/server/transports.js.map +1 -0
- package/dist/spec/decorators.d.ts +41 -0
- package/dist/spec/decorators.d.ts.map +1 -0
- package/dist/spec/decorators.js +93 -0
- package/dist/spec/decorators.js.map +1 -0
- package/dist/spec/index.d.ts +3 -0
- package/dist/spec/index.d.ts.map +1 -0
- package/dist/spec/index.js +3 -0
- package/dist/spec/index.js.map +1 -0
- package/dist/spec/metadata.d.ts +5 -0
- package/dist/spec/metadata.d.ts.map +1 -0
- package/dist/spec/metadata.js +37 -0
- package/dist/spec/metadata.js.map +1 -0
- package/dist/types/client.d.ts +81 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/client.js +14 -0
- package/dist/types/client.js.map +1 -0
- package/dist/types/endpoints.d.ts +76 -0
- package/dist/types/endpoints.d.ts.map +1 -0
- package/dist/types/endpoints.js +2 -0
- package/dist/types/endpoints.js.map +1 -0
- package/dist/types/errors.d.ts +86 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +153 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/http.d.ts +80 -0
- package/dist/types/http.d.ts.map +1 -0
- package/dist/types/http.js +61 -0
- package/dist/types/http.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/openapi.d.ts +220 -0
- package/dist/types/openapi.d.ts.map +1 -0
- package/dist/types/openapi.js +11 -0
- package/dist/types/openapi.js.map +1 -0
- package/dist/types/opts.d.ts +46 -0
- package/dist/types/opts.d.ts.map +1 -0
- package/dist/types/opts.js +2 -0
- package/dist/types/opts.js.map +1 -0
- package/dist/types/plugins.d.ts +93 -0
- package/dist/types/plugins.d.ts.map +1 -0
- package/dist/types/plugins.js +5 -0
- package/dist/types/plugins.js.map +1 -0
- package/dist/types/tools.d.ts +52 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +2 -0
- package/dist/types/tools.js.map +1 -0
- package/package.json +84 -0
package/dist/args/z2.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* plat — type-driven schemas.
|
|
3
|
+
*
|
|
4
|
+
* Define types with plain TypeScript + inline comments for constraints.
|
|
5
|
+
* Run gen-schema.ts to produce JSON Schema. Import the schema and use
|
|
6
|
+
* parse() / safeParse() for runtime validation with coercion.
|
|
7
|
+
*
|
|
8
|
+
* Example:
|
|
9
|
+
*
|
|
10
|
+
* type CreatePost = {
|
|
11
|
+
* title: string // min: 1, max: 200
|
|
12
|
+
* author: email
|
|
13
|
+
* priority: posint
|
|
14
|
+
* age: int<0, 150>
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* Scalars (type aliases with built-in constraints):
|
|
18
|
+
* str, email, url, uuid, datestr, datetime,
|
|
19
|
+
* hex, digits, numeric, upper, lower, title, slug,
|
|
20
|
+
* num, int, posint, pos, percent, limit, offset
|
|
21
|
+
*/
|
|
22
|
+
export { parse, safeParse, ValidationError } from './validate';
|
|
23
|
+
export { coerce, parseDateish, parseRelativeDate, registerCoerce, Coerce } from './coerce';
|
|
24
|
+
//# sourceMappingURL=z2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"z2.js","sourceRoot":"","sources":["../../src/args/z2.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE9D,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Proxy command
|
|
3
|
+
* Call API endpoints directly from CLI using OpenAPI spec
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Proxy an API call using OpenAPI spec
|
|
7
|
+
*/
|
|
8
|
+
export declare function apiProxy(cwd: string, argv: string[]): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=api-proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-proxy.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/api-proxy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuNH;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwIzE"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Proxy command
|
|
3
|
+
* Call API endpoints directly from CLI using OpenAPI spec
|
|
4
|
+
*/
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
/**
|
|
8
|
+
* Parse CLI arguments into params object and options
|
|
9
|
+
* Supports multiple formats:
|
|
10
|
+
* - --key value (space-separated)
|
|
11
|
+
* - --key=value (equals-separated)
|
|
12
|
+
* - key=value (no dashes)
|
|
13
|
+
* - key=value&key2=value2 (query string format)
|
|
14
|
+
* - {"key": value, "key2": "value2"} (JSON object)
|
|
15
|
+
* Plus options: --timeoutMs=5000, etc.
|
|
16
|
+
*/
|
|
17
|
+
function parseCliArgs(args) {
|
|
18
|
+
const params = {};
|
|
19
|
+
const options = {};
|
|
20
|
+
const pathParams = {};
|
|
21
|
+
let i = 0;
|
|
22
|
+
while (i < args.length) {
|
|
23
|
+
const arg = args[i];
|
|
24
|
+
if (arg === undefined) {
|
|
25
|
+
i++;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
// Handle JSON object format
|
|
29
|
+
if (arg.startsWith('{') && arg.endsWith('}')) {
|
|
30
|
+
try {
|
|
31
|
+
const jsonObj = JSON.parse(arg);
|
|
32
|
+
Object.assign(params, jsonObj);
|
|
33
|
+
i++;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Not valid JSON, treat as regular arg
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Handle query string format (key=value&key2=value2)
|
|
41
|
+
if (!arg.startsWith('-') && arg.includes('=') && arg.includes('&')) {
|
|
42
|
+
const pairs = arg.split('&');
|
|
43
|
+
for (const pair of pairs) {
|
|
44
|
+
const [key, val] = pair.split('=', 2);
|
|
45
|
+
if (key !== undefined) {
|
|
46
|
+
params[key] = decodeURIComponent(val || '');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
i++;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
// Handle --key=value (equals-separated with dashes - these are options)
|
|
53
|
+
if (arg.startsWith('--') && arg.includes('=')) {
|
|
54
|
+
const [key, val] = arg.split('=', 2);
|
|
55
|
+
if (key !== undefined) {
|
|
56
|
+
const cleanKey = key.slice(2);
|
|
57
|
+
// Treat as option if it's a known option name
|
|
58
|
+
if (['timeoutMs', 'timeout', 'retryMs', 'retryDelayMs'].includes(cleanKey)) {
|
|
59
|
+
const numVal = parseInt(val || '0', 10);
|
|
60
|
+
options[cleanKey] = isNaN(numVal) ? val : numVal;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
params[cleanKey] = decodeURIComponent(val || '');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
i++;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
// Handle key=value (no dashes) or --key=value
|
|
70
|
+
if (arg.includes('=') && !arg.startsWith('--')) {
|
|
71
|
+
const [key, val] = arg.split('=', 2);
|
|
72
|
+
if (key !== undefined) {
|
|
73
|
+
params[key] = decodeURIComponent(val || '');
|
|
74
|
+
}
|
|
75
|
+
i++;
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
// Handle --key value (space-separated)
|
|
79
|
+
if (arg.startsWith('--') && i + 1 < args.length) {
|
|
80
|
+
const key = arg.slice(2);
|
|
81
|
+
const value = args[i + 1];
|
|
82
|
+
// Check if next arg exists and is not another flag
|
|
83
|
+
if (value && !value.startsWith('-') && !value.includes('=')) {
|
|
84
|
+
// Known options go to options, others to params
|
|
85
|
+
if (['timeoutMs', 'timeout', 'retryMs', 'retryDelayMs'].includes(key)) {
|
|
86
|
+
const numVal = parseInt(value, 10);
|
|
87
|
+
options[key] = isNaN(numVal) ? value : numVal;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
params[key] = value;
|
|
91
|
+
}
|
|
92
|
+
i += 2;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
i++;
|
|
97
|
+
}
|
|
98
|
+
return { params, pathParams, options };
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Find operation in OpenAPI spec by operationId
|
|
102
|
+
*/
|
|
103
|
+
function findOperation(spec, operationId) {
|
|
104
|
+
for (const [pathKey, methods] of Object.entries(spec.paths)) {
|
|
105
|
+
for (const [method, operation] of Object.entries(methods)) {
|
|
106
|
+
if (operation.operationId === operationId) {
|
|
107
|
+
return { path: pathKey, method, operation };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Extract path parameter names from a path template
|
|
115
|
+
* e.g., /api/orders/{id}/items/{itemId} → ['id', 'itemId']
|
|
116
|
+
*/
|
|
117
|
+
function extractPathParamNames(pathTemplate) {
|
|
118
|
+
const matches = pathTemplate.match(/{([^}]+)}/g) || [];
|
|
119
|
+
return matches.map(m => m.slice(1, -1));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Build the request URL with path substitutions and query parameters
|
|
123
|
+
*/
|
|
124
|
+
function buildUrl(baseUrl, pathTemplate, params, method) {
|
|
125
|
+
let url = baseUrl + pathTemplate;
|
|
126
|
+
const remainingParams = { ...params };
|
|
127
|
+
// Extract and substitute path parameters
|
|
128
|
+
const pathParamNames = extractPathParamNames(pathTemplate);
|
|
129
|
+
for (const paramName of pathParamNames) {
|
|
130
|
+
if (remainingParams.hasOwnProperty(paramName)) {
|
|
131
|
+
const value = remainingParams[paramName];
|
|
132
|
+
url = url.replace(`{${paramName}}`, encodeURIComponent(String(value)));
|
|
133
|
+
delete remainingParams[paramName];
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Handle remaining parameters based on HTTP method
|
|
137
|
+
let body;
|
|
138
|
+
if (['GET', 'HEAD', 'DELETE'].includes(method.toUpperCase())) {
|
|
139
|
+
// Add as query parameters
|
|
140
|
+
const searchParams = new URLSearchParams();
|
|
141
|
+
for (const [key, value] of Object.entries(remainingParams)) {
|
|
142
|
+
if (value !== undefined && value !== null) {
|
|
143
|
+
searchParams.append(key, String(value));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const queryString = searchParams.toString();
|
|
147
|
+
if (queryString) {
|
|
148
|
+
url += (url.includes('?') ? '&' : '?') + queryString;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
// PUT/POST/PATCH: add to body
|
|
153
|
+
if (Object.keys(remainingParams).length > 0) {
|
|
154
|
+
body = JSON.stringify(remainingParams);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return { url, body };
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Check if a string is an HTTP method
|
|
161
|
+
*/
|
|
162
|
+
function isHttpMethod(str) {
|
|
163
|
+
return ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD'].includes(str.toUpperCase());
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Proxy an API call using OpenAPI spec
|
|
167
|
+
*/
|
|
168
|
+
export async function apiProxy(cwd, argv) {
|
|
169
|
+
if (argv.length === 0) {
|
|
170
|
+
console.error('❌ Error: No operation specified');
|
|
171
|
+
console.error('Usage:');
|
|
172
|
+
console.error(' plat <operationId> [--key=value ...]');
|
|
173
|
+
console.error(' plat <method> <path> [--key=value ...]');
|
|
174
|
+
process.exit(1);
|
|
175
|
+
}
|
|
176
|
+
try {
|
|
177
|
+
// Load OpenAPI spec
|
|
178
|
+
const specPath = path.join(cwd, 'openapi.json');
|
|
179
|
+
if (!fs.existsSync(specPath)) {
|
|
180
|
+
console.error('❌ Error: openapi.json not found');
|
|
181
|
+
console.error('Run: plat gen openapi');
|
|
182
|
+
process.exit(1);
|
|
183
|
+
}
|
|
184
|
+
const specContent = fs.readFileSync(specPath, 'utf-8');
|
|
185
|
+
const spec = JSON.parse(specContent);
|
|
186
|
+
// Check if first argument is an HTTP method
|
|
187
|
+
let operationId;
|
|
188
|
+
let methodOverride;
|
|
189
|
+
let pathOverride;
|
|
190
|
+
let argsStartIndex = 1;
|
|
191
|
+
if (isHttpMethod(argv[0]) && argv.length > 1) {
|
|
192
|
+
methodOverride = argv[0].toUpperCase();
|
|
193
|
+
pathOverride = argv[1];
|
|
194
|
+
argsStartIndex = 2;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
operationId = argv[0];
|
|
198
|
+
}
|
|
199
|
+
let operation = null;
|
|
200
|
+
// If we have method + path override, find the operation by those
|
|
201
|
+
if (methodOverride && pathOverride) {
|
|
202
|
+
for (const [pathKey, methods] of Object.entries(spec.paths)) {
|
|
203
|
+
if (pathKey === pathOverride || pathKey === `/api${pathOverride}`) {
|
|
204
|
+
const method = methods[methodOverride.toLowerCase()];
|
|
205
|
+
if (method) {
|
|
206
|
+
operation = { path: pathKey, method: methodOverride.toLowerCase(), operation: method };
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (!operation) {
|
|
212
|
+
console.error(`❌ Error: No operation found for ${methodOverride} ${pathOverride}`);
|
|
213
|
+
process.exit(1);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
operation = findOperation(spec, operationId);
|
|
218
|
+
if (!operation) {
|
|
219
|
+
console.error(`❌ Error: Operation '${operationId}' not found in OpenAPI spec`);
|
|
220
|
+
process.exit(1);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// Parse remaining arguments
|
|
224
|
+
const parsed = parseCliArgs(argv.slice(argsStartIndex));
|
|
225
|
+
// Resolve base URL
|
|
226
|
+
const baseUrl = process.env.PLAT_BASE_URL ||
|
|
227
|
+
process.env.API_BASE_URL ||
|
|
228
|
+
process.env.BASE_URL ||
|
|
229
|
+
'http://localhost:3000';
|
|
230
|
+
// Build request URL
|
|
231
|
+
const { url, body } = buildUrl(baseUrl, operation.path, parsed.params, operation.method);
|
|
232
|
+
// Build fetch options
|
|
233
|
+
const fetchOptions = {
|
|
234
|
+
method: operation.method.toUpperCase(),
|
|
235
|
+
headers: {
|
|
236
|
+
'Content-Type': 'application/json',
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
// Add timeout if specified
|
|
240
|
+
const timeoutMs = parsed.options.timeoutMs || parsed.options.timeout;
|
|
241
|
+
if (timeoutMs) {
|
|
242
|
+
const controller = new AbortController();
|
|
243
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
244
|
+
fetchOptions.signal = controller.signal;
|
|
245
|
+
}
|
|
246
|
+
// Add Authorization header if token is available
|
|
247
|
+
const token = process.env.PLAT_TOKEN ||
|
|
248
|
+
process.env.API_TOKEN ||
|
|
249
|
+
process.env.AUTH_TOKEN;
|
|
250
|
+
if (token) {
|
|
251
|
+
;
|
|
252
|
+
fetchOptions.headers['Authorization'] = `Bearer ${token}`;
|
|
253
|
+
}
|
|
254
|
+
// Add body if present
|
|
255
|
+
if (body) {
|
|
256
|
+
fetchOptions.body = body;
|
|
257
|
+
}
|
|
258
|
+
// Make request
|
|
259
|
+
const response = await fetch(url, fetchOptions);
|
|
260
|
+
// Handle response
|
|
261
|
+
const contentType = response.headers.get('content-type') || '';
|
|
262
|
+
let responseBody = null;
|
|
263
|
+
if (contentType.includes('application/json')) {
|
|
264
|
+
responseBody = await response.json();
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
responseBody = await response.text();
|
|
268
|
+
}
|
|
269
|
+
if (!response.ok) {
|
|
270
|
+
console.error(`❌ Error: ${response.status} ${response.statusText}`);
|
|
271
|
+
if (typeof responseBody === 'object') {
|
|
272
|
+
console.error(JSON.stringify(responseBody, null, 2));
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
console.error(responseBody);
|
|
276
|
+
}
|
|
277
|
+
process.exit(1);
|
|
278
|
+
}
|
|
279
|
+
// Print formatted response
|
|
280
|
+
if (typeof responseBody === 'object') {
|
|
281
|
+
console.log(JSON.stringify(responseBody, null, 2));
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
console.log(responseBody);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
console.error('❌ Error:', error.message);
|
|
289
|
+
process.exit(1);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=api-proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-proxy.js","sourceRoot":"","sources":["../../../src/cli/commands/api-proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment management commands
|
|
3
|
+
* Handles .env file initialization and JWT secret generation
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Parse env file into key-value object
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseEnvFile(content: string): Record<string, string>;
|
|
9
|
+
/**
|
|
10
|
+
* Format env file with comments preserved
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatEnvFile(sample: string, existing: Record<string, string>): string;
|
|
13
|
+
/**
|
|
14
|
+
* Update or create env file with a key-value pair
|
|
15
|
+
*/
|
|
16
|
+
export declare function updateEnvFile(filePath: string, key: string, value: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* Generate cryptographically secure random string
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateSecret(length: number): string;
|
|
21
|
+
/**
|
|
22
|
+
* Initialize .env file from .env.sample
|
|
23
|
+
* - Copies .env.sample to .env if .env doesn't exist
|
|
24
|
+
* - If .env exists, merges in new variables from .env.sample
|
|
25
|
+
* - Preserves existing values
|
|
26
|
+
*/
|
|
27
|
+
export declare function envUpsert(cwd: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Generate and update JWT_SECRET in .env
|
|
30
|
+
*/
|
|
31
|
+
export declare function envRoll(cwd: string, length?: number): void;
|
|
32
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/env.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAuBpE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CA+BR;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,IAAI,CA4BN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAmC3C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAwB1D"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment management commands
|
|
3
|
+
* Handles .env file initialization and JWT secret generation
|
|
4
|
+
*/
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import crypto from 'crypto';
|
|
8
|
+
/**
|
|
9
|
+
* Parse env file into key-value object
|
|
10
|
+
*/
|
|
11
|
+
export function parseEnvFile(content) {
|
|
12
|
+
const result = {};
|
|
13
|
+
const lines = content.split('\n');
|
|
14
|
+
for (const line of lines) {
|
|
15
|
+
const trimmed = line.trim();
|
|
16
|
+
// Skip empty lines and comments
|
|
17
|
+
if (!trimmed || trimmed.startsWith('#')) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const eqIndex = trimmed.indexOf('=');
|
|
21
|
+
if (eqIndex === -1)
|
|
22
|
+
continue;
|
|
23
|
+
const key = trimmed.substring(0, eqIndex).trim();
|
|
24
|
+
const value = trimmed.substring(eqIndex + 1).trim();
|
|
25
|
+
// Remove quotes if present
|
|
26
|
+
result[key] = value.replace(/^["']|["']$/g, '');
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Format env file with comments preserved
|
|
32
|
+
*/
|
|
33
|
+
export function formatEnvFile(sample, existing) {
|
|
34
|
+
let result = '';
|
|
35
|
+
const lines = sample.split('\n');
|
|
36
|
+
for (const line of lines) {
|
|
37
|
+
const trimmed = line.trim();
|
|
38
|
+
// Preserve comments and empty lines
|
|
39
|
+
if (!trimmed || trimmed.startsWith('#')) {
|
|
40
|
+
result += line + '\n';
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const eqIndex = trimmed.indexOf('=');
|
|
44
|
+
if (eqIndex === -1) {
|
|
45
|
+
result += line + '\n';
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const key = trimmed.substring(0, eqIndex).trim();
|
|
49
|
+
// Use existing value if available, otherwise use sample value
|
|
50
|
+
if (existing.hasOwnProperty(key)) {
|
|
51
|
+
const indent = line.substring(0, line.indexOf(key));
|
|
52
|
+
result += `${indent}${key}=${existing[key]}\n`;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
result += line + '\n';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Update or create env file with a key-value pair
|
|
62
|
+
*/
|
|
63
|
+
export function updateEnvFile(filePath, key, value) {
|
|
64
|
+
let content = '';
|
|
65
|
+
if (fs.existsSync(filePath)) {
|
|
66
|
+
content = fs.readFileSync(filePath, 'utf-8');
|
|
67
|
+
}
|
|
68
|
+
const lines = content.split('\n');
|
|
69
|
+
let found = false;
|
|
70
|
+
const updatedLines = lines.map(line => {
|
|
71
|
+
const trimmed = line.trim();
|
|
72
|
+
if (trimmed.startsWith(key + '=')) {
|
|
73
|
+
found = true;
|
|
74
|
+
return `${key}=${value}`;
|
|
75
|
+
}
|
|
76
|
+
return line;
|
|
77
|
+
});
|
|
78
|
+
// If not found, add it
|
|
79
|
+
if (!found) {
|
|
80
|
+
updatedLines.push(`${key}=${value}`);
|
|
81
|
+
}
|
|
82
|
+
// Remove trailing empty lines and add one newline at end
|
|
83
|
+
let result = updatedLines.join('\n').trim() + '\n';
|
|
84
|
+
fs.writeFileSync(filePath, result);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Generate cryptographically secure random string
|
|
88
|
+
*/
|
|
89
|
+
export function generateSecret(length) {
|
|
90
|
+
return crypto.randomBytes(length / 2).toString('hex');
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Initialize .env file from .env.sample
|
|
94
|
+
* - Copies .env.sample to .env if .env doesn't exist
|
|
95
|
+
* - If .env exists, merges in new variables from .env.sample
|
|
96
|
+
* - Preserves existing values
|
|
97
|
+
*/
|
|
98
|
+
export function envUpsert(cwd) {
|
|
99
|
+
const envPath = path.join(cwd, '.env');
|
|
100
|
+
const samplePath = path.join(cwd, '.env.sample');
|
|
101
|
+
// Check if .env.sample exists
|
|
102
|
+
if (!fs.existsSync(samplePath)) {
|
|
103
|
+
console.error('❌ Error: .env.sample not found');
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
const sampleContent = fs.readFileSync(samplePath, 'utf-8');
|
|
108
|
+
let existingVars = {};
|
|
109
|
+
if (fs.existsSync(envPath)) {
|
|
110
|
+
const existingContent = fs.readFileSync(envPath, 'utf-8');
|
|
111
|
+
existingVars = parseEnvFile(existingContent);
|
|
112
|
+
console.log('📝 Merging .env with new variables from .env.sample...');
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
console.log('📝 Creating .env from .env.sample...');
|
|
116
|
+
}
|
|
117
|
+
const newContent = formatEnvFile(sampleContent, existingVars);
|
|
118
|
+
fs.writeFileSync(envPath, newContent);
|
|
119
|
+
console.log('✅ .env file initialized successfully');
|
|
120
|
+
console.log('');
|
|
121
|
+
console.log('Next steps:');
|
|
122
|
+
console.log(' 1. Edit .env with your configuration');
|
|
123
|
+
console.log(' 2. Run: plat env roll');
|
|
124
|
+
console.log(' 3. Start the server: npm run dev');
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
console.error('❌ Error:', error.message);
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Generate and update JWT_SECRET in .env
|
|
133
|
+
*/
|
|
134
|
+
export function envRoll(cwd, length) {
|
|
135
|
+
const envPath = path.join(cwd, '.env');
|
|
136
|
+
const secretLength = length ?? 64;
|
|
137
|
+
try {
|
|
138
|
+
const secret = generateSecret(secretLength);
|
|
139
|
+
updateEnvFile(envPath, 'JWT_SECRET', secret);
|
|
140
|
+
console.log('✅ JWT_SECRET updated successfully');
|
|
141
|
+
console.log('');
|
|
142
|
+
console.log('New Secret (length: ' + secret.length + '):');
|
|
143
|
+
console.log(secret);
|
|
144
|
+
console.log('');
|
|
145
|
+
console.log('Location: .env');
|
|
146
|
+
console.log('');
|
|
147
|
+
console.log('⚠️ Keep this secret safe!');
|
|
148
|
+
console.log(' - Do not commit .env to version control');
|
|
149
|
+
console.log(' - Use a .gitignore entry: .env');
|
|
150
|
+
console.log(' - In production, use secure secret management');
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
console.error('❌ Error:', error.message);
|
|
154
|
+
process.exit(1);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/cli/commands/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gen.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/gen.ts"],"names":[],"mappings":"AA4CA,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,IAAI,CAyClF"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
+
const __dirname = path.dirname(__filename);
|
|
6
|
+
function scriptDir() {
|
|
7
|
+
return path.resolve(__dirname, '../../..', 'scripts');
|
|
8
|
+
}
|
|
9
|
+
function run(script, cwd, args = []) {
|
|
10
|
+
const scriptPath = path.join(scriptDir(), script);
|
|
11
|
+
const cmd = `npx tsx "${scriptPath}" ${args.map(a => `"${a}"`).join(' ')}`.trim();
|
|
12
|
+
execSync(cmd, { stdio: 'inherit', cwd });
|
|
13
|
+
}
|
|
14
|
+
function getOption(argv, flag) {
|
|
15
|
+
for (let i = 0; i < argv.length; i++) {
|
|
16
|
+
const arg = argv[i];
|
|
17
|
+
if (arg === flag)
|
|
18
|
+
return argv[i + 1];
|
|
19
|
+
if (arg?.startsWith(`${flag}=`))
|
|
20
|
+
return arg.slice(flag.length + 1);
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
function forwardOption(argv, flag, out) {
|
|
25
|
+
const value = getOption(argv, flag);
|
|
26
|
+
if (value)
|
|
27
|
+
out.push(flag, value);
|
|
28
|
+
}
|
|
29
|
+
function getFirstPositionalArg(argv) {
|
|
30
|
+
for (let i = 0; i < argv.length; i++) {
|
|
31
|
+
const arg = argv[i];
|
|
32
|
+
if (!arg)
|
|
33
|
+
continue;
|
|
34
|
+
if (arg.startsWith('--')) {
|
|
35
|
+
if (arg === '--src' || arg === '--dst')
|
|
36
|
+
i += 1;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
return arg;
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
export function runGen(cwd, subcommand, argv = []) {
|
|
44
|
+
switch (subcommand) {
|
|
45
|
+
case undefined:
|
|
46
|
+
case 'openapi': {
|
|
47
|
+
const args = [];
|
|
48
|
+
forwardOption(argv, '--src', args);
|
|
49
|
+
forwardOption(argv, '--dst', args);
|
|
50
|
+
if (!getOption(argv, '--src')) {
|
|
51
|
+
const positional = getFirstPositionalArg(argv);
|
|
52
|
+
if (positional)
|
|
53
|
+
args.push(positional);
|
|
54
|
+
}
|
|
55
|
+
run('gen-openapi.ts', cwd, args);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
case 'client': {
|
|
59
|
+
const args = [];
|
|
60
|
+
forwardOption(argv, '--src', args);
|
|
61
|
+
forwardOption(argv, '--dst', args);
|
|
62
|
+
if (!getOption(argv, '--src')) {
|
|
63
|
+
const positional = getFirstPositionalArg(argv);
|
|
64
|
+
if (positional)
|
|
65
|
+
args.push(positional);
|
|
66
|
+
}
|
|
67
|
+
run('gen-client-openapi.ts', cwd, args);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
case 'cli': {
|
|
71
|
+
const args = [];
|
|
72
|
+
forwardOption(argv, '--src', args);
|
|
73
|
+
forwardOption(argv, '--dst', args);
|
|
74
|
+
if (!getOption(argv, '--src')) {
|
|
75
|
+
const positional = getFirstPositionalArg(argv);
|
|
76
|
+
if (positional)
|
|
77
|
+
args.push(positional);
|
|
78
|
+
}
|
|
79
|
+
run('gen-cli-openapi.ts', cwd, args);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
default:
|
|
83
|
+
console.error(`Unknown target: ${subcommand}`);
|
|
84
|
+
console.error('Available: openapi, client, cli');
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=gen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gen.js","sourceRoot":"","sources":["../../../src/cli/commands/gen.ts"],"names":[],"mappings":"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"}
|