@supacloud/lite 0.35.2 → 0.36.0

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,22 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.36.0](https://github.com/vibeunion/supacloud/compare/supacloud-lite-v0.35.2...supacloud-lite-v0.36.0) (2026-10-31)
4
+
5
+
6
+ ### ⚠ BREAKING CHANGES
7
+
8
+ * **lite:** new native databases and default physical snapshot restores target PostgreSQL 18. Existing PostgreSQL 17 state requires an explicitly selected PostgreSQL 17 installation until logical migration.
9
+
10
+ ### Features
11
+
12
+ * **lite:** upgrade default native PostgreSQL to 18 ([#2313](https://github.com/vibeunion/supacloud/issues/2313)) ([325ff75](https://github.com/vibeunion/supacloud/commit/325ff75bbc81249bc5fb4c1e8cf249185f1e6065))
13
+ * **web-console:** migrate applications page to svadmin ([#2320](https://github.com/vibeunion/supacloud/issues/2320)) ([b643a27](https://github.com/vibeunion/supacloud/commit/b643a279debe862c3feb71e4da10c7d65bdb8769))
14
+
15
+
16
+ ### Miscellaneous Chores
17
+
18
+ * **workspace:** replace Nx scheduling with Bun ([#2321](https://github.com/vibeunion/supacloud/issues/2321)) ([c2d5b27](https://github.com/vibeunion/supacloud/commit/c2d5b270ca0d0d8e04e4547f270c9750b44a0096))
19
+
3
20
  ## [0.35.2](https://github.com/vibeunion/supacloud/compare/supacloud-lite-v0.35.1...supacloud-lite-v0.35.2) (2026-10-31)
4
21
 
5
22
 
@@ -1,7 +1,7 @@
1
1
  PostgreSQL Database Management System
2
2
  (also known as Postgres, formerly known as Postgres95)
3
3
 
4
- Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
4
+ Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
5
5
 
6
6
  Portions Copyright (c) 1994, The Regents of the University of California
7
7
 
package/README.md CHANGED
@@ -13,7 +13,7 @@ V1 的目标不是复刻完整 Supabase 平台控制面,而是让现有应用
13
13
  ### 状态
14
14
 
15
15
  - 运行时:npm 包需要 Bun 1.4.4+;单二进制发行版已内嵌 Bun 和 PGlite 资源
16
- - 数据库:PGlite 0.5.10,或 native PostgreSQL
16
+ - 数据库:PGlite 0.5.10,或 native PostgreSQL 18(默认下载 Theseus 18.6.1)
17
17
  - 项目模型:单进程、单项目,内部 project ref 固定为 `local`
18
18
  - 客户端:直接使用官方 `@supabase/supabase-js`
19
19
  - 数据目录:`.supacloud-lite/db`
@@ -106,6 +106,7 @@ timeout_ms = 15000 # limits.timeout_ms
106
106
  max_request_body_bytes = 1048576 # limits.max_request_body_bytes
107
107
  max_response_body_bytes = 524288 # limits.max_response_body_bytes
108
108
  wait_until_timeout_ms = 2000 # limits.wait_until_timeout_ms
109
+ max_heap_bytes = 134217728 # limits.max_heap_bytes(校验,不强制隔离)
109
110
  outbound_hosts = ["api.example.com"] # capabilities.outbound_hosts
110
111
  secrets = ["OPENAI_API_KEY"] # capabilities.secrets
111
112
  background = true # capabilities.background
@@ -117,6 +118,7 @@ background = true # capabilities.background
117
118
  | `max_request_body_bytes` | integer | 请求体上限;content-length 超限返回 413,无长度声明的流式 body 超限则中断读取 | `limits.max_request_body_bytes` |
118
119
  | `max_response_body_bytes` | integer | 响应体上限;content-length 超限直接替换为 502,流式 body 超限则在传输中截断(状态行已提交,客户端看到流中断) | `limits.max_response_body_bytes` |
119
120
  | `wait_until_timeout_ms` | integer | 响应返回后等待 `EdgeRuntime.waitUntil` 后台任务的最长时间;超时不再等待(任务继续运行,记录警告) | `limits.wait_until_timeout_ms` |
121
+ | `max_heap_bytes` | integer | 1 字节到 512 MiB。strict 模式拒绝非法值。Lite 没有 Worker 隔离,不会按该值采样堆或回收进程 | `limits.max_heap_bytes` |
120
122
  | `outbound_hosts` | string[] | `fetch` 出站 host 白名单(精确匹配,不含端口);loopback(localhost/127.0.0.1/::1)始终放行,未声明的 host 直接抛错 | `capabilities.outbound_hosts` |
121
123
  | `secrets` | string[] | 函数可见的环境变量白名单:基础三键(`SUPABASE_URL`/`SUPABASE_ANON_KEY`/`SUPABASE_SERVICE_ROLE_KEY`)+ 声明的 key,同时约束 `Deno.env` 与 `ctx.env` | `capabilities.secrets` |
122
124
  | `background` | boolean | 是否允许 `EdgeRuntime.waitUntil`;设为 `false` 时调用抛出与生产一致的错误 | `capabilities.background` |
@@ -162,7 +164,7 @@ sso_domains = ["acme.example"]
162
164
 
163
165
  ### 新版应用兼容
164
166
 
165
- Lite 支持平铺 SQL 与 `时间戳目录/migration.sql`,执行前检查重复版本和已应用 SQL 的内容漂移;目标绑定复用 `@supacloud/db`,`migrate --json` 可输出不含参数值的校验记录。`--runtime-mode strict` 对齐函数默认限制并拒绝无效配置、缺失函数和未声明的后台任务。
167
+ Lite 支持平铺 SQL 与 `时间戳目录/migration.sql`,执行前检查重复版本和已应用 SQL 的内容漂移;目标绑定复用 `@supacloud/db`,`migrate --json` 可输出不含参数值的校验记录。`--runtime-mode strict` 对齐函数默认限制并拒绝无效配置、缺失函数和未声明的后台任务。`max_heap_bytes` 接受与生产 Edge Runtime 相同的 1 字节到 512 MiB 声明;strict 模式拒绝非法值。Lite 在进程内执行函数,不按该预算采样堆或回收进程。
166
168
 
167
169
  `/graphql/v1` 使用真正的 `pg_graphql` 扩展和调用者的数据库角色/RLS,不模拟扩展。默认 PGlite 和标准 native 下载包均不包含该扩展;native 可通过 `--postgres-dir` 选择已经安装匹配扩展的 PostgreSQL。配置 `[lite.graphql] enabled = true` 会在运行时启动前验证扩展,`doctor --json` 区分已支持、缺失与尚未验证。
168
170
 
@@ -437,6 +439,9 @@ supacloud-lite doctor --json
437
439
 
438
440
  ### PostgreSQL 扩展生态
439
441
 
442
+ 默认 native 下载包使用 PostgreSQL 18。已有 PostgreSQL 17 数据目录和物理快照须继续通过 `--postgres-dir` 选择原 17 安装,完成逻辑迁移后才能使用 18;不能直接替换二进制打开旧数据。
443
+ 完整步骤见 [PostgreSQL 17 → 18 迁移方案](../../docs/lite-postgres17-to18-migration.md)。
444
+
440
445
  Lite 默认把一组常用扩展打进 PGlite:`uuid-ossp`、`pgcrypto`、`citext`、
441
446
  `pg_trgm`、`ltree`、`hstore`、`fuzzystrmatch`、`pgvector`、
442
447
  `pg_textsearch`、PostGIS 和官方 `pgmq`。其中 PostGIS 是上游实验性包,
@@ -447,11 +452,11 @@ PostgreSQL 主版本、操作系统、CPU 架构和 ABI 匹配的 PostgreSQL 安
447
452
  ```bash
448
453
  supacloud-lite migrate \
449
454
  --engine native \
450
- --postgres-dir /opt/postgresql/17
455
+ --postgres-dir /opt/postgresql/18
451
456
 
452
457
  supacloud-lite doctor \
453
458
  --engine native \
454
- --postgres-dir /opt/postgresql/17 \
459
+ --postgres-dir /opt/postgresql/18 \
455
460
  --json
456
461
  ```
457
462
 
@@ -607,7 +612,7 @@ The goal of V1 is not to replicate the full Supabase platform control plane, but
607
612
  ### Status
608
613
 
609
614
  - Runtime: the npm package requires Bun 1.4.4+; the single-binary release embeds Bun and PGlite assets
610
- - Database: PGlite 0.5.10, or native PostgreSQL
615
+ - Database: PGlite 0.5.10, or native PostgreSQL 18 (Theseus 18.6.1 by default)
611
616
  - Project model: single process, single project, with an internal project ref fixed as `local`
612
617
  - Client: uses the official `@supabase/supabase-js` directly
613
618
  - Data directory: `.supacloud-lite/db`
@@ -907,6 +912,9 @@ duplicate versions and applied SQL drift before pending migrations, and reuses
907
912
  `@supacloud/db` for reviewed target bindings. `migrate --json` emits a hash-only
908
913
  binding attestation. Strict mode enforces bounded function defaults and rejects
909
914
  invalid declarations, missing functions and undeclared background work.
915
+ `max_heap_bytes` accepts the production range of 1 byte through 512 MiB and
916
+ is rejected when invalid in strict mode. Lite does not sample or retire on
917
+ that budget, because functions run in-process.
910
918
 
911
919
  `/graphql/v1` requires real `pg_graphql` and uses the caller's role/RLS. Neither
912
920
  bundled PGlite nor stock native downloads include the extension. Native can use
@@ -1007,6 +1015,12 @@ It uses Realtime's `messages` envelope: at most 100 messages per request, each `
1007
1015
 
1008
1016
  ### PostgreSQL extension ecosystem
1009
1017
 
1018
+ The default native download uses PostgreSQL 18. Keep selecting the original
1019
+ PostgreSQL 17 installation with `--postgres-dir` for existing major 17 data
1020
+ directories and physical snapshots until a logical migration to 18 is complete.
1021
+ Replacing binaries cannot upgrade an existing data directory.
1022
+ See the [PostgreSQL 17 to 18 migration runbook (中文)](../../docs/lite-postgres17-to18-migration.md).
1023
+
1010
1024
  Lite ships a PostgreSQL-shaped default extension set in PGlite. New databases
1011
1025
  install `uuid-ossp`, `pgcrypto`, `citext`, `pg_trgm`, `ltree`, `hstore`,
1012
1026
  `fuzzystrmatch`, `pgvector`, `pg_textsearch`, PostGIS, and the official PGMQ
@@ -1022,11 +1036,11 @@ match the Lite process:
1022
1036
  ```bash
1023
1037
  supacloud-lite migrate \
1024
1038
  --engine native \
1025
- --postgres-dir /opt/postgresql/17
1039
+ --postgres-dir /opt/postgresql/18
1026
1040
 
1027
1041
  supacloud-lite doctor \
1028
1042
  --engine native \
1029
- --postgres-dir /opt/postgresql/17 \
1043
+ --postgres-dir /opt/postgresql/18 \
1030
1044
  --json
1031
1045
  ```
1032
1046
 
@@ -30,11 +30,11 @@ extension archives are embedded in the standalone binary.
30
30
 
31
31
  ## Native PostgreSQL binaries
32
32
 
33
- Linux/macOS 上的可选 native 引擎会按需下载 Theseus 发布的 PostgreSQL 17.7.0 预编译包;该二进制不会内嵌到 npm 包或 Lite 单文件发布物中。
33
+ Linux/macOS 上的可选 native 引擎会按需下载 Theseus 发布的 PostgreSQL 18.6.1 预编译包(PostgreSQL 18.6 的打包修订,包含传递运行库);该二进制不会内嵌到 npm 包或 Lite 单文件发布物中。
34
34
 
35
35
  - PostgreSQL license: PostgreSQL License
36
36
  - Binary source: `https://github.com/theseus-rs/postgresql-binaries`
37
- - PostgreSQL copyright copy: `LICENSES/POSTGRESQL-17-COPYRIGHT.txt`
37
+ - PostgreSQL copyright copy: `LICENSES/POSTGRESQL-18-COPYRIGHT.txt`
38
38
  - Theseus distribution license copy: `LICENSES/THESEUS-POSTGRESQL-LICENSE.txt`
39
39
  - Integrity: Lite 对默认版本的四个平台归档使用内置 SHA-256 固定校验和
40
40
 
package/dist/cli.js CHANGED
@@ -8,7 +8,7 @@ import { dirname as dirname8, join as join10, resolve as resolve7 } from "path";
8
8
  // package.json
9
9
  var package_default = {
10
10
  name: "@supacloud/lite",
11
- version: "0.35.2",
11
+ version: "0.36.0",
12
12
  description: "Bun-native, single-project Supabase-compatible backend powered by PGlite or native PostgreSQL",
13
13
  type: "module",
14
14
  license: "Apache-2.0",
@@ -68,17 +68,17 @@ var package_default = {
68
68
  "@electric-sql/pglite-pgmq": "0.0.8",
69
69
  "@electric-sql/pglite-pgvector": "0.0.11",
70
70
  "@electric-sql/pglite-postgis": "0.2.10",
71
- "@supacloud/db": "0.20.2",
71
+ "@supacloud/db": "0.20.3",
72
72
  "exact-mirror": "1.2.6",
73
73
  "fast-xml-parser": "5.11.2",
74
74
  tar: "^7.5.22",
75
75
  typebox: "1.4.3"
76
76
  },
77
77
  devDependencies: {
78
- "@supacloud/app": "0.34.1",
78
+ "@supacloud/app": "0.35.0",
79
79
  "@supacloud/contracts": "0.15.2",
80
- "@supacloud/compiler": "0.52.1",
81
- "@supacloud/elysia": "0.36.3",
80
+ "@supacloud/compiler": "0.52.2",
81
+ "@supacloud/elysia": "0.37.0",
82
82
  "@supabase/supabase-js": "^2.118.0",
83
83
  "@types/bun": "^1.4.4",
84
84
  effect: "4.0.5",
@@ -87,10 +87,10 @@ var package_default = {
87
87
  typescript: "^7.0.2"
88
88
  },
89
89
  overrides: {
90
- "@supacloud/db": "0.20.2",
91
- "@supacloud/app": "0.34.1",
92
- "@supacloud/compiler": "0.52.1",
93
- "@supacloud/elysia": "0.36.3",
90
+ "@supacloud/db": "0.20.3",
91
+ "@supacloud/app": "0.35.0",
92
+ "@supacloud/compiler": "0.52.2",
93
+ "@supacloud/elysia": "0.37.0",
94
94
  "@supacloud/contracts": "0.15.2",
95
95
  "@supacloud/commands": "0.11.2",
96
96
  "@supacloud/delivery": "0.23.1",
@@ -5304,6 +5304,7 @@ async function upsertWithoutTtl(query, key, serializedValue) {
5304
5304
  }
5305
5305
 
5306
5306
  // src/runtime/functions/profile.ts
5307
+ var MAX_DECLARED_FUNCTION_HEAP_BYTES = 512 * 1024 * 1024;
5307
5308
  function runtimeMode(value) {
5308
5309
  if (value === undefined)
5309
5310
  return "development";
@@ -5312,14 +5313,23 @@ function runtimeMode(value) {
5312
5313
  return value;
5313
5314
  }
5314
5315
  function strictFunction(entry) {
5316
+ const declaredHeap = entry.limits?.maxHeapBytes;
5317
+ if (declaredHeap !== undefined && (!Number.isSafeInteger(declaredHeap) || declaredHeap < 1 || declaredHeap > MAX_DECLARED_FUNCTION_HEAP_BYTES)) {
5318
+ throw new Error("invalid strict function limit: maxHeapBytes");
5319
+ }
5320
+ const declaredLimits = { ...entry.limits };
5321
+ delete declaredLimits.maxHeapBytes;
5315
5322
  const limits = {
5316
5323
  timeoutMs: 900000,
5317
5324
  maxRequestBodyBytes: 30 * 1024 * 1024,
5318
5325
  maxResponseBodyBytes: 30 * 1024 * 1024,
5319
5326
  waitUntilTimeoutMs: 300000,
5320
- ...entry.limits
5327
+ ...declaredLimits,
5328
+ ...declaredHeap !== undefined ? { maxHeapBytes: declaredHeap } : {}
5321
5329
  };
5322
5330
  for (const [name, value] of Object.entries(limits)) {
5331
+ if (name === "maxHeapBytes")
5332
+ continue;
5323
5333
  const maximum = name.includes("Body") ? 30 * 1024 * 1024 : name === "waitUntilTimeoutMs" ? 300000 : 900000;
5324
5334
  if (!Number.isSafeInteger(value) || value <= 0 || value > maximum) {
5325
5335
  throw new Error(`invalid strict function limit: ${name}`);
@@ -19870,9 +19880,9 @@ function toPgArrayLiteral(array) {
19870
19880
  }
19871
19881
 
19872
19882
  // src/runtime/node/native/engine.ts
19873
- var DEFAULT_PG_VERSION = "17.7.0";
19883
+ var DEFAULT_PG_VERSION = "18.6.1";
19874
19884
  var POSTGRES_MIRROR_URL_ERROR = "SUPACLOUD_LITE_POSTGRES_MIRROR must be an absolute HTTPS URL or a loopback HTTP URL";
19875
- var NATIVE_POSTGRES_MAJOR = DEFAULT_PG_VERSION.split(".")[0] ?? "17";
19885
+ var NATIVE_POSTGRES_MAJOR = DEFAULT_PG_VERSION.split(".")[0] ?? "18";
19876
19886
  function nativePostgresMajor(installDir = process.env.SUPACLOUD_LITE_POSTGRES_DIR) {
19877
19887
  if (!installDir)
19878
19888
  return NATIVE_POSTGRES_MAJOR;
@@ -19935,10 +19945,10 @@ function isCompleteInstall(dir) {
19935
19945
  return existsSync2(join(dir, "bin", "postgres")) && existsSync2(join(dir, "share", "postgres.bki"));
19936
19946
  }
19937
19947
  var PINNED_SHA256 = {
19938
- "postgresql-17.7.0-x86_64-unknown-linux-gnu": "66ad03281a43624f955c8e16ac975cb0ab751e7edf8ba35308e3b08dd7d065c3",
19939
- "postgresql-17.7.0-aarch64-unknown-linux-gnu": "89cc2f089880cc8e5e6b7a29387829ec4e4779427855bc0b9fa187c8fce33c8b",
19940
- "postgresql-17.7.0-x86_64-apple-darwin": "0dd8c25173524bad4ae8ef6b970da1ac40f4c1f231150c416ccb8cd06feff8f2",
19941
- "postgresql-17.7.0-aarch64-apple-darwin": "727ac08d20a704014a0d51eb3300aa0c8e292c1cf0a1c99d4f4b1002e1420220"
19948
+ "postgresql-18.6.1-x86_64-unknown-linux-gnu": "e84b02dd8d0ce5879fb697330a789231c8b8f8d958dae3ad4d90fecc710b1315",
19949
+ "postgresql-18.6.1-aarch64-unknown-linux-gnu": "1ab47fa2f06ff70454309ad02e5d89c46488300d43977231481fd6b160b9d556",
19950
+ "postgresql-18.6.1-x86_64-apple-darwin": "4229812543e19c91864ebdf5d8f78883c5816d51d4cc5d065298260c1f64d37e",
19951
+ "postgresql-18.6.1-aarch64-apple-darwin": "89e91cc80650a43d22c018b95ca356a0c9e15838a1182fed2880bfb5d7d9c9a6"
19942
19952
  };
19943
19953
  async function verifyTarball(tarball, key, upstreamUrl, downloadMirror) {
19944
19954
  const actual = createHash2("sha256").update(readFileSync(tarball)).digest("hex");
@@ -21937,7 +21947,7 @@ function readFunctions(root, mode) {
21937
21947
  }
21938
21948
  }
21939
21949
  if (mode === "strict") {
21940
- for (const key of ["timeout_ms", "max_request_body_bytes", "max_response_body_bytes", "wait_until_timeout_ms"]) {
21950
+ for (const key of ["timeout_ms", "max_request_body_bytes", "max_response_body_bytes", "wait_until_timeout_ms", "max_heap_bytes"]) {
21941
21951
  if (t.values.has(key)) {
21942
21952
  const value = t.values.get(key);
21943
21953
  if (typeof value !== "string" || !/^\d+$/.test(value) || !Number.isSafeInteger(Number(value)) || Number(value) <= 0) {
@@ -21966,6 +21976,9 @@ function readFunctions(root, mode) {
21966
21976
  const waitUntilTimeoutMs = getInt(t, "wait_until_timeout_ms");
21967
21977
  if (waitUntilTimeoutMs !== undefined && waitUntilTimeoutMs > 0)
21968
21978
  opts.waitUntilTimeoutMs = waitUntilTimeoutMs;
21979
+ const maxHeapBytes = getInt(t, "max_heap_bytes");
21980
+ if (maxHeapBytes !== undefined && maxHeapBytes > 0)
21981
+ opts.maxHeapBytes = maxHeapBytes;
21969
21982
  const outboundHosts = getStringArray(t, "outbound_hosts");
21970
21983
  if (outboundHosts !== undefined)
21971
21984
  opts.outboundHosts = outboundHosts;
@@ -22369,11 +22382,12 @@ async function loadFunctionsUnlocked(projectDir, options, mode) {
22369
22382
  const handler = typeof defaultExport === "function" ? defaultExport : defaultExport && (typeof defaultExport.handle === "function" || typeof defaultExport.fetch === "function") ? defaultExport : denoHandler ? (req) => denoHandler(req) : undefined;
22370
22383
  if (handler) {
22371
22384
  const opts = options[name];
22372
- const limits = opts && (opts.timeoutMs !== undefined || opts.maxRequestBodyBytes !== undefined || opts.maxResponseBodyBytes !== undefined || opts.waitUntilTimeoutMs !== undefined) ? {
22385
+ const limits = opts && (opts.timeoutMs !== undefined || opts.maxRequestBodyBytes !== undefined || opts.maxResponseBodyBytes !== undefined || opts.waitUntilTimeoutMs !== undefined || opts.maxHeapBytes !== undefined) ? {
22373
22386
  ...opts.timeoutMs !== undefined ? { timeoutMs: opts.timeoutMs } : {},
22374
22387
  ...opts.maxRequestBodyBytes !== undefined ? { maxRequestBodyBytes: opts.maxRequestBodyBytes } : {},
22375
22388
  ...opts.maxResponseBodyBytes !== undefined ? { maxResponseBodyBytes: opts.maxResponseBodyBytes } : {},
22376
- ...opts.waitUntilTimeoutMs !== undefined ? { waitUntilTimeoutMs: opts.waitUntilTimeoutMs } : {}
22389
+ ...opts.waitUntilTimeoutMs !== undefined ? { waitUntilTimeoutMs: opts.waitUntilTimeoutMs } : {},
22390
+ ...opts.maxHeapBytes !== undefined ? { maxHeapBytes: opts.maxHeapBytes } : {}
22377
22391
  } : undefined;
22378
22392
  const capabilities = opts && (opts.outboundHosts !== undefined || opts.secrets !== undefined || opts.background !== undefined) ? {
22379
22393
  ...opts.outboundHosts !== undefined ? { outboundHosts: opts.outboundHosts } : {},
package/dist/index.js CHANGED
@@ -88,7 +88,7 @@ function randomToken(bytes = 32) {
88
88
  // package.json
89
89
  var package_default = {
90
90
  name: "@supacloud/lite",
91
- version: "0.35.2",
91
+ version: "0.36.0",
92
92
  description: "Bun-native, single-project Supabase-compatible backend powered by PGlite or native PostgreSQL",
93
93
  type: "module",
94
94
  license: "Apache-2.0",
@@ -148,17 +148,17 @@ var package_default = {
148
148
  "@electric-sql/pglite-pgmq": "0.0.8",
149
149
  "@electric-sql/pglite-pgvector": "0.0.11",
150
150
  "@electric-sql/pglite-postgis": "0.2.10",
151
- "@supacloud/db": "0.20.2",
151
+ "@supacloud/db": "0.20.3",
152
152
  "exact-mirror": "1.2.6",
153
153
  "fast-xml-parser": "5.11.2",
154
154
  tar: "^7.5.22",
155
155
  typebox: "1.4.3"
156
156
  },
157
157
  devDependencies: {
158
- "@supacloud/app": "0.34.1",
158
+ "@supacloud/app": "0.35.0",
159
159
  "@supacloud/contracts": "0.15.2",
160
- "@supacloud/compiler": "0.52.1",
161
- "@supacloud/elysia": "0.36.3",
160
+ "@supacloud/compiler": "0.52.2",
161
+ "@supacloud/elysia": "0.37.0",
162
162
  "@supabase/supabase-js": "^2.118.0",
163
163
  "@types/bun": "^1.4.4",
164
164
  effect: "4.0.5",
@@ -167,10 +167,10 @@ var package_default = {
167
167
  typescript: "^7.0.2"
168
168
  },
169
169
  overrides: {
170
- "@supacloud/db": "0.20.2",
171
- "@supacloud/app": "0.34.1",
172
- "@supacloud/compiler": "0.52.1",
173
- "@supacloud/elysia": "0.36.3",
170
+ "@supacloud/db": "0.20.3",
171
+ "@supacloud/app": "0.35.0",
172
+ "@supacloud/compiler": "0.52.2",
173
+ "@supacloud/elysia": "0.37.0",
174
174
  "@supacloud/contracts": "0.15.2",
175
175
  "@supacloud/commands": "0.11.2",
176
176
  "@supacloud/delivery": "0.23.1",
@@ -5310,6 +5310,7 @@ async function upsertWithoutTtl(query, key, serializedValue) {
5310
5310
  }
5311
5311
 
5312
5312
  // src/runtime/functions/profile.ts
5313
+ var MAX_DECLARED_FUNCTION_HEAP_BYTES = 512 * 1024 * 1024;
5313
5314
  function runtimeMode(value) {
5314
5315
  if (value === undefined)
5315
5316
  return "development";
@@ -5318,14 +5319,23 @@ function runtimeMode(value) {
5318
5319
  return value;
5319
5320
  }
5320
5321
  function strictFunction(entry) {
5322
+ const declaredHeap = entry.limits?.maxHeapBytes;
5323
+ if (declaredHeap !== undefined && (!Number.isSafeInteger(declaredHeap) || declaredHeap < 1 || declaredHeap > MAX_DECLARED_FUNCTION_HEAP_BYTES)) {
5324
+ throw new Error("invalid strict function limit: maxHeapBytes");
5325
+ }
5326
+ const declaredLimits = { ...entry.limits };
5327
+ delete declaredLimits.maxHeapBytes;
5321
5328
  const limits = {
5322
5329
  timeoutMs: 900000,
5323
5330
  maxRequestBodyBytes: 30 * 1024 * 1024,
5324
5331
  maxResponseBodyBytes: 30 * 1024 * 1024,
5325
5332
  waitUntilTimeoutMs: 300000,
5326
- ...entry.limits
5333
+ ...declaredLimits,
5334
+ ...declaredHeap !== undefined ? { maxHeapBytes: declaredHeap } : {}
5327
5335
  };
5328
5336
  for (const [name, value] of Object.entries(limits)) {
5337
+ if (name === "maxHeapBytes")
5338
+ continue;
5329
5339
  const maximum = name.includes("Body") ? 30 * 1024 * 1024 : name === "waitUntilTimeoutMs" ? 300000 : 900000;
5330
5340
  if (!Number.isSafeInteger(value) || value <= 0 || value > maximum) {
5331
5341
  throw new Error(`invalid strict function limit: ${name}`);
@@ -19914,9 +19924,9 @@ function toPgArrayLiteral(array) {
19914
19924
  }
19915
19925
 
19916
19926
  // src/runtime/node/native/engine.ts
19917
- var DEFAULT_PG_VERSION = "17.7.0";
19927
+ var DEFAULT_PG_VERSION = "18.6.1";
19918
19928
  var POSTGRES_MIRROR_URL_ERROR = "SUPACLOUD_LITE_POSTGRES_MIRROR must be an absolute HTTPS URL or a loopback HTTP URL";
19919
- var NATIVE_POSTGRES_MAJOR = DEFAULT_PG_VERSION.split(".")[0] ?? "17";
19929
+ var NATIVE_POSTGRES_MAJOR = DEFAULT_PG_VERSION.split(".")[0] ?? "18";
19920
19930
  function nativePostgresMajor(installDir = process.env.SUPACLOUD_LITE_POSTGRES_DIR) {
19921
19931
  if (!installDir)
19922
19932
  return NATIVE_POSTGRES_MAJOR;
@@ -19979,10 +19989,10 @@ function isCompleteInstall(dir) {
19979
19989
  return existsSync2(join2(dir, "bin", "postgres")) && existsSync2(join2(dir, "share", "postgres.bki"));
19980
19990
  }
19981
19991
  var PINNED_SHA256 = {
19982
- "postgresql-17.7.0-x86_64-unknown-linux-gnu": "66ad03281a43624f955c8e16ac975cb0ab751e7edf8ba35308e3b08dd7d065c3",
19983
- "postgresql-17.7.0-aarch64-unknown-linux-gnu": "89cc2f089880cc8e5e6b7a29387829ec4e4779427855bc0b9fa187c8fce33c8b",
19984
- "postgresql-17.7.0-x86_64-apple-darwin": "0dd8c25173524bad4ae8ef6b970da1ac40f4c1f231150c416ccb8cd06feff8f2",
19985
- "postgresql-17.7.0-aarch64-apple-darwin": "727ac08d20a704014a0d51eb3300aa0c8e292c1cf0a1c99d4f4b1002e1420220"
19992
+ "postgresql-18.6.1-x86_64-unknown-linux-gnu": "e84b02dd8d0ce5879fb697330a789231c8b8f8d958dae3ad4d90fecc710b1315",
19993
+ "postgresql-18.6.1-aarch64-unknown-linux-gnu": "1ab47fa2f06ff70454309ad02e5d89c46488300d43977231481fd6b160b9d556",
19994
+ "postgresql-18.6.1-x86_64-apple-darwin": "4229812543e19c91864ebdf5d8f78883c5816d51d4cc5d065298260c1f64d37e",
19995
+ "postgresql-18.6.1-aarch64-apple-darwin": "89e91cc80650a43d22c018b95ca356a0c9e15838a1182fed2880bfb5d7d9c9a6"
19986
19996
  };
19987
19997
  async function verifyTarball(tarball, key, upstreamUrl, downloadMirror) {
19988
19998
  const actual = createHash2("sha256").update(readFileSync(tarball)).digest("hex");
@@ -21055,7 +21065,7 @@ function readFunctions(root, mode) {
21055
21065
  }
21056
21066
  }
21057
21067
  if (mode === "strict") {
21058
- for (const key of ["timeout_ms", "max_request_body_bytes", "max_response_body_bytes", "wait_until_timeout_ms"]) {
21068
+ for (const key of ["timeout_ms", "max_request_body_bytes", "max_response_body_bytes", "wait_until_timeout_ms", "max_heap_bytes"]) {
21059
21069
  if (t.values.has(key)) {
21060
21070
  const value = t.values.get(key);
21061
21071
  if (typeof value !== "string" || !/^\d+$/.test(value) || !Number.isSafeInteger(Number(value)) || Number(value) <= 0) {
@@ -21084,6 +21094,9 @@ function readFunctions(root, mode) {
21084
21094
  const waitUntilTimeoutMs = getInt(t, "wait_until_timeout_ms");
21085
21095
  if (waitUntilTimeoutMs !== undefined && waitUntilTimeoutMs > 0)
21086
21096
  opts.waitUntilTimeoutMs = waitUntilTimeoutMs;
21097
+ const maxHeapBytes = getInt(t, "max_heap_bytes");
21098
+ if (maxHeapBytes !== undefined && maxHeapBytes > 0)
21099
+ opts.maxHeapBytes = maxHeapBytes;
21087
21100
  const outboundHosts = getStringArray(t, "outbound_hosts");
21088
21101
  if (outboundHosts !== undefined)
21089
21102
  opts.outboundHosts = outboundHosts;
@@ -21293,11 +21306,12 @@ async function loadFunctionsUnlocked(projectDir, options, mode) {
21293
21306
  const handler = typeof defaultExport === "function" ? defaultExport : defaultExport && (typeof defaultExport.handle === "function" || typeof defaultExport.fetch === "function") ? defaultExport : denoHandler ? (req) => denoHandler(req) : undefined;
21294
21307
  if (handler) {
21295
21308
  const opts = options[name];
21296
- const limits = opts && (opts.timeoutMs !== undefined || opts.maxRequestBodyBytes !== undefined || opts.maxResponseBodyBytes !== undefined || opts.waitUntilTimeoutMs !== undefined) ? {
21309
+ const limits = opts && (opts.timeoutMs !== undefined || opts.maxRequestBodyBytes !== undefined || opts.maxResponseBodyBytes !== undefined || opts.waitUntilTimeoutMs !== undefined || opts.maxHeapBytes !== undefined) ? {
21297
21310
  ...opts.timeoutMs !== undefined ? { timeoutMs: opts.timeoutMs } : {},
21298
21311
  ...opts.maxRequestBodyBytes !== undefined ? { maxRequestBodyBytes: opts.maxRequestBodyBytes } : {},
21299
21312
  ...opts.maxResponseBodyBytes !== undefined ? { maxResponseBodyBytes: opts.maxResponseBodyBytes } : {},
21300
- ...opts.waitUntilTimeoutMs !== undefined ? { waitUntilTimeoutMs: opts.waitUntilTimeoutMs } : {}
21313
+ ...opts.waitUntilTimeoutMs !== undefined ? { waitUntilTimeoutMs: opts.waitUntilTimeoutMs } : {},
21314
+ ...opts.maxHeapBytes !== undefined ? { maxHeapBytes: opts.maxHeapBytes } : {}
21301
21315
  } : undefined;
21302
21316
  const capabilities = opts && (opts.outboundHosts !== undefined || opts.secrets !== undefined || opts.background !== undefined) ? {
21303
21317
  ...opts.outboundHosts !== undefined ? { outboundHosts: opts.outboundHosts } : {},
@@ -35,8 +35,10 @@ export type FunctionHandler = EdgeFunction | FrameworkObjectHandler;
35
35
  /**
36
36
  * Per-invocation resource limits, aligned with the Edge Runtime Manifest v2
37
37
  * `limits` block (timeout_ms / max_request_body_bytes /
38
- * max_response_body_bytes / wait_until_timeout_ms). Lite defaults to no
39
- * limit when undeclared; production caps at 900s / 30MB.
38
+ * max_response_body_bytes / wait_until_timeout_ms / max_heap_bytes). Lite
39
+ * defaults to no limit when undeclared; production caps wall time and body
40
+ * size at 900s / 30MB. `maxHeapBytes` is accepted for the same declaration
41
+ * range as Edge Runtime and is not a process heap sandbox.
40
42
  */
41
43
  export interface FunctionLimits {
42
44
  /** limits.timeout_ms: max wall time per invocation; on expiry the request is aborted and a 504 returned. */
@@ -47,6 +49,11 @@ export interface FunctionLimits {
47
49
  maxResponseBodyBytes?: number;
48
50
  /** limits.wait_until_timeout_ms: max time to wait for EdgeRuntime.waitUntil tasks after the response. */
49
51
  waitUntilTimeoutMs?: number;
52
+ /**
53
+ * limits.max_heap_bytes: declared Worker heap budget (1 byte through 512 MiB).
54
+ * Strict mode rejects an invalid value. Lite runs functions in-process and does not sample or retire on this budget.
55
+ */
56
+ maxHeapBytes?: number;
50
57
  }
51
58
  /**
52
59
  * Declared capabilities, aligned with the Edge Runtime Manifest v2
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/runtime/functions/handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/runtime/functions/handler.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import type { LoadedFunction } from './handler.js';
2
2
  export type RuntimeMode = 'development' | 'strict';
3
+ /** Same declaration cap as Edge Runtime `limits.max_heap_bytes`. Lite validates it and does not enforce a Worker heap. */
4
+ export declare const MAX_DECLARED_FUNCTION_HEAP_BYTES: number;
3
5
  export declare function runtimeMode(value: unknown): RuntimeMode;
4
6
  export declare function strictFunction(entry: LoadedFunction): LoadedFunction;
5
7
  //# sourceMappingURL=profile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/runtime/functions/profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,QAAQ,CAAA;AAElD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAIvD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAqBpE"}
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/runtime/functions/profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,QAAQ,CAAA;AAElD,0HAA0H;AAC1H,eAAO,MAAM,gCAAgC,QAAoB,CAAA;AAEjE,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAIvD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAgCpE"}
@@ -101,6 +101,11 @@ export interface FunctionOptions {
101
101
  maxResponseBodyBytes?: number;
102
102
  /** [functions.<name>].wait_until_timeout_ms (Edge Runtime limits.wait_until_timeout_ms) */
103
103
  waitUntilTimeoutMs?: number;
104
+ /**
105
+ * [functions.<name>].max_heap_bytes (Edge Runtime limits.max_heap_bytes).
106
+ * Recorded for contract compatibility. Lite does not enforce a Worker heap.
107
+ */
108
+ maxHeapBytes?: number;
104
109
  /** [functions.<name>].outbound_hosts: fetch host allowlist (Edge Runtime capabilities.outbound_hosts) */
105
110
  outboundHosts?: string[];
106
111
  /** [functions.<name>].secrets: env keys exposed to the function (Edge Runtime capabilities.secrets) */
@@ -1 +1 @@
1
- {"version":3,"file":"load-config.d.ts","sourceRoot":"","sources":["../../../src/runtime/node/load-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"load-config.d.ts","sourceRoot":"","sources":["../../../src/runtime/node/load-config.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,8 @@ export interface LoadFunctionOptions {
22
22
  maxResponseBodyBytes?: number;
23
23
  /** Max wait for EdgeRuntime.waitUntil tasks after the response (Edge Runtime limits.wait_until_timeout_ms). */
24
24
  waitUntilTimeoutMs?: number;
25
+ /** Declared Worker heap budget (Edge Runtime limits.max_heap_bytes). Validated in strict mode and not enforced in-process. */
26
+ maxHeapBytes?: number;
25
27
  /** Outbound fetch host allowlist (Edge Runtime capabilities.outbound_hosts). */
26
28
  outboundHosts?: string[];
27
29
  /** Env keys exposed to the function beyond the SUPABASE_* base trio (Edge Runtime capabilities.secrets). */
@@ -1 +1 @@
1
- {"version":3,"file":"load-functions.d.ts","sourceRoot":"","sources":["../../../src/runtime/node/load-functions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAwC,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGtH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAG1D;;;;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;IACnB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,iBAAiB,CAAA;IAC7B,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mFAAmF;IACnF,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,+GAA+G;IAC/G,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,4GAA4G;IAC5G,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,mGAAmG;IACnG,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAcD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAM,EACjD,IAAI,GAAE,WAA2B,GAChC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAYtC"}
1
+ {"version":3,"file":"load-functions.d.ts","sourceRoot":"","sources":["../../../src/runtime/node/load-functions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAwC,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGtH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAG1D;;;;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;IACnB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,iBAAiB,CAAA;IAC7B,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mFAAmF;IACnF,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,+GAA+G;IAC/G,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,8HAA8H;IAC9H,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,4GAA4G;IAC5G,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,mGAAmG;IACnG,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAcD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAM,EACjD,IAAI,GAAE,WAA2B,GAChC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAYtC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@supacloud/lite",
3
- "version": "0.35.2",
3
+ "version": "0.36.0",
4
4
  "description": "Bun-native, single-project Supabase-compatible backend powered by PGlite or native PostgreSQL",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -60,17 +60,17 @@
60
60
  "@electric-sql/pglite-pgmq": "0.0.8",
61
61
  "@electric-sql/pglite-pgvector": "0.0.11",
62
62
  "@electric-sql/pglite-postgis": "0.2.10",
63
- "@supacloud/db": "0.20.2",
63
+ "@supacloud/db": "0.20.3",
64
64
  "exact-mirror": "1.2.6",
65
65
  "fast-xml-parser": "5.11.2",
66
66
  "tar": "^7.5.22",
67
67
  "typebox": "1.4.3"
68
68
  },
69
69
  "devDependencies": {
70
- "@supacloud/app": "0.34.1",
70
+ "@supacloud/app": "0.35.0",
71
71
  "@supacloud/contracts": "0.15.2",
72
- "@supacloud/compiler": "0.52.1",
73
- "@supacloud/elysia": "0.36.3",
72
+ "@supacloud/compiler": "0.52.2",
73
+ "@supacloud/elysia": "0.37.0",
74
74
  "@supabase/supabase-js": "^2.118.0",
75
75
  "@types/bun": "^1.4.4",
76
76
  "effect": "4.0.5",
@@ -79,10 +79,10 @@
79
79
  "typescript": "^7.0.2"
80
80
  },
81
81
  "overrides": {
82
- "@supacloud/db": "0.20.2",
83
- "@supacloud/app": "0.34.1",
84
- "@supacloud/compiler": "0.52.1",
85
- "@supacloud/elysia": "0.36.3",
82
+ "@supacloud/db": "0.20.3",
83
+ "@supacloud/app": "0.35.0",
84
+ "@supacloud/compiler": "0.52.2",
85
+ "@supacloud/elysia": "0.37.0",
86
86
  "@supacloud/contracts": "0.15.2",
87
87
  "@supacloud/commands": "0.11.2",
88
88
  "@supacloud/delivery": "0.23.1",