Closes the architecture item from the #119 review: drop the "vendored from docmost-sync" framing and the CJS↔ESM `Function('import()')` bridge so the engine is a normal first-class gitmost package. Part 1 — vendoring markers removed (prose only, zero behavior change): reworded "VENDORED into gitmost" / "vendored from docmost-sync" / "Engine LOGIC is byte-identical" / "it's a port" comments across the engine. Behavior-bearing strings are untouched: BOT_AUTHOR_NAME/EMAIL and the `Docmost-Sync-Source:` provenance trailers (changing them would break git authorship + the loop-guard). Part 2 — the package is now ESM (matching the sibling @docmost/mcp): `type: module`, tsconfig Node16, `.js` extensions on relative imports, and a static `import { marked }` replacing the `new Function('return import(...)')` / `loadMarked` hack — the bridge is GONE from the package. The CommonJS NestJS server loads the now-ESM engine via a new `git-sync.loader.ts` that mirrors the existing `docmost-client.loader.ts` mcp loader exactly (Function-indirected dynamic import + cached promise + retry-on-reject). The 4 server consumers (orchestrator/datasource/vault-registry/git-http-backend) call `await loadGitSync()` for value exports; types stay `import type` (erased). The converter-gate spec — which needs the real converter — loads the package's TS source via a jest moduleNameMapper + isolatedModules (documented in that spec); the other git-sync specs mock the loader. Verified: engine builds pure ESM (no Function/require leftover), vitest 614, editor-ext build, server + client tsc, full server jest 1397/0. Live stand smoke-test: server starts clean on the ESM engine (no ERR_REQUIRE_ESM), a real sync cycle runs through the loader, and the basic e2e suite is 12/12 (clone via git-http-backend, push, pull, delete, 3-way merge — all through the new loader). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
27 lines
971 B
TypeScript
27 lines
971 B
TypeScript
/**
|
|
* Public surface of the pure converter (`lib/`). This barrel re-exports the
|
|
* PURE, IO-free pieces the sync engine needs: the self-contained markdown
|
|
* (de)serializers, the lossless ProseMirror <-> Markdown converter, the
|
|
* markdown -> ProseMirror import path, and semantic canonicalization for the
|
|
* round-trip idempotency check (SPEC §11).
|
|
*
|
|
* There is no REST client, websocket/collab write-path, auth-utils or page-lock
|
|
* here — the gitmost server writes natively.
|
|
*/
|
|
export {
|
|
serializeDocmostMarkdown,
|
|
parseDocmostMarkdown,
|
|
serializeDocmostMarkdownBody,
|
|
} from "./markdown-document.js";
|
|
export type { DocmostMdMeta } from "./markdown-document.js";
|
|
|
|
export { convertProseMirrorToMarkdown } from "./markdown-converter.js";
|
|
|
|
export { markdownToProseMirror } from "./markdown-to-prosemirror.js";
|
|
|
|
export {
|
|
canonicalizeContent,
|
|
docsCanonicallyEqual,
|
|
} from "./canonicalize.js";
|
|
export { parsePageFile, serializePageFile } from "./page-file.js";
|