okf-core 2.1.0 → 3.0.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/README.md CHANGED
@@ -17,6 +17,19 @@ bundle. The library retains YAML source byte-for-byte beside its parsed mapping
17
17
  and reads Markdown links from a CommonMark AST. Conformance errors, format
18
18
  guidance, and consumer profile findings remain separate throughout the result.
19
19
 
20
+ ## Generated directory indexes
21
+
22
+ `generateBundleIndexes(analysis)` returns one `okf.index.v1` navigation object
23
+ per directory. `selectBundleIndex(indexes, directory)` selects the root (`.`)
24
+ or a confined bundle-relative directory. Each index contains its immediate
25
+ pages' titles and descriptions, child directories, and rendered Markdown.
26
+ The root Markdown retains the analyzed `okf_version` declaration; nested
27
+ indexes have no frontmatter. Neither function writes to storage.
28
+
29
+ Indexes and logs are excluded from `buildGraph`. Navigation entries are not
30
+ semantic relationships. Useful prose previously kept in a reserved `index.md`
31
+ belongs in an ordinary typed page before an authored index is retired.
32
+
20
33
  ## Metadata and profile boundaries
21
34
 
22
35
  `content`, `frontmatter.raw`, and `frontmatter.yaml` retain authored bytes. The
package/dist/graph.d.ts CHANGED
@@ -2,13 +2,8 @@ import type { AnalyzedDocument, BundleGraph } from "okf-contracts";
2
2
  /**
3
3
  * Project a bundle onto its graph.
4
4
  *
5
- * Indexes are included. They carry no frontmatter, so they have nothing to say about their own
6
- * type or trust, but their links are authored: somebody wrote each entry, grouped it under a
7
- * heading, and described it. Dropping them dropped the spine of a bundle and drew the rest as
8
- * unrelated islands — a picture that asserts the opposite of what the bundle says.
9
- *
10
- * Logs stay out. A log is a dated history of changes to a scope, so its links point at what
11
- * happened rather than at what relates to what.
5
+ * Reserved indexes provide navigation and logs record history. Neither declares semantic
6
+ * relationships between concepts; those relationships come from the concept documents.
12
7
  */
13
8
  export declare function buildGraph(documents: readonly AnalyzedDocument[]): BundleGraph;
14
9
  //# sourceMappingURL=graph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EAGZ,MAAM,eAAe,CAAC;AAIvB;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,GAAG,WAAW,CA8C9E"}
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EAGZ,MAAM,eAAe,CAAC;AAIvB;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,GAAG,WAAW,CA4C9E"}
package/dist/graph.js CHANGED
@@ -2,26 +2,19 @@ import { byCodePoint } from "./paths.js";
2
2
  /**
3
3
  * Project a bundle onto its graph.
4
4
  *
5
- * Indexes are included. They carry no frontmatter, so they have nothing to say about their own
6
- * type or trust, but their links are authored: somebody wrote each entry, grouped it under a
7
- * heading, and described it. Dropping them dropped the spine of a bundle and drew the rest as
8
- * unrelated islands — a picture that asserts the opposite of what the bundle says.
9
- *
10
- * Logs stay out. A log is a dated history of changes to a scope, so its links point at what
11
- * happened rather than at what relates to what.
5
+ * Reserved indexes provide navigation and logs record history. Neither declares semantic
6
+ * relationships between concepts; those relationships come from the concept documents.
12
7
  */
13
8
  export function buildGraph(documents) {
14
9
  const linked = documents
15
- .filter((document) => document.kind === "concept" || document.kind === "index")
10
+ .filter((document) => document.kind === "concept")
16
11
  .sort((left, right) => byCodePoint(left.path, right.path));
17
12
  const known = new Set(linked.map((document) => document.path));
18
13
  const nodes = linked.map((document) => ({
19
14
  id: document.path,
20
15
  path: document.path,
21
16
  title: document.derived.title,
22
- // An index declares no type. Naming it one keeps the vocabulary honest and lets a reader
23
- // tell a table of contents from a claim.
24
- type: document.derived.type ?? (document.kind === "index" ? "Index" : "Concept"),
17
+ type: document.derived.type ?? "Concept",
25
18
  description: document.derived.description,
26
19
  status: document.derived.status,
27
20
  trustTier: document.derived.trustTier,
package/dist/graph.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export { analyzeBundle, parseBundleDocument } from "./analyze.js";
2
2
  export { canonicalChangeJson, parseChange } from "./changes.js";
3
3
  export { documentExtensions } from "./derive.js";
4
4
  export { buildGraph } from "./graph.js";
5
+ export { generateBundleIndexes, selectBundleIndex } from "./indexes.js";
5
6
  export { extractMarkdownLinks } from "./links.js";
6
7
  export type { ExtractLinksOptions } from "./links.js";
7
8
  export { listBundleEntries } from "./listing.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,YAAY,EACV,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,YAAY,EACV,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@ export { analyzeBundle, parseBundleDocument } from "./analyze.js";
2
2
  export { canonicalChangeJson, parseChange } from "./changes.js";
3
3
  export { documentExtensions } from "./derive.js";
4
4
  export { buildGraph } from "./graph.js";
5
+ export { generateBundleIndexes, selectBundleIndex } from "./indexes.js";
5
6
  export { extractMarkdownLinks } from "./links.js";
6
7
  export { listBundleEntries } from "./listing.js";
7
8
  export { byCodePoint, canonicalizeBundlePath, canonicalizeOperationPath, InvalidBundlePathError, resolveWithinBundle, validateBundlePath, } from "./paths.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { BundleAnalysis, BundleDirectoryIndex } from "okf-contracts";
2
+ /** Derive directory navigation without changing authored documents or semantic edges. */
3
+ export declare function generateBundleIndexes(analysis: BundleAnalysis): BundleDirectoryIndex[];
4
+ export declare function selectBundleIndex(indexes: readonly BundleDirectoryIndex[], requested?: string): BundleDirectoryIndex;
5
+ //# sourceMappingURL=indexes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexes.d.ts","sourceRoot":"","sources":["../src/indexes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAoB,MAAM,eAAe,CAAC;AAY5F,yFAAyF;AACzF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,oBAAoB,EAAE,CAqCtF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,EAAE,SAAS,SAAM,GAAG,oBAAoB,CAKjH"}
@@ -0,0 +1,58 @@
1
+ import { byCodePoint, validateBundlePath } from "./paths.js";
2
+ function label(value) {
3
+ return value.replace(/\s+/g, " ").replace(/[\\`*_[\]<>]/g, "\\$&");
4
+ }
5
+ function href(value) {
6
+ return value.split("/").map((part) => encodeURIComponent(part).replace(/[!'()*]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`)).join("/");
7
+ }
8
+ /** Derive directory navigation without changing authored documents or semantic edges. */
9
+ export function generateBundleIndexes(analysis) {
10
+ const directories = new Set(["."]);
11
+ for (const document of analysis.documents) {
12
+ const parts = document.path.split("/");
13
+ for (let count = 1; count < parts.length; count += 1) {
14
+ directories.add(parts.slice(0, count).join("/"));
15
+ }
16
+ }
17
+ const titles = new Map(analysis.documents.filter((document) => document.kind === "index")
18
+ .map((document) => [document.path, document.derived.title]));
19
+ return [...directories].sort(byCodePoint).map((directory) => {
20
+ const prefix = directory === "." ? "" : `${directory}/`;
21
+ const indexPath = `${prefix}index.md`;
22
+ const title = titles.get(indexPath) ?? (directory === "." ? "Bundle" : directory.split("/").at(-1));
23
+ const entries = [];
24
+ for (const child of directories) {
25
+ if (child === "." || !child.startsWith(prefix))
26
+ continue;
27
+ const relative = child.slice(prefix.length);
28
+ if (relative.includes("/") || relative === "")
29
+ continue;
30
+ entries.push({ kind: "directory", path: child, title: titles.get(`${child}/index.md`) ?? relative,
31
+ description: null, href: `${href(relative)}/index.md` });
32
+ }
33
+ for (const document of analysis.documents) {
34
+ if (document.kind === "index" || !document.path.startsWith(prefix))
35
+ continue;
36
+ const relative = document.path.slice(prefix.length);
37
+ if (relative.includes("/"))
38
+ continue;
39
+ entries.push({ kind: "document", path: document.path, title: document.derived.title,
40
+ description: document.derived.description, href: href(relative) });
41
+ }
42
+ entries.sort((left, right) => byCodePoint(left.path, right.path));
43
+ const version = directory === "." && analysis.okfVersion !== null
44
+ ? `---\nokf_version: ${JSON.stringify(analysis.okfVersion)}\n---\n\n` : "";
45
+ const lines = entries.map((entry) => `- [${label(entry.title)}](${entry.href})${entry.description
46
+ ? ` — ${label(entry.description)}` : ""}`);
47
+ return { schema: "okf.index.v1", generated: true, directory, path: indexPath, title, entries,
48
+ content: `${version}# ${label(title)}\n\n${lines.length ? `${lines.join("\n")}\n` : ""}` };
49
+ });
50
+ }
51
+ export function selectBundleIndex(indexes, requested = ".") {
52
+ const directory = requested === "." ? "." : validateBundlePath(requested);
53
+ const index = indexes.find((candidate) => candidate.directory === directory);
54
+ if (!index)
55
+ throw new Error(`directory does not exist in bundle: ${requested}`);
56
+ return index;
57
+ }
58
+ //# sourceMappingURL=indexes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexes.js","sourceRoot":"","sources":["../src/indexes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE7D,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,IAAI,CAAC,KAAa;IACzB,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAC/E,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxF,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,qBAAqB,CAAC,QAAwB;IAC5D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACrD,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC;SACtF,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QAC1D,MAAM,MAAM,GAAG,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC;QACxD,MAAM,SAAS,GAAG,GAAG,MAAM,UAAU,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;QACrG,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YAChC,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,SAAS;YACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,EAAE;gBAAE,SAAS;YACxD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,WAAW,CAAC,IAAI,QAAQ;gBAC/F,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,SAAS;YAC7E,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACpD,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,SAAS;YACrC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK;gBACjF,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,SAAS,KAAK,GAAG,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI;YAC/D,CAAC,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,WAAW;YAC/F,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7C,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO;YAC1F,OAAO,EAAE,GAAG,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;IAC/F,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAwC,EAAE,SAAS,GAAG,GAAG;IACzF,MAAM,SAAS,GAAG,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IAC7E,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,SAAS,EAAE,CAAC,CAAC;IAChF,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "okf-core",
3
- "version": "2.1.0",
3
+ "version": "3.0.1",
4
4
  "description": "Canonical parser, validator, link resolver, graph, and search engine for OKF v0.2",
5
5
  "type": "module",
6
6
  "repository": {
@@ -32,7 +32,7 @@
32
32
  "diff": "^9.0.0",
33
33
  "mdast-util-from-markdown": "^2.0.2",
34
34
  "yaml": "^2.9.0",
35
- "okf-contracts": "1.1.0"
35
+ "okf-contracts": "2.1.0"
36
36
  },
37
37
  "scripts": {
38
38
  "build": "tsc -p tsconfig.json",