covara 0.8.1 → 0.9.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/README.md +3 -3
- package/dist/auth/scope.d.ts.map +1 -1
- package/dist/auth/scope.js +4 -7
- package/dist/auth/scope.js.map +1 -1
- package/dist/cli/templates/package-json.d.ts.map +1 -1
- package/dist/cli/templates/package-json.js +32 -1
- package/dist/cli/templates/package-json.js.map +1 -1
- package/dist/cli/templates/source.d.ts +4 -4
- package/dist/cli/templates/source.d.ts.map +1 -1
- package/dist/cli/templates/source.js +20 -10
- package/dist/cli/templates/source.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/resource/column-ref.d.ts +67 -0
- package/dist/resource/column-ref.d.ts.map +1 -0
- package/dist/resource/column-ref.js +64 -0
- package/dist/resource/column-ref.js.map +1 -0
- package/dist/resource/hook.d.ts +2 -1
- package/dist/resource/hook.d.ts.map +1 -1
- package/dist/resource/hook.js +16 -3
- package/dist/resource/hook.js.map +1 -1
- package/dist/resource/pagination.d.ts +9 -5
- package/dist/resource/pagination.d.ts.map +1 -1
- package/dist/resource/pagination.js +44 -13
- package/dist/resource/pagination.js.map +1 -1
- package/dist/resource/types.d.ts +4 -0
- package/dist/resource/types.d.ts.map +1 -1
- package/dist/server/app.d.ts +3 -3
- package/dist/server/app.d.ts.map +1 -1
- package/dist/server/app.js.map +1 -1
- package/dist/storage/resource.d.ts +5 -3
- package/dist/storage/resource.d.ts.map +1 -1
- package/dist/storage/resource.js +5 -1
- package/dist/storage/resource.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@ const app = createCovara({ cors: true })
|
|
|
33
33
|
.resource("/todos", todosTable, {
|
|
34
34
|
id: todosTable.id,
|
|
35
35
|
db,
|
|
36
|
-
auth: { update: async (user) => rsql`userId
|
|
36
|
+
auth: { update: async (user) => rsql`userId==${user.id}` },
|
|
37
37
|
});
|
|
38
38
|
|
|
39
39
|
// client: the API becomes live UI
|
|
@@ -294,8 +294,8 @@ app.resource("/posts", postsTable, {
|
|
|
294
294
|
// Authorization scopes (row-level security via RSQL)
|
|
295
295
|
auth: {
|
|
296
296
|
public: { read: true },
|
|
297
|
-
update: async (user) => rsql`authorId
|
|
298
|
-
delete: async (user) => rsql`authorId
|
|
297
|
+
update: async (user) => rsql`authorId==${user.id}`,
|
|
298
|
+
delete: async (user) => rsql`authorId==${user.id}`,
|
|
299
299
|
},
|
|
300
300
|
|
|
301
301
|
// Relations
|
package/dist/auth/scope.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/auth/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiB,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI1F,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9E,qBAAa,aAAa;IAEtB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;gBADZ,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,MAAM;IAG9B,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/auth/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiB,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI1F,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9E,qBAAa,aAAa;IAEtB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;gBADZ,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,MAAM;IAG9B,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAavC,OAAO,CAAC,gBAAgB;IAelB,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAoB/E,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAS5E,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;CAWhG;AAED,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,WAAW,GAAG,SAAS,EAC/B,cAAc,MAAM,KACnB,aAEF,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,WAAW,aAAa,EACxB,mBAAmB,MAAM,KACxB,MAeF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,UAAU,aAAa,EACvB,WAAW,SAAS,EACpB,MAAM,WAAW,GAAG,IAAI,EACxB,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,eAAe,CAAC,IAAI,EAAE,MAAM,KAAK;IAAE,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAA;CAAE,KACtE,OAAO,CAAC,OAAO,CAiBjB,CAAC;AAEF,eAAO,MAAM,aAAa;wCACY,WAAW;mDAOA,WAAW;4DAkB/C,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,KACtC,WAAW;qCAU2B,WAAW;mCAYvB,WAAW;uBAOvB,WAAW;CAkB7B,CAAC"}
|
package/dist/auth/scope.js
CHANGED
|
@@ -8,16 +8,13 @@ export class ScopeResolver {
|
|
|
8
8
|
isPublic(operation) {
|
|
9
9
|
if (!this.config.public)
|
|
10
10
|
return false;
|
|
11
|
+
// Boolean form stays read/subscribe-only (writes require auth) for safety and
|
|
12
|
+
// back-compat. The object form opts each operation in explicitly, including
|
|
13
|
+
// create/update/delete for fully-public resources.
|
|
11
14
|
if (typeof this.config.public === "boolean") {
|
|
12
15
|
return this.config.public && (operation === "read" || operation === "subscribe");
|
|
13
16
|
}
|
|
14
|
-
|
|
15
|
-
return this.config.public.read === true;
|
|
16
|
-
}
|
|
17
|
-
if (operation === "subscribe") {
|
|
18
|
-
return this.config.public.subscribe === true;
|
|
19
|
-
}
|
|
20
|
-
return false;
|
|
17
|
+
return this.config.public[operation] === true;
|
|
21
18
|
}
|
|
22
19
|
getScopeFunction(operation) {
|
|
23
20
|
switch (operation) {
|
package/dist/auth/scope.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/auth/scope.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIrE,MAAM,OAAO,aAAa;IACxB,YACU,MAAmB,EACnB,YAAoB;QADpB,WAAM,GAAN,MAAM,CAAa;QACnB,iBAAY,GAAZ,YAAY,CAAQ;IAC3B,CAAC;IAEJ,QAAQ,CAAC,SAAoB;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAEtC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,WAAW,CAAC,CAAC;QACnF,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/auth/scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/package-json.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/package-json.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAiDrD,eAAO,MAAM,iBAAiB,GAAI,SAAS,eAAe,KAAG,MA6D5D,CAAC"}
|
|
@@ -1,5 +1,36 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
// Pin the generated `covara` dependency to the version of the CLI doing the
|
|
5
|
+
// scaffolding — that version is, by definition, published (it's the same package
|
|
6
|
+
// the user invoked), so `npm install` always resolves. Avoids hand-syncing a
|
|
7
|
+
// hardcoded range with package.json on every release. Falls back to the literal
|
|
8
|
+
// below only if the CLI's own package.json can't be located.
|
|
9
|
+
const FALLBACK_COVARA_VERSION = "^0.9.0";
|
|
10
|
+
const resolveCovaraVersion = () => {
|
|
11
|
+
try {
|
|
12
|
+
let dir = path.dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
for (let i = 0; i < 10; i++) {
|
|
14
|
+
const candidate = path.join(dir, "package.json");
|
|
15
|
+
if (fs.existsSync(candidate)) {
|
|
16
|
+
const pkg = JSON.parse(fs.readFileSync(candidate, "utf8"));
|
|
17
|
+
if (pkg.name === "covara" && pkg.version) {
|
|
18
|
+
return `^${pkg.version}`;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const parent = path.dirname(dir);
|
|
22
|
+
if (parent === dir)
|
|
23
|
+
break;
|
|
24
|
+
dir = parent;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// fall through to the fallback
|
|
29
|
+
}
|
|
30
|
+
return FALLBACK_COVARA_VERSION;
|
|
31
|
+
};
|
|
1
32
|
const VERSIONS = {
|
|
2
|
-
covara:
|
|
33
|
+
covara: resolveCovaraVersion(),
|
|
3
34
|
hono: "^4.12.25",
|
|
4
35
|
drizzleOrm: "^0.45.1",
|
|
5
36
|
zod: "^4.3.5",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../../src/cli/templates/package-json.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../../src/cli/templates/package-json.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,10 @@ import type { ScaffoldOptions } from "../options.js";
|
|
|
2
2
|
export declare const SQLITE_SCHEMA = "import { sqliteTable, text, integer } from \"drizzle-orm/sqlite-core\";\n\nexport const todos = sqliteTable(\"todos\", {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n title: text(\"title\").notNull(),\n completed: integer(\"completed\", { mode: \"boolean\" }).notNull().default(false),\n createdAt: integer(\"created_at\", { mode: \"timestamp\" })\n .notNull()\n .$defaultFn(() => new Date()),\n});\n";
|
|
3
3
|
export declare const POSTGRES_SCHEMA = "import { pgTable, text, boolean, timestamp } from \"drizzle-orm/pg-core\";\n\nexport const todos = pgTable(\"todos\", {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n title: text(\"title\").notNull(),\n completed: boolean(\"completed\").notNull().default(false),\n createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n});\n";
|
|
4
4
|
export declare const renderSchema: (options: ScaffoldOptions) => string;
|
|
5
|
-
export declare const NODE_SQLITE_INDEX = "import { createClient } from \"@libsql/client\";\nimport { drizzle } from \"drizzle-orm/libsql\";\nimport { createCovara } from \"covara\";\nimport { startServer } from \"covara/node\";\nimport { todos } from \"./schema.js\";\n\nconst client = createClient({\n url: process.env.DB_FILE_NAME ?? \"file:./dev.db\",\n});\nconst db = drizzle(client);\n\nconst app = createCovara({ cors: true }).resource(todos, {\n db,\n id: todos.id,\n auth: { public: true },\n});\n\nconst server = await startServer(app, {\n port: Number(process.env.PORT ?? 3000),\n});\n\nconsole.log(`Covara running at http://localhost:${server.port}`);\nconsole.log(`
|
|
6
|
-
export declare const NODE_POSTGRES_INDEX = "import postgres from \"postgres\";\nimport { drizzle } from \"drizzle-orm/postgres-js\";\nimport { createCovara } from \"covara\";\nimport { startServer } from \"covara/node\";\nimport { todos } from \"./schema.js\";\n\nif (!process.env.DATABASE_URL) {\n throw new Error(\"DATABASE_URL is required\");\n}\n\nconst client = postgres(process.env.DATABASE_URL);\nconst db = drizzle(client);\n\nconst app = createCovara({ cors: true }).resource(todos, {\n db,\n id: todos.id,\n auth: { public: true },\n});\n\nconst server = await startServer(app, {\n port: Number(process.env.PORT ?? 3000),\n});\n\nconsole.log(`Covara running at http://localhost:${server.port}`);\nconsole.log(`
|
|
5
|
+
export declare const NODE_SQLITE_INDEX = "import { createClient } from \"@libsql/client\";\nimport { drizzle } from \"drizzle-orm/libsql\";\nimport { createCovara } from \"covara\";\nimport { startServer } from \"covara/node\";\nimport { todos } from \"./schema.js\";\n\nconst client = createClient({\n url: process.env.DB_FILE_NAME ?? \"file:./dev.db\",\n});\nconst db = drizzle(client);\n\nconst app = createCovara({ cors: true, adminUI: true }).resource(todos, {\n db,\n id: todos.id,\n // Public CRUD so the starter works end-to-end. Lock this down with auth\n // scopes before deploying: https://github.com/kahveciderin/covara#auth\n auth: { public: { read: true, create: true, update: true, delete: true } },\n});\n\nconst server = await startServer(app, {\n port: Number(process.env.PORT ?? 3000),\n});\n\nconsole.log(`Covara running at http://localhost:${server.port}`);\nconsole.log(`Create: curl -X POST http://localhost:${server.port}/api/todos -H 'content-type: application/json' -d '{\"title\":\"hello\"}'`);\nconsole.log(`List: curl http://localhost:${server.port}/api/todos`);\n";
|
|
6
|
+
export declare const NODE_POSTGRES_INDEX = "import postgres from \"postgres\";\nimport { drizzle } from \"drizzle-orm/postgres-js\";\nimport { createCovara } from \"covara\";\nimport { startServer } from \"covara/node\";\nimport { todos } from \"./schema.js\";\n\nif (!process.env.DATABASE_URL) {\n throw new Error(\"DATABASE_URL is required\");\n}\n\nconst client = postgres(process.env.DATABASE_URL);\nconst db = drizzle(client);\n\nconst app = createCovara({ cors: true, adminUI: true }).resource(todos, {\n db,\n id: todos.id,\n // Public CRUD so the starter works end-to-end. Lock this down with auth\n // scopes before deploying: https://github.com/kahveciderin/covara#auth\n auth: { public: { read: true, create: true, update: true, delete: true } },\n});\n\nconst server = await startServer(app, {\n port: Number(process.env.PORT ?? 3000),\n});\n\nconsole.log(`Covara running at http://localhost:${server.port}`);\nconsole.log(`Create: curl -X POST http://localhost:${server.port}/api/todos -H 'content-type: application/json' -d '{\"title\":\"hello\"}'`);\nconsole.log(`List: curl http://localhost:${server.port}/api/todos`);\n";
|
|
7
7
|
export declare const renderNodeIndex: (options: ScaffoldOptions) => string;
|
|
8
|
-
export declare const CLOUDFLARE_D1_WORKER = "import { drizzle } from \"drizzle-orm/d1\";\nimport {\n createCovara,\n createDurableObjectKV,\n setGlobalKV,\n initializeEventSubscription,\n type CovaraApp,\n type DurableObjectNamespaceLike,\n} from \"covara\";\nimport { todos } from \"./schema\";\n\nexport { CovaraKVDurableObject } from \"covara\";\n\ninterface Env {\n DB: D1Database;\n COVARA_KV: DurableObjectNamespaceLike;\n}\n\nlet app: CovaraApp | undefined;\n\nconst buildApp = (env: Env): CovaraApp => {\n setGlobalKV(createDurableObjectKV(env.COVARA_KV));\n void initializeEventSubscription();\n\n const db = drizzle(env.DB);\n return createCovara({ cors: true }).resource(todos, {\n db,\n id: todos.id,\n auth: { public: true },\n });\n};\n\nexport default {\n fetch(request: Request, env: Env, ctx: ExecutionContext): Response | Promise<Response> {\n app ??= buildApp(env);\n return app.fetch(request, env, ctx);\n },\n};\n";
|
|
9
|
-
export declare const CLOUDFLARE_POSTGRES_WORKER = "import postgres from \"postgres\";\nimport { drizzle } from \"drizzle-orm/postgres-js\";\nimport {\n createCovara,\n createDurableObjectKV,\n setGlobalKV,\n initializeEventSubscription,\n type CovaraApp,\n type DurableObjectNamespaceLike,\n} from \"covara\";\nimport { todos } from \"./schema\";\n\nexport { CovaraKVDurableObject } from \"covara\";\n\ninterface Env {\n DATABASE_URL: string;\n COVARA_KV: DurableObjectNamespaceLike;\n}\n\nlet app: CovaraApp | undefined;\n\nconst buildApp = (env: Env): CovaraApp => {\n setGlobalKV(createDurableObjectKV(env.COVARA_KV));\n void initializeEventSubscription();\n\n const client = postgres(env.DATABASE_URL, { max: 5, fetch_types: false });\n const db = drizzle(client);\n return createCovara({ cors: true }).resource(todos, {\n db,\n id: todos.id,\n auth: { public: true },\n });\n};\n\nexport default {\n fetch(request: Request, env: Env, ctx: ExecutionContext): Response | Promise<Response> {\n app ??= buildApp(env);\n return app.fetch(request, env, ctx);\n },\n};\n";
|
|
8
|
+
export declare const CLOUDFLARE_D1_WORKER = "import { drizzle } from \"drizzle-orm/d1\";\nimport {\n createCovara,\n createDurableObjectKV,\n setGlobalKV,\n initializeEventSubscription,\n type CovaraApp,\n type DurableObjectNamespaceLike,\n} from \"covara\";\nimport { todos } from \"./schema\";\n\nexport { CovaraKVDurableObject } from \"covara\";\n\ninterface Env {\n DB: D1Database;\n COVARA_KV: DurableObjectNamespaceLike;\n}\n\nlet app: CovaraApp | undefined;\n\nconst buildApp = (env: Env): CovaraApp => {\n setGlobalKV(createDurableObjectKV(env.COVARA_KV));\n void initializeEventSubscription();\n\n const db = drizzle(env.DB);\n return createCovara({ cors: true, adminUI: true }).resource(todos, {\n db,\n id: todos.id,\n // Public CRUD so the starter works end-to-end. Lock this down with auth\n // scopes before deploying: https://github.com/kahveciderin/covara#auth\n auth: { public: { read: true, create: true, update: true, delete: true } },\n });\n};\n\nexport default {\n fetch(request: Request, env: Env, ctx: ExecutionContext): Response | Promise<Response> {\n app ??= buildApp(env);\n return app.fetch(request, env, ctx);\n },\n};\n";
|
|
9
|
+
export declare const CLOUDFLARE_POSTGRES_WORKER = "import postgres from \"postgres\";\nimport { drizzle } from \"drizzle-orm/postgres-js\";\nimport {\n createCovara,\n createDurableObjectKV,\n setGlobalKV,\n initializeEventSubscription,\n type CovaraApp,\n type DurableObjectNamespaceLike,\n} from \"covara\";\nimport { todos } from \"./schema\";\n\nexport { CovaraKVDurableObject } from \"covara\";\n\ninterface Env {\n DATABASE_URL: string;\n COVARA_KV: DurableObjectNamespaceLike;\n}\n\nlet app: CovaraApp | undefined;\n\nconst buildApp = (env: Env): CovaraApp => {\n setGlobalKV(createDurableObjectKV(env.COVARA_KV));\n void initializeEventSubscription();\n\n const client = postgres(env.DATABASE_URL, { max: 5, fetch_types: false });\n const db = drizzle(client);\n return createCovara({ cors: true, adminUI: true }).resource(todos, {\n db,\n id: todos.id,\n // Public CRUD so the starter works end-to-end. Lock this down with auth\n // scopes before deploying: https://github.com/kahveciderin/covara#auth\n auth: { public: { read: true, create: true, update: true, delete: true } },\n });\n};\n\nexport default {\n fetch(request: Request, env: Env, ctx: ExecutionContext): Response | Promise<Response> {\n app ??= buildApp(env);\n return app.fetch(request, env, ctx);\n },\n};\n";
|
|
10
10
|
export declare const renderWorker: (options: ScaffoldOptions) => string;
|
|
11
11
|
//# sourceMappingURL=source.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,eAAO,MAAM,aAAa,scAYzB,CAAC;AAEF,eAAO,MAAM,eAAe,2XAU3B,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAS,eAAe,KAAG,MACG,CAAC;AAE5D,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,eAAO,MAAM,aAAa,scAYzB,CAAC;AAEF,eAAO,MAAM,eAAe,2XAU3B,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAS,eAAe,KAAG,MACG,CAAC;AAE5D,eAAO,MAAM,iBAAiB,yiCA0B7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,klCA4B/B,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,SAAS,eAAe,KAAG,MACQ,CAAC;AAEpE,eAAO,MAAM,oBAAoB,0nCAwChC,CAAC;AAEF,eAAO,MAAM,0BAA0B,2vCA0CtC,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAS,eAAe,KAAG,MACqB,CAAC"}
|
|
@@ -34,10 +34,12 @@ const client = createClient({
|
|
|
34
34
|
});
|
|
35
35
|
const db = drizzle(client);
|
|
36
36
|
|
|
37
|
-
const app = createCovara({ cors: true }).resource(todos, {
|
|
37
|
+
const app = createCovara({ cors: true, adminUI: true }).resource(todos, {
|
|
38
38
|
db,
|
|
39
39
|
id: todos.id,
|
|
40
|
-
|
|
40
|
+
// Public CRUD so the starter works end-to-end. Lock this down with auth
|
|
41
|
+
// scopes before deploying: https://github.com/kahveciderin/covara#auth
|
|
42
|
+
auth: { public: { read: true, create: true, update: true, delete: true } },
|
|
41
43
|
});
|
|
42
44
|
|
|
43
45
|
const server = await startServer(app, {
|
|
@@ -45,7 +47,8 @@ const server = await startServer(app, {
|
|
|
45
47
|
});
|
|
46
48
|
|
|
47
49
|
console.log(\`Covara running at http://localhost:\${server.port}\`);
|
|
48
|
-
console.log(\`
|
|
50
|
+
console.log(\`Create: curl -X POST http://localhost:\${server.port}/api/todos -H 'content-type: application/json' -d '{"title":"hello"}'\`);
|
|
51
|
+
console.log(\`List: curl http://localhost:\${server.port}/api/todos\`);
|
|
49
52
|
`;
|
|
50
53
|
export const NODE_POSTGRES_INDEX = `import postgres from "postgres";
|
|
51
54
|
import { drizzle } from "drizzle-orm/postgres-js";
|
|
@@ -60,10 +63,12 @@ if (!process.env.DATABASE_URL) {
|
|
|
60
63
|
const client = postgres(process.env.DATABASE_URL);
|
|
61
64
|
const db = drizzle(client);
|
|
62
65
|
|
|
63
|
-
const app = createCovara({ cors: true }).resource(todos, {
|
|
66
|
+
const app = createCovara({ cors: true, adminUI: true }).resource(todos, {
|
|
64
67
|
db,
|
|
65
68
|
id: todos.id,
|
|
66
|
-
|
|
69
|
+
// Public CRUD so the starter works end-to-end. Lock this down with auth
|
|
70
|
+
// scopes before deploying: https://github.com/kahveciderin/covara#auth
|
|
71
|
+
auth: { public: { read: true, create: true, update: true, delete: true } },
|
|
67
72
|
});
|
|
68
73
|
|
|
69
74
|
const server = await startServer(app, {
|
|
@@ -71,7 +76,8 @@ const server = await startServer(app, {
|
|
|
71
76
|
});
|
|
72
77
|
|
|
73
78
|
console.log(\`Covara running at http://localhost:\${server.port}\`);
|
|
74
|
-
console.log(\`
|
|
79
|
+
console.log(\`Create: curl -X POST http://localhost:\${server.port}/api/todos -H 'content-type: application/json' -d '{"title":"hello"}'\`);
|
|
80
|
+
console.log(\`List: curl http://localhost:\${server.port}/api/todos\`);
|
|
75
81
|
`;
|
|
76
82
|
export const renderNodeIndex = (options) => options.db === "sqlite" ? NODE_SQLITE_INDEX : NODE_POSTGRES_INDEX;
|
|
77
83
|
export const CLOUDFLARE_D1_WORKER = `import { drizzle } from "drizzle-orm/d1";
|
|
@@ -99,10 +105,12 @@ const buildApp = (env: Env): CovaraApp => {
|
|
|
99
105
|
void initializeEventSubscription();
|
|
100
106
|
|
|
101
107
|
const db = drizzle(env.DB);
|
|
102
|
-
return createCovara({ cors: true }).resource(todos, {
|
|
108
|
+
return createCovara({ cors: true, adminUI: true }).resource(todos, {
|
|
103
109
|
db,
|
|
104
110
|
id: todos.id,
|
|
105
|
-
|
|
111
|
+
// Public CRUD so the starter works end-to-end. Lock this down with auth
|
|
112
|
+
// scopes before deploying: https://github.com/kahveciderin/covara#auth
|
|
113
|
+
auth: { public: { read: true, create: true, update: true, delete: true } },
|
|
106
114
|
});
|
|
107
115
|
};
|
|
108
116
|
|
|
@@ -140,10 +148,12 @@ const buildApp = (env: Env): CovaraApp => {
|
|
|
140
148
|
|
|
141
149
|
const client = postgres(env.DATABASE_URL, { max: 5, fetch_types: false });
|
|
142
150
|
const db = drizzle(client);
|
|
143
|
-
return createCovara({ cors: true }).resource(todos, {
|
|
151
|
+
return createCovara({ cors: true, adminUI: true }).resource(todos, {
|
|
144
152
|
db,
|
|
145
153
|
id: todos.id,
|
|
146
|
-
|
|
154
|
+
// Public CRUD so the starter works end-to-end. Lock this down with auth
|
|
155
|
+
// scopes before deploying: https://github.com/kahveciderin/covara#auth
|
|
156
|
+
auth: { public: { read: true, create: true, update: true, delete: true } },
|
|
147
157
|
});
|
|
148
158
|
};
|
|
149
159
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/cli/templates/source.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;CAY5B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;CAU9B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAwB,EAAU,EAAE,CAC/D,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC;AAE5D,MAAM,CAAC,MAAM,iBAAiB,GAAG
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/cli/templates/source.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;CAY5B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;CAU9B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAwB,EAAU,EAAE,CAC/D,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC;AAE5D,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BhC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BlC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAwB,EAAU,EAAE,CAClE,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,CAAC;AAEpE,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCnC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CzC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAwB,EAAU,EAAE,CAC/D,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,0BAA0B,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,9 +3,10 @@ export type { CovaraOptions, CovaraAuthSetup } from "./server/app.js";
|
|
|
3
3
|
export { useResource } from "./resource/hook.js";
|
|
4
4
|
export { createResourceFilter, type Filter } from "./resource/filter.js";
|
|
5
5
|
export { changelog, recordCreate, recordUpdate, recordDelete } from "./resource/changelog.js";
|
|
6
|
-
export { encodeCursor, decodeCursor, parseOrderBy, createPagination, type CursorData, type PaginationConfig, type OrderByField, } from "./resource/pagination.js";
|
|
6
|
+
export { encodeCursor, decodeCursor, parseOrderBy, createPagination, setGlobalCursorSigningSecret, getGlobalCursorSigningSecret, type CursorData, type PaginationConfig, type OrderByField, } from "./resource/pagination.js";
|
|
7
7
|
export { ResourceError, NotFoundError, ValidationError, UnauthorizedError, ForbiddenError, RateLimitError, BatchLimitError, ConflictError, SearchError, SearchNotConfiguredError, formatErrorResponse, formatZodError, } from "./resource/error.js";
|
|
8
8
|
export type { ResourceConfig, ScopeConfig, ScopeFunction, BatchConfig, CustomOperator, LifecycleHooks, ProcedureDefinition, ProcedureContext, WriteEffect, } from "./resource/types.js";
|
|
9
|
+
export { columnName, columnNames, type ColumnRef, type ResourceConfigInput, type ETagResourceConfigInput, type FieldPoliciesInput, type FilterConfigInput, type ResourceSearchConfigInput, type SoftDeleteConfigInput, type RelationConfigInput, type RelationsConfigInput, } from "./resource/column-ref.js";
|
|
9
10
|
export { createSubscription as createServerSubscription, pushUpdatesToSubscriptions, pushDeletesToSubscriptions, clearAllSubscriptions, type RelationLoader, } from "./resource/subscription.js";
|
|
10
11
|
export { defineProcedure, executeProcedure, createTimestampHooks, composeHooks, } from "./resource/procedures.js";
|
|
11
12
|
export { parseSelect, applyProjection } from "./resource/query.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,YAAY,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,eAAe,EACf,aAAa,EACb,WAAW,EACX,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EACX,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,GACZ,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,8 +5,9 @@ export { createCovara, CovaraApp } from "./server/app.js";
|
|
|
5
5
|
export { useResource } from "./resource/hook.js";
|
|
6
6
|
export { createResourceFilter } from "./resource/filter.js";
|
|
7
7
|
export { changelog, recordCreate, recordUpdate, recordDelete } from "./resource/changelog.js";
|
|
8
|
-
export { encodeCursor, decodeCursor, parseOrderBy, createPagination, } from "./resource/pagination.js";
|
|
8
|
+
export { encodeCursor, decodeCursor, parseOrderBy, createPagination, setGlobalCursorSigningSecret, getGlobalCursorSigningSecret, } from "./resource/pagination.js";
|
|
9
9
|
export { ResourceError, NotFoundError, ValidationError, UnauthorizedError, ForbiddenError, RateLimitError, BatchLimitError, ConflictError, SearchError, SearchNotConfiguredError, formatErrorResponse, formatZodError, } from "./resource/error.js";
|
|
10
|
+
export { columnName, columnNames, } from "./resource/column-ref.js";
|
|
10
11
|
// Subscriptions
|
|
11
12
|
export { createSubscription as createServerSubscription, pushUpdatesToSubscriptions, pushDeletesToSubscriptions, clearAllSubscriptions, } from "./resource/subscription.js";
|
|
12
13
|
// Procedures
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,cAAc;AACd,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGvD,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAe,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { AnyColumn, Table, TableConfig } from "drizzle-orm";
|
|
2
|
+
import type { ResourceConfig, FilterConfig, ResourceSearchConfig, SoftDeleteConfig, RelationConfig, SearchFieldConfig } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* A reference to a table column in resource config. Prefer passing the Drizzle
|
|
5
|
+
* column object (e.g. `todos.userId`), the same way `id` is given. Passing the
|
|
6
|
+
* column name as a string is supported but **deprecated** — it isn't checked
|
|
7
|
+
* against the schema and will be removed in a future major.
|
|
8
|
+
*/
|
|
9
|
+
export type ColumnRef = AnyColumn | string;
|
|
10
|
+
/** Resolve a column reference (column object or deprecated string) to its name. */
|
|
11
|
+
export declare const columnName: (ref: ColumnRef) => string;
|
|
12
|
+
/** Resolve an array of column references to their names. */
|
|
13
|
+
export declare function columnNames(refs: ColumnRef[]): string[];
|
|
14
|
+
export declare function columnNames(refs: ColumnRef[] | undefined): string[] | undefined;
|
|
15
|
+
export interface ETagResourceConfigInput {
|
|
16
|
+
versionField?: ColumnRef;
|
|
17
|
+
updatedAtField?: ColumnRef;
|
|
18
|
+
idField?: ColumnRef;
|
|
19
|
+
algorithm?: "weak" | "strong";
|
|
20
|
+
}
|
|
21
|
+
export interface FieldPoliciesInput {
|
|
22
|
+
readable?: ColumnRef[];
|
|
23
|
+
writable?: ColumnRef[];
|
|
24
|
+
filterable?: ColumnRef[];
|
|
25
|
+
sortable?: ColumnRef[];
|
|
26
|
+
aggregatable?: {
|
|
27
|
+
groupBy?: ColumnRef[];
|
|
28
|
+
metrics?: ColumnRef[];
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export type FilterConfigInput = Omit<FilterConfig, "allowedFields"> & {
|
|
32
|
+
allowedFields?: ColumnRef[];
|
|
33
|
+
};
|
|
34
|
+
export type ResourceSearchConfigInput = Omit<ResourceSearchConfig, "fields"> & {
|
|
35
|
+
fields?: ColumnRef[] | Record<string, SearchFieldConfig>;
|
|
36
|
+
};
|
|
37
|
+
export type SoftDeleteConfigInput = Omit<SoftDeleteConfig, "field"> & {
|
|
38
|
+
field: ColumnRef;
|
|
39
|
+
};
|
|
40
|
+
export type RelationConfigInput = Omit<RelationConfig, "defaultSelect"> & {
|
|
41
|
+
defaultSelect?: ColumnRef[];
|
|
42
|
+
};
|
|
43
|
+
export interface RelationsConfigInput {
|
|
44
|
+
[relationName: string]: RelationConfigInput;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Public resource config: identical to {@link ResourceConfig} except every field
|
|
48
|
+
* that names a column also accepts the Drizzle column object (preferred). Use
|
|
49
|
+
* {@link normalizeResourceConfig} to convert it to the string-based config the
|
|
50
|
+
* rest of the resource layer consumes.
|
|
51
|
+
*/
|
|
52
|
+
export type ResourceConfigInput<TConfig extends TableConfig, TTable extends Table<TConfig>> = Omit<ResourceConfig<TConfig, TTable>, "etag" | "fields" | "filter" | "generatedFields" | "search" | "softDelete" | "relations"> & {
|
|
53
|
+
etag?: ETagResourceConfigInput;
|
|
54
|
+
fields?: FieldPoliciesInput;
|
|
55
|
+
filter?: FilterConfigInput;
|
|
56
|
+
generatedFields?: ColumnRef[];
|
|
57
|
+
search?: ResourceSearchConfigInput;
|
|
58
|
+
softDelete?: SoftDeleteConfigInput;
|
|
59
|
+
relations?: RelationsConfigInput;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Convert a public {@link ResourceConfigInput} (which may carry Drizzle column
|
|
63
|
+
* objects) to the string-based {@link ResourceConfig} the resource layer uses.
|
|
64
|
+
* Does not mutate the input — only the touched sub-objects are shallow-cloned.
|
|
65
|
+
*/
|
|
66
|
+
export declare const normalizeResourceConfig: <TConfig extends TableConfig, TTable extends Table<TConfig>>(config: ResourceConfigInput<TConfig, TTable>) => ResourceConfig<TConfig, TTable>;
|
|
67
|
+
//# sourceMappingURL=column-ref.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-ref.d.ts","sourceRoot":"","sources":["../../src/resource/column-ref.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
const isColumn = (ref) => typeof ref !== "string";
|
|
2
|
+
/** Resolve a column reference (column object or deprecated string) to its name. */
|
|
3
|
+
export const columnName = (ref) => isColumn(ref) ? ref.name : ref;
|
|
4
|
+
export function columnNames(refs) {
|
|
5
|
+
return refs?.map(columnName);
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Convert a public {@link ResourceConfigInput} (which may carry Drizzle column
|
|
9
|
+
* objects) to the string-based {@link ResourceConfig} the resource layer uses.
|
|
10
|
+
* Does not mutate the input — only the touched sub-objects are shallow-cloned.
|
|
11
|
+
*/
|
|
12
|
+
export const normalizeResourceConfig = (config) => {
|
|
13
|
+
const out = { ...config };
|
|
14
|
+
if (config.etag) {
|
|
15
|
+
const e = config.etag;
|
|
16
|
+
out.etag = {
|
|
17
|
+
...e,
|
|
18
|
+
versionField: e.versionField === undefined ? undefined : columnName(e.versionField),
|
|
19
|
+
updatedAtField: e.updatedAtField === undefined ? undefined : columnName(e.updatedAtField),
|
|
20
|
+
idField: e.idField === undefined ? undefined : columnName(e.idField),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
if (config.softDelete) {
|
|
24
|
+
out.softDelete = { ...config.softDelete, field: columnName(config.softDelete.field) };
|
|
25
|
+
}
|
|
26
|
+
if (config.fields) {
|
|
27
|
+
const f = config.fields;
|
|
28
|
+
out.fields = {
|
|
29
|
+
...f,
|
|
30
|
+
readable: columnNames(f.readable),
|
|
31
|
+
writable: columnNames(f.writable),
|
|
32
|
+
filterable: columnNames(f.filterable),
|
|
33
|
+
sortable: columnNames(f.sortable),
|
|
34
|
+
aggregatable: f.aggregatable
|
|
35
|
+
? {
|
|
36
|
+
groupBy: columnNames(f.aggregatable.groupBy),
|
|
37
|
+
metrics: columnNames(f.aggregatable.metrics),
|
|
38
|
+
}
|
|
39
|
+
: undefined,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
if (config.filter?.allowedFields) {
|
|
43
|
+
out.filter = { ...config.filter, allowedFields: columnNames(config.filter.allowedFields) };
|
|
44
|
+
}
|
|
45
|
+
if (config.generatedFields) {
|
|
46
|
+
out.generatedFields = columnNames(config.generatedFields);
|
|
47
|
+
}
|
|
48
|
+
// Search field list (array form). The record form is keyed by name and left
|
|
49
|
+
// as-is (object keys can't be column objects).
|
|
50
|
+
if (config.search && Array.isArray(config.search.fields)) {
|
|
51
|
+
out.search = { ...config.search, fields: columnNames(config.search.fields) };
|
|
52
|
+
}
|
|
53
|
+
if (config.relations) {
|
|
54
|
+
const relations = {};
|
|
55
|
+
for (const [name, relation] of Object.entries(config.relations)) {
|
|
56
|
+
relations[name] = relation.defaultSelect
|
|
57
|
+
? { ...relation, defaultSelect: columnNames(relation.defaultSelect) }
|
|
58
|
+
: relation;
|
|
59
|
+
}
|
|
60
|
+
out.relations = relations;
|
|
61
|
+
}
|
|
62
|
+
return out;
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=column-ref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-ref.js","sourceRoot":"","sources":["../../src/resource/column-ref.ts"],"names":[],"mappings":"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"}
|
package/dist/resource/hook.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Table, TableConfig } from "drizzle-orm";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
+
import { type ResourceConfigInput } from "./column-ref.js";
|
|
3
4
|
import { ResourceConfig, CustomOperator, ProcedureDefinition, LifecycleHooks } from "./types.js";
|
|
4
5
|
import { RelationsConfig } from "./relations.js";
|
|
5
6
|
export declare const getResourceRegistry: () => Map<string, {
|
|
@@ -8,6 +9,6 @@ export declare const getResourceRegistry: () => Map<string, {
|
|
|
8
9
|
relations?: RelationsConfig;
|
|
9
10
|
};
|
|
10
11
|
}>;
|
|
11
|
-
export declare const useResource: <TConfig extends TableConfig>(schema: Table<TConfig>,
|
|
12
|
+
export declare const useResource: <TConfig extends TableConfig>(schema: Table<TConfig>, rawConfig: ResourceConfigInput<TConfig, Table<TConfig>>) => Hono;
|
|
12
13
|
export type { ResourceConfig, CustomOperator, ProcedureDefinition, LifecycleHooks };
|
|
13
14
|
//# sourceMappingURL=hook.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/resource/hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,EACL,WAAW,EAUZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/resource/hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,EACL,WAAW,EAUZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAgD1C,OAAO,EAA2B,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,cAAc,EAGf,MAAM,SAAS,CAAC;AAejB,OAAO,EAGL,eAAe,EAChB,MAAM,aAAa,CAAC;AA0BrB,eAAO,MAAM,mBAAmB;YAHpB,KAAK,CAAC,WAAW,CAAC;YAAU;QAAE,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE;EAGd,CAAC;AAE1D,eAAO,MAAM,WAAW,GAAI,OAAO,SAAS,WAAW,EACrD,QAAQ,KAAK,CAAC,OAAO,CAAC,EACtB,WAAW,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,KACtD,IA4/CF,CAAC;AAEF,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,mBAAmB,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/resource/hook.js
CHANGED
|
@@ -6,11 +6,12 @@ import { v4 as uuidv4 } from "uuid";
|
|
|
6
6
|
import { createResourceFilter } from "./filter.js";
|
|
7
7
|
import { recordCreate, recordUpdate, recordDelete, changelog } from "./changelog.js";
|
|
8
8
|
import { createSubscription, removeSubscription, registerHandler, unregisterHandler, pushInsertsToSubscriptions, pushUpdatesToSubscriptions, pushDeletesToSubscriptions, sendExistingItems, sendCatchupEvents, applyScopeChange, registerKnownIds, registerResourceMask, registerAggregateWatcher, takeRenderer, } from "./subscription.js";
|
|
9
|
-
import { createPagination, parseOrderBy, } from "./pagination.js";
|
|
9
|
+
import { createPagination, parseOrderBy, getGlobalCursorSigningSecret, } from "./pagination.js";
|
|
10
10
|
import { parseSelect, applyProjection, parseAggregationParams, buildAggregationSelections, buildHavingCondition, transformAggregationResults, canonicalizeAggregation, } from "./query.js";
|
|
11
11
|
import { executeProcedure, executeBeforeCreate, executeAfterCreate, executeBeforeUpdate, executeAfterUpdate, executeBeforeDelete, executeAfterDelete, } from "./procedures.js";
|
|
12
12
|
import { trackMutations, isTrackedDb } from "./track-mutations.js";
|
|
13
13
|
import { makeTxRunner } from "./transaction.js";
|
|
14
|
+
import { normalizeResourceConfig } from "./column-ref.js";
|
|
14
15
|
import { createSearchHandler } from "./search.js";
|
|
15
16
|
import { hasGlobalSearch, getGlobalSearch } from "../search/index.js";
|
|
16
17
|
import { hasGlobalKV } from "../kv/index.js";
|
|
@@ -40,7 +41,10 @@ const DEFAULT_PAGINATION = {
|
|
|
40
41
|
};
|
|
41
42
|
const resourceRegistry = new Map();
|
|
42
43
|
export const getResourceRegistry = () => resourceRegistry;
|
|
43
|
-
export const useResource = (schema,
|
|
44
|
+
export const useResource = (schema, rawConfig) => {
|
|
45
|
+
// Column-reference config fields accept Drizzle columns (preferred) or names
|
|
46
|
+
// (deprecated); normalize them to names so the rest of the layer is unchanged.
|
|
47
|
+
const config = normalizeResourceConfig(rawConfig);
|
|
44
48
|
const db = config.db;
|
|
45
49
|
const resourceName = getTableName(schema);
|
|
46
50
|
const idColumnName = config.id.name;
|
|
@@ -112,7 +116,16 @@ export const useResource = (schema, config) => {
|
|
|
112
116
|
await next();
|
|
113
117
|
});
|
|
114
118
|
const filterer = createResourceFilter(schema, config.customOperators ?? {});
|
|
115
|
-
|
|
119
|
+
// Resource cursor signing secret overrides the global one; an explicit `null`
|
|
120
|
+
// opts this resource out even when a global secret is set. `undefined` (unset)
|
|
121
|
+
// falls back to the global secret.
|
|
122
|
+
const cursorSigningSecret = (config.cursorSigningSecret !== undefined
|
|
123
|
+
? config.cursorSigningSecret
|
|
124
|
+
: getGlobalCursorSigningSecret()) || undefined;
|
|
125
|
+
const pagination = createPagination(schema, config.id, {
|
|
126
|
+
...(config.pagination ?? DEFAULT_PAGINATION),
|
|
127
|
+
cursorSigningSecret,
|
|
128
|
+
});
|
|
116
129
|
const scopeResolver = createScopeResolver(config.auth, resourceName);
|
|
117
130
|
const baseInsertSchema = createInsertSchema(schema);
|
|
118
131
|
const updateSchema = createUpdateSchema(schema);
|