@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.
Files changed (141) hide show
  1. package/README.md +424 -406
  2. package/dist/src/catalox/catalox.d.ts +38 -1
  3. package/dist/src/catalox/catalox.d.ts.map +1 -1
  4. package/dist/src/catalox/catalox.js +468 -5
  5. package/dist/src/catalox/catalox.js.map +1 -1
  6. package/dist/src/catalox/field-source-resolution.d.ts +16 -0
  7. package/dist/src/catalox/field-source-resolution.d.ts.map +1 -0
  8. package/dist/src/catalox/field-source-resolution.js +43 -0
  9. package/dist/src/catalox/field-source-resolution.js.map +1 -0
  10. package/dist/src/catalox/reporting/render-inventory-report.d.ts +3 -0
  11. package/dist/src/catalox/reporting/render-inventory-report.d.ts.map +1 -0
  12. package/dist/src/catalox/reporting/render-inventory-report.js +78 -0
  13. package/dist/src/catalox/reporting/render-inventory-report.js.map +1 -0
  14. package/dist/src/cli/index.d.ts +3 -0
  15. package/dist/src/cli/index.d.ts.map +1 -0
  16. package/dist/src/cli/index.js +267 -0
  17. package/dist/src/cli/index.js.map +1 -0
  18. package/dist/src/contracts/context.d.ts +7 -1
  19. package/dist/src/contracts/context.d.ts.map +1 -1
  20. package/dist/src/contracts/descriptors.d.ts +6 -0
  21. package/dist/src/contracts/descriptors.d.ts.map +1 -1
  22. package/dist/src/contracts/diagram-map.d.ts +24 -0
  23. package/dist/src/contracts/diagram-map.d.ts.map +1 -0
  24. package/dist/src/contracts/diagram-map.js +2 -0
  25. package/dist/src/contracts/diagram-map.js.map +1 -0
  26. package/dist/src/contracts/field-source.d.ts +43 -0
  27. package/dist/src/contracts/field-source.d.ts.map +1 -0
  28. package/dist/src/contracts/field-source.js +2 -0
  29. package/dist/src/contracts/field-source.js.map +1 -0
  30. package/dist/src/contracts/filters.d.ts +59 -0
  31. package/dist/src/contracts/filters.d.ts.map +1 -0
  32. package/dist/src/contracts/filters.js +2 -0
  33. package/dist/src/contracts/filters.js.map +1 -0
  34. package/dist/src/contracts/ids.d.ts +1 -0
  35. package/dist/src/contracts/ids.d.ts.map +1 -1
  36. package/dist/src/contracts/index.d.ts +12 -1
  37. package/dist/src/contracts/index.d.ts.map +1 -1
  38. package/dist/src/contracts/index.js.map +1 -1
  39. package/dist/src/contracts/inventory-export.d.ts +40 -0
  40. package/dist/src/contracts/inventory-export.d.ts.map +1 -0
  41. package/dist/src/contracts/inventory-export.js +2 -0
  42. package/dist/src/contracts/inventory-export.js.map +1 -0
  43. package/dist/src/contracts/inventory-report.d.ts +61 -0
  44. package/dist/src/contracts/inventory-report.d.ts.map +1 -0
  45. package/dist/src/contracts/inventory-report.js +2 -0
  46. package/dist/src/contracts/inventory-report.js.map +1 -0
  47. package/dist/src/contracts/items.d.ts +3 -0
  48. package/dist/src/contracts/items.d.ts.map +1 -1
  49. package/dist/src/contracts/markdown-map.d.ts +42 -0
  50. package/dist/src/contracts/markdown-map.d.ts.map +1 -0
  51. package/dist/src/contracts/markdown-map.js +2 -0
  52. package/dist/src/contracts/markdown-map.js.map +1 -0
  53. package/dist/src/contracts/presentation.d.ts +149 -0
  54. package/dist/src/contracts/presentation.d.ts.map +1 -0
  55. package/dist/src/contracts/presentation.js +2 -0
  56. package/dist/src/contracts/presentation.js.map +1 -0
  57. package/dist/src/contracts/render-map.d.ts +151 -0
  58. package/dist/src/contracts/render-map.d.ts.map +1 -0
  59. package/dist/src/contracts/render-map.js +2 -0
  60. package/dist/src/contracts/render-map.js.map +1 -0
  61. package/dist/src/contracts/renderer-snippets.d.ts +32 -0
  62. package/dist/src/contracts/renderer-snippets.d.ts.map +1 -0
  63. package/dist/src/contracts/renderer-snippets.js +2 -0
  64. package/dist/src/contracts/renderer-snippets.js.map +1 -0
  65. package/dist/src/contracts/snapshots.d.ts +12 -0
  66. package/dist/src/contracts/snapshots.d.ts.map +1 -0
  67. package/dist/src/contracts/snapshots.js +2 -0
  68. package/dist/src/contracts/snapshots.js.map +1 -0
  69. package/dist/src/contracts/stores.d.ts +21 -0
  70. package/dist/src/contracts/stores.d.ts.map +1 -0
  71. package/dist/src/contracts/stores.js +2 -0
  72. package/dist/src/contracts/stores.js.map +1 -0
  73. package/dist/src/diagrams/render-catalog-diagram.d.ts +3 -0
  74. package/dist/src/diagrams/render-catalog-diagram.d.ts.map +1 -0
  75. package/dist/src/diagrams/render-catalog-diagram.js +27 -0
  76. package/dist/src/diagrams/render-catalog-diagram.js.map +1 -0
  77. package/dist/src/diagrams/render-item-diagram.d.ts +3 -0
  78. package/dist/src/diagrams/render-item-diagram.d.ts.map +1 -0
  79. package/dist/src/diagrams/render-item-diagram.js +26 -0
  80. package/dist/src/diagrams/render-item-diagram.js.map +1 -0
  81. package/dist/src/firebase/index.d.ts +2 -0
  82. package/dist/src/firebase/index.d.ts.map +1 -1
  83. package/dist/src/firebase/index.js +2 -0
  84. package/dist/src/firebase/index.js.map +1 -1
  85. package/dist/src/firebase/renderer-snippet-store.d.ts +12 -0
  86. package/dist/src/firebase/renderer-snippet-store.d.ts.map +1 -0
  87. package/dist/src/firebase/renderer-snippet-store.js +21 -0
  88. package/dist/src/firebase/renderer-snippet-store.js.map +1 -0
  89. package/dist/src/firebase/snapshot-store.d.ts +7 -0
  90. package/dist/src/firebase/snapshot-store.d.ts.map +1 -1
  91. package/dist/src/firebase/snapshot-store.js +30 -0
  92. package/dist/src/firebase/snapshot-store.js.map +1 -1
  93. package/dist/src/firebase/store-app-binding-store.d.ts +14 -0
  94. package/dist/src/firebase/store-app-binding-store.d.ts.map +1 -0
  95. package/dist/src/firebase/store-app-binding-store.js +36 -0
  96. package/dist/src/firebase/store-app-binding-store.js.map +1 -0
  97. package/dist/src/index.d.ts +5 -0
  98. package/dist/src/index.d.ts.map +1 -1
  99. package/dist/src/index.js +5 -0
  100. package/dist/src/index.js.map +1 -1
  101. package/dist/src/jsx/index.d.ts +66 -0
  102. package/dist/src/jsx/index.d.ts.map +1 -0
  103. package/dist/src/jsx/index.js +165 -0
  104. package/dist/src/jsx/index.js.map +1 -0
  105. package/dist/src/markdown/render-item-markdown.d.ts +5 -0
  106. package/dist/src/markdown/render-item-markdown.d.ts.map +1 -0
  107. package/dist/src/markdown/render-item-markdown.js +83 -0
  108. package/dist/src/markdown/render-item-markdown.js.map +1 -0
  109. package/dist/src/markdown/render-list-markdown.d.ts +5 -0
  110. package/dist/src/markdown/render-list-markdown.d.ts.map +1 -0
  111. package/dist/src/markdown/render-list-markdown.js +90 -0
  112. package/dist/src/markdown/render-list-markdown.js.map +1 -0
  113. package/dist/src/validation/index.d.ts +3 -1
  114. package/dist/src/validation/index.d.ts.map +1 -1
  115. package/dist/src/validation/index.js +2 -2
  116. package/dist/src/validation/index.js.map +1 -1
  117. package/dist/src/validation/ui-spec-schema.d.ts +20 -0
  118. package/dist/src/validation/ui-spec-schema.d.ts.map +1 -0
  119. package/dist/src/validation/ui-spec-schema.js +605 -0
  120. package/dist/src/validation/ui-spec-schema.js.map +1 -0
  121. package/dist/src/validation/ui-spec-validate.d.ts +20 -0
  122. package/dist/src/validation/ui-spec-validate.d.ts.map +1 -0
  123. package/dist/src/validation/ui-spec-validate.js +73 -0
  124. package/dist/src/validation/ui-spec-validate.js.map +1 -0
  125. package/dist/test/unit/field-source-resolution.test.d.ts +2 -0
  126. package/dist/test/unit/field-source-resolution.test.d.ts.map +1 -0
  127. package/dist/test/unit/field-source-resolution.test.js +45 -0
  128. package/dist/test/unit/field-source-resolution.test.js.map +1 -0
  129. package/dist/test/unit/jsx-snippets.test.d.ts +2 -0
  130. package/dist/test/unit/jsx-snippets.test.d.ts.map +1 -0
  131. package/dist/test/unit/jsx-snippets.test.js +35 -0
  132. package/dist/test/unit/jsx-snippets.test.js.map +1 -0
  133. package/dist/test/unit/markdown-and-diagrams.test.d.ts +2 -0
  134. package/dist/test/unit/markdown-and-diagrams.test.d.ts.map +1 -0
  135. package/dist/test/unit/markdown-and-diagrams.test.js +62 -0
  136. package/dist/test/unit/markdown-and-diagrams.test.js.map +1 -0
  137. package/dist/test/unit/ui-spec-validation.test.d.ts +2 -0
  138. package/dist/test/unit/ui-spec-validation.test.d.ts.map +1 -0
  139. package/dist/test/unit/ui-spec-validation.test.js +90 -0
  140. package/dist/test/unit/ui-spec-validation.test.js.map +1 -0
  141. 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":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,KAAqB;QAArB,UAAK,GAAL,KAAK,CAAgB;IAAG,CAAC;IAE9C,UAAU,CAAC,SAAoB,EAAE,MAAc;QACrD,OAAO,IAAI,CAAC,KAAK;aACd,UAAU,CAAC,kBAAkB,CAAC;aAC9B,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;aACtB,UAAU,CAAC,OAAO,CAAC;aACnB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,GAAG,CACP,SAAoB,EACpB,MAAc;QAEd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,IAAI,EAAgC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAoB,EAAE,MAAiC;QAClE,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC;CACF"}
1
+ {"version":3,"file":"snapshot-store.js","sourceRoot":"","sources":["../../../src/firebase/snapshot-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,KAAqB;QAArB,UAAK,GAAL,KAAK,CAAgB;IAAG,CAAC;IAE9C,UAAU,CAAC,SAAoB,EAAE,MAAc;QACrD,OAAO,IAAI,CAAC,KAAK;aACd,UAAU,CAAC,kBAAkB,CAAC;aAC9B,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;aACtB,UAAU,CAAC,OAAO,CAAC;aACnB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACzB,CAAC;IAEO,SAAS,CAAC,SAAoB,EAAE,KAAa;QACnD,OAAO,IAAI,CAAC,KAAK;aACd,UAAU,CAAC,kBAAkB,CAAC;aAC9B,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;aACtB,UAAU,CAAC,MAAM,CAAC;aAClB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACxB,CAAC;IAEO,aAAa,CAAC,SAAoB,EAAE,KAAa,EAAE,MAAc;QACvE,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,GAAG,CACP,SAAoB,EACpB,MAAc;QAEd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,IAAI,EAAgC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAoB,EAAE,MAAiC;QAClE,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAoB,EAAE,GAA6B;QACjE,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAoB,EAAE,KAAK,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK;aAC1B,UAAU,CAAC,kBAAkB,CAAC;aAC9B,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;aACtB,UAAU,CAAC,MAAM,CAAC;aAClB,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;aAC5B,KAAK,CAAC,KAAK,CAAC;aACZ,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAA8B,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAoB,EAAE,KAAa,EAAE,MAAiC;QACxF,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAoB,EAAE,KAAa;QACpD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9E,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAA+B,CAAC,CAAC;IACrE,CAAC;CACF"}
@@ -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"}
@@ -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
@@ -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
@@ -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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAiBpC,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,KAAsC;IACrF,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,aAAa,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE;QAC9C,MAAM,EAAE,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;QAC7C,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,QAAQ;QACnB,UAAU,EAAE,cAAc;KAC3B,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AA2BD,SAAS,KAAK,CAAC,EAAO,EAAE,EAAO,EAAE,KAAa;IAC5C,MAAM,GAAG,GAAG,EAAE,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,KAAsC;IAEtC,IAAI,EAAO,CAAC;IACZ,IAAI,CAAC;QACH,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,0DAA0D,MAAM,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;aAC5H,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,0BAA0B,EAAE,EAAE,CAAC;IACxF,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,8FAA8F;IAC9F,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,GAAG,GAAG,sBAAsB,CAAC;IAChD,MAAM,WAAW,GAAG,GAAG,UAAU,cAAc,CAAC;IAChD,MAAM,SAAS,GAAG,GAAG,UAAU,WAAW,CAAC;IAC3C,MAAM,YAAY,GAAG,GAAG,UAAU,WAAW,CAAC;IAC9C,MAAM,aAAa,GAAG,GAAG,GAAG,8BAA8B,CAAC;IAE3D,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAG;;;;;;CAMlB,CAAC;IAEA,MAAM,WAAW,GAAG;;;;;;;;;;IAWlB,OAAO,KAAK,MAAM;QAChB,CAAC,CAAC,8FAA8F;QAChG,CAAC,CAAC,8FACN;;;;;CAKD,CAAC;IAEA,MAAM,KAAK,GAAG,IAAI,GAAG,CAAiB;QACpC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QACpC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;QAC9B,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC;KAC/B,CAAC,CAAC;IAEH,MAAM,eAAe,GAAQ;QAC3B,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM;QAC5B,gBAAgB,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO;QACjD,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;QAC9B,8EAA8E;QAC9E,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ;QACxB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,IAAI;QAClB,KAAK,EAAE,EAAE;KACV,CAAC;IAEF,MAAM,WAAW,GAAG,EAAE,CAAC,kBAAkB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAQ;QAChB,GAAG,WAAW;QACd,UAAU,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC/F,QAAQ,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC3F,aAAa,EAAE,CAAC,QAAgB,EAAE,eAAoB,EAAE,EAAE;YACxD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvC,IAAI,IAAI,IAAI,IAAI;gBAAE,OAAO,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;YACpF,OAAO,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC9D,CAAC;QACD,mBAAmB,EAAE,GAAG,EAAE,CAAC,UAAU;QACrC,oBAAoB,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC;QACtC,yBAAyB,EAAE,GAAG,EAAE,CAAC,IAAI;QACrC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI;QACtB,kBAAkB,EAAE,CAAC,WAAqB,EAAE,cAAsB,EAAE,EAAE;YACpE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC3B,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,eAAe,IAAI,CAAC,KAAK,cAAc,EAAE,CAAC;oBACvE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;gBACxE,CAAC;gBACD,IAAI,CAAC,KAAK,4BAA4B,IAAI,CAAC,KAAK,4BAA4B,EAAE,CAAC;oBAC7E,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;gBACzE,CAAC;gBACD,+CAA+C;gBAC/C,MAAM,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;gBAClF,OAAO,GAAG,CAAC,cAAc,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;IAEF,sFAAsF;IACtF,kFAAkF;IAClF,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IAChG,MAAM,WAAW,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAsC,WAAW;SAC1D,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC;SAC9D,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;QACd,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAI,SAAS,CAAC;QAC3C,MAAM,OAAO,GAAG,EAAE,CAAC,4BAA4B,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3D,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEL,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAClD,CAAC;AAMD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,KAAwC;IAExC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACjE,MAAM,GAAG,GAAQ,MAAM,MAAM,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;IAC/E,OAAO,GAAG,EAAE,OAAY,CAAC;AAC3B,CAAC;AAWD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAwB;IACjE,MAAM,QAAQ,GAAQ,KAAK,CAAC,QAAQ,CAAC;IACrC,MAAM,GAAG,GAAG,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC9E,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IAExC,IAAI,KAAU,CAAC;IACf,IAAI,cAAmB,CAAC;IACxB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,cAAc,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,2DAA2D,MAAM,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC;IAC9F,CAAC;IAED,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,8BAA8B;QAC9B,OAAO,cAAc,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,8DAA8D;IAC9D,MAAM,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACtD,OAAO,cAAc,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;AACjD,CAAC"}
@@ -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":"AACA,OAAO,EAAE,CAAC"}
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
- // Validation utilities will live here.
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