@unlimitechcloud/devlink 1.0.2

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 (186) hide show
  1. package/AGENTS.md +880 -0
  2. package/LICENSE +21 -0
  3. package/README.md +335 -0
  4. package/dist/__tests__/e2e.spec.d.ts +8 -0
  5. package/dist/__tests__/e2e.spec.d.ts.map +1 -0
  6. package/dist/__tests__/e2e.spec.js +253 -0
  7. package/dist/__tests__/e2e.spec.js.map +1 -0
  8. package/dist/__tests__/integration.spec.d.ts +8 -0
  9. package/dist/__tests__/integration.spec.d.ts.map +1 -0
  10. package/dist/__tests__/integration.spec.js +274 -0
  11. package/dist/__tests__/integration.spec.js.map +1 -0
  12. package/dist/cli.d.ts +6 -0
  13. package/dist/cli.d.ts.map +1 -0
  14. package/dist/cli.js +610 -0
  15. package/dist/cli.js.map +1 -0
  16. package/dist/commands/consumers.d.ts +37 -0
  17. package/dist/commands/consumers.d.ts.map +1 -0
  18. package/dist/commands/consumers.js +107 -0
  19. package/dist/commands/consumers.js.map +1 -0
  20. package/dist/commands/docs.d.ts +59 -0
  21. package/dist/commands/docs.d.ts.map +1 -0
  22. package/dist/commands/docs.js +262 -0
  23. package/dist/commands/docs.js.map +1 -0
  24. package/dist/commands/docs.spec.d.ts +5 -0
  25. package/dist/commands/docs.spec.d.ts.map +1 -0
  26. package/dist/commands/docs.spec.js +213 -0
  27. package/dist/commands/docs.spec.js.map +1 -0
  28. package/dist/commands/index.d.ts +13 -0
  29. package/dist/commands/index.d.ts.map +1 -0
  30. package/dist/commands/index.js +13 -0
  31. package/dist/commands/index.js.map +1 -0
  32. package/dist/commands/install.d.ts +31 -0
  33. package/dist/commands/install.d.ts.map +1 -0
  34. package/dist/commands/install.js +234 -0
  35. package/dist/commands/install.js.map +1 -0
  36. package/dist/commands/list.d.ts +22 -0
  37. package/dist/commands/list.d.ts.map +1 -0
  38. package/dist/commands/list.js +45 -0
  39. package/dist/commands/list.js.map +1 -0
  40. package/dist/commands/list.spec.d.ts +5 -0
  41. package/dist/commands/list.spec.d.ts.map +1 -0
  42. package/dist/commands/list.spec.js +95 -0
  43. package/dist/commands/list.spec.js.map +1 -0
  44. package/dist/commands/prune.d.ts +27 -0
  45. package/dist/commands/prune.d.ts.map +1 -0
  46. package/dist/commands/prune.js +74 -0
  47. package/dist/commands/prune.js.map +1 -0
  48. package/dist/commands/publish.d.ts +16 -0
  49. package/dist/commands/publish.d.ts.map +1 -0
  50. package/dist/commands/publish.js +225 -0
  51. package/dist/commands/publish.js.map +1 -0
  52. package/dist/commands/publish.spec.d.ts +5 -0
  53. package/dist/commands/publish.spec.d.ts.map +1 -0
  54. package/dist/commands/publish.spec.js +98 -0
  55. package/dist/commands/publish.spec.js.map +1 -0
  56. package/dist/commands/push.d.ts +16 -0
  57. package/dist/commands/push.d.ts.map +1 -0
  58. package/dist/commands/push.js +164 -0
  59. package/dist/commands/push.js.map +1 -0
  60. package/dist/commands/remove.d.ts +24 -0
  61. package/dist/commands/remove.d.ts.map +1 -0
  62. package/dist/commands/remove.js +80 -0
  63. package/dist/commands/remove.js.map +1 -0
  64. package/dist/commands/remove.spec.d.ts +5 -0
  65. package/dist/commands/remove.spec.d.ts.map +1 -0
  66. package/dist/commands/remove.spec.js +87 -0
  67. package/dist/commands/remove.spec.js.map +1 -0
  68. package/dist/commands/resolve.d.ts +20 -0
  69. package/dist/commands/resolve.d.ts.map +1 -0
  70. package/dist/commands/resolve.js +52 -0
  71. package/dist/commands/resolve.js.map +1 -0
  72. package/dist/commands/resolve.spec.d.ts +5 -0
  73. package/dist/commands/resolve.spec.d.ts.map +1 -0
  74. package/dist/commands/resolve.spec.js +87 -0
  75. package/dist/commands/resolve.spec.js.map +1 -0
  76. package/dist/commands/verify.d.ts +32 -0
  77. package/dist/commands/verify.d.ts.map +1 -0
  78. package/dist/commands/verify.js +127 -0
  79. package/dist/commands/verify.js.map +1 -0
  80. package/dist/config.d.ts +22 -0
  81. package/dist/config.d.ts.map +1 -0
  82. package/dist/config.js +70 -0
  83. package/dist/config.js.map +1 -0
  84. package/dist/constants.d.ts +65 -0
  85. package/dist/constants.d.ts.map +1 -0
  86. package/dist/constants.js +116 -0
  87. package/dist/constants.js.map +1 -0
  88. package/dist/constants.spec.d.ts +5 -0
  89. package/dist/constants.spec.d.ts.map +1 -0
  90. package/dist/constants.spec.js +72 -0
  91. package/dist/constants.spec.js.map +1 -0
  92. package/dist/core/index.d.ts +9 -0
  93. package/dist/core/index.d.ts.map +1 -0
  94. package/dist/core/index.js +9 -0
  95. package/dist/core/index.js.map +1 -0
  96. package/dist/core/installations.d.ts +79 -0
  97. package/dist/core/installations.d.ts.map +1 -0
  98. package/dist/core/installations.js +207 -0
  99. package/dist/core/installations.js.map +1 -0
  100. package/dist/core/installations.spec.d.ts +5 -0
  101. package/dist/core/installations.spec.d.ts.map +1 -0
  102. package/dist/core/installations.spec.js +261 -0
  103. package/dist/core/installations.spec.js.map +1 -0
  104. package/dist/core/lock.d.ts +37 -0
  105. package/dist/core/lock.d.ts.map +1 -0
  106. package/dist/core/lock.js +198 -0
  107. package/dist/core/lock.js.map +1 -0
  108. package/dist/core/lock.spec.d.ts +5 -0
  109. package/dist/core/lock.spec.d.ts.map +1 -0
  110. package/dist/core/lock.spec.js +161 -0
  111. package/dist/core/lock.spec.js.map +1 -0
  112. package/dist/core/registry.d.ts +80 -0
  113. package/dist/core/registry.d.ts.map +1 -0
  114. package/dist/core/registry.js +231 -0
  115. package/dist/core/registry.js.map +1 -0
  116. package/dist/core/registry.spec.d.ts +5 -0
  117. package/dist/core/registry.spec.d.ts.map +1 -0
  118. package/dist/core/registry.spec.js +281 -0
  119. package/dist/core/registry.spec.js.map +1 -0
  120. package/dist/core/resolver.d.ts +55 -0
  121. package/dist/core/resolver.d.ts.map +1 -0
  122. package/dist/core/resolver.js +127 -0
  123. package/dist/core/resolver.js.map +1 -0
  124. package/dist/core/resolver.spec.d.ts +5 -0
  125. package/dist/core/resolver.spec.d.ts.map +1 -0
  126. package/dist/core/resolver.spec.js +202 -0
  127. package/dist/core/resolver.spec.js.map +1 -0
  128. package/dist/core/store.d.ts +65 -0
  129. package/dist/core/store.d.ts.map +1 -0
  130. package/dist/core/store.js +245 -0
  131. package/dist/core/store.js.map +1 -0
  132. package/dist/core/store.spec.d.ts +5 -0
  133. package/dist/core/store.spec.d.ts.map +1 -0
  134. package/dist/core/store.spec.js +195 -0
  135. package/dist/core/store.spec.js.map +1 -0
  136. package/dist/formatters/flat.d.ts +41 -0
  137. package/dist/formatters/flat.d.ts.map +1 -0
  138. package/dist/formatters/flat.js +131 -0
  139. package/dist/formatters/flat.js.map +1 -0
  140. package/dist/formatters/flat.spec.d.ts +5 -0
  141. package/dist/formatters/flat.spec.d.ts.map +1 -0
  142. package/dist/formatters/flat.spec.js +130 -0
  143. package/dist/formatters/flat.spec.js.map +1 -0
  144. package/dist/formatters/index.d.ts +6 -0
  145. package/dist/formatters/index.d.ts.map +1 -0
  146. package/dist/formatters/index.js +6 -0
  147. package/dist/formatters/index.js.map +1 -0
  148. package/dist/formatters/tree.d.ts +29 -0
  149. package/dist/formatters/tree.d.ts.map +1 -0
  150. package/dist/formatters/tree.js +256 -0
  151. package/dist/formatters/tree.js.map +1 -0
  152. package/dist/formatters/tree.spec.d.ts +5 -0
  153. package/dist/formatters/tree.spec.d.ts.map +1 -0
  154. package/dist/formatters/tree.spec.js +127 -0
  155. package/dist/formatters/tree.spec.js.map +1 -0
  156. package/dist/index.d.ts +11 -0
  157. package/dist/index.d.ts.map +1 -0
  158. package/dist/index.js +13 -0
  159. package/dist/index.js.map +1 -0
  160. package/dist/installer.d.ts +13 -0
  161. package/dist/installer.d.ts.map +1 -0
  162. package/dist/installer.js +171 -0
  163. package/dist/installer.js.map +1 -0
  164. package/dist/store.d.ts +78 -0
  165. package/dist/store.d.ts.map +1 -0
  166. package/dist/store.js +344 -0
  167. package/dist/store.js.map +1 -0
  168. package/dist/types.d.ts +235 -0
  169. package/dist/types.d.ts.map +1 -0
  170. package/dist/types.js +5 -0
  171. package/dist/types.js.map +1 -0
  172. package/docs/README.md +68 -0
  173. package/docs/inspection/consumers.md +178 -0
  174. package/docs/inspection/list.md +182 -0
  175. package/docs/inspection/resolve.md +172 -0
  176. package/docs/installation/configuration.md +238 -0
  177. package/docs/installation/install.md +184 -0
  178. package/docs/maintenance/prune.md +159 -0
  179. package/docs/maintenance/remove.md +174 -0
  180. package/docs/maintenance/verify.md +174 -0
  181. package/docs/publishing/publish.md +146 -0
  182. package/docs/publishing/push.md +146 -0
  183. package/docs/store/locking.md +118 -0
  184. package/docs/store/namespaces.md +141 -0
  185. package/docs/store/structure.md +163 -0
  186. package/package.json +58 -0
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Installations - Tracking de proyectos consumidores
3
+ */
4
+ import fs from "fs/promises";
5
+ import path from "path";
6
+ import { getStorePath, getInstallationsPath, INSTALLATIONS_VERSION, } from "../constants.js";
7
+ /**
8
+ * Create empty installations
9
+ */
10
+ export function createEmptyInstallations() {
11
+ return {
12
+ version: INSTALLATIONS_VERSION,
13
+ projects: {},
14
+ };
15
+ }
16
+ /**
17
+ * Read installations from disk
18
+ * Returns empty installations if file doesn't exist
19
+ */
20
+ export async function readInstallations() {
21
+ const installationsPath = getInstallationsPath();
22
+ try {
23
+ const content = await fs.readFile(installationsPath, "utf-8");
24
+ return JSON.parse(content);
25
+ }
26
+ catch (error) {
27
+ if (error.code === "ENOENT") {
28
+ return createEmptyInstallations();
29
+ }
30
+ throw error;
31
+ }
32
+ }
33
+ /**
34
+ * Write installations to disk (atomic write)
35
+ */
36
+ export async function writeInstallations(installations) {
37
+ const installationsPath = getInstallationsPath();
38
+ const storePath = getStorePath();
39
+ // Ensure store directory exists
40
+ await fs.mkdir(storePath, { recursive: true });
41
+ // Write to temp file first, then rename (atomic)
42
+ const tempPath = `${installationsPath}.tmp`;
43
+ await fs.writeFile(tempPath, JSON.stringify(installations, null, 2));
44
+ await fs.rename(tempPath, installationsPath);
45
+ }
46
+ /**
47
+ * Normalize project path for consistent keys
48
+ */
49
+ export function normalizeProjectPath(projectPath) {
50
+ return path.resolve(projectPath);
51
+ }
52
+ /**
53
+ * Register or update a project's installed packages
54
+ */
55
+ export function registerProject(installations, projectPath, packages) {
56
+ const normalizedPath = normalizeProjectPath(projectPath);
57
+ if (!installations.projects[normalizedPath]) {
58
+ installations.projects[normalizedPath] = {
59
+ registered: new Date().toISOString(),
60
+ packages: {},
61
+ };
62
+ }
63
+ // Merge packages
64
+ installations.projects[normalizedPath].packages = {
65
+ ...installations.projects[normalizedPath].packages,
66
+ ...packages,
67
+ };
68
+ }
69
+ /**
70
+ * Update a single package in a project
71
+ */
72
+ export function updateProjectPackage(installations, projectPath, packageName, info) {
73
+ const normalizedPath = normalizeProjectPath(projectPath);
74
+ if (!installations.projects[normalizedPath]) {
75
+ installations.projects[normalizedPath] = {
76
+ registered: new Date().toISOString(),
77
+ packages: {},
78
+ };
79
+ }
80
+ installations.projects[normalizedPath].packages[packageName] = info;
81
+ }
82
+ /**
83
+ * Unregister a project completely
84
+ */
85
+ export function unregisterProject(installations, projectPath) {
86
+ const normalizedPath = normalizeProjectPath(projectPath);
87
+ if (!installations.projects[normalizedPath]) {
88
+ return false;
89
+ }
90
+ delete installations.projects[normalizedPath];
91
+ return true;
92
+ }
93
+ /**
94
+ * Remove a package from a project
95
+ */
96
+ export function removePackageFromProject(installations, projectPath, packageName) {
97
+ const normalizedPath = normalizeProjectPath(projectPath);
98
+ const project = installations.projects[normalizedPath];
99
+ if (!project || !project.packages[packageName]) {
100
+ return false;
101
+ }
102
+ delete project.packages[packageName];
103
+ // Clean up empty project
104
+ if (Object.keys(project.packages).length === 0) {
105
+ delete installations.projects[normalizedPath];
106
+ }
107
+ return true;
108
+ }
109
+ /**
110
+ * Get all projects that consume a specific package
111
+ */
112
+ export function getConsumers(installations, packageName, options) {
113
+ const consumers = [];
114
+ for (const [projectPath, project] of Object.entries(installations.projects)) {
115
+ const pkgInfo = project.packages[packageName];
116
+ if (!pkgInfo)
117
+ continue;
118
+ // Filter by namespace if specified
119
+ if (options?.namespace && pkgInfo.namespace !== options.namespace) {
120
+ continue;
121
+ }
122
+ // Filter by version if specified
123
+ if (options?.version && pkgInfo.version !== options.version) {
124
+ continue;
125
+ }
126
+ consumers.push({ projectPath, info: pkgInfo });
127
+ }
128
+ return consumers;
129
+ }
130
+ /**
131
+ * Get all consumers in a specific namespace
132
+ */
133
+ export function getConsumersByNamespace(installations, namespace) {
134
+ const results = [];
135
+ for (const [projectPath, project] of Object.entries(installations.projects)) {
136
+ const matchingPackages = {};
137
+ for (const [pkgName, pkgInfo] of Object.entries(project.packages)) {
138
+ if (pkgInfo.namespace === namespace) {
139
+ matchingPackages[pkgName] = pkgInfo;
140
+ }
141
+ }
142
+ if (Object.keys(matchingPackages).length > 0) {
143
+ results.push({ projectPath, packages: matchingPackages });
144
+ }
145
+ }
146
+ return results;
147
+ }
148
+ /**
149
+ * Check if a project path exists on disk
150
+ */
151
+ async function projectExists(projectPath) {
152
+ try {
153
+ const stat = await fs.stat(projectPath);
154
+ return stat.isDirectory();
155
+ }
156
+ catch {
157
+ return false;
158
+ }
159
+ }
160
+ /**
161
+ * Prune dead projects (projects that no longer exist on disk)
162
+ * Returns list of removed project paths
163
+ */
164
+ export async function pruneDeadProjects(installations) {
165
+ const removed = [];
166
+ for (const projectPath of Object.keys(installations.projects)) {
167
+ if (!(await projectExists(projectPath))) {
168
+ delete installations.projects[projectPath];
169
+ removed.push(projectPath);
170
+ }
171
+ }
172
+ return removed;
173
+ }
174
+ /**
175
+ * Get all registered projects
176
+ */
177
+ export function getAllProjects(installations) {
178
+ return Object.keys(installations.projects).sort();
179
+ }
180
+ /**
181
+ * Get project entry
182
+ */
183
+ export function getProject(installations, projectPath) {
184
+ const normalizedPath = normalizeProjectPath(projectPath);
185
+ return installations.projects[normalizedPath] || null;
186
+ }
187
+ /**
188
+ * Get total project count
189
+ */
190
+ export function getTotalProjectCount(installations) {
191
+ return Object.keys(installations.projects).length;
192
+ }
193
+ /**
194
+ * Get all unique packages across all projects
195
+ */
196
+ export function getAllInstalledPackages(installations) {
197
+ const packageMap = new Map();
198
+ for (const project of Object.values(installations.projects)) {
199
+ for (const pkgName of Object.keys(project.packages)) {
200
+ packageMap.set(pkgName, (packageMap.get(pkgName) || 0) + 1);
201
+ }
202
+ }
203
+ return Array.from(packageMap.entries())
204
+ .map(([packageName, consumers]) => ({ packageName, consumers }))
205
+ .sort((a, b) => a.packageName.localeCompare(b.packageName));
206
+ }
207
+ //# sourceMappingURL=installations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installations.js","sourceRoot":"","sources":["../../src/core/installations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Installations - Unit tests
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=installations.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installations.spec.d.ts","sourceRoot":"","sources":["../../src/core/installations.spec.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,261 @@
1
+ /**
2
+ * Installations - Unit tests
3
+ */
4
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
5
+ import fs from "fs/promises";
6
+ import path from "path";
7
+ import os from "os";
8
+ import { createEmptyInstallations, readInstallations, writeInstallations, normalizeProjectPath, registerProject, updateProjectPackage, unregisterProject, removePackageFromProject, getConsumers, getConsumersByNamespace, pruneDeadProjects, getAllProjects, getTotalProjectCount, getAllInstalledPackages, } from "./installations.js";
9
+ const TEST_STORE_PATH = path.join(os.tmpdir(), "devlink-installations-test-" + Date.now());
10
+ const TEST_PROJECT_PATH = path.join(os.tmpdir(), "devlink-test-project-" + Date.now());
11
+ vi.mock("../constants.js", () => ({
12
+ getStorePath: () => TEST_STORE_PATH,
13
+ getInstallationsPath: () => path.join(TEST_STORE_PATH, "installations.json"),
14
+ INSTALLATIONS_VERSION: "1.0.0",
15
+ }));
16
+ describe("Installations", () => {
17
+ beforeEach(async () => {
18
+ await fs.mkdir(TEST_STORE_PATH, { recursive: true });
19
+ await fs.mkdir(TEST_PROJECT_PATH, { recursive: true });
20
+ });
21
+ afterEach(async () => {
22
+ await fs.rm(TEST_STORE_PATH, { recursive: true, force: true });
23
+ await fs.rm(TEST_PROJECT_PATH, { recursive: true, force: true });
24
+ });
25
+ describe("createEmptyInstallations", () => {
26
+ it("should create empty installations", () => {
27
+ const installations = createEmptyInstallations();
28
+ expect(installations.version).toBe("1.0.0");
29
+ expect(installations.projects).toEqual({});
30
+ });
31
+ });
32
+ describe("readInstallations / writeInstallations", () => {
33
+ it("should return empty installations when file doesn't exist", async () => {
34
+ const installations = await readInstallations();
35
+ expect(installations.version).toBe("1.0.0");
36
+ expect(installations.projects).toEqual({});
37
+ });
38
+ it("should write and read installations", async () => {
39
+ const installations = createEmptyInstallations();
40
+ installations.projects["/test/project"] = {
41
+ registered: "2026-02-12T10:00:00Z",
42
+ packages: {},
43
+ };
44
+ await writeInstallations(installations);
45
+ const read = await readInstallations();
46
+ expect(read.projects["/test/project"]).toBeDefined();
47
+ });
48
+ });
49
+ describe("normalizeProjectPath", () => {
50
+ it("should resolve relative paths", () => {
51
+ const normalized = normalizeProjectPath("./project");
52
+ expect(path.isAbsolute(normalized)).toBe(true);
53
+ });
54
+ it("should keep absolute paths", () => {
55
+ const normalized = normalizeProjectPath("/absolute/path");
56
+ expect(normalized).toBe("/absolute/path");
57
+ });
58
+ });
59
+ describe("registerProject", () => {
60
+ it("should register new project", () => {
61
+ const installations = createEmptyInstallations();
62
+ const packages = {
63
+ "pkg": {
64
+ version: "1.0.0",
65
+ namespace: "global",
66
+ signature: "abc123",
67
+ installedAt: "2026-02-12T10:00:00Z",
68
+ },
69
+ };
70
+ registerProject(installations, "/test/project", packages);
71
+ const normalized = normalizeProjectPath("/test/project");
72
+ expect(installations.projects[normalized]).toBeDefined();
73
+ expect(installations.projects[normalized].packages.pkg).toBeDefined();
74
+ });
75
+ it("should merge packages for existing project", () => {
76
+ const installations = createEmptyInstallations();
77
+ registerProject(installations, "/test/project", {
78
+ "pkg1": {
79
+ version: "1.0.0",
80
+ namespace: "global",
81
+ signature: "abc123",
82
+ installedAt: "2026-02-12T10:00:00Z",
83
+ },
84
+ });
85
+ registerProject(installations, "/test/project", {
86
+ "pkg2": {
87
+ version: "2.0.0",
88
+ namespace: "global",
89
+ signature: "def456",
90
+ installedAt: "2026-02-12T11:00:00Z",
91
+ },
92
+ });
93
+ const normalized = normalizeProjectPath("/test/project");
94
+ expect(installations.projects[normalized].packages.pkg1).toBeDefined();
95
+ expect(installations.projects[normalized].packages.pkg2).toBeDefined();
96
+ });
97
+ });
98
+ describe("updateProjectPackage", () => {
99
+ it("should update single package", () => {
100
+ const installations = createEmptyInstallations();
101
+ updateProjectPackage(installations, "/test/project", "pkg", {
102
+ version: "1.0.0",
103
+ namespace: "global",
104
+ signature: "abc123",
105
+ installedAt: "2026-02-12T10:00:00Z",
106
+ });
107
+ const normalized = normalizeProjectPath("/test/project");
108
+ expect(installations.projects[normalized].packages.pkg.version).toBe("1.0.0");
109
+ });
110
+ it("should create project if not exists", () => {
111
+ const installations = createEmptyInstallations();
112
+ updateProjectPackage(installations, "/new/project", "pkg", {
113
+ version: "1.0.0",
114
+ namespace: "global",
115
+ signature: "abc123",
116
+ installedAt: "2026-02-12T10:00:00Z",
117
+ });
118
+ const normalized = normalizeProjectPath("/new/project");
119
+ expect(installations.projects[normalized]).toBeDefined();
120
+ });
121
+ });
122
+ describe("unregisterProject", () => {
123
+ it("should remove project", () => {
124
+ const installations = createEmptyInstallations();
125
+ registerProject(installations, "/test/project", {});
126
+ const removed = unregisterProject(installations, "/test/project");
127
+ expect(removed).toBe(true);
128
+ const normalized = normalizeProjectPath("/test/project");
129
+ expect(installations.projects[normalized]).toBeUndefined();
130
+ });
131
+ it("should return false for non-existent project", () => {
132
+ const installations = createEmptyInstallations();
133
+ const removed = unregisterProject(installations, "/nonexistent");
134
+ expect(removed).toBe(false);
135
+ });
136
+ });
137
+ describe("removePackageFromProject", () => {
138
+ it("should remove package from project", () => {
139
+ const installations = createEmptyInstallations();
140
+ registerProject(installations, "/test/project", {
141
+ "pkg1": { version: "1.0.0", namespace: "global", signature: "abc", installedAt: "2026-02-12T10:00:00Z" },
142
+ "pkg2": { version: "2.0.0", namespace: "global", signature: "def", installedAt: "2026-02-12T11:00:00Z" },
143
+ });
144
+ const removed = removePackageFromProject(installations, "/test/project", "pkg1");
145
+ expect(removed).toBe(true);
146
+ const normalized = normalizeProjectPath("/test/project");
147
+ expect(installations.projects[normalized].packages.pkg1).toBeUndefined();
148
+ expect(installations.projects[normalized].packages.pkg2).toBeDefined();
149
+ });
150
+ it("should clean up empty project", () => {
151
+ const installations = createEmptyInstallations();
152
+ registerProject(installations, "/test/project", {
153
+ "pkg": { version: "1.0.0", namespace: "global", signature: "abc", installedAt: "2026-02-12T10:00:00Z" },
154
+ });
155
+ removePackageFromProject(installations, "/test/project", "pkg");
156
+ const normalized = normalizeProjectPath("/test/project");
157
+ expect(installations.projects[normalized]).toBeUndefined();
158
+ });
159
+ });
160
+ describe("getConsumers", () => {
161
+ it("should find consumers of a package", () => {
162
+ const installations = createEmptyInstallations();
163
+ registerProject(installations, "/project1", {
164
+ "pkg": { version: "1.0.0", namespace: "global", signature: "abc", installedAt: "2026-02-12T10:00:00Z" },
165
+ });
166
+ registerProject(installations, "/project2", {
167
+ "pkg": { version: "1.0.0", namespace: "global", signature: "abc", installedAt: "2026-02-12T11:00:00Z" },
168
+ });
169
+ registerProject(installations, "/project3", {
170
+ "other": { version: "1.0.0", namespace: "global", signature: "def", installedAt: "2026-02-12T12:00:00Z" },
171
+ });
172
+ const consumers = getConsumers(installations, "pkg");
173
+ expect(consumers).toHaveLength(2);
174
+ });
175
+ it("should filter by namespace", () => {
176
+ const installations = createEmptyInstallations();
177
+ registerProject(installations, "/project1", {
178
+ "pkg": { version: "1.0.0", namespace: "global", signature: "abc", installedAt: "2026-02-12T10:00:00Z" },
179
+ });
180
+ registerProject(installations, "/project2", {
181
+ "pkg": { version: "1.0.0", namespace: "feature", signature: "def", installedAt: "2026-02-12T11:00:00Z" },
182
+ });
183
+ const consumers = getConsumers(installations, "pkg", { namespace: "global" });
184
+ expect(consumers).toHaveLength(1);
185
+ });
186
+ it("should filter by version", () => {
187
+ const installations = createEmptyInstallations();
188
+ registerProject(installations, "/project1", {
189
+ "pkg": { version: "1.0.0", namespace: "global", signature: "abc", installedAt: "2026-02-12T10:00:00Z" },
190
+ });
191
+ registerProject(installations, "/project2", {
192
+ "pkg": { version: "2.0.0", namespace: "global", signature: "def", installedAt: "2026-02-12T11:00:00Z" },
193
+ });
194
+ const consumers = getConsumers(installations, "pkg", { version: "1.0.0" });
195
+ expect(consumers).toHaveLength(1);
196
+ });
197
+ });
198
+ describe("getConsumersByNamespace", () => {
199
+ it("should find consumers by namespace", () => {
200
+ const installations = createEmptyInstallations();
201
+ registerProject(installations, "/project1", {
202
+ "pkg1": { version: "1.0.0", namespace: "global", signature: "abc", installedAt: "2026-02-12T10:00:00Z" },
203
+ "pkg2": { version: "1.0.0", namespace: "feature", signature: "def", installedAt: "2026-02-12T11:00:00Z" },
204
+ });
205
+ const consumers = getConsumersByNamespace(installations, "global");
206
+ expect(consumers).toHaveLength(1);
207
+ expect(Object.keys(consumers[0].packages)).toContain("pkg1");
208
+ expect(Object.keys(consumers[0].packages)).not.toContain("pkg2");
209
+ });
210
+ });
211
+ describe("pruneDeadProjects", () => {
212
+ it("should remove non-existent projects", async () => {
213
+ const installations = createEmptyInstallations();
214
+ registerProject(installations, TEST_PROJECT_PATH, {
215
+ "pkg": { version: "1.0.0", namespace: "global", signature: "abc", installedAt: "2026-02-12T10:00:00Z" },
216
+ });
217
+ registerProject(installations, "/nonexistent/project", {
218
+ "pkg": { version: "1.0.0", namespace: "global", signature: "def", installedAt: "2026-02-12T11:00:00Z" },
219
+ });
220
+ const removed = await pruneDeadProjects(installations);
221
+ expect(removed).toContain(normalizeProjectPath("/nonexistent/project"));
222
+ expect(installations.projects[normalizeProjectPath(TEST_PROJECT_PATH)]).toBeDefined();
223
+ });
224
+ });
225
+ describe("getAllProjects", () => {
226
+ it("should return all project paths sorted", () => {
227
+ const installations = createEmptyInstallations();
228
+ registerProject(installations, "/z/project", {});
229
+ registerProject(installations, "/a/project", {});
230
+ const projects = getAllProjects(installations);
231
+ expect(projects[0]).toBe(normalizeProjectPath("/a/project"));
232
+ expect(projects[1]).toBe(normalizeProjectPath("/z/project"));
233
+ });
234
+ });
235
+ describe("getTotalProjectCount", () => {
236
+ it("should count projects", () => {
237
+ const installations = createEmptyInstallations();
238
+ registerProject(installations, "/project1", {});
239
+ registerProject(installations, "/project2", {});
240
+ const count = getTotalProjectCount(installations);
241
+ expect(count).toBe(2);
242
+ });
243
+ });
244
+ describe("getAllInstalledPackages", () => {
245
+ it("should aggregate packages across projects", () => {
246
+ const installations = createEmptyInstallations();
247
+ registerProject(installations, "/project1", {
248
+ "pkg1": { version: "1.0.0", namespace: "global", signature: "abc", installedAt: "2026-02-12T10:00:00Z" },
249
+ "pkg2": { version: "1.0.0", namespace: "global", signature: "def", installedAt: "2026-02-12T11:00:00Z" },
250
+ });
251
+ registerProject(installations, "/project2", {
252
+ "pkg1": { version: "1.0.0", namespace: "global", signature: "abc", installedAt: "2026-02-12T12:00:00Z" },
253
+ });
254
+ const packages = getAllInstalledPackages(installations);
255
+ expect(packages).toHaveLength(2);
256
+ const pkg1 = packages.find(p => p.packageName === "pkg1");
257
+ expect(pkg1?.consumers).toBe(2);
258
+ });
259
+ });
260
+ });
261
+ //# sourceMappingURL=installations.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installations.spec.js","sourceRoot":"","sources":["../../src/core/installations.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Lock - File locking para serializar operaciones de escritura
3
+ */
4
+ import type { LockInfo, LockOptions, LockHandle } from "../types.js";
5
+ /**
6
+ * Write lock info to file
7
+ */
8
+ export declare function writeLockInfo(lockPath: string, info: LockInfo): Promise<void>;
9
+ /**
10
+ * Read lock info from file
11
+ */
12
+ export declare function readLockInfo(lockPath: string): Promise<LockInfo | null>;
13
+ /**
14
+ * Check if lock is stale (process dead or too old)
15
+ */
16
+ export declare function isLockStale(lockPath: string, staleTime: number): Promise<boolean>;
17
+ /**
18
+ * Acquire exclusive lock on the store
19
+ */
20
+ export declare function acquireLock(options?: Partial<LockOptions>): Promise<LockHandle>;
21
+ /**
22
+ * Execute operation with exclusive lock
23
+ */
24
+ export declare function withStoreLock<T>(operation: () => Promise<T>, options?: Partial<LockOptions>): Promise<T>;
25
+ /**
26
+ * Check if store is currently locked
27
+ */
28
+ export declare function isStoreLocked(): Promise<boolean>;
29
+ /**
30
+ * Get current lock info (if locked)
31
+ */
32
+ export declare function getCurrentLockInfo(): Promise<LockInfo | null>;
33
+ /**
34
+ * Force remove lock (use with caution)
35
+ */
36
+ export declare function forceRemoveLock(): Promise<void>;
37
+ //# sourceMappingURL=lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/core/lock.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAsBrE;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAO7E;AAcD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAoBlB;AAmBD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,GAAE,OAAO,CAAC,WAAW,CAAM,GACjC,OAAO,CAAC,UAAU,CAAC,CAwErB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAQtD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAGnE;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAOrD"}