@hot-updater/test-utils 1.2.0-rc.1 → 1.2.0-rc.3
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/dist/node.cjs +564 -0
- package/dist/node.d.cts +26 -1
- package/dist/node.d.mts +27 -2
- package/dist/node.mjs +561 -1
- package/package.json +10 -9
package/dist/node.cjs
CHANGED
|
@@ -35,6 +35,10 @@ let node_child_process = require("node:child_process");
|
|
|
35
35
|
let node_net = require("node:net");
|
|
36
36
|
node_net = __toESM(node_net, 1);
|
|
37
37
|
let node_http = require("node:http");
|
|
38
|
+
let node_stream = require("node:stream");
|
|
39
|
+
let node_util = require("node:util");
|
|
40
|
+
let node_process = require("node:process");
|
|
41
|
+
node_process = __toESM(node_process, 1);
|
|
38
42
|
let execa = require("execa");
|
|
39
43
|
//#region src/d1TestDatabase.ts
|
|
40
44
|
/**
|
|
@@ -20357,6 +20361,563 @@ const createReleaseCatalogTestStorage = () => ({
|
|
|
20357
20361
|
}
|
|
20358
20362
|
});
|
|
20359
20363
|
//#endregion
|
|
20364
|
+
//#region ../../node_modules/.pnpm/fast-string-truncated-width@3.0.3/node_modules/fast-string-truncated-width/dist/utils.js
|
|
20365
|
+
const getCodePointsLength = (() => {
|
|
20366
|
+
const SURROGATE_PAIR_RE = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
|
|
20367
|
+
return (input) => {
|
|
20368
|
+
let surrogatePairsNr = 0;
|
|
20369
|
+
SURROGATE_PAIR_RE.lastIndex = 0;
|
|
20370
|
+
while (SURROGATE_PAIR_RE.test(input)) surrogatePairsNr += 1;
|
|
20371
|
+
return input.length - surrogatePairsNr;
|
|
20372
|
+
};
|
|
20373
|
+
})();
|
|
20374
|
+
const isFullWidth = (x) => {
|
|
20375
|
+
return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
|
|
20376
|
+
};
|
|
20377
|
+
const isWideNotCJKTNotEmoji = (x) => {
|
|
20378
|
+
return x === 8987 || x === 9001 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12771 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 19903 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141;
|
|
20379
|
+
};
|
|
20380
|
+
//#endregion
|
|
20381
|
+
//#region ../../node_modules/.pnpm/fast-string-truncated-width@3.0.3/node_modules/fast-string-truncated-width/dist/index.js
|
|
20382
|
+
const ANSI_RE = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y;
|
|
20383
|
+
const CONTROL_RE = /[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y;
|
|
20384
|
+
const CJKT_WIDE_RE = /(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/uy;
|
|
20385
|
+
const TAB_RE = /\t{1,1000}/y;
|
|
20386
|
+
const EMOJI_RE = /[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/uy;
|
|
20387
|
+
const LATIN_RE = /(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y;
|
|
20388
|
+
const MODIFIER_RE = /\p{M}+/gu;
|
|
20389
|
+
const NO_TRUNCATION$1 = {
|
|
20390
|
+
limit: Infinity,
|
|
20391
|
+
ellipsis: ""
|
|
20392
|
+
};
|
|
20393
|
+
const getStringTruncatedWidth = (input, truncationOptions = {}, widthOptions = {}) => {
|
|
20394
|
+
const LIMIT = truncationOptions.limit ?? Infinity;
|
|
20395
|
+
const ELLIPSIS = truncationOptions.ellipsis ?? "";
|
|
20396
|
+
const ELLIPSIS_WIDTH = truncationOptions?.ellipsisWidth ?? (ELLIPSIS ? getStringTruncatedWidth(ELLIPSIS, NO_TRUNCATION$1, widthOptions).width : 0);
|
|
20397
|
+
const ANSI_WIDTH = 0;
|
|
20398
|
+
const CONTROL_WIDTH = widthOptions.controlWidth ?? 0;
|
|
20399
|
+
const TAB_WIDTH = widthOptions.tabWidth ?? 8;
|
|
20400
|
+
const EMOJI_WIDTH = widthOptions.emojiWidth ?? 2;
|
|
20401
|
+
const FULL_WIDTH_WIDTH = 2;
|
|
20402
|
+
const REGULAR_WIDTH = widthOptions.regularWidth ?? 1;
|
|
20403
|
+
const WIDE_WIDTH = widthOptions.wideWidth ?? FULL_WIDTH_WIDTH;
|
|
20404
|
+
const PARSE_BLOCKS = [
|
|
20405
|
+
[LATIN_RE, REGULAR_WIDTH],
|
|
20406
|
+
[ANSI_RE, ANSI_WIDTH],
|
|
20407
|
+
[CONTROL_RE, CONTROL_WIDTH],
|
|
20408
|
+
[TAB_RE, TAB_WIDTH],
|
|
20409
|
+
[EMOJI_RE, EMOJI_WIDTH],
|
|
20410
|
+
[CJKT_WIDE_RE, WIDE_WIDTH]
|
|
20411
|
+
];
|
|
20412
|
+
let indexPrev = 0;
|
|
20413
|
+
let index = 0;
|
|
20414
|
+
let length = input.length;
|
|
20415
|
+
let lengthExtra = 0;
|
|
20416
|
+
let truncationEnabled = false;
|
|
20417
|
+
let truncationIndex = length;
|
|
20418
|
+
let truncationLimit = Math.max(0, LIMIT - ELLIPSIS_WIDTH);
|
|
20419
|
+
let unmatchedStart = 0;
|
|
20420
|
+
let unmatchedEnd = 0;
|
|
20421
|
+
let width = 0;
|
|
20422
|
+
let widthExtra = 0;
|
|
20423
|
+
outer: while (true) {
|
|
20424
|
+
if (unmatchedEnd > unmatchedStart || index >= length && index > indexPrev) {
|
|
20425
|
+
const unmatched = input.slice(unmatchedStart, unmatchedEnd) || input.slice(indexPrev, index);
|
|
20426
|
+
lengthExtra = 0;
|
|
20427
|
+
for (const char of unmatched.replaceAll(MODIFIER_RE, "")) {
|
|
20428
|
+
const codePoint = char.codePointAt(0) || 0;
|
|
20429
|
+
if (isFullWidth(codePoint)) widthExtra = FULL_WIDTH_WIDTH;
|
|
20430
|
+
else if (isWideNotCJKTNotEmoji(codePoint)) widthExtra = WIDE_WIDTH;
|
|
20431
|
+
else widthExtra = REGULAR_WIDTH;
|
|
20432
|
+
if (width + widthExtra > truncationLimit) truncationIndex = Math.min(truncationIndex, Math.max(unmatchedStart, indexPrev) + lengthExtra);
|
|
20433
|
+
if (width + widthExtra > LIMIT) {
|
|
20434
|
+
truncationEnabled = true;
|
|
20435
|
+
break outer;
|
|
20436
|
+
}
|
|
20437
|
+
lengthExtra += char.length;
|
|
20438
|
+
width += widthExtra;
|
|
20439
|
+
}
|
|
20440
|
+
unmatchedStart = unmatchedEnd = 0;
|
|
20441
|
+
}
|
|
20442
|
+
if (index >= length) break outer;
|
|
20443
|
+
for (let i = 0, l = PARSE_BLOCKS.length; i < l; i++) {
|
|
20444
|
+
const [BLOCK_RE, BLOCK_WIDTH] = PARSE_BLOCKS[i];
|
|
20445
|
+
BLOCK_RE.lastIndex = index;
|
|
20446
|
+
if (BLOCK_RE.test(input)) {
|
|
20447
|
+
lengthExtra = BLOCK_RE === CJKT_WIDE_RE ? getCodePointsLength(input.slice(index, BLOCK_RE.lastIndex)) : BLOCK_RE === EMOJI_RE ? 1 : BLOCK_RE.lastIndex - index;
|
|
20448
|
+
widthExtra = lengthExtra * BLOCK_WIDTH;
|
|
20449
|
+
if (width + widthExtra > truncationLimit) truncationIndex = Math.min(truncationIndex, index + Math.floor((truncationLimit - width) / BLOCK_WIDTH));
|
|
20450
|
+
if (width + widthExtra > LIMIT) {
|
|
20451
|
+
truncationEnabled = true;
|
|
20452
|
+
break outer;
|
|
20453
|
+
}
|
|
20454
|
+
width += widthExtra;
|
|
20455
|
+
unmatchedStart = indexPrev;
|
|
20456
|
+
unmatchedEnd = index;
|
|
20457
|
+
index = indexPrev = BLOCK_RE.lastIndex;
|
|
20458
|
+
continue outer;
|
|
20459
|
+
}
|
|
20460
|
+
}
|
|
20461
|
+
index += 1;
|
|
20462
|
+
}
|
|
20463
|
+
return {
|
|
20464
|
+
width: truncationEnabled ? truncationLimit : width,
|
|
20465
|
+
index: truncationEnabled ? truncationIndex : length,
|
|
20466
|
+
truncated: truncationEnabled,
|
|
20467
|
+
ellipsed: truncationEnabled && LIMIT >= ELLIPSIS_WIDTH
|
|
20468
|
+
};
|
|
20469
|
+
};
|
|
20470
|
+
//#endregion
|
|
20471
|
+
//#region ../../node_modules/.pnpm/fast-string-width@3.0.2/node_modules/fast-string-width/dist/index.js
|
|
20472
|
+
const NO_TRUNCATION = {
|
|
20473
|
+
limit: Infinity,
|
|
20474
|
+
ellipsis: "",
|
|
20475
|
+
ellipsisWidth: 0
|
|
20476
|
+
};
|
|
20477
|
+
const fastStringWidth = (input, options = {}) => {
|
|
20478
|
+
return getStringTruncatedWidth(input, NO_TRUNCATION, options).width;
|
|
20479
|
+
};
|
|
20480
|
+
//#endregion
|
|
20481
|
+
//#region ../../node_modules/.pnpm/fast-wrap-ansi@0.2.2/node_modules/fast-wrap-ansi/lib/main.js
|
|
20482
|
+
const ESC = "\x1B";
|
|
20483
|
+
const CSI = "";
|
|
20484
|
+
const END_CODE = 39;
|
|
20485
|
+
const ANSI_ESCAPE_BELL = "\x07";
|
|
20486
|
+
const ANSI_CSI = "[";
|
|
20487
|
+
const ANSI_OSC = "]";
|
|
20488
|
+
const ANSI_SGR_TERMINATOR = "m";
|
|
20489
|
+
const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;
|
|
20490
|
+
const GROUP_REGEX = new RegExp(`(?:\\${ANSI_CSI}(?<code>\\d+)m|\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`, "y");
|
|
20491
|
+
const getClosingCode = (openingCode) => {
|
|
20492
|
+
if (openingCode >= 30 && openingCode <= 37) return 39;
|
|
20493
|
+
if (openingCode >= 90 && openingCode <= 97) return 39;
|
|
20494
|
+
if (openingCode >= 40 && openingCode <= 47) return 49;
|
|
20495
|
+
if (openingCode >= 100 && openingCode <= 107) return 49;
|
|
20496
|
+
if (openingCode === 1 || openingCode === 2) return 22;
|
|
20497
|
+
if (openingCode === 3) return 23;
|
|
20498
|
+
if (openingCode === 4) return 24;
|
|
20499
|
+
if (openingCode === 7) return 27;
|
|
20500
|
+
if (openingCode === 8) return 28;
|
|
20501
|
+
if (openingCode === 9) return 29;
|
|
20502
|
+
if (openingCode === 0) return 0;
|
|
20503
|
+
};
|
|
20504
|
+
const wrapAnsiCode = (code) => `${ESC}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;
|
|
20505
|
+
const wrapAnsiHyperlink = (url) => `${ESC}${ANSI_ESCAPE_LINK}${url}${ANSI_ESCAPE_BELL}`;
|
|
20506
|
+
const wrapWord = (rows, word, columns) => {
|
|
20507
|
+
const characters = word[Symbol.iterator]();
|
|
20508
|
+
let isInsideEscape = false;
|
|
20509
|
+
let isInsideLinkEscape = false;
|
|
20510
|
+
let lastRow = rows.at(-1);
|
|
20511
|
+
let visible = lastRow === void 0 ? 0 : fastStringWidth(lastRow);
|
|
20512
|
+
let currentCharacter = characters.next();
|
|
20513
|
+
let nextCharacter = characters.next();
|
|
20514
|
+
let rawCharacterIndex = 0;
|
|
20515
|
+
while (!currentCharacter.done) {
|
|
20516
|
+
const character = currentCharacter.value;
|
|
20517
|
+
const characterLength = fastStringWidth(character);
|
|
20518
|
+
if (visible + characterLength <= columns) rows[rows.length - 1] += character;
|
|
20519
|
+
else {
|
|
20520
|
+
rows.push(character);
|
|
20521
|
+
visible = 0;
|
|
20522
|
+
}
|
|
20523
|
+
if (character === ESC || character === CSI) {
|
|
20524
|
+
isInsideEscape = true;
|
|
20525
|
+
isInsideLinkEscape = word.startsWith(ANSI_ESCAPE_LINK, rawCharacterIndex + 1);
|
|
20526
|
+
}
|
|
20527
|
+
if (isInsideEscape) {
|
|
20528
|
+
if (isInsideLinkEscape) {
|
|
20529
|
+
if (character === ANSI_ESCAPE_BELL) {
|
|
20530
|
+
isInsideEscape = false;
|
|
20531
|
+
isInsideLinkEscape = false;
|
|
20532
|
+
}
|
|
20533
|
+
} else if (character === ANSI_SGR_TERMINATOR) isInsideEscape = false;
|
|
20534
|
+
} else {
|
|
20535
|
+
visible += characterLength;
|
|
20536
|
+
if (visible === columns && !nextCharacter.done) {
|
|
20537
|
+
rows.push("");
|
|
20538
|
+
visible = 0;
|
|
20539
|
+
}
|
|
20540
|
+
}
|
|
20541
|
+
currentCharacter = nextCharacter;
|
|
20542
|
+
nextCharacter = characters.next();
|
|
20543
|
+
rawCharacterIndex += character.length;
|
|
20544
|
+
}
|
|
20545
|
+
lastRow = rows.at(-1);
|
|
20546
|
+
if (!visible && lastRow !== void 0 && lastRow.length && rows.length > 1) rows[rows.length - 2] += rows.pop();
|
|
20547
|
+
};
|
|
20548
|
+
const stringVisibleTrimSpacesRight = (string) => {
|
|
20549
|
+
const words = string.split(" ");
|
|
20550
|
+
let last = words.length;
|
|
20551
|
+
while (last) {
|
|
20552
|
+
if (fastStringWidth(words[last - 1])) break;
|
|
20553
|
+
last--;
|
|
20554
|
+
}
|
|
20555
|
+
if (last === words.length) return string;
|
|
20556
|
+
return words.slice(0, last).join(" ") + words.slice(last).join("");
|
|
20557
|
+
};
|
|
20558
|
+
const exec = (string, columns, options = {}) => {
|
|
20559
|
+
if (options.trim !== false && string.trim() === "") return "";
|
|
20560
|
+
let returnValue = "";
|
|
20561
|
+
let escapeCode;
|
|
20562
|
+
let escapeUrl;
|
|
20563
|
+
const words = string.split(" ");
|
|
20564
|
+
let rows = [""];
|
|
20565
|
+
let rowLength = 0;
|
|
20566
|
+
for (let index = 0; index < words.length; index++) {
|
|
20567
|
+
const word = words[index];
|
|
20568
|
+
if (options.trim !== false) {
|
|
20569
|
+
const row = rows.at(-1) ?? "";
|
|
20570
|
+
const trimmed = row.trimStart();
|
|
20571
|
+
if (row.length !== trimmed.length) {
|
|
20572
|
+
rows[rows.length - 1] = trimmed;
|
|
20573
|
+
rowLength = fastStringWidth(trimmed);
|
|
20574
|
+
}
|
|
20575
|
+
}
|
|
20576
|
+
if (index !== 0) {
|
|
20577
|
+
if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {
|
|
20578
|
+
rows.push("");
|
|
20579
|
+
rowLength = 0;
|
|
20580
|
+
}
|
|
20581
|
+
if (rowLength || options.trim === false) {
|
|
20582
|
+
rows[rows.length - 1] += " ";
|
|
20583
|
+
rowLength++;
|
|
20584
|
+
}
|
|
20585
|
+
}
|
|
20586
|
+
const wordLength = fastStringWidth(word);
|
|
20587
|
+
if (options.hard && wordLength > columns) {
|
|
20588
|
+
const remainingColumns = columns - rowLength;
|
|
20589
|
+
const breaksStartingThisLine = 1 + Math.floor((wordLength - remainingColumns - 1) / columns);
|
|
20590
|
+
if (Math.floor((wordLength - 1) / columns) < breaksStartingThisLine) rows.push("");
|
|
20591
|
+
wrapWord(rows, word, columns);
|
|
20592
|
+
rowLength = fastStringWidth(rows.at(-1) ?? "");
|
|
20593
|
+
continue;
|
|
20594
|
+
}
|
|
20595
|
+
if (rowLength + wordLength > columns && rowLength && wordLength) {
|
|
20596
|
+
if (options.wordWrap === false && rowLength < columns) {
|
|
20597
|
+
wrapWord(rows, word, columns);
|
|
20598
|
+
rowLength = fastStringWidth(rows.at(-1) ?? "");
|
|
20599
|
+
continue;
|
|
20600
|
+
}
|
|
20601
|
+
rows.push("");
|
|
20602
|
+
rowLength = 0;
|
|
20603
|
+
}
|
|
20604
|
+
if (rowLength + wordLength > columns && options.wordWrap === false) {
|
|
20605
|
+
wrapWord(rows, word, columns);
|
|
20606
|
+
rowLength = fastStringWidth(rows.at(-1) ?? "");
|
|
20607
|
+
continue;
|
|
20608
|
+
}
|
|
20609
|
+
rows[rows.length - 1] += word;
|
|
20610
|
+
rowLength += wordLength;
|
|
20611
|
+
}
|
|
20612
|
+
if (options.trim !== false) rows = rows.map((row) => stringVisibleTrimSpacesRight(row));
|
|
20613
|
+
const preString = rows.join("\n");
|
|
20614
|
+
let inSurrogate = false;
|
|
20615
|
+
for (let i = 0; i < preString.length; i++) {
|
|
20616
|
+
const character = preString[i];
|
|
20617
|
+
returnValue += character;
|
|
20618
|
+
if (!inSurrogate) {
|
|
20619
|
+
inSurrogate = character >= "\ud800" && character <= "\udbff";
|
|
20620
|
+
if (inSurrogate) continue;
|
|
20621
|
+
} else inSurrogate = false;
|
|
20622
|
+
if (character === ESC || character === CSI) {
|
|
20623
|
+
GROUP_REGEX.lastIndex = i + 1;
|
|
20624
|
+
const groups = GROUP_REGEX.exec(preString)?.groups;
|
|
20625
|
+
if (groups?.code !== void 0) {
|
|
20626
|
+
const code = Number.parseFloat(groups.code);
|
|
20627
|
+
escapeCode = code === END_CODE ? void 0 : code;
|
|
20628
|
+
} else if (groups?.uri !== void 0) escapeUrl = groups.uri.length === 0 ? void 0 : groups.uri;
|
|
20629
|
+
}
|
|
20630
|
+
if (preString[i + 1] === "\n") {
|
|
20631
|
+
if (escapeUrl) returnValue += wrapAnsiHyperlink("");
|
|
20632
|
+
const closingCode = escapeCode ? getClosingCode(escapeCode) : void 0;
|
|
20633
|
+
if (escapeCode && closingCode) returnValue += wrapAnsiCode(closingCode);
|
|
20634
|
+
} else if (character === "\n") {
|
|
20635
|
+
if (escapeCode && getClosingCode(escapeCode)) returnValue += wrapAnsiCode(escapeCode);
|
|
20636
|
+
if (escapeUrl) returnValue += wrapAnsiHyperlink(escapeUrl);
|
|
20637
|
+
}
|
|
20638
|
+
}
|
|
20639
|
+
return returnValue;
|
|
20640
|
+
};
|
|
20641
|
+
const CRLF_OR_LF = /\r?\n/;
|
|
20642
|
+
function wrapAnsi(string, columns, options) {
|
|
20643
|
+
return String(string).normalize().split(CRLF_OR_LF).map((line) => exec(line, columns, options)).join("\n");
|
|
20644
|
+
}
|
|
20645
|
+
(/* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
20646
|
+
const ESC = "\x1B";
|
|
20647
|
+
const CSI = `${ESC}[`;
|
|
20648
|
+
const beep = "\x07";
|
|
20649
|
+
const cursor = {
|
|
20650
|
+
to(x, y) {
|
|
20651
|
+
if (!y) return `${CSI}${x + 1}G`;
|
|
20652
|
+
return `${CSI}${y + 1};${x + 1}H`;
|
|
20653
|
+
},
|
|
20654
|
+
move(x, y) {
|
|
20655
|
+
let ret = "";
|
|
20656
|
+
if (x < 0) ret += `${CSI}${-x}D`;
|
|
20657
|
+
else if (x > 0) ret += `${CSI}${x}C`;
|
|
20658
|
+
if (y < 0) ret += `${CSI}${-y}A`;
|
|
20659
|
+
else if (y > 0) ret += `${CSI}${y}B`;
|
|
20660
|
+
return ret;
|
|
20661
|
+
},
|
|
20662
|
+
up: (count = 1) => `${CSI}${count}A`,
|
|
20663
|
+
down: (count = 1) => `${CSI}${count}B`,
|
|
20664
|
+
forward: (count = 1) => `${CSI}${count}C`,
|
|
20665
|
+
backward: (count = 1) => `${CSI}${count}D`,
|
|
20666
|
+
nextLine: (count = 1) => `${CSI}E`.repeat(count),
|
|
20667
|
+
prevLine: (count = 1) => `${CSI}F`.repeat(count),
|
|
20668
|
+
left: `${CSI}G`,
|
|
20669
|
+
hide: `${CSI}?25l`,
|
|
20670
|
+
show: `${CSI}?25h`,
|
|
20671
|
+
save: `${ESC}7`,
|
|
20672
|
+
restore: `${ESC}8`
|
|
20673
|
+
};
|
|
20674
|
+
module.exports = {
|
|
20675
|
+
cursor,
|
|
20676
|
+
scroll: {
|
|
20677
|
+
up: (count = 1) => `${CSI}S`.repeat(count),
|
|
20678
|
+
down: (count = 1) => `${CSI}T`.repeat(count)
|
|
20679
|
+
},
|
|
20680
|
+
erase: {
|
|
20681
|
+
screen: `${CSI}2J`,
|
|
20682
|
+
up: (count = 1) => `${CSI}1J`.repeat(count),
|
|
20683
|
+
down: (count = 1) => `${CSI}J`.repeat(count),
|
|
20684
|
+
line: `${CSI}2K`,
|
|
20685
|
+
lineEnd: `${CSI}K`,
|
|
20686
|
+
lineStart: `${CSI}1K`,
|
|
20687
|
+
lines(count) {
|
|
20688
|
+
let clear = "";
|
|
20689
|
+
for (let i = 0; i < count; i++) clear += this.line + (i < count - 1 ? cursor.up() : "");
|
|
20690
|
+
if (count) clear += cursor.left;
|
|
20691
|
+
return clear;
|
|
20692
|
+
}
|
|
20693
|
+
},
|
|
20694
|
+
beep
|
|
20695
|
+
};
|
|
20696
|
+
})))();
|
|
20697
|
+
const settings = {
|
|
20698
|
+
actions: /* @__PURE__ */ new Set([
|
|
20699
|
+
"up",
|
|
20700
|
+
"down",
|
|
20701
|
+
"left",
|
|
20702
|
+
"right",
|
|
20703
|
+
"space",
|
|
20704
|
+
"enter",
|
|
20705
|
+
"cancel"
|
|
20706
|
+
]),
|
|
20707
|
+
aliases: /* @__PURE__ */ new Map([
|
|
20708
|
+
["k", "up"],
|
|
20709
|
+
["j", "down"],
|
|
20710
|
+
["h", "left"],
|
|
20711
|
+
["l", "right"],
|
|
20712
|
+
["", "cancel"],
|
|
20713
|
+
["escape", "cancel"]
|
|
20714
|
+
]),
|
|
20715
|
+
messages: {
|
|
20716
|
+
cancel: "Canceled",
|
|
20717
|
+
error: "Something went wrong"
|
|
20718
|
+
},
|
|
20719
|
+
withGuide: true,
|
|
20720
|
+
date: {
|
|
20721
|
+
monthNames: [...[
|
|
20722
|
+
"January",
|
|
20723
|
+
"February",
|
|
20724
|
+
"March",
|
|
20725
|
+
"April",
|
|
20726
|
+
"May",
|
|
20727
|
+
"June",
|
|
20728
|
+
"July",
|
|
20729
|
+
"August",
|
|
20730
|
+
"September",
|
|
20731
|
+
"October",
|
|
20732
|
+
"November",
|
|
20733
|
+
"December"
|
|
20734
|
+
]],
|
|
20735
|
+
messages: {
|
|
20736
|
+
required: "Please enter a valid date",
|
|
20737
|
+
invalidMonth: "There are only 12 months in a year",
|
|
20738
|
+
invalidDay: (n, e) => `There are only ${n} days in ${e}`,
|
|
20739
|
+
afterMin: (n) => `Date must be on or after ${n.toISOString().slice(0, 10)}`,
|
|
20740
|
+
beforeMax: (n) => `Date must be on or before ${n.toISOString().slice(0, 10)}`
|
|
20741
|
+
}
|
|
20742
|
+
}
|
|
20743
|
+
};
|
|
20744
|
+
globalThis.process.platform.startsWith("win");
|
|
20745
|
+
const getColumns = (e) => "columns" in e && typeof e.columns == "number" ? e.columns : 80;
|
|
20746
|
+
//#endregion
|
|
20747
|
+
//#region ../../node_modules/.pnpm/@clack+prompts@1.7.0/node_modules/@clack/prompts/dist/index.mjs
|
|
20748
|
+
function isUnicodeSupported() {
|
|
20749
|
+
if (node_process.default.platform !== "win32") return node_process.default.env.TERM !== "linux";
|
|
20750
|
+
return Boolean(node_process.default.env.CI) || Boolean(node_process.default.env.WT_SESSION) || Boolean(node_process.default.env.TERMINUS_SUBLIME) || node_process.default.env.ConEmuTask === "{cmd::Cmder}" || node_process.default.env.TERM_PROGRAM === "Terminus-Sublime" || node_process.default.env.TERM_PROGRAM === "vscode" || node_process.default.env.TERM === "xterm-256color" || node_process.default.env.TERM === "alacritty" || node_process.default.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
|
|
20751
|
+
}
|
|
20752
|
+
const unicode = isUnicodeSupported();
|
|
20753
|
+
const unicodeOr = (o, e) => unicode ? o : e;
|
|
20754
|
+
const S_STEP_SUBMIT = unicodeOr("◇", "o");
|
|
20755
|
+
const S_BAR_START = unicodeOr("┌", "T");
|
|
20756
|
+
const S_BAR = unicodeOr("│", "|");
|
|
20757
|
+
const S_BAR_END = unicodeOr("└", "—");
|
|
20758
|
+
const S_BAR_H = unicodeOr("─", "-");
|
|
20759
|
+
const S_CORNER_TOP_RIGHT = unicodeOr("╮", "+");
|
|
20760
|
+
const S_CONNECT_LEFT = unicodeOr("├", "+");
|
|
20761
|
+
const S_CORNER_BOTTOM_RIGHT = unicodeOr("╯", "+");
|
|
20762
|
+
const S_CORNER_BOTTOM_LEFT = unicodeOr("╰", "+");
|
|
20763
|
+
const S_INFO = unicodeOr("●", "•");
|
|
20764
|
+
const S_SUCCESS = unicodeOr("◆", "*");
|
|
20765
|
+
const S_WARN = unicodeOr("▲", "!");
|
|
20766
|
+
const S_ERROR = unicodeOr("■", "x");
|
|
20767
|
+
`${(0, node_util.styleText)("dim", "↑/↓")}`, `${(0, node_util.styleText)("dim", "Space:")}`, `${(0, node_util.styleText)("dim", "Enter:")}`;
|
|
20768
|
+
const log = {
|
|
20769
|
+
message: (s = [], { symbol: e = (0, node_util.styleText)("gray", S_BAR), secondarySymbol: r = (0, node_util.styleText)("gray", S_BAR), output: m = process.stdout, spacing: l = 1, withGuide: c } = {}) => {
|
|
20770
|
+
const t = [], o = c ?? settings.withGuide, f = o ? r : "", O = o ? `${e} ` : "", u = o ? `${r} ` : "";
|
|
20771
|
+
for (let i = 0; i < l; i++) t.push(f);
|
|
20772
|
+
const g = Array.isArray(s) ? s : s.split(`
|
|
20773
|
+
`);
|
|
20774
|
+
if (g.length > 0) {
|
|
20775
|
+
const [i, ...y] = g;
|
|
20776
|
+
i.length > 0 ? t.push(`${O}${i}`) : t.push(o ? e : "");
|
|
20777
|
+
for (const p of y) p.length > 0 ? t.push(`${u}${p}`) : t.push(o ? r : "");
|
|
20778
|
+
}
|
|
20779
|
+
m.write(`${t.join(`
|
|
20780
|
+
`)}
|
|
20781
|
+
`);
|
|
20782
|
+
},
|
|
20783
|
+
info: (s, e) => {
|
|
20784
|
+
log.message(s, {
|
|
20785
|
+
...e,
|
|
20786
|
+
symbol: (0, node_util.styleText)("blue", S_INFO)
|
|
20787
|
+
});
|
|
20788
|
+
},
|
|
20789
|
+
success: (s, e) => {
|
|
20790
|
+
log.message(s, {
|
|
20791
|
+
...e,
|
|
20792
|
+
symbol: (0, node_util.styleText)("green", S_SUCCESS)
|
|
20793
|
+
});
|
|
20794
|
+
},
|
|
20795
|
+
step: (s, e) => {
|
|
20796
|
+
log.message(s, {
|
|
20797
|
+
...e,
|
|
20798
|
+
symbol: (0, node_util.styleText)("green", S_STEP_SUBMIT)
|
|
20799
|
+
});
|
|
20800
|
+
},
|
|
20801
|
+
warn: (s, e) => {
|
|
20802
|
+
log.message(s, {
|
|
20803
|
+
...e,
|
|
20804
|
+
symbol: (0, node_util.styleText)("yellow", S_WARN)
|
|
20805
|
+
});
|
|
20806
|
+
},
|
|
20807
|
+
/** alias for `log.warn()`. */
|
|
20808
|
+
warning: (s, e) => {
|
|
20809
|
+
log.warn(s, e);
|
|
20810
|
+
},
|
|
20811
|
+
error: (s, e) => {
|
|
20812
|
+
log.message(s, {
|
|
20813
|
+
...e,
|
|
20814
|
+
symbol: (0, node_util.styleText)("red", S_ERROR)
|
|
20815
|
+
});
|
|
20816
|
+
}
|
|
20817
|
+
};
|
|
20818
|
+
const cancel = (o = "", t) => {
|
|
20819
|
+
const i = t?.output ?? process.stdout, e = t?.withGuide ?? settings.withGuide ? `${(0, node_util.styleText)("gray", S_BAR_END)} ` : "";
|
|
20820
|
+
i.write(`${e}${(0, node_util.styleText)("red", o)}
|
|
20821
|
+
|
|
20822
|
+
`);
|
|
20823
|
+
};
|
|
20824
|
+
const intro = (o = "", t) => {
|
|
20825
|
+
const i = t?.output ?? process.stdout, e = t?.withGuide ?? settings.withGuide ? `${(0, node_util.styleText)("gray", S_BAR_START)} ` : "";
|
|
20826
|
+
i.write(`${e}${o}
|
|
20827
|
+
`);
|
|
20828
|
+
};
|
|
20829
|
+
const outro = (o = "", t) => {
|
|
20830
|
+
const i = t?.output ?? process.stdout, e = t?.withGuide ?? settings.withGuide ? `${(0, node_util.styleText)("gray", S_BAR)}
|
|
20831
|
+
${(0, node_util.styleText)("gray", S_BAR_END)} ` : "";
|
|
20832
|
+
i.write(`${e}${o}
|
|
20833
|
+
|
|
20834
|
+
`);
|
|
20835
|
+
};
|
|
20836
|
+
const W$1 = (o) => o;
|
|
20837
|
+
const C = (o, e, s) => {
|
|
20838
|
+
const a = {
|
|
20839
|
+
hard: true,
|
|
20840
|
+
trim: false
|
|
20841
|
+
}, i = wrapAnsi(o, e, a).split(`
|
|
20842
|
+
`), c = i.reduce((n, t) => Math.max(fastStringWidth(t), n), 0);
|
|
20843
|
+
return wrapAnsi(o, e - (i.map(s).reduce((n, t) => Math.max(fastStringWidth(t), n), 0) - c), a);
|
|
20844
|
+
};
|
|
20845
|
+
const note = (o = "", e = "", s) => {
|
|
20846
|
+
const a = s?.output ?? node_process.default.stdout, i = s?.withGuide ?? settings.withGuide, c = s?.format ?? W$1, g = [
|
|
20847
|
+
"",
|
|
20848
|
+
...C(o, getColumns(a) - 6, c).split(`
|
|
20849
|
+
`).map(c),
|
|
20850
|
+
""
|
|
20851
|
+
], n = fastStringWidth(e), t = Math.max(g.reduce((m, F) => {
|
|
20852
|
+
const O = fastStringWidth(F);
|
|
20853
|
+
return O > m ? O : m;
|
|
20854
|
+
}, 0), n) + 2, h = g.map((m) => `${(0, node_util.styleText)("gray", S_BAR)} ${m}${" ".repeat(t - fastStringWidth(m))}${(0, node_util.styleText)("gray", S_BAR)}`).join(`
|
|
20855
|
+
`), T = i ? `${(0, node_util.styleText)("gray", S_BAR)}
|
|
20856
|
+
` : "", l$1 = i ? S_CONNECT_LEFT : S_CORNER_BOTTOM_LEFT;
|
|
20857
|
+
a.write(`${T}${(0, node_util.styleText)("green", S_STEP_SUBMIT)} ${(0, node_util.styleText)("reset", e)} ${(0, node_util.styleText)("gray", S_BAR_H.repeat(Math.max(t - n - 1, 1)) + S_CORNER_TOP_RIGHT)}
|
|
20858
|
+
${h}
|
|
20859
|
+
${(0, node_util.styleText)("gray", l$1 + S_BAR_H.repeat(t + 2) + S_CORNER_BOTTOM_RIGHT)}
|
|
20860
|
+
`);
|
|
20861
|
+
};
|
|
20862
|
+
`${(0, node_util.styleText)("dim", "↑/↓")}`, `${(0, node_util.styleText)("dim", "Enter:")}`;
|
|
20863
|
+
`${(0, node_util.styleText)("gray", S_BAR)}`;
|
|
20864
|
+
//#endregion
|
|
20865
|
+
//#region src/renderClackLog.ts
|
|
20866
|
+
const METHODS = /* @__PURE__ */ new Set([
|
|
20867
|
+
"message",
|
|
20868
|
+
"info",
|
|
20869
|
+
"success",
|
|
20870
|
+
"step",
|
|
20871
|
+
"warn",
|
|
20872
|
+
"error",
|
|
20873
|
+
"note",
|
|
20874
|
+
"intro",
|
|
20875
|
+
"outro",
|
|
20876
|
+
"cancel"
|
|
20877
|
+
]);
|
|
20878
|
+
/**
|
|
20879
|
+
* The calls a spec's stand-ins for `p.log` (and `p.note`, `p.outro`, ...)
|
|
20880
|
+
* recorded, in the order the command made them.
|
|
20881
|
+
*/
|
|
20882
|
+
const recordedClackCalls = (...stubs) => stubs.flatMap((stub) => Object.entries(stub).flatMap(([method, fn]) => {
|
|
20883
|
+
const mock = fn?.mock;
|
|
20884
|
+
if (!mock || !METHODS.has(method)) return [];
|
|
20885
|
+
return mock.calls.map((args, index) => [mock.invocationCallOrder[index] ?? 0, [method, ...args]]);
|
|
20886
|
+
})).sort(([a], [b]) => a - b).map(([, call]) => call);
|
|
20887
|
+
/**
|
|
20888
|
+
* The lines the calls print through `@clack/prompts`, without colors, on a
|
|
20889
|
+
* terminal `columns` wide: clack wraps only a note, so any other line wider
|
|
20890
|
+
* than the terminal is one the terminal wraps.
|
|
20891
|
+
*/
|
|
20892
|
+
const renderClackLog = (calls, { columns = 80 } = {}) => {
|
|
20893
|
+
let text = "";
|
|
20894
|
+
const options = {
|
|
20895
|
+
output: Object.assign(new node_stream.Writable({ write(chunk, _encoding, done) {
|
|
20896
|
+
text += String(chunk);
|
|
20897
|
+
done();
|
|
20898
|
+
} }), {
|
|
20899
|
+
columns,
|
|
20900
|
+
isTTY: false
|
|
20901
|
+
}),
|
|
20902
|
+
withGuide: true
|
|
20903
|
+
};
|
|
20904
|
+
for (const [method, ...args] of calls) {
|
|
20905
|
+
const [message = "", title = ""] = args.map((arg) => arg === void 0 ? "" : String(arg));
|
|
20906
|
+
if (method === "note") note(message, title, options);
|
|
20907
|
+
else if (method === "intro") intro(message, options);
|
|
20908
|
+
else if (method === "outro") outro(message, options);
|
|
20909
|
+
else if (method === "cancel") cancel(message, options);
|
|
20910
|
+
else log[method](message, options);
|
|
20911
|
+
}
|
|
20912
|
+
return (0, node_util.stripVTControlCharacters)(text).replace(/\n+$/, "").split("\n");
|
|
20913
|
+
};
|
|
20914
|
+
/**
|
|
20915
|
+
* The lines wider than `columns`, which a terminal that wide wraps, but for
|
|
20916
|
+
* a line that is one word after clack's gutter, such as a URL, which no
|
|
20917
|
+
* line break could shorten.
|
|
20918
|
+
*/
|
|
20919
|
+
const linesWiderThan = (lines, columns = 80) => lines.filter((line) => [...line].length > columns && /\s/u.test(line.slice(3).trim()));
|
|
20920
|
+
//#endregion
|
|
20360
20921
|
//#region src/setupHandlerIntegrationTestSuite.ts
|
|
20361
20922
|
const TEST_ADMIN_AUTH_TOKEN = "hot-updater-test-token";
|
|
20362
20923
|
/**
|
|
@@ -20635,15 +21196,18 @@ exports.hasCommand = hasCommand;
|
|
|
20635
21196
|
exports.hasDockerCompose = hasDockerCompose;
|
|
20636
21197
|
exports.hasDockerDaemon = hasDockerDaemon;
|
|
20637
21198
|
exports.killPort = killPort;
|
|
21199
|
+
exports.linesWiderThan = linesWiderThan;
|
|
20638
21200
|
exports.mockReactNativeProjectRoot = mockReactNativeProjectRoot;
|
|
20639
21201
|
exports.mysqlExecutor = mysqlExecutor;
|
|
20640
21202
|
exports.pgBatchExecutor = pgBatchExecutor;
|
|
20641
21203
|
exports.pgExecutor = pgExecutor;
|
|
20642
21204
|
exports.pgliteBatchExecutor = pgliteBatchExecutor;
|
|
20643
21205
|
exports.pgliteExecutor = pgliteExecutor;
|
|
21206
|
+
exports.recordedClackCalls = recordedClackCalls;
|
|
20644
21207
|
exports.releaseCatalogArtifact = releaseCatalogArtifact;
|
|
20645
21208
|
exports.releaseCatalogArtifactFiles = releaseCatalogArtifactFiles;
|
|
20646
21209
|
exports.releaseCatalogDownloadUrl = releaseCatalogDownloadUrl;
|
|
21210
|
+
exports.renderClackLog = renderClackLog;
|
|
20647
21211
|
exports.runCheckedCommand = runCheckedCommand;
|
|
20648
21212
|
exports.spawnRuntime = spawnRuntime;
|
|
20649
21213
|
exports.spawnServerProcess = spawnServerProcess;
|
package/dist/node.d.cts
CHANGED
|
@@ -105,6 +105,31 @@ declare const RELEASE_CATALOG_STORAGE_FIXTURES: Readonly<Record<string, string>>
|
|
|
105
105
|
/** Storage boundary shared by provider and separately spawned server tests. */
|
|
106
106
|
declare const createReleaseCatalogTestStorage: () => StorageAdapter;
|
|
107
107
|
//#endregion
|
|
108
|
+
//#region src/renderClackLog.d.ts
|
|
109
|
+
/** The `p` calls a command prints with, as a spec's stand-ins record them. */
|
|
110
|
+
type ClackLogMethod = "message" | "info" | "success" | "step" | "warn" | "error" | "note" | "intro" | "outro" | "cancel";
|
|
111
|
+
/** One call: the method and its arguments, such as a note's title. */
|
|
112
|
+
type ClackLogCall = readonly [method: ClackLogMethod, ...args: readonly unknown[]];
|
|
113
|
+
/**
|
|
114
|
+
* The calls a spec's stand-ins for `p.log` (and `p.note`, `p.outro`, ...)
|
|
115
|
+
* recorded, in the order the command made them.
|
|
116
|
+
*/
|
|
117
|
+
declare const recordedClackCalls: (...stubs: readonly object[]) => ClackLogCall[];
|
|
118
|
+
/**
|
|
119
|
+
* The lines the calls print through `@clack/prompts`, without colors, on a
|
|
120
|
+
* terminal `columns` wide: clack wraps only a note, so any other line wider
|
|
121
|
+
* than the terminal is one the terminal wraps.
|
|
122
|
+
*/
|
|
123
|
+
declare const renderClackLog: (calls: readonly ClackLogCall[], { columns }?: {
|
|
124
|
+
columns?: number;
|
|
125
|
+
}) => string[];
|
|
126
|
+
/**
|
|
127
|
+
* The lines wider than `columns`, which a terminal that wide wraps, but for
|
|
128
|
+
* a line that is one word after clack's gutter, such as a URL, which no
|
|
129
|
+
* line break could shorten.
|
|
130
|
+
*/
|
|
131
|
+
declare const linesWiderThan: (lines: readonly string[], columns?: number) => string[];
|
|
132
|
+
//#endregion
|
|
108
133
|
//#region src/setupHandlerIntegrationTestSuite.d.ts
|
|
109
134
|
declare const TEST_ADMIN_AUTH_TOKEN = "hot-updater-test-token";
|
|
110
135
|
/**
|
|
@@ -151,4 +176,4 @@ declare const pgExecutor: (pool: Pool$1) => SqlExecutor;
|
|
|
151
176
|
declare const pgBatchExecutor: (pool: Pool$1) => SqlExecutor;
|
|
152
177
|
declare const mysqlExecutor: (pool: Pool) => SqlExecutor;
|
|
153
178
|
//#endregion
|
|
154
|
-
export { D1TestResult, MockedReactNativeProjectRoot, RELEASE_CATALOG_DOWNLOAD_HASH, RELEASE_CATALOG_MANIFEST_URIS, RELEASE_CATALOG_STORAGE_FIXTURES, RuntimeChild, RuntimeLogs, SpawnRuntimeOptions, TEST_ADMIN_AUTH_TOKEN, assertCommandAvailable, assertDockerComposeAvailable, assertDockerDaemonAvailable, assertEnvFlagEnabled, cleanupServer, createD1TestDatabase, createReleaseCatalogTestStorage, createTestDbPath, findOpenPort, formatRuntimeLogs, hasCommand, hasDockerCompose, hasDockerDaemon, killPort, mockReactNativeProjectRoot, mysqlExecutor, pgBatchExecutor, pgExecutor, pgliteBatchExecutor, pgliteExecutor, releaseCatalogArtifact, releaseCatalogArtifactFiles, releaseCatalogDownloadUrl, runCheckedCommand, spawnRuntime, spawnServerProcess, sqliteBatchExecutor, sqliteExecutor, startHttpTestServer, stopRuntime, waitForHttpOk, waitForServer };
|
|
179
|
+
export { ClackLogCall, ClackLogMethod, D1TestResult, MockedReactNativeProjectRoot, RELEASE_CATALOG_DOWNLOAD_HASH, RELEASE_CATALOG_MANIFEST_URIS, RELEASE_CATALOG_STORAGE_FIXTURES, RuntimeChild, RuntimeLogs, SpawnRuntimeOptions, TEST_ADMIN_AUTH_TOKEN, assertCommandAvailable, assertDockerComposeAvailable, assertDockerDaemonAvailable, assertEnvFlagEnabled, cleanupServer, createD1TestDatabase, createReleaseCatalogTestStorage, createTestDbPath, findOpenPort, formatRuntimeLogs, hasCommand, hasDockerCompose, hasDockerDaemon, killPort, linesWiderThan, mockReactNativeProjectRoot, mysqlExecutor, pgBatchExecutor, pgExecutor, pgliteBatchExecutor, pgliteExecutor, recordedClackCalls, releaseCatalogArtifact, releaseCatalogArtifactFiles, releaseCatalogDownloadUrl, renderClackLog, runCheckedCommand, spawnRuntime, spawnServerProcess, sqliteBatchExecutor, sqliteExecutor, startHttpTestServer, stopRuntime, waitForHttpOk, waitForServer };
|
package/dist/node.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ChildProcessByStdio } from "node:child_process";
|
|
2
|
+
import { Readable } from "node:stream";
|
|
2
3
|
import { execa } from "execa";
|
|
3
4
|
import { DatabaseSync } from "node:sqlite";
|
|
4
|
-
import { Readable } from "node:stream";
|
|
5
5
|
import { BundleRow, SqlExecutor, StorageAdapter } from "@hot-updater/plugin-core";
|
|
6
6
|
import { ArtifactFiles, ArtifactInfo } from "@hot-updater/protocol";
|
|
7
7
|
import { PGlite } from "@electric-sql/pglite";
|
|
@@ -105,6 +105,31 @@ declare const RELEASE_CATALOG_STORAGE_FIXTURES: Readonly<Record<string, string>>
|
|
|
105
105
|
/** Storage boundary shared by provider and separately spawned server tests. */
|
|
106
106
|
declare const createReleaseCatalogTestStorage: () => StorageAdapter;
|
|
107
107
|
//#endregion
|
|
108
|
+
//#region src/renderClackLog.d.ts
|
|
109
|
+
/** The `p` calls a command prints with, as a spec's stand-ins record them. */
|
|
110
|
+
type ClackLogMethod = "message" | "info" | "success" | "step" | "warn" | "error" | "note" | "intro" | "outro" | "cancel";
|
|
111
|
+
/** One call: the method and its arguments, such as a note's title. */
|
|
112
|
+
type ClackLogCall = readonly [method: ClackLogMethod, ...args: readonly unknown[]];
|
|
113
|
+
/**
|
|
114
|
+
* The calls a spec's stand-ins for `p.log` (and `p.note`, `p.outro`, ...)
|
|
115
|
+
* recorded, in the order the command made them.
|
|
116
|
+
*/
|
|
117
|
+
declare const recordedClackCalls: (...stubs: readonly object[]) => ClackLogCall[];
|
|
118
|
+
/**
|
|
119
|
+
* The lines the calls print through `@clack/prompts`, without colors, on a
|
|
120
|
+
* terminal `columns` wide: clack wraps only a note, so any other line wider
|
|
121
|
+
* than the terminal is one the terminal wraps.
|
|
122
|
+
*/
|
|
123
|
+
declare const renderClackLog: (calls: readonly ClackLogCall[], { columns }?: {
|
|
124
|
+
columns?: number;
|
|
125
|
+
}) => string[];
|
|
126
|
+
/**
|
|
127
|
+
* The lines wider than `columns`, which a terminal that wide wraps, but for
|
|
128
|
+
* a line that is one word after clack's gutter, such as a URL, which no
|
|
129
|
+
* line break could shorten.
|
|
130
|
+
*/
|
|
131
|
+
declare const linesWiderThan: (lines: readonly string[], columns?: number) => string[];
|
|
132
|
+
//#endregion
|
|
108
133
|
//#region src/setupHandlerIntegrationTestSuite.d.ts
|
|
109
134
|
declare const TEST_ADMIN_AUTH_TOKEN = "hot-updater-test-token";
|
|
110
135
|
/**
|
|
@@ -151,4 +176,4 @@ declare const pgExecutor: (pool: Pool$1) => SqlExecutor;
|
|
|
151
176
|
declare const pgBatchExecutor: (pool: Pool$1) => SqlExecutor;
|
|
152
177
|
declare const mysqlExecutor: (pool: Pool) => SqlExecutor;
|
|
153
178
|
//#endregion
|
|
154
|
-
export { D1TestResult, MockedReactNativeProjectRoot, RELEASE_CATALOG_DOWNLOAD_HASH, RELEASE_CATALOG_MANIFEST_URIS, RELEASE_CATALOG_STORAGE_FIXTURES, RuntimeChild, RuntimeLogs, SpawnRuntimeOptions, TEST_ADMIN_AUTH_TOKEN, assertCommandAvailable, assertDockerComposeAvailable, assertDockerDaemonAvailable, assertEnvFlagEnabled, cleanupServer, createD1TestDatabase, createReleaseCatalogTestStorage, createTestDbPath, findOpenPort, formatRuntimeLogs, hasCommand, hasDockerCompose, hasDockerDaemon, killPort, mockReactNativeProjectRoot, mysqlExecutor, pgBatchExecutor, pgExecutor, pgliteBatchExecutor, pgliteExecutor, releaseCatalogArtifact, releaseCatalogArtifactFiles, releaseCatalogDownloadUrl, runCheckedCommand, spawnRuntime, spawnServerProcess, sqliteBatchExecutor, sqliteExecutor, startHttpTestServer, stopRuntime, waitForHttpOk, waitForServer };
|
|
179
|
+
export { ClackLogCall, ClackLogMethod, D1TestResult, MockedReactNativeProjectRoot, RELEASE_CATALOG_DOWNLOAD_HASH, RELEASE_CATALOG_MANIFEST_URIS, RELEASE_CATALOG_STORAGE_FIXTURES, RuntimeChild, RuntimeLogs, SpawnRuntimeOptions, TEST_ADMIN_AUTH_TOKEN, assertCommandAvailable, assertDockerComposeAvailable, assertDockerDaemonAvailable, assertEnvFlagEnabled, cleanupServer, createD1TestDatabase, createReleaseCatalogTestStorage, createTestDbPath, findOpenPort, formatRuntimeLogs, hasCommand, hasDockerCompose, hasDockerDaemon, killPort, linesWiderThan, mockReactNativeProjectRoot, mysqlExecutor, pgBatchExecutor, pgExecutor, pgliteBatchExecutor, pgliteExecutor, recordedClackCalls, releaseCatalogArtifact, releaseCatalogArtifactFiles, releaseCatalogDownloadUrl, renderClackLog, runCheckedCommand, spawnRuntime, spawnServerProcess, sqliteBatchExecutor, sqliteExecutor, startHttpTestServer, stopRuntime, waitForHttpOk, waitForServer };
|
package/dist/node.mjs
CHANGED
|
@@ -7,6 +7,9 @@ import fs$1 from "fs/promises";
|
|
|
7
7
|
import { spawn, spawnSync } from "node:child_process";
|
|
8
8
|
import net from "node:net";
|
|
9
9
|
import { createServer } from "node:http";
|
|
10
|
+
import { Writable } from "node:stream";
|
|
11
|
+
import { stripVTControlCharacters, styleText } from "node:util";
|
|
12
|
+
import process$1 from "node:process";
|
|
10
13
|
import { execa } from "execa";
|
|
11
14
|
//#region \0rolldown/runtime.js
|
|
12
15
|
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
|
@@ -20333,6 +20336,563 @@ const createReleaseCatalogTestStorage = () => ({
|
|
|
20333
20336
|
}
|
|
20334
20337
|
});
|
|
20335
20338
|
//#endregion
|
|
20339
|
+
//#region ../../node_modules/.pnpm/fast-string-truncated-width@3.0.3/node_modules/fast-string-truncated-width/dist/utils.js
|
|
20340
|
+
const getCodePointsLength = (() => {
|
|
20341
|
+
const SURROGATE_PAIR_RE = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
|
|
20342
|
+
return (input) => {
|
|
20343
|
+
let surrogatePairsNr = 0;
|
|
20344
|
+
SURROGATE_PAIR_RE.lastIndex = 0;
|
|
20345
|
+
while (SURROGATE_PAIR_RE.test(input)) surrogatePairsNr += 1;
|
|
20346
|
+
return input.length - surrogatePairsNr;
|
|
20347
|
+
};
|
|
20348
|
+
})();
|
|
20349
|
+
const isFullWidth = (x) => {
|
|
20350
|
+
return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
|
|
20351
|
+
};
|
|
20352
|
+
const isWideNotCJKTNotEmoji = (x) => {
|
|
20353
|
+
return x === 8987 || x === 9001 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12771 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 19903 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141;
|
|
20354
|
+
};
|
|
20355
|
+
//#endregion
|
|
20356
|
+
//#region ../../node_modules/.pnpm/fast-string-truncated-width@3.0.3/node_modules/fast-string-truncated-width/dist/index.js
|
|
20357
|
+
const ANSI_RE = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y;
|
|
20358
|
+
const CONTROL_RE = /[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y;
|
|
20359
|
+
const CJKT_WIDE_RE = /(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/uy;
|
|
20360
|
+
const TAB_RE = /\t{1,1000}/y;
|
|
20361
|
+
const EMOJI_RE = /[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/uy;
|
|
20362
|
+
const LATIN_RE = /(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y;
|
|
20363
|
+
const MODIFIER_RE = /\p{M}+/gu;
|
|
20364
|
+
const NO_TRUNCATION$1 = {
|
|
20365
|
+
limit: Infinity,
|
|
20366
|
+
ellipsis: ""
|
|
20367
|
+
};
|
|
20368
|
+
const getStringTruncatedWidth = (input, truncationOptions = {}, widthOptions = {}) => {
|
|
20369
|
+
const LIMIT = truncationOptions.limit ?? Infinity;
|
|
20370
|
+
const ELLIPSIS = truncationOptions.ellipsis ?? "";
|
|
20371
|
+
const ELLIPSIS_WIDTH = truncationOptions?.ellipsisWidth ?? (ELLIPSIS ? getStringTruncatedWidth(ELLIPSIS, NO_TRUNCATION$1, widthOptions).width : 0);
|
|
20372
|
+
const ANSI_WIDTH = 0;
|
|
20373
|
+
const CONTROL_WIDTH = widthOptions.controlWidth ?? 0;
|
|
20374
|
+
const TAB_WIDTH = widthOptions.tabWidth ?? 8;
|
|
20375
|
+
const EMOJI_WIDTH = widthOptions.emojiWidth ?? 2;
|
|
20376
|
+
const FULL_WIDTH_WIDTH = 2;
|
|
20377
|
+
const REGULAR_WIDTH = widthOptions.regularWidth ?? 1;
|
|
20378
|
+
const WIDE_WIDTH = widthOptions.wideWidth ?? FULL_WIDTH_WIDTH;
|
|
20379
|
+
const PARSE_BLOCKS = [
|
|
20380
|
+
[LATIN_RE, REGULAR_WIDTH],
|
|
20381
|
+
[ANSI_RE, ANSI_WIDTH],
|
|
20382
|
+
[CONTROL_RE, CONTROL_WIDTH],
|
|
20383
|
+
[TAB_RE, TAB_WIDTH],
|
|
20384
|
+
[EMOJI_RE, EMOJI_WIDTH],
|
|
20385
|
+
[CJKT_WIDE_RE, WIDE_WIDTH]
|
|
20386
|
+
];
|
|
20387
|
+
let indexPrev = 0;
|
|
20388
|
+
let index = 0;
|
|
20389
|
+
let length = input.length;
|
|
20390
|
+
let lengthExtra = 0;
|
|
20391
|
+
let truncationEnabled = false;
|
|
20392
|
+
let truncationIndex = length;
|
|
20393
|
+
let truncationLimit = Math.max(0, LIMIT - ELLIPSIS_WIDTH);
|
|
20394
|
+
let unmatchedStart = 0;
|
|
20395
|
+
let unmatchedEnd = 0;
|
|
20396
|
+
let width = 0;
|
|
20397
|
+
let widthExtra = 0;
|
|
20398
|
+
outer: while (true) {
|
|
20399
|
+
if (unmatchedEnd > unmatchedStart || index >= length && index > indexPrev) {
|
|
20400
|
+
const unmatched = input.slice(unmatchedStart, unmatchedEnd) || input.slice(indexPrev, index);
|
|
20401
|
+
lengthExtra = 0;
|
|
20402
|
+
for (const char of unmatched.replaceAll(MODIFIER_RE, "")) {
|
|
20403
|
+
const codePoint = char.codePointAt(0) || 0;
|
|
20404
|
+
if (isFullWidth(codePoint)) widthExtra = FULL_WIDTH_WIDTH;
|
|
20405
|
+
else if (isWideNotCJKTNotEmoji(codePoint)) widthExtra = WIDE_WIDTH;
|
|
20406
|
+
else widthExtra = REGULAR_WIDTH;
|
|
20407
|
+
if (width + widthExtra > truncationLimit) truncationIndex = Math.min(truncationIndex, Math.max(unmatchedStart, indexPrev) + lengthExtra);
|
|
20408
|
+
if (width + widthExtra > LIMIT) {
|
|
20409
|
+
truncationEnabled = true;
|
|
20410
|
+
break outer;
|
|
20411
|
+
}
|
|
20412
|
+
lengthExtra += char.length;
|
|
20413
|
+
width += widthExtra;
|
|
20414
|
+
}
|
|
20415
|
+
unmatchedStart = unmatchedEnd = 0;
|
|
20416
|
+
}
|
|
20417
|
+
if (index >= length) break outer;
|
|
20418
|
+
for (let i = 0, l = PARSE_BLOCKS.length; i < l; i++) {
|
|
20419
|
+
const [BLOCK_RE, BLOCK_WIDTH] = PARSE_BLOCKS[i];
|
|
20420
|
+
BLOCK_RE.lastIndex = index;
|
|
20421
|
+
if (BLOCK_RE.test(input)) {
|
|
20422
|
+
lengthExtra = BLOCK_RE === CJKT_WIDE_RE ? getCodePointsLength(input.slice(index, BLOCK_RE.lastIndex)) : BLOCK_RE === EMOJI_RE ? 1 : BLOCK_RE.lastIndex - index;
|
|
20423
|
+
widthExtra = lengthExtra * BLOCK_WIDTH;
|
|
20424
|
+
if (width + widthExtra > truncationLimit) truncationIndex = Math.min(truncationIndex, index + Math.floor((truncationLimit - width) / BLOCK_WIDTH));
|
|
20425
|
+
if (width + widthExtra > LIMIT) {
|
|
20426
|
+
truncationEnabled = true;
|
|
20427
|
+
break outer;
|
|
20428
|
+
}
|
|
20429
|
+
width += widthExtra;
|
|
20430
|
+
unmatchedStart = indexPrev;
|
|
20431
|
+
unmatchedEnd = index;
|
|
20432
|
+
index = indexPrev = BLOCK_RE.lastIndex;
|
|
20433
|
+
continue outer;
|
|
20434
|
+
}
|
|
20435
|
+
}
|
|
20436
|
+
index += 1;
|
|
20437
|
+
}
|
|
20438
|
+
return {
|
|
20439
|
+
width: truncationEnabled ? truncationLimit : width,
|
|
20440
|
+
index: truncationEnabled ? truncationIndex : length,
|
|
20441
|
+
truncated: truncationEnabled,
|
|
20442
|
+
ellipsed: truncationEnabled && LIMIT >= ELLIPSIS_WIDTH
|
|
20443
|
+
};
|
|
20444
|
+
};
|
|
20445
|
+
//#endregion
|
|
20446
|
+
//#region ../../node_modules/.pnpm/fast-string-width@3.0.2/node_modules/fast-string-width/dist/index.js
|
|
20447
|
+
const NO_TRUNCATION = {
|
|
20448
|
+
limit: Infinity,
|
|
20449
|
+
ellipsis: "",
|
|
20450
|
+
ellipsisWidth: 0
|
|
20451
|
+
};
|
|
20452
|
+
const fastStringWidth = (input, options = {}) => {
|
|
20453
|
+
return getStringTruncatedWidth(input, NO_TRUNCATION, options).width;
|
|
20454
|
+
};
|
|
20455
|
+
//#endregion
|
|
20456
|
+
//#region ../../node_modules/.pnpm/fast-wrap-ansi@0.2.2/node_modules/fast-wrap-ansi/lib/main.js
|
|
20457
|
+
const ESC = "\x1B";
|
|
20458
|
+
const CSI = "";
|
|
20459
|
+
const END_CODE = 39;
|
|
20460
|
+
const ANSI_ESCAPE_BELL = "\x07";
|
|
20461
|
+
const ANSI_CSI = "[";
|
|
20462
|
+
const ANSI_OSC = "]";
|
|
20463
|
+
const ANSI_SGR_TERMINATOR = "m";
|
|
20464
|
+
const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;
|
|
20465
|
+
const GROUP_REGEX = new RegExp(`(?:\\${ANSI_CSI}(?<code>\\d+)m|\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`, "y");
|
|
20466
|
+
const getClosingCode = (openingCode) => {
|
|
20467
|
+
if (openingCode >= 30 && openingCode <= 37) return 39;
|
|
20468
|
+
if (openingCode >= 90 && openingCode <= 97) return 39;
|
|
20469
|
+
if (openingCode >= 40 && openingCode <= 47) return 49;
|
|
20470
|
+
if (openingCode >= 100 && openingCode <= 107) return 49;
|
|
20471
|
+
if (openingCode === 1 || openingCode === 2) return 22;
|
|
20472
|
+
if (openingCode === 3) return 23;
|
|
20473
|
+
if (openingCode === 4) return 24;
|
|
20474
|
+
if (openingCode === 7) return 27;
|
|
20475
|
+
if (openingCode === 8) return 28;
|
|
20476
|
+
if (openingCode === 9) return 29;
|
|
20477
|
+
if (openingCode === 0) return 0;
|
|
20478
|
+
};
|
|
20479
|
+
const wrapAnsiCode = (code) => `${ESC}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;
|
|
20480
|
+
const wrapAnsiHyperlink = (url) => `${ESC}${ANSI_ESCAPE_LINK}${url}${ANSI_ESCAPE_BELL}`;
|
|
20481
|
+
const wrapWord = (rows, word, columns) => {
|
|
20482
|
+
const characters = word[Symbol.iterator]();
|
|
20483
|
+
let isInsideEscape = false;
|
|
20484
|
+
let isInsideLinkEscape = false;
|
|
20485
|
+
let lastRow = rows.at(-1);
|
|
20486
|
+
let visible = lastRow === void 0 ? 0 : fastStringWidth(lastRow);
|
|
20487
|
+
let currentCharacter = characters.next();
|
|
20488
|
+
let nextCharacter = characters.next();
|
|
20489
|
+
let rawCharacterIndex = 0;
|
|
20490
|
+
while (!currentCharacter.done) {
|
|
20491
|
+
const character = currentCharacter.value;
|
|
20492
|
+
const characterLength = fastStringWidth(character);
|
|
20493
|
+
if (visible + characterLength <= columns) rows[rows.length - 1] += character;
|
|
20494
|
+
else {
|
|
20495
|
+
rows.push(character);
|
|
20496
|
+
visible = 0;
|
|
20497
|
+
}
|
|
20498
|
+
if (character === ESC || character === CSI) {
|
|
20499
|
+
isInsideEscape = true;
|
|
20500
|
+
isInsideLinkEscape = word.startsWith(ANSI_ESCAPE_LINK, rawCharacterIndex + 1);
|
|
20501
|
+
}
|
|
20502
|
+
if (isInsideEscape) {
|
|
20503
|
+
if (isInsideLinkEscape) {
|
|
20504
|
+
if (character === ANSI_ESCAPE_BELL) {
|
|
20505
|
+
isInsideEscape = false;
|
|
20506
|
+
isInsideLinkEscape = false;
|
|
20507
|
+
}
|
|
20508
|
+
} else if (character === ANSI_SGR_TERMINATOR) isInsideEscape = false;
|
|
20509
|
+
} else {
|
|
20510
|
+
visible += characterLength;
|
|
20511
|
+
if (visible === columns && !nextCharacter.done) {
|
|
20512
|
+
rows.push("");
|
|
20513
|
+
visible = 0;
|
|
20514
|
+
}
|
|
20515
|
+
}
|
|
20516
|
+
currentCharacter = nextCharacter;
|
|
20517
|
+
nextCharacter = characters.next();
|
|
20518
|
+
rawCharacterIndex += character.length;
|
|
20519
|
+
}
|
|
20520
|
+
lastRow = rows.at(-1);
|
|
20521
|
+
if (!visible && lastRow !== void 0 && lastRow.length && rows.length > 1) rows[rows.length - 2] += rows.pop();
|
|
20522
|
+
};
|
|
20523
|
+
const stringVisibleTrimSpacesRight = (string) => {
|
|
20524
|
+
const words = string.split(" ");
|
|
20525
|
+
let last = words.length;
|
|
20526
|
+
while (last) {
|
|
20527
|
+
if (fastStringWidth(words[last - 1])) break;
|
|
20528
|
+
last--;
|
|
20529
|
+
}
|
|
20530
|
+
if (last === words.length) return string;
|
|
20531
|
+
return words.slice(0, last).join(" ") + words.slice(last).join("");
|
|
20532
|
+
};
|
|
20533
|
+
const exec = (string, columns, options = {}) => {
|
|
20534
|
+
if (options.trim !== false && string.trim() === "") return "";
|
|
20535
|
+
let returnValue = "";
|
|
20536
|
+
let escapeCode;
|
|
20537
|
+
let escapeUrl;
|
|
20538
|
+
const words = string.split(" ");
|
|
20539
|
+
let rows = [""];
|
|
20540
|
+
let rowLength = 0;
|
|
20541
|
+
for (let index = 0; index < words.length; index++) {
|
|
20542
|
+
const word = words[index];
|
|
20543
|
+
if (options.trim !== false) {
|
|
20544
|
+
const row = rows.at(-1) ?? "";
|
|
20545
|
+
const trimmed = row.trimStart();
|
|
20546
|
+
if (row.length !== trimmed.length) {
|
|
20547
|
+
rows[rows.length - 1] = trimmed;
|
|
20548
|
+
rowLength = fastStringWidth(trimmed);
|
|
20549
|
+
}
|
|
20550
|
+
}
|
|
20551
|
+
if (index !== 0) {
|
|
20552
|
+
if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {
|
|
20553
|
+
rows.push("");
|
|
20554
|
+
rowLength = 0;
|
|
20555
|
+
}
|
|
20556
|
+
if (rowLength || options.trim === false) {
|
|
20557
|
+
rows[rows.length - 1] += " ";
|
|
20558
|
+
rowLength++;
|
|
20559
|
+
}
|
|
20560
|
+
}
|
|
20561
|
+
const wordLength = fastStringWidth(word);
|
|
20562
|
+
if (options.hard && wordLength > columns) {
|
|
20563
|
+
const remainingColumns = columns - rowLength;
|
|
20564
|
+
const breaksStartingThisLine = 1 + Math.floor((wordLength - remainingColumns - 1) / columns);
|
|
20565
|
+
if (Math.floor((wordLength - 1) / columns) < breaksStartingThisLine) rows.push("");
|
|
20566
|
+
wrapWord(rows, word, columns);
|
|
20567
|
+
rowLength = fastStringWidth(rows.at(-1) ?? "");
|
|
20568
|
+
continue;
|
|
20569
|
+
}
|
|
20570
|
+
if (rowLength + wordLength > columns && rowLength && wordLength) {
|
|
20571
|
+
if (options.wordWrap === false && rowLength < columns) {
|
|
20572
|
+
wrapWord(rows, word, columns);
|
|
20573
|
+
rowLength = fastStringWidth(rows.at(-1) ?? "");
|
|
20574
|
+
continue;
|
|
20575
|
+
}
|
|
20576
|
+
rows.push("");
|
|
20577
|
+
rowLength = 0;
|
|
20578
|
+
}
|
|
20579
|
+
if (rowLength + wordLength > columns && options.wordWrap === false) {
|
|
20580
|
+
wrapWord(rows, word, columns);
|
|
20581
|
+
rowLength = fastStringWidth(rows.at(-1) ?? "");
|
|
20582
|
+
continue;
|
|
20583
|
+
}
|
|
20584
|
+
rows[rows.length - 1] += word;
|
|
20585
|
+
rowLength += wordLength;
|
|
20586
|
+
}
|
|
20587
|
+
if (options.trim !== false) rows = rows.map((row) => stringVisibleTrimSpacesRight(row));
|
|
20588
|
+
const preString = rows.join("\n");
|
|
20589
|
+
let inSurrogate = false;
|
|
20590
|
+
for (let i = 0; i < preString.length; i++) {
|
|
20591
|
+
const character = preString[i];
|
|
20592
|
+
returnValue += character;
|
|
20593
|
+
if (!inSurrogate) {
|
|
20594
|
+
inSurrogate = character >= "\ud800" && character <= "\udbff";
|
|
20595
|
+
if (inSurrogate) continue;
|
|
20596
|
+
} else inSurrogate = false;
|
|
20597
|
+
if (character === ESC || character === CSI) {
|
|
20598
|
+
GROUP_REGEX.lastIndex = i + 1;
|
|
20599
|
+
const groups = GROUP_REGEX.exec(preString)?.groups;
|
|
20600
|
+
if (groups?.code !== void 0) {
|
|
20601
|
+
const code = Number.parseFloat(groups.code);
|
|
20602
|
+
escapeCode = code === END_CODE ? void 0 : code;
|
|
20603
|
+
} else if (groups?.uri !== void 0) escapeUrl = groups.uri.length === 0 ? void 0 : groups.uri;
|
|
20604
|
+
}
|
|
20605
|
+
if (preString[i + 1] === "\n") {
|
|
20606
|
+
if (escapeUrl) returnValue += wrapAnsiHyperlink("");
|
|
20607
|
+
const closingCode = escapeCode ? getClosingCode(escapeCode) : void 0;
|
|
20608
|
+
if (escapeCode && closingCode) returnValue += wrapAnsiCode(closingCode);
|
|
20609
|
+
} else if (character === "\n") {
|
|
20610
|
+
if (escapeCode && getClosingCode(escapeCode)) returnValue += wrapAnsiCode(escapeCode);
|
|
20611
|
+
if (escapeUrl) returnValue += wrapAnsiHyperlink(escapeUrl);
|
|
20612
|
+
}
|
|
20613
|
+
}
|
|
20614
|
+
return returnValue;
|
|
20615
|
+
};
|
|
20616
|
+
const CRLF_OR_LF = /\r?\n/;
|
|
20617
|
+
function wrapAnsi(string, columns, options) {
|
|
20618
|
+
return String(string).normalize().split(CRLF_OR_LF).map((line) => exec(line, columns, options)).join("\n");
|
|
20619
|
+
}
|
|
20620
|
+
(/* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
20621
|
+
const ESC = "\x1B";
|
|
20622
|
+
const CSI = `${ESC}[`;
|
|
20623
|
+
const beep = "\x07";
|
|
20624
|
+
const cursor = {
|
|
20625
|
+
to(x, y) {
|
|
20626
|
+
if (!y) return `${CSI}${x + 1}G`;
|
|
20627
|
+
return `${CSI}${y + 1};${x + 1}H`;
|
|
20628
|
+
},
|
|
20629
|
+
move(x, y) {
|
|
20630
|
+
let ret = "";
|
|
20631
|
+
if (x < 0) ret += `${CSI}${-x}D`;
|
|
20632
|
+
else if (x > 0) ret += `${CSI}${x}C`;
|
|
20633
|
+
if (y < 0) ret += `${CSI}${-y}A`;
|
|
20634
|
+
else if (y > 0) ret += `${CSI}${y}B`;
|
|
20635
|
+
return ret;
|
|
20636
|
+
},
|
|
20637
|
+
up: (count = 1) => `${CSI}${count}A`,
|
|
20638
|
+
down: (count = 1) => `${CSI}${count}B`,
|
|
20639
|
+
forward: (count = 1) => `${CSI}${count}C`,
|
|
20640
|
+
backward: (count = 1) => `${CSI}${count}D`,
|
|
20641
|
+
nextLine: (count = 1) => `${CSI}E`.repeat(count),
|
|
20642
|
+
prevLine: (count = 1) => `${CSI}F`.repeat(count),
|
|
20643
|
+
left: `${CSI}G`,
|
|
20644
|
+
hide: `${CSI}?25l`,
|
|
20645
|
+
show: `${CSI}?25h`,
|
|
20646
|
+
save: `${ESC}7`,
|
|
20647
|
+
restore: `${ESC}8`
|
|
20648
|
+
};
|
|
20649
|
+
module.exports = {
|
|
20650
|
+
cursor,
|
|
20651
|
+
scroll: {
|
|
20652
|
+
up: (count = 1) => `${CSI}S`.repeat(count),
|
|
20653
|
+
down: (count = 1) => `${CSI}T`.repeat(count)
|
|
20654
|
+
},
|
|
20655
|
+
erase: {
|
|
20656
|
+
screen: `${CSI}2J`,
|
|
20657
|
+
up: (count = 1) => `${CSI}1J`.repeat(count),
|
|
20658
|
+
down: (count = 1) => `${CSI}J`.repeat(count),
|
|
20659
|
+
line: `${CSI}2K`,
|
|
20660
|
+
lineEnd: `${CSI}K`,
|
|
20661
|
+
lineStart: `${CSI}1K`,
|
|
20662
|
+
lines(count) {
|
|
20663
|
+
let clear = "";
|
|
20664
|
+
for (let i = 0; i < count; i++) clear += this.line + (i < count - 1 ? cursor.up() : "");
|
|
20665
|
+
if (count) clear += cursor.left;
|
|
20666
|
+
return clear;
|
|
20667
|
+
}
|
|
20668
|
+
},
|
|
20669
|
+
beep
|
|
20670
|
+
};
|
|
20671
|
+
})))();
|
|
20672
|
+
const settings = {
|
|
20673
|
+
actions: /* @__PURE__ */ new Set([
|
|
20674
|
+
"up",
|
|
20675
|
+
"down",
|
|
20676
|
+
"left",
|
|
20677
|
+
"right",
|
|
20678
|
+
"space",
|
|
20679
|
+
"enter",
|
|
20680
|
+
"cancel"
|
|
20681
|
+
]),
|
|
20682
|
+
aliases: /* @__PURE__ */ new Map([
|
|
20683
|
+
["k", "up"],
|
|
20684
|
+
["j", "down"],
|
|
20685
|
+
["h", "left"],
|
|
20686
|
+
["l", "right"],
|
|
20687
|
+
["", "cancel"],
|
|
20688
|
+
["escape", "cancel"]
|
|
20689
|
+
]),
|
|
20690
|
+
messages: {
|
|
20691
|
+
cancel: "Canceled",
|
|
20692
|
+
error: "Something went wrong"
|
|
20693
|
+
},
|
|
20694
|
+
withGuide: true,
|
|
20695
|
+
date: {
|
|
20696
|
+
monthNames: [...[
|
|
20697
|
+
"January",
|
|
20698
|
+
"February",
|
|
20699
|
+
"March",
|
|
20700
|
+
"April",
|
|
20701
|
+
"May",
|
|
20702
|
+
"June",
|
|
20703
|
+
"July",
|
|
20704
|
+
"August",
|
|
20705
|
+
"September",
|
|
20706
|
+
"October",
|
|
20707
|
+
"November",
|
|
20708
|
+
"December"
|
|
20709
|
+
]],
|
|
20710
|
+
messages: {
|
|
20711
|
+
required: "Please enter a valid date",
|
|
20712
|
+
invalidMonth: "There are only 12 months in a year",
|
|
20713
|
+
invalidDay: (n, e) => `There are only ${n} days in ${e}`,
|
|
20714
|
+
afterMin: (n) => `Date must be on or after ${n.toISOString().slice(0, 10)}`,
|
|
20715
|
+
beforeMax: (n) => `Date must be on or before ${n.toISOString().slice(0, 10)}`
|
|
20716
|
+
}
|
|
20717
|
+
}
|
|
20718
|
+
};
|
|
20719
|
+
globalThis.process.platform.startsWith("win");
|
|
20720
|
+
const getColumns = (e) => "columns" in e && typeof e.columns == "number" ? e.columns : 80;
|
|
20721
|
+
//#endregion
|
|
20722
|
+
//#region ../../node_modules/.pnpm/@clack+prompts@1.7.0/node_modules/@clack/prompts/dist/index.mjs
|
|
20723
|
+
function isUnicodeSupported() {
|
|
20724
|
+
if (process$1.platform !== "win32") return process$1.env.TERM !== "linux";
|
|
20725
|
+
return Boolean(process$1.env.CI) || Boolean(process$1.env.WT_SESSION) || Boolean(process$1.env.TERMINUS_SUBLIME) || process$1.env.ConEmuTask === "{cmd::Cmder}" || process$1.env.TERM_PROGRAM === "Terminus-Sublime" || process$1.env.TERM_PROGRAM === "vscode" || process$1.env.TERM === "xterm-256color" || process$1.env.TERM === "alacritty" || process$1.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
|
|
20726
|
+
}
|
|
20727
|
+
const unicode = isUnicodeSupported();
|
|
20728
|
+
const unicodeOr = (o, e) => unicode ? o : e;
|
|
20729
|
+
const S_STEP_SUBMIT = unicodeOr("◇", "o");
|
|
20730
|
+
const S_BAR_START = unicodeOr("┌", "T");
|
|
20731
|
+
const S_BAR = unicodeOr("│", "|");
|
|
20732
|
+
const S_BAR_END = unicodeOr("└", "—");
|
|
20733
|
+
const S_BAR_H = unicodeOr("─", "-");
|
|
20734
|
+
const S_CORNER_TOP_RIGHT = unicodeOr("╮", "+");
|
|
20735
|
+
const S_CONNECT_LEFT = unicodeOr("├", "+");
|
|
20736
|
+
const S_CORNER_BOTTOM_RIGHT = unicodeOr("╯", "+");
|
|
20737
|
+
const S_CORNER_BOTTOM_LEFT = unicodeOr("╰", "+");
|
|
20738
|
+
const S_INFO = unicodeOr("●", "•");
|
|
20739
|
+
const S_SUCCESS = unicodeOr("◆", "*");
|
|
20740
|
+
const S_WARN = unicodeOr("▲", "!");
|
|
20741
|
+
const S_ERROR = unicodeOr("■", "x");
|
|
20742
|
+
`${styleText("dim", "↑/↓")}`, `${styleText("dim", "Space:")}`, `${styleText("dim", "Enter:")}`;
|
|
20743
|
+
const log = {
|
|
20744
|
+
message: (s = [], { symbol: e = styleText("gray", S_BAR), secondarySymbol: r = styleText("gray", S_BAR), output: m = process.stdout, spacing: l = 1, withGuide: c } = {}) => {
|
|
20745
|
+
const t = [], o = c ?? settings.withGuide, f = o ? r : "", O = o ? `${e} ` : "", u = o ? `${r} ` : "";
|
|
20746
|
+
for (let i = 0; i < l; i++) t.push(f);
|
|
20747
|
+
const g = Array.isArray(s) ? s : s.split(`
|
|
20748
|
+
`);
|
|
20749
|
+
if (g.length > 0) {
|
|
20750
|
+
const [i, ...y] = g;
|
|
20751
|
+
i.length > 0 ? t.push(`${O}${i}`) : t.push(o ? e : "");
|
|
20752
|
+
for (const p of y) p.length > 0 ? t.push(`${u}${p}`) : t.push(o ? r : "");
|
|
20753
|
+
}
|
|
20754
|
+
m.write(`${t.join(`
|
|
20755
|
+
`)}
|
|
20756
|
+
`);
|
|
20757
|
+
},
|
|
20758
|
+
info: (s, e) => {
|
|
20759
|
+
log.message(s, {
|
|
20760
|
+
...e,
|
|
20761
|
+
symbol: styleText("blue", S_INFO)
|
|
20762
|
+
});
|
|
20763
|
+
},
|
|
20764
|
+
success: (s, e) => {
|
|
20765
|
+
log.message(s, {
|
|
20766
|
+
...e,
|
|
20767
|
+
symbol: styleText("green", S_SUCCESS)
|
|
20768
|
+
});
|
|
20769
|
+
},
|
|
20770
|
+
step: (s, e) => {
|
|
20771
|
+
log.message(s, {
|
|
20772
|
+
...e,
|
|
20773
|
+
symbol: styleText("green", S_STEP_SUBMIT)
|
|
20774
|
+
});
|
|
20775
|
+
},
|
|
20776
|
+
warn: (s, e) => {
|
|
20777
|
+
log.message(s, {
|
|
20778
|
+
...e,
|
|
20779
|
+
symbol: styleText("yellow", S_WARN)
|
|
20780
|
+
});
|
|
20781
|
+
},
|
|
20782
|
+
/** alias for `log.warn()`. */
|
|
20783
|
+
warning: (s, e) => {
|
|
20784
|
+
log.warn(s, e);
|
|
20785
|
+
},
|
|
20786
|
+
error: (s, e) => {
|
|
20787
|
+
log.message(s, {
|
|
20788
|
+
...e,
|
|
20789
|
+
symbol: styleText("red", S_ERROR)
|
|
20790
|
+
});
|
|
20791
|
+
}
|
|
20792
|
+
};
|
|
20793
|
+
const cancel = (o = "", t) => {
|
|
20794
|
+
const i = t?.output ?? process.stdout, e = t?.withGuide ?? settings.withGuide ? `${styleText("gray", S_BAR_END)} ` : "";
|
|
20795
|
+
i.write(`${e}${styleText("red", o)}
|
|
20796
|
+
|
|
20797
|
+
`);
|
|
20798
|
+
};
|
|
20799
|
+
const intro = (o = "", t) => {
|
|
20800
|
+
const i = t?.output ?? process.stdout, e = t?.withGuide ?? settings.withGuide ? `${styleText("gray", S_BAR_START)} ` : "";
|
|
20801
|
+
i.write(`${e}${o}
|
|
20802
|
+
`);
|
|
20803
|
+
};
|
|
20804
|
+
const outro = (o = "", t) => {
|
|
20805
|
+
const i = t?.output ?? process.stdout, e = t?.withGuide ?? settings.withGuide ? `${styleText("gray", S_BAR)}
|
|
20806
|
+
${styleText("gray", S_BAR_END)} ` : "";
|
|
20807
|
+
i.write(`${e}${o}
|
|
20808
|
+
|
|
20809
|
+
`);
|
|
20810
|
+
};
|
|
20811
|
+
const W$1 = (o) => o;
|
|
20812
|
+
const C = (o, e, s) => {
|
|
20813
|
+
const a = {
|
|
20814
|
+
hard: true,
|
|
20815
|
+
trim: false
|
|
20816
|
+
}, i = wrapAnsi(o, e, a).split(`
|
|
20817
|
+
`), c = i.reduce((n, t) => Math.max(fastStringWidth(t), n), 0);
|
|
20818
|
+
return wrapAnsi(o, e - (i.map(s).reduce((n, t) => Math.max(fastStringWidth(t), n), 0) - c), a);
|
|
20819
|
+
};
|
|
20820
|
+
const note = (o = "", e = "", s) => {
|
|
20821
|
+
const a = s?.output ?? process$1.stdout, i = s?.withGuide ?? settings.withGuide, c = s?.format ?? W$1, g = [
|
|
20822
|
+
"",
|
|
20823
|
+
...C(o, getColumns(a) - 6, c).split(`
|
|
20824
|
+
`).map(c),
|
|
20825
|
+
""
|
|
20826
|
+
], n = fastStringWidth(e), t = Math.max(g.reduce((m, F) => {
|
|
20827
|
+
const O = fastStringWidth(F);
|
|
20828
|
+
return O > m ? O : m;
|
|
20829
|
+
}, 0), n) + 2, h = g.map((m) => `${styleText("gray", S_BAR)} ${m}${" ".repeat(t - fastStringWidth(m))}${styleText("gray", S_BAR)}`).join(`
|
|
20830
|
+
`), T = i ? `${styleText("gray", S_BAR)}
|
|
20831
|
+
` : "", l$1 = i ? S_CONNECT_LEFT : S_CORNER_BOTTOM_LEFT;
|
|
20832
|
+
a.write(`${T}${styleText("green", S_STEP_SUBMIT)} ${styleText("reset", e)} ${styleText("gray", S_BAR_H.repeat(Math.max(t - n - 1, 1)) + S_CORNER_TOP_RIGHT)}
|
|
20833
|
+
${h}
|
|
20834
|
+
${styleText("gray", l$1 + S_BAR_H.repeat(t + 2) + S_CORNER_BOTTOM_RIGHT)}
|
|
20835
|
+
`);
|
|
20836
|
+
};
|
|
20837
|
+
`${styleText("dim", "↑/↓")}`, `${styleText("dim", "Enter:")}`;
|
|
20838
|
+
`${styleText("gray", S_BAR)}`;
|
|
20839
|
+
//#endregion
|
|
20840
|
+
//#region src/renderClackLog.ts
|
|
20841
|
+
const METHODS = /* @__PURE__ */ new Set([
|
|
20842
|
+
"message",
|
|
20843
|
+
"info",
|
|
20844
|
+
"success",
|
|
20845
|
+
"step",
|
|
20846
|
+
"warn",
|
|
20847
|
+
"error",
|
|
20848
|
+
"note",
|
|
20849
|
+
"intro",
|
|
20850
|
+
"outro",
|
|
20851
|
+
"cancel"
|
|
20852
|
+
]);
|
|
20853
|
+
/**
|
|
20854
|
+
* The calls a spec's stand-ins for `p.log` (and `p.note`, `p.outro`, ...)
|
|
20855
|
+
* recorded, in the order the command made them.
|
|
20856
|
+
*/
|
|
20857
|
+
const recordedClackCalls = (...stubs) => stubs.flatMap((stub) => Object.entries(stub).flatMap(([method, fn]) => {
|
|
20858
|
+
const mock = fn?.mock;
|
|
20859
|
+
if (!mock || !METHODS.has(method)) return [];
|
|
20860
|
+
return mock.calls.map((args, index) => [mock.invocationCallOrder[index] ?? 0, [method, ...args]]);
|
|
20861
|
+
})).sort(([a], [b]) => a - b).map(([, call]) => call);
|
|
20862
|
+
/**
|
|
20863
|
+
* The lines the calls print through `@clack/prompts`, without colors, on a
|
|
20864
|
+
* terminal `columns` wide: clack wraps only a note, so any other line wider
|
|
20865
|
+
* than the terminal is one the terminal wraps.
|
|
20866
|
+
*/
|
|
20867
|
+
const renderClackLog = (calls, { columns = 80 } = {}) => {
|
|
20868
|
+
let text = "";
|
|
20869
|
+
const options = {
|
|
20870
|
+
output: Object.assign(new Writable({ write(chunk, _encoding, done) {
|
|
20871
|
+
text += String(chunk);
|
|
20872
|
+
done();
|
|
20873
|
+
} }), {
|
|
20874
|
+
columns,
|
|
20875
|
+
isTTY: false
|
|
20876
|
+
}),
|
|
20877
|
+
withGuide: true
|
|
20878
|
+
};
|
|
20879
|
+
for (const [method, ...args] of calls) {
|
|
20880
|
+
const [message = "", title = ""] = args.map((arg) => arg === void 0 ? "" : String(arg));
|
|
20881
|
+
if (method === "note") note(message, title, options);
|
|
20882
|
+
else if (method === "intro") intro(message, options);
|
|
20883
|
+
else if (method === "outro") outro(message, options);
|
|
20884
|
+
else if (method === "cancel") cancel(message, options);
|
|
20885
|
+
else log[method](message, options);
|
|
20886
|
+
}
|
|
20887
|
+
return stripVTControlCharacters(text).replace(/\n+$/, "").split("\n");
|
|
20888
|
+
};
|
|
20889
|
+
/**
|
|
20890
|
+
* The lines wider than `columns`, which a terminal that wide wraps, but for
|
|
20891
|
+
* a line that is one word after clack's gutter, such as a URL, which no
|
|
20892
|
+
* line break could shorten.
|
|
20893
|
+
*/
|
|
20894
|
+
const linesWiderThan = (lines, columns = 80) => lines.filter((line) => [...line].length > columns && /\s/u.test(line.slice(3).trim()));
|
|
20895
|
+
//#endregion
|
|
20336
20896
|
//#region src/setupHandlerIntegrationTestSuite.ts
|
|
20337
20897
|
const TEST_ADMIN_AUTH_TOKEN = "hot-updater-test-token";
|
|
20338
20898
|
/**
|
|
@@ -20593,4 +21153,4 @@ const mysqlExecutor = (pool) => {
|
|
|
20593
21153
|
};
|
|
20594
21154
|
};
|
|
20595
21155
|
//#endregion
|
|
20596
|
-
export { RELEASE_CATALOG_DOWNLOAD_HASH, RELEASE_CATALOG_MANIFEST_URIS, RELEASE_CATALOG_STORAGE_FIXTURES, TEST_ADMIN_AUTH_TOKEN, assertCommandAvailable, assertDockerComposeAvailable, assertDockerDaemonAvailable, assertEnvFlagEnabled, cleanupServer, createD1TestDatabase, createReleaseCatalogTestStorage, createTestDbPath, findOpenPort, formatRuntimeLogs, hasCommand, hasDockerCompose, hasDockerDaemon, killPort, mockReactNativeProjectRoot, mysqlExecutor, pgBatchExecutor, pgExecutor, pgliteBatchExecutor, pgliteExecutor, releaseCatalogArtifact, releaseCatalogArtifactFiles, releaseCatalogDownloadUrl, runCheckedCommand, spawnRuntime, spawnServerProcess, sqliteBatchExecutor, sqliteExecutor, startHttpTestServer, stopRuntime, waitForHttpOk, waitForServer };
|
|
21156
|
+
export { RELEASE_CATALOG_DOWNLOAD_HASH, RELEASE_CATALOG_MANIFEST_URIS, RELEASE_CATALOG_STORAGE_FIXTURES, TEST_ADMIN_AUTH_TOKEN, assertCommandAvailable, assertDockerComposeAvailable, assertDockerDaemonAvailable, assertEnvFlagEnabled, cleanupServer, createD1TestDatabase, createReleaseCatalogTestStorage, createTestDbPath, findOpenPort, formatRuntimeLogs, hasCommand, hasDockerCompose, hasDockerDaemon, killPort, linesWiderThan, mockReactNativeProjectRoot, mysqlExecutor, pgBatchExecutor, pgExecutor, pgliteBatchExecutor, pgliteExecutor, recordedClackCalls, releaseCatalogArtifact, releaseCatalogArtifactFiles, releaseCatalogDownloadUrl, renderClackLog, runCheckedCommand, spawnRuntime, spawnServerProcess, sqliteBatchExecutor, sqliteExecutor, startHttpTestServer, stopRuntime, waitForHttpOk, waitForServer };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hot-updater/test-utils",
|
|
3
|
-
"version": "1.2.0-rc.
|
|
3
|
+
"version": "1.2.0-rc.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Test utilities for Hot Updater packages",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -50,10 +50,10 @@
|
|
|
50
50
|
"mysql2": "*",
|
|
51
51
|
"pg": "*",
|
|
52
52
|
"vitest": "^4.0.0",
|
|
53
|
-
"@hot-updater/plugin-insights": "^1.2.0-rc.
|
|
54
|
-
"@hot-updater/protocol": "^1.2.0-rc.
|
|
55
|
-
"@hot-updater/
|
|
56
|
-
"@hot-updater/
|
|
53
|
+
"@hot-updater/plugin-insights": "^1.2.0-rc.3",
|
|
54
|
+
"@hot-updater/protocol": "^1.2.0-rc.3",
|
|
55
|
+
"@hot-updater/server": "^1.2.0-rc.3",
|
|
56
|
+
"@hot-updater/plugin-core": "^1.2.0-rc.3"
|
|
57
57
|
},
|
|
58
58
|
"peerDependenciesMeta": {
|
|
59
59
|
"@electric-sql/pglite": {
|
|
@@ -73,6 +73,7 @@
|
|
|
73
73
|
}
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
|
+
"@clack/prompts": "1.7.0",
|
|
76
77
|
"@electric-sql/pglite": "0.4.1",
|
|
77
78
|
"@types/node": "^20",
|
|
78
79
|
"@types/pg": "^8.11.10",
|
|
@@ -83,10 +84,10 @@
|
|
|
83
84
|
"typescript": "npm:@typescript/typescript6@6.0.2",
|
|
84
85
|
"vitest": "4.1.4",
|
|
85
86
|
"workspace-tools": "^0.41.7",
|
|
86
|
-
"@hot-updater/
|
|
87
|
-
"@hot-updater/
|
|
88
|
-
"@hot-updater/
|
|
89
|
-
"@hot-updater/plugin-insights": "1.2.0-rc.
|
|
87
|
+
"@hot-updater/server": "1.2.0-rc.3",
|
|
88
|
+
"@hot-updater/protocol": "1.2.0-rc.3",
|
|
89
|
+
"@hot-updater/plugin-core": "1.2.0-rc.3",
|
|
90
|
+
"@hot-updater/plugin-insights": "1.2.0-rc.3"
|
|
90
91
|
},
|
|
91
92
|
"inlinedDependencies": {
|
|
92
93
|
"@nodelib/fs.scandir": "2.1.5",
|