ticbuild 1.0.9 → 1.0.11
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 +146 -25
- package/dist/backend/importUtils.d.ts +2 -1
- package/dist/backend/importUtils.d.ts.map +1 -1
- package/dist/backend/importUtils.js +8 -1
- package/dist/backend/importUtils.js.map +1 -1
- package/dist/backend/luaBinaryEncoding.d.ts +15 -1
- package/dist/backend/luaBinaryEncoding.d.ts.map +1 -1
- package/dist/backend/luaBinaryEncoding.js +230 -7
- package/dist/backend/luaBinaryEncoding.js.map +1 -1
- package/dist/backend/luaEncode.d.ts +16 -0
- package/dist/backend/luaEncode.d.ts.map +1 -0
- package/dist/backend/luaEncode.js +398 -0
- package/dist/backend/luaEncode.js.map +1 -0
- package/dist/backend/luaEncode.test.d.ts +2 -0
- package/dist/backend/luaEncode.test.d.ts.map +1 -0
- package/dist/backend/luaEncode.test.js +315 -0
- package/dist/backend/luaEncode.test.js.map +1 -0
- package/dist/backend/luaEncodeBase.d.ts +2 -0
- package/dist/backend/luaEncodeBase.d.ts.map +1 -0
- package/dist/backend/luaEncodeBase.js +3 -0
- package/dist/backend/luaEncodeBase.js.map +1 -0
- package/dist/backend/luaEncodeHelpers.d.ts +5 -0
- package/dist/backend/luaEncodeHelpers.d.ts.map +1 -0
- package/dist/backend/luaEncodeHelpers.js +129 -0
- package/dist/backend/luaEncodeHelpers.js.map +1 -0
- package/dist/backend/luaPreprocessor.d.ts.map +1 -1
- package/dist/backend/luaPreprocessor.js +46 -65
- package/dist/backend/luaPreprocessor.js.map +1 -1
- package/dist/backend/luaPreprocessor.test.js +52 -21
- package/dist/backend/luaPreprocessor.test.js.map +1 -1
- package/dist/backend/manifestTypes.d.ts +1 -0
- package/dist/backend/manifestTypes.d.ts.map +1 -1
- package/dist/backend/manifestTypes.js.map +1 -1
- package/dist/backend/tic80Controller/customController.d.ts +2 -0
- package/dist/backend/tic80Controller/customController.d.ts.map +1 -1
- package/dist/backend/tic80Controller/customController.js +10 -2
- package/dist/backend/tic80Controller/customController.js.map +1 -1
- package/dist/buildInfo.d.ts +4 -4
- package/dist/buildInfo.js +4 -4
- package/dist/buildInfo.js.map +1 -1
- package/dist/frontend/parseOptions.d.ts +1 -0
- package/dist/frontend/parseOptions.d.ts.map +1 -1
- package/dist/frontend/parseOptions.js.map +1 -1
- package/dist/frontend/repl.d.ts +7 -0
- package/dist/frontend/repl.d.ts.map +1 -0
- package/dist/frontend/repl.js +271 -0
- package/dist/frontend/repl.js.map +1 -0
- package/dist/frontend/run.d.ts.map +1 -1
- package/dist/frontend/run.js +4 -1
- package/dist/frontend/run.js.map +1 -1
- package/dist/frontend/watch.d.ts.map +1 -1
- package/dist/frontend/watch.js +4 -1
- package/dist/frontend/watch.js.map +1 -1
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -1
- package/dist/obj/build.log +5 -5
- package/dist/obj/resolvedManifest.ticbuild.jsonc +6 -6
- package/dist/obj/variables.json +4 -4
- package/dist/utils/encoding/codecRegistry.d.ts +176 -62
- package/dist/utils/encoding/codecRegistry.d.ts.map +1 -1
- package/dist/utils/encoding/codecRegistry.js +48 -8
- package/dist/utils/encoding/codecRegistry.js.map +1 -1
- package/dist/utils/encoding/rle.d.ts +3 -0
- package/dist/utils/encoding/rle.d.ts.map +1 -0
- package/dist/utils/encoding/rle.js +37 -0
- package/dist/utils/encoding/rle.js.map +1 -0
- package/dist/utils/help.d.ts +1 -0
- package/dist/utils/help.d.ts.map +1 -1
- package/dist/utils/help.js +5 -0
- package/dist/utils/help.js.map +1 -1
- package/dist/utils/tic80/cartWriter.d.ts +0 -1
- package/dist/utils/tic80/cartWriter.d.ts.map +1 -1
- package/dist/utils/tic80/cartWriter.js +2 -10
- package/dist/utils/tic80/cartWriter.js.map +1 -1
- package/dist/utils/tic80/tic80.d.ts +5 -5
- package/dist/utils/utils.d.ts +1 -0
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +8 -0
- package/dist/utils/utils.js.map +1 -1
- package/package.json +1 -1
- package/scripts/terminal.ps1 +1 -0
- package/templates/TIC-80-ticbuild/tic80.exe +0 -0
- package/templates/help/main.txt +1 -0
- package/templates/help/repl.txt +46 -0
- package/ticbuild.schema.json +10 -1
package/README.md
CHANGED
|
@@ -106,11 +106,89 @@ ticbuild run
|
|
|
106
106
|
# build and live-update with changes in a tic80
|
|
107
107
|
ticbuild watch
|
|
108
108
|
|
|
109
|
+
# interactive Lua preprocessing/minification REPL
|
|
110
|
+
ticbuild repl
|
|
111
|
+
|
|
109
112
|
# create a new empty project
|
|
110
113
|
ticbuild init
|
|
111
114
|
|
|
112
115
|
```
|
|
113
116
|
|
|
117
|
+
## REPL mode (interactive preprocessing/minification)
|
|
118
|
+
|
|
119
|
+
Interactive Lua processing on the command line, using the same context as
|
|
120
|
+
the build process. Useful for testing / debugging, or just doing some ad-hock
|
|
121
|
+
encoding.
|
|
122
|
+
|
|
123
|
+
Note: It doesn't actually EXECUTE the Lua. Just outputs the preprocessed + minified
|
|
124
|
+
Lua code.
|
|
125
|
+
|
|
126
|
+
### Usage
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
ticbuild repl [manifest] [--multi-line] [--mode <name>] [--var <key=value>]
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
* **Manifest and build configuration**
|
|
133
|
+
* The REPL loads the project in the same way as `build`.
|
|
134
|
+
* `--mode` and `--var` are supported
|
|
135
|
+
|
|
136
|
+
* **Single-line mode (default)**
|
|
137
|
+
* Each line you enter is processed immediately.
|
|
138
|
+
* The resulting Lua code is printed to stdout after each line.
|
|
139
|
+
|
|
140
|
+
* **Multi-line mode**
|
|
141
|
+
* Enable with `--multi-line`.
|
|
142
|
+
* Input is collected until a terminator is entered on its own line:
|
|
143
|
+
* `:end`, `:eof`, or a lone `:`
|
|
144
|
+
* Once the terminator is received, the full block is processed and printed.
|
|
145
|
+
|
|
146
|
+
### REPL commands
|
|
147
|
+
|
|
148
|
+
Commands always start with `:`.
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
:help
|
|
152
|
+
:minify on
|
|
153
|
+
:minify off
|
|
154
|
+
:minify <rule> on
|
|
155
|
+
:minify <rule> off
|
|
156
|
+
:end
|
|
157
|
+
:eof
|
|
158
|
+
:
|
|
159
|
+
:quit
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
#### `:minify` details
|
|
163
|
+
|
|
164
|
+
* `:minify on|off` toggles overall minification for the session.
|
|
165
|
+
* `:minify <rule> on|off` overrides individual minification rules. rules:
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
stripComments
|
|
169
|
+
renameLocalVariables
|
|
170
|
+
aliasRepeatedExpressions
|
|
171
|
+
aliasLiterals
|
|
172
|
+
simplifyExpressions
|
|
173
|
+
removeUnusedLocals
|
|
174
|
+
removeUnusedFunctions
|
|
175
|
+
renameTableFields
|
|
176
|
+
packLocalDeclarations
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
These overrides are applied on top of the manifest’s
|
|
180
|
+
`assembly.lua.minification` settings.
|
|
181
|
+
|
|
182
|
+
### Examples
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# default single-line mode
|
|
186
|
+
ticbuild repl
|
|
187
|
+
|
|
188
|
+
# multi-line input mode
|
|
189
|
+
ticbuild repl --multi-line
|
|
190
|
+
```
|
|
191
|
+
|
|
114
192
|
## TIC-80 binary location
|
|
115
193
|
|
|
116
194
|
By default, `ticbuild` will use a special build of TIC-80 which allows profiling and
|
|
@@ -139,6 +217,7 @@ The manifest file is canonically `*.ticbuild.jsonc`. Its location defines the pr
|
|
|
139
217
|
"$schema": "./ticbuild.schema.json",
|
|
140
218
|
"project": {
|
|
141
219
|
"name": "my demo",
|
|
220
|
+
"launchArgs": ["--fs=./", "--skip"], // args that are passed to the tic80 when launched.
|
|
142
221
|
"includeDirs": ["./src", "./include"], // includes these dirs in source file lookup
|
|
143
222
|
"importDirs": ["./assets", "./images"], // include these dirs in resource import lookup
|
|
144
223
|
"binDir": "./dist/bin",
|
|
@@ -175,7 +254,7 @@ The manifest file is canonically `*.ticbuild.jsonc`. Its location defines the pr
|
|
|
175
254
|
// like other resources, loading from file is fine:
|
|
176
255
|
// "path": "path_to_file.txt"
|
|
177
256
|
// but you can also just specify the value here. Again, string substitution is supported.
|
|
178
|
-
"value": "greetz to everyone at the party
|
|
257
|
+
"value": "greetz to everyone at the party",
|
|
179
258
|
},
|
|
180
259
|
// it is not necessary to specify all source files here; main.lua can import
|
|
181
260
|
// files directly by relative path.
|
|
@@ -383,26 +462,71 @@ print("debug")
|
|
|
383
462
|
-- at the preprocessor level though, and emitted as a string literal.
|
|
384
463
|
local s = __EXPAND("the project name is: $(project.name)")
|
|
385
464
|
|
|
386
|
-
--
|
|
387
|
-
--
|
|
388
|
-
--
|
|
389
|
-
--
|
|
390
|
-
|
|
465
|
+
-- __IMPORT and __ENCODE data transforms emitting as Lua literals.
|
|
466
|
+
--
|
|
467
|
+
-- __IMPORT(pipelineSpec, importRef)
|
|
468
|
+
-- __ENCODE(pipelineSpec, literalValue)
|
|
469
|
+
--
|
|
470
|
+
-- pipelineSpec is a single comma-chain of codecs/transforms.
|
|
471
|
+
-- It contains exactly one value codec, and everything before that is
|
|
472
|
+
-- interpreted as the source codec + byte transforms.
|
|
473
|
+
-- Whitespace is ignored.
|
|
474
|
+
--
|
|
475
|
+
-- Outputs either values or string (not a table literal)
|
|
476
|
+
-- local t = { __ENCODE(...) }
|
|
477
|
+
-- => local t = { 1,2,3 }
|
|
478
|
+
--
|
|
479
|
+
-- local a,b,c = __ENCODE(...)
|
|
480
|
+
-- => local a,b,c = 1,2,3
|
|
481
|
+
|
|
482
|
+
-- Source codecs (string input):
|
|
483
|
+
-- u8, s8, u16le, s16le, u24le, s24le, u32le, s32le
|
|
484
|
+
-- u16be, s16be, u24be, s24be, u32be, s32be
|
|
485
|
+
-- f16le, f16be, f32le, f32be, f64le, f64be
|
|
486
|
+
-- hex, b85+1, ascii, utf8, base64
|
|
487
|
+
-- Source codecs (binary input only):
|
|
488
|
+
-- raw, lz
|
|
489
|
+
-- Byte transforms:
|
|
490
|
+
-- lz, unlz, rle, unrle, ttz, take(start,length)
|
|
491
|
+
--
|
|
492
|
+
-- start is 0-based.
|
|
493
|
+
--
|
|
494
|
+
-- Value codecs:
|
|
495
|
+
-- u8, s8, u16le, s16le, u24le, s24le, u32le, s32le
|
|
496
|
+
-- u16be, s16be, u24be, s24be, u32be, s32be
|
|
497
|
+
-- f16le, f16be, f32le, f32be, f64le, f64be
|
|
498
|
+
-- hex, b85+1, ascii, utf8, base64
|
|
499
|
+
-- Value transforms:
|
|
500
|
+
-- norm, scale(k), q(B), w(W), toUppercase
|
|
501
|
+
--
|
|
502
|
+
-- where `k` is scalar (required)
|
|
503
|
+
-- where `B` is fractional bits
|
|
504
|
+
-- where `W` is maximum # of decimals after point
|
|
505
|
+
|
|
506
|
+
-- hex literal to normalized RGBA bytes
|
|
507
|
+
local c = { __ENCODE("hex,u8,norm", "#ff8000"), 0.5 }
|
|
508
|
+
-- generates:
|
|
509
|
+
local c = { 1,0.5,0,0.5 }
|
|
510
|
+
|
|
511
|
+
-- import hex palette as a hex string
|
|
512
|
+
local paletteString = __IMPORT("hex", "import:twilight_bog_palette")
|
|
391
513
|
-- generates:
|
|
392
514
|
local paletteString = "1f17143439434e5a6d5d8da289baabb8cfb9839c77727546383f38704b63a66470b8948ec8bfbfe1e6eaa48db6785a96"
|
|
393
515
|
|
|
394
|
-
--
|
|
395
|
-
local
|
|
516
|
+
-- import palette to signed 32-bit values (values output, not a table)
|
|
517
|
+
local paletteValues = { __IMPORT("s32", "import:twilight_bog_palette") }
|
|
396
518
|
-- generates:
|
|
397
|
-
local
|
|
519
|
+
local paletteValues = {873731871,1515078457,-1567793811,-1196705143,-1669088817,1182102135,1882734392,1688625995,-1902856080,-507527224,-1918571802,-1772455754}
|
|
398
520
|
|
|
399
|
-
-- base85+1
|
|
400
|
-
local
|
|
521
|
+
-- base85+1 encoding with LZ compression in the source spec
|
|
522
|
+
local paletteCompressed = __IMPORT("ascii,lz,b85+1", "import:creditstxt")
|
|
401
523
|
-- generates:
|
|
402
|
-
local
|
|
524
|
+
local paletteCompressed = "..."
|
|
525
|
+
|
|
526
|
+
-- NOTE: string substitution is performed on spec strings and import/literal values.
|
|
403
527
|
|
|
404
528
|
-- LZ compression possible. The payload is compressed, then encoded with base85+1.
|
|
405
|
-
local paletteString =
|
|
529
|
+
local paletteString = __IMPORT("raw,lz", "b85+1", "import:twilight_bog_palette") -- LZ compressed binary + base 85 encoding
|
|
406
530
|
-- generates:
|
|
407
531
|
local paletteString = "#!&,K2'Jqg;:0ML?NM;9@X16KdK:I.+F[e>T3,hN#VIXYUP`Ei\"^Z\">?UlDg->*]-g"
|
|
408
532
|
|
|
@@ -414,25 +538,22 @@ local paletteString = "#!&,K2'Jqg;:0ML?NM;9@X16KdK:I.+F[e>T3,hN#VIXYUP`Ei\"^Z\">
|
|
|
414
538
|
-- 2. we don't want to create another weird syntax like "hex:123456"
|
|
415
539
|
-- 3. we don't want to make overloads of this function just for literals.
|
|
416
540
|
|
|
417
|
-
-- ...So we
|
|
418
|
-
-- output
|
|
419
|
-
-- only string-based source
|
|
420
|
-
local paletteString = __ENCODE("hex", "b85+1", "1f17143439434e5a6d5d8da289baabb8cfb9839c77727546383f38704b63a66470b8948ec8bfbfe1e6eaa48db6785a96")
|
|
541
|
+
-- ...So we have another function: __ENCODE where you must specify the input encoding,
|
|
542
|
+
-- output spec, and the literal source value.
|
|
543
|
+
-- only string-based source format types are supported (so no "raw" for example, but "b85+1,lz" is ok)
|
|
544
|
+
local paletteString = __ENCODE("hex,lz", "b85+1", "1f17143439434e5a6d5d8da289baabb8cfb9839c77727546383f38704b63a66470b8948ec8bfbfe1e6eaa48db6785a96")
|
|
421
545
|
-- generates:
|
|
422
546
|
local paletteString = "!*u>VJ3C?PFD-`-qM7Tatcae[uGB.gq3'TBA94Oi0E4D-maM5LKk3Ab%[WkuA"
|
|
423
|
-
--
|
|
424
|
-
--
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
-- NOTE: both parameters support $(variables). string substitution is performed.
|
|
547
|
+
-- "#!&,K2'Jqg;:0ML?NM;9@X16KdK:I.+F[e>T3,hN#VIXYUP`Ei\"^Z\">?UlDg->*]-g"
|
|
548
|
+
-- test with round trip:
|
|
549
|
+
local s = __ENCODE("b85+1,lz", "hex", "#!&,K2'Jqg;:0ML?NM;9@X16KdK:I.+F[e>T3,hN#VIXYUP`Ei\"^Z\">?UlDg->*]-g")
|
|
428
550
|
|
|
429
551
|
-- allows emitting a string literal from an imported text resource.
|
|
430
|
-
local scrollText =
|
|
552
|
+
local scrollText = __IMPORT("", "", "import:somecart:")
|
|
431
553
|
|
|
432
554
|
-- once again, "import:" is required for consistency, and to allow literals (though it's not much
|
|
433
555
|
-- value but there for completeness.)
|
|
434
|
-
|
|
435
|
-
local s = __IMPORTTEXT("the project name is: $(project.name)") -- effectively the same as __EXPAND
|
|
556
|
+
local s = __ENCODE("ascii", "ascii", "the project name is: $(project.name)") -- effectively the same as __EXPAND
|
|
436
557
|
|
|
437
558
|
-- macros are handy esp for writing optimized code (avoid symbol lookups, plus give
|
|
438
559
|
-- the minifier the chance to simplify / reduce expressions.
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { ImportDefinition } from "./manifestTypes";
|
|
2
2
|
import { TicbuildProjectCore } from "./projectCore";
|
|
3
|
+
import { Tic80CartChunkTypeKey } from "../utils/tic80/tic80";
|
|
3
4
|
export type ImportReference = {
|
|
4
5
|
importName: string;
|
|
5
|
-
chunkSpec?:
|
|
6
|
+
chunkSpec?: Tic80CartChunkTypeKey;
|
|
6
7
|
};
|
|
7
8
|
export type ImportDataResult<T> = {
|
|
8
9
|
data: T;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importUtils.d.ts","sourceRoot":"","sources":["../../src/backend/importUtils.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAe,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"importUtils.d.ts","sourceRoot":"","sources":["../../src/backend/importUtils.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAe,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAwB,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,qBAAqB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAChC,IAAI,EAAE,CAAC,CAAC;IACR,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAuBvE;AAUD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAmCvC;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAoBnC"}
|
|
@@ -6,6 +6,7 @@ exports.loadTextImportData = loadTextImportData;
|
|
|
6
6
|
const fileSystem_1 = require("../utils/fileSystem");
|
|
7
7
|
const codecRegistry_1 = require("../utils/encoding/codecRegistry");
|
|
8
8
|
const manifestTypes_1 = require("./manifestTypes");
|
|
9
|
+
const tic80_1 = require("../utils/tic80/tic80");
|
|
9
10
|
function parseImportReference(reference) {
|
|
10
11
|
if (!reference.startsWith("import:")) {
|
|
11
12
|
throw new Error(`Import reference must start with "import:": ${reference}`);
|
|
@@ -20,7 +21,13 @@ function parseImportReference(reference) {
|
|
|
20
21
|
throw new Error(`Import reference has too many ':' segments: ${reference}`);
|
|
21
22
|
}
|
|
22
23
|
const chunkSpec = parts.length > 1 ? parts[1].trim() : undefined;
|
|
23
|
-
|
|
24
|
+
const coercedChunkSpec = (() => {
|
|
25
|
+
if (!chunkSpec) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
return tic80_1.kTic80CartChunkTypes.coerceByKey(chunkSpec)?.key;
|
|
29
|
+
})();
|
|
30
|
+
return { importName, chunkSpec: coercedChunkSpec };
|
|
24
31
|
}
|
|
25
32
|
function resolveSourceEncodingKey(importDef) {
|
|
26
33
|
if (!importDef.sourceEncoding) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importUtils.js","sourceRoot":"","sources":["../../src/backend/importUtils.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"importUtils.js","sourceRoot":"","sources":["../../src/backend/importUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,20 @@
|
|
|
1
|
-
export type BinaryOutputEncoding = "u8" | "s8" | "u16le" | "s16le" | "u16be" | "s16be" | "u24le" | "s24le" | "u24be" | "s24be" | "u32le" | "s32le" | "u32be" | "s32be" | "
|
|
1
|
+
export type BinaryOutputEncoding = "u8" | "s8" | "u16le" | "s16le" | "u16be" | "s16be" | "u24le" | "s24le" | "u24be" | "s24be" | "u32le" | "s32le" | "u32be" | "s32be" | "f16le" | "f16be" | "f32le" | "f32be" | "f64le" | "f64be" | "ascii" | "utf8" | "base64" | "hex" | "b85+1";
|
|
2
2
|
export declare function normalizeBinaryOutputEncoding(raw: string): BinaryOutputEncoding;
|
|
3
3
|
export declare function isBinaryOutputEncoding(value: string): value is BinaryOutputEncoding;
|
|
4
4
|
export declare function isStringBinaryOutputEncoding(value: BinaryOutputEncoding): boolean;
|
|
5
|
+
export declare function isNumericBinaryOutputEncoding(value: BinaryOutputEncoding): boolean;
|
|
5
6
|
export declare function encodeBinaryAsLuaLiteral(data: Uint8Array, encoding: BinaryOutputEncoding): string;
|
|
7
|
+
export declare function encodeBinaryAsLuaValues(data: Uint8Array, encoding: BinaryOutputEncoding): string;
|
|
8
|
+
export declare function decodeBinaryToValues(data: Uint8Array, encoding: BinaryOutputEncoding): number[];
|
|
9
|
+
export type ValueEncodingInfo = {
|
|
10
|
+
kind: "int";
|
|
11
|
+
bitWidth: number;
|
|
12
|
+
signed: boolean;
|
|
13
|
+
} | {
|
|
14
|
+
kind: "float";
|
|
15
|
+
bitWidth: number;
|
|
16
|
+
};
|
|
17
|
+
export declare function getNumericEncodingInfo(encoding: BinaryOutputEncoding): ValueEncodingInfo | null;
|
|
18
|
+
export declare function encodeValuesToBytes(values: number[], encoding: BinaryOutputEncoding): Uint8Array;
|
|
19
|
+
export declare function encodeBinaryAsString(data: Uint8Array, encoding: BinaryOutputEncoding): string;
|
|
6
20
|
//# sourceMappingURL=luaBinaryEncoding.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"luaBinaryEncoding.d.ts","sourceRoot":"","sources":["../../src/backend/luaBinaryEncoding.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"luaBinaryEncoding.d.ts","sourceRoot":"","sources":["../../src/backend/luaBinaryEncoding.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,oBAAoB,GAC5B,IAAI,GACJ,IAAI,GACJ,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,MAAM,GACN,QAAQ,GACR,KAAK,GACL,OAAO,CAAC;AAgDZ,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAM/E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,oBAAoB,CAEnF;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAEjF;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAElF;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAsBjG;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAQhG;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAuB/F;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,iBAAiB,GAAG,IAAI,CAU/F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,oBAAoB,GAAG,UAAU,CAiBhG;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAe7F"}
|
|
@@ -3,13 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.normalizeBinaryOutputEncoding = normalizeBinaryOutputEncoding;
|
|
4
4
|
exports.isBinaryOutputEncoding = isBinaryOutputEncoding;
|
|
5
5
|
exports.isStringBinaryOutputEncoding = isStringBinaryOutputEncoding;
|
|
6
|
+
exports.isNumericBinaryOutputEncoding = isNumericBinaryOutputEncoding;
|
|
6
7
|
exports.encodeBinaryAsLuaLiteral = encodeBinaryAsLuaLiteral;
|
|
8
|
+
exports.encodeBinaryAsLuaValues = encodeBinaryAsLuaValues;
|
|
9
|
+
exports.decodeBinaryToValues = decodeBinaryToValues;
|
|
10
|
+
exports.getNumericEncodingInfo = getNumericEncodingInfo;
|
|
11
|
+
exports.encodeValuesToBytes = encodeValuesToBytes;
|
|
12
|
+
exports.encodeBinaryAsString = encodeBinaryAsString;
|
|
7
13
|
const lua_fundamentals_1 = require("../utils/lua/lua_fundamentals");
|
|
8
14
|
const b85_1 = require("../utils/encoding/b85");
|
|
9
15
|
const hex_1 = require("../utils/encoding/hex");
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
16
|
+
const stringEncodings = new Set([
|
|
17
|
+
"hex",
|
|
18
|
+
"b85+1",
|
|
19
|
+
"ascii",
|
|
20
|
+
"utf8",
|
|
21
|
+
"base64",
|
|
22
|
+
]);
|
|
23
|
+
const intEncodings = {
|
|
13
24
|
u8: { bytes: 1, signed: false, endian: "le" },
|
|
14
25
|
s8: { bytes: 1, signed: true, endian: "le" },
|
|
15
26
|
u16le: { bytes: 2, signed: false, endian: "le" },
|
|
@@ -25,6 +36,14 @@ const tableEncodings = {
|
|
|
25
36
|
u32be: { bytes: 4, signed: false, endian: "be" },
|
|
26
37
|
s32be: { bytes: 4, signed: true, endian: "be" },
|
|
27
38
|
};
|
|
39
|
+
const floatEncodings = {
|
|
40
|
+
f16le: { bytes: 2, endian: "le", expBits: 5, mantissaBits: 10 },
|
|
41
|
+
f16be: { bytes: 2, endian: "be", expBits: 5, mantissaBits: 10 },
|
|
42
|
+
f32le: { bytes: 4, endian: "le", expBits: 8, mantissaBits: 23 },
|
|
43
|
+
f32be: { bytes: 4, endian: "be", expBits: 8, mantissaBits: 23 },
|
|
44
|
+
f64le: { bytes: 8, endian: "le", expBits: 11, mantissaBits: 52 },
|
|
45
|
+
f64be: { bytes: 8, endian: "be", expBits: 11, mantissaBits: 52 },
|
|
46
|
+
};
|
|
28
47
|
function normalizeBinaryOutputEncoding(raw) {
|
|
29
48
|
const normalized = raw.trim().toLowerCase();
|
|
30
49
|
if (!isBinaryOutputEncoding(normalized)) {
|
|
@@ -33,17 +52,20 @@ function normalizeBinaryOutputEncoding(raw) {
|
|
|
33
52
|
return normalized;
|
|
34
53
|
}
|
|
35
54
|
function isBinaryOutputEncoding(value) {
|
|
36
|
-
return value in
|
|
55
|
+
return value in intEncodings || value in floatEncodings || stringEncodings.has(value);
|
|
37
56
|
}
|
|
38
57
|
function isStringBinaryOutputEncoding(value) {
|
|
39
58
|
return stringEncodings.has(value);
|
|
40
59
|
}
|
|
60
|
+
function isNumericBinaryOutputEncoding(value) {
|
|
61
|
+
return !stringEncodings.has(value);
|
|
62
|
+
}
|
|
41
63
|
function encodeBinaryAsLuaLiteral(data, encoding) {
|
|
42
64
|
if (stringEncodings.has(encoding)) {
|
|
43
65
|
const encoded = encodeBinaryAsString(data, encoding);
|
|
44
66
|
return (0, lua_fundamentals_1.toLuaStringLiteral)(encoded);
|
|
45
67
|
}
|
|
46
|
-
const config =
|
|
68
|
+
const config = intEncodings[encoding];
|
|
47
69
|
if (!config) {
|
|
48
70
|
throw new Error(`Unsupported binary table encoding: ${encoding}`);
|
|
49
71
|
}
|
|
@@ -57,14 +79,72 @@ function encodeBinaryAsLuaLiteral(data, encoding) {
|
|
|
57
79
|
}
|
|
58
80
|
return `{${values.join(",")}}`;
|
|
59
81
|
}
|
|
82
|
+
function encodeBinaryAsLuaValues(data, encoding) {
|
|
83
|
+
if (stringEncodings.has(encoding)) {
|
|
84
|
+
const encoded = encodeBinaryAsString(data, encoding);
|
|
85
|
+
return (0, lua_fundamentals_1.toLuaStringLiteral)(encoded);
|
|
86
|
+
}
|
|
87
|
+
const values = decodeBinaryToValues(data, encoding);
|
|
88
|
+
return values.join(",");
|
|
89
|
+
}
|
|
90
|
+
function decodeBinaryToValues(data, encoding) {
|
|
91
|
+
const intConfig = intEncodings[encoding];
|
|
92
|
+
if (intConfig) {
|
|
93
|
+
if (data.length % intConfig.bytes !== 0) {
|
|
94
|
+
throw new Error(`Binary data length ${data.length} is not divisible by ${intConfig.bytes} for encoding ${encoding}`);
|
|
95
|
+
}
|
|
96
|
+
const values = [];
|
|
97
|
+
for (let offset = 0; offset < data.length; offset += intConfig.bytes) {
|
|
98
|
+
const unsigned = readUnsigned(data, offset, intConfig.bytes, intConfig.endian);
|
|
99
|
+
values.push(intConfig.signed ? toSigned(unsigned, intConfig.bytes * 8) : unsigned);
|
|
100
|
+
}
|
|
101
|
+
return values;
|
|
102
|
+
}
|
|
103
|
+
const floatConfig = floatEncodings[encoding];
|
|
104
|
+
if (floatConfig) {
|
|
105
|
+
return decodeFloats(data, floatConfig);
|
|
106
|
+
}
|
|
107
|
+
throw new Error(`Unsupported binary numeric encoding: ${encoding}`);
|
|
108
|
+
}
|
|
109
|
+
function getNumericEncodingInfo(encoding) {
|
|
110
|
+
const intConfig = intEncodings[encoding];
|
|
111
|
+
if (intConfig) {
|
|
112
|
+
return { kind: "int", bitWidth: intConfig.bytes * 8, signed: intConfig.signed };
|
|
113
|
+
}
|
|
114
|
+
const floatConfig = floatEncodings[encoding];
|
|
115
|
+
if (floatConfig) {
|
|
116
|
+
return { kind: "float", bitWidth: floatConfig.bytes * 8 };
|
|
117
|
+
}
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
function encodeValuesToBytes(values, encoding) {
|
|
121
|
+
const intConfig = intEncodings[encoding];
|
|
122
|
+
if (intConfig) {
|
|
123
|
+
const bytes = new Uint8Array(values.length * intConfig.bytes);
|
|
124
|
+
for (let i = 0; i < values.length; i += 1) {
|
|
125
|
+
const unsigned = toUnsignedInteger(values[i], intConfig.bytes * 8, intConfig.signed);
|
|
126
|
+
writeUnsigned(bytes, i * intConfig.bytes, intConfig.bytes, intConfig.endian, unsigned);
|
|
127
|
+
}
|
|
128
|
+
return bytes;
|
|
129
|
+
}
|
|
130
|
+
const floatConfig = floatEncodings[encoding];
|
|
131
|
+
if (floatConfig) {
|
|
132
|
+
return encodeFloats(values, floatConfig);
|
|
133
|
+
}
|
|
134
|
+
throw new Error(`Unsupported numeric encoding: ${encoding}`);
|
|
135
|
+
}
|
|
60
136
|
function encodeBinaryAsString(data, encoding) {
|
|
61
137
|
switch (encoding) {
|
|
62
138
|
case "hex":
|
|
63
139
|
return (0, hex_1.encodeHexString)(data);
|
|
140
|
+
case "ascii":
|
|
141
|
+
return bytesToAscii(data);
|
|
142
|
+
case "utf8":
|
|
143
|
+
return new TextDecoder("utf-8").decode(data);
|
|
144
|
+
case "base64":
|
|
145
|
+
return Buffer.from(data).toString("base64");
|
|
64
146
|
case "b85+1":
|
|
65
147
|
return (0, b85_1.base85Plus1Encode)(data);
|
|
66
|
-
case "lz85+1":
|
|
67
|
-
return (0, b85_1.base85Plus1Encode)((0, lz_1.lzCompress)(data, lz_1.gSomaticLZDefaultConfig));
|
|
68
148
|
default:
|
|
69
149
|
throw new Error(`Unsupported string encoding: ${encoding}`);
|
|
70
150
|
}
|
|
@@ -83,6 +163,18 @@ function readUnsigned(data, offset, bytes, endian) {
|
|
|
83
163
|
}
|
|
84
164
|
return value;
|
|
85
165
|
}
|
|
166
|
+
function writeUnsigned(data, offset, bytes, endian, value) {
|
|
167
|
+
if (endian === "le") {
|
|
168
|
+
for (let i = 0; i < bytes; i++) {
|
|
169
|
+
data[offset + i] = (value >> (8 * i)) & 0xff;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
for (let i = 0; i < bytes; i++) {
|
|
174
|
+
data[offset + (bytes - 1 - i)] = (value >> (8 * i)) & 0xff;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
86
178
|
function toSigned(value, bitWidth) {
|
|
87
179
|
const signBit = 2 ** (bitWidth - 1);
|
|
88
180
|
if (value >= signBit) {
|
|
@@ -91,4 +183,135 @@ function toSigned(value, bitWidth) {
|
|
|
91
183
|
}
|
|
92
184
|
return value;
|
|
93
185
|
}
|
|
186
|
+
function toUnsignedInteger(value, bitWidth, signed) {
|
|
187
|
+
if (!Number.isFinite(value)) {
|
|
188
|
+
throw new Error(`Value ${value} is not finite`);
|
|
189
|
+
}
|
|
190
|
+
if (!Number.isInteger(value)) {
|
|
191
|
+
throw new Error(`Value ${value} is not an integer`);
|
|
192
|
+
}
|
|
193
|
+
if (signed) {
|
|
194
|
+
const min = -(2 ** (bitWidth - 1));
|
|
195
|
+
const max = 2 ** (bitWidth - 1) - 1;
|
|
196
|
+
if (value < min || value > max) {
|
|
197
|
+
throw new Error(`Value ${value} is out of range for signed ${bitWidth}-bit integer`);
|
|
198
|
+
}
|
|
199
|
+
return value < 0 ? value + 2 ** bitWidth : value;
|
|
200
|
+
}
|
|
201
|
+
const max = 2 ** bitWidth - 1;
|
|
202
|
+
if (value < 0 || value > max) {
|
|
203
|
+
throw new Error(`Value ${value} is out of range for unsigned ${bitWidth}-bit integer`);
|
|
204
|
+
}
|
|
205
|
+
return value;
|
|
206
|
+
}
|
|
207
|
+
function decodeFloats(data, config) {
|
|
208
|
+
if (data.length % config.bytes !== 0) {
|
|
209
|
+
throw new Error(`Binary data length ${data.length} is not divisible by ${config.bytes}`);
|
|
210
|
+
}
|
|
211
|
+
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
212
|
+
const values = [];
|
|
213
|
+
for (let offset = 0; offset < data.length; offset += config.bytes) {
|
|
214
|
+
const littleEndian = config.endian === "le";
|
|
215
|
+
if (config.bytes === 4) {
|
|
216
|
+
values.push(view.getFloat32(offset, littleEndian));
|
|
217
|
+
}
|
|
218
|
+
else if (config.bytes === 8) {
|
|
219
|
+
values.push(view.getFloat64(offset, littleEndian));
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
const bits = view.getUint16(offset, littleEndian);
|
|
223
|
+
values.push(float16ToFloat32(bits));
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return values;
|
|
227
|
+
}
|
|
228
|
+
function encodeFloats(values, config) {
|
|
229
|
+
const data = new Uint8Array(values.length * config.bytes);
|
|
230
|
+
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
231
|
+
for (let i = 0; i < values.length; i += 1) {
|
|
232
|
+
const offset = i * config.bytes;
|
|
233
|
+
const littleEndian = config.endian === "le";
|
|
234
|
+
if (config.bytes === 4) {
|
|
235
|
+
view.setFloat32(offset, values[i], littleEndian);
|
|
236
|
+
}
|
|
237
|
+
else if (config.bytes === 8) {
|
|
238
|
+
view.setFloat64(offset, values[i], littleEndian);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
const bits = float32ToFloat16(values[i]);
|
|
242
|
+
view.setUint16(offset, bits, littleEndian);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return data;
|
|
246
|
+
}
|
|
247
|
+
function float32ToFloat16(value) {
|
|
248
|
+
if (Number.isNaN(value)) {
|
|
249
|
+
return 0x7e00;
|
|
250
|
+
}
|
|
251
|
+
if (value === Infinity) {
|
|
252
|
+
return 0x7c00;
|
|
253
|
+
}
|
|
254
|
+
if (value === -Infinity) {
|
|
255
|
+
return 0xfc00;
|
|
256
|
+
}
|
|
257
|
+
const floatView = new DataView(new ArrayBuffer(4));
|
|
258
|
+
floatView.setFloat32(0, value, true);
|
|
259
|
+
const bits = floatView.getUint32(0, true);
|
|
260
|
+
const sign = (bits >> 16) & 0x8000;
|
|
261
|
+
let exp = (bits >> 23) & 0xff;
|
|
262
|
+
let mantissa = bits & 0x7fffff;
|
|
263
|
+
if (exp === 0) {
|
|
264
|
+
return sign;
|
|
265
|
+
}
|
|
266
|
+
exp = exp - 127 + 15;
|
|
267
|
+
if (exp >= 0x1f) {
|
|
268
|
+
return sign | 0x7c00;
|
|
269
|
+
}
|
|
270
|
+
if (exp <= 0) {
|
|
271
|
+
if (exp < -10) {
|
|
272
|
+
return sign;
|
|
273
|
+
}
|
|
274
|
+
mantissa = (mantissa | 0x800000) >> (1 - exp);
|
|
275
|
+
return sign | ((mantissa + 0x1000) >> 13);
|
|
276
|
+
}
|
|
277
|
+
return sign | (exp << 10) | ((mantissa + 0x1000) >> 13);
|
|
278
|
+
}
|
|
279
|
+
function float16ToFloat32(bits) {
|
|
280
|
+
const sign = (bits & 0x8000) << 16;
|
|
281
|
+
let exp = (bits >> 10) & 0x1f;
|
|
282
|
+
let mantissa = bits & 0x3ff;
|
|
283
|
+
if (exp === 0) {
|
|
284
|
+
if (mantissa === 0) {
|
|
285
|
+
return sign ? -0 : 0;
|
|
286
|
+
}
|
|
287
|
+
exp = 1;
|
|
288
|
+
while ((mantissa & 0x400) === 0) {
|
|
289
|
+
mantissa <<= 1;
|
|
290
|
+
exp -= 1;
|
|
291
|
+
}
|
|
292
|
+
mantissa &= 0x3ff;
|
|
293
|
+
}
|
|
294
|
+
else if (exp === 0x1f) {
|
|
295
|
+
if (mantissa === 0) {
|
|
296
|
+
return sign ? -Infinity : Infinity;
|
|
297
|
+
}
|
|
298
|
+
return NaN;
|
|
299
|
+
}
|
|
300
|
+
const exp32 = exp - 15 + 127;
|
|
301
|
+
const bits32 = sign | (exp32 << 23) | (mantissa << 13);
|
|
302
|
+
const view = new DataView(new ArrayBuffer(4));
|
|
303
|
+
view.setUint32(0, bits32, true);
|
|
304
|
+
return view.getFloat32(0, true);
|
|
305
|
+
}
|
|
306
|
+
function bytesToAscii(data) {
|
|
307
|
+
let out = "";
|
|
308
|
+
for (let i = 0; i < data.length; i += 1) {
|
|
309
|
+
const byte = data[i];
|
|
310
|
+
if (byte > 0x7f) {
|
|
311
|
+
throw new Error(`ASCII decode: invalid byte ${byte} at index ${i}`);
|
|
312
|
+
}
|
|
313
|
+
out += String.fromCharCode(byte);
|
|
314
|
+
}
|
|
315
|
+
return out;
|
|
316
|
+
}
|
|
94
317
|
//# sourceMappingURL=luaBinaryEncoding.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"luaBinaryEncoding.js","sourceRoot":"","sources":["../../src/backend/luaBinaryEncoding.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"luaBinaryEncoding.js","sourceRoot":"","sources":["../../src/backend/luaBinaryEncoding.ts"],"names":[],"mappings":"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"}
|