@palbase/backend 25.0.0 → 25.0.1
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/dist/bin/palbase-backend.cjs +2 -0
- package/dist/bin/palbase-backend.cjs.map +1 -1
- package/dist/bin/palbase-backend.js +2 -2
- package/dist/{chunk-43A3KGWL.js → chunk-34I4GB7D.js} +4 -2
- package/dist/{chunk-43A3KGWL.js.map → chunk-34I4GB7D.js.map} +1 -1
- package/dist/{chunk-ZQRWW37O.js → chunk-35PNTIRN.js} +5 -1
- package/dist/chunk-35PNTIRN.js.map +1 -0
- package/dist/{chunk-OEQBHE2Z.js → chunk-HBOJLP2Z.js} +19 -4
- package/dist/chunk-HBOJLP2Z.js.map +1 -0
- package/dist/{chunk-5CMLOAEF.js → chunk-YOY5DFQS.js} +2 -2
- package/dist/db/env.cjs.map +1 -1
- package/dist/db/env.d.cts +2 -1
- package/dist/db/env.d.ts +2 -1
- package/dist/db/index.cjs +17 -3
- package/dist/db/index.cjs.map +1 -1
- package/dist/db/index.d.cts +1 -1
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.js +1 -1
- package/dist/engine/index.cjs +2 -0
- package/dist/engine/index.cjs.map +1 -1
- package/dist/engine/index.d.cts +2 -2
- package/dist/engine/index.d.ts +2 -2
- package/dist/engine/index.js +2 -2
- package/dist/{index-Ct1iiB4N.d.ts → index-B4CcpqLb.d.ts} +23 -16
- package/dist/{index-BF1f0DfA.d.ts → index-B8v6hVyU.d.ts} +1 -1
- package/dist/{index-CwaWRhyc.d.cts → index-DmVyY6N7.d.cts} +23 -16
- package/dist/{index-CoaDN9dL.d.cts → index-VsjBQ4Kw.d.cts} +1 -1
- package/dist/index.cjs +75 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -7
- package/dist/index.d.ts +8 -7
- package/dist/index.js +58 -49
- package/dist/index.js.map +1 -1
- package/dist/openapi/index.cjs +1 -1
- package/dist/openapi/index.cjs.map +1 -1
- package/dist/openapi/index.js +3 -3
- package/dist/openapi/index.js.map +1 -1
- package/docs/llms-full.txt +36 -5
- package/docs/schema.md +36 -5
- package/package.json +1 -1
- package/dist/chunk-OEQBHE2Z.js.map +0 -1
- package/dist/chunk-ZQRWW37O.js.map +0 -1
- /package/dist/{chunk-5CMLOAEF.js.map → chunk-YOY5DFQS.js.map} +0 -0
package/dist/index.d.cts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { h as PalbaseResult, A as AuthSpec, H as HttpError } from './endpoint-BSGw1pTu.cjs';
|
|
2
2
|
export { i as AuthConfig, B as BadRequest, C as CacheClient, j as ClientInfo, k as Conflict, D as DBClient, f as DBOps, E as ErrorDef, l as ErrorMap, m as ErrorThrowers, F as FileContext, n as Forbidden, o as HttpMethod, L as Logger, M as Materialized, p as Middleware, q as MiddlewareContext, r as MiddlewareHandler, N as NotFound, s as PBRequest, t as PalError, u as PalbaseAnalyticsClient, v as PalbaseAnalyticsManagementNamespace, w as PalbaseAnalyticsProperties, x as PalbaseAnalyticsQueryNamespace, y as PalbaseAttestAndroidParams, z as PalbaseAttestAndroidResult, G as PalbaseAttestiOSParams, I as PalbaseAttestiOSResult, J as PalbaseAuthClient, K as PalbaseBatchOverrideOperation, O as PalbaseBatchSetOverridesResult, Q as PalbaseBindDeviceParams, e as PalbaseBucketClient, U as PalbaseClearAllOverridesResult, V as PalbaseClearOverrideResult, W as PalbaseCohortQueryInput, X as PalbaseCohortResult, Y as PalbaseCollectionRef, Z as PalbaseCountQueryInput, _ as PalbaseCountResult, $ as PalbaseCreateLinkParams, a0 as PalbaseDeviceInfo, a1 as PalbaseDeviceTokenView, P as PalbaseDocsClient, a2 as PalbaseDocumentRef, a3 as PalbaseDocumentSnapshot, a4 as PalbaseEmailClient, a5 as PalbaseEmailSendParams, a6 as PalbaseEmailSendResponse, a7 as PalbaseEventNamesResult, a8 as PalbaseEventsQueryInput, a9 as PalbaseEventsResult, aa as PalbaseFileObject, ab as PalbaseFlag, ac as PalbaseFlagContext, ad as PalbaseFlagSource, ae as PalbaseFlagValue, af as PalbaseFlagVariant, a as PalbaseFlagsClient, ag as PalbaseFlagsServiceClient, ah as PalbaseFunctionsClient, ai as PalbaseFunnelQueryInput, aj as PalbaseFunnelResult, ak as PalbaseIdentifyTraits, al as PalbaseInboxClient, am as PalbaseInboxListOptions, an as PalbaseInboxListResult, ao as PalbaseInboxMessage, ap as PalbaseInboxSendParams, aq as PalbaseInboxSendResponse, ar as PalbaseInitialLink, as as PalbaseInvokeOptions, at as PalbaseLink, au as PalbaseLinkAnalytics, av as PalbaseLinkDetails, aw as PalbaseLinksClient, ax as PalbaseListLinksOptions, ay as PalbaseListLinksResult, az as PalbaseListOptions, aA as PalbaseMatchParams, aB as PalbaseMultiChannelResponse, b as PalbaseNotificationsClient, aC as PalbaseOverviewResult, aD as PalbasePreferences, aE as PalbasePreferencesClient, aF as PalbasePushClient, aG as PalbasePushSendParams, aH as PalbasePushSendResponse, aI as PalbaseQrCodeOptions, aJ as PalbaseQuerySnapshot, c as PalbaseRealtimeClient, aK as PalbaseRegisterDeviceParams, aL as PalbaseRetentionQueryInput, aM as PalbaseRetentionResult, aN as PalbaseSession, aO as PalbaseSetOverrideResult, aP as PalbaseSetOverridesResult, aQ as PalbaseSignedUrlResponse, aR as PalbaseSmsClient, aS as PalbaseSmsSendParams, aT as PalbaseSmsSendResponse, d as PalbaseStorageClient, aU as PalbaseTransformOptions, aV as PalbaseUpdateLinkParams, aW as PalbaseUploadOptions, aX as PalbaseUser, aY as PalbaseUserDetailResult, aZ as PalbaseUsersQueryInput, a_ as PalbaseUsersResult, a$ as PalbaseVerifyRequestSignatureParams, b0 as PalbaseWhereOperator, R as RateLimitConfig, b1 as Ref, S as SecretsService, b2 as TooManyRequests, b3 as TxColumnExpr, b4 as TxInsertShape, b5 as TxInsertValue, b6 as TxNow, T as TxPlanBody, b7 as TxPlanError, b8 as TxPlanHandle, b9 as TxPlanOpResult, ba as TxPlanRejection, g as TxPlanResponse, bb as TxRefError, bc as TxRow, bd as TxRows, be as TxSelectOptions, bf as TxSetShape, bg as TxSetValue, bh as TxTable, bi as TxWhere, bj as TxWireExpr, bk as TxWireGuard, bl as TxWireOp, bm as TxWireRef, bn as TxWireValue, bo as Unauthorized, bp as UniqueViolation, bq as UserT, br as VerifiedDevice, bs as dec, bt as defineMiddleware, bu as inc, bv as now } from './endpoint-BSGw1pTu.cjs';
|
|
3
|
-
import { M as ModuleClients } from './index-
|
|
4
|
-
export { C as Cache, D as Database, a as Documents, F as Flags, L as LifecycleHook, b as Log, N as Notifications, R as Realtime, c as RequestStore, d as RuntimeServices, S as Secrets, e as ShutdownRunner, f as Storage, _ as __getRuntime, g as __requestALS, h as __resetLifecycleHooks, i as __runStartHooks, j as __runWithRuntime, k as __setRuntime, o as onShutdown, l as onStart } from './index-
|
|
5
|
-
import { S as SchemaDef } from './index-
|
|
6
|
-
export { A as AnyColumn, C as ColumnBuilder, a as ColumnDef, b as ColumnMap, c as ColumnType, d as EXTENSION_DEPENDENCIES, e as EmbeddingModelRef, f as EnvSchemas, g as EnvServiceDatabase, h as EnvTables, E as EnvTypedDatabase, i as EnvTypedTable, I as InsertShape, O as OnDeleteAction, P as PALBASE_EXTENSIONS, j as PalbaseExtension, k as PolicyBuilder, l as PolicyCommand, m as PolicyDef, n as PolicyMode, R as RawConstraintDef, o as RowShape,
|
|
3
|
+
import { M as ModuleClients } from './index-VsjBQ4Kw.cjs';
|
|
4
|
+
export { C as Cache, D as Database, a as Documents, F as Flags, L as LifecycleHook, b as Log, N as Notifications, R as Realtime, c as RequestStore, d as RuntimeServices, S as Secrets, e as ShutdownRunner, f as Storage, _ as __getRuntime, g as __requestALS, h as __resetLifecycleHooks, i as __runStartHooks, j as __runWithRuntime, k as __setRuntime, o as onShutdown, l as onStart } from './index-VsjBQ4Kw.cjs';
|
|
5
|
+
import { S as SchemaDef } from './index-DmVyY6N7.cjs';
|
|
6
|
+
export { A as AnyColumn, C as ColumnBuilder, a as ColumnDef, b as ColumnMap, c as ColumnType, d as EXTENSION_DEPENDENCIES, e as EmbeddingModelRef, f as EnvSchemas, g as EnvServiceDatabase, h as EnvTables, E as EnvTypedDatabase, i as EnvTypedTable, I as InsertShape, O as OnDeleteAction, P as PALBASE_EXTENSIONS, j as PalbaseExtension, k as PolicyBuilder, l as PolicyCommand, m as PolicyDef, n as PolicyMode, R as RawConstraintDef, o as RowShape, T as TABLE_META, p as TableDef, q as TableHandle, r as TableInput, s as TxPlan, t as TxTables, u as TypedDB, v as TypedTable, w as TypedTx, x as bigint, y as boolean, z as defineSchema, B as defineTable, D as enumType, F as installationRef, G as integer, H as isPalbaseExtension, J as jsonb, K as makeTypedDB, L as numeric, M as openai, N as ownedByUser, Q as policy, U as raw, V as text, W as timestamp, X as userRef, Y as uuid, Z as vector } from './index-DmVyY6N7.cjs';
|
|
7
7
|
export { TableTypes, Tables } from './db/env.cjs';
|
|
8
8
|
export { PalbaseBucketName, PalbaseFlagKey, PalbaseSecretName } from './stack.cjs';
|
|
9
9
|
import { a as RouteOptions } from './registry-CgJvDYUW.cjs';
|
|
@@ -368,7 +368,7 @@ declare function defineChannels(map: ChannelsInput): ChannelsDef;
|
|
|
368
368
|
* The output is FLAT: each table gets a `{ row: {...}; insert: {...} }` entry
|
|
369
369
|
* with plain TypeScript object types. The phantom `ColumnBuilder<...>` type
|
|
370
370
|
* NEVER appears in the generated `.d.ts` — that type only lives at authoring
|
|
371
|
-
* time inside `db
|
|
371
|
+
* time inside the project's `db/*.ts` schema files.
|
|
372
372
|
*/
|
|
373
373
|
|
|
374
374
|
/**
|
|
@@ -384,8 +384,9 @@ declare function defineChannels(map: ChannelsInput): ChannelsDef;
|
|
|
384
384
|
*
|
|
385
385
|
* @example
|
|
386
386
|
* import { makeEnvDts } from "@palbase/backend";
|
|
387
|
-
* import
|
|
388
|
-
*
|
|
387
|
+
* import publicSchema from "./db/public.js";
|
|
388
|
+
* import billing from "./db/billing.js";
|
|
389
|
+
* writeFileSync("palbase-env.d.ts", makeEnvDts([publicSchema, billing]));
|
|
389
390
|
*/
|
|
390
391
|
declare function makeEnvDts(schemas: readonly SchemaDef[]): string;
|
|
391
392
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { h as PalbaseResult, A as AuthSpec, H as HttpError } from './endpoint-DMwJjEHQ.js';
|
|
2
2
|
export { i as AuthConfig, B as BadRequest, C as CacheClient, j as ClientInfo, k as Conflict, D as DBClient, f as DBOps, E as ErrorDef, l as ErrorMap, m as ErrorThrowers, F as FileContext, n as Forbidden, o as HttpMethod, L as Logger, M as Materialized, p as Middleware, q as MiddlewareContext, r as MiddlewareHandler, N as NotFound, s as PBRequest, t as PalError, u as PalbaseAnalyticsClient, v as PalbaseAnalyticsManagementNamespace, w as PalbaseAnalyticsProperties, x as PalbaseAnalyticsQueryNamespace, y as PalbaseAttestAndroidParams, z as PalbaseAttestAndroidResult, G as PalbaseAttestiOSParams, I as PalbaseAttestiOSResult, J as PalbaseAuthClient, K as PalbaseBatchOverrideOperation, O as PalbaseBatchSetOverridesResult, Q as PalbaseBindDeviceParams, e as PalbaseBucketClient, U as PalbaseClearAllOverridesResult, V as PalbaseClearOverrideResult, W as PalbaseCohortQueryInput, X as PalbaseCohortResult, Y as PalbaseCollectionRef, Z as PalbaseCountQueryInput, _ as PalbaseCountResult, $ as PalbaseCreateLinkParams, a0 as PalbaseDeviceInfo, a1 as PalbaseDeviceTokenView, P as PalbaseDocsClient, a2 as PalbaseDocumentRef, a3 as PalbaseDocumentSnapshot, a4 as PalbaseEmailClient, a5 as PalbaseEmailSendParams, a6 as PalbaseEmailSendResponse, a7 as PalbaseEventNamesResult, a8 as PalbaseEventsQueryInput, a9 as PalbaseEventsResult, aa as PalbaseFileObject, ab as PalbaseFlag, ac as PalbaseFlagContext, ad as PalbaseFlagSource, ae as PalbaseFlagValue, af as PalbaseFlagVariant, a as PalbaseFlagsClient, ag as PalbaseFlagsServiceClient, ah as PalbaseFunctionsClient, ai as PalbaseFunnelQueryInput, aj as PalbaseFunnelResult, ak as PalbaseIdentifyTraits, al as PalbaseInboxClient, am as PalbaseInboxListOptions, an as PalbaseInboxListResult, ao as PalbaseInboxMessage, ap as PalbaseInboxSendParams, aq as PalbaseInboxSendResponse, ar as PalbaseInitialLink, as as PalbaseInvokeOptions, at as PalbaseLink, au as PalbaseLinkAnalytics, av as PalbaseLinkDetails, aw as PalbaseLinksClient, ax as PalbaseListLinksOptions, ay as PalbaseListLinksResult, az as PalbaseListOptions, aA as PalbaseMatchParams, aB as PalbaseMultiChannelResponse, b as PalbaseNotificationsClient, aC as PalbaseOverviewResult, aD as PalbasePreferences, aE as PalbasePreferencesClient, aF as PalbasePushClient, aG as PalbasePushSendParams, aH as PalbasePushSendResponse, aI as PalbaseQrCodeOptions, aJ as PalbaseQuerySnapshot, c as PalbaseRealtimeClient, aK as PalbaseRegisterDeviceParams, aL as PalbaseRetentionQueryInput, aM as PalbaseRetentionResult, aN as PalbaseSession, aO as PalbaseSetOverrideResult, aP as PalbaseSetOverridesResult, aQ as PalbaseSignedUrlResponse, aR as PalbaseSmsClient, aS as PalbaseSmsSendParams, aT as PalbaseSmsSendResponse, d as PalbaseStorageClient, aU as PalbaseTransformOptions, aV as PalbaseUpdateLinkParams, aW as PalbaseUploadOptions, aX as PalbaseUser, aY as PalbaseUserDetailResult, aZ as PalbaseUsersQueryInput, a_ as PalbaseUsersResult, a$ as PalbaseVerifyRequestSignatureParams, b0 as PalbaseWhereOperator, R as RateLimitConfig, b1 as Ref, S as SecretsService, b2 as TooManyRequests, b3 as TxColumnExpr, b4 as TxInsertShape, b5 as TxInsertValue, b6 as TxNow, T as TxPlanBody, b7 as TxPlanError, b8 as TxPlanHandle, b9 as TxPlanOpResult, ba as TxPlanRejection, g as TxPlanResponse, bb as TxRefError, bc as TxRow, bd as TxRows, be as TxSelectOptions, bf as TxSetShape, bg as TxSetValue, bh as TxTable, bi as TxWhere, bj as TxWireExpr, bk as TxWireGuard, bl as TxWireOp, bm as TxWireRef, bn as TxWireValue, bo as Unauthorized, bp as UniqueViolation, bq as UserT, br as VerifiedDevice, bs as dec, bt as defineMiddleware, bu as inc, bv as now } from './endpoint-DMwJjEHQ.js';
|
|
3
|
-
import { M as ModuleClients } from './index-
|
|
4
|
-
export { C as Cache, D as Database, a as Documents, F as Flags, L as LifecycleHook, b as Log, N as Notifications, R as Realtime, c as RequestStore, d as RuntimeServices, S as Secrets, e as ShutdownRunner, f as Storage, _ as __getRuntime, g as __requestALS, h as __resetLifecycleHooks, i as __runStartHooks, j as __runWithRuntime, k as __setRuntime, o as onShutdown, l as onStart } from './index-
|
|
5
|
-
import { S as SchemaDef } from './index-
|
|
6
|
-
export { A as AnyColumn, C as ColumnBuilder, a as ColumnDef, b as ColumnMap, c as ColumnType, d as EXTENSION_DEPENDENCIES, e as EmbeddingModelRef, f as EnvSchemas, g as EnvServiceDatabase, h as EnvTables, E as EnvTypedDatabase, i as EnvTypedTable, I as InsertShape, O as OnDeleteAction, P as PALBASE_EXTENSIONS, j as PalbaseExtension, k as PolicyBuilder, l as PolicyCommand, m as PolicyDef, n as PolicyMode, R as RawConstraintDef, o as RowShape,
|
|
3
|
+
import { M as ModuleClients } from './index-B8v6hVyU.js';
|
|
4
|
+
export { C as Cache, D as Database, a as Documents, F as Flags, L as LifecycleHook, b as Log, N as Notifications, R as Realtime, c as RequestStore, d as RuntimeServices, S as Secrets, e as ShutdownRunner, f as Storage, _ as __getRuntime, g as __requestALS, h as __resetLifecycleHooks, i as __runStartHooks, j as __runWithRuntime, k as __setRuntime, o as onShutdown, l as onStart } from './index-B8v6hVyU.js';
|
|
5
|
+
import { S as SchemaDef } from './index-B4CcpqLb.js';
|
|
6
|
+
export { A as AnyColumn, C as ColumnBuilder, a as ColumnDef, b as ColumnMap, c as ColumnType, d as EXTENSION_DEPENDENCIES, e as EmbeddingModelRef, f as EnvSchemas, g as EnvServiceDatabase, h as EnvTables, E as EnvTypedDatabase, i as EnvTypedTable, I as InsertShape, O as OnDeleteAction, P as PALBASE_EXTENSIONS, j as PalbaseExtension, k as PolicyBuilder, l as PolicyCommand, m as PolicyDef, n as PolicyMode, R as RawConstraintDef, o as RowShape, T as TABLE_META, p as TableDef, q as TableHandle, r as TableInput, s as TxPlan, t as TxTables, u as TypedDB, v as TypedTable, w as TypedTx, x as bigint, y as boolean, z as defineSchema, B as defineTable, D as enumType, F as installationRef, G as integer, H as isPalbaseExtension, J as jsonb, K as makeTypedDB, L as numeric, M as openai, N as ownedByUser, Q as policy, U as raw, V as text, W as timestamp, X as userRef, Y as uuid, Z as vector } from './index-B4CcpqLb.js';
|
|
7
7
|
export { TableTypes, Tables } from './db/env.js';
|
|
8
8
|
export { PalbaseBucketName, PalbaseFlagKey, PalbaseSecretName } from './stack.js';
|
|
9
9
|
import { a as RouteOptions } from './registry-B8pld3fj.js';
|
|
@@ -368,7 +368,7 @@ declare function defineChannels(map: ChannelsInput): ChannelsDef;
|
|
|
368
368
|
* The output is FLAT: each table gets a `{ row: {...}; insert: {...} }` entry
|
|
369
369
|
* with plain TypeScript object types. The phantom `ColumnBuilder<...>` type
|
|
370
370
|
* NEVER appears in the generated `.d.ts` — that type only lives at authoring
|
|
371
|
-
* time inside `db
|
|
371
|
+
* time inside the project's `db/*.ts` schema files.
|
|
372
372
|
*/
|
|
373
373
|
|
|
374
374
|
/**
|
|
@@ -384,8 +384,9 @@ declare function defineChannels(map: ChannelsInput): ChannelsDef;
|
|
|
384
384
|
*
|
|
385
385
|
* @example
|
|
386
386
|
* import { makeEnvDts } from "@palbase/backend";
|
|
387
|
-
* import
|
|
388
|
-
*
|
|
387
|
+
* import publicSchema from "./db/public.js";
|
|
388
|
+
* import billing from "./db/billing.js";
|
|
389
|
+
* writeFileSync("palbase-env.d.ts", makeEnvDts([publicSchema, billing]));
|
|
389
390
|
*/
|
|
390
391
|
declare function makeEnvDts(schemas: readonly SchemaDef[]): string;
|
|
391
392
|
|
package/dist/index.js
CHANGED
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
openai,
|
|
18
18
|
ownedByUser,
|
|
19
19
|
policy,
|
|
20
|
+
qualifiedTableKey,
|
|
20
21
|
raw,
|
|
21
22
|
text,
|
|
22
23
|
timestamp,
|
|
@@ -24,11 +25,11 @@ import {
|
|
|
24
25
|
userRef,
|
|
25
26
|
uuid,
|
|
26
27
|
vector
|
|
27
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-HBOJLP2Z.js";
|
|
28
29
|
import {
|
|
29
30
|
defineError,
|
|
30
31
|
getErrorRegistry
|
|
31
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-YOY5DFQS.js";
|
|
32
33
|
import {
|
|
33
34
|
Cache,
|
|
34
35
|
Database,
|
|
@@ -79,7 +80,7 @@ import {
|
|
|
79
80
|
recordRoute,
|
|
80
81
|
recordThrows,
|
|
81
82
|
resolveEffectiveAuth
|
|
82
|
-
} from "./chunk-
|
|
83
|
+
} from "./chunk-35PNTIRN.js";
|
|
83
84
|
import "./chunk-7D4SUZUM.js";
|
|
84
85
|
|
|
85
86
|
// src/clients/http.ts
|
|
@@ -1059,64 +1060,73 @@ function optionalOnInsert(def) {
|
|
|
1059
1060
|
function forwardName(column) {
|
|
1060
1061
|
return column.endsWith("_id") ? column.slice(0, -3) : column;
|
|
1061
1062
|
}
|
|
1062
|
-
function
|
|
1063
|
-
return
|
|
1063
|
+
function describeOrigin(o) {
|
|
1064
|
+
return o.direction === "forward" ? `the foreign key "${o.table}.${o.column}"` : `the reverse of "${o.table}.${o.column}"`;
|
|
1065
|
+
}
|
|
1066
|
+
function renameCall(o) {
|
|
1067
|
+
if (o.direction === "reverse") return `references(() => \u2026, { reverseAs: "\u2026" })`;
|
|
1068
|
+
if (o.def.owns === true) {
|
|
1069
|
+
return `ownedByUser() takes no { as } \u2014 if "${o.column}" only POINTS at a user, declare it userRef({ onDelete: \u2026 }) instead`;
|
|
1070
|
+
}
|
|
1071
|
+
const target = o.def.references?.table;
|
|
1072
|
+
if (target === "auth.users") return `userRef({ onDelete: \u2026, as: "\u2026" })`;
|
|
1073
|
+
if (target === "auth.installations") return `installationRef({ onDelete: \u2026, as: "\u2026" })`;
|
|
1074
|
+
if (o.def.selfRefColumn !== void 0) return `selfReferences("\u2026", { as: "\u2026" })`;
|
|
1075
|
+
return `references(() => \u2026, { as: "\u2026" })`;
|
|
1064
1076
|
}
|
|
1065
1077
|
function buildRelations(schemas) {
|
|
1066
1078
|
const out = /* @__PURE__ */ new Map();
|
|
1067
|
-
const
|
|
1079
|
+
const taken = /* @__PURE__ */ new Map();
|
|
1068
1080
|
for (const schema of schemas) {
|
|
1069
1081
|
for (const t of Object.values(schema.tables)) {
|
|
1070
|
-
const key =
|
|
1082
|
+
const key = qualifiedTableKey(schema.name, t.name);
|
|
1071
1083
|
out.set(key, []);
|
|
1072
|
-
|
|
1084
|
+
taken.set(key, /* @__PURE__ */ new Map());
|
|
1073
1085
|
}
|
|
1074
1086
|
}
|
|
1087
|
+
const claim = (tableKey, name, origin, edge) => {
|
|
1088
|
+
const names = taken.get(tableKey);
|
|
1089
|
+
if (names === void 0) return;
|
|
1090
|
+
const held = names.get(name);
|
|
1091
|
+
if (held !== void 0) {
|
|
1092
|
+
if (held.def.owns === true && origin.def.owns === true) {
|
|
1093
|
+
throw new Error(
|
|
1094
|
+
`table "${tableKey}" declares TWO owner columns (${held.column}, ${origin.column}) \u2014 a table has at most ONE ownedByUser(). If the other column only POINTS at a user, declare it userRef({ onDelete: \u2026 }) instead.`
|
|
1095
|
+
);
|
|
1096
|
+
}
|
|
1097
|
+
const heldFix = renameCall(held);
|
|
1098
|
+
const originFix = renameCall(origin);
|
|
1099
|
+
const remedy = heldFix === originFix ? `rename one of them: ${heldFix}` : `rename one of them \u2014 "${held.table}.${held.column}": ${heldFix}; "${origin.table}.${origin.column}": ${originFix}`;
|
|
1100
|
+
throw new Error(
|
|
1101
|
+
`table "${tableKey}": ${describeOrigin(held)} and ${describeOrigin(origin)} both resolve to the relation name "${name}" \u2014 ${remedy}.`
|
|
1102
|
+
);
|
|
1103
|
+
}
|
|
1104
|
+
names.set(name, origin);
|
|
1105
|
+
out.get(tableKey)?.push(edge);
|
|
1106
|
+
};
|
|
1075
1107
|
for (const schema of schemas) {
|
|
1076
1108
|
for (const table of Object.values(schema.tables)) {
|
|
1077
|
-
const childKey =
|
|
1078
|
-
|
|
1079
|
-
if (bucket === void 0) continue;
|
|
1080
|
-
const byTarget = /* @__PURE__ */ new Map();
|
|
1081
|
-
for (const [col, builder] of Object.entries(table.columns)) {
|
|
1082
|
-
const ref = builder._def.references;
|
|
1083
|
-
if (ref === void 0) continue;
|
|
1084
|
-
const list = byTarget.get(ref.table) ?? [];
|
|
1085
|
-
list.push(col);
|
|
1086
|
-
byTarget.set(ref.table, list);
|
|
1087
|
-
}
|
|
1088
|
-
for (const [target, cols] of byTarget) {
|
|
1089
|
-
if (cols.length < 2) continue;
|
|
1090
|
-
const unnamed = cols.filter((c) => {
|
|
1091
|
-
const d = table.columns[c]?._def;
|
|
1092
|
-
return d?.refAs === void 0 && d?.owns !== true;
|
|
1093
|
-
});
|
|
1094
|
-
if (unnamed.length > 0) {
|
|
1095
|
-
throw new Error(
|
|
1096
|
-
`table "${table.name}" declares ${cols.length} foreign keys onto "${target}" (${cols.join(", ")}) \u2014 name each one: references(() => \u2026, { as: "\u2026" })`
|
|
1097
|
-
);
|
|
1098
|
-
}
|
|
1099
|
-
}
|
|
1109
|
+
const childKey = qualifiedTableKey(schema.name, table.name);
|
|
1110
|
+
if (!out.has(childKey)) continue;
|
|
1100
1111
|
for (const [col, builder] of Object.entries(table.columns)) {
|
|
1101
1112
|
const def = builder._def;
|
|
1102
1113
|
if (def.references === void 0) continue;
|
|
1114
|
+
const targetKey = def.references.table;
|
|
1103
1115
|
const name = def.owns === true ? "owner" : def.refAs ?? forwardName(col);
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
const
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
}
|
|
1119
|
-
parent.push({ name: reverse, to: childKey, kind: "many", via: col });
|
|
1116
|
+
claim(
|
|
1117
|
+
childKey,
|
|
1118
|
+
name,
|
|
1119
|
+
{ table: table.name, column: col, direction: "forward", def },
|
|
1120
|
+
{ name, to: targetKey, kind: "one", via: col }
|
|
1121
|
+
);
|
|
1122
|
+
if (!out.has(targetKey) || targetKey === childKey) continue;
|
|
1123
|
+
const reverse = def.reverseAs ?? table.name;
|
|
1124
|
+
claim(
|
|
1125
|
+
targetKey,
|
|
1126
|
+
reverse,
|
|
1127
|
+
{ table: table.name, column: col, direction: "reverse", def },
|
|
1128
|
+
{ name: reverse, to: childKey, kind: "many", via: col }
|
|
1129
|
+
);
|
|
1120
1130
|
}
|
|
1121
1131
|
}
|
|
1122
1132
|
}
|
|
@@ -1153,7 +1163,6 @@ function tableBlock(table, relations, indent) {
|
|
|
1153
1163
|
}
|
|
1154
1164
|
function makeEnvDts(schemas) {
|
|
1155
1165
|
const relations = buildRelations(schemas);
|
|
1156
|
-
const qualify2 = (schemaName, table) => schemaName === "public" ? table : `${schemaName}.${table}`;
|
|
1157
1166
|
const publicSchema = schemas.find((s) => s.name === "public");
|
|
1158
1167
|
const others = schemas.filter((s) => s.name !== "public");
|
|
1159
1168
|
const publicBlocks = Object.keys(publicSchema?.tables ?? {}).map(
|
|
@@ -1164,7 +1173,7 @@ ${publicBlocks.join("\n")}
|
|
|
1164
1173
|
` : "";
|
|
1165
1174
|
const schemaBlocks = others.map((schema) => {
|
|
1166
1175
|
const inner = Object.keys(schema.tables).map(
|
|
1167
|
-
(name) => tableBlock(schema.tables[name], relations.get(
|
|
1176
|
+
(name) => tableBlock(schema.tables[name], relations.get(qualifiedTableKey(schema.name, name)) ?? [], " ")
|
|
1168
1177
|
);
|
|
1169
1178
|
return ` ${schema.name}: {
|
|
1170
1179
|
${inner.join("\n")}
|