@x12i/catalox 1.2.0 → 2.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 +424 -406
- package/dist/src/catalox/catalox.d.ts +38 -1
- package/dist/src/catalox/catalox.d.ts.map +1 -1
- package/dist/src/catalox/catalox.js +468 -5
- package/dist/src/catalox/catalox.js.map +1 -1
- package/dist/src/catalox/field-source-resolution.d.ts +16 -0
- package/dist/src/catalox/field-source-resolution.d.ts.map +1 -0
- package/dist/src/catalox/field-source-resolution.js +43 -0
- package/dist/src/catalox/field-source-resolution.js.map +1 -0
- package/dist/src/catalox/reporting/render-inventory-report.d.ts +3 -0
- package/dist/src/catalox/reporting/render-inventory-report.d.ts.map +1 -0
- package/dist/src/catalox/reporting/render-inventory-report.js +78 -0
- package/dist/src/catalox/reporting/render-inventory-report.js.map +1 -0
- package/dist/src/cli/index.d.ts +3 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +267 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/contracts/context.d.ts +7 -1
- package/dist/src/contracts/context.d.ts.map +1 -1
- package/dist/src/contracts/descriptors.d.ts +6 -0
- package/dist/src/contracts/descriptors.d.ts.map +1 -1
- package/dist/src/contracts/diagram-map.d.ts +24 -0
- package/dist/src/contracts/diagram-map.d.ts.map +1 -0
- package/dist/src/contracts/diagram-map.js +2 -0
- package/dist/src/contracts/diagram-map.js.map +1 -0
- package/dist/src/contracts/field-source.d.ts +43 -0
- package/dist/src/contracts/field-source.d.ts.map +1 -0
- package/dist/src/contracts/field-source.js +2 -0
- package/dist/src/contracts/field-source.js.map +1 -0
- package/dist/src/contracts/filters.d.ts +59 -0
- package/dist/src/contracts/filters.d.ts.map +1 -0
- package/dist/src/contracts/filters.js +2 -0
- package/dist/src/contracts/filters.js.map +1 -0
- package/dist/src/contracts/ids.d.ts +1 -0
- package/dist/src/contracts/ids.d.ts.map +1 -1
- package/dist/src/contracts/index.d.ts +12 -1
- package/dist/src/contracts/index.d.ts.map +1 -1
- package/dist/src/contracts/index.js.map +1 -1
- package/dist/src/contracts/inventory-export.d.ts +40 -0
- package/dist/src/contracts/inventory-export.d.ts.map +1 -0
- package/dist/src/contracts/inventory-export.js +2 -0
- package/dist/src/contracts/inventory-export.js.map +1 -0
- package/dist/src/contracts/inventory-report.d.ts +61 -0
- package/dist/src/contracts/inventory-report.d.ts.map +1 -0
- package/dist/src/contracts/inventory-report.js +2 -0
- package/dist/src/contracts/inventory-report.js.map +1 -0
- package/dist/src/contracts/items.d.ts +3 -0
- package/dist/src/contracts/items.d.ts.map +1 -1
- package/dist/src/contracts/markdown-map.d.ts +42 -0
- package/dist/src/contracts/markdown-map.d.ts.map +1 -0
- package/dist/src/contracts/markdown-map.js +2 -0
- package/dist/src/contracts/markdown-map.js.map +1 -0
- package/dist/src/contracts/presentation.d.ts +149 -0
- package/dist/src/contracts/presentation.d.ts.map +1 -0
- package/dist/src/contracts/presentation.js +2 -0
- package/dist/src/contracts/presentation.js.map +1 -0
- package/dist/src/contracts/render-map.d.ts +151 -0
- package/dist/src/contracts/render-map.d.ts.map +1 -0
- package/dist/src/contracts/render-map.js +2 -0
- package/dist/src/contracts/render-map.js.map +1 -0
- package/dist/src/contracts/renderer-snippets.d.ts +32 -0
- package/dist/src/contracts/renderer-snippets.d.ts.map +1 -0
- package/dist/src/contracts/renderer-snippets.js +2 -0
- package/dist/src/contracts/renderer-snippets.js.map +1 -0
- package/dist/src/contracts/snapshots.d.ts +12 -0
- package/dist/src/contracts/snapshots.d.ts.map +1 -0
- package/dist/src/contracts/snapshots.js +2 -0
- package/dist/src/contracts/snapshots.js.map +1 -0
- package/dist/src/contracts/stores.d.ts +21 -0
- package/dist/src/contracts/stores.d.ts.map +1 -0
- package/dist/src/contracts/stores.js +2 -0
- package/dist/src/contracts/stores.js.map +1 -0
- package/dist/src/diagrams/render-catalog-diagram.d.ts +3 -0
- package/dist/src/diagrams/render-catalog-diagram.d.ts.map +1 -0
- package/dist/src/diagrams/render-catalog-diagram.js +27 -0
- package/dist/src/diagrams/render-catalog-diagram.js.map +1 -0
- package/dist/src/diagrams/render-item-diagram.d.ts +3 -0
- package/dist/src/diagrams/render-item-diagram.d.ts.map +1 -0
- package/dist/src/diagrams/render-item-diagram.js +26 -0
- package/dist/src/diagrams/render-item-diagram.js.map +1 -0
- package/dist/src/firebase/index.d.ts +2 -0
- package/dist/src/firebase/index.d.ts.map +1 -1
- package/dist/src/firebase/index.js +2 -0
- package/dist/src/firebase/index.js.map +1 -1
- package/dist/src/firebase/renderer-snippet-store.d.ts +12 -0
- package/dist/src/firebase/renderer-snippet-store.d.ts.map +1 -0
- package/dist/src/firebase/renderer-snippet-store.js +21 -0
- package/dist/src/firebase/renderer-snippet-store.js.map +1 -0
- package/dist/src/firebase/snapshot-store.d.ts +7 -0
- package/dist/src/firebase/snapshot-store.d.ts.map +1 -1
- package/dist/src/firebase/snapshot-store.js +30 -0
- package/dist/src/firebase/snapshot-store.js.map +1 -1
- package/dist/src/firebase/store-app-binding-store.d.ts +14 -0
- package/dist/src/firebase/store-app-binding-store.d.ts.map +1 -0
- package/dist/src/firebase/store-app-binding-store.js +36 -0
- package/dist/src/firebase/store-app-binding-store.js.map +1 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/jsx/index.d.ts +66 -0
- package/dist/src/jsx/index.d.ts.map +1 -0
- package/dist/src/jsx/index.js +165 -0
- package/dist/src/jsx/index.js.map +1 -0
- package/dist/src/markdown/render-item-markdown.d.ts +5 -0
- package/dist/src/markdown/render-item-markdown.d.ts.map +1 -0
- package/dist/src/markdown/render-item-markdown.js +83 -0
- package/dist/src/markdown/render-item-markdown.js.map +1 -0
- package/dist/src/markdown/render-list-markdown.d.ts +5 -0
- package/dist/src/markdown/render-list-markdown.d.ts.map +1 -0
- package/dist/src/markdown/render-list-markdown.js +90 -0
- package/dist/src/markdown/render-list-markdown.js.map +1 -0
- package/dist/src/validation/index.d.ts +3 -1
- package/dist/src/validation/index.d.ts.map +1 -1
- package/dist/src/validation/index.js +2 -2
- package/dist/src/validation/index.js.map +1 -1
- package/dist/src/validation/ui-spec-schema.d.ts +20 -0
- package/dist/src/validation/ui-spec-schema.d.ts.map +1 -0
- package/dist/src/validation/ui-spec-schema.js +605 -0
- package/dist/src/validation/ui-spec-schema.js.map +1 -0
- package/dist/src/validation/ui-spec-validate.d.ts +20 -0
- package/dist/src/validation/ui-spec-validate.d.ts.map +1 -0
- package/dist/src/validation/ui-spec-validate.js +73 -0
- package/dist/src/validation/ui-spec-validate.js.map +1 -0
- package/dist/test/unit/field-source-resolution.test.d.ts +2 -0
- package/dist/test/unit/field-source-resolution.test.d.ts.map +1 -0
- package/dist/test/unit/field-source-resolution.test.js +45 -0
- package/dist/test/unit/field-source-resolution.test.js.map +1 -0
- package/dist/test/unit/jsx-snippets.test.d.ts +2 -0
- package/dist/test/unit/jsx-snippets.test.d.ts.map +1 -0
- package/dist/test/unit/jsx-snippets.test.js +35 -0
- package/dist/test/unit/jsx-snippets.test.js.map +1 -0
- package/dist/test/unit/markdown-and-diagrams.test.d.ts +2 -0
- package/dist/test/unit/markdown-and-diagrams.test.d.ts.map +1 -0
- package/dist/test/unit/markdown-and-diagrams.test.js +62 -0
- package/dist/test/unit/markdown-and-diagrams.test.js.map +1 -0
- package/dist/test/unit/ui-spec-validation.test.d.ts +2 -0
- package/dist/test/unit/ui-spec-validation.test.d.ts.map +1 -0
- package/dist/test/unit/ui-spec-validation.test.js +90 -0
- package/dist/test/unit/ui-spec-validation.test.js.map +1 -0
- package/package.json +16 -2
|
@@ -11,6 +11,16 @@ export class SnapshotStore {
|
|
|
11
11
|
.collection("items")
|
|
12
12
|
.doc(String(itemId));
|
|
13
13
|
}
|
|
14
|
+
runDocRef(catalogId, runId) {
|
|
15
|
+
return this.store
|
|
16
|
+
.collection("catalogSnapshots")
|
|
17
|
+
.doc(String(catalogId))
|
|
18
|
+
.collection("runs")
|
|
19
|
+
.doc(String(runId));
|
|
20
|
+
}
|
|
21
|
+
runItemDocRef(catalogId, runId, itemId) {
|
|
22
|
+
return this.runDocRef(catalogId, runId).collection("items").doc(String(itemId));
|
|
23
|
+
}
|
|
14
24
|
async get(catalogId, itemId) {
|
|
15
25
|
const snap = await this.itemDocRef(catalogId, itemId).get();
|
|
16
26
|
return snap.exists ? snap.data() : null;
|
|
@@ -18,5 +28,25 @@ export class SnapshotStore {
|
|
|
18
28
|
async upsert(catalogId, record) {
|
|
19
29
|
await this.itemDocRef(catalogId, record.itemId).set(record, { merge: true });
|
|
20
30
|
}
|
|
31
|
+
async upsertRun(catalogId, run) {
|
|
32
|
+
await this.runDocRef(catalogId, run.runId).set(run, { merge: true });
|
|
33
|
+
}
|
|
34
|
+
async listRuns(catalogId, limit = 10) {
|
|
35
|
+
const snap = await this.store
|
|
36
|
+
.collection("catalogSnapshots")
|
|
37
|
+
.doc(String(catalogId))
|
|
38
|
+
.collection("runs")
|
|
39
|
+
.orderBy("startedAt", "desc")
|
|
40
|
+
.limit(limit)
|
|
41
|
+
.get();
|
|
42
|
+
return snap.docs.map((d) => d.data());
|
|
43
|
+
}
|
|
44
|
+
async upsertRunItem(catalogId, runId, record) {
|
|
45
|
+
await this.runItemDocRef(catalogId, runId, record.itemId).set(record, { merge: true });
|
|
46
|
+
}
|
|
47
|
+
async listRunItems(catalogId, runId) {
|
|
48
|
+
const snap = await this.runDocRef(catalogId, runId).collection("items").get();
|
|
49
|
+
return snap.docs.map((d) => d.data());
|
|
50
|
+
}
|
|
21
51
|
}
|
|
22
52
|
//# sourceMappingURL=snapshot-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-store.js","sourceRoot":"","sources":["../../../src/firebase/snapshot-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"snapshot-store.js","sourceRoot":"","sources":["../../../src/firebase/snapshot-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AppId, StoreId } from "../contracts/ids.js";
|
|
2
|
+
import type { StoreAppBindingRecord } from "../contracts/stores.js";
|
|
3
|
+
import { FirestoreStore } from "./firestore-store.js";
|
|
4
|
+
export declare class StoreAppBindingStore {
|
|
5
|
+
private readonly store;
|
|
6
|
+
constructor(store: FirestoreStore);
|
|
7
|
+
private docRef;
|
|
8
|
+
get(bindingId: string): Promise<StoreAppBindingRecord | null>;
|
|
9
|
+
findByStoreApp(storeId: StoreId, appId: AppId): Promise<StoreAppBindingRecord | null>;
|
|
10
|
+
listAppsByStore(storeId: StoreId): Promise<StoreAppBindingRecord[]>;
|
|
11
|
+
listStoresByApp(appId: AppId): Promise<StoreAppBindingRecord[]>;
|
|
12
|
+
upsert(record: StoreAppBindingRecord): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=store-app-binding-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-app-binding-store.d.ts","sourceRoot":"","sources":["../../../src/firebase/store-app-binding-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,cAAc;IAElD,OAAO,CAAC,MAAM;IAIR,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAK7D,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAWrF,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAKnE,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAK/D,MAAM,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3D"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { FirestoreStore } from "./firestore-store.js";
|
|
2
|
+
export class StoreAppBindingStore {
|
|
3
|
+
store;
|
|
4
|
+
constructor(store) {
|
|
5
|
+
this.store = store;
|
|
6
|
+
}
|
|
7
|
+
docRef(bindingId) {
|
|
8
|
+
return this.store.collection("storeAppBindings").doc(bindingId);
|
|
9
|
+
}
|
|
10
|
+
async get(bindingId) {
|
|
11
|
+
const snap = await this.docRef(bindingId).get();
|
|
12
|
+
return snap.exists ? snap.data() : null;
|
|
13
|
+
}
|
|
14
|
+
async findByStoreApp(storeId, appId) {
|
|
15
|
+
const snap = await this.store
|
|
16
|
+
.collection("storeAppBindings")
|
|
17
|
+
.where("storeId", "==", storeId)
|
|
18
|
+
.where("appId", "==", appId)
|
|
19
|
+
.limit(1)
|
|
20
|
+
.get();
|
|
21
|
+
const doc = snap.docs[0];
|
|
22
|
+
return doc ? doc.data() : null;
|
|
23
|
+
}
|
|
24
|
+
async listAppsByStore(storeId) {
|
|
25
|
+
const snap = await this.store.collection("storeAppBindings").where("storeId", "==", storeId).get();
|
|
26
|
+
return snap.docs.map((d) => d.data());
|
|
27
|
+
}
|
|
28
|
+
async listStoresByApp(appId) {
|
|
29
|
+
const snap = await this.store.collection("storeAppBindings").where("appId", "==", appId).get();
|
|
30
|
+
return snap.docs.map((d) => d.data());
|
|
31
|
+
}
|
|
32
|
+
async upsert(record) {
|
|
33
|
+
await this.docRef(record.bindingId).set(record, { merge: true });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=store-app-binding-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-app-binding-store.js","sourceRoot":"","sources":["../../../src/firebase/store-app-binding-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,KAAqB;QAArB,UAAK,GAAL,KAAK,CAAgB;IAAG,CAAC;IAE9C,MAAM,CAAC,SAAiB;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB;QACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,IAAI,EAA4B,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAgB,EAAE,KAAY;QACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK;aAC1B,UAAU,CAAC,kBAAkB,CAAC;aAC9B,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC;aAC/B,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC;aAC3B,KAAK,CAAC,CAAC,CAAC;aACR,GAAG,EAAE,CAAC;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,IAAI,EAA4B,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAgB;QACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;QACnG,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAA2B,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,KAAY;QAChC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;QAC/F,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAA2B,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAA6B;QACxC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;CACF"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -6,5 +6,10 @@ export * from "./adapters/api/index.js";
|
|
|
6
6
|
export * from "./mapping/index.js";
|
|
7
7
|
export * from "./bindings/index.js";
|
|
8
8
|
export * from "./validation/index.js";
|
|
9
|
+
export * from "./markdown/render-list-markdown.js";
|
|
10
|
+
export * from "./markdown/render-item-markdown.js";
|
|
11
|
+
export * from "./diagrams/render-catalog-diagram.js";
|
|
12
|
+
export * from "./diagrams/render-item-diagram.js";
|
|
9
13
|
export * from "./errors/index.js";
|
|
14
|
+
export * from "./jsx/index.js";
|
|
10
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -6,5 +6,10 @@ export * from "./adapters/api/index.js";
|
|
|
6
6
|
export * from "./mapping/index.js";
|
|
7
7
|
export * from "./bindings/index.js";
|
|
8
8
|
export * from "./validation/index.js";
|
|
9
|
+
export * from "./markdown/render-list-markdown.js";
|
|
10
|
+
export * from "./markdown/render-item-markdown.js";
|
|
11
|
+
export * from "./diagrams/render-catalog-diagram.js";
|
|
12
|
+
export * from "./diagrams/render-item-diagram.js";
|
|
9
13
|
export * from "./errors/index.js";
|
|
14
|
+
export * from "./jsx/index.js";
|
|
10
15
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { CatalogItemRenderMap, CatalogListRenderMap } from "../contracts/render-map.js";
|
|
2
|
+
import type { CatalogRendererSurface } from "../contracts/renderer-snippets.js";
|
|
3
|
+
export type TranspileJsxToModuleSourceInput = {
|
|
4
|
+
jsxSource: string;
|
|
5
|
+
/**
|
|
6
|
+
* When true, treat input as TS/TSX; otherwise as plain JSX.
|
|
7
|
+
*/
|
|
8
|
+
isTsx?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Optional label used in sourcemaps and diagnostics.
|
|
11
|
+
*/
|
|
12
|
+
sourceFileName?: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function transpileJsxToModuleSource(input: TranspileJsxToModuleSourceInput): Promise<string>;
|
|
15
|
+
export type TypecheckRendererSnippetIoInput = {
|
|
16
|
+
jsxSource: string;
|
|
17
|
+
surface: CatalogRendererSurface;
|
|
18
|
+
/**
|
|
19
|
+
* If true, any inability to typecheck (e.g. missing typescript) becomes an error.
|
|
20
|
+
*/
|
|
21
|
+
strict?: boolean;
|
|
22
|
+
};
|
|
23
|
+
export type TypecheckRendererSnippetIoError = {
|
|
24
|
+
file: string;
|
|
25
|
+
message: string;
|
|
26
|
+
line?: number;
|
|
27
|
+
column?: number;
|
|
28
|
+
};
|
|
29
|
+
export type TypecheckRendererSnippetIoResult = {
|
|
30
|
+
isValid: boolean;
|
|
31
|
+
errors: TypecheckRendererSnippetIoError[];
|
|
32
|
+
/**
|
|
33
|
+
* Present when typecheck couldn't be performed (and strict=false).
|
|
34
|
+
*/
|
|
35
|
+
skipped?: {
|
|
36
|
+
reason: string;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export declare function typecheckRendererSnippetIo(input: TypecheckRendererSnippetIoInput): Promise<TypecheckRendererSnippetIoResult>;
|
|
40
|
+
export type UnsafeCreateRendererFunctionInput = {
|
|
41
|
+
transpiledModuleSource: string;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* UNSAFE: Evaluates code. Only call with trusted snippets.
|
|
45
|
+
*
|
|
46
|
+
* Loads a transpiled ESM module source via a data URL and returns its default export.
|
|
47
|
+
*/
|
|
48
|
+
export declare function unsafeCreateRendererFunction<T = unknown>(input: UnsafeCreateRendererFunctionInput): Promise<T>;
|
|
49
|
+
export type RenderToHtmlInput = {
|
|
50
|
+
renderer: unknown;
|
|
51
|
+
/**
|
|
52
|
+
* If renderer is a component, it will be called with these props.
|
|
53
|
+
* If renderer is a function expecting a map, pass `{ map }` and use a wrapper.
|
|
54
|
+
*/
|
|
55
|
+
props: Record<string, unknown>;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Best-effort HTML rendering. If React is not installed, returns a string error.
|
|
59
|
+
* If the renderer returns a string, it is returned as-is.
|
|
60
|
+
*/
|
|
61
|
+
export declare function renderRendererToHtml(input: RenderToHtmlInput): Promise<string>;
|
|
62
|
+
export type CatalogRendererIo = {
|
|
63
|
+
map: CatalogListRenderMap | CatalogItemRenderMap;
|
|
64
|
+
surface: CatalogRendererSurface;
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jsx/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAC7F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAEhF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAsB,0BAA0B,CAAC,KAAK,EAAE,+BAA+B,GAAG,OAAO,CAAC,MAAM,CAAC,CAUxG;AAED,MAAM,MAAM,+BAA+B,GAAG;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,sBAAsB,CAAC;IAChC;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,+BAA+B,EAAE,CAAC;IAC1C;;OAEG;IACH,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9B,CAAC;AAOF,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,+BAA+B,GACrC,OAAO,CAAC,gCAAgC,CAAC,CA0H3C;AAED,MAAM,MAAM,iCAAiC,GAAG;IAC9C,sBAAsB,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,4BAA4B,CAAC,CAAC,GAAG,OAAO,EAC5D,KAAK,EAAE,iCAAiC,GACvC,OAAO,CAAC,CAAC,CAAC,CAIZ;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBpF;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,oBAAoB,GAAG,oBAAoB,CAAC;IACjD,OAAO,EAAE,sBAAsB,CAAC;CACjC,CAAC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { transform } from "esbuild";
|
|
2
|
+
export async function transpileJsxToModuleSource(input) {
|
|
3
|
+
const sourceFileName = input.sourceFileName ?? "snippet.tsx";
|
|
4
|
+
const result = await transform(input.jsxSource, {
|
|
5
|
+
loader: input.isTsx === false ? "jsx" : "tsx",
|
|
6
|
+
format: "esm",
|
|
7
|
+
target: "es2022",
|
|
8
|
+
sourcemap: "inline",
|
|
9
|
+
sourcefile: sourceFileName,
|
|
10
|
+
});
|
|
11
|
+
return result.code;
|
|
12
|
+
}
|
|
13
|
+
function toPos(ts, sf, start) {
|
|
14
|
+
const pos = sf.getLineAndCharacterOfPosition(start);
|
|
15
|
+
return { line: pos.line + 1, column: pos.character + 1 };
|
|
16
|
+
}
|
|
17
|
+
export async function typecheckRendererSnippetIo(input) {
|
|
18
|
+
let ts;
|
|
19
|
+
try {
|
|
20
|
+
ts = await import("typescript");
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
if (input.strict) {
|
|
24
|
+
return {
|
|
25
|
+
isValid: false,
|
|
26
|
+
errors: [{ file: "runtime", message: `typescript is required for typecheckRendererSnippetIo: ${String(e?.message ?? e)}` }],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return { isValid: true, errors: [], skipped: { reason: "typescript_not_installed" } };
|
|
30
|
+
}
|
|
31
|
+
const surface = input.surface;
|
|
32
|
+
// Use repo-relative virtual paths so TypeScript module resolution can find real source files.
|
|
33
|
+
const cwd = process.cwd().replace(/\\/g, "/");
|
|
34
|
+
const virtualDir = `${cwd}/src/jsx/__virtual__`;
|
|
35
|
+
const snippetFile = `${virtualDir}/snippet.tsx`;
|
|
36
|
+
const checkFile = `${virtualDir}/check.ts`;
|
|
37
|
+
const jsxTypesFile = `${virtualDir}/jsx.d.ts`;
|
|
38
|
+
const renderMapFile = `${cwd}/src/contracts/render-map.ts`;
|
|
39
|
+
const norm = (p) => p.replace(/\\/g, "/");
|
|
40
|
+
const jsxTypes = `
|
|
41
|
+
declare namespace JSX {
|
|
42
|
+
interface IntrinsicElements {
|
|
43
|
+
[elemName: string]: any;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
`;
|
|
47
|
+
const checkSource = `
|
|
48
|
+
import Renderer from "./snippet";
|
|
49
|
+
import type { CatalogListRenderMap, CatalogItemRenderMap } from "../contracts/render-map.js";
|
|
50
|
+
|
|
51
|
+
type ListComponent = (props: { map: CatalogListRenderMap } & Record<string, unknown>) => unknown;
|
|
52
|
+
type ListFn = (map: CatalogListRenderMap) => unknown;
|
|
53
|
+
type ItemComponent = (props: { map: CatalogItemRenderMap } & Record<string, unknown>) => unknown;
|
|
54
|
+
type ItemFn = (map: CatalogItemRenderMap) => unknown;
|
|
55
|
+
|
|
56
|
+
type Valid =
|
|
57
|
+
${surface === "list"
|
|
58
|
+
? "typeof Renderer extends ListComponent ? true : typeof Renderer extends ListFn ? true : false"
|
|
59
|
+
: "typeof Renderer extends ItemComponent ? true : typeof Renderer extends ItemFn ? true : false"};
|
|
60
|
+
|
|
61
|
+
type AssertTrue<T extends true> = T;
|
|
62
|
+
const __assert: AssertTrue<Valid> = true;
|
|
63
|
+
void __assert;
|
|
64
|
+
`;
|
|
65
|
+
const files = new Map([
|
|
66
|
+
[norm(snippetFile), input.jsxSource],
|
|
67
|
+
[norm(checkFile), checkSource],
|
|
68
|
+
[norm(jsxTypesFile), jsxTypes],
|
|
69
|
+
]);
|
|
70
|
+
const compilerOptions = {
|
|
71
|
+
strict: true,
|
|
72
|
+
noEmit: true,
|
|
73
|
+
module: ts.ModuleKind.ESNext,
|
|
74
|
+
moduleResolution: ts.ModuleResolutionKind.Bundler,
|
|
75
|
+
target: ts.ScriptTarget.ES2022,
|
|
76
|
+
// Preserve JSX so we don't require react/jsx-runtime types at typecheck time.
|
|
77
|
+
jsx: ts.JsxEmit.Preserve,
|
|
78
|
+
allowJs: true,
|
|
79
|
+
checkJs: false,
|
|
80
|
+
skipLibCheck: true,
|
|
81
|
+
types: [],
|
|
82
|
+
};
|
|
83
|
+
const defaultHost = ts.createCompilerHost(compilerOptions, true);
|
|
84
|
+
const host = {
|
|
85
|
+
...defaultHost,
|
|
86
|
+
fileExists: (fileName) => files.has(norm(fileName)) || defaultHost.fileExists(fileName),
|
|
87
|
+
readFile: (fileName) => files.get(norm(fileName)) ?? defaultHost.readFile(fileName),
|
|
88
|
+
getSourceFile: (fileName, languageVersion) => {
|
|
89
|
+
const text = files.get(norm(fileName));
|
|
90
|
+
if (text != null)
|
|
91
|
+
return ts.createSourceFile(fileName, text, languageVersion, true);
|
|
92
|
+
return defaultHost.getSourceFile(fileName, languageVersion);
|
|
93
|
+
},
|
|
94
|
+
getCurrentDirectory: () => virtualDir,
|
|
95
|
+
getCanonicalFileName: (f) => f,
|
|
96
|
+
useCaseSensitiveFileNames: () => true,
|
|
97
|
+
getNewLine: () => "\n",
|
|
98
|
+
resolveModuleNames: (moduleNames, containingFile) => {
|
|
99
|
+
return moduleNames.map((m) => {
|
|
100
|
+
if (m === "./snippet" || m === "./snippet.tsx" || m === "./snippet.ts") {
|
|
101
|
+
return { resolvedFileName: snippetFile, extension: ts.Extension.Tsx };
|
|
102
|
+
}
|
|
103
|
+
if (m === "../contracts/render-map.js" || m === "../contracts/render-map.ts") {
|
|
104
|
+
return { resolvedFileName: renderMapFile, extension: ts.Extension.Ts };
|
|
105
|
+
}
|
|
106
|
+
// Fall back to default resolver (best-effort).
|
|
107
|
+
const res = ts.resolveModuleName(m, containingFile, compilerOptions, defaultHost);
|
|
108
|
+
return res.resolvedModule;
|
|
109
|
+
});
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
// Keep snippets self-contained. If module resolution tries to reach into the real FS,
|
|
113
|
+
// we allow it (best-effort), but most stored snippets should not rely on imports.
|
|
114
|
+
const program = ts.createProgram([checkFile, snippetFile, jsxTypesFile], compilerOptions, host);
|
|
115
|
+
const diagnostics = ts.getPreEmitDiagnostics(program);
|
|
116
|
+
const errors = diagnostics
|
|
117
|
+
.filter((d) => d.category === ts.DiagnosticCategory.Error)
|
|
118
|
+
.map((d) => {
|
|
119
|
+
const file = d.file?.fileName ?? "unknown";
|
|
120
|
+
const message = ts.flattenDiagnosticMessageText(d.messageText, "\n");
|
|
121
|
+
if (d.file && typeof d.start === "number") {
|
|
122
|
+
const p = toPos(ts, d.file, d.start);
|
|
123
|
+
return { file, message, line: p.line, column: p.column };
|
|
124
|
+
}
|
|
125
|
+
return { file, message };
|
|
126
|
+
});
|
|
127
|
+
return { isValid: errors.length === 0, errors };
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* UNSAFE: Evaluates code. Only call with trusted snippets.
|
|
131
|
+
*
|
|
132
|
+
* Loads a transpiled ESM module source via a data URL and returns its default export.
|
|
133
|
+
*/
|
|
134
|
+
export async function unsafeCreateRendererFunction(input) {
|
|
135
|
+
const encoded = encodeURIComponent(input.transpiledModuleSource);
|
|
136
|
+
const mod = await import(`data:text/javascript;charset=utf-8,${encoded}`);
|
|
137
|
+
return mod?.default;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Best-effort HTML rendering. If React is not installed, returns a string error.
|
|
141
|
+
* If the renderer returns a string, it is returned as-is.
|
|
142
|
+
*/
|
|
143
|
+
export async function renderRendererToHtml(input) {
|
|
144
|
+
const renderer = input.renderer;
|
|
145
|
+
const out = typeof renderer === "function" ? renderer(input.props) : renderer;
|
|
146
|
+
if (typeof out === "string")
|
|
147
|
+
return out;
|
|
148
|
+
let React;
|
|
149
|
+
let ReactDomServer;
|
|
150
|
+
try {
|
|
151
|
+
React = await import("react");
|
|
152
|
+
ReactDomServer = await import("react-dom/server");
|
|
153
|
+
}
|
|
154
|
+
catch (e) {
|
|
155
|
+
return `renderRendererToHtml requires react + react-dom/server: ${String(e?.message ?? e)}`;
|
|
156
|
+
}
|
|
157
|
+
if (out && typeof out === "object") {
|
|
158
|
+
// Assume it's a React element
|
|
159
|
+
return ReactDomServer.renderToStaticMarkup(out);
|
|
160
|
+
}
|
|
161
|
+
// As a fallback, treat renderer as a component and render it.
|
|
162
|
+
const el = React.createElement(renderer, input.props);
|
|
163
|
+
return ReactDomServer.renderToStaticMarkup(el);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/jsx/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CatalogItemRenderMap } from "../contracts/render-map.js";
|
|
2
|
+
import type { BuildCatalogItemMarkdownMapOptions, CatalogItemMarkdownMap } from "../contracts/markdown-map.js";
|
|
3
|
+
export declare function buildCatalogItemMarkdownMap(map: CatalogItemRenderMap, options?: BuildCatalogItemMarkdownMapOptions): CatalogItemMarkdownMap;
|
|
4
|
+
export declare function renderCatalogItemMarkdown(doc: CatalogItemMarkdownMap): string;
|
|
5
|
+
//# sourceMappingURL=render-item-markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-item-markdown.d.ts","sourceRoot":"","sources":["../../../src/markdown/render-item-markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EACV,kCAAkC,EAClC,sBAAsB,EAEvB,MAAM,8BAA8B,CAAC;AAatC,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,oBAAoB,EACzB,OAAO,CAAC,EAAE,kCAAkC,GAC3C,sBAAsB,CAqDxB;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,sBAAsB,GAAG,MAAM,CAoB7E"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
function toStringValue(v) {
|
|
2
|
+
if (v == null)
|
|
3
|
+
return "";
|
|
4
|
+
if (typeof v === "string")
|
|
5
|
+
return v;
|
|
6
|
+
if (typeof v === "number" || typeof v === "boolean")
|
|
7
|
+
return String(v);
|
|
8
|
+
try {
|
|
9
|
+
return JSON.stringify(v);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return String(v);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function buildCatalogItemMarkdownMap(map, options) {
|
|
16
|
+
const blocks = [
|
|
17
|
+
{ type: "heading", level: 1, text: map.item.title ?? `${map.catalogId}:${map.itemId}` },
|
|
18
|
+
{
|
|
19
|
+
type: "paragraph",
|
|
20
|
+
text: `CatalogId: ${map.catalogId} • ItemId: ${map.itemId} • Mode: ${map.context.mode}`,
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
const fieldPaths = map.presentation?.form?.sections?.flatMap((s) => s.fields.map((f) => f.fieldPath)) ??
|
|
24
|
+
map.presentation?.fields?.map((f) => f.fieldPath) ??
|
|
25
|
+
[];
|
|
26
|
+
const unique = Array.from(new Set(fieldPaths)).filter(Boolean);
|
|
27
|
+
const headers = ["field", "value"];
|
|
28
|
+
const rows = unique.map((fp) => [fp, toStringValue(map.item.data?.[fp] ?? "")]);
|
|
29
|
+
blocks.push({ type: "heading", level: 2, text: "Fields" });
|
|
30
|
+
blocks.push({ type: "table", headers, rows });
|
|
31
|
+
if (options?.includeReferences && map.references?.length) {
|
|
32
|
+
blocks.push({ type: "heading", level: 2, text: "References" });
|
|
33
|
+
blocks.push({
|
|
34
|
+
type: "table",
|
|
35
|
+
headers: ["relationType", "toCatalogId", "toItemId", "label"],
|
|
36
|
+
rows: map.references.map((r) => [
|
|
37
|
+
r.relationType,
|
|
38
|
+
r.toCatalogId,
|
|
39
|
+
r.toItemId,
|
|
40
|
+
r.label ?? "",
|
|
41
|
+
]),
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (options?.includeMetadata) {
|
|
45
|
+
blocks.push({ type: "heading", level: 2, text: "Metadata" });
|
|
46
|
+
blocks.push({
|
|
47
|
+
type: "code",
|
|
48
|
+
language: "json",
|
|
49
|
+
text: JSON.stringify({
|
|
50
|
+
context: map.context,
|
|
51
|
+
validation: map.validation,
|
|
52
|
+
}, null, 2),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return { title: map.item.title ?? `${map.catalogId}:${map.itemId}`, blocks };
|
|
56
|
+
}
|
|
57
|
+
export function renderCatalogItemMarkdown(doc) {
|
|
58
|
+
const out = [];
|
|
59
|
+
for (const b of doc.blocks) {
|
|
60
|
+
if (b.type === "heading")
|
|
61
|
+
out.push(`${"#".repeat(b.level)} ${b.text}`);
|
|
62
|
+
else if (b.type === "paragraph")
|
|
63
|
+
out.push(b.text);
|
|
64
|
+
else if (b.type === "list") {
|
|
65
|
+
const ordered = Boolean(b.ordered);
|
|
66
|
+
b.items.forEach((it, idx) => out.push(ordered ? `${idx + 1}. ${it}` : `- ${it}`));
|
|
67
|
+
}
|
|
68
|
+
else if (b.type === "code") {
|
|
69
|
+
out.push(`\`\`\`${b.language ?? ""}`.trimEnd());
|
|
70
|
+
out.push(b.text);
|
|
71
|
+
out.push("```");
|
|
72
|
+
}
|
|
73
|
+
else if (b.type === "table") {
|
|
74
|
+
out.push(`| ${b.headers.join(" | ")} |`);
|
|
75
|
+
out.push(`| ${b.headers.map(() => "---").join(" | ")} |`);
|
|
76
|
+
for (const r of b.rows)
|
|
77
|
+
out.push(`| ${r.join(" | ")} |`);
|
|
78
|
+
}
|
|
79
|
+
out.push("");
|
|
80
|
+
}
|
|
81
|
+
return out.join("\n").trimEnd() + "\n";
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=render-item-markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-item-markdown.js","sourceRoot":"","sources":["../../../src/markdown/render-item-markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CatalogListRenderMap } from "../contracts/render-map.js";
|
|
2
|
+
import type { BuildCatalogListMarkdownMapOptions, CatalogListMarkdownMap } from "../contracts/markdown-map.js";
|
|
3
|
+
export declare function buildCatalogListMarkdownMap(map: CatalogListRenderMap, options?: BuildCatalogListMarkdownMapOptions): CatalogListMarkdownMap;
|
|
4
|
+
export declare function renderCatalogListMarkdown(doc: CatalogListMarkdownMap): string;
|
|
5
|
+
//# sourceMappingURL=render-list-markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-list-markdown.d.ts","sourceRoot":"","sources":["../../../src/markdown/render-list-markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EACV,kCAAkC,EAClC,sBAAsB,EAEvB,MAAM,8BAA8B,CAAC;AAiBtC,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,oBAAoB,EACzB,OAAO,CAAC,EAAE,kCAAkC,GAC3C,sBAAsB,CAoDxB;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,sBAAsB,GAAG,MAAM,CAsB7E"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
function mdEscape(s) {
|
|
2
|
+
return s.replace(/\|/g, "\\|").replace(/\r?\n/g, " ");
|
|
3
|
+
}
|
|
4
|
+
function toStringValue(v) {
|
|
5
|
+
if (v == null)
|
|
6
|
+
return "";
|
|
7
|
+
if (typeof v === "string")
|
|
8
|
+
return v;
|
|
9
|
+
if (typeof v === "number" || typeof v === "boolean")
|
|
10
|
+
return String(v);
|
|
11
|
+
try {
|
|
12
|
+
return JSON.stringify(v);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return String(v);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function buildCatalogListMarkdownMap(map, options) {
|
|
19
|
+
const maxRows = options?.maxRows ?? 50;
|
|
20
|
+
const blocks = [
|
|
21
|
+
{ type: "heading", level: 1, text: map.label },
|
|
22
|
+
{
|
|
23
|
+
type: "paragraph",
|
|
24
|
+
text: `CatalogId: ${map.catalogId}${map.total != null ? ` • Total: ${map.total}` : ""}`,
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
const columns = map.presentation?.grid?.columns?.map((c) => c.fieldPath) ??
|
|
28
|
+
map.presentation?.fields?.slice(0, 8).map((f) => f.fieldPath) ??
|
|
29
|
+
[];
|
|
30
|
+
const headers = ["itemId", ...(columns.length ? columns : ["title", "subtitle", "status"])];
|
|
31
|
+
const rows = map.items.slice(0, maxRows).map((it) => {
|
|
32
|
+
const base = [it.itemId];
|
|
33
|
+
const fields = headers.slice(1).map((fp) => {
|
|
34
|
+
if (fp === "title")
|
|
35
|
+
return toStringValue(it.title);
|
|
36
|
+
if (fp === "subtitle")
|
|
37
|
+
return toStringValue(it.subtitle);
|
|
38
|
+
if (fp === "status")
|
|
39
|
+
return toStringValue(it.status);
|
|
40
|
+
const v = it.data?.[fp];
|
|
41
|
+
return toStringValue(v);
|
|
42
|
+
});
|
|
43
|
+
return [...base, ...fields].map((s) => mdEscape(String(s)));
|
|
44
|
+
});
|
|
45
|
+
blocks.push({ type: "heading", level: 2, text: "Items" });
|
|
46
|
+
blocks.push({ type: "table", headers, rows });
|
|
47
|
+
if (options?.includeMetadata) {
|
|
48
|
+
blocks.push({ type: "heading", level: 2, text: "Metadata" });
|
|
49
|
+
blocks.push({
|
|
50
|
+
type: "code",
|
|
51
|
+
language: "json",
|
|
52
|
+
text: JSON.stringify({
|
|
53
|
+
filters: map.filters?.active ?? {},
|
|
54
|
+
sort: map.sort,
|
|
55
|
+
selection: map.selection,
|
|
56
|
+
context: map.context,
|
|
57
|
+
}, null, 2),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return { title: map.label, blocks };
|
|
61
|
+
}
|
|
62
|
+
export function renderCatalogListMarkdown(doc) {
|
|
63
|
+
const out = [];
|
|
64
|
+
for (const b of doc.blocks) {
|
|
65
|
+
if (b.type === "heading")
|
|
66
|
+
out.push(`${"#".repeat(b.level)} ${b.text}`);
|
|
67
|
+
else if (b.type === "paragraph")
|
|
68
|
+
out.push(b.text);
|
|
69
|
+
else if (b.type === "list") {
|
|
70
|
+
const ordered = Boolean(b.ordered);
|
|
71
|
+
b.items.forEach((it, idx) => {
|
|
72
|
+
out.push(ordered ? `${idx + 1}. ${it}` : `- ${it}`);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
else if (b.type === "code") {
|
|
76
|
+
out.push(`\`\`\`${b.language ?? ""}`.trimEnd());
|
|
77
|
+
out.push(b.text);
|
|
78
|
+
out.push("```");
|
|
79
|
+
}
|
|
80
|
+
else if (b.type === "table") {
|
|
81
|
+
out.push(`| ${b.headers.join(" | ")} |`);
|
|
82
|
+
out.push(`| ${b.headers.map(() => "---").join(" | ")} |`);
|
|
83
|
+
for (const r of b.rows)
|
|
84
|
+
out.push(`| ${r.join(" | ")} |`);
|
|
85
|
+
}
|
|
86
|
+
out.push("");
|
|
87
|
+
}
|
|
88
|
+
return out.join("\n").trimEnd() + "\n";
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=render-list-markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-list-markdown.js","sourceRoot":"","sources":["../../../src/markdown/render-list-markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export { validateCatalogDescriptorUiSpec, validateCatalogFilterSpec, validateCatalogPresentationSpec, validateCatalogCustomRenderer, validateCatalogRendererSnippetRecord, validateCatalogListRenderMap, validateCatalogItemRenderMap, } from "./ui-spec-validate.js";
|
|
2
|
+
export type { UiSpecValidationError, UiSpecValidationResult } from "./ui-spec-validate.js";
|
|
3
|
+
export { fieldSourceSchema, catalogFilterSpecSchema, catalogPresentationSpecSchema, catalogCustomRendererSchema, catalogRendererSnippetRecordSchema, catalogListRenderMapSchema, catalogItemRenderMapSchema, } from "./ui-spec-schema.js";
|
|
2
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/validation/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,yBAAyB,EACzB,+BAA+B,EAC/B,6BAA6B,EAC7B,oCAAoC,EACpC,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE3F,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,6BAA6B,EAC7B,2BAA2B,EAC3B,kCAAkC,EAClC,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export {};
|
|
1
|
+
export { validateCatalogDescriptorUiSpec, validateCatalogFilterSpec, validateCatalogPresentationSpec, validateCatalogCustomRenderer, validateCatalogRendererSnippetRecord, validateCatalogListRenderMap, validateCatalogItemRenderMap, } from "./ui-spec-validate.js";
|
|
2
|
+
export { fieldSourceSchema, catalogFilterSpecSchema, catalogPresentationSpecSchema, catalogCustomRendererSchema, catalogRendererSnippetRecordSchema, catalogListRenderMapSchema, catalogItemRenderMapSchema, } from "./ui-spec-schema.js";
|
|
3
3
|
//# sourceMappingURL=index.js.map
|