@axiomify/cli 6.0.0-rc.2 → 6.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 +34 -1
- package/dist/{dist-PKSGYMK7.mjs → dist-SYWHGZLI.mjs} +17 -30
- package/dist/index.js +5942 -521
- package/dist/index.mjs +5913 -480
- package/dist/{uws_darwin_arm64_108-CLFXMYPI.node → uws_darwin_arm64_127-NGHTXN5Q.node} +0 -0
- package/dist/{uws_darwin_arm64_127-KHC2FVAM.node → uws_darwin_arm64_137-ESY6MPLH.node} +0 -0
- package/dist/{uws_darwin_arm64_115-7FFEG3YF.node → uws_darwin_arm64_147-V7BKA3SU.node} +0 -0
- package/dist/{uws_darwin_x64_127-NHKQMMST.node → uws_darwin_x64_127-WIZGG7MS.node} +0 -0
- package/dist/{uws_darwin_x64_108-BRGT45AT.node → uws_darwin_x64_137-APKZWL4Y.node} +0 -0
- package/dist/{uws_darwin_x64_115-4HGPQGDD.node → uws_darwin_x64_147-W2HKFQZT.node} +0 -0
- package/dist/{uws_linux_arm64_115-EIAAY4WO.node → uws_linux_arm64_127-3CO7NSFJ.node} +0 -0
- package/dist/{uws_linux_arm64_120-OADY5FIN.node → uws_linux_arm64_137-HWEDGGZV.node} +0 -0
- package/dist/{uws_linux_arm64_108-YHK7ACON.node → uws_linux_arm64_147-7UCIYMK2.node} +0 -0
- package/dist/{uws_linux_x64_108-QSNE6XWU.node → uws_linux_x64_127-KA4E76LJ.node} +0 -0
- package/dist/{uws_linux_x64_127-HBA6RNSU.node → uws_linux_x64_137-DDFLTTJR.node} +0 -0
- package/dist/{uws_linux_x64_120-AIZ6RIW2.node → uws_linux_x64_147-MJSFREL3.node} +0 -0
- package/dist/{uws_win32_x64_120-XH4MVJGN.node → uws_win32_x64_127-O4US4Y4L.node} +0 -0
- package/dist/{uws_win32_x64_127-JBAEKR4X.node → uws_win32_x64_137-L5OZROQ7.node} +0 -0
- package/dist/{uws_win32_x64_115-V5N4NHJ5.node → uws_win32_x64_147-D7MGKVRG.node} +0 -0
- package/package.json +48 -16
- package/dist/uws_darwin_arm64_120-GFZT7CLS.node +0 -0
- package/dist/uws_darwin_x64_120-C2SGUHP4.node +0 -0
- package/dist/uws_linux_arm64_127-U2SRLYQM.node +0 -0
- package/dist/uws_linux_arm_108-BKVITVZA.node +0 -0
- package/dist/uws_linux_arm_115-7IORQF77.node +0 -0
- package/dist/uws_linux_arm_120-LCX4ED5F.node +0 -0
- package/dist/uws_linux_arm_127-6UTO7TL6.node +0 -0
- package/dist/uws_linux_x64_115-7AAZWMWE.node +0 -0
- package/dist/uws_win32_x64_108-J6KONPDM.node +0 -0
package/README.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @axiomify/cli
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
[](https://npmjs.com/package//@axiomify/cli)
|
|
5
|
+
[](https://codecov.io/github/otopman/axiomify)
|
|
6
|
+
[](https://securityscorecards.dev/viewer/?uri=github.com/OTopman/axiomify)
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
8
|
+
|
|
3
9
|
The official CLI for the Axiomify framework — scaffold projects, run the
|
|
4
10
|
dev server, build production bundles, inspect routes, generate OpenAPI
|
|
5
11
|
specs, and audit production readiness.
|
|
@@ -26,11 +32,12 @@ the same major as your `@axiomify/*` runtime packages.
|
|
|
26
32
|
| `axiomify openapi [entry]` | Generate the OpenAPI 3.0.3 spec |
|
|
27
33
|
| `axiomify check [entry]` | Static production-readiness audit |
|
|
28
34
|
| `axiomify doctor` | Diagnose the host environment |
|
|
35
|
+
| `axiomify sdk <subcommand>` | Manage, generate, build, validate, and diff SDKs |
|
|
29
36
|
|
|
30
37
|
`[entry]` defaults to `src/index.ts` everywhere it's accepted.
|
|
31
38
|
|
|
32
39
|
For the full reference (flags, exit codes, CI examples), see
|
|
33
|
-
[
|
|
40
|
+
[`./docs/packages/cli.md`](https://github.com/OTopman/axiomify/blob/main/docs/packages/cli.md).
|
|
34
41
|
|
|
35
42
|
## `axiomify init`
|
|
36
43
|
|
|
@@ -138,6 +145,30 @@ alignment, uWS bindings load successfully, recent build artefact, port
|
|
|
138
145
|
Run on a fresh clone or new CI runner before chasing test failures that
|
|
139
146
|
turn out to be Node-version mismatches.
|
|
140
147
|
|
|
148
|
+
## `axiomify sdk`
|
|
149
|
+
|
|
150
|
+
Subcommands for compiling type-safe client SDKs from specs:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Generate SDKs for TS, Python, and Go:
|
|
154
|
+
axiomify sdk generate spec.json --target typescript python go -o ./sdks
|
|
155
|
+
|
|
156
|
+
# Deep structural diff for breaking changes:
|
|
157
|
+
axiomify sdk diff old-spec.json new-spec.json
|
|
158
|
+
|
|
159
|
+
# Get client migration guidance:
|
|
160
|
+
axiomify sdk migrate old-spec.json new-spec.json
|
|
161
|
+
|
|
162
|
+
# Run generation hot-reloads on file change:
|
|
163
|
+
axiomify sdk watch spec.json --target typescript python
|
|
164
|
+
|
|
165
|
+
# Run local toolchain diagnostics:
|
|
166
|
+
axiomify sdk doctor
|
|
167
|
+
|
|
168
|
+
# Run compiler and emitter throughput benchmarks:
|
|
169
|
+
axiomify sdk benchmark
|
|
170
|
+
```
|
|
171
|
+
|
|
141
172
|
## CI example
|
|
142
173
|
|
|
143
174
|
```yaml
|
|
@@ -146,6 +177,8 @@ turn out to be Node-version mismatches.
|
|
|
146
177
|
- run: npx axiomify build
|
|
147
178
|
- run: npx axiomify openapi -o ./openapi.json --spec-version "$GITHUB_SHA"
|
|
148
179
|
- run: npx axiomify routes --json > routes.json # surface snapshot
|
|
180
|
+
- run: npx axiomify sdk validate ./openapi.json # schema verification
|
|
181
|
+
- run: npx axiomify sdk diff old-spec.json ./openapi.json # check breaking changes
|
|
149
182
|
```
|
|
150
183
|
|
|
151
184
|
Diff `routes.json` between commits to detect accidental API changes
|
|
@@ -33,7 +33,7 @@ var OpenApiGenerator = class {
|
|
|
33
33
|
options;
|
|
34
34
|
generate() {
|
|
35
35
|
const spec = {
|
|
36
|
-
openapi: "3.0
|
|
36
|
+
openapi: "3.1.0",
|
|
37
37
|
info: this.options.info,
|
|
38
38
|
paths: {}
|
|
39
39
|
};
|
|
@@ -44,39 +44,27 @@ var OpenApiGenerator = class {
|
|
|
44
44
|
const method = route.method.toLowerCase();
|
|
45
45
|
const paths = spec.paths;
|
|
46
46
|
if (!paths[openApiPath]) paths[openApiPath] = {};
|
|
47
|
-
const
|
|
47
|
+
const s = route.schema ?? {};
|
|
48
48
|
const operation = {
|
|
49
|
-
// OAS §4.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
|
|
55
|
-
// synthesise a stable name from method+path:
|
|
56
|
-
// GET /users/:id → "getUsersById"
|
|
57
|
-
// POST /users → "postUsers"
|
|
58
|
-
// Determinism matters here — codegen output should not drift
|
|
59
|
-
// between releases unless method+path actually change.
|
|
60
|
-
operationId: op?.operationId ?? this.synthesiseOperationId(route.method, route.path),
|
|
49
|
+
// OAS §4.8.10.2 — summary. Defaults to `${method} ${path}`.
|
|
50
|
+
summary: s.summary ?? `${route.method} ${route.path}`,
|
|
51
|
+
// OAS §4.8.10.5 — operationId for client codegen tools.
|
|
52
|
+
// Auto-synthesised from method+path when omitted:
|
|
53
|
+
// GET /users/:id → "getUsersById" POST /users → "postUsers"
|
|
54
|
+
operationId: s.operationId ?? this.synthesiseOperationId(route.method, route.path),
|
|
61
55
|
parameters: this.extractParameters(route),
|
|
62
56
|
responses: this.extractResponses(route)
|
|
63
57
|
};
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (
|
|
69
|
-
if (
|
|
70
|
-
if (
|
|
71
|
-
if (op?.deprecated) operation.deprecated = true;
|
|
72
|
-
if (op?.externalDocs) operation.externalDocs = op.externalDocs;
|
|
73
|
-
if (op?.servers) operation.servers = op.servers;
|
|
74
|
-
if (op?.callbacks) operation.callbacks = op.callbacks;
|
|
58
|
+
if (s.description) operation.description = s.description;
|
|
59
|
+
if (s.tags) operation.tags = s.tags;
|
|
60
|
+
if (s.security !== void 0) operation.security = s.security;
|
|
61
|
+
if (s.deprecated) operation.deprecated = true;
|
|
62
|
+
if (s.externalDocs) operation.externalDocs = s.externalDocs;
|
|
63
|
+
if (s.servers) operation.servers = s.servers;
|
|
64
|
+
if (s.callbacks) operation.callbacks = s.callbacks;
|
|
75
65
|
const body = this.extractBody(route);
|
|
76
66
|
if (body) {
|
|
77
|
-
if (
|
|
78
|
-
body.description = op.requestBodyDescription;
|
|
79
|
-
}
|
|
67
|
+
if (s.requestBodyDescription) body.description = s.requestBodyDescription;
|
|
80
68
|
operation.requestBody = body;
|
|
81
69
|
}
|
|
82
70
|
paths[openApiPath][method] = operation;
|
|
@@ -170,8 +158,7 @@ var OpenApiGenerator = class {
|
|
|
170
158
|
return { required: true, content: { [contentType]: { schema: finalSchema } } };
|
|
171
159
|
}
|
|
172
160
|
extractResponses(route) {
|
|
173
|
-
const
|
|
174
|
-
const descriptions = op?.responseDescriptions ?? {};
|
|
161
|
+
const descriptions = route.schema?.responseDescriptions ?? {};
|
|
175
162
|
const defaultResponse = {
|
|
176
163
|
"200": {
|
|
177
164
|
description: descriptions["200"] ?? "Successful response",
|