@liquidmetal-ai/raindrop 0.9.1 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -85
- package/bundle/{chunk-ZHYJWVIA.js → chunk-33VVNTZ7.js} +2 -2
- package/bundle/{chunk-SP4Q3T7T.js → chunk-3EXF5SKZ.js} +1 -1
- package/bundle/{chunk-JXNZYHAI.js → chunk-3TJC2HRW.js} +89 -105
- package/bundle/{chunk-HBDFBL3W.js → chunk-44MKXST7.js} +1 -1
- package/bundle/{chunk-GDYEPR67.js → chunk-4RZFURCF.js} +1 -1
- package/bundle/{chunk-67CBWZ7Y.js → chunk-4UNXUMLE.js} +3 -3
- package/bundle/chunk-4VJ2X7ZI.js +48 -0
- package/bundle/{chunk-IMQTVYRB.js → chunk-4WGY3ATR.js} +1 -1
- package/bundle/{chunk-ORPX7FPP.js → chunk-5TPOE7P2.js} +1 -5
- package/bundle/chunk-7JFKALLH.js +133 -0
- package/bundle/chunk-7O6U3ZAR.js +75 -0
- package/bundle/chunk-AWUA3C2V.js +114 -0
- package/bundle/{chunk-QKHN66ZN.js → chunk-BEN3KZQU.js} +1 -1
- package/bundle/{chunk-JDMAG4KE.js → chunk-BPZWIRQS.js} +2 -2
- package/bundle/chunk-C7G6I3MQ.js +292 -0
- package/bundle/chunk-D23L4WLL.js +502 -0
- package/bundle/chunk-E2TCXKAT.js +48 -0
- package/bundle/{chunk-FTG32FZ4.js → chunk-E7K6Y6GO.js} +1 -1
- package/bundle/chunk-EBK2SJTZ.js +805 -0
- package/bundle/chunk-FTH4A227.js +46 -0
- package/bundle/chunk-HBWEGYBW.js +4486 -0
- package/bundle/chunk-HFEVZZHW.js +46 -0
- package/bundle/chunk-I5M6WZPS.js +384 -0
- package/bundle/chunk-J44ZDCXF.js +44 -0
- package/bundle/{chunk-D5TOYPUE.js → chunk-J6XV5EH5.js} +1 -1
- package/bundle/chunk-KE7CMLHP.js +292 -0
- package/bundle/{chunk-ZLRYUJ5P.js → chunk-KHYRZQSK.js} +4 -4
- package/bundle/chunk-KOYRAC7N.js +74 -0
- package/bundle/chunk-KQ3F5KG7.js +231 -0
- package/bundle/chunk-KSXGB4ZG.js +4539 -0
- package/bundle/{chunk-7ERI6IFL.js → chunk-LP3LXBGR.js} +1 -1
- package/bundle/chunk-MH3BACIP.js +238722 -0
- package/bundle/chunk-MM7BYDBJ.js +238725 -0
- package/bundle/chunk-MQUFNQI5.js +231 -0
- package/bundle/{chunk-4RVUC2XX.js → chunk-N3LTFUBJ.js} +1 -1
- package/bundle/chunk-NWYJJVCF.js +22452 -0
- package/bundle/chunk-OAMLVMOY.js +133 -0
- package/bundle/chunk-PBVMMANP.js +4480 -0
- package/bundle/chunk-PT6CYFBD.js +74 -0
- package/bundle/chunk-QAG6TIB7.js +12148 -0
- package/bundle/chunk-RSLQIAJB.js +12148 -0
- package/bundle/chunk-SAU2NEDC.js +147 -0
- package/bundle/chunk-SZ6TMVT4.js +22452 -0
- package/bundle/chunk-T3MAVQWW.js +292 -0
- package/bundle/chunk-TCGZNSBY.js +4539 -0
- package/bundle/chunk-TRIIBQDR.js +4480 -0
- package/bundle/chunk-UUTXTOE3.js +231 -0
- package/bundle/chunk-VMKGSIXK.js +75 -0
- package/bundle/chunk-XDCRA7Y2.js +805 -0
- package/bundle/chunk-XEMONOX2.js +384 -0
- package/bundle/chunk-YAPQ2CKV.js +115 -0
- package/bundle/chunk-YDDBYUDC.js +502 -0
- package/bundle/chunk-ZGLCW5YO.js +380 -0
- package/bundle/chunk-ZQ6BFQSX.js +44 -0
- package/bundle/chunk-ZZTNAQSE.js +147 -0
- package/bundle/commands/annotation/get.js +3 -3
- package/bundle/commands/annotation/list.js +3 -3
- package/bundle/commands/annotation/put.js +3 -3
- package/bundle/commands/auth/list.js +2 -2
- package/bundle/commands/auth/login.js +3 -3
- package/bundle/commands/auth/logout.js +2 -2
- package/bundle/commands/auth/select.js +3 -3
- package/bundle/commands/bucket/create-credential.js +2 -2
- package/bundle/commands/bucket/delete-credential.js +2 -2
- package/bundle/commands/bucket/get-credential.js +2 -2
- package/bundle/commands/bucket/list-credentials.js +2 -2
- package/bundle/commands/build/branch.js +9 -9
- package/bundle/commands/build/checkout.js +6 -5
- package/bundle/commands/build/clone.js +5 -5
- package/bundle/commands/build/delete.js +6 -5
- package/bundle/commands/build/deploy.js +9 -9
- package/bundle/commands/build/env/get.js +2 -2
- package/bundle/commands/build/env/set.js +2 -2
- package/bundle/commands/build/find.js +7 -3
- package/bundle/commands/build/generate.js +3 -3
- package/bundle/commands/build/init-workspace.js +102 -0
- package/bundle/commands/build/init.js +3 -3
- package/bundle/commands/build/list.js +5 -4
- package/bundle/commands/build/sandbox.js +7 -7
- package/bundle/commands/build/start.js +2 -2
- package/bundle/commands/build/status.js +8 -4
- package/bundle/commands/build/stop.js +2 -2
- package/bundle/commands/build/tools/check.js +2 -2
- package/bundle/commands/build/tools/fmt.js +2 -2
- package/bundle/commands/build/unsandbox.js +7 -7
- package/bundle/commands/build/upload.js +5 -5
- package/bundle/commands/build/validate.js +4 -4
- package/bundle/commands/build/workos/delete.js +4 -4
- package/bundle/commands/build/workos/env/attach.js +3 -3
- package/bundle/commands/build/workos/env/create.js +3 -3
- package/bundle/commands/build/workos/env/delete.js +3 -3
- package/bundle/commands/build/workos/env/detach.js +3 -3
- package/bundle/commands/build/workos/env/get.js +3 -3
- package/bundle/commands/build/workos/env/list.js +3 -3
- package/bundle/commands/build/workos/env/set.js +3 -3
- package/bundle/commands/build/workos/invite.js +3 -3
- package/bundle/commands/build/workos/setup.js +3 -3
- package/bundle/commands/build/workos/status.js +3 -3
- package/bundle/commands/dns/create.js +2 -2
- package/bundle/commands/dns/delete.js +4 -4
- package/bundle/commands/dns/get.js +4 -4
- package/bundle/commands/dns/list.js +3 -3
- package/bundle/commands/dns/records/create.js +2 -2
- package/bundle/commands/dns/records/delete.js +3 -3
- package/bundle/commands/dns/records/get.js +2 -2
- package/bundle/commands/dns/records/list.js +2 -2
- package/bundle/commands/dns/records/update.js +2 -2
- package/bundle/commands/logs/query.js +3 -3
- package/bundle/commands/logs/tail.js +3 -3
- package/bundle/commands/mcp/install-claude.js +2 -2
- package/bundle/commands/mcp/install-gemini.js +2 -2
- package/bundle/commands/mcp/install-goose.js +2 -2
- package/bundle/commands/mcp/status.js +2 -2
- package/bundle/commands/object/delete.js +2 -2
- package/bundle/commands/object/get.js +2 -2
- package/bundle/commands/object/list.js +2 -2
- package/bundle/commands/object/put.js +2 -2
- package/bundle/commands/query/chunk-search.js +3 -3
- package/bundle/commands/query/document.js +3 -3
- package/bundle/commands/query/events.js +2 -2
- package/bundle/commands/query/reindex.js +2 -2
- package/bundle/commands/query/search.js +3 -3
- package/bundle/commands/tail.js +2 -2
- package/bundle/index.js +1 -1
- package/dist/commands/build/find.d.ts.map +1 -1
- package/dist/commands/build/find.js +3 -0
- package/dist/commands/build/init-workspace.d.ts +16 -0
- package/dist/commands/build/init-workspace.d.ts.map +1 -0
- package/dist/commands/build/init-workspace.js +95 -0
- package/dist/commands/build/list.d.ts.map +1 -1
- package/dist/commands/build/list.js +3 -0
- package/dist/commands/build/status.d.ts.map +1 -1
- package/dist/commands/build/status.js +3 -0
- package/dist/killswitch-utils.d.ts +30 -0
- package/dist/killswitch-utils.d.ts.map +1 -0
- package/dist/killswitch-utils.js +83 -0
- package/oclif.manifest.json +2114 -2007
- package/package.json +3 -3
- package/templates/claude-code/debug-raindrop-app.md +12 -39
- package/templates/claude-code/update-raindrop-app.md +5 -6
- package/templates/db/node_modules/.bin/prisma +2 -2
- package/templates/db/node_modules/.bin/prisma-kysely +2 -2
- package/templates/db/node_modules/.bin/tsc +2 -2
- package/templates/db/node_modules/.bin/tsserver +2 -2
- package/templates/db/node_modules/.bin/zx +2 -2
- package/templates/gemini-code/debug-raindrop-app.toml +12 -39
- package/templates/gemini-code/update-raindrop-app.toml +5 -6
- package/templates/goose/debug-raindrop-app.yaml +12 -39
- package/templates/goose/update-raindrop-app.yaml +5 -6
- package/templates/workspace/.gitignore.hbs +40 -0
- package/templates/workspace/package.json.hbs +22 -0
- package/dist/commands/killswitch.d.ts +0 -20
- package/dist/commands/killswitch.d.ts.map +0 -1
- package/dist/commands/killswitch.js +0 -58
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/utils/mixpanel.d.ts +0 -10
- package/dist/utils/mixpanel.d.ts.map +0 -1
- package/dist/utils/mixpanel.js +0 -43
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import {
|
|
2
|
+
init_cjs_shims,
|
|
3
|
+
timestampMs
|
|
4
|
+
} from "./chunk-3TJC2HRW.js";
|
|
5
|
+
|
|
6
|
+
// src/log-helpers.ts
|
|
7
|
+
init_cjs_shims();
|
|
8
|
+
function formatLogAttribute(key, value, displayValue) {
|
|
9
|
+
if (key === "http.status") {
|
|
10
|
+
const statusCode = parseInt(value);
|
|
11
|
+
const statusEmoji = statusCode >= 200 && statusCode < 300 ? "\u2705" : statusCode >= 400 ? "\u274C" : "\u26A0\uFE0F";
|
|
12
|
+
return `${key}: ${statusEmoji} ${value}`;
|
|
13
|
+
} else if (key === "http.method" || key === "http.url") {
|
|
14
|
+
return `${key}: ${value}`;
|
|
15
|
+
} else if (key === "query") {
|
|
16
|
+
return `\u{1F5C4}\uFE0F SQL Query: ${value}`;
|
|
17
|
+
} else if (key === "rows_read") {
|
|
18
|
+
return `\u{1F4CA} Rows Read: ${value}`;
|
|
19
|
+
} else if (key === "rows_written") {
|
|
20
|
+
return `\u270D\uFE0F Rows Written: ${value}`;
|
|
21
|
+
} else if (key === "db") {
|
|
22
|
+
return `\u{1F3E6} Database: ${value}`;
|
|
23
|
+
} else if (key === "error") {
|
|
24
|
+
if (value && value !== "undefined") {
|
|
25
|
+
return `\u274C Error: ${value}`;
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
} else if (key === "fields" || key === "meta") {
|
|
29
|
+
try {
|
|
30
|
+
const parsed = JSON.parse(displayValue);
|
|
31
|
+
if (key === "meta" && parsed) {
|
|
32
|
+
const metrics = [];
|
|
33
|
+
if (parsed.duration) metrics.push(`${parsed.duration}ms`);
|
|
34
|
+
if (parsed.rows_read) metrics.push(`${parsed.rows_read} rows read`);
|
|
35
|
+
if (parsed.rows_written && parsed.rows_written > 0) metrics.push(`${parsed.rows_written} rows written`);
|
|
36
|
+
if (parsed.served_by_region) metrics.push(`${parsed.served_by_region}`);
|
|
37
|
+
if (parsed.size_after) metrics.push(`DB: ${(parsed.size_after / 1024).toFixed(1)}KB`);
|
|
38
|
+
if (metrics.length > 0) {
|
|
39
|
+
return `\u{1F4CA} ${key}: ${metrics.join(", ")}`;
|
|
40
|
+
} else {
|
|
41
|
+
return `${key}: ${JSON.stringify(parsed, (_, v) => typeof v === "bigint" ? v.toString() : v)}`;
|
|
42
|
+
}
|
|
43
|
+
} else {
|
|
44
|
+
return `${key}: ${JSON.stringify(parsed, (_, v) => typeof v === "bigint" ? v.toString() : v)}`;
|
|
45
|
+
}
|
|
46
|
+
} catch {
|
|
47
|
+
return `${key}: ${displayValue}`;
|
|
48
|
+
}
|
|
49
|
+
} else {
|
|
50
|
+
return `${key}: ${displayValue}`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function displayEventAttributes(event, logger, indentLevel = " ") {
|
|
54
|
+
if (event.attributes && Object.keys(event.attributes).length > 0) {
|
|
55
|
+
Object.entries(event.attributes).forEach(([key, value]) => {
|
|
56
|
+
if (value !== void 0 && value !== null) {
|
|
57
|
+
let displayValue = value;
|
|
58
|
+
try {
|
|
59
|
+
const parsed = JSON.parse(value);
|
|
60
|
+
if (typeof parsed === "object" && parsed !== null) {
|
|
61
|
+
displayValue = JSON.stringify(parsed, (_, v) => {
|
|
62
|
+
if (typeof v === "bigint") {
|
|
63
|
+
return v.toString();
|
|
64
|
+
}
|
|
65
|
+
return v;
|
|
66
|
+
}, 2);
|
|
67
|
+
}
|
|
68
|
+
} catch {
|
|
69
|
+
}
|
|
70
|
+
const formattedAttribute = formatLogAttribute(key, value, displayValue);
|
|
71
|
+
if (formattedAttribute) {
|
|
72
|
+
logger.log(`${indentLevel}${formattedAttribute}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function displayTraceGroupedEvents(events, logger) {
|
|
79
|
+
const eventsByTrace = /* @__PURE__ */ new Map();
|
|
80
|
+
events.forEach((event) => {
|
|
81
|
+
const traceId = event.trace?.eventId || "unknown";
|
|
82
|
+
if (!eventsByTrace.has(traceId)) {
|
|
83
|
+
eventsByTrace.set(traceId, []);
|
|
84
|
+
}
|
|
85
|
+
const traceEvents = eventsByTrace.get(traceId);
|
|
86
|
+
if (traceEvents) {
|
|
87
|
+
traceEvents.push(event);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
for (const [traceId, traceEvents] of eventsByTrace) {
|
|
91
|
+
if (traceEvents.length === 0) continue;
|
|
92
|
+
traceEvents.sort((a, b) => {
|
|
93
|
+
if (a.eventOrder !== void 0 && b.eventOrder !== void 0) {
|
|
94
|
+
return a.eventOrder - b.eventOrder;
|
|
95
|
+
}
|
|
96
|
+
const aTime = a.trace?.startTime ? timestampMs(a.trace.startTime) : 0;
|
|
97
|
+
const bTime = b.trace?.startTime ? timestampMs(b.trace.startTime) : 0;
|
|
98
|
+
return aTime - bTime;
|
|
99
|
+
});
|
|
100
|
+
const firstEvent = traceEvents[0];
|
|
101
|
+
const lastEvent = traceEvents[traceEvents.length - 1];
|
|
102
|
+
const startTime = firstEvent.trace?.startTime ? timestampMs(firstEvent.trace.startTime) : 0;
|
|
103
|
+
const endTime = lastEvent.trace?.endTime ? timestampMs(lastEvent.trace.endTime) : lastEvent.trace?.startTime ? timestampMs(lastEvent.trace.startTime) : 0;
|
|
104
|
+
const traceDuration = endTime > startTime ? ` (${endTime - startTime}ms total)` : "";
|
|
105
|
+
const timestamp = firstEvent.trace?.startTime ? new Date(timestampMs(firstEvent.trace.startTime)).toLocaleString() : "Unknown time";
|
|
106
|
+
logger.log(`[${timestamp}] \u{1F517} Trace: ${traceId}${traceDuration}`);
|
|
107
|
+
if (firstEvent.organization?.id || firstEvent.application?.name) {
|
|
108
|
+
const contextParts = [];
|
|
109
|
+
if (firstEvent.organization?.id) contextParts.push(`Org: ${firstEvent.organization.id}`);
|
|
110
|
+
if (firstEvent.application?.name) contextParts.push(`App: ${firstEvent.application.name}`);
|
|
111
|
+
if (firstEvent.application?.version?.id) contextParts.push(`v${firstEvent.application.version.id}`);
|
|
112
|
+
if (firstEvent.script?.name) contextParts.push(`Script: ${firstEvent.script.name}`);
|
|
113
|
+
logger.log(` ${contextParts.join(", ")}`);
|
|
114
|
+
}
|
|
115
|
+
traceEvents.forEach((event, index) => {
|
|
116
|
+
const eventName = event.name || "Event";
|
|
117
|
+
const status = event.status || "ok";
|
|
118
|
+
const statusEmoji = status === "error" ? "\u274C" : "\u2705";
|
|
119
|
+
let duration = "";
|
|
120
|
+
if (event.trace?.endTime && event.trace?.startTime) {
|
|
121
|
+
const durationMs = timestampMs(event.trace.endTime) - timestampMs(event.trace.startTime);
|
|
122
|
+
duration = ` (${durationMs}ms)`;
|
|
123
|
+
}
|
|
124
|
+
logger.log(` ${index + 1}. ${statusEmoji} ${eventName}${duration}`);
|
|
125
|
+
displayEventAttributes(event, logger, " ");
|
|
126
|
+
});
|
|
127
|
+
logger.log("");
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export {
|
|
132
|
+
displayTraceGroupedEvents
|
|
133
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import {
|
|
2
|
+
init_cjs_shims
|
|
3
|
+
} from "./chunk-3TJC2HRW.js";
|
|
4
|
+
|
|
5
|
+
// ../drizzle/dist/ulid.js
|
|
6
|
+
init_cjs_shims();
|
|
7
|
+
var BASE32_ENCODING = "0123456789abcdefghjkmnpqrstvwxyz";
|
|
8
|
+
var ENCODING_LEN = BASE32_ENCODING.length;
|
|
9
|
+
var TIME_MAX = Math.pow(2, 48) - 1;
|
|
10
|
+
var TIME_LEN = 10;
|
|
11
|
+
var RANDOM_LEN = 16;
|
|
12
|
+
function monotonic() {
|
|
13
|
+
let lastTime = 0;
|
|
14
|
+
let lastRandom;
|
|
15
|
+
return function ulid2() {
|
|
16
|
+
const seed = (/* @__PURE__ */ new Date()).getTime();
|
|
17
|
+
if (seed <= lastTime) {
|
|
18
|
+
lastRandom = incrementBase32(lastRandom);
|
|
19
|
+
return encodeTime(lastTime) + lastRandom;
|
|
20
|
+
}
|
|
21
|
+
lastTime = seed;
|
|
22
|
+
lastRandom = encodeRandom();
|
|
23
|
+
return encodeTime(seed) + lastRandom;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
var ulid = monotonic();
|
|
27
|
+
function encodeRandom() {
|
|
28
|
+
const bytes = crypto.getRandomValues(new Uint8Array(RANDOM_LEN));
|
|
29
|
+
let str = "";
|
|
30
|
+
for (let i = 0; i < RANDOM_LEN; i++) {
|
|
31
|
+
str = str + BASE32_ENCODING[bytes[i] % ENCODING_LEN];
|
|
32
|
+
}
|
|
33
|
+
return str;
|
|
34
|
+
}
|
|
35
|
+
function encodeTime(ms) {
|
|
36
|
+
if (ms > TIME_MAX)
|
|
37
|
+
throw new Error("cannot encode time greater than " + TIME_MAX);
|
|
38
|
+
if (ms < 0)
|
|
39
|
+
throw new Error("time must be positive");
|
|
40
|
+
let mod;
|
|
41
|
+
let str = "";
|
|
42
|
+
for (let len = TIME_LEN; len > 0; len--) {
|
|
43
|
+
mod = ms % ENCODING_LEN;
|
|
44
|
+
str = BASE32_ENCODING[mod] + str;
|
|
45
|
+
ms = (ms - mod) / ENCODING_LEN;
|
|
46
|
+
}
|
|
47
|
+
return str;
|
|
48
|
+
}
|
|
49
|
+
function incrementBase32(str) {
|
|
50
|
+
function replaceCharAt(str2, index2, char2) {
|
|
51
|
+
if (index2 > str2.length - 1)
|
|
52
|
+
return str2;
|
|
53
|
+
return str2.substring(0, index2) + char2 + str2.substring(index2 + 1);
|
|
54
|
+
}
|
|
55
|
+
const maxCharIndex = ENCODING_LEN - 1;
|
|
56
|
+
let index = str ? str.length : 0;
|
|
57
|
+
let char;
|
|
58
|
+
let charIndex;
|
|
59
|
+
while (index-- >= 0) {
|
|
60
|
+
char = str[index];
|
|
61
|
+
charIndex = BASE32_ENCODING.indexOf(char);
|
|
62
|
+
if (charIndex === -1)
|
|
63
|
+
throw new Error("incorrectly encoded string");
|
|
64
|
+
if (charIndex === maxCharIndex) {
|
|
65
|
+
str = replaceCharAt(str, index, BASE32_ENCODING[0]);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
return replaceCharAt(str, index, BASE32_ENCODING[charIndex + 1]);
|
|
69
|
+
}
|
|
70
|
+
return str;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export {
|
|
74
|
+
ulid
|
|
75
|
+
};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import {
|
|
2
|
+
init_cjs_shims
|
|
3
|
+
} from "./chunk-VEVVJAL6.js";
|
|
4
|
+
|
|
5
|
+
// ../drizzle/dist/ulid.js
|
|
6
|
+
init_cjs_shims();
|
|
7
|
+
var BASE32_ENCODING = "0123456789abcdefghjkmnpqrstvwxyz";
|
|
8
|
+
var ENCODING_LEN = BASE32_ENCODING.length;
|
|
9
|
+
var TIME_MAX = Math.pow(2, 48) - 1;
|
|
10
|
+
var TIME_LEN = 10;
|
|
11
|
+
var RANDOM_LEN = 16;
|
|
12
|
+
function monotonic() {
|
|
13
|
+
let lastTime = 0;
|
|
14
|
+
let lastRandom;
|
|
15
|
+
return function ulid2() {
|
|
16
|
+
const seed = (/* @__PURE__ */ new Date()).getTime();
|
|
17
|
+
if (seed <= lastTime) {
|
|
18
|
+
lastRandom = incrementBase32(lastRandom);
|
|
19
|
+
return encodeTime(lastTime) + lastRandom;
|
|
20
|
+
}
|
|
21
|
+
lastTime = seed;
|
|
22
|
+
lastRandom = encodeRandom();
|
|
23
|
+
return encodeTime(seed) + lastRandom;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
var ulid = monotonic();
|
|
27
|
+
function encodeRandom() {
|
|
28
|
+
const bytes = crypto.getRandomValues(new Uint8Array(RANDOM_LEN));
|
|
29
|
+
let str = "";
|
|
30
|
+
for (let i = 0; i < RANDOM_LEN; i++) {
|
|
31
|
+
str = str + BASE32_ENCODING[bytes[i] % ENCODING_LEN];
|
|
32
|
+
}
|
|
33
|
+
return str;
|
|
34
|
+
}
|
|
35
|
+
function encodeTime(ms) {
|
|
36
|
+
if (ms > TIME_MAX)
|
|
37
|
+
throw new Error("cannot encode time greater than " + TIME_MAX);
|
|
38
|
+
if (ms < 0)
|
|
39
|
+
throw new Error("time must be positive");
|
|
40
|
+
let mod;
|
|
41
|
+
let str = "";
|
|
42
|
+
for (let len = TIME_LEN; len > 0; len--) {
|
|
43
|
+
mod = ms % ENCODING_LEN;
|
|
44
|
+
str = BASE32_ENCODING[mod] + str;
|
|
45
|
+
ms = (ms - mod) / ENCODING_LEN;
|
|
46
|
+
}
|
|
47
|
+
return str;
|
|
48
|
+
}
|
|
49
|
+
function incrementBase32(str) {
|
|
50
|
+
function replaceCharAt(str2, index2, char2) {
|
|
51
|
+
if (index2 > str2.length - 1)
|
|
52
|
+
return str2;
|
|
53
|
+
return str2.substring(0, index2) + char2 + str2.substring(index2 + 1);
|
|
54
|
+
}
|
|
55
|
+
const maxCharIndex = ENCODING_LEN - 1;
|
|
56
|
+
let index = str ? str.length : 0;
|
|
57
|
+
let char;
|
|
58
|
+
let charIndex;
|
|
59
|
+
while (index-- >= 0) {
|
|
60
|
+
char = str[index];
|
|
61
|
+
charIndex = BASE32_ENCODING.indexOf(char);
|
|
62
|
+
if (charIndex === -1)
|
|
63
|
+
throw new Error("incorrectly encoded string");
|
|
64
|
+
if (charIndex === maxCharIndex) {
|
|
65
|
+
str = replaceCharAt(str, index, BASE32_ENCODING[0]);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
return replaceCharAt(str, index, BASE32_ENCODING[charIndex + 1]);
|
|
69
|
+
}
|
|
70
|
+
return str;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// src/utils/module-resolution.ts
|
|
74
|
+
init_cjs_shims();
|
|
75
|
+
async function resolveBucketsWithApplication(options) {
|
|
76
|
+
const { catalogService, userId, organizationId, applicationName, applicationVersionId, bucketNames } = options;
|
|
77
|
+
const queryParams = {
|
|
78
|
+
userId,
|
|
79
|
+
applicationName,
|
|
80
|
+
organizationId,
|
|
81
|
+
moduleType: "smartbucket",
|
|
82
|
+
...applicationVersionId && { applicationVersionId }
|
|
83
|
+
};
|
|
84
|
+
const modulesResp = await catalogService.queryModules(queryParams);
|
|
85
|
+
if (!modulesResp.modules || modulesResp.modules.length === 0) {
|
|
86
|
+
throw new Error(`No bucket modules found for application '${applicationName}'`);
|
|
87
|
+
}
|
|
88
|
+
const bucketLocations = [];
|
|
89
|
+
for (const bucketName of bucketNames) {
|
|
90
|
+
const bucketModules = modulesResp.modules.filter((module) => module.name === bucketName);
|
|
91
|
+
if (bucketModules.length === 0) {
|
|
92
|
+
throw new Error(`Bucket '${bucketName}' not found in application '${applicationName}'`);
|
|
93
|
+
}
|
|
94
|
+
const bucketModule = applicationVersionId ? bucketModules.find((m) => m.applicationVersionId === applicationVersionId) || bucketModules.sort((a, b) => b.applicationVersionId.localeCompare(a.applicationVersionId))[0] : bucketModules.sort((a, b) => b.applicationVersionId.localeCompare(a.applicationVersionId))[0];
|
|
95
|
+
if (!bucketModule) {
|
|
96
|
+
throw new Error(`Bucket '${bucketName}' not found in application '${applicationName}'`);
|
|
97
|
+
}
|
|
98
|
+
bucketLocations.push({
|
|
99
|
+
bucketLocation: {
|
|
100
|
+
case: "bucket",
|
|
101
|
+
value: {
|
|
102
|
+
name: bucketName,
|
|
103
|
+
version: bucketModule.applicationVersionId
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return bucketLocations;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export {
|
|
112
|
+
ulid,
|
|
113
|
+
resolveBucketsWithApplication
|
|
114
|
+
};
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import {
|
|
2
|
+
HANDLERS_DIR
|
|
3
|
+
} from "./chunk-5TPOE7P2.js";
|
|
4
|
+
import {
|
|
5
|
+
Actor,
|
|
6
|
+
Service,
|
|
7
|
+
init_cjs_shims,
|
|
8
|
+
valueOf
|
|
9
|
+
} from "./chunk-MH3BACIP.js";
|
|
10
|
+
|
|
11
|
+
// src/build.ts
|
|
12
|
+
init_cjs_shims();
|
|
13
|
+
|
|
14
|
+
// ../../node_modules/.pnpm/es-module-lexer@1.7.0/node_modules/es-module-lexer/dist/lexer.js
|
|
15
|
+
init_cjs_shims();
|
|
16
|
+
var ImportType;
|
|
17
|
+
!function(A2) {
|
|
18
|
+
A2[A2.Static = 1] = "Static", A2[A2.Dynamic = 2] = "Dynamic", A2[A2.ImportMeta = 3] = "ImportMeta", A2[A2.StaticSourcePhase = 4] = "StaticSourcePhase", A2[A2.DynamicSourcePhase = 5] = "DynamicSourcePhase", A2[A2.StaticDeferPhase = 6] = "StaticDeferPhase", A2[A2.DynamicDeferPhase = 7] = "DynamicDeferPhase";
|
|
19
|
+
}(ImportType || (ImportType = {}));
|
|
20
|
+
var A = 1 === new Uint8Array(new Uint16Array([1]).buffer)[0];
|
|
21
|
+
function parse(E2, g = "@") {
|
|
22
|
+
if (!C) return init.then(() => parse(E2));
|
|
23
|
+
const I = E2.length + 1, w = (C.__heap_base.value || C.__heap_base) + 4 * I - C.memory.buffer.byteLength;
|
|
24
|
+
w > 0 && C.memory.grow(Math.ceil(w / 65536));
|
|
25
|
+
const K = C.sa(I - 1);
|
|
26
|
+
if ((A ? B : Q)(E2, new Uint16Array(C.memory.buffer, K, I)), !C.parse()) throw Object.assign(new Error(`Parse error ${g}:${E2.slice(0, C.e()).split("\n").length}:${C.e() - E2.lastIndexOf("\n", C.e() - 1)}`), { idx: C.e() });
|
|
27
|
+
const o = [], D = [];
|
|
28
|
+
for (; C.ri(); ) {
|
|
29
|
+
const A2 = C.is(), Q2 = C.ie(), B2 = C.it(), g2 = C.ai(), I2 = C.id(), w2 = C.ss(), K2 = C.se();
|
|
30
|
+
let D2;
|
|
31
|
+
C.ip() && (D2 = k(E2.slice(-1 === I2 ? A2 - 1 : A2, -1 === I2 ? Q2 + 1 : Q2))), o.push({ n: D2, t: B2, s: A2, e: Q2, ss: w2, se: K2, d: I2, a: g2 });
|
|
32
|
+
}
|
|
33
|
+
for (; C.re(); ) {
|
|
34
|
+
const A2 = C.es(), Q2 = C.ee(), B2 = C.els(), g2 = C.ele(), I2 = E2.slice(A2, Q2), w2 = I2[0], K2 = B2 < 0 ? void 0 : E2.slice(B2, g2), o2 = K2 ? K2[0] : "";
|
|
35
|
+
D.push({ s: A2, e: Q2, ls: B2, le: g2, n: '"' === w2 || "'" === w2 ? k(I2) : I2, ln: '"' === o2 || "'" === o2 ? k(K2) : K2 });
|
|
36
|
+
}
|
|
37
|
+
function k(A2) {
|
|
38
|
+
try {
|
|
39
|
+
return (0, eval)(A2);
|
|
40
|
+
} catch (A3) {
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return [o, D, !!C.f(), !!C.ms()];
|
|
44
|
+
}
|
|
45
|
+
function Q(A2, Q2) {
|
|
46
|
+
const B2 = A2.length;
|
|
47
|
+
let C2 = 0;
|
|
48
|
+
for (; C2 < B2; ) {
|
|
49
|
+
const B3 = A2.charCodeAt(C2);
|
|
50
|
+
Q2[C2++] = (255 & B3) << 8 | B3 >>> 8;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function B(A2, Q2) {
|
|
54
|
+
const B2 = A2.length;
|
|
55
|
+
let C2 = 0;
|
|
56
|
+
for (; C2 < B2; ) Q2[C2] = A2.charCodeAt(C2++);
|
|
57
|
+
}
|
|
58
|
+
var C;
|
|
59
|
+
var E = () => {
|
|
60
|
+
return A2 = "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GzYCHAtBAEEAKAKwCkECajYCsAoCQAJAAkACQEEAECkiAUHhAEYNACABQfcARg0BQQAoArAKIQEMAgtBACgCsAoiAUECakHACEEKEC8NAUEGIQIMAgtBACgCsAoiAS8BAkHpAEcNACABLwEEQfQARw0AQQQhAiABLwEGQegARg0BC0EAIAFBfmo2ArAKDwtBACABIAJBAXRqNgKwCgJAQQEQKUH7AEYNAEEAIAE2ArAKDwtBACgCsAoiACECA0BBACACQQJqNgKwCgJAAkACQEEBECkiAkEiRg0AIAJBJ0cNAUEnEBpBAEEAKAKwCkECajYCsApBARApIQIMAgtBIhAaQQBBACgCsApBAmo2ArAKQQEQKSECDAELIAIQLCECCwJAIAJBOkYNAEEAIAE2ArAKDwtBAEEAKAKwCkECajYCsAoCQEEBECkiAkEiRg0AIAJBJ0YNAEEAIAE2ArAKDwsgAhAaQQBBACgCsApBAmo2ArAKAkACQEEBECkiAkEsRg0AIAJB/QBGDQFBACABNgKwCg8LQQBBACgCsApBAmo2ArAKQQEQKUH9AEYNAEEAKAKwCiECDAELC0EAKALwCSIBIAA2AhAgAUEAKAKwCkECajYCDAttAQJ/AkACQANAAkAgAEH//wNxIgFBd2oiAkEXSw0AQQEgAnRBn4CABHENAgsgAUGgAUYNASAAIQIgARAoDQJBACECQQBBACgCsAoiAEECajYCsAogAC8BAiIADQAMAgsLIAAhAgsgAkH//wNxC6sBAQR/AkACQEEAKAKwCiICLwEAIgNB4QBGDQAgASEEIAAhBQwBC0EAIAJBBGo2ArAKQQEQKSECQQAoArAKIQUCQAJAIAJBIkYNACACQSdGDQAgAhAsGkEAKAKwCiEEDAELIAIQGkEAQQAoArAKQQJqIgQ2ArAKC0EBECkhA0EAKAKwCiECCwJAIAIgBUYNACAFIARBACAAIAAgAUYiAhtBACABIAIbEAILIAMLcgEEf0EAKAKwCiEAQQAoArQKIQECQAJAA0AgAEECaiECIAAgAU8NAQJAAkAgAi8BACIDQaR/ag4CAQQACyACIQAgA0F2ag4EAgEBAgELIABBBGohAAwACwtBACACNgKwChAlQQAPC0EAIAI2ArAKQd0AC0kBA39BACEDAkAgAkUNAAJAA0AgAC0AACIEIAEtAAAiBUcNASABQQFqIQEgAEEBaiEAIAJBf2oiAg0ADAILCyAEIAVrIQMLIAMLC+wBAgBBgAgLzgEAAHgAcABvAHIAdABtAHAAbwByAHQAZgBvAHIAZQB0AGEAbwB1AHIAYwBlAHIAbwBtAHUAbgBjAHQAaQBvAG4AcwBzAGUAcgB0AHYAbwB5AGkAZQBkAGUAbABlAGMAbwBuAHQAaQBuAGkAbgBzAHQAYQBuAHQAeQBiAHIAZQBhAHIAZQB0AHUAcgBkAGUAYgB1AGcAZwBlAGEAdwBhAGkAdABoAHIAdwBoAGkAbABlAGkAZgBjAGEAdABjAGYAaQBuAGEAbABsAGUAbABzAABB0AkLEAEAAAACAAAAAAQAAEA5AAA=", "undefined" != typeof Buffer ? Buffer.from(A2, "base64") : Uint8Array.from(atob(A2), (A3) => A3.charCodeAt(0));
|
|
61
|
+
var A2;
|
|
62
|
+
};
|
|
63
|
+
var init = WebAssembly.compile(E()).then(WebAssembly.instantiate).then(({ exports: A2 }) => {
|
|
64
|
+
C = A2;
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
// src/build.ts
|
|
68
|
+
import * as esbuild from "esbuild";
|
|
69
|
+
import { exec, spawn } from "node:child_process";
|
|
70
|
+
import fs from "node:fs/promises";
|
|
71
|
+
import * as path from "node:path";
|
|
72
|
+
import { promisify } from "node:util";
|
|
73
|
+
var execAsync = promisify(exec);
|
|
74
|
+
function raindropFrameworkPlugin() {
|
|
75
|
+
return {
|
|
76
|
+
name: "raindrop-framework-resolver",
|
|
77
|
+
setup(build3) {
|
|
78
|
+
build3.onResolve({ filter: /^@liquidmetal-ai\/raindrop-framework$/ }, (_args) => {
|
|
79
|
+
return {
|
|
80
|
+
path: "./runtime.js",
|
|
81
|
+
external: true
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
build3.onResolve({ filter: /^@liquidmetal-ai\/raindrop-framework\/.+/ }, (_args) => {
|
|
85
|
+
return void 0;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
async function analyzeExports(indexPath) {
|
|
91
|
+
try {
|
|
92
|
+
await init;
|
|
93
|
+
const content = await fs.readFile(indexPath, "utf-8");
|
|
94
|
+
const [, exports] = parse(content);
|
|
95
|
+
const exportNames = /* @__PURE__ */ new Set();
|
|
96
|
+
for (const exp of exports) {
|
|
97
|
+
if (exp.n) {
|
|
98
|
+
exportNames.add(exp.n);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return exportNames;
|
|
102
|
+
} catch (_error) {
|
|
103
|
+
return /* @__PURE__ */ new Set();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async function generateEntryPoint(handlerDir, isProtected) {
|
|
107
|
+
const indexPath = path.join(handlerDir, "index.ts");
|
|
108
|
+
const userExports = await analyzeExports(indexPath);
|
|
109
|
+
let content = "";
|
|
110
|
+
if (isProtected) {
|
|
111
|
+
const authExports = ["verify", "authorize"];
|
|
112
|
+
const missingAuthExports = authExports.filter((exp) => !userExports.has(exp));
|
|
113
|
+
if (missingAuthExports.length > 0) {
|
|
114
|
+
content += `export { ${missingAuthExports.join(", ")} } from '../_app/auth.js';
|
|
115
|
+
`;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (!userExports.has("cors")) {
|
|
119
|
+
content += `export { cors } from '../_app/cors.js';
|
|
120
|
+
`;
|
|
121
|
+
}
|
|
122
|
+
content += `export * from './index.js';
|
|
123
|
+
`;
|
|
124
|
+
content += `import * as userDefault from './index.js';
|
|
125
|
+
`;
|
|
126
|
+
content += `export default userDefault.default;
|
|
127
|
+
`;
|
|
128
|
+
return content;
|
|
129
|
+
}
|
|
130
|
+
async function typeCheck(cwd) {
|
|
131
|
+
return new Promise((resolve) => {
|
|
132
|
+
const tsc = spawn("npx", ["tsc", "--noEmit"], {
|
|
133
|
+
cwd,
|
|
134
|
+
stdio: "inherit"
|
|
135
|
+
// Inherit stdio to show compiler output in real-time
|
|
136
|
+
});
|
|
137
|
+
tsc.on("exit", (code) => {
|
|
138
|
+
resolve(code === 0);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
async function build2(options) {
|
|
143
|
+
const typeCheckPassed = await typeCheck(options.root);
|
|
144
|
+
if (!typeCheckPassed) {
|
|
145
|
+
throw new Error(
|
|
146
|
+
`TypeScript type checking failed.Run 'raindrop build validate' and fix all errors before building.`
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
const gitCommitSha = await currentGitCommitSha();
|
|
150
|
+
const entryPointContent = await generateEntryPoint(options.handlerDir, options.isProtected);
|
|
151
|
+
const buildResult = await esbuild.build({
|
|
152
|
+
external: ["node:crypto", "crypto", "./runtime.js"],
|
|
153
|
+
plugins: [raindropFrameworkPlugin()],
|
|
154
|
+
banner: {
|
|
155
|
+
js: `globalThis.__RAINDROP_GIT_COMMIT_SHA = "${gitCommitSha}"; `
|
|
156
|
+
},
|
|
157
|
+
bundle: true,
|
|
158
|
+
outfile: `${options.outdir}/index.js`,
|
|
159
|
+
tsconfig: `${options.root}/tsconfig.json`,
|
|
160
|
+
// TODO [bosgood] Add support for middleware/code injection from wrangler
|
|
161
|
+
inject: [],
|
|
162
|
+
format: "esm",
|
|
163
|
+
// Only ES6 module format will be supported
|
|
164
|
+
// Until we switch to fflate for compression, we need to disable
|
|
165
|
+
// sourcemaps (JSZip uses ~10x memory).
|
|
166
|
+
sourcemap: false,
|
|
167
|
+
stdin: {
|
|
168
|
+
contents: entryPointContent,
|
|
169
|
+
loader: "ts",
|
|
170
|
+
resolveDir: options.handlerDir
|
|
171
|
+
},
|
|
172
|
+
// Experiment: let's see how far we can get without minification because:
|
|
173
|
+
// 1) It should be slightly faster to build
|
|
174
|
+
// 2) It should be easier to debug
|
|
175
|
+
minify: false,
|
|
176
|
+
metafile: true,
|
|
177
|
+
// From wrangler:
|
|
178
|
+
target: "es2022",
|
|
179
|
+
loader: { ".js": "jsx", ".mjs": "jsx", ".cjs": "jsx" },
|
|
180
|
+
// Wrangler uses the browser platform for all builds by default,
|
|
181
|
+
// even when node_compat is enabled.
|
|
182
|
+
platform: "browser",
|
|
183
|
+
// TODO [bosgood] Inlined from wrangler
|
|
184
|
+
// build conditions used by esbuild, and when resolving custom `import` calls
|
|
185
|
+
conditions: ["workerd", "worker", "browser"],
|
|
186
|
+
define: {
|
|
187
|
+
"navigator.userAgent": `"Cloudflare-Workers"`
|
|
188
|
+
// TODO [bosgood] wrangler also optionally defines overrides for process.env.NODE_ENV
|
|
189
|
+
},
|
|
190
|
+
// The default logLevel is "warning". So that we can rewrite errors before
|
|
191
|
+
// logging, we disable esbuild's default logging, and log build failures
|
|
192
|
+
// ourselves.
|
|
193
|
+
logLevel: "silent"
|
|
194
|
+
});
|
|
195
|
+
return buildResult;
|
|
196
|
+
}
|
|
197
|
+
async function buildHandlers(cmd, apps, buildDir, root) {
|
|
198
|
+
await fs.rm(buildDir, { force: true, recursive: true });
|
|
199
|
+
cmd.log(`Building to ${buildDir}`);
|
|
200
|
+
const buildTasks = [];
|
|
201
|
+
for (const app of apps) {
|
|
202
|
+
for (const handler of app.handlers()) {
|
|
203
|
+
const handlerName = valueOf(handler.name);
|
|
204
|
+
let isProtected = false;
|
|
205
|
+
if (handler instanceof Service || handler instanceof Actor) {
|
|
206
|
+
isProtected = handler.visibility !== void 0 && valueOf(handler.visibility) === "protected";
|
|
207
|
+
}
|
|
208
|
+
buildTasks.push({
|
|
209
|
+
handlerName,
|
|
210
|
+
isProtected,
|
|
211
|
+
handlerDir: `${root}/${HANDLERS_DIR}/${handlerName}`,
|
|
212
|
+
outdir: path.join(buildDir, handlerName)
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
const results = await Promise.allSettled(
|
|
217
|
+
buildTasks.map(async (task) => {
|
|
218
|
+
const buildResult = await build2({
|
|
219
|
+
root,
|
|
220
|
+
handlerDir: task.handlerDir,
|
|
221
|
+
outdir: task.outdir,
|
|
222
|
+
isProtected: task.isProtected
|
|
223
|
+
});
|
|
224
|
+
return { task, buildResult };
|
|
225
|
+
})
|
|
226
|
+
);
|
|
227
|
+
const successful = [];
|
|
228
|
+
const failed = [];
|
|
229
|
+
for (const result of results) {
|
|
230
|
+
if (result.status === "fulfilled") {
|
|
231
|
+
const { task, buildResult } = result.value;
|
|
232
|
+
if (buildResult.errors.length === 0) {
|
|
233
|
+
successful.push({ task, buildResult });
|
|
234
|
+
} else {
|
|
235
|
+
failed.push({ task, error: buildResult });
|
|
236
|
+
}
|
|
237
|
+
} else {
|
|
238
|
+
const index = results.indexOf(result);
|
|
239
|
+
const task = buildTasks[index];
|
|
240
|
+
failed.push({ task, error: result.reason });
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
cmd.log(`
|
|
244
|
+
Build Summary: ${successful.length}/${buildTasks.length} handlers built successfully`);
|
|
245
|
+
if (successful.length > 0) {
|
|
246
|
+
cmd.log("\nSuccessful builds:");
|
|
247
|
+
for (const { task } of successful) {
|
|
248
|
+
cmd.log(` \u2713 ${task.handlerName}`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
const buildsWithWarnings = [];
|
|
252
|
+
for (const { task, buildResult } of successful) {
|
|
253
|
+
if (buildResult.warnings.length > 0) {
|
|
254
|
+
buildsWithWarnings.push({ handler: task.handlerName, warnings: buildResult.warnings });
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
if (buildsWithWarnings.length > 0) {
|
|
258
|
+
cmd.log("\nWarnings:");
|
|
259
|
+
for (const { handler, warnings } of buildsWithWarnings) {
|
|
260
|
+
cmd.log(` ${handler}:`);
|
|
261
|
+
for (const warning of warnings) {
|
|
262
|
+
cmd.log(` ${warning.text}`);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
if (failed.length > 0) {
|
|
267
|
+
cmd.log("\nFailed builds:");
|
|
268
|
+
for (const { task, error } of failed) {
|
|
269
|
+
cmd.log(` \u2717 ${task.handlerName}:`);
|
|
270
|
+
if (error instanceof Error) {
|
|
271
|
+
cmd.log(` ${error.message}`);
|
|
272
|
+
} else {
|
|
273
|
+
for (const err of error.errors) {
|
|
274
|
+
cmd.log(` ${err.text}`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
cmd.error(`Build failed for ${failed.length} handler(s)`, { exit: 1 });
|
|
279
|
+
}
|
|
280
|
+
cmd.log("\nBuild completed successfully");
|
|
281
|
+
}
|
|
282
|
+
async function currentGitCommitSha() {
|
|
283
|
+
try {
|
|
284
|
+
return (await execAsync("git rev-parse HEAD", { encoding: "utf8" })).stdout.trim();
|
|
285
|
+
} catch (_) {
|
|
286
|
+
return "unknown";
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export {
|
|
291
|
+
buildHandlers
|
|
292
|
+
};
|