@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/dist/src/layout.js
CHANGED
|
@@ -41,8 +41,12 @@ function anqstSettingsFileName(widgetName) {
|
|
|
41
41
|
function anqstSettingsRelativePath(widgetName) {
|
|
42
42
|
return `./${exports.ANQST_ROOT_DIRNAME}/${anqstSettingsFileName(widgetName)}`;
|
|
43
43
|
}
|
|
44
|
-
function generatedFrontendDirName(widgetName) {
|
|
45
|
-
|
|
44
|
+
function generatedFrontendDirName(widgetName, target) {
|
|
45
|
+
if (target === "AngularService")
|
|
46
|
+
return `${widgetName}_Angular`;
|
|
47
|
+
if (target === "VanillaTS")
|
|
48
|
+
return `${widgetName}_VanillaTS`;
|
|
49
|
+
return `${widgetName}_VanillaJS`;
|
|
46
50
|
}
|
|
47
51
|
function generatedNodeExpressDirName(widgetName) {
|
|
48
52
|
return `${widgetName}_anQst`;
|
|
@@ -56,7 +60,9 @@ function resolveGeneratedLayoutPaths(cwd, widgetName) {
|
|
|
56
60
|
const designerPluginRoot = node_path_1.default.join(cppQtWidgetRoot, "designerPlugin");
|
|
57
61
|
return {
|
|
58
62
|
generatedRoot,
|
|
59
|
-
|
|
63
|
+
angularFrontendRoot: node_path_1.default.join(generatedRoot, "frontend", generatedFrontendDirName(widgetName, "AngularService")),
|
|
64
|
+
vanillaTsFrontendRoot: node_path_1.default.join(generatedRoot, "frontend", generatedFrontendDirName(widgetName, "VanillaTS")),
|
|
65
|
+
vanillaJsFrontendRoot: node_path_1.default.join(generatedRoot, "frontend", generatedFrontendDirName(widgetName, "VanillaJS")),
|
|
60
66
|
nodeExpressRoot: node_path_1.default.join(generatedRoot, "backend", "node", "express", generatedNodeExpressDirName(widgetName)),
|
|
61
67
|
cppCmakeRoot: node_path_1.default.join(generatedRoot, "backend", "cpp", "cmake"),
|
|
62
68
|
cppQtWidgetRoot,
|
package/dist/src/program.js
CHANGED
|
@@ -81,7 +81,7 @@ function readTsConfigFrom(specPath) {
|
|
|
81
81
|
function createTscProgramContext(specPath) {
|
|
82
82
|
const absoluteSpecPath = node_path_1.default.resolve(specPath);
|
|
83
83
|
const tsConfig = readTsConfigFrom(absoluteSpecPath);
|
|
84
|
-
const rootNames =
|
|
84
|
+
const rootNames = [absoluteSpecPath];
|
|
85
85
|
const options = tsConfig?.options ?? {
|
|
86
86
|
target: typescript_1.default.ScriptTarget.ES2022,
|
|
87
87
|
module: typescript_1.default.ModuleKind.CommonJS,
|
package/dist/src/project.js
CHANGED
|
@@ -16,7 +16,7 @@ const node_fs_1 = __importDefault(require("node:fs"));
|
|
|
16
16
|
const node_path_1 = __importDefault(require("node:path"));
|
|
17
17
|
const errors_1 = require("./errors");
|
|
18
18
|
const layout_1 = require("./layout");
|
|
19
|
-
exports.DEFAULT_ANQST_GENERATE_TARGETS = ["QWidget", "AngularService", "node_express_ws"];
|
|
19
|
+
exports.DEFAULT_ANQST_GENERATE_TARGETS = ["QWidget", "AngularService", "VanillaTS", "VanillaJS", "node_express_ws"];
|
|
20
20
|
const ANQST_DSL_IMPORT_LINE = 'import type { AnQst } from "@dusted/anqst";';
|
|
21
21
|
const ANQST_BUILD_HOOK = "npx anqst build";
|
|
22
22
|
function readJsonFile(filePath) {
|
|
@@ -153,7 +153,7 @@ function updateTsConfig(cwd, widgetName) {
|
|
|
153
153
|
? {}
|
|
154
154
|
: ensureObject(compilerOptions.paths, "Invalid tsconfig.json: expected object at 'compilerOptions.paths'.");
|
|
155
155
|
compilerOptions.paths = pathsObject;
|
|
156
|
-
const generatedAliasPath = `AnQst/generated/frontend/${(0, layout_1.generatedFrontendDirName)(widgetName)}/*`;
|
|
156
|
+
const generatedAliasPath = `AnQst/generated/frontend/${(0, layout_1.generatedFrontendDirName)(widgetName, "AngularService")}/*`;
|
|
157
157
|
const existingAlias = pathsObject["anqst-generated/*"];
|
|
158
158
|
const aliasList = Array.isArray(existingAlias)
|
|
159
159
|
? existingAlias.filter((entry) => typeof entry === "string")
|
|
@@ -164,7 +164,7 @@ function updateTsConfig(cwd, widgetName) {
|
|
|
164
164
|
pathsObject["anqst-generated/*"] = [...new Set(aliasList)];
|
|
165
165
|
if (Array.isArray(tsConfig.include)) {
|
|
166
166
|
const includeList = tsConfig.include.filter((entry) => typeof entry === "string");
|
|
167
|
-
const generatedTypesPattern = `AnQst/generated/frontend/${(0, layout_1.generatedFrontendDirName)(widgetName)}/**/*.d.ts`;
|
|
167
|
+
const generatedTypesPattern = `AnQst/generated/frontend/${(0, layout_1.generatedFrontendDirName)(widgetName, "AngularService")}/**/*.d.ts`;
|
|
168
168
|
if (!includeList.includes(generatedTypesPattern)) {
|
|
169
169
|
includeList.push(generatedTypesPattern);
|
|
170
170
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dusted/anqst",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "Opinionated backend generator for webapps.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nodejs",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"build": "node scripts/build-with-stamp.js",
|
|
48
48
|
"build:test": "npm run clean && tsc -p tsconfig.json && npm run chmod:bin",
|
|
49
49
|
"prepare": "npm run build",
|
|
50
|
-
"test": "npm run build:test && node --test dist/test
|
|
50
|
+
"test": "npm run build:test && node --test dist/test/*.test.js",
|
|
51
51
|
"start": "node dist/src/bin/anqst.js"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
package/spec/AnQst-Spec-DSL.d.ts
CHANGED
|
@@ -31,13 +31,15 @@ export namespace AnQst {
|
|
|
31
31
|
interface Service { }
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
|
-
* Declare service `InterfaceName` as development-mode capable transport service.
|
|
34
|
+
* Declare service `InterfaceName` as development-mode capable browser transport service.
|
|
35
35
|
*
|
|
36
36
|
* @remarks
|
|
37
37
|
* - Extends the same method/property semantics as `AnQst.Service`.
|
|
38
|
-
* - Signals to the generator/runtime that this widget should emit dual-transport bridge support
|
|
38
|
+
* - Signals to the generator/runtime that this widget should emit dual-transport browser bridge support
|
|
39
39
|
* (Qt WebChannel + HTTP/WebSocket development bridge).
|
|
40
40
|
* - Existing generated service APIs remain unchanged.
|
|
41
|
+
* - The name is historical. The capability applies to browser frontend profiles generally,
|
|
42
|
+
* not only Angular-specific generation.
|
|
41
43
|
*
|
|
42
44
|
* @example
|
|
43
45
|
* export interface UserService extends AnQst.AngularHTTPBaseServerClass { }
|
|
@@ -63,7 +65,7 @@ export namespace AnQst {
|
|
|
63
65
|
* @example
|
|
64
66
|
* // AnQst spec:
|
|
65
67
|
* getUserById(userId: string): AnQst.Call<User>
|
|
66
|
-
* //
|
|
68
|
+
* //Browser app:
|
|
67
69
|
* const user: User = await this.userService.getUserById("abc");
|
|
68
70
|
*/
|
|
69
71
|
interface Call<T, Config extends CallConfig = {}> { dummy: T; config?: Config }
|
|
@@ -89,7 +91,7 @@ export namespace AnQst {
|
|
|
89
91
|
* @example
|
|
90
92
|
* // AnQst spec:
|
|
91
93
|
* getUsernameSubstring(from: number, to:number ): AnQst.Slot<string>
|
|
92
|
-
* //
|
|
94
|
+
* //Browser app:
|
|
93
95
|
* this.userService.onSlot.getUsername( provider );
|
|
94
96
|
* //Parent:
|
|
95
97
|
* auto currentFormUsername = userMgmt.getUsername();
|
|
@@ -111,7 +113,7 @@ export namespace AnQst {
|
|
|
111
113
|
* @example
|
|
112
114
|
* // AnQst spec:
|
|
113
115
|
* complain(whine: string): AnQst.Emitter;
|
|
114
|
-
* //
|
|
116
|
+
* //Browser app:
|
|
115
117
|
* this.userService.complain("Why won't you LISTEN!");
|
|
116
118
|
*/
|
|
117
119
|
interface Emitter { }
|
|
@@ -121,14 +123,14 @@ export namespace AnQst {
|
|
|
121
123
|
* Declare reactive `PropertyName`:`OutputType` and set.`PropertyName`(arg: `OutputType`)
|
|
122
124
|
* @remarks
|
|
123
125
|
* - **Parent** -> Widget
|
|
124
|
-
* True
|
|
126
|
+
* True frontend reactive semantics (Property updates, accessor reflects latest value, no return path, no registration requirement)
|
|
125
127
|
* - Flow:
|
|
126
128
|
* - Parent: Sets generated widget property `PropertyName`.
|
|
127
129
|
* - Widget: Service updates readonly property `PropertyName` and emits signal.
|
|
128
130
|
* @example
|
|
129
131
|
* // AnQst spec:
|
|
130
132
|
* activeUsers: AnQst.Output<number>;
|
|
131
|
-
* //
|
|
133
|
+
* //Browser app:
|
|
132
134
|
* <p>{{ userService.activeUsers() }}</p>
|
|
133
135
|
* //Parent:
|
|
134
136
|
* int users = userMgmt.activeUsers;
|
|
@@ -148,7 +150,7 @@ export namespace AnQst {
|
|
|
148
150
|
* @example
|
|
149
151
|
* // AnQst spec:
|
|
150
152
|
* currentUsername: AnQst.Input<string>;
|
|
151
|
-
* //
|
|
153
|
+
* //Browser app:
|
|
152
154
|
* <input type="text" placeholder="Your Name Here" (input)="userService.set.currentUsername(($event.target as HTMLInputElement).value)" />
|
|
153
155
|
* //Parent:
|
|
154
156
|
* QString userName = userMgmt.currentUsername;
|
|
@@ -160,15 +162,15 @@ export namespace AnQst {
|
|
|
160
162
|
* Declare drop-target `PropertyName`:`PayloadType`
|
|
161
163
|
* @remarks
|
|
162
164
|
* - **Parent** -> Widget (framework-mediated)
|
|
163
|
-
* - True
|
|
165
|
+
* - True frontend reactive semantics.
|
|
164
166
|
* - Flow:
|
|
165
167
|
* - External: A Qt widget initiates a QDrag carrying QMimeData.
|
|
166
168
|
* - Parent: AnQstWebHostBase intercepts the drop via event filter on the
|
|
167
169
|
* embedded QWebEngineView's rendering surface.
|
|
168
170
|
* - Parent: QMimeData for the accepted format is deserialized from a JSON
|
|
169
171
|
* array of normalized AnQst wire items and forwarded through the bridge.
|
|
170
|
-
* - Widget: Service updates
|
|
171
|
-
* payload and drop coordinates.
|
|
172
|
+
* - Widget: Service updates the generated accessor for `PropertyName` with the deserialized
|
|
173
|
+
* payload and drop coordinates. Browser application code reacts through the generated frontend API.
|
|
172
174
|
* - MIME type is convention-derived: `application/anqst-dragdropevent_<ServiceName>-<TypeName>`.
|
|
173
175
|
* - The source QWidget must serialize the generated AnQst wire payload as a
|
|
174
176
|
* JSON array under the same MIME type. Generated Qt widgets expose helper
|
|
@@ -178,11 +180,9 @@ export namespace AnQst {
|
|
|
178
180
|
* @example
|
|
179
181
|
* // AnQst spec:
|
|
180
182
|
* trackDropped: AnQst.DropTarget<Track>;
|
|
181
|
-
* //
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
* if (drop !== null) { console.log(drop.payload, drop.x, drop.y); }
|
|
185
|
-
* });
|
|
183
|
+
* // Browser app:
|
|
184
|
+
* const drop = frontend.services.DragService.trackDropped();
|
|
185
|
+
* if (drop !== null) { console.log(drop.payload, drop.x, drop.y); }
|
|
186
186
|
*/
|
|
187
187
|
interface DropTarget<T> { dummy: T }
|
|
188
188
|
|
|
@@ -191,7 +191,7 @@ export namespace AnQst {
|
|
|
191
191
|
* Declare hover-target `PropertyName`:`PayloadType`
|
|
192
192
|
* @remarks
|
|
193
193
|
* - **Parent** -> Widget (framework-mediated)
|
|
194
|
-
* - True
|
|
194
|
+
* - True frontend reactive semantics.
|
|
195
195
|
* - Flow:
|
|
196
196
|
* - External: A Qt widget initiates a QDrag carrying QMimeData.
|
|
197
197
|
* - Parent: AnQstWebHostBase intercepts drag-move events via event filter on the
|
|
@@ -199,8 +199,8 @@ export namespace AnQst {
|
|
|
199
199
|
* - Parent: Payload is deserialized once on DragEnter from a JSON array of
|
|
200
200
|
* normalized AnQst wire items; subsequent DragMove events forward only
|
|
201
201
|
* the updated position.
|
|
202
|
-
* - Widget: Service updates
|
|
203
|
-
* coordinates.
|
|
202
|
+
* - Widget: Service updates the generated accessor for `PropertyName` with the payload and current
|
|
203
|
+
* coordinates. The accessor becomes null on DragLeave.
|
|
204
204
|
* - Shares the same MIME type convention as DropTarget: `application/anqst-dragdropevent_<ServiceName>-<TypeName>`.
|
|
205
205
|
* - A HoverTarget without a corresponding DropTarget means "show previews but reject the drop".
|
|
206
206
|
* - Optional config supports throttle tuning:
|
|
@@ -217,11 +217,9 @@ export namespace AnQst {
|
|
|
217
217
|
* trackHovering: AnQst.HoverTarget<Track, { maxRateHz: 10 }>;
|
|
218
218
|
* // AnQst spec (no throttling):
|
|
219
219
|
* trackHovering: AnQst.HoverTarget<Track, { maxRateHz: 0 }>;
|
|
220
|
-
* //
|
|
221
|
-
*
|
|
222
|
-
*
|
|
223
|
-
* if (hover !== null) { highlight(document.elementFromPoint(hover.x, hover.y)); }
|
|
224
|
-
* });
|
|
220
|
+
* // Browser app:
|
|
221
|
+
* const hover = frontend.services.DragService.trackHovering();
|
|
222
|
+
* if (hover !== null) { highlight(document.elementFromPoint(hover.x, hover.y)); }
|
|
225
223
|
*/
|
|
226
224
|
|
|
227
225
|
/**
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Base codec emitter: AnQst.Type.qint64 — TypeScript decoder (standalone base93 string → bigint).
|
|
4
|
-
*
|
|
5
|
-
* - Decodes base93 to 8 bytes, then reads signed 64-bit two's complement via BigInt64Array.
|
|
6
|
-
* - C++ decoder uses memcpy from decoded bytes into qint64 (see emitCppDecoder).
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.decoderEmitter = exports.descriptor = void 0;
|
|
10
|
-
const fixedwidth_1 = require("../shared/fixedwidth");
|
|
11
|
-
const FIXED_WIDTH = {
|
|
12
|
-
byteWidth: 8,
|
|
13
|
-
tsViewCtor: "BigInt64Array",
|
|
14
|
-
cppType: "qint64"
|
|
15
|
-
};
|
|
16
|
-
exports.descriptor = {
|
|
17
|
-
codecId: "bigint-qint64",
|
|
18
|
-
specPath: "RefinedSpecs/Codecs/BigInt_qint64_Codec.md",
|
|
19
|
-
tsType: "bigint",
|
|
20
|
-
cppType: "qint64",
|
|
21
|
-
wireCategory: "fixed-width-scalar",
|
|
22
|
-
strategySummary: "Decode standalone base93 to 8 bytes, reinterpret as qint64 / BigInt64Array[0] as bigint.",
|
|
23
|
-
fixedWidth: FIXED_WIDTH
|
|
24
|
-
};
|
|
25
|
-
const TS_FN = "decodeQint64Standalone";
|
|
26
|
-
const CPP_FN = "decodeQint64Standalone";
|
|
27
|
-
exports.decoderEmitter = {
|
|
28
|
-
descriptor: exports.descriptor,
|
|
29
|
-
emitTsDecoder() {
|
|
30
|
-
return (0, fixedwidth_1.emitTsFixedWidthStandaloneDecoder)(TS_FN, FIXED_WIDTH);
|
|
31
|
-
},
|
|
32
|
-
emitCppDecoder() {
|
|
33
|
-
return (0, fixedwidth_1.emitCppFixedWidthStandaloneDecoder)(CPP_FN, FIXED_WIDTH);
|
|
34
|
-
}
|
|
35
|
-
};
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Base codec emitter: AnQst.Type.qint64 — TypeScript encoder (bigint → standalone base93 string).
|
|
4
|
-
*
|
|
5
|
-
* - 8-byte signed two's complement via BigInt64Array; platform-native byte order.
|
|
6
|
-
* - Standalone wire: one base93 string (10 characters for 8 bytes).
|
|
7
|
-
* - C++ side mirrors layout with memcpy into qint64 (see emitCppEncoder).
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.encoderEmitter = exports.descriptor = void 0;
|
|
11
|
-
const fixedwidth_1 = require("../shared/fixedwidth");
|
|
12
|
-
const FIXED_WIDTH = {
|
|
13
|
-
byteWidth: 8,
|
|
14
|
-
tsViewCtor: "BigInt64Array",
|
|
15
|
-
cppType: "qint64"
|
|
16
|
-
};
|
|
17
|
-
exports.descriptor = {
|
|
18
|
-
codecId: "bigint-qint64",
|
|
19
|
-
specPath: "RefinedSpecs/Codecs/BigInt_qint64_Codec.md",
|
|
20
|
-
tsType: "bigint",
|
|
21
|
-
cppType: "qint64",
|
|
22
|
-
wireCategory: "fixed-width-scalar",
|
|
23
|
-
strategySummary: "Serialize qint64 as 8-byte signed two's complement (BigInt64Array / C++ memcpy), then base93-encode to a standalone JSON string.",
|
|
24
|
-
fixedWidth: FIXED_WIDTH
|
|
25
|
-
};
|
|
26
|
-
const TS_FN = "encodeQint64Standalone";
|
|
27
|
-
const CPP_FN = "encodeQint64Standalone";
|
|
28
|
-
exports.encoderEmitter = {
|
|
29
|
-
descriptor: exports.descriptor,
|
|
30
|
-
emitTsEncoder() {
|
|
31
|
-
return (0, fixedwidth_1.emitTsFixedWidthStandaloneEncoder)(TS_FN, FIXED_WIDTH);
|
|
32
|
-
},
|
|
33
|
-
emitCppEncoder() {
|
|
34
|
-
return (0, fixedwidth_1.emitCppFixedWidthStandaloneEncoder)(CPP_FN, FIXED_WIDTH);
|
|
35
|
-
}
|
|
36
|
-
};
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Decoder emitter for the AnQst base-type codec `AnQst.Type.quint64`.
|
|
4
|
-
*
|
|
5
|
-
* Reverses the standalone encoder: base93 string → 8 bytes → `BigUint64Array` → bigint (≥ 0n).
|
|
6
|
-
* C++ decodes to `quint64` via `std::memcpy` from decoded bytes.
|
|
7
|
-
*
|
|
8
|
-
* Spec: RefinedSpecs/Codecs/BigInt_quint64_Codec.md
|
|
9
|
-
*/
|
|
10
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.decoder = exports.descriptor = void 0;
|
|
12
|
-
const fixedwidth_1 = require("../shared/fixedwidth");
|
|
13
|
-
const encoder_1 = require("./encoder");
|
|
14
|
-
Object.defineProperty(exports, "descriptor", { enumerable: true, get: function () { return encoder_1.descriptor; } });
|
|
15
|
-
const fixedWidth = encoder_1.descriptor.fixedWidth;
|
|
16
|
-
const TS_FN = "decodeQuint64Standalone";
|
|
17
|
-
const CPP_FN = "decodeQuint64Standalone";
|
|
18
|
-
exports.decoder = {
|
|
19
|
-
descriptor: encoder_1.descriptor,
|
|
20
|
-
emitTsDecoder() {
|
|
21
|
-
return (0, fixedwidth_1.emitTsFixedWidthStandaloneDecoder)(TS_FN, fixedWidth);
|
|
22
|
-
},
|
|
23
|
-
emitCppDecoder() {
|
|
24
|
-
return (0, fixedwidth_1.emitCppFixedWidthStandaloneDecoder)(CPP_FN, fixedWidth);
|
|
25
|
-
}
|
|
26
|
-
};
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Emitter for the AnQst base-type codec `AnQst.Type.quint64`.
|
|
4
|
-
*
|
|
5
|
-
* Maps TypeScript `bigint` to an 8-byte unsigned little-endian representation via
|
|
6
|
-
* `BigUint64Array`, then to a standalone base93 string (10 characters). C++ uses
|
|
7
|
-
* `quint64` with `std::memcpy` for the same 8-byte layout on the host platform.
|
|
8
|
-
*
|
|
9
|
-
* Spec: RefinedSpecs/Codecs/BigInt_quint64_Codec.md
|
|
10
|
-
*/
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.encoder = exports.descriptor = void 0;
|
|
13
|
-
const fixedwidth_1 = require("../shared/fixedwidth");
|
|
14
|
-
const fixedWidth = {
|
|
15
|
-
byteWidth: 8,
|
|
16
|
-
tsViewCtor: "BigUint64Array",
|
|
17
|
-
cppType: "quint64"
|
|
18
|
-
};
|
|
19
|
-
exports.descriptor = {
|
|
20
|
-
codecId: "bigint-quint64",
|
|
21
|
-
specPath: "RefinedSpecs/Codecs/BigInt_quint64_Codec.md",
|
|
22
|
-
tsType: "bigint",
|
|
23
|
-
cppType: "quint64",
|
|
24
|
-
wireCategory: "fixed-width-scalar",
|
|
25
|
-
strategySummary: "8-byte unsigned host-endian representation (BigUint64Array / memcpy into quint64), base93 standalone string (10 chars).",
|
|
26
|
-
fixedWidth
|
|
27
|
-
};
|
|
28
|
-
const TS_FN = "encodeQuint64Standalone";
|
|
29
|
-
const CPP_FN = "encodeQuint64Standalone";
|
|
30
|
-
exports.encoder = {
|
|
31
|
-
descriptor: exports.descriptor,
|
|
32
|
-
emitTsEncoder() {
|
|
33
|
-
return (0, fixedwidth_1.emitTsFixedWidthStandaloneEncoder)(TS_FN, fixedWidth);
|
|
34
|
-
},
|
|
35
|
-
emitCppEncoder() {
|
|
36
|
-
return (0, fixedwidth_1.emitCppFixedWidthStandaloneEncoder)(CPP_FN, fixedWidth);
|
|
37
|
-
}
|
|
38
|
-
};
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Base codec emitter (decode): `AnQst.Type.blob`.
|
|
4
|
-
* Decoding mirrors `AnQst.Type.buffer`: base93 text reconstructs the original raw bytes as ArrayBuffer/QByteArray.
|
|
5
|
-
* This file preserves blob-specific descriptor identity while reusing the shared raw-byte scaffold.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.decoderEmitter = exports.descriptor = void 0;
|
|
9
|
-
const comments_1 = require("../shared/comments");
|
|
10
|
-
const rawbytes_1 = require("../shared/rawbytes");
|
|
11
|
-
const encoder_1 = require("./encoder");
|
|
12
|
-
Object.defineProperty(exports, "descriptor", { enumerable: true, get: function () { return encoder_1.descriptor; } });
|
|
13
|
-
const TS_FN = "decodeBinaryBlobStandalone";
|
|
14
|
-
const CPP_FN = "decodeBinaryBlobStandalone";
|
|
15
|
-
const strategyComment = (0, comments_1.emitStrategyComment)("Base codec emitter (decode): AnQst.Type.blob / QByteArray", [
|
|
16
|
-
"Base93-decodes the standalone wire string back into the original opaque byte sequence.",
|
|
17
|
-
"Wire layout is intentionally identical to AnQst.Type.buffer; the distinction is semantic descriptor metadata.",
|
|
18
|
-
"Expects base93Decode in scope; C++ reconstructs QByteArray directly from decoded bytes."
|
|
19
|
-
]);
|
|
20
|
-
exports.decoderEmitter = {
|
|
21
|
-
descriptor: encoder_1.descriptor,
|
|
22
|
-
emitTsDecoder() {
|
|
23
|
-
return `${strategyComment}\n\n${(0, rawbytes_1.emitTsRawByteStandaloneDecoder)(TS_FN, "bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)")}`;
|
|
24
|
-
},
|
|
25
|
-
emitCppDecoder() {
|
|
26
|
-
return `${strategyComment}\n\n${(0, rawbytes_1.emitCppRawByteStandaloneDecoder)(CPP_FN, "QByteArray(reinterpret_cast<const char*>(bytes.data()), static_cast<int>(bytes.size()))")}`;
|
|
27
|
-
}
|
|
28
|
-
};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Base codec emitter (encode): `AnQst.Type.blob`.
|
|
4
|
-
* Wire shape is identical to `AnQst.Type.buffer`: raw ArrayBuffer bytes become one base93 string.
|
|
5
|
-
* This emitter keeps distinct blob descriptor metadata while reusing the shared raw-byte scaffold.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.encoderEmitter = exports.descriptor = void 0;
|
|
9
|
-
const comments_1 = require("../shared/comments");
|
|
10
|
-
const rawbytes_1 = require("../shared/rawbytes");
|
|
11
|
-
exports.descriptor = {
|
|
12
|
-
codecId: "binary-blob",
|
|
13
|
-
specPath: "RefinedSpecs/Codecs/Binary_blob_Codec.md",
|
|
14
|
-
tsType: "ArrayBuffer",
|
|
15
|
-
cppType: "QByteArray",
|
|
16
|
-
wireCategory: "binary",
|
|
17
|
-
strategySummary: "Serialize ArrayBuffer / QByteArray raw bytes as one base93 string; wire-identical to buffer, but with blob-specific descriptor metadata."
|
|
18
|
-
};
|
|
19
|
-
const TS_FN = "encodeBinaryBlobStandalone";
|
|
20
|
-
const CPP_FN = "encodeBinaryBlobStandalone";
|
|
21
|
-
const strategyComment = (0, comments_1.emitStrategyComment)("Base codec emitter (encode): AnQst.Type.blob / QByteArray", [
|
|
22
|
-
"Treats the payload as opaque bytes and base93-encodes them into one standalone JSON string.",
|
|
23
|
-
"Wire layout is intentionally identical to AnQst.Type.buffer; only descriptor identity differs.",
|
|
24
|
-
"Expects base93Encode in scope; C++ path reads QByteArray bytes without adding length/type metadata."
|
|
25
|
-
]);
|
|
26
|
-
exports.encoderEmitter = {
|
|
27
|
-
descriptor: exports.descriptor,
|
|
28
|
-
emitTsEncoder() {
|
|
29
|
-
return `${strategyComment}\n\n${(0, rawbytes_1.emitTsRawByteStandaloneEncoder)(TS_FN, "new Uint8Array(value)")}`;
|
|
30
|
-
},
|
|
31
|
-
emitCppEncoder() {
|
|
32
|
-
return `${strategyComment}\n\n${(0, rawbytes_1.emitCppRawByteStandaloneEncoder)(CPP_FN, "std::vector<std::uint8_t>(reinterpret_cast<const std::uint8_t*>(value.constData()), reinterpret_cast<const std::uint8_t*>(value.constData()) + value.size())")}`;
|
|
33
|
-
}
|
|
34
|
-
};
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Base codec emitter (decode): standalone base93 string → `ArrayBuffer` / `QByteArray`.
|
|
4
|
-
* The decoder reconstructs the exact raw byte sequence and returns the decoded backing buffer in TS.
|
|
5
|
-
* Composite codecs must decide where buffer-length metadata lives when a variable-length buffer shares a
|
|
6
|
-
* payload with sibling fields; this file only emits the standalone leaf helper and documents that strategy.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.decoder = exports.descriptor = void 0;
|
|
10
|
-
const comments_1 = require("../shared/comments");
|
|
11
|
-
const rawbytes_1 = require("../shared/rawbytes");
|
|
12
|
-
const encoder_1 = require("./encoder");
|
|
13
|
-
Object.defineProperty(exports, "descriptor", { enumerable: true, get: function () { return encoder_1.descriptor; } });
|
|
14
|
-
const TS_FN = "decodeAnqstBase_buffer";
|
|
15
|
-
const CPP_FN = "decodeAnqstBase_buffer";
|
|
16
|
-
const strategyComment = (0, comments_1.emitStrategyComment)("Base codec emitter (decode): AnQst.Type.buffer / ArrayBuffer", [
|
|
17
|
-
"Base93-decodes the standalone wire string to raw bytes and returns the resulting opaque byte sequence.",
|
|
18
|
-
"TypeScript returns the ArrayBuffer backing the decoded Uint8Array without an extra copy; C++ rebuilds QByteArray from decoded bytes.",
|
|
19
|
-
"Composite codecs should read byte-length metadata from their planned numeric blob or trailing-position convention before consuming a buffer payload; that structured orchestration is intentionally not wired here."
|
|
20
|
-
]);
|
|
21
|
-
exports.decoder = {
|
|
22
|
-
descriptor: encoder_1.descriptor,
|
|
23
|
-
emitTsDecoder() {
|
|
24
|
-
return `${strategyComment}\n\n${(0, rawbytes_1.emitTsRawByteStandaloneDecoder)(TS_FN, "bytes.buffer")}`;
|
|
25
|
-
},
|
|
26
|
-
emitCppDecoder() {
|
|
27
|
-
return `${strategyComment}\n\n${(0, rawbytes_1.emitCppRawByteStandaloneDecoder)(CPP_FN, "QByteArray(bytes.begin(), bytes.end())")}`;
|
|
28
|
-
}
|
|
29
|
-
};
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Base codec emitter (encode): `AnQst.Type.buffer` / `ArrayBuffer` ↔ `QByteArray`.
|
|
4
|
-
* Standalone wire shape is one base93 string over the raw bytes, including `""` for an empty buffer.
|
|
5
|
-
* Composite codecs should keep the variable-length buffer payload in its own string slot and pair it with
|
|
6
|
-
* byte-length metadata when sibling fields make boundaries ambiguous; that structured integration is
|
|
7
|
-
* documented here but intentionally not emitted by this leaf helper.
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.encoder = exports.descriptor = void 0;
|
|
11
|
-
const comments_1 = require("../shared/comments");
|
|
12
|
-
const rawbytes_1 = require("../shared/rawbytes");
|
|
13
|
-
exports.descriptor = {
|
|
14
|
-
codecId: "AnQst.Type.buffer",
|
|
15
|
-
specPath: "RefinedSpecs/Codecs/Binary_buffer_Codec.md",
|
|
16
|
-
tsType: "ArrayBuffer",
|
|
17
|
-
cppType: "QByteArray",
|
|
18
|
-
wireCategory: "binary",
|
|
19
|
-
strategySummary: "ArrayBuffer/QByteArray raw bytes encoded as one standalone base93 string; composite codecs keep the payload in its own string slot and carry byte length separately when needed."
|
|
20
|
-
};
|
|
21
|
-
const TS_FN = "encodeAnqstBase_buffer";
|
|
22
|
-
const CPP_FN = "encodeAnqstBase_buffer";
|
|
23
|
-
const strategyComment = (0, comments_1.emitStrategyComment)("Base codec emitter (encode): AnQst.Type.buffer / ArrayBuffer", [
|
|
24
|
-
"Treats the domain value as an opaque byte sequence and base93-encodes it as one standalone string.",
|
|
25
|
-
"TypeScript reads bytes through Uint8Array(value); C++ reads QByteArray through begin()/end() into std::vector<std::uint8_t>.",
|
|
26
|
-
"Composite codecs should keep this variable-length payload in its own wire string position and carry byte-length metadata separately when boundary disambiguation is required; that orchestration is not emitted here."
|
|
27
|
-
]);
|
|
28
|
-
exports.encoder = {
|
|
29
|
-
descriptor: exports.descriptor,
|
|
30
|
-
emitTsEncoder() {
|
|
31
|
-
return `${strategyComment}\n\n${(0, rawbytes_1.emitTsRawByteStandaloneEncoder)(TS_FN, "new Uint8Array(value)")}`;
|
|
32
|
-
},
|
|
33
|
-
emitCppEncoder() {
|
|
34
|
-
return `${strategyComment}\n\n${(0, rawbytes_1.emitCppRawByteStandaloneEncoder)(CPP_FN, "std::vector<std::uint8_t>(value.begin(), value.end())")}`;
|
|
35
|
-
}
|
|
36
|
-
};
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* AnQstGen base-type codec emitter for `binary-float32Array`.
|
|
4
|
-
* Decoder consumes one base93 string of raw bytes and reconstructs a concrete `Float32Array`.
|
|
5
|
-
* Multi-byte element byte order and all IEEE 754 bit patterns are preserved exactly as transmitted.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.decoder = exports.descriptor = void 0;
|
|
9
|
-
const comments_1 = require("../shared/comments");
|
|
10
|
-
const encoder_1 = require("./encoder");
|
|
11
|
-
Object.defineProperty(exports, "descriptor", { enumerable: true, get: function () { return encoder_1.descriptor; } });
|
|
12
|
-
const TS_FN = "decodeBinaryFloat32ArrayStandalone";
|
|
13
|
-
const CPP_FN = "decodeBinaryFloat32ArrayStandalone";
|
|
14
|
-
exports.decoder = {
|
|
15
|
-
descriptor: encoder_1.descriptor,
|
|
16
|
-
emitTsDecoder() {
|
|
17
|
-
return [
|
|
18
|
-
(0, comments_1.emitStrategyComment)("AnQst Float32Array decoder (raw-byte base93)", [
|
|
19
|
-
"Decodes base93 to bytes, then constructs a concrete Float32Array view over the decoded buffer.",
|
|
20
|
-
"Rejected decoded byte counts not divisible by 4 indicate corrupted wire data because Float32Array elements require 4 bytes each."
|
|
21
|
-
]),
|
|
22
|
-
`function ${TS_FN}(encoded) {`,
|
|
23
|
-
" const bytes = base93Decode(encoded);",
|
|
24
|
-
" if ((bytes.byteLength & 3) !== 0) {",
|
|
25
|
-
" throw new RangeError(\"Decoded Float32Array byte length must be divisible by 4.\");",
|
|
26
|
-
" }",
|
|
27
|
-
" return new Float32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / 4);",
|
|
28
|
-
"}"
|
|
29
|
-
].join("\n");
|
|
30
|
-
},
|
|
31
|
-
emitCppDecoder() {
|
|
32
|
-
return [
|
|
33
|
-
(0, comments_1.emitStrategyComment)("AnQst Float32Array decoder (QByteArray raw bytes)", [
|
|
34
|
-
"C++ receives the raw bytes as QByteArray; float interpretation stays outside the byte-transport codec.",
|
|
35
|
-
"Portable tests may supply a lightweight QByteArray shim with a (const char*, int) constructor."
|
|
36
|
-
]),
|
|
37
|
-
`inline QByteArray ${CPP_FN}(const std::string& encoded) {`,
|
|
38
|
-
" const std::vector<std::uint8_t> bytes = base93Decode(encoded);",
|
|
39
|
-
" return QByteArray(",
|
|
40
|
-
" reinterpret_cast<const char*>(bytes.data()),",
|
|
41
|
-
" static_cast<int>(bytes.size())",
|
|
42
|
-
" );",
|
|
43
|
-
"}"
|
|
44
|
-
].join("\n");
|
|
45
|
-
}
|
|
46
|
-
};
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* AnQstGen base-type codec emitter for `binary-float32Array`.
|
|
4
|
-
* Wire form is one base93 string carrying the raw bytes of a `Float32Array` view.
|
|
5
|
-
* The TypeScript path must respect `byteOffset`/`byteLength`; the C++ path keeps the spec-facing `QByteArray` signature.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.encoder = exports.descriptor = void 0;
|
|
9
|
-
const comments_1 = require("../shared/comments");
|
|
10
|
-
exports.descriptor = {
|
|
11
|
-
codecId: "binary-float32Array",
|
|
12
|
-
specPath: "RefinedSpecs/Codecs/Binary_float32Array_Codec.md",
|
|
13
|
-
tsType: "Float32Array",
|
|
14
|
-
cppType: "QByteArray",
|
|
15
|
-
wireCategory: "binary",
|
|
16
|
-
strategySummary: "Base93-encode the raw bytes of the Float32Array view (respecting byteOffset/byteLength); C++ receives the same raw bytes in QByteArray."
|
|
17
|
-
};
|
|
18
|
-
const TS_FN = "encodeBinaryFloat32ArrayStandalone";
|
|
19
|
-
const CPP_FN = "encodeBinaryFloat32ArrayStandalone";
|
|
20
|
-
exports.encoder = {
|
|
21
|
-
descriptor: exports.descriptor,
|
|
22
|
-
emitTsEncoder() {
|
|
23
|
-
return [
|
|
24
|
-
(0, comments_1.emitStrategyComment)("AnQst Float32Array encoder (raw-byte base93)", [
|
|
25
|
-
"Reads only the concrete view window via byteOffset/byteLength, so subviews do not leak adjacent buffer bytes.",
|
|
26
|
-
"Preserves the stored IEEE 754 binary32 bit patterns exactly, including NaN payloads, infinities, and signed zero."
|
|
27
|
-
]),
|
|
28
|
-
`function ${TS_FN}(value) {`,
|
|
29
|
-
" const bytes = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);",
|
|
30
|
-
" return base93Encode(bytes);",
|
|
31
|
-
"}"
|
|
32
|
-
].join("\n");
|
|
33
|
-
},
|
|
34
|
-
emitCppEncoder() {
|
|
35
|
-
return [
|
|
36
|
-
(0, comments_1.emitStrategyComment)("AnQst Float32Array encoder (QByteArray raw bytes)", [
|
|
37
|
-
"Host-side integration passes the raw float32 bytes as QByteArray; portable tests can provide a minimal QByteArray shim.",
|
|
38
|
-
"No byte swapping or float normalization is performed; the QByteArray contents are forwarded as-is into base93."
|
|
39
|
-
]),
|
|
40
|
-
`inline std::string ${CPP_FN}(const QByteArray& value) {`,
|
|
41
|
-
" std::vector<std::uint8_t> bytes(static_cast<std::size_t>(value.size()));",
|
|
42
|
-
" if (!bytes.empty()) {",
|
|
43
|
-
" std::memcpy(bytes.data(), value.constData(), bytes.size());",
|
|
44
|
-
" }",
|
|
45
|
-
" return base93Encode(bytes);",
|
|
46
|
-
"}"
|
|
47
|
-
].join("\n");
|
|
48
|
-
}
|
|
49
|
-
};
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* AnQstGen base-type codec emitter for `binary-float64Array`.
|
|
4
|
-
* Decoder consumes one base93 string of raw bytes and reconstructs a concrete `Float64Array`.
|
|
5
|
-
* Multi-byte element byte order is preserved exactly as transmitted; no byte swapping is introduced.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.decoder = exports.descriptor = void 0;
|
|
9
|
-
const comments_1 = require("../shared/comments");
|
|
10
|
-
const encoder_1 = require("./encoder");
|
|
11
|
-
Object.defineProperty(exports, "descriptor", { enumerable: true, get: function () { return encoder_1.descriptor; } });
|
|
12
|
-
const TS_FN = "decodeBinaryFloat64ArrayStandalone";
|
|
13
|
-
const CPP_FN = "decodeBinaryFloat64ArrayStandalone";
|
|
14
|
-
exports.decoder = {
|
|
15
|
-
descriptor: encoder_1.descriptor,
|
|
16
|
-
emitTsDecoder() {
|
|
17
|
-
return [
|
|
18
|
-
(0, comments_1.emitStrategyComment)("AnQst Float64Array decoder (raw-byte base93)", [
|
|
19
|
-
"Decodes base93 to bytes, then constructs a concrete Float64Array over the decoded buffer.",
|
|
20
|
-
"Rejected decoded byte counts that are not divisible by 8 indicate corrupted wire data because Float64Array elements require 8 bytes each."
|
|
21
|
-
]),
|
|
22
|
-
`function ${TS_FN}(encoded) {`,
|
|
23
|
-
" const bytes = base93Decode(encoded);",
|
|
24
|
-
" if ((bytes.byteLength & 7) !== 0) {",
|
|
25
|
-
' throw new RangeError("Decoded Float64Array byte length must be divisible by 8.");',
|
|
26
|
-
" }",
|
|
27
|
-
" return new Float64Array(bytes.buffer);",
|
|
28
|
-
"}"
|
|
29
|
-
].join("\n");
|
|
30
|
-
},
|
|
31
|
-
emitCppDecoder() {
|
|
32
|
-
return [
|
|
33
|
-
(0, comments_1.emitStrategyComment)("AnQst Float64Array decoder (QByteArray raw bytes)", [
|
|
34
|
-
"C++ receives the raw bytes as QByteArray; element interpretation stays outside the byte-transport codec.",
|
|
35
|
-
"Portable tests may supply a lightweight QByteArray shim with a (const char*, int) constructor."
|
|
36
|
-
]),
|
|
37
|
-
`inline QByteArray ${CPP_FN}(const std::string& encoded) {`,
|
|
38
|
-
" const std::vector<std::uint8_t> bytes = base93Decode(encoded);",
|
|
39
|
-
" return QByteArray(",
|
|
40
|
-
" reinterpret_cast<const char*>(bytes.data()),",
|
|
41
|
-
" static_cast<int>(bytes.size())",
|
|
42
|
-
" );",
|
|
43
|
-
"}"
|
|
44
|
-
].join("\n");
|
|
45
|
-
}
|
|
46
|
-
};
|