@supacloud/lite 0.7.1 → 0.7.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/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.7.3](https://github.com/zuohuadong/supacloud/compare/supacloud-lite-v0.7.2...supacloud-lite-v0.7.3) (2026-08-14)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **lite:** load fetch-object edge functions ([#897](https://github.com/zuohuadong/supacloud/issues/897)) ([149e430](https://github.com/zuohuadong/supacloud/commit/149e4300ab17c0627e2f89990aabed9b7605b7cf))
9
+ * **lite:** skip request log for auth health probe ([#898](https://github.com/zuohuadong/supacloud/issues/898)) ([618d31c](https://github.com/zuohuadong/supacloud/commit/618d31c652ed1ec7b1ec6a9462e468ce1b7aa7b3))
10
+
11
+ ## [0.7.2](https://github.com/zuohuadong/supacloud/compare/supacloud-lite-v0.7.1...supacloud-lite-v0.7.2) (2026-08-14)
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * **lite:** expose auth health probe ([#895](https://github.com/zuohuadong/supacloud/issues/895)) ([2a2930d](https://github.com/zuohuadong/supacloud/commit/2a2930d75acdcd44216bb60e89701b092e4fd352))
17
+
3
18
  ## [0.7.1](https://github.com/zuohuadong/supacloud/compare/supacloud-lite-v0.7.0...supacloud-lite-v0.7.1) (2026-08-11)
4
19
 
5
20
 
package/dist/cli.js CHANGED
@@ -3,12 +3,12 @@
3
3
  var __require = import.meta.require;
4
4
 
5
5
  // src/cli.ts
6
- import { mkdir as mkdir7, rm as rm4, writeFile as writeFile6 } from "fs/promises";
7
- import { dirname as dirname5, join as join9, resolve as resolve4 } from "path";
6
+ import { mkdir as mkdir7, rm as rm5, writeFile as writeFile6 } from "fs/promises";
7
+ import { dirname as dirname6, join as join9, resolve as resolve4 } from "path";
8
8
  // package.json
9
9
  var package_default = {
10
10
  name: "@supacloud/lite",
11
- version: "0.7.1",
11
+ version: "0.7.3",
12
12
  description: "Bun-native, single-project Supabase-compatible backend powered by PGlite",
13
13
  type: "module",
14
14
  license: "Apache-2.0",
@@ -8737,7 +8737,7 @@ ${msg.text}` : `[mail] to=${msg.to} subject="${msg.subject}"`));
8737
8737
  headers: { "content-type": "application/json" }
8738
8738
  }));
8739
8739
  }
8740
- if ((path === "/auth/v1/verify" || path === "/auth/v1/authorize" || path === "/auth/v1/callback") && (req.method === "GET" || req.method === "POST")) {
8740
+ if (path === "/auth/v1/health" && req.method === "GET" || (path === "/auth/v1/verify" || path === "/auth/v1/authorize" || path === "/auth/v1/callback") && (req.method === "GET" || req.method === "POST")) {
8741
8741
  return withCors(await auth.handle(req, { role: "anon", claims: null }, url));
8742
8742
  }
8743
8743
  if (path.startsWith("/auth/v1/")) {
@@ -8794,7 +8794,7 @@ ${msg.text}` : `[mail] to=${msg.to} subject="${msg.subject}"`));
8794
8794
  const res = await safeHandle(req);
8795
8795
  try {
8796
8796
  const p = new URL(req.url).pathname;
8797
- if (p !== "/health" && p !== "/") {
8797
+ if (p !== "/health" && p !== "/" && p !== "/auth/v1/health") {
8798
8798
  const level = res.status >= 500 ? "error" : res.status >= 400 ? "warn" : "info";
8799
8799
  logs.push(`${req.method} ${p} \u2192 ${res.status}`, level);
8800
8800
  }
@@ -8992,7 +8992,7 @@ function isNotFound(error) {
8992
8992
 
8993
8993
  // src/project-runtime.ts
8994
8994
  import { chmod, link, lstat, mkdir as mkdir5, readFile as readFile6, realpath as realpath2, unlink as unlink3, writeFile as writeFile4 } from "fs/promises";
8995
- import { dirname as dirname3, isAbsolute, join as join7, parse, relative, resolve as resolve2 } from "path";
8995
+ import { dirname as dirname4, isAbsolute, join as join7, parse, relative, resolve as resolve2 } from "path";
8996
8996
 
8997
8997
  // src/runtime/node/bun-server.ts
8998
8998
  async function serveBun(backend, opts = {}) {
@@ -9461,13 +9461,13 @@ function readFunctions(root) {
9461
9461
  }
9462
9462
 
9463
9463
  // src/runtime/node/load-functions.ts
9464
- import { readdir as readdir2, readFile as readFile5, realpath, rm as rm2, stat } from "fs/promises";
9465
- import { join as join6 } from "path";
9464
+ import { readdir as readdir2, readFile as readFile5, realpath, rm as rm3, stat } from "fs/promises";
9465
+ import { dirname as dirname3, join as join6 } from "path";
9466
9466
  import { pathToFileURL } from "url";
9467
9467
 
9468
9468
  // src/runtime/node/bundle-function.ts
9469
9469
  import { createHash } from "crypto";
9470
- import { mkdir as mkdir4, readFile as readFile4, writeFile as writeFile3 } from "fs/promises";
9470
+ import { mkdir as mkdir4, readFile as readFile4, rm as rm2, writeFile as writeFile3 } from "fs/promises";
9471
9471
  import { existsSync } from "fs";
9472
9472
  import { tmpdir } from "os";
9473
9473
  import { join as join5 } from "path";
@@ -9512,21 +9512,30 @@ function remotePlugin() {
9512
9512
  };
9513
9513
  }
9514
9514
  async function bundleFunction(entryPath, name) {
9515
- const outDir = join5(tmpdir(), "supacloud-lite-fn-bundle");
9515
+ const outDir = join5(tmpdir(), "supacloud-lite-fn-bundle", name);
9516
9516
  await mkdir4(outDir, { recursive: true });
9517
- const result = await Bun.build({
9518
- entrypoints: [entryPath],
9519
- format: "esm",
9520
- target: "bun",
9521
- outdir: outDir,
9522
- naming: `${name}-[hash].[ext]`,
9523
- plugins: [remotePlugin()]
9524
- });
9525
- if (!result.success || result.outputs.length === 0) {
9526
- throw new Error(result.logs.map((item) => item.message).join(`
9517
+ try {
9518
+ const buildOutput = await Bun.build({
9519
+ entrypoints: [entryPath],
9520
+ format: "esm",
9521
+ target: "bun",
9522
+ outdir: outDir,
9523
+ naming: `${name}-[hash].[ext]`,
9524
+ plugins: [remotePlugin()]
9525
+ });
9526
+ if (!buildOutput.success || buildOutput.outputs.length === 0) {
9527
+ throw new Error(buildOutput.logs.map((item) => item.message).join(`
9527
9528
  `) || `failed to bundle ${entryPath}`);
9529
+ }
9530
+ return buildOutput.outputs[0].path;
9531
+ } catch (buildError) {
9532
+ try {
9533
+ await rm2(outDir, { recursive: true, force: true });
9534
+ } catch (cleanupError) {
9535
+ throw new AggregateError([buildError, cleanupError], `failed to clean function bundle directory ${outDir}`);
9536
+ }
9537
+ throw buildError;
9528
9538
  }
9529
- return result.outputs[0].path;
9530
9539
  }
9531
9540
 
9532
9541
  // src/runtime/node/load-functions.ts
@@ -9609,11 +9618,12 @@ async function loadFunctionsUnlocked(projectDir, options) {
9609
9618
  resetCapturedHandler();
9610
9619
  const mod = await import(importUrl);
9611
9620
  const denoHandler = takeCapturedHandler();
9612
- const handler = typeof mod.default === "function" ? mod.default : denoHandler ? (req) => denoHandler(req) : undefined;
9621
+ const defaultExport = mod.default;
9622
+ const handler = typeof defaultExport === "function" ? defaultExport : defaultExport && typeof defaultExport.fetch === "function" ? defaultExport.fetch.bind(defaultExport) : denoHandler ? (req) => denoHandler(req) : undefined;
9613
9623
  if (handler) {
9614
9624
  functions.set(name, handler);
9615
9625
  } else {
9616
- console.warn(` warning: function "${name}" has no default export or Deno.serve() handler, skipped`);
9626
+ console.warn(` warning: function "${name}" has no default function, fetch object, or Deno.serve() handler, skipped`);
9617
9627
  }
9618
9628
  } catch (e) {
9619
9629
  const msg = e instanceof Error ? e.message : String(e);
@@ -9624,7 +9634,7 @@ async function loadFunctionsUnlocked(projectDir, options) {
9624
9634
  }
9625
9635
  } finally {
9626
9636
  if (bundledPath)
9627
- await rm2(bundledPath, { force: true }).catch(() => {});
9637
+ await rm3(dirname3(bundledPath), { recursive: true, force: true }).catch(() => {});
9628
9638
  }
9629
9639
  break;
9630
9640
  }
@@ -9793,7 +9803,7 @@ async function assertResetTargetCanonical(stateDir, canonicalStateDir, target, l
9793
9803
  if (error.code !== "ENOENT")
9794
9804
  throw error;
9795
9805
  }
9796
- const parent = dirname3(current);
9806
+ const parent = dirname4(current);
9797
9807
  if (parent === current)
9798
9808
  throw new Error(`refusing to reset ${label} path outside the state directory: ${target}`);
9799
9809
  current = parent;
@@ -9815,7 +9825,7 @@ async function nearestExistingAncestor(target) {
9815
9825
  if (error.code !== "ENOENT")
9816
9826
  throw error;
9817
9827
  }
9818
- const parent = dirname3(current);
9828
+ const parent = dirname4(current);
9819
9829
  if (parent === current)
9820
9830
  throw new Error(`unable to resolve an existing ancestor for ${target}`);
9821
9831
  current = parent;
@@ -10036,8 +10046,8 @@ async function findEphemeralPort(host = "127.0.0.1") {
10036
10046
  }
10037
10047
 
10038
10048
  // src/snapshot.ts
10039
- import { chmod as chmod2, copyFile, lstat as lstat2, mkdir as mkdir6, mkdtemp, readdir as readdir3, readFile as readFile7, rename as rename2, rm as rm3, writeFile as writeFile5 } from "fs/promises";
10040
- import { dirname as dirname4, join as join8, parse as parse2, relative as relative2, resolve as resolve3, sep as sep2 } from "path";
10049
+ import { chmod as chmod2, copyFile, lstat as lstat2, mkdir as mkdir6, mkdtemp, readdir as readdir3, readFile as readFile7, rename as rename2, rm as rm4, writeFile as writeFile5 } from "fs/promises";
10050
+ import { dirname as dirname5, join as join8, parse as parse2, relative as relative2, resolve as resolve3, sep as sep2 } from "path";
10041
10051
  import { create as createTar, extract as extractTar } from "tar";
10042
10052
  var SNAPSHOT_FORMAT = "supacloud-lite-snapshot";
10043
10053
  var SNAPSHOT_VERSION = 1;
@@ -10058,8 +10068,8 @@ async function createSnapshot(options) {
10058
10068
  const output = resolve3(options.output);
10059
10069
  if (await existingInfo(output))
10060
10070
  throw new Error(`snapshot output already exists: ${output}`);
10061
- await mkdir6(dirname4(output), { recursive: true });
10062
- const stagingRoot = await mkdtemp(join8(dirname4(output), ".supacloud-lite-snapshot-"));
10071
+ await mkdir6(dirname5(output), { recursive: true });
10072
+ const stagingRoot = await mkdtemp(join8(dirname5(output), ".supacloud-lite-snapshot-"));
10063
10073
  try {
10064
10074
  await writeFile5(join8(stagingRoot, "manifest.json"), `${JSON.stringify(manifest, null, 2)}
10065
10075
  `);
@@ -10078,17 +10088,17 @@ async function createSnapshot(options) {
10078
10088
  await chmod2(output, 384);
10079
10089
  return manifest;
10080
10090
  } catch (error) {
10081
- await rm3(output, { force: true });
10091
+ await rm4(output, { force: true });
10082
10092
  throw error;
10083
10093
  } finally {
10084
- await rm3(stagingRoot, { recursive: true, force: true });
10094
+ await rm4(stagingRoot, { recursive: true, force: true });
10085
10095
  }
10086
10096
  }
10087
10097
  async function restoreSnapshot(options) {
10088
10098
  const paths = normalizePaths(options.paths);
10089
10099
  await assertSnapshotPaths(paths, { requireSecrets: false, allowMissingState: true });
10090
10100
  await assertNoDataDirectoryLock(paths);
10091
- const stagingRoot = await mkdtemp(join8(dirname4(paths.stateDir), ".supacloud-lite-restore-"));
10101
+ const stagingRoot = await mkdtemp(join8(dirname5(paths.stateDir), ".supacloud-lite-restore-"));
10092
10102
  const payloadRoot = join8(stagingRoot, "payload");
10093
10103
  const rollbackId = crypto.randomUUID();
10094
10104
  const rollbackPaths = [];
@@ -10166,7 +10176,7 @@ async function restoreSnapshot(options) {
10166
10176
  } catch (error) {
10167
10177
  throw error instanceof Error ? error : new Error(String(error));
10168
10178
  } finally {
10169
- await rm3(stagingRoot, { recursive: true, force: true });
10179
+ await rm4(stagingRoot, { recursive: true, force: true });
10170
10180
  }
10171
10181
  }
10172
10182
  function normalizePaths(paths) {
@@ -10260,7 +10270,7 @@ async function stageDirectory(root, destination) {
10260
10270
  await walk(root, destination);
10261
10271
  }
10262
10272
  async function stageFile(source, target) {
10263
- await mkdir6(dirname4(target), { recursive: true });
10273
+ await mkdir6(dirname5(target), { recursive: true });
10264
10274
  await copyFile(source, target);
10265
10275
  }
10266
10276
  async function readManifest(payloadRoot) {
@@ -10331,14 +10341,14 @@ async function applyDirectorySwap(source, target, force, rollbackId, swaps) {
10331
10341
  if (!force) {
10332
10342
  if (await directoryHasEntries(target))
10333
10343
  throw new Error(`restore target is not empty: ${target}; pass --force to replace it`);
10334
- await rm3(target, { recursive: true, force: true });
10344
+ await rm4(target, { recursive: true, force: true });
10335
10345
  } else {
10336
- swap.rollbackPath = join8(dirname4(target), `.${target.split(sep2).pop() ?? "state"}.restore-${rollbackId}`);
10346
+ swap.rollbackPath = join8(dirname5(target), `.${target.split(sep2).pop() ?? "state"}.restore-${rollbackId}`);
10337
10347
  await rename2(target, swap.rollbackPath);
10338
10348
  }
10339
10349
  }
10340
10350
  try {
10341
- await mkdir6(dirname4(target), { recursive: true });
10351
+ await mkdir6(dirname5(target), { recursive: true });
10342
10352
  await rename2(source, target);
10343
10353
  swaps.push(swap);
10344
10354
  } catch (error) {
@@ -10349,7 +10359,7 @@ async function applyDirectorySwap(source, target, force, rollbackId, swaps) {
10349
10359
  }
10350
10360
  async function rollbackDirectorySwaps(swaps) {
10351
10361
  for (const swap of [...swaps].reverse()) {
10352
- await rm3(swap.target, { recursive: true, force: true });
10362
+ await rm4(swap.target, { recursive: true, force: true });
10353
10363
  if (swap.rollbackPath)
10354
10364
  await rename2(swap.rollbackPath, swap.target);
10355
10365
  }
@@ -10372,7 +10382,7 @@ async function copyEntry(source, target) {
10372
10382
  for (const entry of await readdir3(source))
10373
10383
  await copyEntry(join8(source, entry), join8(target, entry));
10374
10384
  } else if (info.isFile()) {
10375
- await mkdir6(dirname4(target), { recursive: true });
10385
+ await mkdir6(dirname5(target), { recursive: true });
10376
10386
  await Bun.write(target, Bun.file(source));
10377
10387
  } else
10378
10388
  throw new Error(`snapshot refuses unsupported filesystem entry: ${source}`);
@@ -10538,7 +10548,7 @@ ${privilegedKey}
10538
10548
  try {
10539
10549
  const source = await generateTypes(project2.backend.db, "public");
10540
10550
  if (options.output) {
10541
- await mkdir7(dirname5(options.output), { recursive: true });
10551
+ await mkdir7(dirname6(options.output), { recursive: true });
10542
10552
  await writeFile6(options.output, source);
10543
10553
  await writeStandardOutput(`Wrote ${options.output}
10544
10554
  `);
@@ -10616,8 +10626,8 @@ async function runDbCommand(options) {
10616
10626
  }
10617
10627
  await assertResetPathsSafe(paths);
10618
10628
  if (paths.dataDir)
10619
- await rm4(paths.dataDir, { recursive: true, force: true });
10620
- await rm4(paths.storageDir, { recursive: true, force: true });
10629
+ await rm5(paths.dataDir, { recursive: true, force: true });
10630
+ await rm5(paths.storageDir, { recursive: true, force: true });
10621
10631
  const project2 = await createProjectBackend({
10622
10632
  ...options,
10623
10633
  includeFunctions: false,
package/dist/index.js CHANGED
@@ -85,7 +85,7 @@ function randomToken(bytes = 32) {
85
85
  // package.json
86
86
  var package_default = {
87
87
  name: "@supacloud/lite",
88
- version: "0.7.1",
88
+ version: "0.7.3",
89
89
  description: "Bun-native, single-project Supabase-compatible backend powered by PGlite",
90
90
  type: "module",
91
91
  license: "Apache-2.0",
@@ -8581,7 +8581,7 @@ ${msg.text}` : `[mail] to=${msg.to} subject="${msg.subject}"`));
8581
8581
  headers: { "content-type": "application/json" }
8582
8582
  }));
8583
8583
  }
8584
- if ((path === "/auth/v1/verify" || path === "/auth/v1/authorize" || path === "/auth/v1/callback") && (req.method === "GET" || req.method === "POST")) {
8584
+ if (path === "/auth/v1/health" && req.method === "GET" || (path === "/auth/v1/verify" || path === "/auth/v1/authorize" || path === "/auth/v1/callback") && (req.method === "GET" || req.method === "POST")) {
8585
8585
  return withCors(await auth.handle(req, { role: "anon", claims: null }, url));
8586
8586
  }
8587
8587
  if (path.startsWith("/auth/v1/")) {
@@ -8638,7 +8638,7 @@ ${msg.text}` : `[mail] to=${msg.to} subject="${msg.subject}"`));
8638
8638
  const res = await safeHandle(req);
8639
8639
  try {
8640
8640
  const p = new URL(req.url).pathname;
8641
- if (p !== "/health" && p !== "/") {
8641
+ if (p !== "/health" && p !== "/" && p !== "/auth/v1/health") {
8642
8642
  const level = res.status >= 500 ? "error" : res.status >= 400 ? "warn" : "info";
8643
8643
  logs.push(`${req.method} ${p} \u2192 ${res.status}`, level);
8644
8644
  }
@@ -8872,7 +8872,7 @@ async function serveBun(backend, opts = {}) {
8872
8872
  }
8873
8873
  // src/project-runtime.ts
8874
8874
  import { chmod, link, lstat, mkdir as mkdir4, readFile as readFile6, realpath as realpath2, unlink as unlink3, writeFile as writeFile3 } from "fs/promises";
8875
- import { dirname as dirname3, isAbsolute, join as join6, parse, relative, resolve as resolve2 } from "path";
8875
+ import { dirname as dirname4, isAbsolute, join as join6, parse, relative, resolve as resolve2 } from "path";
8876
8876
 
8877
8877
  // src/runtime/node/config-toml.ts
8878
8878
  import { readFileSync } from "fs";
@@ -9248,13 +9248,13 @@ function readFunctions(root) {
9248
9248
  }
9249
9249
 
9250
9250
  // src/runtime/node/load-functions.ts
9251
- import { readdir, readFile as readFile4, realpath, rm as rm2, stat } from "fs/promises";
9252
- import { join as join4 } from "path";
9251
+ import { readdir, readFile as readFile4, realpath, rm as rm3, stat } from "fs/promises";
9252
+ import { dirname as dirname3, join as join4 } from "path";
9253
9253
  import { pathToFileURL } from "url";
9254
9254
 
9255
9255
  // src/runtime/node/bundle-function.ts
9256
9256
  import { createHash } from "crypto";
9257
- import { mkdir as mkdir3, readFile as readFile3, writeFile as writeFile2 } from "fs/promises";
9257
+ import { mkdir as mkdir3, readFile as readFile3, rm as rm2, writeFile as writeFile2 } from "fs/promises";
9258
9258
  import { existsSync } from "fs";
9259
9259
  import { tmpdir } from "os";
9260
9260
  import { join as join3 } from "path";
@@ -9299,21 +9299,30 @@ function remotePlugin() {
9299
9299
  };
9300
9300
  }
9301
9301
  async function bundleFunction(entryPath, name) {
9302
- const outDir = join3(tmpdir(), "supacloud-lite-fn-bundle");
9302
+ const outDir = join3(tmpdir(), "supacloud-lite-fn-bundle", name);
9303
9303
  await mkdir3(outDir, { recursive: true });
9304
- const result = await Bun.build({
9305
- entrypoints: [entryPath],
9306
- format: "esm",
9307
- target: "bun",
9308
- outdir: outDir,
9309
- naming: `${name}-[hash].[ext]`,
9310
- plugins: [remotePlugin()]
9311
- });
9312
- if (!result.success || result.outputs.length === 0) {
9313
- throw new Error(result.logs.map((item) => item.message).join(`
9304
+ try {
9305
+ const buildOutput = await Bun.build({
9306
+ entrypoints: [entryPath],
9307
+ format: "esm",
9308
+ target: "bun",
9309
+ outdir: outDir,
9310
+ naming: `${name}-[hash].[ext]`,
9311
+ plugins: [remotePlugin()]
9312
+ });
9313
+ if (!buildOutput.success || buildOutput.outputs.length === 0) {
9314
+ throw new Error(buildOutput.logs.map((item) => item.message).join(`
9314
9315
  `) || `failed to bundle ${entryPath}`);
9316
+ }
9317
+ return buildOutput.outputs[0].path;
9318
+ } catch (buildError) {
9319
+ try {
9320
+ await rm2(outDir, { recursive: true, force: true });
9321
+ } catch (cleanupError) {
9322
+ throw new AggregateError([buildError, cleanupError], `failed to clean function bundle directory ${outDir}`);
9323
+ }
9324
+ throw buildError;
9315
9325
  }
9316
- return result.outputs[0].path;
9317
9326
  }
9318
9327
 
9319
9328
  // src/runtime/node/load-functions.ts
@@ -9396,11 +9405,12 @@ async function loadFunctionsUnlocked(projectDir, options) {
9396
9405
  resetCapturedHandler();
9397
9406
  const mod = await import(importUrl);
9398
9407
  const denoHandler = takeCapturedHandler();
9399
- const handler = typeof mod.default === "function" ? mod.default : denoHandler ? (req) => denoHandler(req) : undefined;
9408
+ const defaultExport = mod.default;
9409
+ const handler = typeof defaultExport === "function" ? defaultExport : defaultExport && typeof defaultExport.fetch === "function" ? defaultExport.fetch.bind(defaultExport) : denoHandler ? (req) => denoHandler(req) : undefined;
9400
9410
  if (handler) {
9401
9411
  functions.set(name, handler);
9402
9412
  } else {
9403
- console.warn(` warning: function "${name}" has no default export or Deno.serve() handler, skipped`);
9413
+ console.warn(` warning: function "${name}" has no default function, fetch object, or Deno.serve() handler, skipped`);
9404
9414
  }
9405
9415
  } catch (e) {
9406
9416
  const msg = e instanceof Error ? e.message : String(e);
@@ -9411,7 +9421,7 @@ async function loadFunctionsUnlocked(projectDir, options) {
9411
9421
  }
9412
9422
  } finally {
9413
9423
  if (bundledPath)
9414
- await rm2(bundledPath, { force: true }).catch(() => {});
9424
+ await rm3(dirname3(bundledPath), { recursive: true, force: true }).catch(() => {});
9415
9425
  }
9416
9426
  break;
9417
9427
  }
@@ -9692,8 +9702,8 @@ async function findEphemeralPort(host = "127.0.0.1") {
9692
9702
  return port;
9693
9703
  }
9694
9704
  // src/snapshot.ts
9695
- import { chmod as chmod2, copyFile, lstat as lstat2, mkdir as mkdir5, mkdtemp, readdir as readdir3, readFile as readFile7, rename as rename2, rm as rm3, writeFile as writeFile4 } from "fs/promises";
9696
- import { dirname as dirname4, join as join7, parse as parse2, relative as relative2, resolve as resolve3, sep as sep2 } from "path";
9705
+ import { chmod as chmod2, copyFile, lstat as lstat2, mkdir as mkdir5, mkdtemp, readdir as readdir3, readFile as readFile7, rename as rename2, rm as rm4, writeFile as writeFile4 } from "fs/promises";
9706
+ import { dirname as dirname5, join as join7, parse as parse2, relative as relative2, resolve as resolve3, sep as sep2 } from "path";
9697
9707
  import { create as createTar, extract as extractTar } from "tar";
9698
9708
  var SNAPSHOT_FORMAT = "supacloud-lite-snapshot";
9699
9709
  var SNAPSHOT_VERSION = 1;
@@ -9714,8 +9724,8 @@ async function createSnapshot(options) {
9714
9724
  const output = resolve3(options.output);
9715
9725
  if (await existingInfo(output))
9716
9726
  throw new Error(`snapshot output already exists: ${output}`);
9717
- await mkdir5(dirname4(output), { recursive: true });
9718
- const stagingRoot = await mkdtemp(join7(dirname4(output), ".supacloud-lite-snapshot-"));
9727
+ await mkdir5(dirname5(output), { recursive: true });
9728
+ const stagingRoot = await mkdtemp(join7(dirname5(output), ".supacloud-lite-snapshot-"));
9719
9729
  try {
9720
9730
  await writeFile4(join7(stagingRoot, "manifest.json"), `${JSON.stringify(manifest, null, 2)}
9721
9731
  `);
@@ -9734,17 +9744,17 @@ async function createSnapshot(options) {
9734
9744
  await chmod2(output, 384);
9735
9745
  return manifest;
9736
9746
  } catch (error) {
9737
- await rm3(output, { force: true });
9747
+ await rm4(output, { force: true });
9738
9748
  throw error;
9739
9749
  } finally {
9740
- await rm3(stagingRoot, { recursive: true, force: true });
9750
+ await rm4(stagingRoot, { recursive: true, force: true });
9741
9751
  }
9742
9752
  }
9743
9753
  async function restoreSnapshot(options) {
9744
9754
  const paths = normalizePaths(options.paths);
9745
9755
  await assertSnapshotPaths(paths, { requireSecrets: false, allowMissingState: true });
9746
9756
  await assertNoDataDirectoryLock(paths);
9747
- const stagingRoot = await mkdtemp(join7(dirname4(paths.stateDir), ".supacloud-lite-restore-"));
9757
+ const stagingRoot = await mkdtemp(join7(dirname5(paths.stateDir), ".supacloud-lite-restore-"));
9748
9758
  const payloadRoot = join7(stagingRoot, "payload");
9749
9759
  const rollbackId = crypto.randomUUID();
9750
9760
  const rollbackPaths = [];
@@ -9822,7 +9832,7 @@ async function restoreSnapshot(options) {
9822
9832
  } catch (error) {
9823
9833
  throw error instanceof Error ? error : new Error(String(error));
9824
9834
  } finally {
9825
- await rm3(stagingRoot, { recursive: true, force: true });
9835
+ await rm4(stagingRoot, { recursive: true, force: true });
9826
9836
  }
9827
9837
  }
9828
9838
  function normalizePaths(paths) {
@@ -9916,7 +9926,7 @@ async function stageDirectory(root, destination) {
9916
9926
  await walk(root, destination);
9917
9927
  }
9918
9928
  async function stageFile(source, target) {
9919
- await mkdir5(dirname4(target), { recursive: true });
9929
+ await mkdir5(dirname5(target), { recursive: true });
9920
9930
  await copyFile(source, target);
9921
9931
  }
9922
9932
  async function readManifest(payloadRoot) {
@@ -9987,14 +9997,14 @@ async function applyDirectorySwap(source, target, force, rollbackId, swaps) {
9987
9997
  if (!force) {
9988
9998
  if (await directoryHasEntries(target))
9989
9999
  throw new Error(`restore target is not empty: ${target}; pass --force to replace it`);
9990
- await rm3(target, { recursive: true, force: true });
10000
+ await rm4(target, { recursive: true, force: true });
9991
10001
  } else {
9992
- swap.rollbackPath = join7(dirname4(target), `.${target.split(sep2).pop() ?? "state"}.restore-${rollbackId}`);
10002
+ swap.rollbackPath = join7(dirname5(target), `.${target.split(sep2).pop() ?? "state"}.restore-${rollbackId}`);
9993
10003
  await rename2(target, swap.rollbackPath);
9994
10004
  }
9995
10005
  }
9996
10006
  try {
9997
- await mkdir5(dirname4(target), { recursive: true });
10007
+ await mkdir5(dirname5(target), { recursive: true });
9998
10008
  await rename2(source, target);
9999
10009
  swaps.push(swap);
10000
10010
  } catch (error) {
@@ -10005,7 +10015,7 @@ async function applyDirectorySwap(source, target, force, rollbackId, swaps) {
10005
10015
  }
10006
10016
  async function rollbackDirectorySwaps(swaps) {
10007
10017
  for (const swap of [...swaps].reverse()) {
10008
- await rm3(swap.target, { recursive: true, force: true });
10018
+ await rm4(swap.target, { recursive: true, force: true });
10009
10019
  if (swap.rollbackPath)
10010
10020
  await rename2(swap.rollbackPath, swap.target);
10011
10021
  }
@@ -10028,7 +10038,7 @@ async function copyEntry(source, target) {
10028
10038
  for (const entry of await readdir3(source))
10029
10039
  await copyEntry(join7(source, entry), join7(target, entry));
10030
10040
  } else if (info.isFile()) {
10031
- await mkdir5(dirname4(target), { recursive: true });
10041
+ await mkdir5(dirname5(target), { recursive: true });
10032
10042
  await Bun.write(target, Bun.file(source));
10033
10043
  } else
10034
10044
  throw new Error(`snapshot refuses unsupported filesystem entry: ${source}`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bundle-function.d.ts","sourceRoot":"","sources":["../../../src/runtime/node/bundle-function.ts"],"names":[],"mappings":"AAgBA,yEAAyE;AACzE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI3D;AAsCD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAerF"}
1
+ {"version":3,"file":"bundle-function.d.ts","sourceRoot":"","sources":["../../../src/runtime/node/bundle-function.ts"],"names":[],"mappings":"AAgBA,yEAAyE;AACzE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI3D;AAsCD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBrF"}
@@ -17,8 +17,9 @@ export interface LoadFunctionOptions {
17
17
  * directory name. Dirs starting with `_` or `.` are skipped (shared code), as
18
18
  * are functions disabled in config.toml. Each function is bundled with esbuild
19
19
  * when available (falling back to a plain import), then its handler is taken
20
- * from a default export or a captured `Deno.serve()` call. Load failures warn
21
- * and skip rather than throwing, so one broken function can't block startup.
20
+ * from a default function export, a default `{ fetch() }` export, or a captured
21
+ * `Deno.serve()` call. Load failures warn and skip rather than throwing, so one
22
+ * broken function can't block startup.
22
23
  */
23
24
  export declare function loadFunctions(projectDir: string, options?: Record<string, LoadFunctionOptions>): Promise<Map<string, EdgeFunction>>;
24
25
  //# sourceMappingURL=load-functions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"load-functions.d.ts","sourceRoot":"","sources":["../../../src/runtime/node/load-functions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAI3D;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAqBzF;AAED,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAID;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAM,GAChD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAYpC"}
1
+ {"version":3,"file":"load-functions.d.ts","sourceRoot":"","sources":["../../../src/runtime/node/load-functions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAI3D;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAqBzF;AAED,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAID;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAM,GAChD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAYpC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@supacloud/lite",
3
- "version": "0.7.1",
3
+ "version": "0.7.3",
4
4
  "description": "Bun-native, single-project Supabase-compatible backend powered by PGlite",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",