@metaobjectsdev/runtime-ts 1.0.5-rc.1 → 1.0.5-rc.10
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/drizzle-fastify/filter-parser.js +6 -2
- package/dist/drizzle-fastify/filter-parser.js.map +1 -1
- package/dist/drizzle-fastify/index.d.ts +4 -2
- package/dist/drizzle-fastify/index.d.ts.map +1 -1
- package/dist/drizzle-fastify/index.js +48 -14
- package/dist/drizzle-fastify/index.js.map +1 -1
- package/dist/drizzle-fastify/mount-m2m.d.ts +24 -0
- package/dist/drizzle-fastify/mount-m2m.d.ts.map +1 -1
- package/dist/drizzle-fastify/mount-m2m.js +37 -3
- package/dist/drizzle-fastify/mount-m2m.js.map +1 -1
- package/dist/drizzle-fastify/mount-read-only.d.ts.map +1 -1
- package/dist/drizzle-fastify/mount-read-only.js +16 -24
- package/dist/drizzle-fastify/mount-read-only.js.map +1 -1
- package/dist/drizzle-fastify/util.d.ts +9 -0
- package/dist/drizzle-fastify/util.d.ts.map +1 -1
- package/dist/drizzle-fastify/util.js +32 -0
- package/dist/drizzle-fastify/util.js.map +1 -1
- package/dist/fastify/index.d.ts +27 -3
- package/dist/fastify/index.d.ts.map +1 -1
- package/dist/fastify/index.js +41 -5
- package/dist/fastify/index.js.map +1 -1
- package/dist/hono/index.d.ts +18 -2
- package/dist/hono/index.d.ts.map +1 -1
- package/dist/hono/index.js +66 -16
- package/dist/hono/index.js.map +1 -1
- package/dist/hono/mount-read-only.d.ts.map +1 -1
- package/dist/hono/mount-read-only.js +16 -24
- package/dist/hono/mount-read-only.js.map +1 -1
- package/dist/identity-strategy.d.ts +4 -1
- package/dist/identity-strategy.d.ts.map +1 -1
- package/dist/identity-strategy.js +1 -1
- package/dist/identity-strategy.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/meta-endpoint.d.ts +28 -0
- package/dist/meta-endpoint.d.ts.map +1 -0
- package/dist/meta-endpoint.js +33 -0
- package/dist/meta-endpoint.js.map +1 -0
- package/dist/object-manager.js +6 -2
- package/dist/object-manager.js.map +1 -1
- package/dist/timestamp-wire.d.ts +17 -0
- package/dist/timestamp-wire.d.ts.map +1 -0
- package/dist/timestamp-wire.js +144 -0
- package/dist/timestamp-wire.js.map +1 -0
- package/dist/validator-runner.d.ts +7 -0
- package/dist/validator-runner.d.ts.map +1 -1
- package/dist/validator-runner.js +2 -0
- package/dist/validator-runner.js.map +1 -1
- package/package.json +3 -3
- package/src/drizzle-fastify/filter-parser.ts +6 -2
- package/src/drizzle-fastify/index.ts +53 -16
- package/src/drizzle-fastify/mount-m2m.ts +53 -3
- package/src/drizzle-fastify/mount-read-only.ts +16 -24
- package/src/drizzle-fastify/util.ts +33 -0
- package/src/fastify/index.ts +59 -9
- package/src/hono/index.ts +84 -18
- package/src/hono/mount-read-only.ts +16 -24
- package/src/identity-strategy.ts +3 -2
- package/src/index.ts +3 -0
- package/src/meta-endpoint.ts +35 -0
- package/src/object-manager.ts +8 -3
- package/src/timestamp-wire.ts +152 -0
- package/src/validator-runner.ts +8 -0
|
@@ -79,4 +79,36 @@ export function contractErrorCode(internal) {
|
|
|
79
79
|
return internal;
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Drizzle v0.45 stores view config under this well-known Symbol. Accessing
|
|
84
|
+
* `view._` on a proxy-wrapped view (empty-column `.existing()`) throws because
|
|
85
|
+
* the proxy tries to spread `subquery._.selectedFields` which is undefined; the
|
|
86
|
+
* symbol read bypasses the proxy. The proxy handler can still throw on
|
|
87
|
+
* unexpected shapes, so the read is guarded. One reader for the private shape —
|
|
88
|
+
* the two read-only mounts and the timestamp-wire column lookup share it.
|
|
89
|
+
*/
|
|
90
|
+
const VIEW_BASE_CONFIG = Symbol.for("drizzle:ViewBaseConfig");
|
|
91
|
+
export function viewBaseConfig(view) {
|
|
92
|
+
try {
|
|
93
|
+
const cfg = view[VIEW_BASE_CONFIG];
|
|
94
|
+
if (cfg && typeof cfg === "object")
|
|
95
|
+
return cfg;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// ignore — proxy handler may throw on unexpected shapes
|
|
99
|
+
}
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* The portable one-row read: `.limit(1)` + await + first element. Awaiting is
|
|
104
|
+
* what makes this work on both dialects — the node-postgres query builder is
|
|
105
|
+
* thenable but has no `.get()` (that is a libsql/better-sqlite3-only API, #286).
|
|
106
|
+
* The caller builds the WHERE (including any TPH discriminator), so the
|
|
107
|
+
* condition stays with the mount that owns it.
|
|
108
|
+
*/
|
|
109
|
+
export async function firstRow(db, src, cond) {
|
|
110
|
+
// biome-ignore lint/suspicious/noExplicitAny: dynamic dispatch over the user's Drizzle client
|
|
111
|
+
const rows = await db.select().from(src).where(cond).limit(1);
|
|
112
|
+
return rows[0];
|
|
113
|
+
}
|
|
82
114
|
//# sourceMappingURL=util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/drizzle-fastify/util.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAe,EAAE,GAAW;IAC5D,MAAM,QAAQ,GAAI,MAA4C,EAAE,QAAQ,CAAC;IACzE,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,gDAAgD;IACxF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AAC5E,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AAC3B,CAAC;AAED,qEAAqE;AACrE,4EAA4E;AAC5E,+EAA+E;AAC/E,4EAA4E;AAC5E,gFAAgF;AAChF,qEAAqE;AACrE,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,sBAAsB;YACzB,OAAO,sBAAsB,CAAC;QAChC,KAAK,uBAAuB;YAC1B,OAAO,mBAAmB,CAAC;QAC7B,KAAK,sBAAsB;YACzB,OAAO,sBAAsB,CAAC;QAChC,KAAK,oBAAoB,CAAC;QAC1B,KAAK,oBAAoB;YACvB,OAAO,cAAc,CAAC;QACxB;YACE,uEAAuE;YACvE,2EAA2E;YAC3E,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/drizzle-fastify/util.ts"],"names":[],"mappings":"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"}
|
package/dist/fastify/index.d.ts
CHANGED
|
@@ -35,9 +35,9 @@ export interface CrudRoutesOptions {
|
|
|
35
35
|
*/
|
|
36
36
|
routeOptions?: RouteShorthandOptions;
|
|
37
37
|
/**
|
|
38
|
-
*
|
|
39
|
-
* update
|
|
40
|
-
*
|
|
38
|
+
* Restrict the update verb to ONE HTTP method. Absent (the default) mounts
|
|
39
|
+
* the update handler on both PATCH and PUT, as the cross-port REST contract
|
|
40
|
+
* requires.
|
|
41
41
|
*/
|
|
42
42
|
updateMethod?: "patch" | "put";
|
|
43
43
|
/**
|
|
@@ -66,4 +66,28 @@ export declare function mountCreateRoute(opts: SingleVerbOptions): void;
|
|
|
66
66
|
export declare function mountUpdateRoute(opts: SingleVerbOptions): void;
|
|
67
67
|
export declare function mountDeleteRoute(opts: SingleVerbOptions): void;
|
|
68
68
|
export { parseId } from "../drizzle-fastify/util.js";
|
|
69
|
+
import type { MetaData } from "@metaobjectsdev/metadata";
|
|
70
|
+
export interface MetaRouteOptions {
|
|
71
|
+
fastify: FastifyInstance;
|
|
72
|
+
/** The loaded model root. */
|
|
73
|
+
root: MetaData;
|
|
74
|
+
/** Mounted under this prefix; defaults to "" (the bare `/_meta`). */
|
|
75
|
+
prefix?: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Mount `GET {prefix}/_meta`, serving the model as effective canonical JSON.
|
|
79
|
+
*
|
|
80
|
+
* Opt-in by design. `/_meta` publishes the SHAPE of the model — entity and field
|
|
81
|
+
* names, types, validators, layouts — though no row data. Guard it with your own
|
|
82
|
+
* middleware exactly as you would the generated routes (#367):
|
|
83
|
+
*
|
|
84
|
+
* app.register(async (s) => {
|
|
85
|
+
* s.addHook("preHandler", requireAuth);
|
|
86
|
+
* mountMetaRoute({ fastify: s, root, prefix: "/api" });
|
|
87
|
+
* });
|
|
88
|
+
*
|
|
89
|
+
* The body is serialized once per call. If that ever matters, cache it in the
|
|
90
|
+
* host — the model is immutable after load.
|
|
91
|
+
*/
|
|
92
|
+
export declare function mountMetaRoute(opts: MetaRouteOptions): void;
|
|
69
93
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fastify/index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAQ5E,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,YAAY,EAAE,UAAU,CAAC;IACzB,yEAAyE;IACzE,YAAY,EAAE,UAAU,CAAC;IACzB;;;OAGG;IACH,EAAE,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC7B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC/B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAID;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAO7D;AAOD,KAAK,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAW3D,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fastify/index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAQ5E,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,YAAY,EAAE,UAAU,CAAC;IACzB,yEAAyE;IACzE,YAAY,EAAE,UAAU,CAAC;IACzB;;;OAGG;IACH,EAAE,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC7B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC/B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAID;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAO7D;AAOD,KAAK,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAW3D,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAkC5D;AAuBD,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAS3D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAmB9D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CA0C9D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAa9D;AASD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAMrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,CAAC;IACzB,6BAA6B;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAQ3D"}
|
package/dist/fastify/index.js
CHANGED
|
@@ -65,7 +65,9 @@ export function mountListRoute(opts) {
|
|
|
65
65
|
if (opts.sortAllowlist && typeof parsed["sort"] === "string") {
|
|
66
66
|
const sortParse = parseSort(parsed["sort"], opts.sortAllowlist);
|
|
67
67
|
if (sortParse.error) {
|
|
68
|
-
|
|
68
|
+
// `field` is REQUIRED on the invalid_sort envelope cross-port (F20 ruling) —
|
|
69
|
+
// it names the offending sort field instead of making the caller guess.
|
|
70
|
+
return reply.code(400).send({ error: contractErrorCode(sortParse.error), field: sortParse.field });
|
|
69
71
|
}
|
|
70
72
|
if (sortParse.orderBy)
|
|
71
73
|
readOpts.orderBy = sortParse.orderBy;
|
|
@@ -88,14 +90,14 @@ export function mountListRoute(opts) {
|
|
|
88
90
|
function parseSort(spec, sortAllowlist) {
|
|
89
91
|
const [field, orderRaw] = spec.split(":");
|
|
90
92
|
if (!field || !sortAllowlist[field])
|
|
91
|
-
return { error: "sort.unknown_field" };
|
|
93
|
+
return { error: "sort.unknown_field", field: field ?? "" };
|
|
92
94
|
// Precedence (caller order > declared @sortableDefaultOrder > asc) comes from the
|
|
93
95
|
// shared sortOrderSpec, so this mount cannot answer one declaration differently from
|
|
94
96
|
// the drizzle mount again. Validation stays here because this mount reports a bad
|
|
95
97
|
// order as an error CODE rather than a thrown FilterParseError.
|
|
96
98
|
const order = sortOrderSpec(sortAllowlist, field, orderRaw).toLowerCase();
|
|
97
99
|
if (order !== "asc" && order !== "desc")
|
|
98
|
-
return { error: "sort.invalid_order" };
|
|
100
|
+
return { error: "sort.invalid_order", field };
|
|
99
101
|
return { orderBy: [field, order] };
|
|
100
102
|
}
|
|
101
103
|
export function mountGetRoute(opts) {
|
|
@@ -145,12 +147,21 @@ export function mountUpdateRoute(opts) {
|
|
|
145
147
|
};
|
|
146
148
|
const path = `${opts.path}/:id`;
|
|
147
149
|
const ro = routeOpts(opts);
|
|
150
|
+
// Cross-port REST contract (FR-008): the update verb is reachable via BOTH PATCH
|
|
151
|
+
// and PUT, each routed to the same handler — as the drizzle-fastify flavor and
|
|
152
|
+
// every other port's controller do. `updateMethod` stays an explicit single-verb
|
|
153
|
+
// override for a consumer that wants to restrict the surface.
|
|
148
154
|
// biome-ignore lint/suspicious/noExplicitAny: handler signature is generic by design
|
|
155
|
+
const h = handler;
|
|
149
156
|
if (opts.updateMethod === "put") {
|
|
150
|
-
opts.fastify.put(path, ro,
|
|
157
|
+
opts.fastify.put(path, ro, h);
|
|
158
|
+
}
|
|
159
|
+
else if (opts.updateMethod === "patch") {
|
|
160
|
+
opts.fastify.patch(path, ro, h);
|
|
151
161
|
}
|
|
152
162
|
else {
|
|
153
|
-
opts.fastify.patch(path, ro,
|
|
163
|
+
opts.fastify.patch(path, ro, h);
|
|
164
|
+
opts.fastify.put(path, ro, h);
|
|
154
165
|
}
|
|
155
166
|
}
|
|
156
167
|
export function mountDeleteRoute(opts) {
|
|
@@ -171,4 +182,29 @@ export function mountDeleteRoute(opts) {
|
|
|
171
182
|
// shared (deprecated) helper so the three adapters can't silently diverge.
|
|
172
183
|
// The mounts above no longer use it: ObjectManager coerces ids per metadata.
|
|
173
184
|
export { parseId } from "../drizzle-fastify/util.js";
|
|
185
|
+
import { META_ROUTE_PATH, META_CONTENT_TYPE, metaJson } from "../meta-endpoint.js";
|
|
186
|
+
/**
|
|
187
|
+
* Mount `GET {prefix}/_meta`, serving the model as effective canonical JSON.
|
|
188
|
+
*
|
|
189
|
+
* Opt-in by design. `/_meta` publishes the SHAPE of the model — entity and field
|
|
190
|
+
* names, types, validators, layouts — though no row data. Guard it with your own
|
|
191
|
+
* middleware exactly as you would the generated routes (#367):
|
|
192
|
+
*
|
|
193
|
+
* app.register(async (s) => {
|
|
194
|
+
* s.addHook("preHandler", requireAuth);
|
|
195
|
+
* mountMetaRoute({ fastify: s, root, prefix: "/api" });
|
|
196
|
+
* });
|
|
197
|
+
*
|
|
198
|
+
* The body is serialized once per call. If that ever matters, cache it in the
|
|
199
|
+
* host — the model is immutable after load.
|
|
200
|
+
*/
|
|
201
|
+
export function mountMetaRoute(opts) {
|
|
202
|
+
const path = `${opts.prefix ?? ""}${META_ROUTE_PATH}`;
|
|
203
|
+
opts.fastify.get(path, async (_req, reply) => {
|
|
204
|
+
return reply
|
|
205
|
+
.code(200)
|
|
206
|
+
.header("content-type", META_CONTENT_TYPE)
|
|
207
|
+
.send(metaJson(opts.root));
|
|
208
|
+
});
|
|
209
|
+
}
|
|
174
210
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fastify/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fastify/index.ts"],"names":[],"mappings":"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"}
|
package/dist/hono/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { ZodTypeAny } from "zod";
|
|
|
3
3
|
import type { FilterAllowlist, SortAllowlist } from "../drizzle-fastify/filter-allowlist.js";
|
|
4
4
|
export type { FilterAllowlist, SortAllowlist, } from "../drizzle-fastify/filter-allowlist.js";
|
|
5
5
|
export { parseId } from "../drizzle-fastify/util.js";
|
|
6
|
+
export { timestampWire, canonicalTimestamp } from "../timestamp-wire.js";
|
|
6
7
|
type AnyDrizzle = any;
|
|
7
8
|
type AnyTable = any;
|
|
8
9
|
type AnyHono = Hono<any, any, any>;
|
|
@@ -36,8 +37,9 @@ export interface CrudRoutesOptions {
|
|
|
36
37
|
/** Limit which verbs are mounted. Defaults to all five. */
|
|
37
38
|
expose?: readonly CrudVerb[];
|
|
38
39
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
40
|
+
* Restrict the update verb to ONE HTTP method. Absent (the default) mounts
|
|
41
|
+
* the update handler on both PATCH and PUT, as the cross-port REST contract
|
|
42
|
+
* requires.
|
|
41
43
|
*/
|
|
42
44
|
updateMethod?: "patch" | "put";
|
|
43
45
|
filterAllowlist?: FilterAllowlist;
|
|
@@ -54,4 +56,18 @@ export declare function mountCreateRoute(opts: VerbOptions): void;
|
|
|
54
56
|
export declare function mountUpdateRoute(opts: VerbOptions): void;
|
|
55
57
|
export declare function mountDeleteRoute(opts: VerbOptions): void;
|
|
56
58
|
export { mountReadOnlyCrudRoutes, type MountReadOnlyOptions } from "./mount-read-only.js";
|
|
59
|
+
import type { MetaData } from "@metaobjectsdev/metadata";
|
|
60
|
+
export interface HonoMetaRouteOptions {
|
|
61
|
+
app: AnyHono;
|
|
62
|
+
root: MetaData;
|
|
63
|
+
prefix?: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Mount `GET {prefix}/_meta` on Hono. Same contract and same opt-in caveat as
|
|
67
|
+
* the Fastify twin; guard the mount path with middleware before calling this:
|
|
68
|
+
*
|
|
69
|
+
* app.use(`/api${META_ROUTE_PATH}`, requireAuth);
|
|
70
|
+
* mountMetaRouteHono({ app, root, prefix: "/api" });
|
|
71
|
+
*/
|
|
72
|
+
export declare function mountMetaRouteHono(opts: HonoMetaRouteOptions): void;
|
|
57
73
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/hono/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hono/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hono/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAStC,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACd,MAAM,wCAAwC,CAAC;AAChD,YAAY,EACV,eAAe,EACf,aAAa,GACd,MAAM,wCAAwC,CAAC;AAKhD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAQzE,KAAK,UAAU,GAAG,GAAG,CAAC;AAEtB,KAAK,QAAQ,GAAG,GAAG,CAAC;AAEpB,KAAK,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEnC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,GAAG,EAAE,OAAO,CAAC;IACb,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,kFAAkF;IAClF,KAAK,EAAE,QAAQ,CAAC;IAChB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,yEAAyE;IACzE,YAAY,EAAE,UAAU,CAAC;IACzB,yEAAyE;IACzE,YAAY,EAAE,UAAU,CAAC;IACzB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC7B;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAI,aAAa,CAAC;IAChC,oKAAoK;IACpK,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CACjC;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAO7D;AAED,KAAK,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAWrD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzE;AA6CD,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CA0DtD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAYrD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAuBxD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAkDxD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAuBxD;AAgBD,OAAO,EAAE,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAM1F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzD,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAKnE"}
|
package/dist/hono/index.js
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
// GET {path} list with ?filter / ?sort / ?limit / ?offset / ?withCount=1
|
|
8
8
|
// GET {path}/:id findById, 404 if missing
|
|
9
9
|
// POST {path} create, 400 on Zod validation error, 201 on success
|
|
10
|
-
// PATCH {path}/:id update
|
|
11
|
-
// PUT {path}/:id update (
|
|
10
|
+
// PATCH {path}/:id update, 400 / 404 envelopes
|
|
11
|
+
// PUT {path}/:id update — the same handler (restrict with updateMethod)
|
|
12
12
|
// DELETE {path}/:id delete, 204 on success, 404 if missing
|
|
13
13
|
//
|
|
14
14
|
// Filter / sort / withCount semantics are shared with drizzle-fastify via
|
|
@@ -18,11 +18,14 @@
|
|
|
18
18
|
import { classifyConstraintError, RedactedDatabaseError, logAndRedact } from "../constraint-errors.js";
|
|
19
19
|
import { eq, count, and } from "drizzle-orm";
|
|
20
20
|
import qs from "qs";
|
|
21
|
+
import { contractErrorCode } from "../drizzle-fastify/util.js";
|
|
21
22
|
import { parseFilterParams, FilterParseError, } from "../drizzle-fastify/filter-parser.js";
|
|
22
|
-
import { isTruthyFlag, coerceIdForColumn } from "../drizzle-fastify/util.js";
|
|
23
|
+
import { isTruthyFlag, coerceIdForColumn, firstRow } from "../drizzle-fastify/util.js";
|
|
24
|
+
import { timestampWire } from "../timestamp-wire.js";
|
|
23
25
|
// Back-compat re-export — the unsafe local copy was consolidated onto the one
|
|
24
26
|
// shared (deprecated) helper so the three adapters can't silently diverge.
|
|
25
27
|
export { parseId } from "../drizzle-fastify/util.js";
|
|
28
|
+
export { timestampWire, canonicalTimestamp } from "../timestamp-wire.js";
|
|
26
29
|
const ALL_VERBS = ["list", "get", "create", "update", "delete"];
|
|
27
30
|
export function mountCrudRoutes(opts) {
|
|
28
31
|
const verbs = new Set(opts.expose ?? ALL_VERBS);
|
|
@@ -57,6 +60,22 @@ export function parseHonoFilterParams(c) {
|
|
|
57
60
|
function readSource(opts) {
|
|
58
61
|
return opts.readView ?? opts.table;
|
|
59
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Wire mapper for rows READ through `readSource` — canonicalized against
|
|
65
|
+
* exactly that source, since a view may shadow a table column with a
|
|
66
|
+
* non-timestamp of the same name.
|
|
67
|
+
*/
|
|
68
|
+
function readWire(opts) {
|
|
69
|
+
return timestampWire(readSource(opts));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Wire mapper for a WRITE ECHO: `reReadThroughView` answers with the replica
|
|
73
|
+
* view's row but falls back to the table row, so the echo is canonicalized
|
|
74
|
+
* against the union of both sources.
|
|
75
|
+
*/
|
|
76
|
+
function echoWire(opts) {
|
|
77
|
+
return timestampWire(opts.table, opts.readView);
|
|
78
|
+
}
|
|
60
79
|
/** Re-read a just-written row through the replica view so the response carries the
|
|
61
80
|
* derived columns. Writes always target the TABLE; only the echo changes. With no
|
|
62
81
|
* `readView`, returns the write row unchanged. */
|
|
@@ -74,6 +93,7 @@ async function reReadThroughView(opts, writeRow) {
|
|
|
74
93
|
return rows[0] ?? writeRow;
|
|
75
94
|
}
|
|
76
95
|
export function mountListRoute(opts) {
|
|
96
|
+
const toWire = readWire(opts);
|
|
77
97
|
opts.app.get(opts.path, async (c) => {
|
|
78
98
|
try {
|
|
79
99
|
const listSrc = readSource(opts);
|
|
@@ -116,7 +136,7 @@ export function mountListRoute(opts) {
|
|
|
116
136
|
// better-sqlite3-only API). Awaiting works on BOTH dialects — this is what
|
|
117
137
|
// makes the Hono helpers genuinely Postgres-capable, matching the Fastify
|
|
118
138
|
// adapter, which carried this fix while Hono did not (#286).
|
|
119
|
-
const rows = await q;
|
|
139
|
+
const rows = (await q).map(toWire);
|
|
120
140
|
if (!withCount)
|
|
121
141
|
return c.json(rows);
|
|
122
142
|
// Count query: same WHERE, no limit/offset/orderBy.
|
|
@@ -129,13 +149,18 @@ export function mountListRoute(opts) {
|
|
|
129
149
|
}
|
|
130
150
|
catch (err) {
|
|
131
151
|
if (err instanceof FilterParseError) {
|
|
132
|
-
|
|
152
|
+
// Map to the cross-port wire code, exactly as the Fastify mount does. Emitting
|
|
153
|
+
// the INTERNAL dotted code here made the two flavors answer differently for the
|
|
154
|
+
// same metadata (`filter.unknown_field` vs `invalid_filter_field`), contradicting
|
|
155
|
+
// this package's own "byte-identical on the wire" contract.
|
|
156
|
+
return c.json({ error: contractErrorCode(err.code), ...(err.details ?? {}) }, 400);
|
|
133
157
|
}
|
|
134
158
|
throw err;
|
|
135
159
|
}
|
|
136
160
|
});
|
|
137
161
|
}
|
|
138
162
|
export function mountGetRoute(opts) {
|
|
163
|
+
const toWire = readWire(opts);
|
|
139
164
|
opts.app.get(`${opts.path}/:id`, async (c) => {
|
|
140
165
|
const id = c.req.param("id") ?? "";
|
|
141
166
|
// Compare against the PK's real type — a numeric-LOOKING id on a TEXT pk
|
|
@@ -144,18 +169,12 @@ export function mountGetRoute(opts) {
|
|
|
144
169
|
const idValue = coerceIdForColumn(getSrc.id, id);
|
|
145
170
|
if (idValue === undefined)
|
|
146
171
|
return c.json({ error: "invalid_id" }, 400);
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
const rows = await opts.db
|
|
150
|
-
.select()
|
|
151
|
-
.from(getSrc)
|
|
152
|
-
.where(eq(getSrc.id, idValue))
|
|
153
|
-
.limit(1);
|
|
154
|
-
const row = rows[0];
|
|
155
|
-
return row ? c.json(row) : c.json({ error: "not_found" }, 404);
|
|
172
|
+
const row = await firstRow(opts.db, getSrc, eq(getSrc.id, idValue));
|
|
173
|
+
return row ? c.json(toWire(row)) : c.json({ error: "not_found" }, 404);
|
|
156
174
|
});
|
|
157
175
|
}
|
|
158
176
|
export function mountCreateRoute(opts) {
|
|
177
|
+
const toWire = echoWire(opts);
|
|
159
178
|
opts.app.post(opts.path, async (c) => {
|
|
160
179
|
const body = await c.req.json().catch(() => undefined);
|
|
161
180
|
const parsed = opts.insertSchema.safeParse(body);
|
|
@@ -179,10 +198,11 @@ export function mountCreateRoute(opts) {
|
|
|
179
198
|
}
|
|
180
199
|
const row = result[0];
|
|
181
200
|
// Echo the row through the replica view so derived columns are present (#214).
|
|
182
|
-
return c.json(await reReadThroughView(opts, row), 201);
|
|
201
|
+
return c.json(toWire(await reReadThroughView(opts, row)), 201);
|
|
183
202
|
});
|
|
184
203
|
}
|
|
185
204
|
export function mountUpdateRoute(opts) {
|
|
205
|
+
const toWire = echoWire(opts);
|
|
186
206
|
const handler = async (c) => {
|
|
187
207
|
const id = c.req.param("id") ?? "";
|
|
188
208
|
const body = await c.req.json().catch(() => undefined);
|
|
@@ -190,6 +210,16 @@ export function mountUpdateRoute(opts) {
|
|
|
190
210
|
if (!parsed.success) {
|
|
191
211
|
return c.json({ error: "validation", issues: parsed.error.issues }, 400);
|
|
192
212
|
}
|
|
213
|
+
// An empty patch is a no-op update, answered as a read — the Fastify mount's
|
|
214
|
+
// rule; its block in drizzle-fastify/index.ts carries the full rationale.
|
|
215
|
+
if (Object.keys(parsed.data).length === 0) {
|
|
216
|
+
const src = readSource(opts);
|
|
217
|
+
const noopId = coerceIdForColumn(src.id, id);
|
|
218
|
+
if (noopId === undefined)
|
|
219
|
+
return c.json({ error: "invalid_id" }, 400);
|
|
220
|
+
const row = await firstRow(opts.db, src, eq(src.id, noopId));
|
|
221
|
+
return row ? c.json(toWire(row)) : c.json({ error: "not_found" }, 404);
|
|
222
|
+
}
|
|
193
223
|
// Compare against the PK's real type (see mountGetRoute) — a numeric-
|
|
194
224
|
// LOOKING id on a TEXT pk would otherwise UPDATE the wrong row.
|
|
195
225
|
const idValue = coerceIdForColumn(opts.table.id, id);
|
|
@@ -212,14 +242,22 @@ export function mountUpdateRoute(opts) {
|
|
|
212
242
|
return c.json(f.body, f.status);
|
|
213
243
|
}
|
|
214
244
|
const row = result[0];
|
|
215
|
-
return row ? c.json(await reReadThroughView(opts, row)) : c.json({ error: "not_found" }, 404);
|
|
245
|
+
return row ? c.json(toWire(await reReadThroughView(opts, row))) : c.json({ error: "not_found" }, 404);
|
|
216
246
|
};
|
|
217
247
|
const path = `${opts.path}/:id`;
|
|
248
|
+
// Cross-port REST contract (FR-008): the update verb is reachable via BOTH PATCH
|
|
249
|
+
// and PUT, each routed to the same handler — as the drizzle-fastify flavor and
|
|
250
|
+
// every other port's controller do. `updateMethod` stays an explicit single-verb
|
|
251
|
+
// override for a consumer that wants to restrict the surface.
|
|
218
252
|
if (opts.updateMethod === "put") {
|
|
219
253
|
opts.app.put(path, handler);
|
|
220
254
|
}
|
|
255
|
+
else if (opts.updateMethod === "patch") {
|
|
256
|
+
opts.app.patch(path, handler);
|
|
257
|
+
}
|
|
221
258
|
else {
|
|
222
259
|
opts.app.patch(path, handler);
|
|
260
|
+
opts.app.put(path, handler);
|
|
223
261
|
}
|
|
224
262
|
}
|
|
225
263
|
export function mountDeleteRoute(opts) {
|
|
@@ -271,4 +309,16 @@ function extractRowCount(result) {
|
|
|
271
309
|
return 0;
|
|
272
310
|
}
|
|
273
311
|
export { mountReadOnlyCrudRoutes } from "./mount-read-only.js";
|
|
312
|
+
import { META_ROUTE_PATH, META_CONTENT_TYPE, metaJson } from "../meta-endpoint.js";
|
|
313
|
+
/**
|
|
314
|
+
* Mount `GET {prefix}/_meta` on Hono. Same contract and same opt-in caveat as
|
|
315
|
+
* the Fastify twin; guard the mount path with middleware before calling this:
|
|
316
|
+
*
|
|
317
|
+
* app.use(`/api${META_ROUTE_PATH}`, requireAuth);
|
|
318
|
+
* mountMetaRouteHono({ app, root, prefix: "/api" });
|
|
319
|
+
*/
|
|
320
|
+
export function mountMetaRouteHono(opts) {
|
|
321
|
+
const path = `${opts.prefix ?? ""}${META_ROUTE_PATH}`;
|
|
322
|
+
opts.app.get(path, (c) => c.body(metaJson(opts.root), 200, { "content-type": META_CONTENT_TYPE }));
|
|
323
|
+
}
|
|
274
324
|
//# sourceMappingURL=index.js.map
|
package/dist/hono/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hono/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hono/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount-read-only.d.ts","sourceRoot":"","sources":["../../src/hono/mount-read-only.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAIjC,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACd,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"mount-read-only.d.ts","sourceRoot":"","sources":["../../src/hono/mount-read-only.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAIjC,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACd,MAAM,wCAAwC,CAAC;AAKhD,KAAK,OAAO,GAAG,GAAG,CAAC;AAEnB,KAAK,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEnC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;IACjB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,QAAQ,CAAC;IACxC,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAoED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CA2HxE"}
|
|
@@ -1,29 +1,13 @@
|
|
|
1
1
|
// Hono read-only mount — projection (view-backed) entities. GET list +
|
|
2
|
-
// GET :id only. POST/PATCH/DELETE return 405. Mirrors the drizzle-fastify
|
|
2
|
+
// GET :id only. POST/PATCH/PUT/DELETE return 405. Mirrors the drizzle-fastify
|
|
3
3
|
// equivalent so the cross-port API contract holds for projection endpoints.
|
|
4
4
|
import { sql, eq, and, count } from "drizzle-orm";
|
|
5
5
|
import qs from "qs";
|
|
6
6
|
import { parseFilterParams, FilterParseError } from "../drizzle-fastify/filter-parser.js";
|
|
7
|
-
import { isTruthyFlag, coerceIdForColumn, rawIdLiteral } from "../drizzle-fastify/util.js";
|
|
8
|
-
|
|
9
|
-
* Drizzle v0.45 stores view config under this well-known Symbol. Mirrors
|
|
10
|
-
* the same workaround the Fastify mount uses — accessing `view._` on a
|
|
11
|
-
* proxy-wrapped view throws.
|
|
12
|
-
*/
|
|
13
|
-
const VIEW_BASE_CONFIG = Symbol.for("drizzle:ViewBaseConfig");
|
|
14
|
-
function getViewConfig(view) {
|
|
15
|
-
try {
|
|
16
|
-
const cfg = view[VIEW_BASE_CONFIG];
|
|
17
|
-
if (cfg && typeof cfg === "object")
|
|
18
|
-
return cfg;
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
// ignore — proxy handler may throw on unexpected shapes
|
|
22
|
-
}
|
|
23
|
-
return undefined;
|
|
24
|
-
}
|
|
7
|
+
import { isTruthyFlag, coerceIdForColumn, rawIdLiteral, contractErrorCode, viewBaseConfig } from "../drizzle-fastify/util.js";
|
|
8
|
+
import { timestampWire } from "../timestamp-wire.js";
|
|
25
9
|
function resolveViewName(view) {
|
|
26
|
-
const cfg =
|
|
10
|
+
const cfg = viewBaseConfig(view);
|
|
27
11
|
if (cfg) {
|
|
28
12
|
if (typeof cfg["name"] === "string")
|
|
29
13
|
return cfg["name"];
|
|
@@ -33,7 +17,7 @@ function resolveViewName(view) {
|
|
|
33
17
|
(typeof v["_name"] === "string" ? v["_name"] : undefined));
|
|
34
18
|
}
|
|
35
19
|
function isEmptyColumnView(view) {
|
|
36
|
-
const cfg =
|
|
20
|
+
const cfg = viewBaseConfig(view);
|
|
37
21
|
if (cfg) {
|
|
38
22
|
const fields = cfg["selectedFields"];
|
|
39
23
|
return fields !== undefined && Object.keys(fields).length === 0;
|
|
@@ -88,6 +72,8 @@ export function mountReadOnlyCrudRoutes(opts) {
|
|
|
88
72
|
const idCol = opts.idColumn ?? "id";
|
|
89
73
|
const viewName = resolveViewName(view);
|
|
90
74
|
const useRawSql = isEmptyColumnView(view) && !!viewName;
|
|
75
|
+
// The raw-SQL branch has no declared columns, so nothing names a timestamp there.
|
|
76
|
+
const toWire = timestampWire(view);
|
|
91
77
|
// ── List ──────────────────────────────────────────────────────────────────
|
|
92
78
|
app.get(path, async (c) => {
|
|
93
79
|
try {
|
|
@@ -138,7 +124,7 @@ export function mountReadOnlyCrudRoutes(opts) {
|
|
|
138
124
|
// better-sqlite3-only API). Awaiting works on BOTH dialects — this is what
|
|
139
125
|
// makes the Hono helpers genuinely Postgres-capable, matching the Fastify
|
|
140
126
|
// adapter, which carried this fix while Hono did not (#286).
|
|
141
|
-
const rows = await q;
|
|
127
|
+
const rows = (await q).map(toWire);
|
|
142
128
|
if (!withCount)
|
|
143
129
|
return c.json(rows);
|
|
144
130
|
let cq = db.select({ c: count() }).from(view);
|
|
@@ -150,7 +136,9 @@ export function mountReadOnlyCrudRoutes(opts) {
|
|
|
150
136
|
}
|
|
151
137
|
catch (err) {
|
|
152
138
|
if (err instanceof FilterParseError) {
|
|
153
|
-
|
|
139
|
+
// Wire code + the details (so the cross-port-required `field` is present),
|
|
140
|
+
// matching the Fastify projection mount.
|
|
141
|
+
return c.json({ error: contractErrorCode(err.code), message: err.message, ...(err.details ?? {}) }, 400);
|
|
154
142
|
}
|
|
155
143
|
throw err;
|
|
156
144
|
}
|
|
@@ -179,7 +167,7 @@ export function mountReadOnlyCrudRoutes(opts) {
|
|
|
179
167
|
.where(colRef !== undefined ? eq(colRef, idValue) : undefined)
|
|
180
168
|
.limit(1);
|
|
181
169
|
const row = rows[0];
|
|
182
|
-
return row ? c.json(row) : c.json({ error: "not_found" }, 404);
|
|
170
|
+
return row ? c.json(toWire(row)) : c.json({ error: "not_found" }, 404);
|
|
183
171
|
});
|
|
184
172
|
// ── Mutations explicitly rejected (405) ───────────────────────────────────
|
|
185
173
|
const reject = (c) => c.json({ error: "method_not_allowed", message: `${c.req.method} is not supported on a projection (read-only).` }, 405);
|
|
@@ -187,6 +175,10 @@ export function mountReadOnlyCrudRoutes(opts) {
|
|
|
187
175
|
app.post(path, reject);
|
|
188
176
|
// biome-ignore lint/suspicious/noExplicitAny: cross-version Hono typing
|
|
189
177
|
app.patch(`${path}/:id`, reject);
|
|
178
|
+
// PUT too — the writable mount serves it, so a projection must reject it rather
|
|
179
|
+
// than 404, which would deny a resource that answers GET on the same path.
|
|
180
|
+
// biome-ignore lint/suspicious/noExplicitAny: cross-version Hono typing
|
|
181
|
+
app.put(`${path}/:id`, reject);
|
|
190
182
|
// biome-ignore lint/suspicious/noExplicitAny: cross-version Hono typing
|
|
191
183
|
app.delete(`${path}/:id`, reject);
|
|
192
184
|
}
|