@0xsarwagya/ontoly-cache 0.1.0-alpha.1 → 0.1.0-alpha.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -12,7 +12,7 @@ pnpm add @0xsarwagya/ontoly-cache
12
12
 
13
13
  ## Status
14
14
 
15
- Alpha package for Ontoly v0.1.0-alpha.1. The public API is versioned with the Software Graph and RFC process.
15
+ Alpha package for Ontoly v0.1.0-alpha.14. The public API is versioned with the Software Graph and RFC process.
16
16
 
17
17
  ## Links
18
18
 
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { SoftwareGraph } from "@0xsarwagya/ontoly-core";
2
+ import { type SemanticIndex } from "@0xsarwagya/ontoly-core";
2
3
  export interface GraphArtifactPaths {
3
4
  readonly root: string;
4
5
  readonly directory: string;
@@ -7,6 +8,7 @@ export interface GraphArtifactPaths {
7
8
  readonly diagnostics: string;
8
9
  readonly metadata: string;
9
10
  readonly indexes: string;
11
+ readonly semanticIndex: string;
10
12
  readonly statistics: string;
11
13
  readonly cache: string;
12
14
  }
@@ -17,6 +19,8 @@ export interface PersistGraphOptions {
17
19
  export declare function getGraphArtifactPaths(options: PersistGraphOptions): GraphArtifactPaths;
18
20
  export declare function persistGraph(graph: SoftwareGraph, options: PersistGraphOptions): Promise<GraphArtifactPaths>;
19
21
  export declare function loadGraph(options: PersistGraphOptions): Promise<SoftwareGraph>;
22
+ export declare function loadSemanticIndex(options: PersistGraphOptions): Promise<SemanticIndex>;
23
+ export declare function loadOrCreateSemanticIndex(options: PersistGraphOptions): Promise<SemanticIndex>;
20
24
  export declare function persistCompilerCache(options: PersistGraphOptions, cache: unknown): Promise<GraphArtifactPaths>;
21
25
  export declare function loadCompilerCache<T>(options: PersistGraphOptions, fallback: T): Promise<T>;
22
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CActF;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAc7B;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAIpF;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,kBAAkB,CAAC,CAK7B;AAED,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,CAAC,GACV,OAAO,CAAC,CAAC,CAAC,CAaZ"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CAgBtF;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAgB7B;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAIpF;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAI5F;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAuBpG;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,kBAAkB,CAAC,CAK7B;AAED,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,CAAC,GACV,OAAO,CAAC,CAAC,CAAC,CAaZ"}
package/dist/index.js CHANGED
@@ -1,8 +1,13 @@
1
1
  // src/index.ts
2
2
  import { mkdir, readFile, writeFile } from "fs/promises";
3
- import { join } from "path";
3
+ import { isAbsolute, join } from "path";
4
+ import {
5
+ createSemanticIndex,
6
+ validateSemanticIndex
7
+ } from "@0xsarwagya/ontoly-core";
4
8
  function getGraphArtifactPaths(options) {
5
- const directory = join(options.root, options.directory ?? ".ontoly");
9
+ const outputDirectory = options.directory ?? ".ontoly";
10
+ const directory = isAbsolute(outputDirectory) ? outputDirectory : join(options.root, outputDirectory);
6
11
  return {
7
12
  root: options.root,
8
13
  directory,
@@ -11,12 +16,14 @@ function getGraphArtifactPaths(options) {
11
16
  diagnostics: join(directory, "diagnostics.json"),
12
17
  metadata: join(directory, "metadata.json"),
13
18
  indexes: join(directory, "indexes.json"),
19
+ semanticIndex: join(directory, "index.json"),
14
20
  statistics: join(directory, "statistics.json"),
15
21
  cache: join(directory, "cache.json")
16
22
  };
17
23
  }
18
24
  async function persistGraph(graph, options) {
19
25
  const paths = getGraphArtifactPaths(options);
26
+ const semanticIndex = createSemanticIndex(graph);
20
27
  await mkdir(paths.directory, { recursive: true });
21
28
  await Promise.all([
22
29
  writeJson(paths.graph, graph),
@@ -24,6 +31,7 @@ async function persistGraph(graph, options) {
24
31
  writeJson(paths.diagnostics, graph.diagnostics),
25
32
  writeJson(paths.metadata, graph.metadata),
26
33
  writeJson(paths.indexes, graph.indexes),
34
+ writeJson(paths.semanticIndex, semanticIndex),
27
35
  writeJson(paths.statistics, createGraphStatistics(graph))
28
36
  ]);
29
37
  return paths;
@@ -33,6 +41,35 @@ async function loadGraph(options) {
33
41
  const contents = await readFirstExisting([paths.graph, paths.legacyGraph]);
34
42
  return JSON.parse(contents);
35
43
  }
44
+ async function loadSemanticIndex(options) {
45
+ const paths = getGraphArtifactPaths(options);
46
+ const contents = await readFile(paths.semanticIndex, "utf8");
47
+ return JSON.parse(contents);
48
+ }
49
+ async function loadOrCreateSemanticIndex(options) {
50
+ try {
51
+ const [semanticIndex, graph] = await Promise.all([
52
+ loadSemanticIndex(options),
53
+ loadGraph(options)
54
+ ]);
55
+ if (validateSemanticIndex(semanticIndex, graph).length === 0) {
56
+ return semanticIndex;
57
+ }
58
+ const rebuilt = createSemanticIndex(graph);
59
+ await mkdir(getGraphArtifactPaths(options).directory, { recursive: true });
60
+ await writeJson(getGraphArtifactPaths(options).semanticIndex, rebuilt);
61
+ return rebuilt;
62
+ } catch (error) {
63
+ if (!isMissingFileError(error)) {
64
+ throw error;
65
+ }
66
+ const graph = await loadGraph(options);
67
+ const semanticIndex = createSemanticIndex(graph);
68
+ await mkdir(getGraphArtifactPaths(options).directory, { recursive: true });
69
+ await writeJson(getGraphArtifactPaths(options).semanticIndex, semanticIndex);
70
+ return semanticIndex;
71
+ }
72
+ }
36
73
  async function persistCompilerCache(options, cache) {
37
74
  const paths = getGraphArtifactPaths(options);
38
75
  await mkdir(paths.directory, { recursive: true });
@@ -93,6 +130,8 @@ export {
93
130
  getGraphArtifactPaths,
94
131
  loadCompilerCache,
95
132
  loadGraph,
133
+ loadOrCreateSemanticIndex,
134
+ loadSemanticIndex,
96
135
  persistCompilerCache,
97
136
  persistGraph
98
137
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { SoftwareGraph } from \"@0xsarwagya/ontoly-core\";\n\nexport interface GraphArtifactPaths {\n readonly root: string;\n readonly directory: string;\n readonly graph: string;\n readonly legacyGraph: string;\n readonly diagnostics: string;\n readonly metadata: string;\n readonly indexes: string;\n readonly statistics: string;\n readonly cache: string;\n}\n\nexport interface PersistGraphOptions {\n readonly root: string;\n readonly directory?: string | undefined;\n}\n\nexport function getGraphArtifactPaths(options: PersistGraphOptions): GraphArtifactPaths {\n const directory = join(options.root, options.directory ?? \".ontoly\");\n\n return {\n root: options.root,\n directory,\n graph: join(directory, \"SoftwareGraph.json\"),\n legacyGraph: join(directory, \"graph.json\"),\n diagnostics: join(directory, \"diagnostics.json\"),\n metadata: join(directory, \"metadata.json\"),\n indexes: join(directory, \"indexes.json\"),\n statistics: join(directory, \"statistics.json\"),\n cache: join(directory, \"cache.json\"),\n };\n}\n\nexport async function persistGraph(\n graph: SoftwareGraph,\n options: PersistGraphOptions,\n): Promise<GraphArtifactPaths> {\n const paths = getGraphArtifactPaths(options);\n await mkdir(paths.directory, { recursive: true });\n\n await Promise.all([\n writeJson(paths.graph, graph),\n writeJson(paths.legacyGraph, graph),\n writeJson(paths.diagnostics, graph.diagnostics),\n writeJson(paths.metadata, graph.metadata),\n writeJson(paths.indexes, graph.indexes),\n writeJson(paths.statistics, createGraphStatistics(graph)),\n ]);\n\n return paths;\n}\n\nexport async function loadGraph(options: PersistGraphOptions): Promise<SoftwareGraph> {\n const paths = getGraphArtifactPaths(options);\n const contents = await readFirstExisting([paths.graph, paths.legacyGraph]);\n return JSON.parse(contents) as SoftwareGraph;\n}\n\nexport async function persistCompilerCache(\n options: PersistGraphOptions,\n cache: unknown,\n): Promise<GraphArtifactPaths> {\n const paths = getGraphArtifactPaths(options);\n await mkdir(paths.directory, { recursive: true });\n await writeJson(paths.cache, cache);\n return paths;\n}\n\nexport async function loadCompilerCache<T>(\n options: PersistGraphOptions,\n fallback: T,\n): Promise<T> {\n const paths = getGraphArtifactPaths(options);\n\n try {\n const contents = await readFile(paths.cache, \"utf8\");\n return JSON.parse(contents) as T;\n } catch (error) {\n if (isMissingFileError(error)) {\n return fallback;\n }\n\n throw error;\n }\n}\n\nasync function writeJson(path: string, value: unknown): Promise<void> {\n await writeFile(path, `${JSON.stringify(value, null, 2)}\\n`, \"utf8\");\n}\n\nasync function readFirstExisting(paths: readonly string[]): Promise<string> {\n let lastError: unknown;\n\n for (const path of paths) {\n try {\n return await readFile(path, \"utf8\");\n } catch (error) {\n lastError = error;\n }\n }\n\n throw lastError;\n}\n\nfunction createGraphStatistics(graph: SoftwareGraph): Record<string, unknown> {\n return {\n files: graph.metadata.fileCount,\n nodes: graph.nodes.length,\n edges: graph.edges.length,\n diagnostics: graph.diagnostics.length,\n nodesByType: countBy(graph.nodes.map((node) => node.type)),\n edgesByType: countBy(graph.edges.map((edge) => edge.type)),\n parserVersions: graph.metadata.parserVersions,\n deterministicHash: graph.metadata.deterministicHash,\n };\n}\n\nfunction countBy(values: readonly string[]): Record<string, number> {\n return Object.fromEntries(\n [...values.reduce((counts, value) => {\n counts.set(value, (counts.get(value) ?? 0) + 1);\n return counts;\n }, new Map<string, number>()).entries()].sort(([left], [right]) => left.localeCompare(right)),\n );\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { readonly code?: unknown }).code === \"ENOENT\"\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { isAbsolute, join } from \"node:path\";\nimport type { SoftwareGraph } from \"@0xsarwagya/ontoly-core\";\nimport {\n createSemanticIndex,\n validateSemanticIndex,\n type SemanticIndex,\n} from \"@0xsarwagya/ontoly-core\";\n\nexport interface GraphArtifactPaths {\n readonly root: string;\n readonly directory: string;\n readonly graph: string;\n readonly legacyGraph: string;\n readonly diagnostics: string;\n readonly metadata: string;\n readonly indexes: string;\n readonly semanticIndex: string;\n readonly statistics: string;\n readonly cache: string;\n}\n\nexport interface PersistGraphOptions {\n readonly root: string;\n readonly directory?: string | undefined;\n}\n\nexport function getGraphArtifactPaths(options: PersistGraphOptions): GraphArtifactPaths {\n const outputDirectory = options.directory ?? \".ontoly\";\n const directory = isAbsolute(outputDirectory) ? outputDirectory : join(options.root, outputDirectory);\n\n return {\n root: options.root,\n directory,\n graph: join(directory, \"SoftwareGraph.json\"),\n legacyGraph: join(directory, \"graph.json\"),\n diagnostics: join(directory, \"diagnostics.json\"),\n metadata: join(directory, \"metadata.json\"),\n indexes: join(directory, \"indexes.json\"),\n semanticIndex: join(directory, \"index.json\"),\n statistics: join(directory, \"statistics.json\"),\n cache: join(directory, \"cache.json\"),\n };\n}\n\nexport async function persistGraph(\n graph: SoftwareGraph,\n options: PersistGraphOptions,\n): Promise<GraphArtifactPaths> {\n const paths = getGraphArtifactPaths(options);\n const semanticIndex = createSemanticIndex(graph);\n await mkdir(paths.directory, { recursive: true });\n\n await Promise.all([\n writeJson(paths.graph, graph),\n writeJson(paths.legacyGraph, graph),\n writeJson(paths.diagnostics, graph.diagnostics),\n writeJson(paths.metadata, graph.metadata),\n writeJson(paths.indexes, graph.indexes),\n writeJson(paths.semanticIndex, semanticIndex),\n writeJson(paths.statistics, createGraphStatistics(graph)),\n ]);\n\n return paths;\n}\n\nexport async function loadGraph(options: PersistGraphOptions): Promise<SoftwareGraph> {\n const paths = getGraphArtifactPaths(options);\n const contents = await readFirstExisting([paths.graph, paths.legacyGraph]);\n return JSON.parse(contents) as SoftwareGraph;\n}\n\nexport async function loadSemanticIndex(options: PersistGraphOptions): Promise<SemanticIndex> {\n const paths = getGraphArtifactPaths(options);\n const contents = await readFile(paths.semanticIndex, \"utf8\");\n return JSON.parse(contents) as SemanticIndex;\n}\n\nexport async function loadOrCreateSemanticIndex(options: PersistGraphOptions): Promise<SemanticIndex> {\n try {\n const [semanticIndex, graph] = await Promise.all([\n loadSemanticIndex(options),\n loadGraph(options),\n ]);\n if (validateSemanticIndex(semanticIndex, graph).length === 0) {\n return semanticIndex;\n }\n const rebuilt = createSemanticIndex(graph);\n await mkdir(getGraphArtifactPaths(options).directory, { recursive: true });\n await writeJson(getGraphArtifactPaths(options).semanticIndex, rebuilt);\n return rebuilt;\n } catch (error) {\n if (!isMissingFileError(error)) {\n throw error;\n }\n const graph = await loadGraph(options);\n const semanticIndex = createSemanticIndex(graph);\n await mkdir(getGraphArtifactPaths(options).directory, { recursive: true });\n await writeJson(getGraphArtifactPaths(options).semanticIndex, semanticIndex);\n return semanticIndex;\n }\n}\n\nexport async function persistCompilerCache(\n options: PersistGraphOptions,\n cache: unknown,\n): Promise<GraphArtifactPaths> {\n const paths = getGraphArtifactPaths(options);\n await mkdir(paths.directory, { recursive: true });\n await writeJson(paths.cache, cache);\n return paths;\n}\n\nexport async function loadCompilerCache<T>(\n options: PersistGraphOptions,\n fallback: T,\n): Promise<T> {\n const paths = getGraphArtifactPaths(options);\n\n try {\n const contents = await readFile(paths.cache, \"utf8\");\n return JSON.parse(contents) as T;\n } catch (error) {\n if (isMissingFileError(error)) {\n return fallback;\n }\n\n throw error;\n }\n}\n\nasync function writeJson(path: string, value: unknown): Promise<void> {\n await writeFile(path, `${JSON.stringify(value, null, 2)}\\n`, \"utf8\");\n}\n\nasync function readFirstExisting(paths: readonly string[]): Promise<string> {\n let lastError: unknown;\n\n for (const path of paths) {\n try {\n return await readFile(path, \"utf8\");\n } catch (error) {\n lastError = error;\n }\n }\n\n throw lastError;\n}\n\nfunction createGraphStatistics(graph: SoftwareGraph): Record<string, unknown> {\n return {\n files: graph.metadata.fileCount,\n nodes: graph.nodes.length,\n edges: graph.edges.length,\n diagnostics: graph.diagnostics.length,\n nodesByType: countBy(graph.nodes.map((node) => node.type)),\n edgesByType: countBy(graph.edges.map((edge) => edge.type)),\n parserVersions: graph.metadata.parserVersions,\n deterministicHash: graph.metadata.deterministicHash,\n };\n}\n\nfunction countBy(values: readonly string[]): Record<string, number> {\n return Object.fromEntries(\n [...values.reduce((counts, value) => {\n counts.set(value, (counts.get(value) ?? 0) + 1);\n return counts;\n }, new Map<string, number>()).entries()].sort(([left], [right]) => left.localeCompare(right)),\n );\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { readonly code?: unknown }).code === \"ENOENT\"\n );\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xsarwagya/ontoly-cache",
3
- "version": "0.1.0-alpha.1",
3
+ "version": "0.1.0-alpha.14",
4
4
  "description": "Local graph artifact persistence for Ontoly.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -23,7 +23,7 @@
23
23
  "LICENSE"
24
24
  ],
25
25
  "dependencies": {
26
- "@0xsarwagya/ontoly-core": "0.1.0-alpha.1"
26
+ "@0xsarwagya/ontoly-core": "0.1.0-alpha.14"
27
27
  },
28
28
  "publishConfig": {
29
29
  "access": "public"