@dusted/anqst 1.5.0 → 1.6.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 +45 -4
- package/dist/src/app.js +78 -24
- package/dist/src/base93.js +0 -72
- package/dist/src/boundary-codec-analysis.js +468 -0
- package/dist/src/boundary-codec-leaves.js +602 -0
- package/dist/src/boundary-codec-model.js +77 -0
- package/dist/src/boundary-codec-plan.js +522 -0
- package/dist/src/boundary-codec-render.js +1738 -0
- package/dist/src/boundary-codecs.js +174 -0
- package/dist/src/emit.js +1960 -207
- package/dist/src/layout.js +9 -3
- package/dist/src/program.js +1 -1
- package/dist/src/project.js +3 -3
- package/package.json +2 -2
- package/spec/AnQst-Spec-DSL.d.ts +22 -24
- package/dist/src/codecgenerators/basecodecemitters/bigint-qint64/decoder.js +0 -35
- package/dist/src/codecgenerators/basecodecemitters/bigint-qint64/encoder.js +0 -36
- package/dist/src/codecgenerators/basecodecemitters/bigint-quint64/decoder.js +0 -26
- package/dist/src/codecgenerators/basecodecemitters/bigint-quint64/encoder.js +0 -38
- package/dist/src/codecgenerators/basecodecemitters/binary-blob/decoder.js +0 -28
- package/dist/src/codecgenerators/basecodecemitters/binary-blob/encoder.js +0 -34
- package/dist/src/codecgenerators/basecodecemitters/binary-buffer/decoder.js +0 -29
- package/dist/src/codecgenerators/basecodecemitters/binary-buffer/encoder.js +0 -36
- package/dist/src/codecgenerators/basecodecemitters/binary-float32Array/decoder.js +0 -46
- package/dist/src/codecgenerators/basecodecemitters/binary-float32Array/encoder.js +0 -49
- package/dist/src/codecgenerators/basecodecemitters/binary-float64Array/decoder.js +0 -46
- package/dist/src/codecgenerators/basecodecemitters/binary-float64Array/encoder.js +0 -47
- package/dist/src/codecgenerators/basecodecemitters/binary-int16Array/decoder.js +0 -46
- package/dist/src/codecgenerators/basecodecemitters/binary-int16Array/encoder.js +0 -49
- package/dist/src/codecgenerators/basecodecemitters/binary-int32Array/decoder.js +0 -50
- package/dist/src/codecgenerators/basecodecemitters/binary-int32Array/encoder.js +0 -52
- package/dist/src/codecgenerators/basecodecemitters/binary-int8Array/decoder.js +0 -38
- package/dist/src/codecgenerators/basecodecemitters/binary-int8Array/encoder.js +0 -44
- package/dist/src/codecgenerators/basecodecemitters/binary-typedArray/decoder.js +0 -33
- package/dist/src/codecgenerators/basecodecemitters/binary-typedArray/encoder.js +0 -34
- package/dist/src/codecgenerators/basecodecemitters/binary-uint16Array/decoder.js +0 -46
- package/dist/src/codecgenerators/basecodecemitters/binary-uint16Array/encoder.js +0 -49
- package/dist/src/codecgenerators/basecodecemitters/binary-uint32Array/decoder.js +0 -46
- package/dist/src/codecgenerators/basecodecemitters/binary-uint32Array/encoder.js +0 -49
- package/dist/src/codecgenerators/basecodecemitters/binary-uint8Array/decoder.js +0 -28
- package/dist/src/codecgenerators/basecodecemitters/binary-uint8Array/encoder.js +0 -34
- package/dist/src/codecgenerators/basecodecemitters/boolean/decoder.js +0 -34
- package/dist/src/codecgenerators/basecodecemitters/boolean/encoder.js +0 -40
- package/dist/src/codecgenerators/basecodecemitters/dynamic-json/decoder.js +0 -43
- package/dist/src/codecgenerators/basecodecemitters/dynamic-json/encoder.js +0 -45
- package/dist/src/codecgenerators/basecodecemitters/dynamic-object/decoder.js +0 -44
- package/dist/src/codecgenerators/basecodecemitters/dynamic-object/encoder.js +0 -46
- package/dist/src/codecgenerators/basecodecemitters/integer-int16/decoder.js +0 -32
- package/dist/src/codecgenerators/basecodecemitters/integer-int16/encoder.js +0 -43
- package/dist/src/codecgenerators/basecodecemitters/integer-int32/decoder.js +0 -26
- package/dist/src/codecgenerators/basecodecemitters/integer-int32/encoder.js +0 -37
- package/dist/src/codecgenerators/basecodecemitters/integer-int8/decoder.js +0 -26
- package/dist/src/codecgenerators/basecodecemitters/integer-int8/encoder.js +0 -37
- package/dist/src/codecgenerators/basecodecemitters/integer-qint16/decoder.js +0 -36
- package/dist/src/codecgenerators/basecodecemitters/integer-qint16/encoder.js +0 -36
- package/dist/src/codecgenerators/basecodecemitters/integer-qint32/decoder.js +0 -25
- package/dist/src/codecgenerators/basecodecemitters/integer-qint32/encoder.js +0 -36
- package/dist/src/codecgenerators/basecodecemitters/integer-qint8/decoder.js +0 -36
- package/dist/src/codecgenerators/basecodecemitters/integer-qint8/encoder.js +0 -36
- package/dist/src/codecgenerators/basecodecemitters/integer-quint16/decoder.js +0 -26
- package/dist/src/codecgenerators/basecodecemitters/integer-quint16/encoder.js +0 -38
- package/dist/src/codecgenerators/basecodecemitters/integer-quint32/decoder.js +0 -27
- package/dist/src/codecgenerators/basecodecemitters/integer-quint32/encoder.js +0 -39
- package/dist/src/codecgenerators/basecodecemitters/integer-quint8/decoder.js +0 -26
- package/dist/src/codecgenerators/basecodecemitters/integer-quint8/encoder.js +0 -38
- package/dist/src/codecgenerators/basecodecemitters/integer-uint16/decoder.js +0 -30
- package/dist/src/codecgenerators/basecodecemitters/integer-uint16/encoder.js +0 -42
- package/dist/src/codecgenerators/basecodecemitters/integer-uint32/decoder.js +0 -31
- package/dist/src/codecgenerators/basecodecemitters/integer-uint32/encoder.js +0 -43
- package/dist/src/codecgenerators/basecodecemitters/integer-uint8/decoder.js +0 -30
- package/dist/src/codecgenerators/basecodecemitters/integer-uint8/encoder.js +0 -40
- package/dist/src/codecgenerators/basecodecemitters/number/decoder.js +0 -26
- package/dist/src/codecgenerators/basecodecemitters/number/encoder.js +0 -38
- package/dist/src/codecgenerators/basecodecemitters/shared/comments.js +0 -13
- package/dist/src/codecgenerators/basecodecemitters/shared/contracts.js +0 -2
- package/dist/src/codecgenerators/basecodecemitters/shared/fixedwidth.js +0 -53
- package/dist/src/codecgenerators/basecodecemitters/shared/index.js +0 -21
- package/dist/src/codecgenerators/basecodecemitters/shared/positionalBase93.js +0 -48
- package/dist/src/codecgenerators/basecodecemitters/shared/rawbytes.js +0 -30
- package/dist/src/codecgenerators/basecodecemitters/string/decoder.js +0 -43
- package/dist/src/codecgenerators/basecodecemitters/string/encoder.js +0 -43
- package/dist/src/codecgenerators/basecodecemitters/stringArray/decoder.js +0 -80
- package/dist/src/codecgenerators/basecodecemitters/stringArray/encoder.js +0 -57
- package/dist/src/structured-top-level-codecs.js +0 -1305
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ Settings file (`./AnQst/<WidgetName>.settings.json`) owns project-local AnQst co
|
|
|
43
43
|
"layoutVersion": 2,
|
|
44
44
|
"widgetName": "<WidgetName>",
|
|
45
45
|
"spec": "./AnQst/<WidgetName>.AnQst.d.ts",
|
|
46
|
-
"generate": ["QWidget", "AngularService", "node_express_ws"],
|
|
46
|
+
"generate": ["QWidget", "AngularService", "VanillaTS", "VanillaJS", "node_express_ws"],
|
|
47
47
|
"widgetCategory": "AnQst Widgets"
|
|
48
48
|
}
|
|
49
49
|
```
|
|
@@ -63,6 +63,16 @@ Settings file (`./AnQst/<WidgetName>.settings.json`) owns project-local AnQst co
|
|
|
63
63
|
- Updates `tsconfig.json` (when present):
|
|
64
64
|
- `compilerOptions.paths["anqst-generated/*"] = ["AnQst/generated/frontend/<WidgetName>_Angular/*"]`
|
|
65
65
|
|
|
66
|
+
Available generate targets:
|
|
67
|
+
|
|
68
|
+
- Browser frontend targets:
|
|
69
|
+
- `AngularService`
|
|
70
|
+
- `VanillaTS`
|
|
71
|
+
- `VanillaJS`
|
|
72
|
+
- Backend targets:
|
|
73
|
+
- `QWidget`
|
|
74
|
+
- `node_express_ws`
|
|
75
|
+
|
|
66
76
|
- `anqst test`
|
|
67
77
|
- Loads settings from `package.json.AnQst`.
|
|
68
78
|
- Verifies the configured spec.
|
|
@@ -72,9 +82,11 @@ Settings file (`./AnQst/<WidgetName>.settings.json`) owns project-local AnQst co
|
|
|
72
82
|
- Verifies spec and regenerates selected targets.
|
|
73
83
|
- Writes only under `./AnQst/generated`.
|
|
74
84
|
- Removes selected target roots before regeneration (no stale generated files).
|
|
75
|
-
- If `QWidget` is enabled and `
|
|
76
|
-
- runs production Angular build
|
|
85
|
+
- If `QWidget` is enabled and a browser build output is present under project `dist/`:
|
|
77
86
|
- embeds built web assets into generated Qt widget `webapp/`.
|
|
87
|
+
- If `QWidget` is enabled and `angular.json` exists:
|
|
88
|
+
- `anqst build` may invoke a production Angular build before embedding.
|
|
89
|
+
- Browser bundle discovery is frontend-profile-neutral: Angular and Vanilla browser outputs are both expected to produce a dist tree containing `index.html`.
|
|
78
90
|
- Generated Qt integration CMake consumes the existing `./AnQst/generated` widget tree and fails fast if the required generated files are missing.
|
|
79
91
|
- Downstream CMake no longer invokes `npm`, `npx`, or `anqst`; run `anqst build` first, then build C++ against the generated tree.
|
|
80
92
|
- If `--designerplugin` is enabled:
|
|
@@ -106,6 +118,8 @@ Settings file (`./AnQst/<WidgetName>.settings.json`) owns project-local AnQst co
|
|
|
106
118
|
generated/
|
|
107
119
|
frontend/
|
|
108
120
|
<WidgetName>_Angular/
|
|
121
|
+
<WidgetName>_VanillaTS/
|
|
122
|
+
<WidgetName>_VanillaJS/
|
|
109
123
|
backend/
|
|
110
124
|
node/
|
|
111
125
|
express/
|
|
@@ -143,10 +157,37 @@ npx @dusted/anqst test
|
|
|
143
157
|
npx @dusted/anqst build
|
|
144
158
|
```
|
|
145
159
|
|
|
160
|
+
## Vanilla browser usage
|
|
161
|
+
|
|
162
|
+
Minimal browser-global usage for `VanillaJS`:
|
|
163
|
+
|
|
164
|
+
```html
|
|
165
|
+
<script src="./AnQst/generated/frontend/BurgerConstructor_VanillaJS/index.js"></script>
|
|
166
|
+
<script>
|
|
167
|
+
(async () => {
|
|
168
|
+
const frontend = await window.AnQstGenerated.widgets.BurgerConstructor.createFrontend();
|
|
169
|
+
const ok = await frontend.services.BurgerService.validateDraft({ name: "Classic" });
|
|
170
|
+
console.log(ok);
|
|
171
|
+
})();
|
|
172
|
+
</script>
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
TypeScript authors use the same runtime shape with typings from `VanillaTS`:
|
|
176
|
+
|
|
177
|
+
```ts
|
|
178
|
+
/// <reference path="./AnQst/generated/frontend/BurgerConstructor_VanillaTS/index.d.ts" />
|
|
179
|
+
|
|
180
|
+
async function boot() {
|
|
181
|
+
const frontend = await window.AnQstGenerated.widgets.BurgerConstructor.createFrontend();
|
|
182
|
+
const ok = await frontend.services.BurgerService.validateDraft({ name: "Classic" });
|
|
183
|
+
console.log(frontend.diagnostics.state(), ok);
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
146
187
|
## Two-stage workflow
|
|
147
188
|
|
|
148
189
|
```bash
|
|
149
|
-
# Stage 1:
|
|
190
|
+
# Stage 1: browser/backend/generation environment
|
|
150
191
|
npx @dusted/anqst build
|
|
151
192
|
|
|
152
193
|
# Stage 2: pure Qt/CMake environment, consuming the generated tree
|
package/dist/src/app.js
CHANGED
|
@@ -19,6 +19,12 @@ const project_1 = require("./project");
|
|
|
19
19
|
const layout_1 = require("./layout");
|
|
20
20
|
const parser_1 = require("./parser");
|
|
21
21
|
const verify_1 = require("./verify");
|
|
22
|
+
class CliUsageError extends Error {
|
|
23
|
+
constructor(message) {
|
|
24
|
+
super(message);
|
|
25
|
+
this.name = "CliUsageError";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
22
28
|
const ANQSTGEN_ACTIVE_STAMP_FILE = ".anqstgen-version-active.json";
|
|
23
29
|
function renderHelp() {
|
|
24
30
|
const version = readActiveBuildStamp();
|
|
@@ -59,7 +65,13 @@ function resetGeneratedTargets(cwd, widgetName, targets) {
|
|
|
59
65
|
const layout = (0, layout_1.resolveGeneratedLayoutPaths)(cwd, widgetName);
|
|
60
66
|
const roots = new Set();
|
|
61
67
|
if (targets.emitAngularService) {
|
|
62
|
-
roots.add(layout.
|
|
68
|
+
roots.add(layout.angularFrontendRoot);
|
|
69
|
+
}
|
|
70
|
+
if (targets.emitVanillaTS) {
|
|
71
|
+
roots.add(layout.vanillaTsFrontendRoot);
|
|
72
|
+
}
|
|
73
|
+
if (targets.emitVanillaJS) {
|
|
74
|
+
roots.add(layout.vanillaJsFrontendRoot);
|
|
63
75
|
}
|
|
64
76
|
if (targets.emitNodeExpressWs) {
|
|
65
77
|
roots.add(layout.nodeExpressRoot);
|
|
@@ -78,15 +90,19 @@ function resetGeneratedTargets(cwd, widgetName, targets) {
|
|
|
78
90
|
function buildGenerateSummary(cwd, specPath, widgetName, generationTargets) {
|
|
79
91
|
const layout = (0, layout_1.resolveGeneratedLayoutPaths)(cwd, widgetName);
|
|
80
92
|
const relativeSpecFile = (0, layout_1.normalizeSlashes)(node_path_1.default.relative(cwd, specPath));
|
|
81
|
-
const servicePath = (0, layout_1.toProjectRelative)(cwd, node_path_1.default.join(layout.frontendRoot, "services"));
|
|
82
|
-
const typePath = (0, layout_1.toProjectRelative)(cwd, node_path_1.default.join(layout.frontendRoot, "types"));
|
|
83
93
|
const widgetRootPath = (0, layout_1.toProjectRelative)(cwd, layout.cppQtWidgetRoot);
|
|
84
94
|
const nodePath = (0, layout_1.toProjectRelative)(cwd, layout.nodeExpressRoot);
|
|
85
95
|
const messageLines = [];
|
|
86
96
|
messageLines.push(`AnQst spec ${relativeSpecFile} built.`);
|
|
87
97
|
if (generationTargets.emitAngularService) {
|
|
88
|
-
messageLines.push(`
|
|
89
|
-
messageLines.push(`
|
|
98
|
+
messageLines.push(` Angular services are available from ${(0, layout_1.toProjectRelative)(cwd, node_path_1.default.join(layout.angularFrontendRoot, "services"))}.`);
|
|
99
|
+
messageLines.push(` Angular generated types are available from ${(0, layout_1.toProjectRelative)(cwd, node_path_1.default.join(layout.angularFrontendRoot, "types"))}.`);
|
|
100
|
+
}
|
|
101
|
+
if (generationTargets.emitVanillaTS) {
|
|
102
|
+
messageLines.push(` VanillaTS browser bundle is available from ${(0, layout_1.toProjectRelative)(cwd, layout.vanillaTsFrontendRoot)}.`);
|
|
103
|
+
}
|
|
104
|
+
if (generationTargets.emitVanillaJS) {
|
|
105
|
+
messageLines.push(` VanillaJS browser bundle is available from ${(0, layout_1.toProjectRelative)(cwd, layout.vanillaJsFrontendRoot)}.`);
|
|
90
106
|
}
|
|
91
107
|
if (generationTargets.emitQWidget) {
|
|
92
108
|
messageLines.push(` Widget library available in ${widgetRootPath}.`);
|
|
@@ -94,7 +110,11 @@ function buildGenerateSummary(cwd, specPath, widgetName, generationTargets) {
|
|
|
94
110
|
if (generationTargets.emitNodeExpressWs) {
|
|
95
111
|
messageLines.push(` Node Express WS module available in ${nodePath}.`);
|
|
96
112
|
}
|
|
97
|
-
if (!generationTargets.emitAngularService
|
|
113
|
+
if (!generationTargets.emitAngularService
|
|
114
|
+
&& !generationTargets.emitVanillaTS
|
|
115
|
+
&& !generationTargets.emitVanillaJS
|
|
116
|
+
&& !generationTargets.emitQWidget
|
|
117
|
+
&& !generationTargets.emitNodeExpressWs) {
|
|
98
118
|
messageLines.push(" No outputs selected by AnQst.generate.");
|
|
99
119
|
}
|
|
100
120
|
return `\n${messageLines.join("\n")}\n`;
|
|
@@ -211,8 +231,8 @@ function runBuild(cwd, designerPlugin = false) {
|
|
|
211
231
|
if (generationTargets.emitQWidget) {
|
|
212
232
|
(0, emit_1.installQtIntegrationCMake)(cwd, parsed.widgetName);
|
|
213
233
|
}
|
|
214
|
-
const
|
|
215
|
-
if (
|
|
234
|
+
const shouldRunAngularBuild = generationTargets.emitQWidget && node_fs_1.default.existsSync(node_path_1.default.join(cwd, "angular.json"));
|
|
235
|
+
if (shouldRunAngularBuild) {
|
|
216
236
|
const angularBuild = (0, node_child_process_1.spawnSync)("npx", ["ng", "build", "--configuration", "production"], {
|
|
217
237
|
cwd,
|
|
218
238
|
stdio: "inherit",
|
|
@@ -224,8 +244,8 @@ function runBuild(cwd, designerPlugin = false) {
|
|
|
224
244
|
}
|
|
225
245
|
if (generationTargets.emitQWidget) {
|
|
226
246
|
const embedded = (0, emit_1.installEmbeddedWebBundle)(cwd, parsed.widgetName);
|
|
227
|
-
if (
|
|
228
|
-
throw new errors_1.VerifyError("Unable to embed
|
|
247
|
+
if (shouldRunAngularBuild && !embedded) {
|
|
248
|
+
throw new errors_1.VerifyError("Unable to embed browser output. Ensure the browser build produced a dist bundle with index.html.");
|
|
229
249
|
}
|
|
230
250
|
}
|
|
231
251
|
let designerPluginBuilt = false;
|
|
@@ -240,7 +260,11 @@ function runBuild(cwd, designerPlugin = false) {
|
|
|
240
260
|
designerPluginBuilt = true;
|
|
241
261
|
}
|
|
242
262
|
}
|
|
243
|
-
if (!generationTargets.emitAngularService
|
|
263
|
+
if (!generationTargets.emitAngularService
|
|
264
|
+
&& !generationTargets.emitVanillaTS
|
|
265
|
+
&& !generationTargets.emitVanillaJS
|
|
266
|
+
&& !generationTargets.emitQWidget
|
|
267
|
+
&& !generationTargets.emitNodeExpressWs) {
|
|
244
268
|
return {
|
|
245
269
|
success: true,
|
|
246
270
|
message: [
|
|
@@ -254,15 +278,25 @@ function runBuild(cwd, designerPlugin = false) {
|
|
|
254
278
|
const detailLines = [];
|
|
255
279
|
if (generationTargets.emitAngularService) {
|
|
256
280
|
detailLines.push(" Target AngularService:");
|
|
257
|
-
detailLines.push(` - Services output: ${(0, layout_1.toProjectRelative)(cwd, node_path_1.default.join(layout.
|
|
258
|
-
detailLines.push(` - Types output: ${(0, layout_1.toProjectRelative)(cwd, node_path_1.default.join(layout.
|
|
281
|
+
detailLines.push(` - Services output: ${(0, layout_1.toProjectRelative)(cwd, node_path_1.default.join(layout.angularFrontendRoot, "services"))}`);
|
|
282
|
+
detailLines.push(` - Types output: ${(0, layout_1.toProjectRelative)(cwd, node_path_1.default.join(layout.angularFrontendRoot, "types"))}`);
|
|
283
|
+
}
|
|
284
|
+
if (generationTargets.emitVanillaTS) {
|
|
285
|
+
detailLines.push(" Target VanillaTS:");
|
|
286
|
+
detailLines.push(` - Browser bundle root: ${(0, layout_1.toProjectRelative)(cwd, layout.vanillaTsFrontendRoot)}`);
|
|
287
|
+
detailLines.push(` - Browser global: window.AnQstGenerated.widgets.${parsed.widgetName}`);
|
|
288
|
+
}
|
|
289
|
+
if (generationTargets.emitVanillaJS) {
|
|
290
|
+
detailLines.push(" Target VanillaJS:");
|
|
291
|
+
detailLines.push(` - Browser bundle root: ${(0, layout_1.toProjectRelative)(cwd, layout.vanillaJsFrontendRoot)}`);
|
|
292
|
+
detailLines.push(` - Browser global: window.AnQstGenerated.widgets.${parsed.widgetName}`);
|
|
259
293
|
}
|
|
260
294
|
if (generationTargets.emitQWidget) {
|
|
261
295
|
detailLines.push(" Target QWidget:");
|
|
262
296
|
detailLines.push(` - Qt integration CMake: ${(0, layout_1.toProjectRelative)(cwd, node_path_1.default.join(layout.cppCmakeRoot, "CMakeLists.txt"))}`);
|
|
263
297
|
detailLines.push(` - Widget output root: ${(0, layout_1.toProjectRelative)(cwd, layout.cppQtWidgetRoot)}`);
|
|
264
298
|
detailLines.push(" - C++ handoff: downstream CMake consumes this generated tree directly");
|
|
265
|
-
detailLines.push(" - Embedded web assets refreshed from
|
|
299
|
+
detailLines.push(" - Embedded web assets refreshed from detected browser dist output");
|
|
266
300
|
}
|
|
267
301
|
if (generationTargets.emitNodeExpressWs) {
|
|
268
302
|
detailLines.push(" Target node_express_ws:");
|
|
@@ -296,12 +330,12 @@ function parseSpecCommandArg(commandName, specArg, extraArgs) {
|
|
|
296
330
|
const positional = [];
|
|
297
331
|
for (const arg of allArgs) {
|
|
298
332
|
if (arg.startsWith("-")) {
|
|
299
|
-
throw new
|
|
333
|
+
throw new CliUsageError(`Unknown ${commandName} flag '${arg}'. ${usageFor(commandName)}`);
|
|
300
334
|
}
|
|
301
335
|
positional.push(arg);
|
|
302
336
|
}
|
|
303
337
|
if (positional.length !== 1) {
|
|
304
|
-
throw new
|
|
338
|
+
throw new CliUsageError(usageFor(commandName));
|
|
305
339
|
}
|
|
306
340
|
return positional[0];
|
|
307
341
|
}
|
|
@@ -328,12 +362,12 @@ function parseBuildCommandArgs(specArg, extraArgs) {
|
|
|
328
362
|
continue;
|
|
329
363
|
}
|
|
330
364
|
if (arg.startsWith("-")) {
|
|
331
|
-
throw new
|
|
365
|
+
throw new CliUsageError(`Unknown build flag '${arg}'. ${usageFor("build")}`);
|
|
332
366
|
}
|
|
333
367
|
positional.push(arg);
|
|
334
368
|
}
|
|
335
369
|
if (positional.length > 0) {
|
|
336
|
-
throw new
|
|
370
|
+
throw new CliUsageError(`Unexpected extra argument '${positional[0]}'. ${usageFor("build")}`);
|
|
337
371
|
}
|
|
338
372
|
return { designerPlugin };
|
|
339
373
|
}
|
|
@@ -347,15 +381,15 @@ function parseCleanCommandArgs(specArg, extraArgs) {
|
|
|
347
381
|
continue;
|
|
348
382
|
}
|
|
349
383
|
if (arg.startsWith("-")) {
|
|
350
|
-
throw new
|
|
384
|
+
throw new CliUsageError(`Unknown clean flag '${arg}'. Use -f or --force.`);
|
|
351
385
|
}
|
|
352
386
|
if (targetPathArg !== null) {
|
|
353
|
-
throw new
|
|
387
|
+
throw new CliUsageError(`Unexpected extra argument '${arg}'. Usage: anqst clean <path> [-f|--force]`);
|
|
354
388
|
}
|
|
355
389
|
targetPathArg = arg;
|
|
356
390
|
}
|
|
357
391
|
if (targetPathArg === null) {
|
|
358
|
-
throw new
|
|
392
|
+
throw new CliUsageError("Usage: anqst clean <path> [-f|--force]");
|
|
359
393
|
}
|
|
360
394
|
return { targetPathArg, force };
|
|
361
395
|
}
|
|
@@ -430,6 +464,8 @@ function toGenerationTargets(targets) {
|
|
|
430
464
|
return {
|
|
431
465
|
emitQWidget: targets.includes("QWidget"),
|
|
432
466
|
emitAngularService: targets.includes("AngularService"),
|
|
467
|
+
emitVanillaTS: targets.includes("VanillaTS"),
|
|
468
|
+
emitVanillaJS: targets.includes("VanillaJS"),
|
|
433
469
|
emitNodeExpressWs: targets.includes("node_express_ws")
|
|
434
470
|
};
|
|
435
471
|
}
|
|
@@ -446,7 +482,9 @@ function runClean(pathArg, force) {
|
|
|
446
482
|
const context = (0, project_1.resolveAnQstSettings)(targetRoot);
|
|
447
483
|
const layout = (0, layout_1.resolveGeneratedLayoutPaths)(targetRoot, context.settings.widgetName);
|
|
448
484
|
const widgetDirs = [
|
|
449
|
-
(0, layout_1.normalizeSlashes)(node_path_1.default.relative(targetRoot, layout.
|
|
485
|
+
(0, layout_1.normalizeSlashes)(node_path_1.default.relative(targetRoot, layout.angularFrontendRoot)),
|
|
486
|
+
(0, layout_1.normalizeSlashes)(node_path_1.default.relative(targetRoot, layout.vanillaTsFrontendRoot)),
|
|
487
|
+
(0, layout_1.normalizeSlashes)(node_path_1.default.relative(targetRoot, layout.vanillaJsFrontendRoot)),
|
|
450
488
|
(0, layout_1.normalizeSlashes)(node_path_1.default.relative(targetRoot, layout.nodeExpressRoot)),
|
|
451
489
|
(0, layout_1.normalizeSlashes)(node_path_1.default.relative(targetRoot, layout.cppQtWidgetRoot)),
|
|
452
490
|
(0, layout_1.normalizeSlashes)(node_path_1.default.relative(targetRoot, layout.cppCmakeRoot)),
|
|
@@ -476,6 +514,19 @@ function renderInstallAliasMessage() {
|
|
|
476
514
|
return text;
|
|
477
515
|
return `\x1b[38;5;214m${text}\x1b[0m`;
|
|
478
516
|
}
|
|
517
|
+
function formatUnexpectedError(error) {
|
|
518
|
+
if (!(error instanceof Error)) {
|
|
519
|
+
return `[AnQst] ${String(error)}`;
|
|
520
|
+
}
|
|
521
|
+
const lines = [`[AnQst] ${error.message}`];
|
|
522
|
+
const stack = typeof error.stack === "string" ? error.stack.trim() : "";
|
|
523
|
+
if (stack.length > 0) {
|
|
524
|
+
lines.push("");
|
|
525
|
+
lines.push("Stack trace:");
|
|
526
|
+
lines.push(stack);
|
|
527
|
+
}
|
|
528
|
+
return lines.join("\n");
|
|
529
|
+
}
|
|
479
530
|
function runCommand(command, specArg, extraArgs = []) {
|
|
480
531
|
try {
|
|
481
532
|
if (!command) {
|
|
@@ -545,8 +596,11 @@ function runCommand(command, specArg, extraArgs = []) {
|
|
|
545
596
|
console.error((0, errors_1.formatVerifyError)(error));
|
|
546
597
|
return 1;
|
|
547
598
|
}
|
|
548
|
-
|
|
549
|
-
|
|
599
|
+
if (error instanceof CliUsageError) {
|
|
600
|
+
console.error(error.message);
|
|
601
|
+
return 1;
|
|
602
|
+
}
|
|
603
|
+
console.error(formatUnexpectedError(error));
|
|
550
604
|
return 1;
|
|
551
605
|
}
|
|
552
606
|
}
|
package/dist/src/base93.js
CHANGED
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BASE93_ALPHABET = void 0;
|
|
4
4
|
exports.emitBase93Encoder = emitBase93Encoder;
|
|
5
5
|
exports.emitBase93Decoder = emitBase93Decoder;
|
|
6
|
-
exports.emitBase93CppFunctions = emitBase93CppFunctions;
|
|
7
6
|
exports.BASE93_ALPHABET = Array.from({ length: 95 }, (_, i) => String.fromCharCode(0x20 + i))
|
|
8
7
|
.filter(c => c !== '"' && c !== '\\')
|
|
9
8
|
.join('');
|
|
@@ -51,74 +50,3 @@ for (i = r - 2; i >= 0; i--) { o[p + i] = v & 255; v = (v / 256) | 0; }
|
|
|
51
50
|
return o;
|
|
52
51
|
}`;
|
|
53
52
|
}
|
|
54
|
-
function emitBase93CppFunctions() {
|
|
55
|
-
return `inline int base93AlphabetIndex(char c) {
|
|
56
|
-
const unsigned char uc = static_cast<unsigned char>(c);
|
|
57
|
-
return static_cast<int>(uc) - 32 - (uc > 34) - (uc > 92);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
inline std::string base93Encode(const std::vector<std::uint8_t>& d) {
|
|
61
|
-
static constexpr char A[] = "${exports.BASE93_ALPHABET}";
|
|
62
|
-
const std::size_t n = d.size();
|
|
63
|
-
const std::size_t f = n >> 2;
|
|
64
|
-
const std::size_t r = n & 3;
|
|
65
|
-
std::string o(f * 5 + (r ? r + 1 : 0), '\\0');
|
|
66
|
-
std::size_t p = 0;
|
|
67
|
-
for (std::size_t i = 0; i < f; ++i) {
|
|
68
|
-
const std::size_t b = i << 2;
|
|
69
|
-
std::uint32_t v =
|
|
70
|
-
(static_cast<std::uint32_t>(d[b]) << 24) |
|
|
71
|
-
(static_cast<std::uint32_t>(d[b + 1]) << 16) |
|
|
72
|
-
(static_cast<std::uint32_t>(d[b + 2]) << 8) |
|
|
73
|
-
static_cast<std::uint32_t>(d[b + 3]);
|
|
74
|
-
o[p + 4] = A[v % 93u]; v /= 93u;
|
|
75
|
-
o[p + 3] = A[v % 93u]; v /= 93u;
|
|
76
|
-
o[p + 2] = A[v % 93u]; v /= 93u;
|
|
77
|
-
o[p + 1] = A[v % 93u];
|
|
78
|
-
o[p] = A[v / 93u];
|
|
79
|
-
p += 5;
|
|
80
|
-
}
|
|
81
|
-
if (r) {
|
|
82
|
-
const std::size_t b = f << 2;
|
|
83
|
-
std::uint32_t v = 0;
|
|
84
|
-
for (std::size_t j = 0; j < r; ++j) v = (v << 8) | d[b + j];
|
|
85
|
-
for (std::size_t j = r + 1; j-- > 0;) {
|
|
86
|
-
o[p + j] = A[v % 93u];
|
|
87
|
-
v /= 93u;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return o;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
inline std::vector<std::uint8_t> base93Decode(const std::string& s) {
|
|
94
|
-
const std::size_t n = s.size();
|
|
95
|
-
const std::size_t f = n / 5;
|
|
96
|
-
const std::size_t r = n - f * 5;
|
|
97
|
-
std::vector<std::uint8_t> o(f * 4 + (r ? r - 1 : 0));
|
|
98
|
-
std::size_t p = 0;
|
|
99
|
-
for (std::size_t i = 0; i < f; ++i) {
|
|
100
|
-
const std::size_t b = i * 5;
|
|
101
|
-
std::uint32_t v = static_cast<std::uint32_t>(base93AlphabetIndex(s[b]));
|
|
102
|
-
v = v * 93u + static_cast<std::uint32_t>(base93AlphabetIndex(s[b + 1]));
|
|
103
|
-
v = v * 93u + static_cast<std::uint32_t>(base93AlphabetIndex(s[b + 2]));
|
|
104
|
-
v = v * 93u + static_cast<std::uint32_t>(base93AlphabetIndex(s[b + 3]));
|
|
105
|
-
v = v * 93u + static_cast<std::uint32_t>(base93AlphabetIndex(s[b + 4]));
|
|
106
|
-
o[p] = static_cast<std::uint8_t>(v >> 24);
|
|
107
|
-
o[p + 1] = static_cast<std::uint8_t>((v >> 16) & 255u);
|
|
108
|
-
o[p + 2] = static_cast<std::uint8_t>((v >> 8) & 255u);
|
|
109
|
-
o[p + 3] = static_cast<std::uint8_t>(v & 255u);
|
|
110
|
-
p += 4;
|
|
111
|
-
}
|
|
112
|
-
if (r) {
|
|
113
|
-
std::uint32_t v = 0;
|
|
114
|
-
for (std::size_t i = 0; i < r; ++i) {
|
|
115
|
-
v = v * 93u + static_cast<std::uint32_t>(base93AlphabetIndex(s[f * 5 + i]));
|
|
116
|
-
}
|
|
117
|
-
for (std::size_t i = r - 1; i-- > 0;) {
|
|
118
|
-
o[p + i] = static_cast<std::uint8_t>(v & 255u);
|
|
119
|
-
v /= 256u;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
return o;
|
|
123
|
-
}`;
|
|
124
|
-
}
|