@x12i/docify-sdk 1.0.0

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 ADDED
@@ -0,0 +1,3 @@
1
+ # @x12i/docify-sdk
2
+
3
+ `createEbooksSdk(bundle)` — query catalog, use cases, and embedded markdown. Product packages wire a Memorix (or other) content bundle and publish as a **devDependency** knowledge SDK.
@@ -0,0 +1,36 @@
1
+ import type { AgentManifest, Audience, Book, Catalog, ChapterEntry, SiteConfig, UseCase, UseCasesFile } from "@x12i/docify-core";
2
+ export type EbooksBundle = {
3
+ catalog: Catalog;
4
+ useCases: UseCasesFile;
5
+ site: SiteConfig;
6
+ manifest: AgentManifest;
7
+ /** Relative path → markdown/string content embedded in the knowledge package. */
8
+ files: Record<string, string>;
9
+ };
10
+ export type ListUseCasesFilter = {
11
+ audience?: Audience;
12
+ tag?: string;
13
+ q?: string;
14
+ };
15
+ export type EbooksSdk = {
16
+ catalog: Catalog;
17
+ useCases: UseCase[];
18
+ site: SiteConfig;
19
+ listUseCases(filter?: ListUseCasesFilter): UseCase[];
20
+ getUseCase(id: string): UseCase | undefined;
21
+ getUseCaseMarkdown(id: string): string | undefined;
22
+ listBooks(filter?: {
23
+ audience?: Audience;
24
+ }): Book[];
25
+ getBook(id: string): Book | undefined;
26
+ getBookMarkdown(bookId: string, audience: Audience): string | undefined;
27
+ getChapterIndex(bookId: string, audience: Audience): ChapterEntry[] | undefined;
28
+ getChapterMarkdown(bookId: string, audience: Audience, chapterSlug: string): string | undefined;
29
+ search(query: string): {
30
+ useCases: UseCase[];
31
+ books: Book[];
32
+ };
33
+ manifest(): AgentManifest;
34
+ };
35
+ export declare function createEbooksSdk(bundle: EbooksBundle): EbooksSdk;
36
+ //# sourceMappingURL=create-sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-sdk.d.ts","sourceRoot":"","sources":["../src/create-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,UAAU,EACV,OAAO,EACP,YAAY,EACb,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,EAAE,CAAC;IACrD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IAC5C,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACnD,SAAS,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,IAAI,EAAE,CAAC;IACpD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACxE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,YAAY,EAAE,GAAG,SAAS,CAAC;IAChF,kBAAkB,CAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAAC;IACtB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAAC,KAAK,EAAE,IAAI,EAAE,CAAA;KAAE,CAAC;IAC9D,QAAQ,IAAI,aAAa,CAAC;CAC3B,CAAC;AAMF,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAgG/D"}
@@ -0,0 +1,94 @@
1
+ function matchQ(hay, q) {
2
+ return hay.toLowerCase().includes(q.toLowerCase());
3
+ }
4
+ export function createEbooksSdk(bundle) {
5
+ const useCases = bundle.useCases.useCases;
6
+ const books = bundle.catalog.books;
7
+ const file = (rel) => rel ? bundle.files[rel] ?? bundle.files[`/${rel}`] : undefined;
8
+ return {
9
+ catalog: bundle.catalog,
10
+ useCases,
11
+ site: bundle.site,
12
+ listUseCases(filter = {}) {
13
+ return useCases.filter((uc) => {
14
+ if (filter.audience && !uc.audiences.includes(filter.audience))
15
+ return false;
16
+ if (filter.tag && !uc.tags.includes(filter.tag))
17
+ return false;
18
+ if (filter.q) {
19
+ const blob = `${uc.id} ${uc.title} ${uc.goal} ${uc.tags.join(" ")}`;
20
+ if (!matchQ(blob, filter.q))
21
+ return false;
22
+ }
23
+ return true;
24
+ });
25
+ },
26
+ getUseCase(id) {
27
+ return useCases.find((u) => u.id === id);
28
+ },
29
+ getUseCaseMarkdown(id) {
30
+ const entry = bundle.manifest.useCases.find((u) => u.id === id);
31
+ return file(entry?.md);
32
+ },
33
+ listBooks(filter = {}) {
34
+ return books.filter((b) => {
35
+ if (filter.audience && !b.audiences.includes(filter.audience))
36
+ return false;
37
+ return true;
38
+ });
39
+ },
40
+ getBook(id) {
41
+ return books.find((b) => b.id === id);
42
+ },
43
+ getBookMarkdown(bookId, audience) {
44
+ const entry = bundle.manifest.books.find((b) => b.id === bookId);
45
+ return file(entry?.md[audience]);
46
+ },
47
+ getChapterIndex(bookId, audience) {
48
+ const entry = bundle.manifest.books.find((b) => b.id === bookId);
49
+ const raw = file(entry?.chapters[audience]);
50
+ if (!raw)
51
+ return undefined;
52
+ return JSON.parse(raw);
53
+ },
54
+ getChapterMarkdown(bookId, audience, chapterSlug) {
55
+ const md = this.getBookMarkdown(bookId, audience);
56
+ if (!md)
57
+ return undefined;
58
+ const lines = md.replace(/\r\n/g, "\n").split("\n");
59
+ let capturing = false;
60
+ const out = [];
61
+ let currentSlug = "";
62
+ // lazy import-free slugify inline
63
+ const slugify = (s) => s
64
+ .toLowerCase()
65
+ .replace(/[^a-z0-9]+/g, "-")
66
+ .replace(/^-+|-+$/g, "");
67
+ for (const line of lines) {
68
+ const m = /^##\s+(.+?)\s*$/.exec(line);
69
+ if (m) {
70
+ currentSlug = slugify(m[1]);
71
+ capturing = currentSlug === chapterSlug;
72
+ if (capturing)
73
+ continue;
74
+ if (out.length)
75
+ break;
76
+ continue;
77
+ }
78
+ if (capturing)
79
+ out.push(line);
80
+ }
81
+ return out.length ? out.join("\n").trim() : undefined;
82
+ },
83
+ search(query) {
84
+ return {
85
+ useCases: this.listUseCases({ q: query }),
86
+ books: books.filter((b) => matchQ(`${b.id} ${b.title} ${b.blurb} ${b.tags.join(" ")}`, query)),
87
+ };
88
+ },
89
+ manifest() {
90
+ return bundle.manifest;
91
+ },
92
+ };
93
+ }
94
+ //# sourceMappingURL=create-sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-sdk.js","sourceRoot":"","sources":["../src/create-sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { createEbooksSdk, createEbooksSdk as createDocifySdk, type EbooksBundle, type EbooksBundle as DocifyBundle, type EbooksSdk, type EbooksSdk as DocifySdk, type ListUseCasesFilter, } from "./create-sdk.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,eAAe,IAAI,eAAe,EAClC,KAAK,YAAY,EACjB,KAAK,YAAY,IAAI,YAAY,EACjC,KAAK,SAAS,EACd,KAAK,SAAS,IAAI,SAAS,EAC3B,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { createEbooksSdk, createEbooksSdk as createDocifySdk, } from "./create-sdk.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,eAAe,IAAI,eAAe,GAMnC,MAAM,iBAAiB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@x12i/docify-sdk",
3
+ "version": "1.0.0",
4
+ "description": "createDocifySdk(bundle) \u2014 knowledge SDK factory for x12i docify products.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "scripts": {
19
+ "prebuild": "rm -rf dist",
20
+ "build": "tsc -p tsconfig.build.json",
21
+ "test": "vitest run --passWithNoTests",
22
+ "typecheck": "tsc --noEmit"
23
+ },
24
+ "engines": {
25
+ "node": ">=18.0.0"
26
+ },
27
+ "dependencies": {
28
+ "@x12i/docify-core": "^1.0.0"
29
+ },
30
+ "devDependencies": {
31
+ "@types/node": "^20.14.0",
32
+ "typescript": "^5.6.0",
33
+ "vitest": "^2.1.0"
34
+ },
35
+ "publishConfig": {
36
+ "access": "public",
37
+ "registry": "https://registry.npmjs.org/"
38
+ },
39
+ "license": "exellix-license"
40
+ }