xnl-collab-core 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/index.cjs +573 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +16 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +565 -0
- package/dist/index.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/id.ts","../src/merge.ts"],"names":["wordToString","isWord","diffChars","parseXnl","XNL"],"mappings":"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","file":"index.cjs","sourcesContent":["const ENCODING = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\n\nfunction encodeTime(timeMs: number): string {\n let t = Math.floor(timeMs);\n let out = \"\";\n for (let i = 0; i < 10; i++) {\n out = ENCODING[t % 32] + out;\n t = Math.floor(t / 32);\n }\n return out;\n}\n\nfunction fillRandom(bytes: Uint8Array): void {\n const c: any = globalThis.crypto;\n if (c && typeof c.getRandomValues === \"function\") {\n c.getRandomValues(bytes);\n return;\n }\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n}\n\nfunction encodeRandom(length: number): string {\n const bytes = new Uint8Array(length);\n fillRandom(bytes);\n\n let out = \"\";\n for (let i = 0; i < bytes.length; i++) {\n out += ENCODING[bytes[i] & 31];\n }\n return out;\n}\n\nexport function ulid(nowMs: number = Date.now()): string {\n return encodeTime(nowMs) + encodeRandom(16);\n}\n\nexport function makeId(prefix: string): string {\n return `${prefix}${ulid()}`;\n}\n","import {\n parseXnl,\n XNL,\n isWord,\n type AttributeMap,\n type DataElementNode,\n type ExtendBody,\n type TextElementNode,\n type XnlDocument,\n type XnlNode,\n type XnlMutation,\n type XnlWord,\n wordToString,\n} from \"xnl-core\";\nimport { diffChars } from \"diff\";\nimport { makeId } from \"./id\";\n\nexport type MergeResult = {\n text: string;\n nodes: XnlNode[];\n};\n\nfunction assertAtMostOneRoot(nodes: XnlNode[], context: string): void {\n if (nodes.length <= 1) return;\n throw new Error(`${context}: expected 0 or 1 root node, got ${nodes.length}`);\n}\n\nfunction lastOrUndefined(nodes: XnlNode[]): XnlNode | undefined {\n return nodes.length ? (nodes[nodes.length - 1] as XnlNode) : undefined;\n}\n\nfunction mergeRootNodes3(baseNodes: XnlNode[], leftNodes: XnlNode[], rightNodes: XnlNode[]): XnlNode[] {\n const b = lastOrUndefined(baseNodes);\n const l = lastOrUndefined(leftNodes);\n const r = lastOrUndefined(rightNodes);\n\n const bid = b ? readStableId(b) : undefined;\n const lid = l ? readStableId(l) : undefined;\n const rid = r ? readStableId(r) : undefined;\n\n if (!b) {\n if (!l && !r) return [];\n if (!l) return [r as XnlNode];\n if (!r) return [l as XnlNode];\n\n if (lid && rid && lid === rid) {\n const merged = mergeAny(undefined, l, r, \"root\");\n return merged === undefined ? [] : [merged as XnlNode];\n }\n\n return winnerForKey(\"root\") === \"right\" ? [r] : [l];\n }\n\n if (!l && !r) return [];\n\n if (!l && r) {\n if (bid && rid && bid === rid) return [];\n return [r];\n }\n\n if (l && !r) {\n if (bid && lid && bid === lid) return [];\n return winnerForKey(\"root\") === \"right\" ? [] : [l];\n }\n\n if (lid && rid && lid === rid) {\n const merged = bid && bid === lid ? mergeAny(b, l, r, \"root\") : mergeAny(undefined, l, r, \"root\");\n return merged === undefined ? [] : [merged as XnlNode];\n }\n\n if (bid && lid && bid === lid && (!rid || bid !== rid)) {\n return [r as XnlNode];\n }\n\n if (bid && rid && bid === rid && (!lid || bid !== lid)) {\n return [l as XnlNode];\n }\n\n return winnerForKey(\"root\") === \"right\" ? [r as XnlNode] : [l as XnlNode];\n}\n\ntype Winner = \"left\" | \"right\";\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value) && (value as any).kind === undefined;\n}\n\nfunction isDataElement(node: any): node is DataElementNode {\n return node && node.kind === \"DataElement\";\n}\n\nfunction isTextElement(node: any): node is TextElementNode {\n return node && node.kind === \"TextElement\";\n}\n\nfunction cloneJson<T>(v: T): T {\n return JSON.parse(JSON.stringify(v)) as T;\n}\n\nfunction readNodeId(node: any): string | undefined {\n if (!isDataElement(node) && !isTextElement(node)) return undefined;\n return wordToString(node.id as XnlWord | undefined);\n}\n\nfunction readMetaId(node: any): string | undefined {\n if (!isDataElement(node) && !isTextElement(node)) return undefined;\n const raw = (node as any).metadata?.id;\n if (typeof raw === \"string\") return raw;\n if (isWord(raw)) return wordToString(raw) ?? undefined;\n return undefined;\n}\n\nfunction readStableId(node: any): string | undefined {\n return readMetaId(node) ?? readNodeId(node);\n}\n\nfunction readTag(node: any): string | undefined {\n if (!isDataElement(node) && !isTextElement(node)) return undefined;\n return node.tag;\n}\n\nfunction setMetaId(node: any, id: string) {\n if (!isDataElement(node) && !isTextElement(node)) return;\n if (!node.metadata || typeof node.metadata !== \"object\" || Array.isArray(node.metadata)) {\n node.metadata = {};\n }\n node.metadata.id = id;\n}\n\nfunction makeMetaId(prefix: string): string {\n return makeId(prefix);\n}\n\nexport function ensureMetadataIds(root: XnlNode | XnlDocument, prefix: string): void {\n const visit = (node: any) => {\n if (isDataElement(node) || isTextElement(node)) {\n const existing = readMetaId(node);\n if (!existing) {\n setMetaId(node, makeMetaId(prefix));\n } else if ((node as any).metadata?.id && typeof (node as any).metadata.id !== \"string\") {\n setMetaId(node, existing);\n }\n\n if (isDataElement(node)) {\n if (node.body) for (const child of node.body) visit(child);\n if (node.extend) {\n for (const tag of node.extend.order) {\n const child = node.extend.children[tag];\n if (child) visit(child);\n }\n }\n if (node.attributes) {\n for (const v of Object.values(node.attributes)) visit(v);\n }\n for (const v of Object.values(node.metadata ?? {})) visit(v);\n } else {\n if (node.attributes) {\n for (const v of Object.values(node.attributes)) visit(v);\n }\n for (const v of Object.values(node.metadata ?? {})) visit(v);\n }\n return;\n }\n\n if (Array.isArray(node)) {\n for (const child of node) visit(child);\n return;\n }\n\n if (isPlainObject(node)) {\n for (const key of Object.keys(node)) visit((node as any)[key]);\n }\n };\n\n if ((root as any).nodes && Array.isArray((root as any).nodes)) {\n for (const n of (root as any).nodes) visit(n);\n } else {\n visit(root);\n }\n}\n\nfunction winnerForKey(_key: string): Winner {\n return \"right\";\n}\n\nfunction mergePrimitive(base: any, left: any, right: any, key: string): any {\n if (left === right) return left;\n if (left === base) return right;\n if (right === base) return left;\n return winnerForKey(key) === \"right\" ? right : left;\n}\n\ntype Edit = { start: number; end: number; text: string };\n\nfunction normalizeEdits(edits: Edit[]): Edit[] {\n const sorted = edits\n .slice()\n .sort((a, b) => (a.start !== b.start ? a.start - b.start : a.end - b.end));\n\n const out: Edit[] = [];\n for (const e of sorted) {\n const prev = out[out.length - 1];\n if (!prev) {\n out.push(e);\n continue;\n }\n\n if (prev.end === e.start && prev.end === prev.start && e.start === e.end) {\n prev.text += e.text;\n continue;\n }\n\n if (prev.end === e.start && prev.text.length === 0 && e.text.length === 0) {\n prev.end = e.end;\n continue;\n }\n\n out.push(e);\n }\n\n return out;\n}\n\nfunction diffToEdits(base: string, other: string): Edit[] {\n const changes = diffChars(base, other);\n let basePos = 0;\n const edits: Edit[] = [];\n\n for (let i = 0; i < changes.length; i++) {\n const c = changes[i] as { value: string; added?: boolean; removed?: boolean };\n\n if (c.removed) {\n const start = basePos;\n const end = basePos + c.value.length;\n basePos = end;\n\n let inserted = \"\";\n while (i + 1 < changes.length && (changes[i + 1] as any).added) {\n inserted += (changes[i + 1] as any).value;\n i++;\n }\n edits.push({ start, end, text: inserted });\n continue;\n }\n\n if (c.added) {\n edits.push({ start: basePos, end: basePos, text: c.value });\n continue;\n }\n\n basePos += c.value.length;\n }\n\n return normalizeEdits(edits);\n}\n\nfunction editsOverlap(a: Edit, b: Edit): boolean {\n const aIsIns = a.start === a.end;\n const bIsIns = b.start === b.end;\n\n if (aIsIns && bIsIns) {\n return a.start === b.start;\n }\n\n if (aIsIns && !bIsIns) {\n return b.start <= a.start && a.start <= b.end;\n }\n\n if (!aIsIns && bIsIns) {\n return a.start <= b.start && b.start <= a.end;\n }\n\n return Math.max(a.start, b.start) < Math.min(a.end, b.end);\n}\n\nfunction hasOverlappingEdits(left: Edit[], right: Edit[]): boolean {\n let i = 0;\n let j = 0;\n\n const l = left.slice().sort((a, b) => a.start - b.start);\n const r = right.slice().sort((a, b) => a.start - b.start);\n\n while (i < l.length && j < r.length) {\n const le = l[i];\n const re = r[j];\n\n if (editsOverlap(le, re)) return true;\n\n const leEnd = le.end;\n const reEnd = re.end;\n\n if (leEnd < re.start || (le.end === le.start && le.start < re.start)) {\n i++;\n continue;\n }\n if (reEnd < le.start || (re.end === re.start && re.start < le.start)) {\n j++;\n continue;\n }\n\n if (le.start <= re.start) i++;\n else j++;\n }\n\n return false;\n}\n\nfunction applyEdits(base: string, edits: Edit[]): string {\n const sorted = edits\n .slice()\n .sort((a, b) => (a.start !== b.start ? a.start - b.start : a.end - b.end));\n\n let out = \"\";\n let cursor = 0;\n\n for (const e of sorted) {\n out += base.slice(cursor, e.start);\n out += e.text;\n cursor = e.end;\n }\n\n out += base.slice(cursor);\n return out;\n}\n\nfunction mergeText3(base: string, left: string, right: string): string {\n if (left === right) return left;\n if (left === base) return right;\n if (right === base) return left;\n\n const editsL = diffToEdits(base, left);\n const editsR = diffToEdits(base, right);\n\n if (hasOverlappingEdits(editsL, editsR)) {\n return winnerForKey(\"text\") === \"right\" ? right : left;\n }\n\n return applyEdits(base, [...editsL, ...editsR]);\n}\n\nfunction mergePlainObject(base: Record<string, any>, left: Record<string, any>, right: Record<string, any>): Record<string, any> {\n const out: Record<string, any> = {};\n const keys = new Set<string>([...Object.keys(base || {}), ...Object.keys(left || {}), ...Object.keys(right || {})]);\n\n for (const key of keys) {\n const b = (base || {})[key];\n const l = (left || {})[key];\n const r = (right || {})[key];\n\n if (l === undefined && r === undefined) continue;\n\n out[key] = mergeAny(b, l, r, key);\n }\n\n return out;\n}\n\nfunction stableUnique(values: string[]): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const v of values) {\n if (seen.has(v)) continue;\n seen.add(v);\n out.push(v);\n }\n return out;\n}\n\nfunction mergeIdOrder(baseIds: string[], leftIds: string[], rightIds: string[]): string[] {\n const present = new Set<string>([...leftIds, ...rightIds]);\n const nodes = Array.from(present);\n\n const edges = new Map<string, Set<string>>();\n const indeg = new Map<string, number>();\n\n for (const id of nodes) {\n edges.set(id, new Set());\n indeg.set(id, 0);\n }\n\n const addEdge = (from: string, to: string) => {\n if (!present.has(from) || !present.has(to)) return;\n if (from === to) return;\n const s = edges.get(from) as Set<string>;\n if (s.has(to)) return;\n s.add(to);\n indeg.set(to, (indeg.get(to) ?? 0) + 1);\n };\n\n const addEdgesFromOrder = (order: string[]) => {\n for (let i = 0; i + 1 < order.length; i++) addEdge(order[i] as string, order[i + 1] as string);\n };\n\n addEdgesFromOrder(leftIds);\n addEdgesFromOrder(rightIds);\n\n const basePos = new Map<string, number>();\n baseIds.forEach((id, idx) => basePos.set(id, idx));\n const leftPos = new Map<string, number>();\n leftIds.forEach((id, idx) => leftPos.set(id, idx));\n const rightPos = new Map<string, number>();\n rightIds.forEach((id, idx) => rightPos.set(id, idx));\n\n const rank = (id: string): [number, number, number, string] => {\n return [basePos.get(id) ?? 1e9, leftPos.get(id) ?? 1e9, rightPos.get(id) ?? 1e9, id];\n };\n\n const compare = (a: string, b: string): number => {\n const ra = rank(a);\n const rb = rank(b);\n for (let i = 0; i < ra.length; i++) {\n if (ra[i] < rb[i]) return -1;\n if (ra[i] > rb[i]) return 1;\n }\n return 0;\n };\n\n const zeros: string[] = nodes.filter((id) => (indeg.get(id) ?? 0) === 0).sort(compare);\n const out: string[] = [];\n\n while (zeros.length) {\n const id = zeros.shift() as string;\n out.push(id);\n\n for (const to of edges.get(id) ?? []) {\n indeg.set(to, (indeg.get(to) ?? 0) - 1);\n if ((indeg.get(to) ?? 0) === 0) {\n zeros.push(to);\n }\n }\n\n zeros.sort(compare);\n }\n\n if (out.length !== nodes.length) {\n return stableUnique([...leftIds, ...rightIds]);\n }\n\n return out;\n}\n\nfunction mergeNodeList(base: XnlNode[], left: XnlNode[], right: XnlNode[]): XnlNode[] {\n const baseById = new Map<string, XnlNode>();\n const leftById = new Map<string, XnlNode>();\n const rightById = new Map<string, XnlNode>();\n\n const baseIds: string[] = [];\n const leftIds: string[] = [];\n const rightIds: string[] = [];\n\n const collect = (arr: XnlNode[], ids: string[], map: Map<string, XnlNode>) => {\n for (const n of arr) {\n const id = readStableId(n);\n if (!id) continue;\n ids.push(id);\n if (!map.has(id)) map.set(id, n);\n }\n };\n\n collect(base, baseIds, baseById);\n collect(left, leftIds, leftById);\n collect(right, rightIds, rightById);\n\n const order = mergeIdOrder(baseIds, leftIds, rightIds);\n\n const merged: XnlNode[] = [];\n\n for (const id of order) {\n const b = baseById.get(id);\n const l = leftById.get(id);\n const r = rightById.get(id);\n\n const m = mergeAny(b, l, r, \"node\");\n if (m !== undefined) merged.push(m);\n }\n\n const seenAnon = new Set<string>();\n const pushAnon = (n: XnlNode) => {\n const key = JSON.stringify(n);\n if (seenAnon.has(key)) return;\n seenAnon.add(key);\n merged.push(n);\n };\n\n for (const n of left) {\n if (readStableId(n)) continue;\n pushAnon(n);\n }\n for (const n of right) {\n if (readStableId(n)) continue;\n pushAnon(n);\n }\n\n return merged;\n}\n\nfunction mergeExtend(base: ExtendBody | undefined, left: ExtendBody | undefined, right: ExtendBody | undefined): ExtendBody | undefined {\n if (!base && !left && !right) return undefined;\n\n const b = base ?? { order: [], children: {} };\n const l = left ?? { order: [], children: {} };\n const r = right ?? { order: [], children: {} };\n\n const mergedChildren: Record<string, any> = {};\n const keys = new Set([...Object.keys(b.children), ...Object.keys(l.children), ...Object.keys(r.children)]);\n\n for (const k of keys) {\n const bv = b.children[k];\n const lv = l.children[k];\n const rv = r.children[k];\n\n if (lv === undefined && rv === undefined) continue;\n const merged = mergeAny(bv, lv, rv, k);\n if (merged !== undefined) mergedChildren[k] = merged;\n }\n\n const present = new Set(Object.keys(mergedChildren));\n const order = stableUnique([...l.order, ...r.order, ...b.order]).filter((t) => present.has(t));\n\n return { order, children: mergedChildren };\n}\n\nfunction mergeTextElement(base: TextElementNode, left: TextElementNode, right: TextElementNode): TextElementNode {\n const tag = mergePrimitive(base.tag, left.tag, right.tag, \"tag\");\n const id = mergePrimitive(base.id, left.id, right.id, \"id\");\n\n const metadata = mergePlainObject(base.metadata ?? {}, left.metadata ?? {}, right.metadata ?? {}) as AttributeMap;\n const attributes = mergePlainObject(base.attributes ?? {}, left.attributes ?? {}, right.attributes ?? {}) as AttributeMap;\n\n const baseText = base.text ?? \"\";\n const leftText = left.text ?? \"\";\n const rightText = right.text ?? \"\";\n const text = mergeText3(baseText, leftText, rightText);\n\n const baseMarker = base.textMarker ?? \"\";\n const leftMarker = left.textMarker ?? \"\";\n const rightMarker = right.textMarker ?? \"\";\n const textMarker = mergeText3(baseMarker, leftMarker, rightMarker);\n\n const out: TextElementNode = {\n kind: \"TextElement\",\n tag,\n id,\n metadata,\n attributes: Object.keys(attributes).length ? attributes : undefined,\n text: text.length ? text : undefined,\n textMarker: textMarker.length ? textMarker : undefined,\n };\n\n const sid = readMetaId(left) ?? readMetaId(right) ?? readMetaId(base);\n if (sid) setMetaId(out, sid);\n\n return out;\n}\n\nfunction mergeDataElement(base: DataElementNode, left: DataElementNode, right: DataElementNode): DataElementNode {\n const tag = mergePrimitive(base.tag, left.tag, right.tag, \"tag\");\n const id = mergePrimitive(base.id, left.id, right.id, \"id\");\n\n const metadata = mergePlainObject(base.metadata ?? {}, left.metadata ?? {}, right.metadata ?? {}) as AttributeMap;\n const attributes = mergePlainObject(base.attributes ?? {}, left.attributes ?? {}, right.attributes ?? {}) as AttributeMap;\n\n const body = mergeNodeList(base.body ?? [], left.body ?? [], right.body ?? []);\n const extend = mergeExtend(base.extend, left.extend, right.extend);\n\n const out: DataElementNode = {\n kind: \"DataElement\",\n tag,\n id,\n metadata,\n attributes: Object.keys(attributes).length ? attributes : undefined,\n body: body.length ? body : undefined,\n extend,\n };\n\n const sid = readMetaId(left) ?? readMetaId(right) ?? readMetaId(base);\n if (sid) setMetaId(out, sid);\n\n return out;\n}\n\nfunction mergeAny(base: any, left: any, right: any, key: string): any {\n if (left === undefined && right === undefined) return undefined;\n if (left === undefined) return right;\n if (right === undefined) return left;\n\n if (left === right) return left;\n\n if (base === undefined) {\n if (isDataElement(left) && isDataElement(right)) {\n return mergeDataElement(left, left, right);\n }\n if (isTextElement(left) && isTextElement(right)) {\n return mergeTextElement(left, left, right);\n }\n if (Array.isArray(left) && Array.isArray(right)) {\n return mergeNodeList([], left, right);\n }\n if (isPlainObject(left) && isPlainObject(right)) {\n return mergePlainObject({}, left, right);\n }\n return winnerForKey(key) === \"right\" ? right : left;\n }\n\n if (typeof base === \"string\" || typeof base === \"number\" || typeof base === \"boolean\" || base === null) {\n return mergePrimitive(base, left, right, key);\n }\n\n if (Array.isArray(base) && Array.isArray(left) && Array.isArray(right)) {\n return mergeNodeList(base, left, right);\n }\n\n if (isPlainObject(base) && isPlainObject(left) && isPlainObject(right)) {\n return mergePlainObject(base, left, right);\n }\n\n if (isTextElement(base) && isTextElement(left) && isTextElement(right)) {\n return mergeTextElement(base, left, right);\n }\n\n if (isDataElement(base) && isDataElement(left) && isDataElement(right)) {\n return mergeDataElement(base, left, right);\n }\n\n return mergePrimitive(base, left, right, key);\n}\n\nexport function mergeDocuments3(baseText: string, leftText: string, rightText: string): MergeResult {\n const base = parseXnl(baseText);\n const left = parseXnl(leftText);\n const right = parseXnl(rightText);\n\n const mergedNodes = mergeRootNodes3(base.nodes, left.nodes, right.nodes);\n\n ensureMetadataIds({ nodes: mergedNodes }, \"m_\");\n\n const mergedText = XNL.stringify({ nodes: mergedNodes });\n const canonical = parseXnl(mergedText);\n assertAtMostOneRoot(canonical.nodes, \"mergeDocuments3\");\n const canonicalText = XNL.stringify(canonical);\n\n return { text: canonicalText, nodes: canonical.nodes };\n}\n\nexport function canonicalizeText(text: string, prefix: string): MergeResult {\n const parsed = parseXnl(text);\n assertAtMostOneRoot(parsed.nodes, \"canonicalizeText\");\n\n const nodes = cloneJson(parsed.nodes);\n ensureMetadataIds({ nodes }, prefix);\n\n const withIdsText = XNL.stringify({ nodes });\n const canonical = parseXnl(withIdsText);\n assertAtMostOneRoot(canonical.nodes, \"canonicalizeText\");\n const canonicalText = XNL.stringify(canonical);\n\n return { text: canonicalText, nodes: canonical.nodes };\n}\n\nexport function applyIntent(baseText: string, mutations: XnlMutation[]): MergeResult {\n const base = canonicalizeText(baseText, \"s_\");\n assertAtMostOneRoot(base.nodes, \"applyIntent\");\n\n const baseRoot = base.nodes[0];\n const baseTag = baseRoot ? readTag(baseRoot) : undefined;\n\n const root = cloneJson(base.nodes);\n\n const next = XNL.mutation.apply(root, mutations, { metadataIdMode: \"identity\" });\n if (!Array.isArray(next)) {\n throw new Error(\"Root must remain array\");\n }\n\n assertAtMostOneRoot(next as XnlNode[], \"applyIntent\");\n\n if (baseTag) {\n const nextRoot = (next as XnlNode[])[0];\n const nextTag = nextRoot ? readTag(nextRoot) : undefined;\n\n if (!nextTag) {\n throw new Error(\"applyIntent: root node required\");\n }\n\n if (nextTag !== baseTag) {\n throw new Error(`applyIntent: root tag locked to <${baseTag}>`);\n }\n }\n\n ensureMetadataIds({ nodes: next }, \"s_\");\n\n const nextText = XNL.stringify({ nodes: next });\n const canonical = parseXnl(nextText);\n assertAtMostOneRoot(canonical.nodes, \"applyIntent\");\n const canonicalText = XNL.stringify(canonical);\n\n return { text: canonicalText, nodes: canonical.nodes };\n}\n\nexport function mergeExample(baseText: string, leftText: string, rightText: string): string {\n return mergeDocuments3(baseText, leftText, rightText).text;\n}\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { XnlNode, XnlDocument, XnlMutation } from 'xnl-core';
|
|
2
|
+
|
|
3
|
+
declare function ulid(nowMs?: number): string;
|
|
4
|
+
declare function makeId(prefix: string): string;
|
|
5
|
+
|
|
6
|
+
type MergeResult = {
|
|
7
|
+
text: string;
|
|
8
|
+
nodes: XnlNode[];
|
|
9
|
+
};
|
|
10
|
+
declare function ensureMetadataIds(root: XnlNode | XnlDocument, prefix: string): void;
|
|
11
|
+
declare function mergeDocuments3(baseText: string, leftText: string, rightText: string): MergeResult;
|
|
12
|
+
declare function canonicalizeText(text: string, prefix: string): MergeResult;
|
|
13
|
+
declare function applyIntent(baseText: string, mutations: XnlMutation[]): MergeResult;
|
|
14
|
+
declare function mergeExample(baseText: string, leftText: string, rightText: string): string;
|
|
15
|
+
|
|
16
|
+
export { type MergeResult, applyIntent, canonicalizeText, ensureMetadataIds, makeId, mergeDocuments3, mergeExample, ulid };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { XnlNode, XnlDocument, XnlMutation } from 'xnl-core';
|
|
2
|
+
|
|
3
|
+
declare function ulid(nowMs?: number): string;
|
|
4
|
+
declare function makeId(prefix: string): string;
|
|
5
|
+
|
|
6
|
+
type MergeResult = {
|
|
7
|
+
text: string;
|
|
8
|
+
nodes: XnlNode[];
|
|
9
|
+
};
|
|
10
|
+
declare function ensureMetadataIds(root: XnlNode | XnlDocument, prefix: string): void;
|
|
11
|
+
declare function mergeDocuments3(baseText: string, leftText: string, rightText: string): MergeResult;
|
|
12
|
+
declare function canonicalizeText(text: string, prefix: string): MergeResult;
|
|
13
|
+
declare function applyIntent(baseText: string, mutations: XnlMutation[]): MergeResult;
|
|
14
|
+
declare function mergeExample(baseText: string, leftText: string, rightText: string): string;
|
|
15
|
+
|
|
16
|
+
export { type MergeResult, applyIntent, canonicalizeText, ensureMetadataIds, makeId, mergeDocuments3, mergeExample, ulid };
|