@lovrozagar/honey 0.6.1 → 0.6.3
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 +10 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/response.d.ts +6 -0
- package/dist/response.d.ts.map +1 -1
- package/dist/tree.d.ts +6 -0
- package/dist/tree.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/plugin.ts +8 -0
- package/src/response.ts +9 -2
- package/src/tree.ts +33 -0
package/README.md
CHANGED
|
@@ -1024,6 +1024,16 @@ const snapshot = app.toRouteTree()
|
|
|
1024
1024
|
|
|
1025
1025
|
`mergeTree` from `honey` / `honey/tree` merges several trees (optional extra meta per tree).
|
|
1026
1026
|
|
|
1027
|
+
Gateway codegen: point `codegen.mergeTree` at a generate-only module that merges live downstream apps with `app.toRouteTree()`. Generated `routes.gen.ts` omits JSON Schema, so merging another service's generated tree documents no request or response bodies. `honey generate` copies the merged schemas onto the gateway app before it writes OpenAPI; the gateway runtime still serves its own generated tree.
|
|
1028
|
+
|
|
1029
|
+
```ts
|
|
1030
|
+
// gateway/src/route-tree.ts — codegen only, never imported at runtime
|
|
1031
|
+
import { mergeTree } from "@lovrozagar/honey"
|
|
1032
|
+
import { app as usersApp } from "@acme/users/app"
|
|
1033
|
+
|
|
1034
|
+
export const tree = mergeTree([usersApp.toRouteTree(), { worker: "users" }])
|
|
1035
|
+
```
|
|
1036
|
+
|
|
1027
1037
|
`app.fetch(request, env, executionCtx?)` is always valid. Sync handlers return a `Response` directly; async handlers and middleware return a `Promise<Response>`. Callers should `await app.fetch(...)`.
|
|
1028
1038
|
|
|
1029
1039
|
## Serve
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAGN,iBAAiB,EAMjB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAoB,MAAM,cAAc,CAAA;AAC9F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAGN,iBAAiB,EAMjB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAoB,MAAM,cAAc,CAAA;AAC9F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAKlE,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAIxF,KAAK,kBAAkB,GAAG;IACzB,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7B,OAAO,CAAC,EAAE;QACT,IAAI,EAAE;YAAE,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAA;QAC9D,MAAM,EAAE,MAAM,CAAA;KACd,CAAA;CACD,CAAA;AAED,KAAK,kBAAkB,GAAG;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,wBAAsB,eAAe,CACpC,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,SAAS,MAAM,EACxB,KAAK,SAAS,MAAM,EAEpB,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,EAClE,OAAO,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CAkB7B;AAID,MAAM,WAAW,wBAAwB;IACxC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAA;IACnD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,sBAAsB,CAAA;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,gBAAgB;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,mBAAmB;IACnC,EAAE,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3B,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,UAAU,CAAC,EAAE,OAAO,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC1C;AAED,MAAM,WAAW,kBAAkB;IAClC,GAAG,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAA;IAChC;;;;OAIG;IACH,UAAU,CAAC,EAAE,qBAAqB,CAAA;IAClC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,wBAAwB,GAAG,wBAAwB,EAAE,CAAA;IAC/D,GAAG,CAAC,EAAE,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,mBAAmB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IAChF,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAClE;AAED,MAAM,WAAW,qBAAqB;IACrC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;AAID,MAAM,MAAM,qBAAqB,GAAG;IACnC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAA;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,sBAAsB,CAAA;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,EAAE,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACvD,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3B,IAAI,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACxD,UAAU,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,qBAAqB,GAAG,SAAS,CAAA;AAEvE,MAAM,WAAW,mBAAmB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE;QACR,GAAG,EAAE,KAAK,GAAG,mBAAmB,CAAA;QAChC,UAAU,EAAE,uBAAuB,CAAA;QACnC,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAA;QACxB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;QAC7B,OAAO,EAAE,KAAK,GAAG,qBAAqB,EAAE,CAAA;QACxC,GAAG,EAAE,KAAK,GAAG;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,gBAAgB,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;QACxE,IAAI,EAAE,KAAK,GAAG,MAAM,CAAA;QACpB,KAAK,EAAE,KAAK,GAAG;YAAE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAChE,CAAA;IACD,KAAK,EAAE,MAAM,EAAE,CAAA;CACf;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,qBAAqB,GAAG,mBAAmB,CA8GlF;AAMD,wBAAgB,kBAAkB,IAAI,qBAAqB,GAAG,SAAS,CAEtE;AAsGD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmN/F;AAsBD,wBAAgB,KAAK,CAAC,MAAM,EAAE,qBAAqB;kBAQnC,OAAO,CAAC,IAAI,CAAC;wBACP;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;mBAC5B;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,OAAO,EAAE,CAAA;QAClB,MAAM,EAAE;YACP,WAAW,EAAE;gBAAE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAA;aAAE,CAAA;YACnD,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAA;SAChC,CAAA;KACD,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC;aACzB,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;UACrE,MAAM;kBACE,MAAM,GAAG,MAAM,GAAG,SAAS;oBACzB,MAAM,MAAM,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,GAAG,SAAS;IAoH7E;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
|
package/dist/response.d.ts
CHANGED
|
@@ -41,6 +41,12 @@ export declare class HoneyRes {
|
|
|
41
41
|
html<SK extends StatusKey>(statusKey: SK, body: string, opts?: ResponseOptions): TypedResponse<"text/html", SK>;
|
|
42
42
|
json<SK extends StatusKey>(statusKey: SK, data: unknown, opts?: ResponseOptions): TypedResponse<"application/json", SK>;
|
|
43
43
|
noContent(opts?: ResponseOptions): TypedResponse<"none", "no_content">;
|
|
44
|
+
/**
|
|
45
|
+
* Return a native Response. `fetch()`, `Fetcher.fetch`, `cache.match`, and `Response.redirect`
|
|
46
|
+
* return guarded headers that throw on `set`, which breaks response middleware (`requestId`,
|
|
47
|
+
* `secureHeaders`, `poweredBy`, `serverTiming`). Copy status and headers into a new Response; the
|
|
48
|
+
* body streams through unread. WebSocket upgrades and responses Honey built pass through as-is.
|
|
49
|
+
*/
|
|
44
50
|
raw(response: Response): TypedResponse;
|
|
45
51
|
redirect(url: string, opts?: ResponseOptions): TypedResponse<"none", "found">;
|
|
46
52
|
sse(callback: (stream: SSEStream) => Promise<void>, opts?: SSEOptions): TypedResponse<"text/event-stream", "ok">;
|
package/dist/response.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../src/response.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../src/response.ts"],"names":[],"mappings":"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"}
|
package/dist/tree.d.ts
CHANGED
|
@@ -83,6 +83,12 @@ export declare function matchWsRoute(root: TreeNode, path: string): {
|
|
|
83
83
|
handler: WSRouteHandler;
|
|
84
84
|
params: Record<string, string>;
|
|
85
85
|
} | null;
|
|
86
|
+
/**
|
|
87
|
+
* Copy input/output schemas from `source` onto matching routes in `target` that lack them.
|
|
88
|
+
* Generate-time only: a gateway app serves an intern tree (no schemas) while its merge source
|
|
89
|
+
* (`mergeTree` over downstream `app.toRouteTree()`) still carries them for OpenAPI.
|
|
90
|
+
*/
|
|
91
|
+
export declare function overlaySchemas(target: TreeNode, source: TreeNode): void;
|
|
86
92
|
/** Merge source tree nodes into target tree (mutates target) */
|
|
87
93
|
export declare function mergeInto(target: TreeNode, source: TreeNode): void;
|
|
88
94
|
type TreeInput = RouteTree | [RouteTree, Record<string, unknown>];
|
package/dist/tree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/plugin.ts
CHANGED
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
import type { OpenApiRouteInfo, OpenApiSanitizeOptions, OpenApiSpecInput } from "./codegen.ts"
|
|
15
15
|
import type { Honey } from "./index.ts"
|
|
16
16
|
import type { InvalidateCheckConfig } from "./invalidate-check.ts"
|
|
17
|
+
import { overlaySchemas } from "./tree.ts"
|
|
17
18
|
import type { ExtractedChainTypes } from "./type-extractor.ts"
|
|
18
19
|
import { toYaml, yamlSiblingPath } from "./yaml.ts"
|
|
19
20
|
|
|
@@ -393,6 +394,7 @@ export async function generateAndWrite(config: ResolvedHoneyConfig, root: string
|
|
|
393
394
|
const cg = config.codegen
|
|
394
395
|
|
|
395
396
|
/* phase 1: route tree — from mergeTree source or app */
|
|
397
|
+
let mergeSource: TreeResult | undefined
|
|
396
398
|
if (cg.tree && (cg.mergeTree || config.app)) {
|
|
397
399
|
const treeSrc = resolve(root, cg.mergeTree ?? config.app ?? "")
|
|
398
400
|
const exported = await loadDefaultWithJiti(treeSrc)
|
|
@@ -402,11 +404,15 @@ export async function generateAndWrite(config: ResolvedHoneyConfig, root: string
|
|
|
402
404
|
treeCode = generateRouteTreeFromApp(exported)
|
|
403
405
|
} else if (isRouteTree(exported)) {
|
|
404
406
|
treeCode = generateRouteTreeFromRouteTree(exported)
|
|
407
|
+
mergeSource = exported
|
|
405
408
|
} else {
|
|
406
409
|
throw new Error(`Expected Honey app or RouteTree default export in ${treeSrc}`)
|
|
407
410
|
}
|
|
408
411
|
|
|
409
412
|
writeGenFile(resolve(root, cg.tree), treeCode, "honey")
|
|
413
|
+
} else if (cg.mergeTree && cg.openApi) {
|
|
414
|
+
const exported = await loadDefaultWithJiti(resolve(root, cg.mergeTree))
|
|
415
|
+
if (isRouteTree(exported)) mergeSource = exported
|
|
410
416
|
}
|
|
411
417
|
|
|
412
418
|
/* phase 2: types, manifest, openapi, sdk, cli — app needed unless sdk has specs */
|
|
@@ -425,6 +431,8 @@ export async function generateAndWrite(config: ResolvedHoneyConfig, root: string
|
|
|
425
431
|
throw new Error(`Expected Honey app default export in ${appPath}`)
|
|
426
432
|
}
|
|
427
433
|
app = appExported
|
|
434
|
+
/* the app serves the intern tree (no schemas); document merged routes from their source */
|
|
435
|
+
if (mergeSource) overlaySchemas(app.toRouteTree().root, mergeSource.root)
|
|
428
436
|
}
|
|
429
437
|
|
|
430
438
|
/* manifest */
|
package/src/response.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CookieOptions } from "./cookie.ts"
|
|
2
2
|
import { serializeCookie } from "./cookie.ts"
|
|
3
3
|
import type { HoneyError } from "./error.ts"
|
|
4
|
-
import { createHoneyResponse } from "./honey-response.ts"
|
|
4
|
+
import { createHoneyResponse, isHoneyResponse } from "./honey-response.ts"
|
|
5
5
|
import type { StatusKey } from "./types.ts"
|
|
6
6
|
import { statusKeyToCode } from "./types.ts"
|
|
7
7
|
|
|
@@ -158,8 +158,15 @@ export class HoneyRes {
|
|
|
158
158
|
return typed(new Response(null, { headers, status: 204 }))
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
+
/**
|
|
162
|
+
* Return a native Response. `fetch()`, `Fetcher.fetch`, `cache.match`, and `Response.redirect`
|
|
163
|
+
* return guarded headers that throw on `set`, which breaks response middleware (`requestId`,
|
|
164
|
+
* `secureHeaders`, `poweredBy`, `serverTiming`). Copy status and headers into a new Response; the
|
|
165
|
+
* body streams through unread. WebSocket upgrades and responses Honey built pass through as-is.
|
|
166
|
+
*/
|
|
161
167
|
raw(response: Response): TypedResponse {
|
|
162
|
-
return typed(response)
|
|
168
|
+
if (response.status === 101 || isHoneyResponse(response) || RAW_BODY in response) return typed(response)
|
|
169
|
+
return typed(new Response(response.body, response))
|
|
163
170
|
}
|
|
164
171
|
|
|
165
172
|
redirect(url: string, opts?: ResponseOptions): TypedResponse<"none", "found"> {
|
package/src/tree.ts
CHANGED
|
@@ -407,6 +407,39 @@ function mergeNodes(target: TreeNode, source: TreeNode, path: string): void {
|
|
|
407
407
|
}
|
|
408
408
|
}
|
|
409
409
|
|
|
410
|
+
function withSchemas(
|
|
411
|
+
target: Record<HttpMethod | "ALL", RouteHandler>,
|
|
412
|
+
source: Record<HttpMethod | "ALL", RouteHandler>,
|
|
413
|
+
): Record<HttpMethod | "ALL", RouteHandler> {
|
|
414
|
+
let next = target
|
|
415
|
+
for (const [method, handler] of Object.entries(target) as Array<[HttpMethod | "ALL", RouteHandler]>) {
|
|
416
|
+
const from = source[method]
|
|
417
|
+
if (from === undefined) continue
|
|
418
|
+
const iv = handler.iv ?? from.iv
|
|
419
|
+
const os = handler.os ?? from.os
|
|
420
|
+
if (iv === handler.iv && os === handler.os) continue
|
|
421
|
+
/* intern trees share handler objects across routes — copy instead of mutating */
|
|
422
|
+
if (next === target) next = { ...target }
|
|
423
|
+
next[method] = { ...handler, iv, os }
|
|
424
|
+
}
|
|
425
|
+
return next
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* Copy input/output schemas from `source` onto matching routes in `target` that lack them.
|
|
430
|
+
* Generate-time only: a gateway app serves an intern tree (no schemas) while its merge source
|
|
431
|
+
* (`mergeTree` over downstream `app.toRouteTree()`) still carries them for OpenAPI.
|
|
432
|
+
*/
|
|
433
|
+
export function overlaySchemas(target: TreeNode, source: TreeNode): void {
|
|
434
|
+
if (target.m !== null && source.m !== null) target.m = withSchemas(target.m, source.m)
|
|
435
|
+
if (target.w !== null && source.w !== null) target.w = { ...target.w, m: withSchemas(target.w.m, source.w.m) }
|
|
436
|
+
for (const [seg, child] of Object.entries(target.s)) {
|
|
437
|
+
const from = source.s[seg]
|
|
438
|
+
if (from !== undefined) overlaySchemas(child, from)
|
|
439
|
+
}
|
|
440
|
+
if (target.d !== null && source.d !== null) overlaySchemas(target.d.c, source.d.c)
|
|
441
|
+
}
|
|
442
|
+
|
|
410
443
|
/** Merge source tree nodes into target tree (mutates target) */
|
|
411
444
|
export function mergeInto(target: TreeNode, source: TreeNode): void {
|
|
412
445
|
bumpGeneration(target)
|