@exellix/catalox-graphs 1.2.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 +76 -0
- package/dist/browser/catalox-api-client.d.ts +119 -0
- package/dist/browser/catalox-api-client.d.ts.map +1 -0
- package/dist/browser/catalox-api-client.js +53 -0
- package/dist/browser/catalox-api-client.js.map +1 -0
- package/dist/client/catalox-api.d.ts +29 -0
- package/dist/client/catalox-api.d.ts.map +1 -0
- package/dist/client/catalox-api.js +97 -0
- package/dist/client/catalox-api.js.map +1 -0
- package/dist/client/catalox-runtime.d.ts +4 -0
- package/dist/client/catalox-runtime.d.ts.map +1 -0
- package/dist/client/catalox-runtime.js +32 -0
- package/dist/client/catalox-runtime.js.map +1 -0
- package/dist/config/catalog-ids.d.ts +12 -0
- package/dist/config/catalog-ids.d.ts.map +1 -0
- package/dist/config/catalog-ids.js +11 -0
- package/dist/config/catalog-ids.js.map +1 -0
- package/dist/config/catalox-context-from-env.d.ts +13 -0
- package/dist/config/catalox-context-from-env.d.ts.map +1 -0
- package/dist/config/catalox-context-from-env.js +25 -0
- package/dist/config/catalox-context-from-env.js.map +1 -0
- package/dist/http/register-routes.d.ts +6 -0
- package/dist/http/register-routes.d.ts.map +1 -0
- package/dist/http/register-routes.js +288 -0
- package/dist/http/register-routes.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/react/CataloxGraphPicker.d.ts +21 -0
- package/dist/react/CataloxGraphPicker.d.ts.map +1 -0
- package/dist/react/CataloxGraphPicker.js +97 -0
- package/dist/react/CataloxGraphPicker.js.map +1 -0
- package/dist/react/index.d.ts +4 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +4 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/useCataloxGraphs.d.ts +17 -0
- package/dist/react/useCataloxGraphs.d.ts.map +1 -0
- package/dist/react/useCataloxGraphs.js +56 -0
- package/dist/react/useCataloxGraphs.js.map +1 -0
- package/dist/readiness.d.ts +8 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +38 -0
- package/dist/readiness.js.map +1 -0
- package/dist/stores/concept-store.d.ts +16 -0
- package/dist/stores/concept-store.d.ts.map +1 -0
- package/dist/stores/concept-store.js +28 -0
- package/dist/stores/concept-store.js.map +1 -0
- package/dist/stores/graph-project-build.d.ts +15 -0
- package/dist/stores/graph-project-build.d.ts.map +1 -0
- package/dist/stores/graph-project-build.js +71 -0
- package/dist/stores/graph-project-build.js.map +1 -0
- package/dist/stores/graph-store.d.ts +43 -0
- package/dist/stores/graph-store.d.ts.map +1 -0
- package/dist/stores/graph-store.js +92 -0
- package/dist/stores/graph-store.js.map +1 -0
- package/dist/stores/graph-template-store.d.ts +28 -0
- package/dist/stores/graph-template-store.d.ts.map +1 -0
- package/dist/stores/graph-template-store.js +63 -0
- package/dist/stores/graph-template-store.js.map +1 -0
- package/dist/stores/graph-version-store.d.ts +31 -0
- package/dist/stores/graph-version-store.d.ts.map +1 -0
- package/dist/stores/graph-version-store.js +108 -0
- package/dist/stores/graph-version-store.js.map +1 -0
- package/dist/types/graph-project.d.ts +52 -0
- package/dist/types/graph-project.d.ts.map +1 -0
- package/dist/types/graph-project.js +2 -0
- package/dist/types/graph-project.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { cataloxContextFromEnv, hasFirebaseCredentials, readCataloxAppId, } from './config/catalox-context-from-env.js';
|
|
2
|
+
import { getCataloxBound, resetCataloxRuntimeCache } from './client/catalox-runtime.js';
|
|
3
|
+
let cachedStatus = null;
|
|
4
|
+
const CACHE_MS = 30_000;
|
|
5
|
+
export function invalidateCataloxReadyCache() {
|
|
6
|
+
cachedStatus = null;
|
|
7
|
+
resetCataloxRuntimeCache();
|
|
8
|
+
}
|
|
9
|
+
export async function probeCataloxReady(processEnv = process.env) {
|
|
10
|
+
const now = Date.now();
|
|
11
|
+
if (cachedStatus && now - cachedStatus.at < CACHE_MS) {
|
|
12
|
+
return cachedStatus.status;
|
|
13
|
+
}
|
|
14
|
+
const appId = readCataloxAppId(processEnv);
|
|
15
|
+
if (!appId) {
|
|
16
|
+
const status = { ok: false, reason: 'CATALOX_APP_ID missing' };
|
|
17
|
+
cachedStatus = { at: now, status };
|
|
18
|
+
return status;
|
|
19
|
+
}
|
|
20
|
+
if (!hasFirebaseCredentials(processEnv)) {
|
|
21
|
+
const status = { ok: false, appId, reason: 'Firebase service account missing' };
|
|
22
|
+
cachedStatus = { at: now, status };
|
|
23
|
+
return status;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
void cataloxContextFromEnv(processEnv);
|
|
27
|
+
await getCataloxBound();
|
|
28
|
+
const status = { ok: true, appId };
|
|
29
|
+
cachedStatus = { at: now, status };
|
|
30
|
+
return status;
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
const status = { ok: false, appId, reason: String(err) };
|
|
34
|
+
cachedStatus = { at: now, status };
|
|
35
|
+
return status;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=readiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readiness.js","sourceRoot":"","sources":["../src/readiness.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAQxF,IAAI,YAAY,GAAsD,IAAI,CAAC;AAC3E,MAAM,QAAQ,GAAG,MAAM,CAAC;AAExB,MAAM,UAAU,2BAA2B;IACzC,YAAY,GAAG,IAAI,CAAC;IACpB,wBAAwB,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,aAAgC,OAAO,CAAC,GAAG;IAE3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,YAAY,IAAI,GAAG,GAAG,YAAY,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;QACrD,OAAO,YAAY,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;QAC/D,YAAY,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kCAAkC,EAAE,CAAC;QAChF,YAAY,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC;QACH,KAAK,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,eAAe,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACnC,YAAY,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,YAAY,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare function loadConceptFromCatalox(graphId: string): Promise<{
|
|
2
|
+
ok: boolean;
|
|
3
|
+
concept?: Record<string, unknown>;
|
|
4
|
+
error?: string;
|
|
5
|
+
}>;
|
|
6
|
+
export declare function saveConceptToCatalox(graphId: string, concept: Record<string, unknown>, options?: {
|
|
7
|
+
title?: string;
|
|
8
|
+
}): Promise<{
|
|
9
|
+
ok: boolean;
|
|
10
|
+
error?: string;
|
|
11
|
+
}>;
|
|
12
|
+
export declare function deleteConceptFromCatalox(graphId: string): Promise<{
|
|
13
|
+
ok: boolean;
|
|
14
|
+
error?: string;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=concept-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concept-store.d.ts","sourceRoot":"","sources":["../../src/stores/concept-store.ts"],"names":[],"mappings":"AAKA,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAS7E;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ1C;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAE1C"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { CATALOG_IDS } from '../config/catalog-ids.js';
|
|
2
|
+
import { getCatalogItem, upsertCatalogItem, deleteCatalogItem } from '../client/catalox-api.js';
|
|
3
|
+
const CONCEPTS_CATALOG = CATALOG_IDS.graphConcepts;
|
|
4
|
+
export async function loadConceptFromCatalox(graphId) {
|
|
5
|
+
const out = await getCatalogItem(CONCEPTS_CATALOG, graphId);
|
|
6
|
+
if (!out.ok || !out.item)
|
|
7
|
+
return { ok: false, error: out.error ?? 'not found' };
|
|
8
|
+
const data = out.item.data ?? {};
|
|
9
|
+
const concept = data.concept ?? data;
|
|
10
|
+
if (!concept || typeof concept !== 'object') {
|
|
11
|
+
return { ok: false, error: 'concept row has no payload' };
|
|
12
|
+
}
|
|
13
|
+
return { ok: true, concept: concept };
|
|
14
|
+
}
|
|
15
|
+
export async function saveConceptToCatalox(graphId, concept, options = {}) {
|
|
16
|
+
const out = await upsertCatalogItem(CONCEPTS_CATALOG, {
|
|
17
|
+
itemId: graphId,
|
|
18
|
+
title: options.title ?? graphId,
|
|
19
|
+
data: { graphId, concept },
|
|
20
|
+
});
|
|
21
|
+
if (!out.ok)
|
|
22
|
+
return { ok: false, error: out.error };
|
|
23
|
+
return { ok: true };
|
|
24
|
+
}
|
|
25
|
+
export async function deleteConceptFromCatalox(graphId) {
|
|
26
|
+
return deleteCatalogItem(CONCEPTS_CATALOG, graphId);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=concept-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concept-store.js","sourceRoot":"","sources":["../../src/stores/concept-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEhG,MAAM,gBAAgB,GAAG,WAAW,CAAC,aAAa,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAe;IAEf,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,WAAW,EAAE,CAAC;IAChF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IACrC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAkC,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAe,EACf,OAAgC,EAChC,UAA8B,EAAE;IAEhC,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,gBAAgB,EAAE;QACpD,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO;QAC/B,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;KAC3B,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;IACpD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAe;IAEf,OAAO,iBAAiB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { UnifiedCatalogItem } from '@x12i/catalox/embedder';
|
|
2
|
+
import type { GraphProjectDocument, GraphProjectSummary, SaveGraphOptions } from '../types/graph-project.js';
|
|
3
|
+
export declare function graphProjectSummaryFromItem(item: UnifiedCatalogItem): GraphProjectSummary;
|
|
4
|
+
export declare function buildGraphProjectDocument(graph: Record<string, unknown>, options: SaveGraphOptions & {
|
|
5
|
+
graphId: string;
|
|
6
|
+
}): GraphProjectDocument;
|
|
7
|
+
export declare function graphToCatalogPayload(graph: Record<string, unknown>, options?: SaveGraphOptions): {
|
|
8
|
+
itemId: string;
|
|
9
|
+
data: GraphProjectDocument;
|
|
10
|
+
};
|
|
11
|
+
export declare function readGraphFromProjectData(itemData: Record<string, unknown>): Record<string, unknown> | null;
|
|
12
|
+
export declare function readGraphIdFromProjectData(itemData: Record<string, unknown>, itemId: string): string;
|
|
13
|
+
/** Graph document version (`version` or `metadata.version`). Same semantics as graph-engine `readGraphDocumentVersion`. */
|
|
14
|
+
export declare function readGraphDocumentVersion(graphDoc: unknown): string | undefined;
|
|
15
|
+
//# sourceMappingURL=graph-project-build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-project-build.d.ts","sourceRoot":"","sources":["../../src/stores/graph-project-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAW7G,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,kBAAkB,GAAG,mBAAmB,CAezF;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,gBAAgB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAC9C,oBAAoB,CAoBtB;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,GAAE,gBAAqB,GAC7B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,oBAAoB,CAAA;CAAE,CAShD;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAIhC;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpG;AAED,2HAA2H;AAC3H,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAO9E"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
function pickStr(value) {
|
|
2
|
+
return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;
|
|
3
|
+
}
|
|
4
|
+
function asRecord(value) {
|
|
5
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
6
|
+
return null;
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
export function graphProjectSummaryFromItem(item) {
|
|
10
|
+
const data = item.data ?? {};
|
|
11
|
+
const graphId = pickStr(data.graphId) ??
|
|
12
|
+
pickStr(data.id) ??
|
|
13
|
+
String(item.itemId);
|
|
14
|
+
const title = pickStr(data.title) ??
|
|
15
|
+
item.title ??
|
|
16
|
+
graphId;
|
|
17
|
+
const updatedAt = pickStr(data.updatedAt) ??
|
|
18
|
+
pickStr(item.metadata?.updatedAt);
|
|
19
|
+
const status = pickStr(data.status);
|
|
20
|
+
return { itemId: String(item.itemId), graphId, title, updatedAt, status };
|
|
21
|
+
}
|
|
22
|
+
export function buildGraphProjectDocument(graph, options) {
|
|
23
|
+
const now = new Date().toISOString();
|
|
24
|
+
const metadata = asRecord(graph.metadata);
|
|
25
|
+
const title = options.title ??
|
|
26
|
+
pickStr(metadata?.name) ??
|
|
27
|
+
pickStr(graph.name) ??
|
|
28
|
+
options.graphId;
|
|
29
|
+
const project = {
|
|
30
|
+
graph,
|
|
31
|
+
graphId: options.graphId,
|
|
32
|
+
title,
|
|
33
|
+
updatedAt: now,
|
|
34
|
+
formatVersion: '1',
|
|
35
|
+
status: options.status ?? pickStr(metadata?.status) ?? 'draft',
|
|
36
|
+
};
|
|
37
|
+
if (options.concept && typeof options.concept === 'object') {
|
|
38
|
+
project.concept = options.concept;
|
|
39
|
+
}
|
|
40
|
+
return project;
|
|
41
|
+
}
|
|
42
|
+
export function graphToCatalogPayload(graph, options = {}) {
|
|
43
|
+
const metadata = asRecord(graph.metadata);
|
|
44
|
+
const graphId = pickStr(graph.id) ??
|
|
45
|
+
pickStr(metadata?.id) ??
|
|
46
|
+
pickStr(options.conceptName) ??
|
|
47
|
+
`graph-${Date.now()}`;
|
|
48
|
+
const project = buildGraphProjectDocument(graph, { ...options, graphId });
|
|
49
|
+
return { itemId: graphId, data: project };
|
|
50
|
+
}
|
|
51
|
+
export function readGraphFromProjectData(itemData) {
|
|
52
|
+
const graph = itemData.graph;
|
|
53
|
+
if (!graph || typeof graph !== 'object' || Array.isArray(graph))
|
|
54
|
+
return null;
|
|
55
|
+
return graph;
|
|
56
|
+
}
|
|
57
|
+
export function readGraphIdFromProjectData(itemData, itemId) {
|
|
58
|
+
return pickStr(itemData.graphId) ?? itemId;
|
|
59
|
+
}
|
|
60
|
+
/** Graph document version (`version` or `metadata.version`). Same semantics as graph-engine `readGraphDocumentVersion`. */
|
|
61
|
+
export function readGraphDocumentVersion(graphDoc) {
|
|
62
|
+
const graph = asRecord(graphDoc);
|
|
63
|
+
if (!graph)
|
|
64
|
+
return undefined;
|
|
65
|
+
const topLevel = pickStr(graph.version);
|
|
66
|
+
if (topLevel)
|
|
67
|
+
return topLevel;
|
|
68
|
+
const metadata = asRecord(graph.metadata);
|
|
69
|
+
return pickStr(metadata?.version);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=graph-project-build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-project-build.js","sourceRoot":"","sources":["../../src/stores/graph-project-build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { CataloxBound } from '@x12i/catalox/embedder';
|
|
2
|
+
import type { LoadGraphResult, SaveGraphOptions } from '../types/graph-project.js';
|
|
3
|
+
export { graphProjectSummaryFromItem, buildGraphProjectDocument, graphToCatalogPayload, } from './graph-project-build.js';
|
|
4
|
+
export type GraphProjectSummary = import('../types/graph-project.js').GraphProjectSummary;
|
|
5
|
+
export declare function listGraphsFromCatalox(options?: {
|
|
6
|
+
limit?: number;
|
|
7
|
+
bound?: CataloxBound;
|
|
8
|
+
}): Promise<{
|
|
9
|
+
ok: boolean;
|
|
10
|
+
graphs: GraphProjectSummary[];
|
|
11
|
+
error?: string;
|
|
12
|
+
}>;
|
|
13
|
+
export declare function loadGraphFromCatalox(itemId: string, options?: {
|
|
14
|
+
bound?: CataloxBound;
|
|
15
|
+
}): Promise<LoadGraphResult>;
|
|
16
|
+
export declare function saveGraphToCatalox(graph: Record<string, unknown>, options?: SaveGraphOptions): Promise<{
|
|
17
|
+
ok: boolean;
|
|
18
|
+
itemId?: string;
|
|
19
|
+
error?: string;
|
|
20
|
+
}>;
|
|
21
|
+
export declare function deleteGraphFromCatalox(itemId: string): Promise<{
|
|
22
|
+
ok: boolean;
|
|
23
|
+
error?: string;
|
|
24
|
+
}>;
|
|
25
|
+
export type CompatibleGraphFromCatalox = {
|
|
26
|
+
graphId: string;
|
|
27
|
+
itemId: string;
|
|
28
|
+
title: string;
|
|
29
|
+
graphVersion?: string;
|
|
30
|
+
};
|
|
31
|
+
export declare function listCompatibleGraphsFromCatalox(options: {
|
|
32
|
+
entityName?: string;
|
|
33
|
+
contentType?: string;
|
|
34
|
+
limit?: number;
|
|
35
|
+
bound?: CataloxBound;
|
|
36
|
+
}): Promise<{
|
|
37
|
+
ok: boolean;
|
|
38
|
+
graphs: CompatibleGraphFromCatalox[];
|
|
39
|
+
totalListed: number;
|
|
40
|
+
filtered: boolean;
|
|
41
|
+
error?: string;
|
|
42
|
+
}>;
|
|
43
|
+
//# sourceMappingURL=graph-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-store.d.ts","sourceRoot":"","sources":["../../src/stores/graph-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAU3D,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAEnF,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAIlC,MAAM,MAAM,mBAAmB,GAAG,OAAO,2BAA2B,EAAE,mBAAmB,CAAC;AAE1F,wBAAsB,qBAAqB,CACzC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,YAAY,CAAA;CAAO,GACrD,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CASzE;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,YAAY,CAAA;CAAO,GACrC,OAAO,CAAC,eAAe,CAAC,CA4B1B;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAS3D;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAE1C;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAsB,+BAA+B,CAAC,OAAO,EAAE;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB,GAAG,OAAO,CAAC;IACV,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,0BAA0B,EAAE,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAwCD"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { CATALOG_IDS, DEFAULT_LIST_LIMIT } from '../config/catalog-ids.js';
|
|
2
|
+
import { getCatalogItem, getCatalogItemByField, listCatalogItems, upsertCatalogItem, deleteCatalogItem } from '../client/catalox-api.js';
|
|
3
|
+
import { graphProjectSummaryFromItem, graphToCatalogPayload, readGraphDocumentVersion, readGraphFromProjectData, readGraphIdFromProjectData, } from './graph-project-build.js';
|
|
4
|
+
export { graphProjectSummaryFromItem, buildGraphProjectDocument, graphToCatalogPayload, } from './graph-project-build.js';
|
|
5
|
+
const GRAPHS_CATALOG = CATALOG_IDS.graphs;
|
|
6
|
+
export async function listGraphsFromCatalox(options = {}) {
|
|
7
|
+
const out = await listCatalogItems(GRAPHS_CATALOG, { limit: options.limit ?? DEFAULT_LIST_LIMIT, bound: options.bound });
|
|
8
|
+
if (!out.ok)
|
|
9
|
+
return { ok: false, graphs: [], error: out.error };
|
|
10
|
+
return {
|
|
11
|
+
ok: true,
|
|
12
|
+
graphs: out.items.map(graphProjectSummaryFromItem).sort((a, b) => (b.updatedAt ?? '').localeCompare(a.updatedAt ?? '')),
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export async function loadGraphFromCatalox(itemId, options = {}) {
|
|
16
|
+
let out = await getCatalogItem(GRAPHS_CATALOG, itemId, options.bound);
|
|
17
|
+
if (!out.ok) {
|
|
18
|
+
out = await getCatalogItemByField(GRAPHS_CATALOG, 'data.graphId', itemId, options.bound);
|
|
19
|
+
}
|
|
20
|
+
if (!out.ok || !out.item)
|
|
21
|
+
return { ok: false, error: out.error ?? 'not found' };
|
|
22
|
+
const itemData = out.item.data ?? {};
|
|
23
|
+
const graph = readGraphFromProjectData(itemData);
|
|
24
|
+
if (!graph) {
|
|
25
|
+
return { ok: false, error: 'Catalox item has no graph payload.' };
|
|
26
|
+
}
|
|
27
|
+
const graphId = readGraphIdFromProjectData(itemData, itemId);
|
|
28
|
+
const concept = itemData.concept && typeof itemData.concept === 'object' && !Array.isArray(itemData.concept)
|
|
29
|
+
? itemData.concept
|
|
30
|
+
: undefined;
|
|
31
|
+
return {
|
|
32
|
+
ok: true,
|
|
33
|
+
graph,
|
|
34
|
+
graphId,
|
|
35
|
+
concept,
|
|
36
|
+
item: out.item,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export async function saveGraphToCatalox(graph, options = {}) {
|
|
40
|
+
const payload = graphToCatalogPayload(graph, options);
|
|
41
|
+
const out = await upsertCatalogItem(GRAPHS_CATALOG, {
|
|
42
|
+
itemId: payload.itemId,
|
|
43
|
+
data: payload.data,
|
|
44
|
+
title: payload.data.title,
|
|
45
|
+
});
|
|
46
|
+
if (!out.ok)
|
|
47
|
+
return { ok: false, error: out.error };
|
|
48
|
+
return { ok: true, itemId: payload.itemId };
|
|
49
|
+
}
|
|
50
|
+
export async function deleteGraphFromCatalox(itemId) {
|
|
51
|
+
return deleteCatalogItem(GRAPHS_CATALOG, itemId);
|
|
52
|
+
}
|
|
53
|
+
export async function listCompatibleGraphsFromCatalox(options) {
|
|
54
|
+
const listed = await listGraphsFromCatalox({ limit: options.limit, bound: options.bound });
|
|
55
|
+
if (!listed.ok) {
|
|
56
|
+
return {
|
|
57
|
+
ok: false,
|
|
58
|
+
graphs: [],
|
|
59
|
+
totalListed: 0,
|
|
60
|
+
filtered: false,
|
|
61
|
+
error: listed.error,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const graphs = [];
|
|
65
|
+
for (const summary of listed.graphs) {
|
|
66
|
+
try {
|
|
67
|
+
const loaded = await loadGraphFromCatalox(summary.itemId, { bound: options.bound });
|
|
68
|
+
if (!loaded.ok)
|
|
69
|
+
continue;
|
|
70
|
+
graphs.push({
|
|
71
|
+
graphId: summary.graphId,
|
|
72
|
+
itemId: summary.itemId,
|
|
73
|
+
title: summary.title,
|
|
74
|
+
graphVersion: readGraphDocumentVersion(loaded.graph),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
graphs.push({
|
|
79
|
+
graphId: summary.graphId,
|
|
80
|
+
itemId: summary.itemId,
|
|
81
|
+
title: summary.title,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
ok: true,
|
|
87
|
+
graphs,
|
|
88
|
+
totalListed: listed.graphs.length,
|
|
89
|
+
filtered: false,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=graph-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-store.js","sourceRoot":"","sources":["../../src/stores/graph-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { GraphTemplatePayload } from '../types/graph-project.js';
|
|
2
|
+
export type GraphTemplateSummary = {
|
|
3
|
+
templateKey: string;
|
|
4
|
+
title: string;
|
|
5
|
+
templateType?: string;
|
|
6
|
+
sourceGraphId?: string;
|
|
7
|
+
tags?: string[];
|
|
8
|
+
};
|
|
9
|
+
export declare function listGraphTemplatesFromCatalox(): Promise<{
|
|
10
|
+
ok: boolean;
|
|
11
|
+
templates: GraphTemplateSummary[];
|
|
12
|
+
error?: string;
|
|
13
|
+
}>;
|
|
14
|
+
export declare function getGraphTemplateFromCatalox(templateKey: string): Promise<{
|
|
15
|
+
ok: boolean;
|
|
16
|
+
template?: GraphTemplatePayload;
|
|
17
|
+
error?: string;
|
|
18
|
+
}>;
|
|
19
|
+
export declare function saveGraphTemplateToCatalox(template: GraphTemplatePayload): Promise<{
|
|
20
|
+
ok: boolean;
|
|
21
|
+
templateKey?: string;
|
|
22
|
+
error?: string;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function deleteGraphTemplateFromCatalox(templateKey: string): Promise<{
|
|
25
|
+
ok: boolean;
|
|
26
|
+
error?: string;
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=graph-template-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-template-store.d.ts","sourceRoot":"","sources":["../../src/stores/graph-template-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAItE,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,wBAAsB,6BAA6B,IAAI,OAAO,CAAC;IAC7D,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAiBD;AAED,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB3E;AAED,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAehE;AAED,wBAAsB,8BAA8B,CAClD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAE1C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { CATALOG_IDS } from '../config/catalog-ids.js';
|
|
2
|
+
import { getCatalogItem, listCatalogItems, upsertCatalogItem, deleteCatalogItem } from '../client/catalox-api.js';
|
|
3
|
+
const TEMPLATES_CATALOG = CATALOG_IDS.graphTemplates;
|
|
4
|
+
export async function listGraphTemplatesFromCatalox() {
|
|
5
|
+
const out = await listCatalogItems(TEMPLATES_CATALOG, { limit: 200 });
|
|
6
|
+
if (!out.ok)
|
|
7
|
+
return { ok: false, templates: [], error: out.error };
|
|
8
|
+
const templates = out.items.map((item) => {
|
|
9
|
+
const data = item.data ?? {};
|
|
10
|
+
const templateKey = String(item.itemId);
|
|
11
|
+
return {
|
|
12
|
+
templateKey,
|
|
13
|
+
title: String(data.title ?? item.title ?? templateKey),
|
|
14
|
+
templateType: typeof data.templateType === 'string' ? data.templateType : undefined,
|
|
15
|
+
sourceGraphId: typeof data.sourceGraphId === 'string' ? data.sourceGraphId : undefined,
|
|
16
|
+
tags: Array.isArray(data.tags) ? data.tags.map(String) : undefined,
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
return { ok: true, templates };
|
|
20
|
+
}
|
|
21
|
+
export async function getGraphTemplateFromCatalox(templateKey) {
|
|
22
|
+
const out = await getCatalogItem(TEMPLATES_CATALOG, templateKey);
|
|
23
|
+
if (!out.ok || !out.item)
|
|
24
|
+
return { ok: false, error: out.error ?? 'not found' };
|
|
25
|
+
const data = out.item.data ?? {};
|
|
26
|
+
const skeleton = data.graphSkeleton;
|
|
27
|
+
if (!skeleton || typeof skeleton !== 'object') {
|
|
28
|
+
return { ok: false, error: 'template has no graphSkeleton' };
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
ok: true,
|
|
32
|
+
template: {
|
|
33
|
+
templateKey,
|
|
34
|
+
title: String(data.title ?? out.item.title ?? templateKey),
|
|
35
|
+
graphSkeleton: skeleton,
|
|
36
|
+
dynamicFields: Array.isArray(data.dynamicFields) ? data.dynamicFields : undefined,
|
|
37
|
+
sourceGraphId: typeof data.sourceGraphId === 'string' ? data.sourceGraphId : undefined,
|
|
38
|
+
tags: Array.isArray(data.tags) ? data.tags.map(String) : undefined,
|
|
39
|
+
templateType: data.templateType === 'system' ? 'system' : 'saved',
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export async function saveGraphTemplateToCatalox(template) {
|
|
44
|
+
const out = await upsertCatalogItem(TEMPLATES_CATALOG, {
|
|
45
|
+
itemId: template.templateKey,
|
|
46
|
+
title: template.title,
|
|
47
|
+
data: {
|
|
48
|
+
title: template.title,
|
|
49
|
+
graphSkeleton: template.graphSkeleton,
|
|
50
|
+
dynamicFields: template.dynamicFields ?? [],
|
|
51
|
+
sourceGraphId: template.sourceGraphId,
|
|
52
|
+
tags: template.tags ?? [],
|
|
53
|
+
templateType: template.templateType ?? 'saved',
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
if (!out.ok)
|
|
57
|
+
return { ok: false, error: out.error };
|
|
58
|
+
return { ok: true, templateKey: template.templateKey };
|
|
59
|
+
}
|
|
60
|
+
export async function deleteGraphTemplateFromCatalox(templateKey) {
|
|
61
|
+
return deleteCatalogItem(TEMPLATES_CATALOG, templateKey);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=graph-template-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-template-store.js","sourceRoot":"","sources":["../../src/stores/graph-template-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlH,MAAM,iBAAiB,GAAG,WAAW,CAAC,cAAc,CAAC;AAUrD,MAAM,CAAC,KAAK,UAAU,6BAA6B;IAKjD,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;IAEnE,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO;YACL,WAAW;YACX,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC;YACtD,YAAY,EAAE,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;YACnF,aAAa,EAAE,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;YACtF,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SACnE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,WAAmB;IAEnB,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;IACjE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,WAAW,EAAE,CAAC;IAChF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;IACpC,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC;IAC/D,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,QAAQ,EAAE;YACR,WAAW;YACX,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC;YAC1D,aAAa,EAAE,QAAmC;YAClD,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;YACjF,aAAa,EAAE,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;YACtF,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;YAClE,YAAY,EAAE,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;SAClE;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,QAA8B;IAE9B,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,EAAE;QACrD,MAAM,EAAE,QAAQ,CAAC,WAAW;QAC5B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,IAAI,EAAE;YACJ,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,EAAE;YAC3C,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;YACzB,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,OAAO;SAC/C;KACF,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;IACpD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,WAAmB;IAEnB,OAAO,iBAAiB,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { GraphVersionPayload } from '../types/graph-project.js';
|
|
2
|
+
export declare function graphVersionItemId(graphId: string, versionId: string): string;
|
|
3
|
+
export declare function parseGraphVersionItemId(itemId: string): {
|
|
4
|
+
graphId: string;
|
|
5
|
+
versionId: string;
|
|
6
|
+
} | null;
|
|
7
|
+
export declare function saveGraphVersionToCatalox(payload: GraphVersionPayload): Promise<{
|
|
8
|
+
ok: boolean;
|
|
9
|
+
itemId?: string;
|
|
10
|
+
error?: string;
|
|
11
|
+
}>;
|
|
12
|
+
export declare function loadGraphVersionFromCatalox(graphId: string, versionId: string): Promise<{
|
|
13
|
+
ok: boolean;
|
|
14
|
+
payload?: GraphVersionPayload;
|
|
15
|
+
error?: string;
|
|
16
|
+
}>;
|
|
17
|
+
export declare function listGraphVersionsFromCatalox(graphId: string): Promise<{
|
|
18
|
+
ok: boolean;
|
|
19
|
+
versions: GraphVersionPayload[];
|
|
20
|
+
error?: string;
|
|
21
|
+
}>;
|
|
22
|
+
export declare function deleteGraphVersionFromCatalox(graphId: string, versionId: string): Promise<{
|
|
23
|
+
ok: boolean;
|
|
24
|
+
error?: string;
|
|
25
|
+
}>;
|
|
26
|
+
export declare function pruneGraphVersionsBeyondLimit(graphId: string, max?: number): Promise<{
|
|
27
|
+
ok: boolean;
|
|
28
|
+
pruned: number;
|
|
29
|
+
error?: string;
|
|
30
|
+
}>;
|
|
31
|
+
//# sourceMappingURL=graph-version-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-version-store.d.ts","sourceRoot":"","sources":["../../src/stores/graph-version-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIrE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAOrG;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB3D;AAED,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBzE;AAED,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8B3E;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAE1C;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,EACf,GAAG,SAA4B,GAC9B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAU1D"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { CATALOG_IDS, GRAPH_VERSION_HISTORY_MAX } from '../config/catalog-ids.js';
|
|
2
|
+
import { deleteCatalogItem, getCatalogItem, listCatalogItems, upsertCatalogItem } from '../client/catalox-api.js';
|
|
3
|
+
const VERSIONS_CATALOG = CATALOG_IDS.graphVersions;
|
|
4
|
+
export function graphVersionItemId(graphId, versionId) {
|
|
5
|
+
return `${graphId}::${versionId}`;
|
|
6
|
+
}
|
|
7
|
+
export function parseGraphVersionItemId(itemId) {
|
|
8
|
+
const idx = itemId.indexOf('::');
|
|
9
|
+
if (idx <= 0)
|
|
10
|
+
return null;
|
|
11
|
+
return {
|
|
12
|
+
graphId: itemId.slice(0, idx),
|
|
13
|
+
versionId: itemId.slice(idx + 2),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export async function saveGraphVersionToCatalox(payload) {
|
|
17
|
+
const itemId = graphVersionItemId(payload.graphId, payload.versionId);
|
|
18
|
+
const out = await upsertCatalogItem(VERSIONS_CATALOG, {
|
|
19
|
+
itemId,
|
|
20
|
+
data: {
|
|
21
|
+
graphId: payload.graphId,
|
|
22
|
+
versionId: payload.versionId,
|
|
23
|
+
savedAt: payload.savedAt,
|
|
24
|
+
source: payload.source,
|
|
25
|
+
graph: payload.graph,
|
|
26
|
+
...(payload.concept ? { concept: payload.concept } : {}),
|
|
27
|
+
...(payload.note ? { note: payload.note } : {}),
|
|
28
|
+
},
|
|
29
|
+
title: `${payload.graphId} @ ${payload.versionId}`,
|
|
30
|
+
});
|
|
31
|
+
if (!out.ok)
|
|
32
|
+
return { ok: false, error: out.error };
|
|
33
|
+
return { ok: true, itemId };
|
|
34
|
+
}
|
|
35
|
+
export async function loadGraphVersionFromCatalox(graphId, versionId) {
|
|
36
|
+
const itemId = graphVersionItemId(graphId, versionId);
|
|
37
|
+
const out = await getCatalogItem(VERSIONS_CATALOG, itemId);
|
|
38
|
+
if (!out.ok || !out.item)
|
|
39
|
+
return { ok: false, error: out.error ?? 'not found' };
|
|
40
|
+
const data = out.item.data ?? {};
|
|
41
|
+
const graph = data.graph;
|
|
42
|
+
if (!graph || typeof graph !== 'object') {
|
|
43
|
+
return { ok: false, error: 'version row has no graph snapshot' };
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
ok: true,
|
|
47
|
+
payload: {
|
|
48
|
+
graphId,
|
|
49
|
+
versionId,
|
|
50
|
+
savedAt: String(data.savedAt ?? ''),
|
|
51
|
+
source: String(data.source ?? 'unknown'),
|
|
52
|
+
graph: graph,
|
|
53
|
+
concept: data.concept && typeof data.concept === 'object'
|
|
54
|
+
? data.concept
|
|
55
|
+
: undefined,
|
|
56
|
+
note: typeof data.note === 'string' ? data.note : undefined,
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export async function listGraphVersionsFromCatalox(graphId) {
|
|
61
|
+
const out = await listCatalogItems(VERSIONS_CATALOG, { limit: 500 });
|
|
62
|
+
if (!out.ok)
|
|
63
|
+
return { ok: false, versions: [], error: out.error };
|
|
64
|
+
const prefix = `${graphId}::`;
|
|
65
|
+
const versions = [];
|
|
66
|
+
for (const item of out.items) {
|
|
67
|
+
const itemId = String(item.itemId);
|
|
68
|
+
if (!itemId.startsWith(prefix))
|
|
69
|
+
continue;
|
|
70
|
+
const parsed = parseGraphVersionItemId(itemId);
|
|
71
|
+
if (!parsed)
|
|
72
|
+
continue;
|
|
73
|
+
const data = item.data ?? {};
|
|
74
|
+
const graph = data.graph;
|
|
75
|
+
if (!graph || typeof graph !== 'object')
|
|
76
|
+
continue;
|
|
77
|
+
versions.push({
|
|
78
|
+
graphId: parsed.graphId,
|
|
79
|
+
versionId: parsed.versionId,
|
|
80
|
+
savedAt: String(data.savedAt ?? ''),
|
|
81
|
+
source: String(data.source ?? 'unknown'),
|
|
82
|
+
graph: graph,
|
|
83
|
+
concept: data.concept && typeof data.concept === 'object'
|
|
84
|
+
? data.concept
|
|
85
|
+
: undefined,
|
|
86
|
+
note: typeof data.note === 'string' ? data.note : undefined,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
versions.sort((a, b) => b.savedAt.localeCompare(a.savedAt));
|
|
90
|
+
return { ok: true, versions: versions.slice(0, GRAPH_VERSION_HISTORY_MAX) };
|
|
91
|
+
}
|
|
92
|
+
export async function deleteGraphVersionFromCatalox(graphId, versionId) {
|
|
93
|
+
return deleteCatalogItem(VERSIONS_CATALOG, graphVersionItemId(graphId, versionId));
|
|
94
|
+
}
|
|
95
|
+
export async function pruneGraphVersionsBeyondLimit(graphId, max = GRAPH_VERSION_HISTORY_MAX) {
|
|
96
|
+
const listed = await listGraphVersionsFromCatalox(graphId);
|
|
97
|
+
if (!listed.ok)
|
|
98
|
+
return { ok: false, pruned: 0, error: listed.error };
|
|
99
|
+
const excess = listed.versions.slice(max);
|
|
100
|
+
let pruned = 0;
|
|
101
|
+
for (const row of excess) {
|
|
102
|
+
const del = await deleteGraphVersionFromCatalox(row.graphId, row.versionId);
|
|
103
|
+
if (del.ok)
|
|
104
|
+
pruned += 1;
|
|
105
|
+
}
|
|
106
|
+
return { ok: true, pruned };
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=graph-version-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-version-store.js","sourceRoot":"","sources":["../../src/stores/graph-version-store.ts"],"names":[],"mappings":"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"}
|