@untangle-code/file-graph 0.0.0-stage → 0.1.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 (130) hide show
  1. package/LICENSE +661 -0
  2. package/NOTICE +90 -0
  3. package/README.md +284 -2
  4. package/THIRD_PARTY_LICENSES.md +29 -0
  5. package/dist/assignment.d.ts +15 -0
  6. package/dist/assignment.d.ts.map +1 -0
  7. package/dist/assignment.js +75 -0
  8. package/dist/assignment.js.map +1 -0
  9. package/dist/boundaries/endpoints.d.ts +11 -0
  10. package/dist/boundaries/endpoints.d.ts.map +1 -0
  11. package/dist/boundaries/endpoints.js +195 -0
  12. package/dist/boundaries/endpoints.js.map +1 -0
  13. package/dist/boundaries/index.d.ts +9 -0
  14. package/dist/boundaries/index.d.ts.map +1 -0
  15. package/dist/boundaries/index.js +93 -0
  16. package/dist/boundaries/index.js.map +1 -0
  17. package/dist/boundaries/requests.d.ts +12 -0
  18. package/dist/boundaries/requests.d.ts.map +1 -0
  19. package/dist/boundaries/requests.js +311 -0
  20. package/dist/boundaries/requests.js.map +1 -0
  21. package/dist/edges.d.ts +49 -0
  22. package/dist/edges.d.ts.map +1 -0
  23. package/dist/edges.js +223 -0
  24. package/dist/edges.js.map +1 -0
  25. package/dist/file-index.d.ts +37 -0
  26. package/dist/file-index.d.ts.map +1 -0
  27. package/dist/file-index.js +103 -0
  28. package/dist/file-index.js.map +1 -0
  29. package/dist/graph.d.ts +160 -0
  30. package/dist/graph.d.ts.map +1 -0
  31. package/dist/graph.js +448 -0
  32. package/dist/graph.js.map +1 -0
  33. package/dist/index.d.ts +35 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +48 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/metrics.d.ts +67 -0
  38. package/dist/metrics.d.ts.map +1 -0
  39. package/dist/metrics.js +272 -0
  40. package/dist/metrics.js.map +1 -0
  41. package/dist/package-catalog.d.ts +43 -0
  42. package/dist/package-catalog.d.ts.map +1 -0
  43. package/dist/package-catalog.js +136 -0
  44. package/dist/package-catalog.js.map +1 -0
  45. package/dist/paths.d.ts +56 -0
  46. package/dist/paths.d.ts.map +1 -0
  47. package/dist/paths.js +129 -0
  48. package/dist/paths.js.map +1 -0
  49. package/dist/persistence.d.ts +83 -0
  50. package/dist/persistence.d.ts.map +1 -0
  51. package/dist/persistence.js +538 -0
  52. package/dist/persistence.js.map +1 -0
  53. package/dist/resolve/candidates.d.ts +52 -0
  54. package/dist/resolve/candidates.d.ts.map +1 -0
  55. package/dist/resolve/candidates.js +202 -0
  56. package/dist/resolve/candidates.js.map +1 -0
  57. package/dist/resolve/package-exports.d.ts +31 -0
  58. package/dist/resolve/package-exports.d.ts.map +1 -0
  59. package/dist/resolve/package-exports.js +229 -0
  60. package/dist/resolve/package-exports.js.map +1 -0
  61. package/dist/resolve/pipeline.d.ts +11 -0
  62. package/dist/resolve/pipeline.d.ts.map +1 -0
  63. package/dist/resolve/pipeline.js +109 -0
  64. package/dist/resolve/pipeline.js.map +1 -0
  65. package/dist/resolve/resolvers.d.ts +25 -0
  66. package/dist/resolve/resolvers.d.ts.map +1 -0
  67. package/dist/resolve/resolvers.js +367 -0
  68. package/dist/resolve/resolvers.js.map +1 -0
  69. package/dist/restore.d.ts +75 -0
  70. package/dist/restore.d.ts.map +1 -0
  71. package/dist/restore.js +136 -0
  72. package/dist/restore.js.map +1 -0
  73. package/dist/topology/compose.d.ts +27 -0
  74. package/dist/topology/compose.d.ts.map +1 -0
  75. package/dist/topology/compose.js +208 -0
  76. package/dist/topology/compose.js.map +1 -0
  77. package/dist/topology/jsonc.d.ts +38 -0
  78. package/dist/topology/jsonc.d.ts.map +1 -0
  79. package/dist/topology/jsonc.js +137 -0
  80. package/dist/topology/jsonc.js.map +1 -0
  81. package/dist/topology/load.d.ts +61 -0
  82. package/dist/topology/load.d.ts.map +1 -0
  83. package/dist/topology/load.js +436 -0
  84. package/dist/topology/load.js.map +1 -0
  85. package/dist/topology/manifest.d.ts +48 -0
  86. package/dist/topology/manifest.d.ts.map +1 -0
  87. package/dist/topology/manifest.js +109 -0
  88. package/dist/topology/manifest.js.map +1 -0
  89. package/dist/topology/project-config.d.ts +39 -0
  90. package/dist/topology/project-config.d.ts.map +1 -0
  91. package/dist/topology/project-config.js +150 -0
  92. package/dist/topology/project-config.js.map +1 -0
  93. package/dist/topology/workspace-definition.d.ts +26 -0
  94. package/dist/topology/workspace-definition.d.ts.map +1 -0
  95. package/dist/topology/workspace-definition.js +104 -0
  96. package/dist/topology/workspace-definition.js.map +1 -0
  97. package/dist/traverse.d.ts +49 -0
  98. package/dist/traverse.d.ts.map +1 -0
  99. package/dist/traverse.js +167 -0
  100. package/dist/traverse.js.map +1 -0
  101. package/dist/types.d.ts +332 -0
  102. package/dist/types.d.ts.map +1 -0
  103. package/dist/types.js +2 -0
  104. package/dist/types.js.map +1 -0
  105. package/package.json +63 -3
  106. package/src/assignment.ts +83 -0
  107. package/src/boundaries/endpoints.ts +273 -0
  108. package/src/boundaries/index.ts +118 -0
  109. package/src/boundaries/requests.ts +411 -0
  110. package/src/edges.ts +334 -0
  111. package/src/file-index.ts +127 -0
  112. package/src/graph.ts +591 -0
  113. package/src/index.ts +58 -0
  114. package/src/metrics.ts +350 -0
  115. package/src/package-catalog.ts +145 -0
  116. package/src/paths.ts +138 -0
  117. package/src/persistence.ts +746 -0
  118. package/src/resolve/candidates.ts +230 -0
  119. package/src/resolve/package-exports.ts +268 -0
  120. package/src/resolve/pipeline.ts +140 -0
  121. package/src/resolve/resolvers.ts +468 -0
  122. package/src/restore.ts +201 -0
  123. package/src/topology/compose.ts +268 -0
  124. package/src/topology/jsonc.ts +147 -0
  125. package/src/topology/load.ts +644 -0
  126. package/src/topology/manifest.ts +132 -0
  127. package/src/topology/project-config.ts +183 -0
  128. package/src/topology/workspace-definition.ts +115 -0
  129. package/src/traverse.ts +232 -0
  130. package/src/types.ts +372 -0
package/dist/paths.js ADDED
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Pfadhilfen des Dateigraphen — ausschliesslich POSIX, ausschliesslich
3
+ * repo-relativ.
4
+ *
5
+ * Warum eigene Helfer statt `node:path`: der Dateigraph rechnet nie auf
6
+ * Betriebssystempfaden. Er kennt nur `"/"`-normalisierte, repo-relative
7
+ * Pfade (spec.md §5.4), und `node:path` auf Windows wuerde aus `a/b`
8
+ * beim Zusammensetzen `a\b` machen — damit haette dieselbe Codebasis auf
9
+ * zwei Maschinen zwei verschiedene `file_id`s. `node:path/posix` deckt
10
+ * einen Teil ab, liefert aber `".."`-Ergebnisse ausserhalb der Wurzel
11
+ * still zurueck; hier wird das zu `null` und damit zu einem benannten
12
+ * Fehlschlag (E4).
13
+ */
14
+ /** Normalisiert Trennzeichen und entfernt fuehrende `"./"` sowie Mehrfachslashes. */
15
+ export function normalizePath(path) {
16
+ const forward = path.replace(/\\/g, "/");
17
+ const collapsed = forward.replace(/\/{2,}/g, "/");
18
+ const withoutLeadingDot = collapsed.startsWith("./") ? collapsed.slice(2) : collapsed;
19
+ const withoutLeadingSlash = withoutLeadingDot.startsWith("/")
20
+ ? withoutLeadingDot.slice(1)
21
+ : withoutLeadingDot;
22
+ return withoutLeadingSlash.endsWith("/") && withoutLeadingSlash.length > 1
23
+ ? withoutLeadingSlash.slice(0, -1)
24
+ : withoutLeadingSlash;
25
+ }
26
+ /** Verzeichnisanteil eines repo-relativen Pfades; `""` fuer Dateien in der Wurzel. */
27
+ export function dirnameOf(path) {
28
+ const normalized = normalizePath(path);
29
+ const index = normalized.lastIndexOf("/");
30
+ return index === -1 ? "" : normalized.slice(0, index);
31
+ }
32
+ /** Dateiname ohne Verzeichnisanteil. */
33
+ export function basenameOf(path) {
34
+ const normalized = normalizePath(path);
35
+ const index = normalized.lastIndexOf("/");
36
+ return index === -1 ? normalized : normalized.slice(index + 1);
37
+ }
38
+ /** Erweiterung inklusive Punkt, kleingeschrieben; `""` bei Dotfiles und ohne Punkt. */
39
+ export function extensionOf(path) {
40
+ const name = basenameOf(path);
41
+ const index = name.lastIndexOf(".");
42
+ if (index <= 0) {
43
+ return "";
44
+ }
45
+ return name.slice(index).toLowerCase();
46
+ }
47
+ /**
48
+ * Setzt einen Basispfad und ein Segment zusammen und loest `.`/`..` auf.
49
+ *
50
+ * Gibt `null` zurueck, wenn die Aufloesung ueber die Repositorywurzel
51
+ * hinauslaeuft. Ein Import wie `"../../../../etc/passwd"` aus `src/a.ts`
52
+ * ist damit ein benannter Fehlschlag und kein still auf `etc/passwd`
53
+ * gekuerzter Treffer.
54
+ */
55
+ export function joinRelative(baseDir, segment) {
56
+ const base = normalizePath(baseDir);
57
+ const parts = base === "" ? [] : base.split("/");
58
+ const stack = [...parts];
59
+ for (const raw of normalizePath(segment).split("/")) {
60
+ if (raw === "" || raw === ".") {
61
+ continue;
62
+ }
63
+ if (raw === "..") {
64
+ if (stack.length === 0) {
65
+ return null;
66
+ }
67
+ stack.pop();
68
+ continue;
69
+ }
70
+ stack.push(raw);
71
+ }
72
+ return stack.join("/");
73
+ }
74
+ /** True, wenn `path` unterhalb von `directory` liegt (oder gleich ist). */
75
+ export function isWithin(directory, path) {
76
+ const dir = normalizePath(directory);
77
+ const target = normalizePath(path);
78
+ if (dir === "" || dir === ".") {
79
+ return true;
80
+ }
81
+ return target === dir || target.startsWith(`${dir}/`);
82
+ }
83
+ /**
84
+ * Pfad von `path` relativ zu `directory`; `null`, wenn `path` nicht darunter
85
+ * liegt. Bewusst kein `..`-Ergebnis: der Aufrufer will hier wissen, ob etwas
86
+ * INNERHALB eines Verzeichnisses liegt, nicht wie man hinaufkommt.
87
+ */
88
+ export function relativeWithin(directory, path) {
89
+ if (!isWithin(directory, path)) {
90
+ return null;
91
+ }
92
+ const dir = normalizePath(directory);
93
+ const target = normalizePath(path);
94
+ if (dir === "" || dir === ".") {
95
+ return target;
96
+ }
97
+ return target === dir ? "" : target.slice(dir.length + 1);
98
+ }
99
+ /** True fuer `"./x"`, `"../x"` und `"."`/`".."` selbst. */
100
+ export function isRelativeSpecifier(specifier) {
101
+ return specifier === "." || specifier === ".." || /^\.\.?\//.test(specifier);
102
+ }
103
+ /**
104
+ * Normalisiert nur die Trennzeichen und laesst einen fuehrenden `"/"` stehen.
105
+ *
106
+ * `normalizePath` ist fuer REPO-RELATIVE Pfade gedacht und entfernt deshalb
107
+ * einen fuehrenden Schraegstrich. Auf einen absoluten Wurzelpfad angewandt
108
+ * wuerde daraus ein relativer — und jeder Lesezugriff ginge ins Leere. Fuer
109
+ * absolute Pfade (Repositorywurzeln, Eintraege des Dateisystemports) gilt
110
+ * diese Funktion.
111
+ */
112
+ export function normalizeSeparators(path) {
113
+ const forward = path.replace(/\\/g, "/").replace(/\/{2,}/g, "/");
114
+ return forward.length > 1 && forward.endsWith("/") ? forward.slice(0, -1) : forward;
115
+ }
116
+ /**
117
+ * Pfad von `path` relativ zur absoluten Wurzel `root`; `null`, wenn `path`
118
+ * nicht darunter liegt. Beide Angaben sind absolut.
119
+ */
120
+ export function relativeToRoot(root, path) {
121
+ const normalizedRoot = normalizeSeparators(root);
122
+ const normalizedPath = normalizeSeparators(path);
123
+ if (normalizedPath === normalizedRoot) {
124
+ return "";
125
+ }
126
+ const prefix = normalizedRoot.endsWith("/") ? normalizedRoot : `${normalizedRoot}/`;
127
+ return normalizedPath.startsWith(prefix) ? normalizedPath.slice(prefix.length) : null;
128
+ }
129
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Ablage des Dateigraphen ueber den BESTEHENDEN `GraphStore`-Port
3
+ * (domain `ports.ts`, architecture.md §6.11, §11.6).
4
+ *
5
+ * ENTSCHEIDUNG: Dieses Paket definiert KEINEN eigenen Speicher-Port. Der
6
+ * `GraphStore` von `domain` hat mit `graph_files`, `graph_indices` und
7
+ * `graph_meta` genau die drei Sammlungen, die ein Dateigraph braucht, und es
8
+ * gibt bereits eine Kontraktsuite (`@untangle-code/testkit`,
9
+ * `runGraphStoreContract`) plus zwei Adapter dagegen. Ein zweiter Port haette
10
+ * dieselbe Semantik ein zweites Mal beschrieben und beide Adapter zur
11
+ * Doppelimplementierung gezwungen.
12
+ *
13
+ * SHARD-AUFTEILUNG:
14
+ * - `graph_meta` / `<workspace>:meta` — Metriken, Topologie, Skip-Ledger, Knotenzahl;
15
+ * - `graph_files` / `<workspace>:file:<file_id>` — ein Knoten samt seiner Kanten;
16
+ * - `graph_indices` / `<workspace>:by-path` — Repository + Pfad → `file_id`.
17
+ *
18
+ * Ein Shard je Datei (statt eines Riesenshards) ist Absicht: die inkrementelle
19
+ * Fortschreibung schreibt dann genau die Dateien zurueck, die sie neu gerechnet
20
+ * hat.
21
+ */
22
+ import type { GraphShardV1, GraphStore, PortCallOptions } from "@untangle-code/domain";
23
+ import type { FileGraphSnapshotV1 } from "./types.js";
24
+ /** Vor Wave 8 verwendete globale Metadaten-ID; nur fuer expliziten Legacy-Fallback. */
25
+ export declare const META_SHARD_ID = "meta";
26
+ /** Vor Wave 8 verwendete globale Pfadindex-ID; nur fuer expliziten Legacy-Fallback. */
27
+ export declare const PATH_INDEX_SHARD_ID = "by-path";
28
+ /** Versionierter Praefix der workspace-sicheren Dateigraph-Shards. */
29
+ export declare const FILE_GRAPH_SHARD_NAMESPACE = "untangle:file-graph:v1";
30
+ /** Der vollstaendige Geltungsbereich eines persistierten Graphabbilds. */
31
+ export interface GraphSnapshotScope {
32
+ workspaceId: string;
33
+ generationId: string;
34
+ }
35
+ /** Opt-in fuer das Lesen vor Wave 8 erzeugter, nicht namespaceter Shards. */
36
+ export interface GraphSnapshotReadOptions extends PortCallOptions {
37
+ /**
38
+ * Nur ein explizites `true` aktiviert den Legacy-Pfad. Auch dann wird der
39
+ * gelesene Payload strikt gegen `workspaceId` UND `generationId` geprueft.
40
+ */
41
+ allowLegacyFallback?: boolean;
42
+ }
43
+ /** Praefix aller Dateigraph-Shards eines Workspace. */
44
+ export declare function fileGraphWorkspaceShardPrefix(workspaceId: string): string;
45
+ /** Namespacete ID des Metadaten-Shards. */
46
+ export declare function fileGraphMetaShardId(workspaceId: string): string;
47
+ /** Namespacete ID des Pfadindex-Shards. */
48
+ export declare function fileGraphPathIndexShardId(workspaceId: string): string;
49
+ /** Namespacete ID eines Datei-Shards. */
50
+ export declare function fileGraphFileShardId(workspaceId: string, fileId: string): string;
51
+ /** Erzeugt alle Shards eines Abbilds, in stabiler Reihenfolge. */
52
+ export declare function toGraphShards(snapshot: FileGraphSnapshotV1, writeId: string): GraphShardV1[];
53
+ /** Schreibt ein vollstaendiges Abbild in den Speicher. */
54
+ export declare function writeGraphSnapshot(store: GraphStore, snapshot: FileGraphSnapshotV1, writeId: string, options?: PortCallOptions): Promise<void>;
55
+ /**
56
+ * Fehler beim Zurueckladen — als Wert, damit der Aufrufer ihn ins Ledger legen
57
+ * kann.
58
+ *
59
+ * `missing_path_index` und `count_mismatch` sind KEINE Zierde: ohne sie
60
+ * verlaeuft der haeufigste Verlustfall (ein Datei-Shard ist nicht mehr da und
61
+ * wird deshalb auch nicht mehr aufgezaehlt) voellig geraeuschlos. Der
62
+ * Pfadindex und die im Metadaten-Shard mitgeschriebenen Sollzahlen sind die
63
+ * beiden unabhaengigen Zeugen dafuer, WIE VIEL da sein muesste.
64
+ */
65
+ export interface SnapshotReadIssue {
66
+ kind: "missing_meta" | "missing_path_index" | "missing_file_shard" | "malformed_payload" | "count_mismatch" | "workspace_scope_required" | "scope_mismatch";
67
+ message: string;
68
+ }
69
+ export interface SnapshotReadResult {
70
+ snapshot: FileGraphSnapshotV1 | null;
71
+ issues: SnapshotReadIssue[];
72
+ }
73
+ /**
74
+ * Laedt ein Abbild fuer GENAU einen Workspace und GENAU eine Generation.
75
+ *
76
+ * Die alte Signatur `(store, generationId)` bleibt absichtlich typkompatibel,
77
+ * liest aber nichts mehr: ohne Workspace kann kein gespeicherter Graph sicher
78
+ * zugeordnet werden. Alte, globale Shards werden nur ueber
79
+ * `allowLegacyFallback: true` gelesen, nachdem ein vollstaendiger Scope
80
+ * angegeben wurde; jeder Payload wird dabei gegen diesen Scope geprueft.
81
+ */
82
+ export declare function readGraphSnapshot(store: GraphStore, scope: GraphSnapshotScope | string, options?: GraphSnapshotReadOptions): Promise<SnapshotReadResult>;
83
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAGV,YAAY,EACZ,UAAU,EACV,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAK/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,uFAAuF;AACvF,eAAO,MAAM,aAAa,SAAS,CAAC;AACpC,uFAAuF;AACvF,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAC7C,sEAAsE;AACtE,eAAO,MAAM,0BAA0B,2BAA2B,CAAC;AAEnE,0EAA0E;AAC1E,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,6EAA6E;AAC7E,MAAM,WAAW,wBAAyB,SAAQ,eAAe;IAC/D;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,uDAAuD;AACvD,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAGzE;AAED,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,2CAA2C;AAC3C,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,yCAAyC;AACzC,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGhF;AAED,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAsF5F;AAED,0DAA0D;AAC1D,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EACA,cAAc,GACd,oBAAoB,GACpB,oBAAoB,GACpB,mBAAmB,GACnB,gBAAgB,GAChB,0BAA0B,GAC1B,gBAAgB,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAgDD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,kBAAkB,GAAG,MAAM,EAClC,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,kBAAkB,CAAC,CA4C7B"}