@0xsarwagya/ontoly-cache 0.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +21 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +99 -0
- package/dist/index.js.map +1 -0
- package/package.json +63 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Sarwagya
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# @0xsarwagya/ontoly-cache
|
|
2
|
+
|
|
3
|
+
Local graph artifact persistence for Ontoly.
|
|
4
|
+
|
|
5
|
+
This package is part of [Ontoly](https://github.com/0xsarwagya/ontoly), a TypeScript-native software intelligence engine that builds a deterministic Software Graph.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm add @0xsarwagya/ontoly-cache
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Status
|
|
14
|
+
|
|
15
|
+
Alpha package for Ontoly v0.1.0-alpha.1. The public API is versioned with the Software Graph and RFC process.
|
|
16
|
+
|
|
17
|
+
## Links
|
|
18
|
+
|
|
19
|
+
- [Repository](https://github.com/0xsarwagya/ontoly)
|
|
20
|
+
- [Documentation](https://oss.sarwagya.wtf/ontoly)
|
|
21
|
+
- [Issues](https://github.com/0xsarwagya/ontoly/issues)
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SoftwareGraph } from "@0xsarwagya/ontoly-core";
|
|
2
|
+
export interface GraphArtifactPaths {
|
|
3
|
+
readonly root: string;
|
|
4
|
+
readonly directory: string;
|
|
5
|
+
readonly graph: string;
|
|
6
|
+
readonly legacyGraph: string;
|
|
7
|
+
readonly diagnostics: string;
|
|
8
|
+
readonly metadata: string;
|
|
9
|
+
readonly indexes: string;
|
|
10
|
+
readonly statistics: string;
|
|
11
|
+
readonly cache: string;
|
|
12
|
+
}
|
|
13
|
+
export interface PersistGraphOptions {
|
|
14
|
+
readonly root: string;
|
|
15
|
+
readonly directory?: string | undefined;
|
|
16
|
+
}
|
|
17
|
+
export declare function getGraphArtifactPaths(options: PersistGraphOptions): GraphArtifactPaths;
|
|
18
|
+
export declare function persistGraph(graph: SoftwareGraph, options: PersistGraphOptions): Promise<GraphArtifactPaths>;
|
|
19
|
+
export declare function loadGraph(options: PersistGraphOptions): Promise<SoftwareGraph>;
|
|
20
|
+
export declare function persistCompilerCache(options: PersistGraphOptions, cache: unknown): Promise<GraphArtifactPaths>;
|
|
21
|
+
export declare function loadCompilerCache<T>(options: PersistGraphOptions, fallback: T): Promise<T>;
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
function getGraphArtifactPaths(options) {
|
|
5
|
+
const directory = join(options.root, options.directory ?? ".ontoly");
|
|
6
|
+
return {
|
|
7
|
+
root: options.root,
|
|
8
|
+
directory,
|
|
9
|
+
graph: join(directory, "SoftwareGraph.json"),
|
|
10
|
+
legacyGraph: join(directory, "graph.json"),
|
|
11
|
+
diagnostics: join(directory, "diagnostics.json"),
|
|
12
|
+
metadata: join(directory, "metadata.json"),
|
|
13
|
+
indexes: join(directory, "indexes.json"),
|
|
14
|
+
statistics: join(directory, "statistics.json"),
|
|
15
|
+
cache: join(directory, "cache.json")
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
async function persistGraph(graph, options) {
|
|
19
|
+
const paths = getGraphArtifactPaths(options);
|
|
20
|
+
await mkdir(paths.directory, { recursive: true });
|
|
21
|
+
await Promise.all([
|
|
22
|
+
writeJson(paths.graph, graph),
|
|
23
|
+
writeJson(paths.legacyGraph, graph),
|
|
24
|
+
writeJson(paths.diagnostics, graph.diagnostics),
|
|
25
|
+
writeJson(paths.metadata, graph.metadata),
|
|
26
|
+
writeJson(paths.indexes, graph.indexes),
|
|
27
|
+
writeJson(paths.statistics, createGraphStatistics(graph))
|
|
28
|
+
]);
|
|
29
|
+
return paths;
|
|
30
|
+
}
|
|
31
|
+
async function loadGraph(options) {
|
|
32
|
+
const paths = getGraphArtifactPaths(options);
|
|
33
|
+
const contents = await readFirstExisting([paths.graph, paths.legacyGraph]);
|
|
34
|
+
return JSON.parse(contents);
|
|
35
|
+
}
|
|
36
|
+
async function persistCompilerCache(options, cache) {
|
|
37
|
+
const paths = getGraphArtifactPaths(options);
|
|
38
|
+
await mkdir(paths.directory, { recursive: true });
|
|
39
|
+
await writeJson(paths.cache, cache);
|
|
40
|
+
return paths;
|
|
41
|
+
}
|
|
42
|
+
async function loadCompilerCache(options, fallback) {
|
|
43
|
+
const paths = getGraphArtifactPaths(options);
|
|
44
|
+
try {
|
|
45
|
+
const contents = await readFile(paths.cache, "utf8");
|
|
46
|
+
return JSON.parse(contents);
|
|
47
|
+
} catch (error) {
|
|
48
|
+
if (isMissingFileError(error)) {
|
|
49
|
+
return fallback;
|
|
50
|
+
}
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async function writeJson(path, value) {
|
|
55
|
+
await writeFile(path, `${JSON.stringify(value, null, 2)}
|
|
56
|
+
`, "utf8");
|
|
57
|
+
}
|
|
58
|
+
async function readFirstExisting(paths) {
|
|
59
|
+
let lastError;
|
|
60
|
+
for (const path of paths) {
|
|
61
|
+
try {
|
|
62
|
+
return await readFile(path, "utf8");
|
|
63
|
+
} catch (error) {
|
|
64
|
+
lastError = error;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
throw lastError;
|
|
68
|
+
}
|
|
69
|
+
function createGraphStatistics(graph) {
|
|
70
|
+
return {
|
|
71
|
+
files: graph.metadata.fileCount,
|
|
72
|
+
nodes: graph.nodes.length,
|
|
73
|
+
edges: graph.edges.length,
|
|
74
|
+
diagnostics: graph.diagnostics.length,
|
|
75
|
+
nodesByType: countBy(graph.nodes.map((node) => node.type)),
|
|
76
|
+
edgesByType: countBy(graph.edges.map((edge) => edge.type)),
|
|
77
|
+
parserVersions: graph.metadata.parserVersions,
|
|
78
|
+
deterministicHash: graph.metadata.deterministicHash
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function countBy(values) {
|
|
82
|
+
return Object.fromEntries(
|
|
83
|
+
[...values.reduce((counts, value) => {
|
|
84
|
+
counts.set(value, (counts.get(value) ?? 0) + 1);
|
|
85
|
+
return counts;
|
|
86
|
+
}, /* @__PURE__ */ new Map()).entries()].sort(([left], [right]) => left.localeCompare(right))
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
function isMissingFileError(error) {
|
|
90
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
|
|
91
|
+
}
|
|
92
|
+
export {
|
|
93
|
+
getGraphArtifactPaths,
|
|
94
|
+
loadCompilerCache,
|
|
95
|
+
loadGraph,
|
|
96
|
+
persistCompilerCache,
|
|
97
|
+
persistGraph
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@0xsarwagya/ontoly-cache",
|
|
3
|
+
"version": "0.1.0-alpha.1",
|
|
4
|
+
"description": "Local graph artifact persistence for Ontoly.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/0xsarwagya/ontoly.git",
|
|
10
|
+
"directory": "packages/cache"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://oss.sarwagya.wtf/ontoly",
|
|
13
|
+
"sideEffects": false,
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"import": "./dist/index.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist",
|
|
22
|
+
"README.md",
|
|
23
|
+
"LICENSE"
|
|
24
|
+
],
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@0xsarwagya/ontoly-core": "0.1.0-alpha.1"
|
|
27
|
+
},
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/node": "^22.15.3",
|
|
33
|
+
"tsup": "^8.3.5",
|
|
34
|
+
"typescript": "5.9.2"
|
|
35
|
+
},
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/0xsarwagya/ontoly/issues"
|
|
38
|
+
},
|
|
39
|
+
"funding": {
|
|
40
|
+
"type": "github",
|
|
41
|
+
"url": "https://github.com/sponsors/0xsarwagya"
|
|
42
|
+
},
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=22.0.0",
|
|
45
|
+
"pnpm": ">=11.0.0"
|
|
46
|
+
},
|
|
47
|
+
"main": "./dist/index.js",
|
|
48
|
+
"types": "./dist/index.d.ts",
|
|
49
|
+
"keywords": [
|
|
50
|
+
"ontoly",
|
|
51
|
+
"software-graph",
|
|
52
|
+
"typescript",
|
|
53
|
+
"static-analysis",
|
|
54
|
+
"developer-tools",
|
|
55
|
+
"cache",
|
|
56
|
+
"artifacts",
|
|
57
|
+
"persistence"
|
|
58
|
+
],
|
|
59
|
+
"scripts": {
|
|
60
|
+
"build": "tsup && tsc -p tsconfig.build.json",
|
|
61
|
+
"check-types": "tsc --noEmit"
|
|
62
|
+
}
|
|
63
|
+
}
|