@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 +17 -0
- package/LICENSES/{POSTGRESQL-17-COPYRIGHT.txt → POSTGRESQL-18-COPYRIGHT.txt} +1 -1
- package/README.md +21 -7
- package/THIRD_PARTY_NOTICES.md +2 -2
- package/dist/cli.js +33 -19
- package/dist/index.js +33 -19
- package/dist/runtime/functions/handler.d.ts +9 -2
- package/dist/runtime/functions/handler.d.ts.map +1 -1
- package/dist/runtime/functions/profile.d.ts +2 -0
- package/dist/runtime/functions/profile.d.ts.map +1 -1
- package/dist/runtime/node/load-config.d.ts +5 -0
- package/dist/runtime/node/load-config.d.ts.map +1 -1
- package/dist/runtime/node/load-functions.d.ts +2 -0
- package/dist/runtime/node/load-functions.d.ts.map +1 -1
- package/package.json +9 -9
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-
|
|
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/
|
|
455
|
+
--postgres-dir /opt/postgresql/18
|
|
451
456
|
|
|
452
457
|
supacloud-lite doctor \
|
|
453
458
|
--engine native \
|
|
454
|
-
--postgres-dir /opt/postgresql/
|
|
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/
|
|
1039
|
+
--postgres-dir /opt/postgresql/18
|
|
1026
1040
|
|
|
1027
1041
|
supacloud-lite doctor \
|
|
1028
1042
|
--engine native \
|
|
1029
|
-
--postgres-dir /opt/postgresql/
|
|
1043
|
+
--postgres-dir /opt/postgresql/18 \
|
|
1030
1044
|
--json
|
|
1031
1045
|
```
|
|
1032
1046
|
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -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
|
|
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-
|
|
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.
|
|
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.
|
|
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.
|
|
78
|
+
"@supacloud/app": "0.35.0",
|
|
79
79
|
"@supacloud/contracts": "0.15.2",
|
|
80
|
-
"@supacloud/compiler": "0.52.
|
|
81
|
-
"@supacloud/elysia": "0.
|
|
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.
|
|
91
|
-
"@supacloud/app": "0.
|
|
92
|
-
"@supacloud/compiler": "0.52.
|
|
93
|
-
"@supacloud/elysia": "0.
|
|
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
|
-
...
|
|
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 = "
|
|
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] ?? "
|
|
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-
|
|
19939
|
-
"postgresql-
|
|
19940
|
-
"postgresql-
|
|
19941
|
-
"postgresql-
|
|
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.
|
|
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.
|
|
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.
|
|
158
|
+
"@supacloud/app": "0.35.0",
|
|
159
159
|
"@supacloud/contracts": "0.15.2",
|
|
160
|
-
"@supacloud/compiler": "0.52.
|
|
161
|
-
"@supacloud/elysia": "0.
|
|
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.
|
|
171
|
-
"@supacloud/app": "0.
|
|
172
|
-
"@supacloud/compiler": "0.52.
|
|
173
|
-
"@supacloud/elysia": "0.
|
|
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
|
-
...
|
|
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 = "
|
|
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] ?? "
|
|
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-
|
|
19983
|
-
"postgresql-
|
|
19984
|
-
"postgresql-
|
|
19985
|
-
"postgresql-
|
|
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
|
|
39
|
-
* limit when undeclared; production caps
|
|
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":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,OAAO,EAAE,KAAK,YAAY,EAAuB,MAAM,cAAc,CAAA;AACrE,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/D,mFAAmF;AACnF,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;AAE/F,+EAA+E;AAC/E,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;AAE3D;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACvD,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACtD,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,qDAAqD;IACrD,WAAW,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CACvC;AAED,iFAAiF;AACjF,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,sBAAsB,CAAA;AAEnE
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/runtime/functions/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,OAAO,EAAE,KAAK,YAAY,EAAuB,MAAM,cAAc,CAAA;AACrE,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/D,mFAAmF;AACnF,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;AAE/F,+EAA+E;AAC/E,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;AAE3D;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACvD,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACtD,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,qDAAqD;IACrD,WAAW,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CACvC;AAED,iFAAiF;AACjF,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,sBAAsB,CAAA;AAEnE;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,4GAA4G;IAC5G,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wFAAwF;IACxF,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,0GAA0G;IAC1G,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,yGAAyG;IACzG,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,gGAAgG;IAChG,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,qGAAqG;IACrG,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,uFAAuF;AACvF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,eAAe,CAAA;IACxB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,iBAAiB,CAAA;IAC7B,4HAA4H;IAC5H,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,oBAAoB,CAAA;CACpC;AAED,wEAAwE;AACxE,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,cAAc,CAAA;AAEpE,mEAAmE;AACnE,eAAO,MAAM,2BAA2B,wBAAwB,CAAA;AAsBhE,uEAAuE;AACvE,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,IAAI,EAAE,cAAc,CAAA;IACpB,4HAA4H;IAC5H,GAAG,EAAE;QACH,YAAY,EAAE,MAAM,CAAA;QACpB,iBAAiB,EAAE,MAAM,CAAA;QACzB,yBAAyB,EAAE,MAAM,CAAA;QACjC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KACtB,CAAA;CACF;AAUD,kFAAkF;AAClF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAQlE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAY7D;AAED,uFAAuF;AACvF,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IAJd,YACU,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAC7C,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC,EAC3B,OAAO,EAAE,YAAY,EACrB,IAAI,GAAE,WAA2B,EAG1C;IAED,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,qBAAqB,GAAG,IAAI,CAGtD;IAED,yCAAyC;IACzC,IAAI,IAAI,MAAM,EAAE,CAEf;IAED;;;;;;OAMG;IACG,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CA+E3E;IAED,4FAA4F;YAC9E,WAAW;IA4BzB,OAAO,CAAC,MAAM;CAiBf"}
|
|
@@ -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,
|
|
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.
|
|
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.
|
|
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.
|
|
70
|
+
"@supacloud/app": "0.35.0",
|
|
71
71
|
"@supacloud/contracts": "0.15.2",
|
|
72
|
-
"@supacloud/compiler": "0.52.
|
|
73
|
-
"@supacloud/elysia": "0.
|
|
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.
|
|
83
|
-
"@supacloud/app": "0.
|
|
84
|
-
"@supacloud/compiler": "0.52.
|
|
85
|
-
"@supacloud/elysia": "0.
|
|
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",
|