@v5x/cli 0.0.6 → 0.0.7

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.
Files changed (2) hide show
  1. package/dist/index.js +14 -863
  2. package/package.json +4 -3
package/dist/index.js CHANGED
@@ -44,6 +44,7 @@ var __export = (target, all) => {
44
44
  set: __exportSetter.bind(all, name)
45
45
  });
46
46
  };
47
+ var __require = import.meta.require;
47
48
 
48
49
  // ../../node_modules/.bun/picocolors@1.1.1/node_modules/picocolors/picocolors.js
49
50
  var require_picocolors = __commonJS((exports, module) => {
@@ -117,7 +118,7 @@ var require_picocolors = __commonJS((exports, module) => {
117
118
  // package.json
118
119
  var package_default = {
119
120
  name: "@v5x/cli",
120
- version: "0.0.6",
121
+ version: "0.0.7",
121
122
  description: "Command line interface for v5x.",
122
123
  license: "MIT",
123
124
  type: "module",
@@ -141,7 +142,7 @@ var package_default = {
141
142
  access: "public"
142
143
  },
143
144
  scripts: {
144
- build: "bun build ./src/index.ts --target bun --outfile ./dist/index.js && chmod +x ./dist/index.js",
145
+ build: "bun build ./src/index.ts --target bun --external unzipit --outfile ./dist/index.js && chmod +x ./dist/index.js",
145
146
  dev: "bun run ./src/index.ts",
146
147
  lint: "bunx tsc --noEmit",
147
148
  prepublishOnly: "bun run typecheck && bun run build",
@@ -155,7 +156,8 @@ var package_default = {
155
156
  },
156
157
  dependencies: {
157
158
  "bun-serialport": "^0.1.1",
158
- picocolors: "^1.1.1"
159
+ picocolors: "^1.1.1",
160
+ unzipit: "^1.4.0"
159
161
  }
160
162
  };
161
163
 
@@ -2957,858 +2959,6 @@ function binaryArrayJoin(left, right) {
2957
2959
  const all = new Uint8Array(leftSize + rightSize);
2958
2960
  return all.length === 0 ? new Uint8Array : (left != null && all.set(new Uint8Array(left), 0), right != null && all.set(new Uint8Array(right), leftSize), all);
2959
2961
  }
2960
- // ../../node_modules/.bun/unzipit@1.4.3/node_modules/unzipit/dist/unzipit.module.js
2961
- function readBlobAsArrayBuffer(blob) {
2962
- if (blob.arrayBuffer) {
2963
- return blob.arrayBuffer();
2964
- }
2965
- return new Promise((resolve, reject) => {
2966
- const reader = new FileReader;
2967
- reader.addEventListener("loadend", () => {
2968
- resolve(reader.result);
2969
- });
2970
- reader.addEventListener("error", reject);
2971
- reader.readAsArrayBuffer(blob);
2972
- });
2973
- }
2974
- async function readBlobAsUint8Array(blob) {
2975
- const arrayBuffer = await readBlobAsArrayBuffer(blob);
2976
- return new Uint8Array(arrayBuffer);
2977
- }
2978
- function isBlob(v) {
2979
- return typeof Blob !== "undefined" && v instanceof Blob;
2980
- }
2981
- function isSharedArrayBuffer(b) {
2982
- return typeof SharedArrayBuffer !== "undefined" && b instanceof SharedArrayBuffer;
2983
- }
2984
- var isNode = typeof process !== "undefined" && process.versions && typeof process.versions.node !== "undefined" && typeof process.versions.electron === "undefined";
2985
- function isTypedArraySameAsArrayBuffer(typedArray) {
2986
- return typedArray.byteOffset === 0 && typedArray.byteLength === typedArray.buffer.byteLength;
2987
- }
2988
-
2989
- class ArrayBufferReader {
2990
- constructor(arrayBufferOrView) {
2991
- this.typedArray = arrayBufferOrView instanceof ArrayBuffer || isSharedArrayBuffer(arrayBufferOrView) ? new Uint8Array(arrayBufferOrView) : new Uint8Array(arrayBufferOrView.buffer, arrayBufferOrView.byteOffset, arrayBufferOrView.byteLength);
2992
- }
2993
- async getLength() {
2994
- return this.typedArray.byteLength;
2995
- }
2996
- async read(offset, length) {
2997
- return new Uint8Array(this.typedArray.buffer, this.typedArray.byteOffset + offset, length);
2998
- }
2999
- }
3000
-
3001
- class BlobReader {
3002
- constructor(blob) {
3003
- this.blob = blob;
3004
- }
3005
- async getLength() {
3006
- return this.blob.size;
3007
- }
3008
- async read(offset, length) {
3009
- const blob = this.blob.slice(offset, offset + length);
3010
- const arrayBuffer = await readBlobAsArrayBuffer(blob);
3011
- return new Uint8Array(arrayBuffer);
3012
- }
3013
- async sliceAsBlob(offset, length, type = "") {
3014
- return this.blob.slice(offset, offset + length, type);
3015
- }
3016
- }
3017
- function inflate(data, buf) {
3018
- var u8 = Uint8Array;
3019
- if (data[0] == 3 && data[1] == 0)
3020
- return buf ? buf : new u8(0);
3021
- var bitsF = _bitsF, bitsE = _bitsE, decodeTiny = _decodeTiny, get17 = _get17;
3022
- var noBuf = buf == null;
3023
- if (noBuf)
3024
- buf = new u8(data.length >>> 2 << 3);
3025
- var BFINAL = 0, BTYPE = 0, HLIT = 0, HDIST = 0, HCLEN = 0, ML = 0, MD = 0;
3026
- var off = 0, pos = 0;
3027
- var lmap, dmap;
3028
- while (BFINAL == 0) {
3029
- BFINAL = bitsF(data, pos, 1);
3030
- BTYPE = bitsF(data, pos + 1, 2);
3031
- pos += 3;
3032
- if (BTYPE == 0) {
3033
- if ((pos & 7) != 0)
3034
- pos += 8 - (pos & 7);
3035
- var p8 = (pos >>> 3) + 4, len = data[p8 - 4] | data[p8 - 3] << 8;
3036
- if (noBuf)
3037
- buf = _check(buf, off + len);
3038
- buf.set(new u8(data.buffer, data.byteOffset + p8, len), off);
3039
- pos = p8 + len << 3;
3040
- off += len;
3041
- continue;
3042
- }
3043
- if (noBuf)
3044
- buf = _check(buf, off + (1 << 17));
3045
- if (BTYPE == 1) {
3046
- lmap = U.flmap;
3047
- dmap = U.fdmap;
3048
- ML = (1 << 9) - 1;
3049
- MD = (1 << 5) - 1;
3050
- }
3051
- if (BTYPE == 2) {
3052
- HLIT = bitsE(data, pos, 5) + 257;
3053
- HDIST = bitsE(data, pos + 5, 5) + 1;
3054
- HCLEN = bitsE(data, pos + 10, 4) + 4;
3055
- pos += 14;
3056
- for (var i = 0;i < 38; i += 2) {
3057
- U.itree[i] = 0;
3058
- U.itree[i + 1] = 0;
3059
- }
3060
- var tl = 1;
3061
- for (var i = 0;i < HCLEN; i++) {
3062
- var l = bitsE(data, pos + i * 3, 3);
3063
- U.itree[(U.ordr[i] << 1) + 1] = l;
3064
- if (l > tl)
3065
- tl = l;
3066
- }
3067
- pos += 3 * HCLEN;
3068
- makeCodes(U.itree, tl);
3069
- codes2map(U.itree, tl, U.imap);
3070
- lmap = U.lmap;
3071
- dmap = U.dmap;
3072
- pos = decodeTiny(U.imap, (1 << tl) - 1, HLIT + HDIST, data, pos, U.ttree);
3073
- var mx0 = _copyOut(U.ttree, 0, HLIT, U.ltree);
3074
- ML = (1 << mx0) - 1;
3075
- var mx1 = _copyOut(U.ttree, HLIT, HDIST, U.dtree);
3076
- MD = (1 << mx1) - 1;
3077
- makeCodes(U.ltree, mx0);
3078
- codes2map(U.ltree, mx0, lmap);
3079
- makeCodes(U.dtree, mx1);
3080
- codes2map(U.dtree, mx1, dmap);
3081
- }
3082
- while (true) {
3083
- var code = lmap[get17(data, pos) & ML];
3084
- pos += code & 15;
3085
- var lit = code >>> 4;
3086
- if (lit >>> 8 == 0) {
3087
- buf[off++] = lit;
3088
- } else if (lit == 256) {
3089
- break;
3090
- } else {
3091
- var end = off + lit - 254;
3092
- if (lit > 264) {
3093
- var ebs = U.ldef[lit - 257];
3094
- end = off + (ebs >>> 3) + bitsE(data, pos, ebs & 7);
3095
- pos += ebs & 7;
3096
- }
3097
- var dcode = dmap[get17(data, pos) & MD];
3098
- pos += dcode & 15;
3099
- var dlit = dcode >>> 4;
3100
- var dbs = U.ddef[dlit], dst = (dbs >>> 4) + bitsF(data, pos, dbs & 15);
3101
- pos += dbs & 15;
3102
- if (noBuf)
3103
- buf = _check(buf, off + (1 << 17));
3104
- while (off < end) {
3105
- buf[off] = buf[off++ - dst];
3106
- buf[off] = buf[off++ - dst];
3107
- buf[off] = buf[off++ - dst];
3108
- buf[off] = buf[off++ - dst];
3109
- }
3110
- off = end;
3111
- }
3112
- }
3113
- }
3114
- return buf.length == off ? buf : buf.slice(0, off);
3115
- }
3116
- function _check(buf, len) {
3117
- var bl = buf.length;
3118
- if (len <= bl)
3119
- return buf;
3120
- var nbuf = new Uint8Array(Math.max(bl << 1, len));
3121
- nbuf.set(buf, 0);
3122
- return nbuf;
3123
- }
3124
- function _decodeTiny(lmap, LL, len, data, pos, tree) {
3125
- var bitsE = _bitsE, get17 = _get17;
3126
- var i = 0;
3127
- while (i < len) {
3128
- var code = lmap[get17(data, pos) & LL];
3129
- pos += code & 15;
3130
- var lit = code >>> 4;
3131
- if (lit <= 15) {
3132
- tree[i] = lit;
3133
- i++;
3134
- } else {
3135
- var ll = 0, n = 0;
3136
- if (lit == 16) {
3137
- n = 3 + bitsE(data, pos, 2);
3138
- pos += 2;
3139
- ll = tree[i - 1];
3140
- } else if (lit == 17) {
3141
- n = 3 + bitsE(data, pos, 3);
3142
- pos += 3;
3143
- } else if (lit == 18) {
3144
- n = 11 + bitsE(data, pos, 7);
3145
- pos += 7;
3146
- }
3147
- var ni = i + n;
3148
- while (i < ni) {
3149
- tree[i] = ll;
3150
- i++;
3151
- }
3152
- }
3153
- }
3154
- return pos;
3155
- }
3156
- function _copyOut(src, off, len, tree) {
3157
- var mx = 0, i = 0, tl = tree.length >>> 1;
3158
- while (i < len) {
3159
- var v = src[i + off];
3160
- tree[i << 1] = 0;
3161
- tree[(i << 1) + 1] = v;
3162
- if (v > mx)
3163
- mx = v;
3164
- i++;
3165
- }
3166
- while (i < tl) {
3167
- tree[i << 1] = 0;
3168
- tree[(i << 1) + 1] = 0;
3169
- i++;
3170
- }
3171
- return mx;
3172
- }
3173
- function makeCodes(tree, MAX_BITS) {
3174
- var max_code = tree.length;
3175
- var code, bits, n, i, len;
3176
- var bl_count = U.bl_count;
3177
- for (var i = 0;i <= MAX_BITS; i++)
3178
- bl_count[i] = 0;
3179
- for (i = 1;i < max_code; i += 2)
3180
- bl_count[tree[i]]++;
3181
- var next_code = U.next_code;
3182
- code = 0;
3183
- bl_count[0] = 0;
3184
- for (bits = 1;bits <= MAX_BITS; bits++) {
3185
- code = code + bl_count[bits - 1] << 1;
3186
- next_code[bits] = code;
3187
- }
3188
- for (n = 0;n < max_code; n += 2) {
3189
- len = tree[n + 1];
3190
- if (len != 0) {
3191
- tree[n] = next_code[len];
3192
- next_code[len]++;
3193
- }
3194
- }
3195
- }
3196
- function codes2map(tree, MAX_BITS, map) {
3197
- var max_code = tree.length;
3198
- var r15 = U.rev15;
3199
- for (var i = 0;i < max_code; i += 2)
3200
- if (tree[i + 1] != 0) {
3201
- var lit = i >> 1;
3202
- var cl = tree[i + 1], val = lit << 4 | cl;
3203
- var rest = MAX_BITS - cl, i0 = tree[i] << rest, i1 = i0 + (1 << rest);
3204
- while (i0 != i1) {
3205
- var p0 = r15[i0] >>> 15 - MAX_BITS;
3206
- map[p0] = val;
3207
- i0++;
3208
- }
3209
- }
3210
- }
3211
- function revCodes(tree, MAX_BITS) {
3212
- var r15 = U.rev15, imb = 15 - MAX_BITS;
3213
- for (var i = 0;i < tree.length; i += 2) {
3214
- var i0 = tree[i] << MAX_BITS - tree[i + 1];
3215
- tree[i] = r15[i0] >>> imb;
3216
- }
3217
- }
3218
- function _bitsE(dt, pos, length) {
3219
- return (dt[pos >>> 3] | dt[(pos >>> 3) + 1] << 8) >>> (pos & 7) & (1 << length) - 1;
3220
- }
3221
- function _bitsF(dt, pos, length) {
3222
- return (dt[pos >>> 3] | dt[(pos >>> 3) + 1] << 8 | dt[(pos >>> 3) + 2] << 16) >>> (pos & 7) & (1 << length) - 1;
3223
- }
3224
- function _get17(dt, pos) {
3225
- return (dt[pos >>> 3] | dt[(pos >>> 3) + 1] << 8 | dt[(pos >>> 3) + 2] << 16) >>> (pos & 7);
3226
- }
3227
- var U = function() {
3228
- var u16 = Uint16Array, u32 = Uint32Array;
3229
- return {
3230
- next_code: new u16(16),
3231
- bl_count: new u16(16),
3232
- ordr: [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],
3233
- of0: [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 999, 999, 999],
3234
- exb: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0],
3235
- ldef: new u16(32),
3236
- df0: [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 65535, 65535],
3237
- dxb: [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0],
3238
- ddef: new u32(32),
3239
- flmap: new u16(512),
3240
- fltree: [],
3241
- fdmap: new u16(32),
3242
- fdtree: [],
3243
- lmap: new u16(32768),
3244
- ltree: [],
3245
- ttree: [],
3246
- dmap: new u16(32768),
3247
- dtree: [],
3248
- imap: new u16(512),
3249
- itree: [],
3250
- rev15: new u16(1 << 15),
3251
- lhst: new u32(286),
3252
- dhst: new u32(30),
3253
- ihst: new u32(19),
3254
- lits: new u32(15000),
3255
- strt: new u16(1 << 16),
3256
- prev: new u16(1 << 15)
3257
- };
3258
- }();
3259
- (function() {
3260
- var len = 1 << 15;
3261
- for (var i = 0;i < len; i++) {
3262
- var x = i;
3263
- x = (x & 2863311530) >>> 1 | (x & 1431655765) << 1;
3264
- x = (x & 3435973836) >>> 2 | (x & 858993459) << 2;
3265
- x = (x & 4042322160) >>> 4 | (x & 252645135) << 4;
3266
- x = (x & 4278255360) >>> 8 | (x & 16711935) << 8;
3267
- U.rev15[i] = (x >>> 16 | x << 16) >>> 17;
3268
- }
3269
- function pushV(tgt, n, sv) {
3270
- while (n-- != 0)
3271
- tgt.push(0, sv);
3272
- }
3273
- for (var i = 0;i < 32; i++) {
3274
- U.ldef[i] = U.of0[i] << 3 | U.exb[i];
3275
- U.ddef[i] = U.df0[i] << 4 | U.dxb[i];
3276
- }
3277
- pushV(U.fltree, 144, 8);
3278
- pushV(U.fltree, 255 - 143, 9);
3279
- pushV(U.fltree, 279 - 255, 7);
3280
- pushV(U.fltree, 287 - 279, 8);
3281
- makeCodes(U.fltree, 9);
3282
- codes2map(U.fltree, 9, U.flmap);
3283
- revCodes(U.fltree, 9);
3284
- pushV(U.fdtree, 32, 5);
3285
- makeCodes(U.fdtree, 5);
3286
- codes2map(U.fdtree, 5, U.fdmap);
3287
- revCodes(U.fdtree, 5);
3288
- pushV(U.itree, 19, 0);
3289
- pushV(U.ltree, 286, 0);
3290
- pushV(U.dtree, 30, 0);
3291
- pushV(U.ttree, 320, 0);
3292
- })();
3293
- var crc = {
3294
- table: function() {
3295
- var tab = new Uint32Array(256);
3296
- for (var n = 0;n < 256; n++) {
3297
- var c = n;
3298
- for (var k = 0;k < 8; k++) {
3299
- if (c & 1)
3300
- c = 3988292384 ^ c >>> 1;
3301
- else
3302
- c = c >>> 1;
3303
- }
3304
- tab[n] = c;
3305
- }
3306
- return tab;
3307
- }(),
3308
- update: function(c, buf, off, len) {
3309
- for (var i = 0;i < len; i++)
3310
- c = crc.table[(c ^ buf[off + i]) & 255] ^ c >>> 8;
3311
- return c;
3312
- },
3313
- crc: function(b, o, l) {
3314
- return crc.update(4294967295, b, o, l) ^ 4294967295;
3315
- }
3316
- };
3317
- function inflateRaw(file, buf) {
3318
- return inflate(file, buf);
3319
- }
3320
- var config = {
3321
- numWorkers: 1,
3322
- workerURL: "",
3323
- useWorkers: false
3324
- };
3325
- var nextId = 0;
3326
- var numWorkers = 0;
3327
- var canUseWorkers = true;
3328
- var workers = [];
3329
- var availableWorkers = [];
3330
- var waitingForWorkerQueue = [];
3331
- var currentlyProcessingIdToRequestMap = new Map;
3332
- function handleResult(e) {
3333
- makeWorkerAvailable(e.target);
3334
- const { id, error, data } = e.data;
3335
- const request = currentlyProcessingIdToRequestMap.get(id);
3336
- currentlyProcessingIdToRequestMap.delete(id);
3337
- if (error) {
3338
- request.reject(error);
3339
- } else {
3340
- request.resolve(data);
3341
- }
3342
- }
3343
- function startWorker(url) {
3344
- return new Promise((resolve, reject) => {
3345
- const worker = new Worker(url);
3346
- worker.onmessage = (e) => {
3347
- if (e.data === "start") {
3348
- worker.onerror = undefined;
3349
- worker.onmessage = undefined;
3350
- resolve(worker);
3351
- } else {
3352
- reject(new Error(`unexpected message: ${e.data}`));
3353
- }
3354
- };
3355
- worker.onerror = reject;
3356
- });
3357
- }
3358
- function dynamicRequire(mod, request) {
3359
- return mod.require ? mod.require(request) : {};
3360
- }
3361
- var workerHelper = function() {
3362
- if (isNode) {
3363
- const { Worker: Worker2 } = dynamicRequire(module_unzipit_module, "worker_threads");
3364
- return {
3365
- async createWorker(url) {
3366
- return new Worker2(url);
3367
- },
3368
- addEventListener(worker, fn) {
3369
- worker.on("message", (data) => {
3370
- fn({ target: worker, data });
3371
- });
3372
- },
3373
- async terminate(worker) {
3374
- await worker.terminate();
3375
- }
3376
- };
3377
- } else {
3378
- return {
3379
- async createWorker(url) {
3380
- try {
3381
- const worker = await startWorker(url);
3382
- return worker;
3383
- } catch (e) {
3384
- console.warn("could not load worker:", url);
3385
- }
3386
- let text;
3387
- try {
3388
- const req = await fetch(url, { mode: "cors" });
3389
- if (!req.ok) {
3390
- throw new Error(`could not load: ${url}`);
3391
- }
3392
- text = await req.text();
3393
- url = URL.createObjectURL(new Blob([text], { type: "application/javascript" }));
3394
- const worker = await startWorker(url);
3395
- config.workerURL = url;
3396
- return worker;
3397
- } catch (e) {
3398
- console.warn("could not load worker via fetch:", url);
3399
- }
3400
- if (text !== undefined) {
3401
- try {
3402
- url = `data:application/javascript;base64,${btoa(text)}`;
3403
- const worker = await startWorker(url);
3404
- config.workerURL = url;
3405
- return worker;
3406
- } catch (e) {
3407
- console.warn("could not load worker via dataURI");
3408
- }
3409
- }
3410
- console.warn("workers will not be used");
3411
- throw new Error("can not start workers");
3412
- },
3413
- addEventListener(worker, fn) {
3414
- worker.addEventListener("message", fn);
3415
- },
3416
- async terminate(worker) {
3417
- worker.terminate();
3418
- }
3419
- };
3420
- }
3421
- }();
3422
- function makeWorkerAvailable(worker) {
3423
- availableWorkers.push(worker);
3424
- processWaitingForWorkerQueue();
3425
- }
3426
- async function getAvailableWorker() {
3427
- if (availableWorkers.length === 0 && numWorkers < config.numWorkers) {
3428
- ++numWorkers;
3429
- try {
3430
- const worker = await workerHelper.createWorker(config.workerURL);
3431
- workers.push(worker);
3432
- availableWorkers.push(worker);
3433
- workerHelper.addEventListener(worker, handleResult);
3434
- } catch (e) {
3435
- canUseWorkers = false;
3436
- }
3437
- }
3438
- return availableWorkers.pop();
3439
- }
3440
- function inflateRawLocal(src, uncompressedSize, type, resolve) {
3441
- const dst = new Uint8Array(uncompressedSize);
3442
- inflateRaw(src, dst);
3443
- resolve(type ? new Blob([dst], { type }) : dst.buffer);
3444
- }
3445
- async function processWaitingForWorkerQueue() {
3446
- if (waitingForWorkerQueue.length === 0) {
3447
- return;
3448
- }
3449
- if (config.useWorkers && canUseWorkers) {
3450
- const worker = await getAvailableWorker();
3451
- if (canUseWorkers) {
3452
- if (worker) {
3453
- if (waitingForWorkerQueue.length === 0) {
3454
- makeWorkerAvailable(worker);
3455
- return;
3456
- }
3457
- const { id, src, uncompressedSize, type, resolve, reject } = waitingForWorkerQueue.shift();
3458
- currentlyProcessingIdToRequestMap.set(id, { id, resolve, reject });
3459
- const transferables = [];
3460
- worker.postMessage({
3461
- type: "inflate",
3462
- data: {
3463
- id,
3464
- type,
3465
- src,
3466
- uncompressedSize
3467
- }
3468
- }, transferables);
3469
- }
3470
- return;
3471
- }
3472
- }
3473
- while (waitingForWorkerQueue.length) {
3474
- const { src, uncompressedSize, type, resolve } = waitingForWorkerQueue.shift();
3475
- let data = src;
3476
- if (isBlob(src)) {
3477
- data = await readBlobAsUint8Array(src);
3478
- }
3479
- inflateRawLocal(data, uncompressedSize, type, resolve);
3480
- }
3481
- }
3482
- function inflateRawAsync(src, uncompressedSize, type) {
3483
- return new Promise((resolve, reject) => {
3484
- waitingForWorkerQueue.push({ src, uncompressedSize, type, resolve, reject, id: nextId++ });
3485
- processWaitingForWorkerQueue();
3486
- });
3487
- }
3488
- function dosDateTimeToDate(date, time) {
3489
- const day = date & 31;
3490
- const month = (date >> 5 & 15) - 1;
3491
- const year = (date >> 9 & 127) + 1980;
3492
- const millisecond = 0;
3493
- const second = (time & 31) * 2;
3494
- const minute = time >> 5 & 63;
3495
- const hour = time >> 11 & 31;
3496
- return new Date(year, month, day, hour, minute, second, millisecond);
3497
- }
3498
-
3499
- class ZipEntry {
3500
- constructor(reader, rawEntry) {
3501
- this._reader = reader;
3502
- this._rawEntry = rawEntry;
3503
- this.name = rawEntry.name;
3504
- this.nameBytes = rawEntry.nameBytes;
3505
- this.size = rawEntry.uncompressedSize;
3506
- this.compressedSize = rawEntry.compressedSize;
3507
- this.comment = rawEntry.comment;
3508
- this.commentBytes = rawEntry.commentBytes;
3509
- this.compressionMethod = rawEntry.compressionMethod;
3510
- this.lastModDate = dosDateTimeToDate(rawEntry.lastModFileDate, rawEntry.lastModFileTime);
3511
- this.isDirectory = rawEntry.uncompressedSize === 0 && rawEntry.name.endsWith("/");
3512
- this.encrypted = !!(rawEntry.generalPurposeBitFlag & 1);
3513
- this.externalFileAttributes = rawEntry.externalFileAttributes;
3514
- this.versionMadeBy = rawEntry.versionMadeBy;
3515
- }
3516
- async blob(type = "application/octet-stream") {
3517
- return await readEntryDataAsBlob(this._reader, this._rawEntry, type);
3518
- }
3519
- async arrayBuffer() {
3520
- return await readEntryDataAsArrayBuffer(this._reader, this._rawEntry);
3521
- }
3522
- async text() {
3523
- const buffer = await this.arrayBuffer();
3524
- return decodeBuffer(new Uint8Array(buffer));
3525
- }
3526
- async json() {
3527
- const text = await this.text();
3528
- return JSON.parse(text);
3529
- }
3530
- }
3531
- var EOCDR_WITHOUT_COMMENT_SIZE = 22;
3532
- var MAX_COMMENT_SIZE = 65535;
3533
- var EOCDR_SIGNATURE = 101010256;
3534
- var ZIP64_EOCDR_SIGNATURE = 101075792;
3535
- async function readAs(reader, offset, length) {
3536
- return await reader.read(offset, length);
3537
- }
3538
- async function readAsBlobOrTypedArray(reader, offset, length, type) {
3539
- if (reader.sliceAsBlob) {
3540
- return await reader.sliceAsBlob(offset, length, type);
3541
- }
3542
- return await reader.read(offset, length);
3543
- }
3544
- var crc$1 = {
3545
- unsigned() {
3546
- return 0;
3547
- }
3548
- };
3549
- function getUint16LE(uint8View, offset) {
3550
- return uint8View[offset] + uint8View[offset + 1] * 256;
3551
- }
3552
- function getUint32LE(uint8View, offset) {
3553
- return uint8View[offset] + uint8View[offset + 1] * 256 + uint8View[offset + 2] * 65536 + uint8View[offset + 3] * 16777216;
3554
- }
3555
- function getUint64LE(uint8View, offset) {
3556
- return getUint32LE(uint8View, offset) + getUint32LE(uint8View, offset + 4) * 4294967296;
3557
- }
3558
- var utf8Decoder = new TextDecoder;
3559
- function decodeBuffer(uint8View, isUTF8) {
3560
- if (isSharedArrayBuffer(uint8View.buffer)) {
3561
- uint8View = new Uint8Array(uint8View);
3562
- }
3563
- return utf8Decoder.decode(uint8View);
3564
- }
3565
- async function findEndOfCentralDirector(reader, totalLength) {
3566
- const size = Math.min(EOCDR_WITHOUT_COMMENT_SIZE + MAX_COMMENT_SIZE, totalLength);
3567
- const readStart = totalLength - size;
3568
- const data = await readAs(reader, readStart, size);
3569
- for (let i = size - EOCDR_WITHOUT_COMMENT_SIZE;i >= 0; --i) {
3570
- if (getUint32LE(data, i) !== EOCDR_SIGNATURE) {
3571
- continue;
3572
- }
3573
- const eocdr = new Uint8Array(data.buffer, data.byteOffset + i, data.byteLength - i);
3574
- const diskNumber = getUint16LE(eocdr, 4);
3575
- if (diskNumber !== 0) {
3576
- throw new Error(`multi-volume zip files are not supported. This is volume: ${diskNumber}`);
3577
- }
3578
- const entryCount = getUint16LE(eocdr, 10);
3579
- const centralDirectorySize = getUint32LE(eocdr, 12);
3580
- const centralDirectoryOffset = getUint32LE(eocdr, 16);
3581
- const commentLength = getUint16LE(eocdr, 20);
3582
- const expectedCommentLength = eocdr.length - EOCDR_WITHOUT_COMMENT_SIZE;
3583
- if (commentLength !== expectedCommentLength) {
3584
- throw new Error(`invalid comment length. expected: ${expectedCommentLength}, actual: ${commentLength}`);
3585
- }
3586
- const commentBytes = new Uint8Array(eocdr.buffer, eocdr.byteOffset + 22, commentLength);
3587
- const comment = decodeBuffer(commentBytes);
3588
- if (entryCount === 65535 || centralDirectoryOffset === 4294967295) {
3589
- return await readZip64CentralDirectory(reader, readStart + i, comment, commentBytes);
3590
- } else {
3591
- return await readEntries(reader, centralDirectoryOffset, centralDirectorySize, entryCount, comment, commentBytes);
3592
- }
3593
- }
3594
- throw new Error("could not find end of central directory. maybe not zip file");
3595
- }
3596
- var END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE = 117853008;
3597
- async function readZip64CentralDirectory(reader, offset, comment, commentBytes) {
3598
- const zip64EocdlOffset = offset - 20;
3599
- const eocdl = await readAs(reader, zip64EocdlOffset, 20);
3600
- if (getUint32LE(eocdl, 0) !== END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE) {
3601
- throw new Error("invalid zip64 end of central directory locator signature");
3602
- }
3603
- const zip64EocdrOffset = getUint64LE(eocdl, 8);
3604
- const zip64Eocdr = await readAs(reader, zip64EocdrOffset, 56);
3605
- if (getUint32LE(zip64Eocdr, 0) !== ZIP64_EOCDR_SIGNATURE) {
3606
- throw new Error("invalid zip64 end of central directory record signature");
3607
- }
3608
- const entryCount = getUint64LE(zip64Eocdr, 32);
3609
- const centralDirectorySize = getUint64LE(zip64Eocdr, 40);
3610
- const centralDirectoryOffset = getUint64LE(zip64Eocdr, 48);
3611
- return readEntries(reader, centralDirectoryOffset, centralDirectorySize, entryCount, comment, commentBytes);
3612
- }
3613
- var CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE = 33639248;
3614
- async function readEntries(reader, centralDirectoryOffset, centralDirectorySize, rawEntryCount, comment, commentBytes) {
3615
- let readEntryCursor = 0;
3616
- const allEntriesBuffer = await readAs(reader, centralDirectoryOffset, centralDirectorySize);
3617
- const rawEntries = [];
3618
- for (let e = 0;e < rawEntryCount; ++e) {
3619
- const buffer = allEntriesBuffer.subarray(readEntryCursor, readEntryCursor + 46);
3620
- const signature = getUint32LE(buffer, 0);
3621
- if (signature !== CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE) {
3622
- throw new Error(`invalid central directory file header signature: 0x${signature.toString(16)}`);
3623
- }
3624
- const rawEntry = {
3625
- versionMadeBy: getUint16LE(buffer, 4),
3626
- versionNeededToExtract: getUint16LE(buffer, 6),
3627
- generalPurposeBitFlag: getUint16LE(buffer, 8),
3628
- compressionMethod: getUint16LE(buffer, 10),
3629
- lastModFileTime: getUint16LE(buffer, 12),
3630
- lastModFileDate: getUint16LE(buffer, 14),
3631
- crc32: getUint32LE(buffer, 16),
3632
- compressedSize: getUint32LE(buffer, 20),
3633
- uncompressedSize: getUint32LE(buffer, 24),
3634
- fileNameLength: getUint16LE(buffer, 28),
3635
- extraFieldLength: getUint16LE(buffer, 30),
3636
- fileCommentLength: getUint16LE(buffer, 32),
3637
- internalFileAttributes: getUint16LE(buffer, 36),
3638
- externalFileAttributes: getUint32LE(buffer, 38),
3639
- relativeOffsetOfLocalHeader: getUint32LE(buffer, 42)
3640
- };
3641
- if (rawEntry.generalPurposeBitFlag & 64) {
3642
- throw new Error("strong encryption is not supported");
3643
- }
3644
- readEntryCursor += 46;
3645
- const data = allEntriesBuffer.subarray(readEntryCursor, readEntryCursor + rawEntry.fileNameLength + rawEntry.extraFieldLength + rawEntry.fileCommentLength);
3646
- rawEntry.nameBytes = data.slice(0, rawEntry.fileNameLength);
3647
- rawEntry.name = decodeBuffer(rawEntry.nameBytes);
3648
- const fileCommentStart = rawEntry.fileNameLength + rawEntry.extraFieldLength;
3649
- const extraFieldBuffer = data.slice(rawEntry.fileNameLength, fileCommentStart);
3650
- rawEntry.extraFields = [];
3651
- let i = 0;
3652
- while (i < extraFieldBuffer.length - 3) {
3653
- const headerId = getUint16LE(extraFieldBuffer, i + 0);
3654
- const dataSize = getUint16LE(extraFieldBuffer, i + 2);
3655
- const dataStart = i + 4;
3656
- const dataEnd = dataStart + dataSize;
3657
- if (dataEnd > extraFieldBuffer.length) {
3658
- throw new Error("extra field length exceeds extra field buffer size");
3659
- }
3660
- rawEntry.extraFields.push({
3661
- id: headerId,
3662
- data: extraFieldBuffer.slice(dataStart, dataEnd)
3663
- });
3664
- i = dataEnd;
3665
- }
3666
- rawEntry.commentBytes = data.slice(fileCommentStart, fileCommentStart + rawEntry.fileCommentLength);
3667
- rawEntry.comment = decodeBuffer(rawEntry.commentBytes);
3668
- readEntryCursor += data.length;
3669
- if (rawEntry.uncompressedSize === 4294967295 || rawEntry.compressedSize === 4294967295 || rawEntry.relativeOffsetOfLocalHeader === 4294967295) {
3670
- const zip64ExtraField = rawEntry.extraFields.find((e2) => e2.id === 1);
3671
- if (!zip64ExtraField) {
3672
- throw new Error("expected zip64 extended information extra field");
3673
- }
3674
- const zip64EiefBuffer = zip64ExtraField.data;
3675
- let index = 0;
3676
- if (rawEntry.uncompressedSize === 4294967295) {
3677
- if (index + 8 > zip64EiefBuffer.length) {
3678
- throw new Error("zip64 extended information extra field does not include uncompressed size");
3679
- }
3680
- rawEntry.uncompressedSize = getUint64LE(zip64EiefBuffer, index);
3681
- index += 8;
3682
- }
3683
- if (rawEntry.compressedSize === 4294967295) {
3684
- if (index + 8 > zip64EiefBuffer.length) {
3685
- throw new Error("zip64 extended information extra field does not include compressed size");
3686
- }
3687
- rawEntry.compressedSize = getUint64LE(zip64EiefBuffer, index);
3688
- index += 8;
3689
- }
3690
- if (rawEntry.relativeOffsetOfLocalHeader === 4294967295) {
3691
- if (index + 8 > zip64EiefBuffer.length) {
3692
- throw new Error("zip64 extended information extra field does not include relative header offset");
3693
- }
3694
- rawEntry.relativeOffsetOfLocalHeader = getUint64LE(zip64EiefBuffer, index);
3695
- index += 8;
3696
- }
3697
- }
3698
- const nameField = rawEntry.extraFields.find((e2) => e2.id === 28789 && e2.data.length >= 6 && e2.data[0] === 1 && getUint32LE(e2.data, 1), crc$1.unsigned(rawEntry.nameBytes));
3699
- if (nameField) {
3700
- rawEntry.fileName = decodeBuffer(nameField.data.slice(5));
3701
- }
3702
- if (rawEntry.compressionMethod === 0) {
3703
- let expectedCompressedSize = rawEntry.uncompressedSize;
3704
- if ((rawEntry.generalPurposeBitFlag & 1) !== 0) {
3705
- expectedCompressedSize += 12;
3706
- }
3707
- if (rawEntry.compressedSize !== expectedCompressedSize) {
3708
- throw new Error(`compressed size mismatch for stored file: ${rawEntry.compressedSize} != ${expectedCompressedSize}`);
3709
- }
3710
- }
3711
- rawEntries.push(rawEntry);
3712
- }
3713
- const zip = {
3714
- comment,
3715
- commentBytes
3716
- };
3717
- return {
3718
- zip,
3719
- entries: rawEntries.map((e) => new ZipEntry(reader, e))
3720
- };
3721
- }
3722
- async function readEntryDataHeader(reader, rawEntry) {
3723
- if (rawEntry.generalPurposeBitFlag & 1) {
3724
- throw new Error("encrypted entries not supported");
3725
- }
3726
- const buffer = await readAs(reader, rawEntry.relativeOffsetOfLocalHeader, 30);
3727
- const totalLength = await reader.getLength();
3728
- const signature = getUint32LE(buffer, 0);
3729
- if (signature !== 67324752) {
3730
- throw new Error(`invalid local file header signature: 0x${signature.toString(16)}`);
3731
- }
3732
- const fileNameLength = getUint16LE(buffer, 26);
3733
- const extraFieldLength = getUint16LE(buffer, 28);
3734
- const localFileHeaderEnd = rawEntry.relativeOffsetOfLocalHeader + buffer.length + fileNameLength + extraFieldLength;
3735
- let decompress;
3736
- if (rawEntry.compressionMethod === 0) {
3737
- decompress = false;
3738
- } else if (rawEntry.compressionMethod === 8) {
3739
- decompress = true;
3740
- } else {
3741
- throw new Error(`unsupported compression method: ${rawEntry.compressionMethod}`);
3742
- }
3743
- const fileDataStart = localFileHeaderEnd;
3744
- const fileDataEnd = fileDataStart + rawEntry.compressedSize;
3745
- if (rawEntry.compressedSize !== 0) {
3746
- if (fileDataEnd > totalLength) {
3747
- throw new Error(`file data overflows file bounds: ${fileDataStart} + ${rawEntry.compressedSize} > ${totalLength}`);
3748
- }
3749
- }
3750
- return {
3751
- decompress,
3752
- fileDataStart
3753
- };
3754
- }
3755
- async function readEntryDataAsArrayBuffer(reader, rawEntry) {
3756
- const { decompress, fileDataStart } = await readEntryDataHeader(reader, rawEntry);
3757
- if (!decompress) {
3758
- const dataView = await readAs(reader, fileDataStart, rawEntry.compressedSize);
3759
- return isTypedArraySameAsArrayBuffer(dataView) ? dataView.buffer : dataView.slice().buffer;
3760
- }
3761
- const typedArrayOrBlob = await readAsBlobOrTypedArray(reader, fileDataStart, rawEntry.compressedSize);
3762
- const result = await inflateRawAsync(typedArrayOrBlob, rawEntry.uncompressedSize);
3763
- return result;
3764
- }
3765
- async function readEntryDataAsBlob(reader, rawEntry, type) {
3766
- const { decompress, fileDataStart } = await readEntryDataHeader(reader, rawEntry);
3767
- if (!decompress) {
3768
- const typedArrayOrBlob2 = await readAsBlobOrTypedArray(reader, fileDataStart, rawEntry.compressedSize, type);
3769
- if (isBlob(typedArrayOrBlob2)) {
3770
- return typedArrayOrBlob2;
3771
- }
3772
- return new Blob([isSharedArrayBuffer(typedArrayOrBlob2.buffer) ? new Uint8Array(typedArrayOrBlob2) : typedArrayOrBlob2], { type });
3773
- }
3774
- const typedArrayOrBlob = await readAsBlobOrTypedArray(reader, fileDataStart, rawEntry.compressedSize);
3775
- const result = await inflateRawAsync(typedArrayOrBlob, rawEntry.uncompressedSize, type);
3776
- return result;
3777
- }
3778
- async function unzipRaw(source) {
3779
- let reader;
3780
- if (typeof Blob !== "undefined" && source instanceof Blob) {
3781
- reader = new BlobReader(source);
3782
- } else if (source instanceof ArrayBuffer || source && source.buffer && source.buffer instanceof ArrayBuffer) {
3783
- reader = new ArrayBufferReader(source);
3784
- } else if (isSharedArrayBuffer(source) || isSharedArrayBuffer(source.buffer)) {
3785
- reader = new ArrayBufferReader(source);
3786
- } else if (typeof source === "string") {
3787
- const req = await fetch(source);
3788
- if (!req.ok) {
3789
- throw new Error(`failed http request ${source}, status: ${req.status}: ${req.statusText}`);
3790
- }
3791
- const blob = await req.blob();
3792
- reader = new BlobReader(blob);
3793
- } else if (typeof source.getLength === "function" && typeof source.read === "function") {
3794
- reader = source;
3795
- } else {
3796
- throw new Error("unsupported source type");
3797
- }
3798
- const totalLength = await reader.getLength();
3799
- if (totalLength > Number.MAX_SAFE_INTEGER) {
3800
- throw new Error(`file too large. size: ${totalLength}. Only file sizes up 4503599627370496 bytes are supported`);
3801
- }
3802
- return await findEndOfCentralDirector(reader, totalLength);
3803
- }
3804
- async function unzip(source) {
3805
- const { zip, entries } = await unzipRaw(source);
3806
- return {
3807
- zip,
3808
- entries: Object.fromEntries(entries.map((v) => [v.name, v]))
3809
- };
3810
- }
3811
-
3812
2962
  // ../serial/src/VexDevice.ts
3813
2963
  async function downloadFileFromInternet(link) {
3814
2964
  return await new Promise((resolve, reject) => {
@@ -4120,6 +3270,7 @@ class V5Brain {
4120
3270
  vexos = await downloadFileFromInternet(publicUrl + usingVersion + ".vexos");
4121
3271
  pcb("FETCH VEXOS", 1, 1);
4122
3272
  pcb("UNZIP VEXOS", 0, 1);
3273
+ const { unzip } = await import("unzipit");
4123
3274
  const { entries } = await unzip(vexos);
4124
3275
  bootBin = await entries[usingVersion + "/BOOT.bin"].arrayBuffer();
4125
3276
  assertBin = await entries[usingVersion + "/assets.bin"].arrayBuffer();
@@ -4595,14 +3746,14 @@ class V5SerialDevice extends VexSerialDevice {
4595
3746
  if (sfPacket == null)
4596
3747
  return false;
4597
3748
  const flags5 = sfPacket.flags;
4598
- this.state.radio.isRadioData = (flags5 & Math.pow(2, 32 - 12)) !== 0;
4599
- this.state.brain.button.isDoublePressed = (flags5 & Math.pow(2, 32 - 14)) !== 0;
4600
- this.state.brain.battery.isCharging = (flags5 & Math.pow(2, 32 - 15)) !== 0;
4601
- this.state.brain.button.isPressed = (flags5 & Math.pow(2, 32 - 17)) !== 0;
4602
- this.state.radio.isVexNet = (flags5 & Math.pow(2, 32 - 18)) !== 0;
4603
- this.state.controllers[1].isAvailable = (flags5 & Math.pow(2, 32 - 19)) !== 0;
4604
- this.state.radio.isConnected = (flags5 & Math.pow(2, 32 - 22)) !== 0;
4605
- this.state.radio.isAvailable = (flags5 & Math.pow(2, 32 - 23)) !== 0;
3749
+ this.state.radio.isRadioData = (flags5 & Math.pow(2, 20)) !== 0;
3750
+ this.state.brain.button.isDoublePressed = (flags5 & Math.pow(2, 18)) !== 0;
3751
+ this.state.brain.battery.isCharging = (flags5 & Math.pow(2, 17)) !== 0;
3752
+ this.state.brain.button.isPressed = (flags5 & Math.pow(2, 15)) !== 0;
3753
+ this.state.radio.isVexNet = (flags5 & Math.pow(2, 14)) !== 0;
3754
+ this.state.controllers[1].isAvailable = (flags5 & Math.pow(2, 13)) !== 0;
3755
+ this.state.radio.isConnected = (flags5 & Math.pow(2, 10)) !== 0;
3756
+ this.state.radio.isAvailable = (flags5 & Math.pow(2, 9)) !== 0;
4606
3757
  this.state.brain.battery.batteryPercent = sfPacket.battery ?? 0;
4607
3758
  this.state.controllers[0].isAvailable = this.state.radio.isConnected || this.state.controllers[0].isCharging;
4608
3759
  this.state.controllers[0].battery = sfPacket.controllerBatteryPercent ?? 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@v5x/cli",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "Command line interface for v5x.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -24,7 +24,7 @@
24
24
  "access": "public"
25
25
  },
26
26
  "scripts": {
27
- "build": "bun build ./src/index.ts --target bun --outfile ./dist/index.js && chmod +x ./dist/index.js",
27
+ "build": "bun build ./src/index.ts --target bun --external unzipit --outfile ./dist/index.js && chmod +x ./dist/index.js",
28
28
  "dev": "bun run ./src/index.ts",
29
29
  "lint": "bunx tsc --noEmit",
30
30
  "prepublishOnly": "bun run typecheck && bun run build",
@@ -38,6 +38,7 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "bun-serialport": "^0.1.1",
41
- "picocolors": "^1.1.1"
41
+ "picocolors": "^1.1.1",
42
+ "unzipit": "^1.4.0"
42
43
  }
43
44
  }