@agentshouse/mdmodel 0.1.0-alpha.16 → 0.1.0-alpha.18

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.
Files changed (134) hide show
  1. package/API.md +52 -41
  2. package/README.md +2 -4
  3. package/dist/definition.d.ts +7 -3
  4. package/dist/definition.d.ts.map +1 -1
  5. package/dist/definition.js +83 -38
  6. package/dist/definition.js.map +1 -1
  7. package/dist/index.d.ts +1 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +1 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/links.d.ts.map +1 -1
  12. package/dist/links.js +529 -148
  13. package/dist/links.js.map +1 -1
  14. package/dist/paths.d.ts +0 -2
  15. package/dist/paths.d.ts.map +1 -1
  16. package/dist/paths.js +0 -7
  17. package/dist/paths.js.map +1 -1
  18. package/dist/project.d.ts.map +1 -1
  19. package/dist/project.js +13 -17
  20. package/dist/project.js.map +1 -1
  21. package/dist/types.d.ts +6 -5
  22. package/dist/types.d.ts.map +1 -1
  23. package/dist/types.js.map +1 -1
  24. package/dist/validate.d.ts +2 -3
  25. package/dist/validate.d.ts.map +1 -1
  26. package/dist/validate.js +42 -86
  27. package/dist/validate.js.map +1 -1
  28. package/dist/version.d.ts +1 -1
  29. package/dist/version.js +1 -1
  30. package/dist/version.js.map +1 -1
  31. package/dist/yaml.js +1 -1
  32. package/dist/yaml.js.map +1 -1
  33. package/fixtures/README.md +53 -46
  34. package/fixtures/cases/binary-any-reference/schema.yaml +4 -0
  35. package/fixtures/cases/binary-document-collision/schema.yaml +2 -0
  36. package/fixtures/cases/binary-link-outside-collection/schema.yaml +2 -0
  37. package/fixtures/cases/binary-prototype-reference/schema.yaml +4 -0
  38. package/fixtures/cases/binary-typed-reference/schema.yaml +5 -0
  39. package/fixtures/cases/bracketed-link-definition/schema.yaml +6 -0
  40. package/fixtures/cases/declared-binary-links/schema.yaml +2 -0
  41. package/fixtures/cases/duplicate-link-definition/schema.yaml +6 -0
  42. package/fixtures/cases/fenced-link-definition/schema.yaml +6 -0
  43. package/fixtures/cases/field-enum/schema.yaml +7 -0
  44. package/fixtures/cases/frontmatter-schema/expected.json +6 -0
  45. package/fixtures/cases/frontmatter-schema/schema.yaml +6 -0
  46. package/fixtures/cases/interrupted-link-definition/schema.yaml +2 -0
  47. package/fixtures/cases/long-fence-link-definition/schema.yaml +2 -0
  48. package/fixtures/cases/malformed-definition/expected.json +1 -2
  49. package/fixtures/cases/malformed-definition/schema.yaml +4 -0
  50. package/fixtures/cases/member-document/context.json +1 -0
  51. package/fixtures/cases/member-document/library/people/ana.md +5 -0
  52. package/fixtures/cases/member-document/schema.yaml +5 -0
  53. package/fixtures/cases/missing-binary-image/schema.yaml +2 -0
  54. package/fixtures/cases/missing-binary-link/schema.yaml +2 -0
  55. package/fixtures/cases/missing-required-field/schema.yaml +7 -0
  56. package/fixtures/cases/missing-section-item-kind/expected.json +1 -2
  57. package/fixtures/cases/missing-section-item-kind/schema.yaml +6 -0
  58. package/fixtures/cases/paragraph-link-definition/schema.yaml +2 -0
  59. package/fixtures/cases/prototype-field/schema.yaml +6 -0
  60. package/fixtures/cases/quoted-link-definition/schema.yaml +2 -0
  61. package/fixtures/cases/referenced-missing-file/schema.yaml +10 -0
  62. package/fixtures/cases/second-member-document/context.json +1 -0
  63. package/fixtures/cases/second-member-document/expected.json +6 -0
  64. package/fixtures/cases/second-member-document/schema.yaml +5 -0
  65. package/fixtures/cases/shortcut-reference-link/context.json +1 -0
  66. package/fixtures/cases/shortcut-reference-link/expected.json +6 -0
  67. package/fixtures/cases/shortcut-reference-link/library/item.md +10 -0
  68. package/fixtures/cases/shortcut-reference-link/schema.yaml +6 -0
  69. package/fixtures/cases/structured-section/schema.yaml +7 -0
  70. package/fixtures/cases/submission-keys/schema.yaml +4 -0
  71. package/fixtures/cases/text-field-kind/context.json +1 -0
  72. package/fixtures/cases/text-field-kind/expected.json +7 -0
  73. package/fixtures/cases/text-field-kind/library/page.md +4 -0
  74. package/fixtures/cases/text-field-kind/schema.yaml +4 -0
  75. package/fixtures/cases/truncated-link-definition/schema.yaml +2 -0
  76. package/fixtures/cases/types-folder-content/schema.yaml +4 -0
  77. package/fixtures/cases/undeclared-field/schema.yaml +6 -0
  78. package/fixtures/cases/unknown-type/expected.json +7 -0
  79. package/fixtures/cases/unknown-type/schema.yaml +4 -0
  80. package/fixtures/cases/unlisted-reference-type/context.json +1 -0
  81. package/fixtures/cases/unlisted-reference-type/expected.json +6 -0
  82. package/fixtures/cases/unlisted-reference-type/schema.yaml +4 -0
  83. package/fixtures/cases/unresolved-link/schema.yaml +6 -0
  84. package/fixtures/cases/valid-typed-document/schema.yaml +15 -0
  85. package/fixtures/cases/wide-item-fence-link/schema.yaml +2 -0
  86. package/fixtures/division.json +1 -21
  87. package/fixtures/projection.json +58 -20
  88. package/package.json +1 -1
  89. package/fixtures/cases/binary-any-reference/library/types/note.md +0 -5
  90. package/fixtures/cases/binary-document-collision/library/types/note.md +0 -3
  91. package/fixtures/cases/binary-link-outside-collection/library/types/note.md +0 -3
  92. package/fixtures/cases/binary-prototype-reference/library/types/note.md +0 -5
  93. package/fixtures/cases/binary-typed-reference/library/types/note.md +0 -5
  94. package/fixtures/cases/binary-typed-reference/library/types/person.md +0 -3
  95. package/fixtures/cases/bracketed-link-definition/library/types/task.md +0 -7
  96. package/fixtures/cases/declared-binary-links/library/types/note.md +0 -3
  97. package/fixtures/cases/duplicate-link-definition/library/types/task.md +0 -7
  98. package/fixtures/cases/external-invalid-model/definitions/schema/task.md +0 -5
  99. package/fixtures/cases/external-invalid-model/expected.json +0 -1
  100. package/fixtures/cases/external-invalid-model/library/note.md +0 -1
  101. package/fixtures/cases/external-unknown-type/definitions/schema/task.md +0 -5
  102. package/fixtures/cases/external-unknown-type/expected.json +0 -1
  103. package/fixtures/cases/external-valid/context.json +0 -1
  104. package/fixtures/cases/external-valid/definitions/types/task.md +0 -5
  105. package/fixtures/cases/fenced-link-definition/library/types/task.md +0 -7
  106. package/fixtures/cases/field-enum/library/types/task.md +0 -8
  107. package/fixtures/cases/interrupted-link-definition/library/types/note.md +0 -3
  108. package/fixtures/cases/long-fence-link-definition/library/types/note.md +0 -3
  109. package/fixtures/cases/malformed-definition/library/types/task.md +0 -5
  110. package/fixtures/cases/missing-binary-image/library/types/note.md +0 -3
  111. package/fixtures/cases/missing-binary-link/library/types/note.md +0 -3
  112. package/fixtures/cases/missing-required-field/library/types/task.md +0 -8
  113. package/fixtures/cases/missing-section-item-kind/library/types/task.md +0 -7
  114. package/fixtures/cases/paragraph-link-definition/library/types/note.md +0 -3
  115. package/fixtures/cases/prd-definition/library/types/task.md +0 -16
  116. package/fixtures/cases/prototype-field/library/types/task.md +0 -7
  117. package/fixtures/cases/quoted-link-definition/library/types/note.md +0 -3
  118. package/fixtures/cases/referenced-missing-file/library/types/person.md +0 -5
  119. package/fixtures/cases/referenced-missing-file/library/types/task.md +0 -8
  120. package/fixtures/cases/structured-section/library/types/task.md +0 -8
  121. package/fixtures/cases/submission-keys/library/types/note.md +0 -5
  122. package/fixtures/cases/truncated-link-definition/library/types/note.md +0 -3
  123. package/fixtures/cases/undeclared-field/library/types/task.md +0 -7
  124. package/fixtures/cases/unresolved-link/library/types/task.md +0 -7
  125. package/fixtures/cases/valid-typed-document/library/types/person.md +0 -5
  126. package/fixtures/cases/valid-typed-document/library/types/task.md +0 -13
  127. package/fixtures/cases/wide-item-fence-link/library/types/note.md +0 -3
  128. /package/fixtures/cases/{prd-definition → frontmatter-schema}/context.json +0 -0
  129. /package/fixtures/cases/{prd-definition → member-document}/expected.json +0 -0
  130. /package/fixtures/cases/{external-invalid-model → types-folder-content}/context.json +0 -0
  131. /package/fixtures/cases/{external-valid → types-folder-content}/expected.json +0 -0
  132. /package/fixtures/cases/{external-valid → types-folder-content}/library/types/task.md +0 -0
  133. /package/fixtures/cases/{external-unknown-type → unknown-type}/context.json +0 -0
  134. /package/fixtures/cases/{external-unknown-type → unknown-type}/library/item.md +0 -0
package/dist/links.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdmodel/src/links.ts"],"sourcesContent":["type Fence = {\n readonly char: string;\n readonly length: number;\n readonly depth: number;\n readonly column: number;\n readonly item: boolean;\n};\n\ntype Line = {\n readonly start: number;\n readonly end: number;\n readonly content: number;\n readonly depth: number;\n readonly item: boolean;\n readonly inner: number;\n};\n\nconst TAB_STOP = 4;\nconst CLOSING_FENCE_INDENT = 3;\n\nconst HEADING = /^#{1,6}(?:[ \\t]|$)/;\nconst BREAK = /^(?:(?:\\*[ \\t]*){3,}|(?:-[ \\t]*){3,}|(?:_[ \\t]*){3,})$/;\nconst SETEXT = /^(?:=+|-+)[ \\t]*$/;\nconst LABEL = /^\\[((?:[^\\\\\\]\\n]|\\\\.)+)\\]:[ \\t]*/;\nconst DESTINATION = /^(?:(<[^<>\\n\\r]*>)|([^\\s<][^\\s]*))/d;\nconst TITLE = /^(?:\"[^\"\\n]*\"|'[^'\\n]*'|\\([^()\\n]*\\))[ \\t]*$/;\n\nfunction endOfLine(text: string, from: number): number {\n const nl = text.indexOf('\\n', from);\n return nl === -1 ? text.length : nl;\n}\n\nfunction afterLine(text: string, end: number): number {\n return end < text.length ? end + 1 : text.length;\n}\n\nfunction itemMarker(text: string, index: number, end: number): number | null {\n let i = index;\n const bullet = text[i];\n if (bullet === '-' || bullet === '*' || bullet === '+') i += 1;\n else {\n let digits = 0;\n while (digits < 9 && i + digits < end && text[i + digits]! >= '0' && text[i + digits]! <= '9')\n digits += 1;\n const delimiter = text[i + digits];\n if (digits === 0 || (delimiter !== '.' && delimiter !== ')')) return null;\n i += digits + 1;\n }\n if (i >= end) return i;\n if (text[i] !== ' ' && text[i] !== '\\t') return null;\n return i + 1;\n}\n\nfunction readLine(text: string, start: number, end: number): Line {\n let i = start;\n let depth = 0;\n let item = false;\n let inner = start;\n for (;;) {\n let spaces = 0;\n while (spaces < 3 && i < end && text[i] === ' ') {\n i += 1;\n spaces += 1;\n }\n if (i < end && text[i] === '>') {\n depth += 1;\n i += 1;\n if (i < end && text[i] === ' ') i += 1;\n inner = i;\n continue;\n }\n const after = i < end ? itemMarker(text, i, end) : null;\n if (after === null) break;\n item = true;\n i = after;\n }\n return { start, end, content: i, depth, item, inner };\n}\n\nfunction widthOf(text: string, from: number, to: number): number {\n let width = 0;\n for (let i = from; i < to; i += 1) width += text[i] === '\\t' ? TAB_STOP - (width % TAB_STOP) : 1;\n return width;\n}\n\nfunction afterIndent(text: string, line: Line): number {\n let i = line.inner;\n while (i < line.end && (text[i] === ' ' || text[i] === '\\t')) i += 1;\n return i;\n}\n\nfunction indentWidth(text: string, line: Line): number {\n return widthOf(text, line.inner, afterIndent(text, line));\n}\n\nfunction lineText(text: string, line: Line): string {\n const raw = text.slice(line.content, line.end);\n return raw.endsWith('\\r') ? raw.slice(0, -1) : raw;\n}\n\nfunction fenceRun(\n text: string,\n at: number,\n end: number,\n): { readonly char: string; readonly length: number } | null {\n const char = text[at];\n if (char !== '`' && char !== '~') return null;\n let length = 0;\n while (at + length < end && text[at + length] === char) length += 1;\n return length < 3 ? null : { char, length };\n}\n\nfunction fenceAt(text: string, line: Line): Fence | null {\n const run = fenceRun(text, line.content, line.end);\n if (run === null) return null;\n return {\n char: run.char,\n length: run.length,\n depth: line.depth,\n column: line.item ? widthOf(text, line.inner, line.content) : 0,\n item: line.item,\n };\n}\n\nfunction closesFence(text: string, line: Line, open: Fence): boolean {\n if (line.depth !== open.depth || line.item) return false;\n const indent = indentWidth(text, line);\n if (indent < open.column || indent > open.column + CLOSING_FENCE_INDENT) return false;\n const at = afterIndent(text, line);\n const run = fenceRun(text, at, line.end);\n if (run === null || run.char !== open.char || run.length < open.length) return false;\n return text.slice(at + run.length, line.end).trim() === '';\n}\n\nfunction leavesContainer(text: string, line: Line, open: Fence): boolean {\n if (line.depth < open.depth) return true;\n if (!open.item || lineText(text, line).trim() === '') return false;\n return indentWidth(text, line) < open.column;\n}\n\nfunction fenceSpan(text: string, line: Line, open: Fence): number {\n let cursor = afterLine(text, line.end);\n while (cursor < text.length) {\n const end = endOfLine(text, cursor);\n const next = readLine(text, cursor, end);\n if (leavesContainer(text, next, open)) return cursor;\n if (closesFence(text, next, open)) return afterLine(text, end);\n cursor = afterLine(text, end);\n }\n return text.length;\n}\n\nfunction skipInlineCode(text: string, index: number): number {\n let ticks = 0;\n while (text[index + ticks] === '`') ticks += 1;\n const close = text.indexOf('`'.repeat(ticks), index + ticks);\n if (close === -1) return text.length;\n return close + ticks;\n}\n\nfunction skipLinkSpace(text: string, start: number): number {\n let i = start;\n while (text[i] === ' ' || text[i] === '\\t') i += 1;\n return i;\n}\n\nfunction skipTitle(text: string, start: number): number | null {\n const open = text[start];\n if (open !== '\"' && open !== \"'\" && open !== '(') return start;\n const close = open === '(' ? ')' : open;\n let i = start + 1;\n while (i < text.length) {\n const ch = text[i]!;\n if (ch === close) return i + 1;\n if (ch === '\\n' || ch === '\\r') return null;\n i += 1;\n }\n return null;\n}\n\nfunction destination(\n text: string,\n start: number,\n): { occurrence: HrefOccurrence; end: number } | null {\n let i = skipLinkSpace(text, start + 1);\n let occurrence: HrefOccurrence;\n if (text[i] === '<') {\n const close = text.indexOf('>', i + 1);\n if (close === -1) return null;\n occurrence = { href: text.slice(i + 1, close), start: i, end: close + 1, bracketed: true };\n i = close + 1;\n } else {\n const from = i;\n let depth = 0;\n while (i < text.length) {\n const ch = text[i]!;\n if (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') break;\n if (ch === '(') depth += 1;\n else if (ch === ')') {\n if (depth === 0) break;\n depth -= 1;\n }\n i += 1;\n }\n occurrence = { href: text.slice(from, i), start: from, end: i, bracketed: false };\n }\n i = skipLinkSpace(text, i);\n const afterTitle = skipTitle(text, i);\n if (afterTitle === null) return null;\n i = skipLinkSpace(text, afterTitle);\n if (text[i] !== ')') return null;\n return { occurrence, end: i + 1 };\n}\n\nfunction labelEnd(text: string, start: number): number {\n let i = start;\n let depth = 1;\n while (i < text.length && depth > 0) {\n const ch = text[i]!;\n if (ch === '\\\\') {\n i += 2;\n continue;\n }\n if (ch === '[') depth += 1;\n else if (ch === ']') depth -= 1;\n else if (ch === '\\n' || ch === '\\r') return -1;\n i += 1;\n }\n return depth === 0 ? i : -1;\n}\n\nfunction takeLink(\n text: string,\n index: number,\n start: number,\n found: LinkUse[],\n defs: ReadonlyMap<string, HrefOccurrence>,\n): number {\n const end = labelEnd(text, index + 1);\n if (end === -1) return index + 1;\n const label = text.slice(index + 1, end - 1);\n let i = end;\n if (text[i] === '(') {\n const dest = destination(text, i);\n if (dest === null) return index + 1;\n found.push({\n start,\n end: dest.end,\n labelStart: index + 1,\n labelEnd: end - 1,\n destination: dest.occurrence,\n });\n return dest.end;\n }\n if (text[i] === '[') {\n const close = labelEnd(text, i + 1);\n if (close === -1) return index + 1;\n const id = (text.slice(i + 1, close - 1) || label).trim().toLowerCase();\n const defined = defs.get(id);\n if (defined !== undefined) {\n found.push({\n start,\n end: close,\n labelStart: index + 1,\n labelEnd: end - 1,\n destination: defined,\n });\n }\n return close;\n }\n return i;\n}\n\nfunction definitionDestination(text: string, from: number, to: number): HrefOccurrence | null {\n let i = from;\n while (i < to && (text[i] === ' ' || text[i] === '\\t')) i += 1;\n const match = DESTINATION.exec(text.slice(i, to));\n if (match === null) return null;\n const bracketed = match[1];\n const span = match.indices?.[1] ?? match.indices?.[2];\n const href = bracketed === undefined ? match[2] : bracketed.slice(1, -1);\n if (href === undefined || span === undefined) return null;\n return { href, start: i + span[0], end: i + span[1], bracketed: bracketed !== undefined };\n}\n\nfunction definitionAt(\n text: string,\n line: Line,\n): { id: string; occurrence: HrefOccurrence; next: number } | null {\n const head = LABEL.exec(lineText(text, line));\n if (head === null) return null;\n const id = head[1]?.trim().toLowerCase();\n if (id === undefined || id === '') return null;\n const from = line.content + head[0].length;\n let occurrence = definitionDestination(text, from, line.end);\n let next = afterLine(text, line.end);\n if (occurrence === null) {\n if (text.slice(from, line.end).trim() !== '' || next >= text.length) return null;\n const end = endOfLine(text, next);\n occurrence = definitionDestination(text, readLine(text, next, end).content, end);\n if (occurrence === null) return null;\n next = afterLine(text, end);\n }\n if (next < text.length) {\n const end = endOfLine(text, next);\n if (TITLE.test(lineText(text, readLine(text, next, end)))) next = afterLine(text, end);\n }\n return { id, occurrence, next };\n}\n\nfunction endsBlock(content: string): boolean {\n return HEADING.test(content) || BREAK.test(content) || SETEXT.test(content);\n}\n\nfunction scanBlocks(text: string): {\n readonly fences: readonly (readonly [number, number])[];\n readonly definitions: ReadonlyMap<string, HrefOccurrence>;\n readonly blocks: readonly DefinitionBlock[];\n} {\n const fences: [number, number][] = [];\n const definitions = new Map<string, HrefOccurrence>();\n const blocks: DefinitionBlock[] = [];\n let paragraph = false;\n let depth = 0;\n let i = 0;\n while (i < text.length) {\n const line = readLine(text, i, endOfLine(text, i));\n if (line.depth !== depth || line.item) paragraph = false;\n depth = line.depth;\n const open = fenceAt(text, line);\n if (open !== null) {\n const stop = fenceSpan(text, line, open);\n fences.push([i, stop]);\n paragraph = false;\n i = stop;\n continue;\n }\n const content = lineText(text, line);\n if (content.trim() === '') {\n paragraph = false;\n i = afterLine(text, line.end);\n continue;\n }\n const definition = paragraph ? null : definitionAt(text, line);\n if (definition !== null) {\n if (!definitions.has(definition.id)) definitions.set(definition.id, definition.occurrence);\n blocks.push({ start: line.start, end: definition.next, destination: definition.occurrence });\n i = definition.next;\n continue;\n }\n paragraph = !endsBlock(content);\n i = afterLine(text, line.end);\n }\n return { fences, definitions, blocks };\n}\n\nfunction fenceEndAt(\n spans: readonly (readonly [number, number])[],\n index: number,\n): number | undefined {\n for (const [start, end] of spans) {\n if (index >= start && index < end) return end;\n }\n return undefined;\n}\n\nexport type HrefOccurrence = {\n readonly href: string;\n readonly start: number;\n readonly end: number;\n readonly bracketed: boolean;\n};\n\nexport type LinkUse = {\n readonly start: number;\n readonly end: number;\n readonly labelStart: number;\n readonly labelEnd: number;\n readonly destination: HrefOccurrence;\n};\n\nexport type DefinitionBlock = {\n readonly start: number;\n readonly end: number;\n readonly destination: HrefOccurrence;\n};\n\nexport type LinkInventory = {\n readonly uses: readonly LinkUse[];\n readonly blocks: readonly DefinitionBlock[];\n};\n\nexport function fenceSpans(text: string): readonly (readonly [number, number])[] {\n return scanBlocks(text).fences;\n}\n\nexport function linkInventory(body: string): LinkInventory {\n const { fences, definitions, blocks } = scanBlocks(body);\n const uses: LinkUse[] = [];\n let i = 0;\n while (i < body.length) {\n const fenceEnd = fenceEndAt(fences, i);\n if (fenceEnd !== undefined) {\n i = fenceEnd;\n continue;\n }\n if (body[i] === '`') {\n i = skipInlineCode(body, i);\n continue;\n }\n if (body[i] === '!' && body[i + 1] === '[') {\n i = takeLink(body, i + 1, i, uses, definitions);\n continue;\n }\n if (body[i] === '[') {\n i = takeLink(body, i, i, uses, definitions);\n continue;\n }\n i += 1;\n }\n return { uses, blocks };\n}\n\nexport function hrefOccurrences(body: string): readonly HrefOccurrence[] {\n const byStart = new Map<number, HrefOccurrence>();\n for (const use of linkInventory(body).uses) byStart.set(use.destination.start, use.destination);\n return [...byStart.values()].sort((left, right) => left.start - right.start);\n}\n"],"names":["TAB_STOP","CLOSING_FENCE_INDENT","HEADING","BREAK","SETEXT","LABEL","DESTINATION","TITLE","endOfLine","text","from","nl","indexOf","length","afterLine","end","itemMarker","index","i","bullet","digits","delimiter","readLine","start","depth","item","inner","spaces","after","content","widthOf","to","width","afterIndent","line","indentWidth","lineText","raw","slice","endsWith","fenceRun","at","char","fenceAt","run","column","closesFence","open","indent","trim","leavesContainer","fenceSpan","cursor","next","skipInlineCode","ticks","close","repeat","skipLinkSpace","skipTitle","ch","destination","occurrence","href","bracketed","afterTitle","labelEnd","takeLink","found","defs","label","dest","push","labelStart","id","toLowerCase","defined","get","undefined","definitionDestination","match","exec","span","indices","definitionAt","head","test","endsBlock","scanBlocks","fences","definitions","Map","blocks","paragraph","stop","definition","has","set","fenceEndAt","spans","fenceSpans","linkInventory","body","uses","fenceEnd","hrefOccurrences","byStart","use","values","sort","left","right"],"mappings":"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"}
1
+ {"version":3,"sources":["/workspace/packages/mdmodel/src/links.ts"],"sourcesContent":["type Fence = {\n readonly char: string;\n readonly length: number;\n readonly depth: number;\n readonly column: number;\n readonly item: boolean;\n};\n\ntype Line = {\n readonly start: number;\n readonly end: number;\n readonly content: number;\n readonly depth: number;\n readonly item: boolean;\n readonly inner: number;\n};\n\nconst TAB_STOP = 4;\nconst CLOSING_FENCE_INDENT = 3;\nconst CODE_INDENT = 4;\n\nconst HEADING = /^#{1,6}(?:[ \\t]|$)/;\nconst BREAK = /^(?:(?:\\*[ \\t]*){3,}|(?:-[ \\t]*){3,}|(?:_[ \\t]*){3,})$/;\nconst SETEXT = /^(?:=+|-+)[ \\t]*$/;\nconst BLANK = /^[ \\t\\v\\f]*\\r?$/;\nconst HTML_CLOSED: readonly (readonly [RegExp, RegExp])[] = [\n [/^<(?:script|pre|style)(?:[ \\t\\v\\f>]|$)/i, /<\\/(?:script|pre|style)>/i],\n [/^<!--/, /-->/],\n [/^<\\?/, /\\?>/],\n [/^<![A-Z]/, />/],\n [/^<!\\[CDATA\\[/, /\\]\\]>/],\n];\nconst HTML_BLOCK_TAG =\n /^<\\/?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:[ \\t\\v\\f>]|\\/>|$)/i;\nconst HTML_TAG_LINE =\n /^(?:<[A-Za-z][A-Za-z0-9-]*(?:[ \\t\\v\\f]+[A-Za-z_:][A-Za-z0-9_.:-]*(?:[ \\t\\v\\f]*=[ \\t\\v\\f]*(?:[^ \\t\\v\\f\\r\\n\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*[ \\t\\v\\f]*\\/?>|<\\/[A-Za-z][A-Za-z0-9-]*[ \\t\\v\\f]*>)[ \\t\\v\\f]*$/;\nconst ORDERED = /^(\\d{1,9})[.)]/;\nconst LABEL_LENGTH = 999;\nconst PUNCTUATION = /^[!-/:-@[-`{-~]$/;\nconst INLINE_RAW = new RegExp(\n [\n '<[A-Za-z][A-Za-z0-9-]*(?:[ \\\\t\\\\n\\\\v\\\\f\\\\r]+[A-Za-z_:][A-Za-z0-9_.:-]*(?:[ \\\\t\\\\n\\\\v\\\\f\\\\r]*=[ \\\\t\\\\n\\\\v\\\\f\\\\r]*(?:[^ \\\\t\\\\n\\\\v\\\\f\\\\r\"\\'=<>`]+|\\'[^\\']*\\'|\"[^\"]*\"))?)*[ \\\\t\\\\n\\\\v\\\\f\\\\r]*\\\\/?>',\n '<\\\\/[A-Za-z][A-Za-z0-9-]*[ \\\\t\\\\n\\\\v\\\\f\\\\r]*>',\n '<!--(?!-?>)(?:-?[^-])*-->',\n '<\\\\?[\\\\s\\\\S]*?\\\\?>',\n '<![A-Z]+[ \\\\t\\\\n\\\\v\\\\f\\\\r]+[^>]*>',\n '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>',\n '<[A-Za-z][A-Za-z0-9+.-]{1,31}:[^\\\\x00-\\\\x20<>]*>',\n \"<[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+@[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?(?:\\\\.[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*>\",\n ].join('|'),\n 'y',\n);\nconst DELIMITER_ROW = /^\\|?[ \\t]*:?-+:?[ \\t]*(?:\\|[ \\t]*:?-+:?[ \\t]*)*\\|?[ \\t]*$/;\nconst GAP = /^[ \\t\\v\\f]+/;\n\nfunction endOfLine(text: string, from: number): number {\n const nl = text.indexOf('\\n', from);\n return nl === -1 ? text.length : nl;\n}\n\nfunction afterLine(text: string, end: number): number {\n return end < text.length ? end + 1 : text.length;\n}\n\nfunction itemMarker(text: string, index: number, end: number): number | null {\n let i = index;\n const bullet = text[i];\n if (bullet === '-' || bullet === '*' || bullet === '+') i += 1;\n else {\n let digits = 0;\n while (digits < 9 && i + digits < end && text[i + digits]! >= '0' && text[i + digits]! <= '9')\n digits += 1;\n const delimiter = text[i + digits];\n if (digits === 0 || (delimiter !== '.' && delimiter !== ')')) return null;\n i += digits + 1;\n }\n if (i >= end) return i;\n if (text[i] !== ' ' && text[i] !== '\\t') return null;\n return i + 1;\n}\n\nfunction readLine(text: string, start: number, end: number): Line {\n let i = start;\n let depth = 0;\n let item = false;\n let inner = start;\n for (;;) {\n let spaces = 0;\n while (spaces < 3 && i < end && text[i] === ' ') {\n i += 1;\n spaces += 1;\n }\n if (i < end && text[i] === '>') {\n depth += 1;\n i += 1;\n if (i < end && text[i] === ' ') i += 1;\n inner = i;\n continue;\n }\n const after = i < end ? itemMarker(text, i, end) : null;\n if (after === null) break;\n item = true;\n i = after;\n }\n return { start, end, content: i, depth, item, inner };\n}\n\nfunction widthOf(text: string, from: number, to: number): number {\n let width = 0;\n for (let i = from; i < to; i += 1) width += text[i] === '\\t' ? TAB_STOP - (width % TAB_STOP) : 1;\n return width;\n}\n\nfunction afterIndent(text: string, line: Line): number {\n let i = line.inner;\n while (i < line.end && (text[i] === ' ' || text[i] === '\\t')) i += 1;\n return i;\n}\n\nfunction indentWidth(text: string, line: Line): number {\n return widthOf(text, line.inner, afterIndent(text, line));\n}\n\nfunction lineText(text: string, line: Line): string {\n const raw = text.slice(line.content, line.end);\n return raw.endsWith('\\r') ? raw.slice(0, -1) : raw;\n}\n\nfunction fenceRun(\n text: string,\n at: number,\n end: number,\n): { readonly char: string; readonly length: number } | null {\n const char = text[at];\n if (char !== '`' && char !== '~') return null;\n let length = 0;\n while (at + length < end && text[at + length] === char) length += 1;\n return length < 3 ? null : { char, length };\n}\n\nfunction fenceAt(text: string, line: Line): Fence | null {\n const run = fenceRun(text, line.content, line.end);\n if (run === null) return null;\n return {\n char: run.char,\n length: run.length,\n depth: line.depth,\n column: line.item ? widthOf(text, line.inner, line.content) : 0,\n item: line.item,\n };\n}\n\nfunction closesFence(text: string, line: Line, open: Fence): boolean {\n if (line.depth !== open.depth || line.item) return false;\n const indent = indentWidth(text, line);\n if (indent < open.column || indent > open.column + CLOSING_FENCE_INDENT) return false;\n const at = afterIndent(text, line);\n const run = fenceRun(text, at, line.end);\n if (run === null || run.char !== open.char || run.length < open.length) return false;\n return text.slice(at + run.length, line.end).trim() === '';\n}\n\nfunction leavesContainer(text: string, line: Line, open: Fence): boolean {\n if (line.depth < open.depth) return true;\n if (!open.item || lineText(text, line).trim() === '') return false;\n return indentWidth(text, line) < open.column;\n}\n\nfunction fenceSpan(text: string, line: Line, open: Fence): number {\n let cursor = afterLine(text, line.end);\n while (cursor < text.length) {\n const end = endOfLine(text, cursor);\n const next = readLine(text, cursor, end);\n if (leavesContainer(text, next, open)) return cursor;\n if (closesFence(text, next, open)) return afterLine(text, end);\n cursor = afterLine(text, end);\n }\n return text.length;\n}\n\nfunction skipInlineCode(text: string, index: number, joins: ReadonlySet<number>): number {\n let ticks = 0;\n while (text[index + ticks] === '`') ticks += 1;\n let i = index + ticks;\n while (i < text.length) {\n const ch = text[i]!;\n if (ch === '`') {\n let run = 0;\n while (text[i + run] === '`') run += 1;\n if (run === ticks) return i + run;\n i += run;\n continue;\n }\n if (ch === '\\r' && text[i + 1] !== '\\n') break;\n if (ch === '\\n' && !joins.has(i)) break;\n i += 1;\n }\n return index + ticks;\n}\n\nfunction skipLinkSpace(text: string, start: number): number {\n let i = start;\n while (text[i] === ' ' || text[i] === '\\t') i += 1;\n return i;\n}\n\nfunction skipInlineSpace(text: string, start: number, joins: ReadonlySet<number>): number {\n let i = skipLinkSpace(text, start);\n if (text[i] === '\\r' && text[i + 1] === '\\n') i += 1;\n if (text[i] !== '\\n' || !joins.has(i)) return i;\n return afterIndent(text, readLine(text, i + 1, endOfLine(text, i + 1)));\n}\n\nfunction closeEnd(\n text: string,\n start: number,\n open: string,\n joins: ReadonlySet<number>,\n): number | null {\n const close = open === '(' ? ')' : open;\n let i = start;\n while (i < text.length) {\n const ch = text[i]!;\n if (escapes(text, i)) {\n i += 2;\n continue;\n }\n if (ch === close) return i + 1;\n if (open === '(' && ch === '(') return null;\n if (ch === '\\r' && text[i + 1] !== '\\n') return null;\n if (ch === '\\n' && !joins.has(i)) return null;\n i += 1;\n }\n return null;\n}\n\nfunction skipTitle(text: string, start: number, joins: ReadonlySet<number>): number | null {\n const open = text[start];\n if (open !== '\"' && open !== \"'\" && open !== '(') return start;\n return closeEnd(text, start + 1, open, joins);\n}\n\nfunction destinationAt(text: string, at: number, end: number): HrefOccurrence | null {\n if (text[at] === '<') {\n let close = at + 1;\n while (close < end && text[close] !== '>') {\n if (text[close] === '<') return null;\n close += escapes(text, close) ? 2 : 1;\n }\n if (close >= end) return null;\n return { href: text.slice(at + 1, close), start: at, end: close + 1, bracketed: true };\n }\n let i = at;\n let depth = 0;\n while (i < end) {\n if (escapes(text, i)) {\n i += 2;\n continue;\n }\n const ch = text[i]!;\n if (ch <= ' ' || ch === '\\x7f') break;\n if (ch === '(') depth += 1;\n else if (ch === ')') {\n if (depth === 0) break;\n depth -= 1;\n }\n i += 1;\n }\n if (depth !== 0) return null;\n return { href: text.slice(at, i), start: at, end: i, bracketed: false };\n}\n\nfunction destination(\n text: string,\n start: number,\n joins: ReadonlySet<number>,\n): { occurrence: HrefOccurrence; end: number } | null {\n let i = skipInlineSpace(text, start + 1, joins);\n const occurrence = destinationAt(text, i, endOfLine(text, i));\n if (occurrence === null) return null;\n i = occurrence.end;\n const spaced = skipInlineSpace(text, i, joins);\n if (spaced === i && text[i] !== ')') return null;\n i = spaced;\n const afterTitle = skipTitle(text, i, joins);\n if (afterTitle === null) return null;\n i = skipInlineSpace(text, afterTitle, joins);\n if (text[i] !== ')') return null;\n return { occurrence, end: i + 1 };\n}\n\nfunction cellCount(row: string): number {\n return row\n .trim()\n .replace(/^\\|/, '')\n .replace(/(?<!\\\\)\\|$/, '')\n .split(/(?<!\\\\)\\|/).length;\n}\n\nfunction headsTable(text: string, header: string, end: number): boolean {\n if (end >= text.length) return false;\n const row = lineText(text, readLine(text, end + 1, endOfLine(text, end + 1)));\n return row.includes('|') && DELIMITER_ROW.test(row) && cellCount(row) === cellCount(header);\n}\n\nfunction blockText(text: string, line: Line): string {\n if (!line.item) return lineText(text, line);\n const raw = text.slice(afterIndent(text, line), line.end);\n return raw.endsWith('\\r') ? raw.slice(0, -1) : raw;\n}\n\nfunction interruptsWithHtml(head: string): boolean {\n return HTML_CLOSED.some(([open]) => open.test(head)) || HTML_BLOCK_TAG.test(head);\n}\n\nfunction markerColumn(text: string, line: Line): number {\n return widthOf(text, line.inner, afterIndent(text, line));\n}\n\nfunction markerEnd(text: string, at: number, end: number): number | null {\n const after = itemMarker(text, at, end);\n if (after === null) return null;\n return after > at && (text[after - 1] === ' ' || text[after - 1] === '\\t') ? after - 1 : after;\n}\n\nfunction itemContent(\n text: string,\n line: Line,\n): { readonly column: number; readonly code: number | null } {\n let marker = markerEnd(text, afterIndent(text, line), line.end)!;\n for (;;) {\n let next = marker + 1;\n let spaces = 0;\n while (spaces < 3 && text[next] === ' ') {\n next += 1;\n spaces += 1;\n }\n const nested = next < line.end ? markerEnd(text, next, line.end) : null;\n if (nested === null) break;\n marker = nested;\n }\n const at = skipLinkSpace(text, marker);\n const rest = text.slice(at, line.end).trim();\n const column = widthOf(text, line.inner, at);\n const start = widthOf(text, line.inner, marker);\n if (rest !== '' && column - start <= CODE_INDENT) return { column, code: null };\n return { column: start + 1, code: rest === '' ? null : marker + 1 };\n}\n\nfunction joinsParagraph(\n text: string,\n line: Line,\n depth: number,\n item: number | undefined,\n): boolean {\n if (line.depth > depth) return false;\n const head = blockText(text, line);\n if (head.trim() === '' || endsBlock(head) || interruptsWithHtml(head)) return false;\n if (fenceAt(text, line) !== null) return false;\n if (!line.item) return true;\n if (item !== undefined && markerColumn(text, line) < item) return false;\n if (lineText(text, line).trim() === '') return true;\n const ordered = ORDERED.exec(head);\n return ordered !== null && Number(ordered[1]) !== 1;\n}\n\nfunction startsParagraph(text: string, line: Line): boolean {\n return lineText(text, line).trim() !== '' && !endsBlock(blockText(text, line));\n}\n\ntype Structure = {\n readonly joins: ReadonlySet<number>;\n readonly raw: readonly (readonly [number, number])[];\n};\n\nfunction lineColumn(text: string, line: Line): number {\n return line.item ? markerColumn(text, line) : indentWidth(text, line);\n}\n\nfunction endsTable(text: string, line: Line, depth: number): boolean {\n const head = blockText(text, line);\n return (\n head.trim() === '' ||\n line.depth !== depth ||\n line.item ||\n endsBlock(head) ||\n interruptsWithHtml(head) ||\n fenceAt(text, line) !== null\n );\n}\n\nfunction quoteInner(text: string, start: number, end: number, depth: number): number | null {\n let i = start;\n for (let level = 0; level < depth; level += 1) {\n let spaces = 0;\n while (spaces < 3 && i < end && text[i] === ' ') {\n i += 1;\n spaces += 1;\n }\n if (text[i] !== '>') return null;\n i += 1;\n if (text[i] === ' ') i += 1;\n }\n return i;\n}\n\nfunction htmlEnd(text: string, line: Line, item: number | undefined): number | null {\n const head = lineText(text, line);\n const closed = HTML_CLOSED.find(([open]) => open.test(head));\n if (closed === undefined && !HTML_BLOCK_TAG.test(head) && !HTML_TAG_LINE.test(head)) return null;\n if (closed !== undefined && closed[1].test(head)) return afterLine(text, line.end);\n let cursor = afterLine(text, line.end);\n while (cursor < text.length) {\n const end = endOfLine(text, cursor);\n const inner = quoteInner(text, cursor, end, line.depth);\n if (inner === null) return cursor;\n const at = skipLinkSpace(text, inner);\n const body = text.slice(inner, end);\n const blank = BLANK.test(text.slice(at, end));\n if (item !== undefined && !blank && widthOf(text, inner, at) < item) return cursor;\n if (closed === undefined && blank) return cursor;\n if (closed !== undefined && closed[1].test(body)) return afterLine(text, end);\n cursor = afterLine(text, end);\n if (cursor === end) break;\n }\n return text.length;\n}\n\nfunction codeEnd(text: string, line: Line, base: number): number {\n let stop = afterLine(text, line.end);\n let cursor = stop;\n while (cursor < text.length) {\n const end = endOfLine(text, cursor);\n const current = readLine(text, cursor, end);\n if (current.depth !== line.depth) break;\n const blank = lineText(text, current).trim() === '' && !current.item;\n if (!blank && (current.item || indentWidth(text, current) < base + CODE_INDENT)) break;\n cursor = afterLine(text, end);\n if (!blank) stop = cursor;\n if (cursor === end) break;\n }\n return stop;\n}\n\nfunction structure(text: string): Structure {\n const joins = new Set<number>();\n const raw: [number, number][] = [];\n const items: number[] = [];\n let paragraph: number | null = null;\n let table: number | null = null;\n let depth = 0;\n let cursor = 0;\n while (cursor < text.length) {\n const end = endOfLine(text, cursor);\n const line = readLine(text, cursor, end);\n const content = lineText(text, line);\n const blank = content.trim() === '' && !line.item;\n if (table !== null && endsTable(text, line, table)) table = null;\n if (table !== null) {\n cursor = afterLine(text, end);\n if (cursor === end) break;\n continue;\n }\n if (paragraph !== null && joinsParagraph(text, line, paragraph, items.at(-1))) {\n if (headsTable(text, content, end)) {\n table = line.depth;\n paragraph = null;\n } else joins.add(cursor - 1);\n cursor = afterLine(text, end);\n if (cursor === end) break;\n continue;\n }\n paragraph = null;\n if (line.depth !== depth) items.length = 0;\n depth = line.depth;\n if (!blank) {\n while (items.length > 0 && items.at(-1)! > lineColumn(text, line)) items.pop();\n }\n if (line.item && !BREAK.test(blockText(text, line))) {\n const opened = itemContent(text, line);\n items.push(opened.column);\n if (opened.code !== null) {\n const stop = codeEnd(text, line, opened.column);\n raw.push([opened.code, stop]);\n cursor = stop;\n continue;\n }\n }\n const open = fenceAt(text, line);\n if (open !== null) {\n const stop = fenceSpan(text, line, open);\n raw.push([cursor, stop]);\n cursor = stop;\n continue;\n }\n const base = items.at(-1) ?? 0;\n if (!blank && !line.item && indentWidth(text, line) >= base + CODE_INDENT) {\n const stop = codeEnd(text, line, base);\n raw.push([cursor, stop]);\n cursor = stop;\n continue;\n }\n const html = htmlEnd(text, line, items.at(-1));\n if (html !== null) {\n raw.push([cursor, html]);\n cursor = html;\n continue;\n }\n if (startsParagraph(text, line)) {\n if (headsTable(text, content, end)) table = line.depth;\n else paragraph = line.depth;\n }\n cursor = afterLine(text, end);\n if (cursor === end) break;\n }\n return { joins, raw };\n}\n\nfunction escapes(text: string, index: number): boolean {\n return text[index] === '\\\\' && PUNCTUATION.test(text[index + 1] ?? '');\n}\n\nfunction referenceEnd(text: string, start: number, joins: ReadonlySet<number>): number {\n let i = start;\n while (i < text.length) {\n const ch = text[i]!;\n if (escapes(text, i)) {\n i += 2;\n continue;\n }\n if (ch === ']') return i + 1;\n if (ch === '[') return -1;\n if (ch === '\\r' && text[i + 1] !== '\\n') return -1;\n if (ch === '\\n' && !joins.has(i)) return -1;\n i += 1;\n }\n return -1;\n}\n\nfunction labelText(text: string, from: number, to: number): string {\n let label = '';\n let cursor = from;\n let newline = text.indexOf('\\n', cursor);\n while (newline !== -1 && newline < to) {\n label += `${text.slice(cursor, newline)}\\n`;\n cursor = afterIndent(text, readLine(text, newline + 1, endOfLine(text, newline + 1)));\n newline = text.indexOf('\\n', cursor);\n }\n return label + text.slice(cursor, to);\n}\n\nfunction labelKey(label: string): string {\n return label\n .replace(/[ \\t\\n\\v\\f\\r]+/g, ' ')\n .replace(/^ | $/g, '')\n .toLowerCase()\n .split('\\u0131')\n .map((part) => part.toUpperCase())\n .join('\\u0131');\n}\n\nfunction labelKeyAt(text: string, from: number, to: number): string {\n const label = labelText(text, from, to);\n if (label.length > LABEL_LENGTH && [...label].length > LABEL_LENGTH) return '';\n return labelKey(label);\n}\n\ntype Opener = {\n readonly at: number;\n readonly start: number;\n readonly image: boolean;\n active: boolean;\n bracketAfter: boolean;\n};\n\nfunction closeLink(\n text: string,\n opener: Opener,\n close: number,\n defs: ReadonlyMap<string, HrefOccurrence>,\n joins: ReadonlySet<number>,\n): LinkUse | null {\n const end = close + 1;\n const use = (destination: HrefOccurrence, to: number): LinkUse => ({\n start: opener.start,\n end: to,\n labelStart: opener.at + 1,\n labelEnd: close,\n destination,\n });\n if (text[end] === '(') {\n const dest = destination(text, end, joins);\n if (dest !== null) return use(dest.occurrence, dest.end);\n }\n if (text[end] === '[') {\n const second = referenceEnd(text, end + 1, joins);\n const collapsed = second === end + 2;\n const named = collapsed\n ? opener.bracketAfter\n ? ''\n : labelKeyAt(text, opener.at + 1, close)\n : labelKeyAt(text, end + 1, second - 1);\n if (second !== -1 && (named !== '' || collapsed)) {\n const defined = defs.get(named);\n return defined === undefined ? null : use(defined, second);\n }\n }\n if (opener.bracketAfter) return null;\n const shortcut = defs.get(labelKeyAt(text, opener.at + 1, close));\n return shortcut === undefined ? null : use(shortcut, end);\n}\n\nfunction definitionDestination(text: string, from: number, to: number): HrefOccurrence | null {\n const occurrence = destinationAt(text, skipLinkSpace(text, from), to);\n return occurrence === null || (occurrence.href === '' && !occurrence.bracketed)\n ? null\n : occurrence;\n}\n\nfunction titleEnd(text: string, at: number, joins: ReadonlySet<number>): number | null {\n const open = text[at];\n if (open !== '\"' && open !== \"'\" && open !== '(') return null;\n const closed = closeEnd(text, at + 1, open, joins);\n if (closed === null) return null;\n const end = endOfLine(text, closed);\n return BLANK.test(text.slice(closed, end)) ? afterLine(text, end) : null;\n}\n\nfunction definitionAt(\n text: string,\n line: Line,\n joins: ReadonlySet<number>,\n): { id: string; occurrence: HrefOccurrence; next: number } | null {\n if (text[line.content] !== '[') return null;\n const close = referenceEnd(text, line.content + 1, joins);\n if (close === -1 || text[close] !== ':') return null;\n const id = labelKeyAt(text, line.content + 1, close - 1);\n if (id === '') return null;\n const from = close + 1;\n let end = endOfLine(text, from);\n let occurrence = definitionDestination(text, from, end);\n if (occurrence === null) {\n if (text.slice(from, end).trim() !== '' || !joins.has(end)) return null;\n const start = end + 1;\n end = endOfLine(text, start);\n occurrence = definitionDestination(text, afterIndent(text, readLine(text, start, end)), end);\n if (occurrence === null) return null;\n }\n const rest = text.slice(occurrence.end, end);\n if (!BLANK.test(rest)) {\n const gap = GAP.exec(rest);\n const titled = gap === null ? null : titleEnd(text, occurrence.end + gap[0].length, joins);\n return titled === null ? null : { id, occurrence, next: titled };\n }\n const next = afterLine(text, end);\n if (joins.has(end)) {\n const titled = titleEnd(\n text,\n afterIndent(text, readLine(text, next, endOfLine(text, next))),\n joins,\n );\n if (titled !== null) return { id, occurrence, next: titled };\n }\n return { id, occurrence, next };\n}\n\nfunction endsBlock(content: string): boolean {\n return HEADING.test(content) || BREAK.test(content) || SETEXT.test(content);\n}\n\nfunction scanBlocks(text: string): {\n readonly raw: readonly (readonly [number, number])[];\n readonly definitions: ReadonlyMap<string, HrefOccurrence>;\n readonly blocks: readonly DefinitionBlock[];\n readonly joins: ReadonlySet<number>;\n} {\n const { joins, raw } = structure(text);\n const definitions = new Map<string, HrefOccurrence>();\n const blocks: DefinitionBlock[] = [];\n let fresh = 0;\n let i = 0;\n while (i < text.length) {\n const skip = spanEndAt(raw, i);\n if (skip !== undefined) {\n i = skip;\n continue;\n }\n const line = readLine(text, i, endOfLine(text, i));\n const definition =\n lineText(text, line).trim() === '' || (i !== fresh && joins.has(i - 1))\n ? null\n : definitionAt(text, line, joins);\n if (definition !== null) {\n if (!definitions.has(definition.id)) definitions.set(definition.id, definition.occurrence);\n blocks.push({ start: line.start, end: definition.next, destination: definition.occurrence });\n i = definition.next;\n fresh = i;\n continue;\n }\n i = afterLine(text, line.end);\n }\n return { raw, definitions, blocks, joins };\n}\n\nfunction spanEndAt(\n spans: readonly (readonly [number, number])[],\n index: number,\n): number | undefined {\n for (const [start, end] of spans) {\n if (index >= start && index < end) return end;\n }\n return undefined;\n}\n\nexport type HrefOccurrence = {\n readonly href: string;\n readonly start: number;\n readonly end: number;\n readonly bracketed: boolean;\n};\n\nexport type LinkUse = {\n readonly start: number;\n readonly end: number;\n readonly labelStart: number;\n readonly labelEnd: number;\n readonly destination: HrefOccurrence;\n};\n\nexport type DefinitionBlock = {\n readonly start: number;\n readonly end: number;\n readonly destination: HrefOccurrence;\n};\n\nexport type LinkInventory = {\n readonly uses: readonly LinkUse[];\n readonly blocks: readonly DefinitionBlock[];\n};\n\nexport function fenceSpans(text: string): readonly (readonly [number, number])[] {\n const fences: [number, number][] = [];\n let i = 0;\n while (i < text.length) {\n const line = readLine(text, i, endOfLine(text, i));\n const open = fenceAt(text, line);\n if (open === null) {\n i = afterLine(text, line.end);\n continue;\n }\n const stop = fenceSpan(text, line, open);\n fences.push([i, stop]);\n i = stop;\n }\n return fences;\n}\n\nfunction paragraphEnd(text: string, from: number, joins: ReadonlySet<number>): number {\n let i = from;\n while (i < text.length) {\n if (text[i] === '\\n' && !joins.has(i)) return i;\n if (text[i] === '\\r' && text[i + 1] !== '\\n') return i;\n i += 1;\n }\n return i;\n}\n\nexport function linkInventory(body: string): LinkInventory {\n const { raw, definitions, blocks, joins } = scanBlocks(body);\n const skipped = [...raw, ...blocks.map((block) => [block.start, block.end] as const)];\n const uses: LinkUse[] = [];\n const openers: Opener[] = [];\n let paragraph = { start: 0, end: -1, text: '' };\n let i = 0;\n while (i < body.length) {\n const skipEnd = spanEndAt(skipped, i);\n if (skipEnd !== undefined) {\n openers.length = 0;\n i = skipEnd;\n continue;\n }\n const ch = body[i];\n if (escapes(body, i)) {\n i += 2;\n continue;\n }\n if (ch === '`') {\n i = skipInlineCode(body, i, joins);\n continue;\n }\n if (ch === '<') {\n if (i >= paragraph.end) {\n const end = paragraphEnd(body, i, joins);\n paragraph = { start: i, end, text: body.slice(i, end) };\n }\n INLINE_RAW.lastIndex = i - paragraph.start;\n const raw = INLINE_RAW.exec(paragraph.text);\n if (raw !== null) {\n i += raw[0].length;\n continue;\n }\n }\n if ((ch === '\\n' && !joins.has(i)) || (ch === '\\r' && body[i + 1] !== '\\n')) openers.length = 0;\n if (ch === '[' || (ch === '!' && body[i + 1] === '[')) {\n const previous = openers.at(-1);\n if (previous !== undefined) previous.bracketAfter = true;\n const image = ch === '!';\n openers.push({ at: image ? i + 1 : i, start: i, image, active: true, bracketAfter: false });\n i += image ? 2 : 1;\n continue;\n }\n if (ch === ']') {\n const opener = openers.pop();\n const use = opener?.active ? closeLink(body, opener, i, definitions, joins) : null;\n if (opener === undefined || use === null) {\n i += 1;\n continue;\n }\n uses.push(use);\n if (!opener.image) for (const earlier of openers) if (!earlier.image) earlier.active = false;\n i = use.end;\n continue;\n }\n i += 1;\n }\n return { uses, blocks };\n}\n\nexport function hrefOccurrences(body: string): readonly HrefOccurrence[] {\n const byStart = new Map<number, HrefOccurrence>();\n for (const use of linkInventory(body).uses) byStart.set(use.destination.start, use.destination);\n return [...byStart.values()].sort((left, right) => left.start - right.start);\n}\n"],"names":["TAB_STOP","CLOSING_FENCE_INDENT","CODE_INDENT","HEADING","BREAK","SETEXT","BLANK","HTML_CLOSED","HTML_BLOCK_TAG","HTML_TAG_LINE","ORDERED","LABEL_LENGTH","PUNCTUATION","INLINE_RAW","RegExp","join","DELIMITER_ROW","GAP","endOfLine","text","from","nl","indexOf","length","afterLine","end","itemMarker","index","i","bullet","digits","delimiter","readLine","start","depth","item","inner","spaces","after","content","widthOf","to","width","afterIndent","line","indentWidth","lineText","raw","slice","endsWith","fenceRun","at","char","fenceAt","run","column","closesFence","open","indent","trim","leavesContainer","fenceSpan","cursor","next","skipInlineCode","joins","ticks","ch","has","skipLinkSpace","skipInlineSpace","closeEnd","close","escapes","skipTitle","destinationAt","href","bracketed","destination","occurrence","spaced","afterTitle","cellCount","row","replace","split","headsTable","header","includes","test","blockText","interruptsWithHtml","head","some","markerColumn","markerEnd","itemContent","marker","nested","rest","code","joinsParagraph","endsBlock","undefined","ordered","exec","Number","startsParagraph","lineColumn","endsTable","quoteInner","level","htmlEnd","closed","find","body","blank","codeEnd","base","stop","current","structure","Set","items","paragraph","table","add","pop","opened","push","html","referenceEnd","labelText","label","newline","labelKey","toLowerCase","map","part","toUpperCase","labelKeyAt","closeLink","opener","defs","use","labelStart","labelEnd","dest","second","collapsed","named","bracketAfter","defined","get","shortcut","definitionDestination","titleEnd","definitionAt","id","gap","titled","scanBlocks","definitions","Map","blocks","fresh","skip","spanEndAt","definition","set","spans","fenceSpans","fences","paragraphEnd","linkInventory","skipped","block","uses","openers","skipEnd","lastIndex","previous","image","active","earlier","hrefOccurrences","byStart","values","sort","left","right"],"mappings":"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"}
package/dist/paths.d.ts CHANGED
@@ -1,8 +1,6 @@
1
1
  export declare function dirname(path: string): string;
2
2
  export declare function join(base: string, relative: string): string;
3
3
  export declare function normalize(path: string): string | null;
4
- export declare function isTypesPath(path: string): boolean;
5
- export declare function typeNameFromPath(path: string): string;
6
4
  export declare function classifyHref(from: string, href: string): {
7
5
  kind: 'skip';
8
6
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG5C;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYrD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAUzE;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGhE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAIzD"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG5C;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYrD;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAUzE;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGhE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAIzD"}
package/dist/paths.js CHANGED
@@ -19,13 +19,6 @@ export function normalize(path) {
19
19
  }
20
20
  return parts.join('/');
21
21
  }
22
- export function isTypesPath(path) {
23
- return path === 'types' || path.startsWith('types/');
24
- }
25
- export function typeNameFromPath(path) {
26
- const base = path.slice(path.lastIndexOf('/') + 1);
27
- return base.endsWith('.md') ? base.slice(0, -3) : base;
28
- }
29
22
  export function classifyHref(from, href) {
30
23
  const trimmed = href.trim();
31
24
  if (trimmed === '' || trimmed.startsWith('#')) return {
package/dist/paths.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdmodel/src/paths.ts"],"sourcesContent":["export function dirname(path: string): string {\n const index = path.lastIndexOf('/');\n return index === -1 ? '' : path.slice(0, index);\n}\n\nexport function join(base: string, relative: string): string {\n if (base === '') return relative;\n return `${base}/${relative}`;\n}\n\nexport function normalize(path: string): string | null {\n const parts: string[] = [];\n for (const part of path.split('/')) {\n if (part === '' || part === '.') continue;\n if (part === '..') {\n if (parts.length === 0) return null;\n parts.pop();\n continue;\n }\n parts.push(part);\n }\n return parts.join('/');\n}\n\nexport function isTypesPath(path: string): boolean {\n return path === 'types' || path.startsWith('types/');\n}\n\nexport function typeNameFromPath(path: string): string {\n const base = path.slice(path.lastIndexOf('/') + 1);\n return base.endsWith('.md') ? base.slice(0, -3) : base;\n}\n\nexport function classifyHref(\n from: string,\n href: string,\n): { kind: 'skip' } | { kind: 'path'; path: string } | { kind: 'invalid' } {\n const trimmed = href.trim();\n if (trimmed === '' || trimmed.startsWith('#')) return { kind: 'skip' };\n if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(trimmed)) return { kind: 'skip' };\n if (trimmed.startsWith('/')) return { kind: 'invalid' };\n const bare = trimmed.replace(/[?#].*$/, '');\n if (bare === '') return { kind: 'skip' };\n const resolved = normalize(join(dirname(from), bare));\n if (resolved === null || resolved === '') return { kind: 'invalid' };\n return { kind: 'path', path: resolved };\n}\n\nexport function target(from: string, href: string): string | null {\n const resolved = classifyHref(from, href);\n return resolved.kind === 'path' ? resolved.path : null;\n}\n\nexport function retarget(href: string, to: string): string {\n const trimmed = href.trim();\n const match = /[?#]/.exec(trimmed);\n return match === null ? to : to + trimmed.slice(match.index);\n}\n"],"names":["dirname","path","index","lastIndexOf","slice","join","base","relative","normalize","parts","part","split","length","pop","push","isTypesPath","startsWith","typeNameFromPath","endsWith","classifyHref","from","href","trimmed","trim","kind","test","bare","replace","resolved","target","retarget","to","match","exec"],"mappings":"AAAA,OAAO,SAASA,QAAQC,IAAY;IAClC,MAAMC,QAAQD,KAAKE,WAAW,CAAC;IAC/B,OAAOD,UAAU,CAAC,IAAI,KAAKD,KAAKG,KAAK,CAAC,GAAGF;AAC3C;AAEA,OAAO,SAASG,KAAKC,IAAY,EAAEC,QAAgB;IACjD,IAAID,SAAS,IAAI,OAAOC;IACxB,OAAO,GAAGD,KAAK,CAAC,EAAEC,UAAU;AAC9B;AAEA,OAAO,SAASC,UAAUP,IAAY;IACpC,MAAMQ,QAAkB,EAAE;IAC1B,KAAK,MAAMC,QAAQT,KAAKU,KAAK,CAAC,KAAM;QAClC,IAAID,SAAS,MAAMA,SAAS,KAAK;QACjC,IAAIA,SAAS,MAAM;YACjB,IAAID,MAAMG,MAAM,KAAK,GAAG,OAAO;YAC/BH,MAAMI,GAAG;YACT;QACF;QACAJ,MAAMK,IAAI,CAACJ;IACb;IACA,OAAOD,MAAMJ,IAAI,CAAC;AACpB;AAEA,OAAO,SAASU,YAAYd,IAAY;IACtC,OAAOA,SAAS,WAAWA,KAAKe,UAAU,CAAC;AAC7C;AAEA,OAAO,SAASC,iBAAiBhB,IAAY;IAC3C,MAAMK,OAAOL,KAAKG,KAAK,CAACH,KAAKE,WAAW,CAAC,OAAO;IAChD,OAAOG,KAAKY,QAAQ,CAAC,SAASZ,KAAKF,KAAK,CAAC,GAAG,CAAC,KAAKE;AACpD;AAEA,OAAO,SAASa,aACdC,IAAY,EACZC,IAAY;IAEZ,MAAMC,UAAUD,KAAKE,IAAI;IACzB,IAAID,YAAY,MAAMA,QAAQN,UAAU,CAAC,MAAM,OAAO;QAAEQ,MAAM;IAAO;IACrE,IAAI,4BAA4BC,IAAI,CAACH,UAAU,OAAO;QAAEE,MAAM;IAAO;IACrE,IAAIF,QAAQN,UAAU,CAAC,MAAM,OAAO;QAAEQ,MAAM;IAAU;IACtD,MAAME,OAAOJ,QAAQK,OAAO,CAAC,WAAW;IACxC,IAAID,SAAS,IAAI,OAAO;QAAEF,MAAM;IAAO;IACvC,MAAMI,WAAWpB,UAAUH,KAAKL,QAAQoB,OAAOM;IAC/C,IAAIE,aAAa,QAAQA,aAAa,IAAI,OAAO;QAAEJ,MAAM;IAAU;IACnE,OAAO;QAAEA,MAAM;QAAQvB,MAAM2B;IAAS;AACxC;AAEA,OAAO,SAASC,OAAOT,IAAY,EAAEC,IAAY;IAC/C,MAAMO,WAAWT,aAAaC,MAAMC;IACpC,OAAOO,SAASJ,IAAI,KAAK,SAASI,SAAS3B,IAAI,GAAG;AACpD;AAEA,OAAO,SAAS6B,SAAST,IAAY,EAAEU,EAAU;IAC/C,MAAMT,UAAUD,KAAKE,IAAI;IACzB,MAAMS,QAAQ,OAAOC,IAAI,CAACX;IAC1B,OAAOU,UAAU,OAAOD,KAAKA,KAAKT,QAAQlB,KAAK,CAAC4B,MAAM9B,KAAK;AAC7D"}
1
+ {"version":3,"sources":["/workspace/packages/mdmodel/src/paths.ts"],"sourcesContent":["export function dirname(path: string): string {\n const index = path.lastIndexOf('/');\n return index === -1 ? '' : path.slice(0, index);\n}\n\nexport function join(base: string, relative: string): string {\n if (base === '') return relative;\n return `${base}/${relative}`;\n}\n\nexport function normalize(path: string): string | null {\n const parts: string[] = [];\n for (const part of path.split('/')) {\n if (part === '' || part === '.') continue;\n if (part === '..') {\n if (parts.length === 0) return null;\n parts.pop();\n continue;\n }\n parts.push(part);\n }\n return parts.join('/');\n}\n\nexport function classifyHref(\n from: string,\n href: string,\n): { kind: 'skip' } | { kind: 'path'; path: string } | { kind: 'invalid' } {\n const trimmed = href.trim();\n if (trimmed === '' || trimmed.startsWith('#')) return { kind: 'skip' };\n if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(trimmed)) return { kind: 'skip' };\n if (trimmed.startsWith('/')) return { kind: 'invalid' };\n const bare = trimmed.replace(/[?#].*$/, '');\n if (bare === '') return { kind: 'skip' };\n const resolved = normalize(join(dirname(from), bare));\n if (resolved === null || resolved === '') return { kind: 'invalid' };\n return { kind: 'path', path: resolved };\n}\n\nexport function target(from: string, href: string): string | null {\n const resolved = classifyHref(from, href);\n return resolved.kind === 'path' ? resolved.path : null;\n}\n\nexport function retarget(href: string, to: string): string {\n const trimmed = href.trim();\n const match = /[?#]/.exec(trimmed);\n return match === null ? to : to + trimmed.slice(match.index);\n}\n"],"names":["dirname","path","index","lastIndexOf","slice","join","base","relative","normalize","parts","part","split","length","pop","push","classifyHref","from","href","trimmed","trim","startsWith","kind","test","bare","replace","resolved","target","retarget","to","match","exec"],"mappings":"AAAA,OAAO,SAASA,QAAQC,IAAY;IAClC,MAAMC,QAAQD,KAAKE,WAAW,CAAC;IAC/B,OAAOD,UAAU,CAAC,IAAI,KAAKD,KAAKG,KAAK,CAAC,GAAGF;AAC3C;AAEA,OAAO,SAASG,KAAKC,IAAY,EAAEC,QAAgB;IACjD,IAAID,SAAS,IAAI,OAAOC;IACxB,OAAO,GAAGD,KAAK,CAAC,EAAEC,UAAU;AAC9B;AAEA,OAAO,SAASC,UAAUP,IAAY;IACpC,MAAMQ,QAAkB,EAAE;IAC1B,KAAK,MAAMC,QAAQT,KAAKU,KAAK,CAAC,KAAM;QAClC,IAAID,SAAS,MAAMA,SAAS,KAAK;QACjC,IAAIA,SAAS,MAAM;YACjB,IAAID,MAAMG,MAAM,KAAK,GAAG,OAAO;YAC/BH,MAAMI,GAAG;YACT;QACF;QACAJ,MAAMK,IAAI,CAACJ;IACb;IACA,OAAOD,MAAMJ,IAAI,CAAC;AACpB;AAEA,OAAO,SAASU,aACdC,IAAY,EACZC,IAAY;IAEZ,MAAMC,UAAUD,KAAKE,IAAI;IACzB,IAAID,YAAY,MAAMA,QAAQE,UAAU,CAAC,MAAM,OAAO;QAAEC,MAAM;IAAO;IACrE,IAAI,4BAA4BC,IAAI,CAACJ,UAAU,OAAO;QAAEG,MAAM;IAAO;IACrE,IAAIH,QAAQE,UAAU,CAAC,MAAM,OAAO;QAAEC,MAAM;IAAU;IACtD,MAAME,OAAOL,QAAQM,OAAO,CAAC,WAAW;IACxC,IAAID,SAAS,IAAI,OAAO;QAAEF,MAAM;IAAO;IACvC,MAAMI,WAAWjB,UAAUH,KAAKL,QAAQgB,OAAOO;IAC/C,IAAIE,aAAa,QAAQA,aAAa,IAAI,OAAO;QAAEJ,MAAM;IAAU;IACnE,OAAO;QAAEA,MAAM;QAAQpB,MAAMwB;IAAS;AACxC;AAEA,OAAO,SAASC,OAAOV,IAAY,EAAEC,IAAY;IAC/C,MAAMQ,WAAWV,aAAaC,MAAMC;IACpC,OAAOQ,SAASJ,IAAI,KAAK,SAASI,SAASxB,IAAI,GAAG;AACpD;AAEA,OAAO,SAAS0B,SAASV,IAAY,EAAEW,EAAU;IAC/C,MAAMV,UAAUD,KAAKE,IAAI;IACzB,MAAMU,QAAQ,OAAOC,IAAI,CAACZ;IAC1B,OAAOW,UAAU,OAAOD,KAAKA,KAAKV,QAAQd,KAAK,CAACyB,MAAM3B,KAAK;AAC7D"}
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG3F,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAEzB,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC5C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AA4BtD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,MAAM,CASxF;AA8BD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,iBAAiB,GACzB,WAAW,CA8Bb;AAED,wBAAgB,OAAO,CACrB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,iBAA2C,GACnD,UAAU,CAMZ"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG3F,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAEzB,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC5C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAmCtD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,MAAM,CASxF;AA8BD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,iBAAiB,GACzB,WAAW,CAyBb;AAED,wBAAgB,OAAO,CACrB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,iBAA2C,GACnD,UAAU,CAMZ"}
package/dist/project.js CHANGED
@@ -1,5 +1,4 @@
1
- import { readDefinition } from './definition.js';
2
- import { frontmatter, parse } from './document.js';
1
+ import { frontmatter } from './document.js';
3
2
  import { linkInventory } from './links.js';
4
3
  import { target } from './paths.js';
5
4
  import { refusal } from './refuse.js';
@@ -9,14 +8,22 @@ function internalEdits(content, bodyStart, file, documentTargets) {
9
8
  const inventory = linkInventory(content.slice(bodyStart));
10
9
  const internal = new Set();
11
10
  const edits = [];
12
- for (const use of inventory.uses){
11
+ const uses = [
12
+ ...inventory.uses
13
+ ].sort((left, right)=>left.end - left.start - (right.end - right.start));
14
+ for (const use of uses){
13
15
  const resolved = target(file, use.destination.href);
14
16
  if (resolved === null || !documentTargets.has(resolved)) continue;
15
17
  internal.add(use.destination.start);
18
+ const label = {
19
+ start: bodyStart + use.labelStart,
20
+ end: bodyStart + use.labelEnd
21
+ };
22
+ const inner = edits.filter((edit)=>edit.start >= label.start && edit.end <= label.end).sort((left, right)=>left.start - right.start);
16
23
  edits.push({
17
24
  start: bodyStart + use.start,
18
25
  end: bodyStart + use.end,
19
- text: content.slice(bodyStart + use.labelStart, bodyStart + use.labelEnd)
26
+ text: rangeText(content, label, inner)
20
27
  });
21
28
  }
22
29
  for (const block of inventory.blocks){
@@ -93,8 +100,8 @@ export function projectionInput(document, file, context) {
93
100
  }
94
101
  };
95
102
  }
96
- const source = context.definition;
97
- if (source === undefined) {
103
+ const definition = context.definition;
104
+ if (definition === undefined) {
98
105
  return {
99
106
  ok: false,
100
107
  refusal: refusal(file, 'unknown-type', {
@@ -102,17 +109,6 @@ export function projectionInput(document, file, context) {
102
109
  })
103
110
  };
104
111
  }
105
- const definitionFile = `types/${declared}.md`;
106
- const parsed = parse(source, definitionFile);
107
- if (!parsed.ok) return {
108
- ok: false,
109
- refusal: parsed.refusal
110
- };
111
- const definition = readDefinition(definitionFile, parsed.document);
112
- if ('rule' in definition) return {
113
- ok: false,
114
- refusal: definition
115
- };
116
112
  const structure = new Set(Object.entries(definition.sections).flatMap(([name, spec])=>structural(spec) ? [
117
113
  name
118
114
  ] : []));
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdmodel/src/project.ts"],"sourcesContent":["import { readDefinition, type Definition, type SectionSpec } from './definition.js';\nimport { frontmatter, parse } from './document.js';\nimport { linkInventory } from './links.js';\nimport { target } from './paths.js';\nimport { refusal } from './refuse.js';\nimport { headingSpans } from './sections.js';\nimport type { Document, Extent, Projection, ProjectionContext, Refusal } from './types.js';\nimport { bodyStartOf, mapEntry } from './yaml.js';\n\nexport type Piece = Extent & { readonly text: string };\n\nexport type Edit = Piece;\n\nexport type Input = {\n readonly values: readonly Piece[];\n readonly ranges: readonly Extent[];\n readonly edits: readonly Edit[];\n};\n\nexport type InputResult =\n | { readonly ok: true; readonly input: Input }\n | { readonly ok: false; readonly refusal: Refusal };\n\nfunction internalEdits(\n content: string,\n bodyStart: number,\n file: string,\n documentTargets: ReadonlySet<string>,\n): Edit[] {\n const inventory = linkInventory(content.slice(bodyStart));\n const internal = new Set<number>();\n const edits: Edit[] = [];\n for (const use of inventory.uses) {\n const resolved = target(file, use.destination.href);\n if (resolved === null || !documentTargets.has(resolved)) continue;\n internal.add(use.destination.start);\n edits.push({\n start: bodyStart + use.start,\n end: bodyStart + use.end,\n text: content.slice(bodyStart + use.labelStart, bodyStart + use.labelEnd),\n });\n }\n for (const block of inventory.blocks) {\n if (!internal.has(block.destination.start)) continue;\n edits.push({ start: bodyStart + block.start, end: bodyStart + block.end, text: '' });\n }\n return edits.sort((left, right) => left.start - right.start);\n}\n\nexport function rangeText(content: string, range: Extent, edits: readonly Edit[]): string {\n let text = '';\n let cursor = range.start;\n for (const edit of edits) {\n if (edit.start < cursor || edit.end > range.end) continue;\n text += content.slice(cursor, edit.start) + edit.text;\n cursor = edit.end;\n }\n return text + content.slice(cursor, range.end);\n}\n\nfunction structural(spec: SectionSpec): boolean {\n return spec.kind === 'list' && spec.of.kind !== 'text';\n}\n\nfunction freeTextValues(definition: Definition, document: Document): Piece[] {\n const root = frontmatter(document);\n if (root === null) return [];\n const values: Piece[] = [];\n for (const [name, spec] of Object.entries(definition.fields)) {\n const entry = mapEntry(root, name);\n if (entry === undefined) continue;\n const node = entry.value;\n if (spec.kind === 'text') {\n if (node.kind === 'scalar' && typeof node.value === 'string') {\n values.push({ start: node.start, end: node.end, text: `${node.value}\\n\\n` });\n }\n continue;\n }\n if (spec.kind !== 'list' || spec.of.kind !== 'text' || node.kind !== 'seq') continue;\n for (const item of node.items) {\n if (item.kind === 'scalar' && typeof item.value === 'string') {\n values.push({ start: item.start, end: item.end, text: `${item.value}\\n\\n` });\n }\n }\n }\n return values;\n}\n\nexport function projectionInput(\n document: Document,\n file: string,\n context: ProjectionContext,\n): InputResult {\n const content = document.content;\n const bodyStart = bodyStartOf(content);\n const edits = internalEdits(content, bodyStart, file, new Set(context.documentTargets));\n const declared = document.type;\n if (declared === undefined || declared === 'any') {\n return {\n ok: true,\n input: { values: [], ranges: [{ start: bodyStart, end: content.length }], edits },\n };\n }\n const source = context.definition;\n if (source === undefined) {\n return { ok: false, refusal: refusal(file, 'unknown-type', { location: 'type' }) };\n }\n const definitionFile = `types/${declared}.md`;\n const parsed = parse(source, definitionFile);\n if (!parsed.ok) return { ok: false, refusal: parsed.refusal };\n const definition = readDefinition(definitionFile, parsed.document);\n if ('rule' in definition) return { ok: false, refusal: definition };\n const structure = new Set(\n Object.entries(definition.sections).flatMap(([name, spec]) => (structural(spec) ? [name] : [])),\n );\n const headings = headingSpans(content, bodyStart);\n const ranges: Extent[] = [{ start: bodyStart, end: headings[0]?.headingStart ?? content.length }];\n for (const heading of headings) {\n if (structure.has(heading.name)) continue;\n ranges.push({ start: heading.headingStart, end: heading.bodyEnd });\n }\n return { ok: true, input: { values: freeTextValues(definition, document), ranges, edits } };\n}\n\nexport function project(\n document: Document,\n file: string,\n context: ProjectionContext = { documentTargets: [] },\n): Projection {\n const result = projectionInput(document, file, context);\n if (!result.ok) return { ok: false, refusal: result.refusal };\n const { values, ranges, edits } = result.input;\n const prose = ranges.map((range) => rangeText(document.content, range, edits)).join('');\n return { ok: true, text: values.map((value) => value.text).join('') + prose };\n}\n"],"names":["readDefinition","frontmatter","parse","linkInventory","target","refusal","headingSpans","bodyStartOf","mapEntry","internalEdits","content","bodyStart","file","documentTargets","inventory","slice","internal","Set","edits","use","uses","resolved","destination","href","has","add","start","push","end","text","labelStart","labelEnd","block","blocks","sort","left","right","rangeText","range","cursor","edit","structural","spec","kind","of","freeTextValues","definition","document","root","values","name","Object","entries","fields","entry","undefined","node","value","item","items","projectionInput","context","declared","type","ok","input","ranges","length","source","location","definitionFile","parsed","structure","sections","flatMap","headings","headingStart","heading","bodyEnd","project","result","prose","map","join"],"mappings":"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"}
1
+ {"version":3,"sources":["/workspace/packages/mdmodel/src/project.ts"],"sourcesContent":["import type { Definition, SectionSpec } from './definition.js';\nimport { frontmatter } from './document.js';\nimport { linkInventory } from './links.js';\nimport { target } from './paths.js';\nimport { refusal } from './refuse.js';\nimport { headingSpans } from './sections.js';\nimport type { Document, Extent, Projection, ProjectionContext, Refusal } from './types.js';\nimport { bodyStartOf, mapEntry } from './yaml.js';\n\nexport type Piece = Extent & { readonly text: string };\n\nexport type Edit = Piece;\n\nexport type Input = {\n readonly values: readonly Piece[];\n readonly ranges: readonly Extent[];\n readonly edits: readonly Edit[];\n};\n\nexport type InputResult =\n | { readonly ok: true; readonly input: Input }\n | { readonly ok: false; readonly refusal: Refusal };\n\nfunction internalEdits(\n content: string,\n bodyStart: number,\n file: string,\n documentTargets: ReadonlySet<string>,\n): Edit[] {\n const inventory = linkInventory(content.slice(bodyStart));\n const internal = new Set<number>();\n const edits: Edit[] = [];\n const uses = [...inventory.uses].sort(\n (left, right) => left.end - left.start - (right.end - right.start),\n );\n for (const use of uses) {\n const resolved = target(file, use.destination.href);\n if (resolved === null || !documentTargets.has(resolved)) continue;\n internal.add(use.destination.start);\n const label = { start: bodyStart + use.labelStart, end: bodyStart + use.labelEnd };\n const inner = edits\n .filter((edit) => edit.start >= label.start && edit.end <= label.end)\n .sort((left, right) => left.start - right.start);\n edits.push({\n start: bodyStart + use.start,\n end: bodyStart + use.end,\n text: rangeText(content, label, inner),\n });\n }\n for (const block of inventory.blocks) {\n if (!internal.has(block.destination.start)) continue;\n edits.push({ start: bodyStart + block.start, end: bodyStart + block.end, text: '' });\n }\n return edits.sort((left, right) => left.start - right.start);\n}\n\nexport function rangeText(content: string, range: Extent, edits: readonly Edit[]): string {\n let text = '';\n let cursor = range.start;\n for (const edit of edits) {\n if (edit.start < cursor || edit.end > range.end) continue;\n text += content.slice(cursor, edit.start) + edit.text;\n cursor = edit.end;\n }\n return text + content.slice(cursor, range.end);\n}\n\nfunction structural(spec: SectionSpec): boolean {\n return spec.kind === 'list' && spec.of.kind !== 'text';\n}\n\nfunction freeTextValues(definition: Definition, document: Document): Piece[] {\n const root = frontmatter(document);\n if (root === null) return [];\n const values: Piece[] = [];\n for (const [name, spec] of Object.entries(definition.fields)) {\n const entry = mapEntry(root, name);\n if (entry === undefined) continue;\n const node = entry.value;\n if (spec.kind === 'text') {\n if (node.kind === 'scalar' && typeof node.value === 'string') {\n values.push({ start: node.start, end: node.end, text: `${node.value}\\n\\n` });\n }\n continue;\n }\n if (spec.kind !== 'list' || spec.of.kind !== 'text' || node.kind !== 'seq') continue;\n for (const item of node.items) {\n if (item.kind === 'scalar' && typeof item.value === 'string') {\n values.push({ start: item.start, end: item.end, text: `${item.value}\\n\\n` });\n }\n }\n }\n return values;\n}\n\nexport function projectionInput(\n document: Document,\n file: string,\n context: ProjectionContext,\n): InputResult {\n const content = document.content;\n const bodyStart = bodyStartOf(content);\n const edits = internalEdits(content, bodyStart, file, new Set(context.documentTargets));\n const declared = document.type;\n if (declared === undefined || declared === 'any') {\n return {\n ok: true,\n input: { values: [], ranges: [{ start: bodyStart, end: content.length }], edits },\n };\n }\n const definition = context.definition;\n if (definition === undefined) {\n return { ok: false, refusal: refusal(file, 'unknown-type', { location: 'type' }) };\n }\n const structure = new Set(\n Object.entries(definition.sections).flatMap(([name, spec]) => (structural(spec) ? [name] : [])),\n );\n const headings = headingSpans(content, bodyStart);\n const ranges: Extent[] = [{ start: bodyStart, end: headings[0]?.headingStart ?? content.length }];\n for (const heading of headings) {\n if (structure.has(heading.name)) continue;\n ranges.push({ start: heading.headingStart, end: heading.bodyEnd });\n }\n return { ok: true, input: { values: freeTextValues(definition, document), ranges, edits } };\n}\n\nexport function project(\n document: Document,\n file: string,\n context: ProjectionContext = { documentTargets: [] },\n): Projection {\n const result = projectionInput(document, file, context);\n if (!result.ok) return { ok: false, refusal: result.refusal };\n const { values, ranges, edits } = result.input;\n const prose = ranges.map((range) => rangeText(document.content, range, edits)).join('');\n return { ok: true, text: values.map((value) => value.text).join('') + prose };\n}\n"],"names":["frontmatter","linkInventory","target","refusal","headingSpans","bodyStartOf","mapEntry","internalEdits","content","bodyStart","file","documentTargets","inventory","slice","internal","Set","edits","uses","sort","left","right","end","start","use","resolved","destination","href","has","add","label","labelStart","labelEnd","inner","filter","edit","push","text","rangeText","block","blocks","range","cursor","structural","spec","kind","of","freeTextValues","definition","document","root","values","name","Object","entries","fields","entry","undefined","node","value","item","items","projectionInput","context","declared","type","ok","input","ranges","length","location","structure","sections","flatMap","headings","headingStart","heading","bodyEnd","project","result","prose","map","join"],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -6,16 +6,18 @@ export type VerifiedModel = {
6
6
  export type ModelVerification = {
7
7
  readonly verdict: 'accept';
8
8
  readonly model: VerifiedModel;
9
- } | ({
9
+ } | {
10
10
  readonly verdict: 'refuse';
11
- readonly source: 'model';
12
- } & Refusal);
11
+ readonly rule: string;
12
+ readonly version: string;
13
+ readonly location?: string;
14
+ };
13
15
  export type ValidationContext = {
14
16
  readonly binaryTargets: readonly string[];
15
17
  };
16
18
  export type ProjectionContext = {
17
19
  readonly documentTargets: readonly string[];
18
- readonly definition?: string;
20
+ readonly definition?: Definition;
19
21
  };
20
22
  export type DivisionContext = ProjectionContext & {
21
23
  readonly budget: number;
@@ -45,7 +47,6 @@ export type Validation = {
45
47
  readonly verdict: 'accept';
46
48
  } | ({
47
49
  readonly verdict: 'refuse';
48
- readonly source?: 'content';
49
50
  } & Refusal);
50
51
  export type Projection = {
51
52
  readonly ok: true;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdmodel/src/types.ts"],"sourcesContent":["import type { Definition } from './definition.js';\n\nexport type Library = Readonly<Record<string, string>>;\n\nexport type VerifiedModel = {\n readonly types: Readonly<Record<string, Definition>>;\n};\n\nexport type ModelVerification =\n | { readonly verdict: 'accept'; readonly model: VerifiedModel }\n | ({ readonly verdict: 'refuse'; readonly source: 'model' } & Refusal);\n\nexport type ValidationContext = {\n readonly binaryTargets: readonly string[];\n};\n\nexport type ProjectionContext = {\n readonly documentTargets: readonly string[];\n readonly definition?: string;\n};\n\nexport type DivisionContext = ProjectionContext & {\n readonly budget: number;\n};\n\nexport type Extent = {\n readonly start: number;\n readonly end: number;\n};\n\nexport type Span = Extent & {\n readonly text: string;\n};\n\nexport type Document = {\n readonly content: string;\n readonly type: string | undefined;\n readonly fields: Readonly<Record<string, unknown>>;\n readonly preamble: string;\n readonly sections: Readonly<Record<string, string>>;\n};\n\nexport type Refusal = {\n readonly file: string;\n readonly rule: string;\n readonly version: string;\n readonly location?: string;\n readonly referrers?: readonly string[];\n};\n\nexport type Validation =\n | { readonly verdict: 'accept' }\n | ({ readonly verdict: 'refuse'; readonly source?: 'content' } & Refusal);\n\nexport type Projection =\n | { readonly ok: true; readonly text: string }\n | { readonly ok: false; readonly refusal: Refusal };\n\nexport type Division =\n | { readonly ok: true; readonly spans: readonly Span[] }\n | { readonly ok: false; readonly refusal: Refusal };\n\nexport type ParseResult =\n | { readonly ok: true; readonly document: Document }\n | { readonly ok: false; readonly refusal: Refusal };\n\nexport type Link = {\n readonly href: string;\n readonly target: string;\n};\n\nexport type Change =\n | {\n readonly kind: 'field';\n readonly name: string;\n readonly value: unknown;\n readonly prior: unknown;\n }\n | {\n readonly kind: 'section';\n readonly name: string;\n readonly value: string;\n readonly prior: string;\n }\n | {\n readonly kind: 'preamble';\n readonly value: string;\n readonly prior: string;\n }\n | {\n readonly kind: 'link';\n readonly href: string;\n readonly to: string;\n };\n\nexport type ApplyResult =\n | { readonly outcome: 'applied'; readonly document: Document }\n | { readonly outcome: 'stale'; readonly document: Document }\n | { readonly outcome: 'refuse'; readonly refusal: Refusal };\n"],"names":[],"mappings":"AA+FA,WAG8D"}
1
+ {"version":3,"sources":["/workspace/packages/mdmodel/src/types.ts"],"sourcesContent":["import type { Definition } from './definition.js';\n\nexport type Library = Readonly<Record<string, string>>;\n\nexport type VerifiedModel = {\n readonly types: Readonly<Record<string, Definition>>;\n};\n\nexport type ModelVerification =\n | { readonly verdict: 'accept'; readonly model: VerifiedModel }\n | {\n readonly verdict: 'refuse';\n readonly rule: string;\n readonly version: string;\n readonly location?: string;\n };\n\nexport type ValidationContext = {\n readonly binaryTargets: readonly string[];\n};\n\nexport type ProjectionContext = {\n readonly documentTargets: readonly string[];\n readonly definition?: Definition;\n};\n\nexport type DivisionContext = ProjectionContext & {\n readonly budget: number;\n};\n\nexport type Extent = {\n readonly start: number;\n readonly end: number;\n};\n\nexport type Span = Extent & {\n readonly text: string;\n};\n\nexport type Document = {\n readonly content: string;\n readonly type: string | undefined;\n readonly fields: Readonly<Record<string, unknown>>;\n readonly preamble: string;\n readonly sections: Readonly<Record<string, string>>;\n};\n\nexport type Refusal = {\n readonly file: string;\n readonly rule: string;\n readonly version: string;\n readonly location?: string;\n readonly referrers?: readonly string[];\n};\n\nexport type Validation =\n | { readonly verdict: 'accept' }\n | ({ readonly verdict: 'refuse' } & Refusal);\n\nexport type Projection =\n | { readonly ok: true; readonly text: string }\n | { readonly ok: false; readonly refusal: Refusal };\n\nexport type Division =\n | { readonly ok: true; readonly spans: readonly Span[] }\n | { readonly ok: false; readonly refusal: Refusal };\n\nexport type ParseResult =\n | { readonly ok: true; readonly document: Document }\n | { readonly ok: false; readonly refusal: Refusal };\n\nexport type Link = {\n readonly href: string;\n readonly target: string;\n};\n\nexport type Change =\n | {\n readonly kind: 'field';\n readonly name: string;\n readonly value: unknown;\n readonly prior: unknown;\n }\n | {\n readonly kind: 'section';\n readonly name: string;\n readonly value: string;\n readonly prior: string;\n }\n | {\n readonly kind: 'preamble';\n readonly value: string;\n readonly prior: string;\n }\n | {\n readonly kind: 'link';\n readonly href: string;\n readonly to: string;\n };\n\nexport type ApplyResult =\n | { readonly outcome: 'applied'; readonly document: Document }\n | { readonly outcome: 'stale'; readonly document: Document }\n | { readonly outcome: 'refuse'; readonly refusal: Refusal };\n"],"names":[],"mappings":"AAoGA,WAG8D"}
@@ -1,5 +1,4 @@
1
- import type { Document, Library, ModelVerification, Validation, ValidationContext, VerifiedModel } from './types.js';
2
- export declare function verify(definitions: Library): ModelVerification;
3
- export declare function verifyDocuments(definitions: Readonly<Record<string, Document>>): ModelVerification;
1
+ import type { Library, ModelVerification, Validation, ValidationContext, VerifiedModel } from './types.js';
2
+ export declare function verify(schema: string): ModelVerification;
4
3
  export declare function validate(library: Library, context?: ValidationContext, model?: VerifiedModel): Validation;
5
4
  //# sourceMappingURL=validate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,QAAQ,EACR,OAAO,EACP,iBAAiB,EAGjB,UAAU,EACV,iBAAiB,EACjB,aAAa,EACd,MAAM,YAAY,CAAC;AA2CpB,wBAAgB,MAAM,CAAC,WAAW,EAAE,OAAO,GAAG,iBAAiB,CAI9D;AAED,wBAAgB,eAAe,CAC7B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,GAC9C,iBAAiB,CAKnB;AAwCD,wBAAgB,QAAQ,CACtB,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,iBAAyC,EAClD,KAAK,CAAC,EAAE,aAAa,GACpB,UAAU,CAKZ"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,OAAO,EACP,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,aAAa,EACd,MAAM,YAAY,CAAC;AA2CpB,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CASxD;AAQD,wBAAgB,QAAQ,CACtB,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,iBAAyC,EAClD,KAAK,GAAE,aAA6B,GACnC,UAAU,CAyGZ"}