@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.
Files changed (159) hide show
  1. package/README.md +111 -85
  2. package/bundle/{chunk-ZHYJWVIA.js → chunk-33VVNTZ7.js} +2 -2
  3. package/bundle/{chunk-SP4Q3T7T.js → chunk-3EXF5SKZ.js} +1 -1
  4. package/bundle/{chunk-JXNZYHAI.js → chunk-3TJC2HRW.js} +89 -105
  5. package/bundle/{chunk-HBDFBL3W.js → chunk-44MKXST7.js} +1 -1
  6. package/bundle/{chunk-GDYEPR67.js → chunk-4RZFURCF.js} +1 -1
  7. package/bundle/{chunk-67CBWZ7Y.js → chunk-4UNXUMLE.js} +3 -3
  8. package/bundle/chunk-4VJ2X7ZI.js +48 -0
  9. package/bundle/{chunk-IMQTVYRB.js → chunk-4WGY3ATR.js} +1 -1
  10. package/bundle/{chunk-ORPX7FPP.js → chunk-5TPOE7P2.js} +1 -5
  11. package/bundle/chunk-7JFKALLH.js +133 -0
  12. package/bundle/chunk-7O6U3ZAR.js +75 -0
  13. package/bundle/chunk-AWUA3C2V.js +114 -0
  14. package/bundle/{chunk-QKHN66ZN.js → chunk-BEN3KZQU.js} +1 -1
  15. package/bundle/{chunk-JDMAG4KE.js → chunk-BPZWIRQS.js} +2 -2
  16. package/bundle/chunk-C7G6I3MQ.js +292 -0
  17. package/bundle/chunk-D23L4WLL.js +502 -0
  18. package/bundle/chunk-E2TCXKAT.js +48 -0
  19. package/bundle/{chunk-FTG32FZ4.js → chunk-E7K6Y6GO.js} +1 -1
  20. package/bundle/chunk-EBK2SJTZ.js +805 -0
  21. package/bundle/chunk-FTH4A227.js +46 -0
  22. package/bundle/chunk-HBWEGYBW.js +4486 -0
  23. package/bundle/chunk-HFEVZZHW.js +46 -0
  24. package/bundle/chunk-I5M6WZPS.js +384 -0
  25. package/bundle/chunk-J44ZDCXF.js +44 -0
  26. package/bundle/{chunk-D5TOYPUE.js → chunk-J6XV5EH5.js} +1 -1
  27. package/bundle/chunk-KE7CMLHP.js +292 -0
  28. package/bundle/{chunk-ZLRYUJ5P.js → chunk-KHYRZQSK.js} +4 -4
  29. package/bundle/chunk-KOYRAC7N.js +74 -0
  30. package/bundle/chunk-KQ3F5KG7.js +231 -0
  31. package/bundle/chunk-KSXGB4ZG.js +4539 -0
  32. package/bundle/{chunk-7ERI6IFL.js → chunk-LP3LXBGR.js} +1 -1
  33. package/bundle/chunk-MH3BACIP.js +238722 -0
  34. package/bundle/chunk-MM7BYDBJ.js +238725 -0
  35. package/bundle/chunk-MQUFNQI5.js +231 -0
  36. package/bundle/{chunk-4RVUC2XX.js → chunk-N3LTFUBJ.js} +1 -1
  37. package/bundle/chunk-NWYJJVCF.js +22452 -0
  38. package/bundle/chunk-OAMLVMOY.js +133 -0
  39. package/bundle/chunk-PBVMMANP.js +4480 -0
  40. package/bundle/chunk-PT6CYFBD.js +74 -0
  41. package/bundle/chunk-QAG6TIB7.js +12148 -0
  42. package/bundle/chunk-RSLQIAJB.js +12148 -0
  43. package/bundle/chunk-SAU2NEDC.js +147 -0
  44. package/bundle/chunk-SZ6TMVT4.js +22452 -0
  45. package/bundle/chunk-T3MAVQWW.js +292 -0
  46. package/bundle/chunk-TCGZNSBY.js +4539 -0
  47. package/bundle/chunk-TRIIBQDR.js +4480 -0
  48. package/bundle/chunk-UUTXTOE3.js +231 -0
  49. package/bundle/chunk-VMKGSIXK.js +75 -0
  50. package/bundle/chunk-XDCRA7Y2.js +805 -0
  51. package/bundle/chunk-XEMONOX2.js +384 -0
  52. package/bundle/chunk-YAPQ2CKV.js +115 -0
  53. package/bundle/chunk-YDDBYUDC.js +502 -0
  54. package/bundle/chunk-ZGLCW5YO.js +380 -0
  55. package/bundle/chunk-ZQ6BFQSX.js +44 -0
  56. package/bundle/chunk-ZZTNAQSE.js +147 -0
  57. package/bundle/commands/annotation/get.js +3 -3
  58. package/bundle/commands/annotation/list.js +3 -3
  59. package/bundle/commands/annotation/put.js +3 -3
  60. package/bundle/commands/auth/list.js +2 -2
  61. package/bundle/commands/auth/login.js +3 -3
  62. package/bundle/commands/auth/logout.js +2 -2
  63. package/bundle/commands/auth/select.js +3 -3
  64. package/bundle/commands/bucket/create-credential.js +2 -2
  65. package/bundle/commands/bucket/delete-credential.js +2 -2
  66. package/bundle/commands/bucket/get-credential.js +2 -2
  67. package/bundle/commands/bucket/list-credentials.js +2 -2
  68. package/bundle/commands/build/branch.js +9 -9
  69. package/bundle/commands/build/checkout.js +6 -5
  70. package/bundle/commands/build/clone.js +5 -5
  71. package/bundle/commands/build/delete.js +6 -5
  72. package/bundle/commands/build/deploy.js +9 -9
  73. package/bundle/commands/build/env/get.js +2 -2
  74. package/bundle/commands/build/env/set.js +2 -2
  75. package/bundle/commands/build/find.js +7 -3
  76. package/bundle/commands/build/generate.js +3 -3
  77. package/bundle/commands/build/init-workspace.js +102 -0
  78. package/bundle/commands/build/init.js +3 -3
  79. package/bundle/commands/build/list.js +5 -4
  80. package/bundle/commands/build/sandbox.js +7 -7
  81. package/bundle/commands/build/start.js +2 -2
  82. package/bundle/commands/build/status.js +8 -4
  83. package/bundle/commands/build/stop.js +2 -2
  84. package/bundle/commands/build/tools/check.js +2 -2
  85. package/bundle/commands/build/tools/fmt.js +2 -2
  86. package/bundle/commands/build/unsandbox.js +7 -7
  87. package/bundle/commands/build/upload.js +5 -5
  88. package/bundle/commands/build/validate.js +4 -4
  89. package/bundle/commands/build/workos/delete.js +4 -4
  90. package/bundle/commands/build/workos/env/attach.js +3 -3
  91. package/bundle/commands/build/workos/env/create.js +3 -3
  92. package/bundle/commands/build/workos/env/delete.js +3 -3
  93. package/bundle/commands/build/workos/env/detach.js +3 -3
  94. package/bundle/commands/build/workos/env/get.js +3 -3
  95. package/bundle/commands/build/workos/env/list.js +3 -3
  96. package/bundle/commands/build/workos/env/set.js +3 -3
  97. package/bundle/commands/build/workos/invite.js +3 -3
  98. package/bundle/commands/build/workos/setup.js +3 -3
  99. package/bundle/commands/build/workos/status.js +3 -3
  100. package/bundle/commands/dns/create.js +2 -2
  101. package/bundle/commands/dns/delete.js +4 -4
  102. package/bundle/commands/dns/get.js +4 -4
  103. package/bundle/commands/dns/list.js +3 -3
  104. package/bundle/commands/dns/records/create.js +2 -2
  105. package/bundle/commands/dns/records/delete.js +3 -3
  106. package/bundle/commands/dns/records/get.js +2 -2
  107. package/bundle/commands/dns/records/list.js +2 -2
  108. package/bundle/commands/dns/records/update.js +2 -2
  109. package/bundle/commands/logs/query.js +3 -3
  110. package/bundle/commands/logs/tail.js +3 -3
  111. package/bundle/commands/mcp/install-claude.js +2 -2
  112. package/bundle/commands/mcp/install-gemini.js +2 -2
  113. package/bundle/commands/mcp/install-goose.js +2 -2
  114. package/bundle/commands/mcp/status.js +2 -2
  115. package/bundle/commands/object/delete.js +2 -2
  116. package/bundle/commands/object/get.js +2 -2
  117. package/bundle/commands/object/list.js +2 -2
  118. package/bundle/commands/object/put.js +2 -2
  119. package/bundle/commands/query/chunk-search.js +3 -3
  120. package/bundle/commands/query/document.js +3 -3
  121. package/bundle/commands/query/events.js +2 -2
  122. package/bundle/commands/query/reindex.js +2 -2
  123. package/bundle/commands/query/search.js +3 -3
  124. package/bundle/commands/tail.js +2 -2
  125. package/bundle/index.js +1 -1
  126. package/dist/commands/build/find.d.ts.map +1 -1
  127. package/dist/commands/build/find.js +3 -0
  128. package/dist/commands/build/init-workspace.d.ts +16 -0
  129. package/dist/commands/build/init-workspace.d.ts.map +1 -0
  130. package/dist/commands/build/init-workspace.js +95 -0
  131. package/dist/commands/build/list.d.ts.map +1 -1
  132. package/dist/commands/build/list.js +3 -0
  133. package/dist/commands/build/status.d.ts.map +1 -1
  134. package/dist/commands/build/status.js +3 -0
  135. package/dist/killswitch-utils.d.ts +30 -0
  136. package/dist/killswitch-utils.d.ts.map +1 -0
  137. package/dist/killswitch-utils.js +83 -0
  138. package/oclif.manifest.json +2114 -2007
  139. package/package.json +3 -3
  140. package/templates/claude-code/debug-raindrop-app.md +12 -39
  141. package/templates/claude-code/update-raindrop-app.md +5 -6
  142. package/templates/db/node_modules/.bin/prisma +2 -2
  143. package/templates/db/node_modules/.bin/prisma-kysely +2 -2
  144. package/templates/db/node_modules/.bin/tsc +2 -2
  145. package/templates/db/node_modules/.bin/tsserver +2 -2
  146. package/templates/db/node_modules/.bin/zx +2 -2
  147. package/templates/gemini-code/debug-raindrop-app.toml +12 -39
  148. package/templates/gemini-code/update-raindrop-app.toml +5 -6
  149. package/templates/goose/debug-raindrop-app.yaml +12 -39
  150. package/templates/goose/update-raindrop-app.yaml +5 -6
  151. package/templates/workspace/.gitignore.hbs +40 -0
  152. package/templates/workspace/package.json.hbs +22 -0
  153. package/dist/commands/killswitch.d.ts +0 -20
  154. package/dist/commands/killswitch.d.ts.map +0 -1
  155. package/dist/commands/killswitch.js +0 -58
  156. package/dist/tsconfig.tsbuildinfo +0 -1
  157. package/dist/utils/mixpanel.d.ts +0 -10
  158. package/dist/utils/mixpanel.d.ts.map +0 -1
  159. package/dist/utils/mixpanel.js +0 -43
@@ -0,0 +1,292 @@
1
+ import {
2
+ HANDLERS_DIR
3
+ } from "./chunk-PBVMMANP.js";
4
+ import {
5
+ Actor,
6
+ Service,
7
+ init_cjs_shims,
8
+ valueOf
9
+ } from "./chunk-3TJC2HRW.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
+ };