@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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 UnlimitechCloud
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,335 @@
1
+ # @unlimitechcloud/devlink
2
+
3
+ A modern local package development and linking tool with namespace support, designed for monorepos and multi-project workflows.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@unlimitechcloud/devlink.svg)](https://www.npmjs.com/package/@unlimitechcloud/devlink)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+
8
+ ## Why DevLink?
9
+
10
+ When developing multiple packages locally, you need a way to test changes across projects without publishing to npm. DevLink provides:
11
+
12
+ - **Namespace isolation** - Different projects can use different versions or variants of the same package without conflicts
13
+ - **Multi-version support** - Test multiple versions of the same package simultaneously across different projects
14
+ - **Automatic consumer updates** - Push changes to all dependent projects with one command
15
+ - **Declarative configuration** - Define dependencies in a config file, not CLI flags
16
+
17
+ ## Installation
18
+
19
+ ```bash
20
+ # Global installation (recommended)
21
+ npm install -g @unlimitechcloud/devlink
22
+
23
+ # Or use with npx
24
+ npx @unlimitechcloud/devlink <command>
25
+ ```
26
+
27
+ ## Quick Start
28
+
29
+ ### 1. Publish Your Library
30
+
31
+ ```bash
32
+ cd my-library
33
+ devlink publish
34
+ ```
35
+
36
+ This copies your package to the DevLink store (`~/.devlink/namespaces/global/`).
37
+
38
+ ### 2. Configure Your Consumer Project
39
+
40
+ Create `devlink.config.mjs` in your project root:
41
+
42
+ ```javascript
43
+ export default {
44
+ packages: {
45
+ "@myorg/my-library": { dev: "1.0.0" },
46
+ "@myorg/utils": { dev: "2.0.0" },
47
+ },
48
+ dev: () => ({
49
+ manager: "store",
50
+ namespaces: ["global"],
51
+ }),
52
+ };
53
+ ```
54
+
55
+ ### 3. Install from Store
56
+
57
+ ```bash
58
+ cd my-project
59
+ devlink install --dev
60
+ ```
61
+
62
+ DevLink copies the packages from the store to your `node_modules`.
63
+
64
+ ### 4. Push Updates
65
+
66
+ After making changes to your library:
67
+
68
+ ```bash
69
+ cd my-library
70
+ devlink push
71
+ ```
72
+
73
+ This publishes the new version AND automatically updates all consumer projects.
74
+
75
+ ## Commands Reference
76
+
77
+ | Command | Description | Common Options |
78
+ |---------|-------------|----------------|
79
+ | `publish` | Publish package to the store | `-n, --namespace` |
80
+ | `push` | Publish and update all consumers | `-n, --namespace` |
81
+ | `install` | Install packages from store | `--dev`, `--prod`, `-n` |
82
+ | `list` | List packages in store | `-n`, `-p`, `--flat` |
83
+ | `resolve` | Debug package resolution | `-n, --namespaces` |
84
+ | `consumers` | List/manage consumer projects | `--prune` |
85
+ | `remove` | Remove packages or namespaces | `-n, --namespace` |
86
+ | `verify` | Check store integrity | `--fix` |
87
+ | `prune` | Remove orphaned packages | `--dry-run` |
88
+ | `docs` | Display embedded documentation | `<topic>` |
89
+
90
+ ### Command Details
91
+
92
+ #### `devlink publish`
93
+
94
+ Publishes the current package to the DevLink store.
95
+
96
+ ```bash
97
+ devlink publish # Publish to global namespace
98
+ devlink publish -n feature-v2 # Publish to feature-v2 namespace
99
+ devlink publish --repo ~/custom # Use custom store location
100
+ ```
101
+
102
+ #### `devlink push`
103
+
104
+ Publishes and automatically updates all consumer projects that use this package.
105
+
106
+ ```bash
107
+ devlink push # Publish and update consumers
108
+ devlink push -n feature-v2 # Push to specific namespace
109
+ ```
110
+
111
+ #### `devlink install`
112
+
113
+ Installs packages from the store based on your `devlink.config.mjs`.
114
+
115
+ ```bash
116
+ devlink install # Install using default mode
117
+ devlink install --dev # Force dev mode
118
+ devlink install --prod # Force prod mode
119
+ devlink install -n feature,global # Override namespace precedence
120
+ ```
121
+
122
+ #### `devlink list`
123
+
124
+ Lists all packages in the store.
125
+
126
+ ```bash
127
+ devlink list # Tree view by namespace
128
+ devlink list --flat # Flat output (for scripting)
129
+ devlink list -n global # Filter by namespace
130
+ devlink list -p @myorg # Filter by scope
131
+ devlink list -p @myorg/core # Filter by package
132
+ ```
133
+
134
+ #### `devlink resolve`
135
+
136
+ Shows how packages would be resolved given namespace precedence.
137
+
138
+ ```bash
139
+ devlink resolve @myorg/core@1.0.0
140
+ devlink resolve @myorg/core@1.0.0 -n feature,global
141
+ ```
142
+
143
+ #### `devlink consumers`
144
+
145
+ Lists projects that have installed packages from the store.
146
+
147
+ ```bash
148
+ devlink consumers # List all consumers
149
+ devlink consumers -p @myorg/core # Filter by package
150
+ devlink consumers --prune # Remove dead projects
151
+ ```
152
+
153
+ #### `devlink remove`
154
+
155
+ Removes packages, versions, or entire namespaces.
156
+
157
+ ```bash
158
+ devlink remove @myorg/core@1.0.0 # Remove specific version
159
+ devlink remove @myorg/core # Remove all versions
160
+ devlink remove feature-v2 # Remove entire namespace
161
+ ```
162
+
163
+ #### `devlink docs`
164
+
165
+ Access embedded documentation from the CLI.
166
+
167
+ ```bash
168
+ devlink docs # Show documentation tree
169
+ devlink docs agents # AI agent guide
170
+ devlink docs store/namespaces # Specific topic
171
+ ```
172
+
173
+ ## Configuration
174
+
175
+ ### `devlink.config.mjs`
176
+
177
+ ```javascript
178
+ export default {
179
+ // Packages to manage
180
+ packages: {
181
+ "@myorg/core": {
182
+ dev: "1.0.0", // Version for dev mode
183
+ prod: "1.0.0" // Version for prod mode (optional)
184
+ },
185
+ "@myorg/utils": { dev: "2.0.0" },
186
+ },
187
+
188
+ // Dev mode configuration
189
+ dev: () => ({
190
+ manager: "store", // Use DevLink store
191
+ namespaces: ["feature", "global"], // Namespace precedence
192
+ }),
193
+
194
+ // Prod mode configuration (optional)
195
+ prod: () => ({
196
+ manager: "npm", // Use npm registry
197
+ }),
198
+ };
199
+ ```
200
+
201
+ ### Global Options
202
+
203
+ ```bash
204
+ --repo <path> # Use custom store location (default: ~/.devlink)
205
+ -h, --help # Show help
206
+ -v, --version # Show version
207
+ ```
208
+
209
+ Environment variable: `DEVLINK_REPO` can also set the store location.
210
+
211
+ ## Namespaces
212
+
213
+ Namespaces allow different projects to use different variants of the same package without conflicts. Each namespace is an isolated context in the store:
214
+
215
+ ```bash
216
+ # Feature branch development
217
+ devlink publish -n feature-auth
218
+
219
+ # Team-specific packages
220
+ devlink publish -n team-platform
221
+
222
+ # Environment-specific
223
+ devlink publish -n staging
224
+ ```
225
+
226
+ **Use cases:**
227
+ - Test experimental changes in one project while others use stable versions
228
+ - Multiple developers working on different features of the same package
229
+ - A/B testing different implementations
230
+
231
+ Resolution follows namespace precedence:
232
+ ```javascript
233
+ namespaces: ["feature-auth", "global"]
234
+ // First looks in feature-auth, falls back to global
235
+ ```
236
+
237
+ ## Example Workflows
238
+
239
+ ### Feature Branch Development
240
+
241
+ ```bash
242
+ # Developer A: Working on auth feature
243
+ cd packages/auth
244
+ devlink publish -n feature-auth
245
+
246
+ # Developer B: Testing auth changes
247
+ # devlink.config.mjs: namespaces: ["feature-auth", "global"]
248
+ devlink install --dev
249
+
250
+ # After feature is merged
251
+ devlink publish # Publish to global
252
+ devlink remove feature-auth # Clean up
253
+ ```
254
+
255
+ ### Monorepo Development
256
+
257
+ ```bash
258
+ # Publish all packages
259
+ cd packages/core && devlink publish
260
+ cd packages/utils && devlink publish
261
+ cd packages/ui && devlink publish
262
+
263
+ # Consumer app
264
+ cd apps/web
265
+ devlink install --dev
266
+
267
+ # After changes to core
268
+ cd packages/core
269
+ devlink push # Updates apps/web automatically
270
+ ```
271
+
272
+ ## Use with AI Agents
273
+
274
+ DevLink includes comprehensive documentation for AI coding assistants. The `AGENTS.md` file provides a self-contained guide that AI agents can use to understand and operate DevLink.
275
+
276
+ ```bash
277
+ # View the AI agent guide
278
+ devlink docs agents
279
+
280
+ # Or read the file directly
281
+ cat AGENTS.md
282
+ ```
283
+
284
+ AI agents can use DevLink to:
285
+ - Publish local packages during development
286
+ - Install dependencies from the local store
287
+ - Push updates to consumer projects
288
+ - Manage namespaces for isolated testing
289
+
290
+ ## Store Structure
291
+
292
+ ```
293
+ ~/.devlink/
294
+ ├── namespaces/
295
+ │ ├── global/
296
+ │ │ └── @myorg/
297
+ │ │ └── core/
298
+ │ │ └── 1.0.0/
299
+ │ │ ├── package.json
300
+ │ │ └── dist/
301
+ │ └── feature-v2/
302
+ │ └── ...
303
+ ├── registry.json # Package index
304
+ ├── installations.json # Consumer tracking
305
+ └── .lock # File locking
306
+ ```
307
+
308
+ ## Documentation
309
+
310
+ 📚 **[Full Documentation](docs/README.md)**
311
+
312
+ - [Store Structure](docs/store/structure.md) - How the store is organized
313
+ - [Namespaces](docs/store/namespaces.md) - Isolation and precedence
314
+ - [Configuration](docs/installation/configuration.md) - Config file reference
315
+ - [File Locking](docs/store/locking.md) - Concurrent operation safety
316
+
317
+ ## Feedback
318
+
319
+ We welcome feedback, suggestions, and ideas for improvement. Please open an [issue](https://github.com/unlimitechcloud/devlink/issues) to share your thoughts.
320
+
321
+ Note: This project does not accept code contributions via pull requests.
322
+
323
+ ## About This Project
324
+
325
+ This tool was built following the principles defined in the whitepaper **"A Formal Definition of AI-First"** by [Unlimitech Cloud LLC](https://unlimitech.cloud).
326
+
327
+ 📄 [Read the Whitepaper](https://ulcl.link/whpp-ai-first) | [More Whitepapers](https://ulcl.link/whpp)
328
+
329
+ The whitepaper provides a formal functional definition that enables seamless integration with AI coding assistants and autonomous agents—making tools like DevLink naturally AI-ready.
330
+
331
+ This project represents Unlimitech Cloud LLC's commitment to knowledge sharing: contributing frameworks and practical tools that help organizations navigate complex challenges. We believe sharing knowledge openly strengthens the broader ecosystem and creates value for everyone.
332
+
333
+ ## License
334
+
335
+ MIT © [Unlimitech Cloud LLC](https://unlimitech.cloud)
@@ -0,0 +1,8 @@
1
+ /**
2
+ * E2E Tests - Verificación física del store
3
+ *
4
+ * Estos tests usan los fixtures reales y verifican la estructura
5
+ * física del store después de cada operación.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=e2e.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e.spec.d.ts","sourceRoot":"","sources":["../../src/__tests__/e2e.spec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,253 @@
1
+ /**
2
+ * E2E Tests - Verificación física del store
3
+ *
4
+ * Estos tests usan los fixtures reales y verifican la estructura
5
+ * física del store después de cada operación.
6
+ */
7
+ import { describe, it, expect, beforeAll, afterAll, beforeEach } from "vitest";
8
+ import fs from "fs/promises";
9
+ import path from "path";
10
+ import os from "os";
11
+ import { fileURLToPath } from "url";
12
+ // Get fixtures path relative to this file
13
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
14
+ const FIXTURES_PATH = path.resolve(__dirname, "../../fixtures/packages");
15
+ // Test store in temp directory
16
+ const TEST_STORE_PATH = path.join(os.tmpdir(), "devlink-e2e-" + Date.now());
17
+ // Import after setting up mocks would be complex, so we'll use dynamic imports
18
+ // and manually set environment or use the actual modules with a test store
19
+ describe("E2E: Store Operations", () => {
20
+ // Helper to get paths
21
+ const getStorePath = () => TEST_STORE_PATH;
22
+ const getNamespacesPath = () => path.join(TEST_STORE_PATH, "namespaces");
23
+ const getNamespacePath = (ns) => path.join(getNamespacesPath(), ns);
24
+ const getPackagePath = (ns, pkg, ver) => path.join(getNamespacePath(ns), pkg, ver);
25
+ const getRegistryPath = () => path.join(TEST_STORE_PATH, "registry.json");
26
+ beforeAll(async () => {
27
+ // Verify fixtures exist
28
+ const v1Path = path.join(FIXTURES_PATH, "@test/sample-lib-v1");
29
+ const v2Path = path.join(FIXTURES_PATH, "@test/sample-lib-v2");
30
+ const utilsPath = path.join(FIXTURES_PATH, "utils-helper");
31
+ await expect(fs.access(v1Path)).resolves.not.toThrow();
32
+ await expect(fs.access(v2Path)).resolves.not.toThrow();
33
+ await expect(fs.access(utilsPath)).resolves.not.toThrow();
34
+ });
35
+ beforeEach(async () => {
36
+ // Clean store before each test
37
+ await fs.rm(TEST_STORE_PATH, { recursive: true, force: true });
38
+ await fs.mkdir(TEST_STORE_PATH, { recursive: true });
39
+ });
40
+ afterAll(async () => {
41
+ // Cleanup
42
+ await fs.rm(TEST_STORE_PATH, { recursive: true, force: true });
43
+ });
44
+ describe("Fixture Verification", () => {
45
+ it("should have v1 fixture with correct structure", async () => {
46
+ const v1Path = path.join(FIXTURES_PATH, "@test/sample-lib-v1");
47
+ // Check package.json
48
+ const pkgJson = JSON.parse(await fs.readFile(path.join(v1Path, "package.json"), "utf-8"));
49
+ expect(pkgJson.name).toBe("@test/sample-lib");
50
+ expect(pkgJson.version).toBe("1.0.0");
51
+ // Check dist files
52
+ await expect(fs.access(path.join(v1Path, "dist/index.js"))).resolves.not.toThrow();
53
+ await expect(fs.access(path.join(v1Path, "dist/index.d.ts"))).resolves.not.toThrow();
54
+ });
55
+ it("should have v2 fixture with correct structure", async () => {
56
+ const v2Path = path.join(FIXTURES_PATH, "@test/sample-lib-v2");
57
+ const pkgJson = JSON.parse(await fs.readFile(path.join(v2Path, "package.json"), "utf-8"));
58
+ expect(pkgJson.name).toBe("@test/sample-lib");
59
+ expect(pkgJson.version).toBe("2.0.0");
60
+ // v2 should have more functions
61
+ const indexContent = await fs.readFile(path.join(v2Path, "dist/index.js"), "utf-8");
62
+ expect(indexContent).toContain("multiply");
63
+ expect(indexContent).toContain("subtract");
64
+ });
65
+ it("should have utils-helper fixture", async () => {
66
+ const utilsPath = path.join(FIXTURES_PATH, "utils-helper");
67
+ const pkgJson = JSON.parse(await fs.readFile(path.join(utilsPath, "package.json"), "utf-8"));
68
+ expect(pkgJson.name).toBe("utils-helper");
69
+ expect(pkgJson.version).toBe("1.0.0");
70
+ });
71
+ });
72
+ describe("Manual Store Operations", () => {
73
+ it("should create correct directory structure when publishing", async () => {
74
+ // Simulate what publish does manually
75
+ const ns = "global";
76
+ const pkg = "@test/sample-lib";
77
+ const version = "1.0.0";
78
+ const sourcePath = path.join(FIXTURES_PATH, "@test/sample-lib-v1");
79
+ const destPath = getPackagePath(ns, pkg, version);
80
+ // Create namespace directory
81
+ await fs.mkdir(destPath, { recursive: true });
82
+ // Copy files
83
+ const files = ["package.json", "dist/index.js", "dist/index.d.ts"];
84
+ for (const file of files) {
85
+ const src = path.join(sourcePath, file);
86
+ const dest = path.join(destPath, file);
87
+ await fs.mkdir(path.dirname(dest), { recursive: true });
88
+ await fs.copyFile(src, dest);
89
+ }
90
+ // Verify structure
91
+ const expectedStructure = [
92
+ "namespaces/global/@test/sample-lib/1.0.0/package.json",
93
+ "namespaces/global/@test/sample-lib/1.0.0/dist/index.js",
94
+ "namespaces/global/@test/sample-lib/1.0.0/dist/index.d.ts",
95
+ ];
96
+ for (const expectedPath of expectedStructure) {
97
+ const fullPath = path.join(TEST_STORE_PATH, expectedPath);
98
+ await expect(fs.access(fullPath)).resolves.not.toThrow();
99
+ }
100
+ });
101
+ it("should support multiple versions of same package", async () => {
102
+ const ns = "global";
103
+ const pkg = "@test/sample-lib";
104
+ // Publish v1
105
+ const v1Source = path.join(FIXTURES_PATH, "@test/sample-lib-v1");
106
+ const v1Dest = getPackagePath(ns, pkg, "1.0.0");
107
+ await fs.mkdir(v1Dest, { recursive: true });
108
+ await fs.copyFile(path.join(v1Source, "package.json"), path.join(v1Dest, "package.json"));
109
+ // Publish v2
110
+ const v2Source = path.join(FIXTURES_PATH, "@test/sample-lib-v2");
111
+ const v2Dest = getPackagePath(ns, pkg, "2.0.0");
112
+ await fs.mkdir(v2Dest, { recursive: true });
113
+ await fs.copyFile(path.join(v2Source, "package.json"), path.join(v2Dest, "package.json"));
114
+ // Verify both versions exist
115
+ const v1PkgJson = JSON.parse(await fs.readFile(path.join(v1Dest, "package.json"), "utf-8"));
116
+ const v2PkgJson = JSON.parse(await fs.readFile(path.join(v2Dest, "package.json"), "utf-8"));
117
+ expect(v1PkgJson.version).toBe("1.0.0");
118
+ expect(v2PkgJson.version).toBe("2.0.0");
119
+ // List versions in directory
120
+ const pkgDir = path.join(getNamespacePath(ns), pkg);
121
+ const versions = await fs.readdir(pkgDir);
122
+ expect(versions).toContain("1.0.0");
123
+ expect(versions).toContain("2.0.0");
124
+ });
125
+ it("should support same package in different namespaces", async () => {
126
+ const pkg = "@test/sample-lib";
127
+ const version = "1.0.0";
128
+ const source = path.join(FIXTURES_PATH, "@test/sample-lib-v1");
129
+ // Publish to global
130
+ const globalDest = getPackagePath("global", pkg, version);
131
+ await fs.mkdir(globalDest, { recursive: true });
132
+ await fs.copyFile(path.join(source, "package.json"), path.join(globalDest, "package.json"));
133
+ // Publish to feature namespace
134
+ const featureDest = getPackagePath("feature-branch", pkg, version);
135
+ await fs.mkdir(featureDest, { recursive: true });
136
+ await fs.copyFile(path.join(source, "package.json"), path.join(featureDest, "package.json"));
137
+ // Verify both namespaces have the package
138
+ await expect(fs.access(path.join(globalDest, "package.json"))).resolves.not.toThrow();
139
+ await expect(fs.access(path.join(featureDest, "package.json"))).resolves.not.toThrow();
140
+ // List namespaces
141
+ const namespaces = await fs.readdir(getNamespacesPath());
142
+ expect(namespaces).toContain("global");
143
+ expect(namespaces).toContain("feature-branch");
144
+ });
145
+ it("should create valid registry.json structure", async () => {
146
+ // Create registry manually
147
+ const registry = {
148
+ version: "1.0.0",
149
+ namespaces: {
150
+ global: {
151
+ created: new Date().toISOString(),
152
+ packages: {
153
+ "@test/sample-lib": {
154
+ versions: {
155
+ "1.0.0": {
156
+ signature: "abc12345",
157
+ published: new Date().toISOString(),
158
+ files: 3,
159
+ },
160
+ "2.0.0": {
161
+ signature: "def67890",
162
+ published: new Date().toISOString(),
163
+ files: 3,
164
+ },
165
+ },
166
+ },
167
+ "utils-helper": {
168
+ versions: {
169
+ "1.0.0": {
170
+ signature: "ghi11111",
171
+ published: new Date().toISOString(),
172
+ files: 2,
173
+ },
174
+ },
175
+ },
176
+ },
177
+ },
178
+ "feature-branch": {
179
+ created: new Date().toISOString(),
180
+ packages: {
181
+ "@test/sample-lib": {
182
+ versions: {
183
+ "1.0.0-beta": {
184
+ signature: "jkl22222",
185
+ published: new Date().toISOString(),
186
+ files: 3,
187
+ },
188
+ },
189
+ },
190
+ },
191
+ },
192
+ },
193
+ };
194
+ await fs.writeFile(getRegistryPath(), JSON.stringify(registry, null, 2));
195
+ // Read and verify
196
+ const readRegistry = JSON.parse(await fs.readFile(getRegistryPath(), "utf-8"));
197
+ expect(readRegistry.version).toBe("1.0.0");
198
+ expect(Object.keys(readRegistry.namespaces)).toHaveLength(2);
199
+ expect(readRegistry.namespaces.global.packages["@test/sample-lib"].versions["1.0.0"]).toBeDefined();
200
+ expect(readRegistry.namespaces.global.packages["@test/sample-lib"].versions["2.0.0"]).toBeDefined();
201
+ expect(readRegistry.namespaces["feature-branch"].packages["@test/sample-lib"].versions["1.0.0-beta"]).toBeDefined();
202
+ });
203
+ });
204
+ describe("Store Integrity", () => {
205
+ it("should detect orphaned files (files without registry entry)", async () => {
206
+ // Create file on disk without registry entry
207
+ const orphanPath = getPackagePath("global", "orphan-pkg", "1.0.0");
208
+ await fs.mkdir(orphanPath, { recursive: true });
209
+ await fs.writeFile(path.join(orphanPath, "package.json"), JSON.stringify({ name: "orphan-pkg", version: "1.0.0" }));
210
+ // Create empty registry
211
+ const registry = {
212
+ version: "1.0.0",
213
+ namespaces: {
214
+ global: { created: new Date().toISOString(), packages: {} },
215
+ },
216
+ };
217
+ await fs.writeFile(getRegistryPath(), JSON.stringify(registry, null, 2));
218
+ // Verify orphan exists on disk but not in registry
219
+ await expect(fs.access(orphanPath)).resolves.not.toThrow();
220
+ const readRegistry = JSON.parse(await fs.readFile(getRegistryPath(), "utf-8"));
221
+ expect(readRegistry.namespaces.global.packages["orphan-pkg"]).toBeUndefined();
222
+ });
223
+ it("should detect orphaned registry entries (registry without files)", async () => {
224
+ // Create registry with entry but no files
225
+ const registry = {
226
+ version: "1.0.0",
227
+ namespaces: {
228
+ global: {
229
+ created: new Date().toISOString(),
230
+ packages: {
231
+ "ghost-pkg": {
232
+ versions: {
233
+ "1.0.0": {
234
+ signature: "ghost123",
235
+ published: new Date().toISOString(),
236
+ files: 1,
237
+ },
238
+ },
239
+ },
240
+ },
241
+ },
242
+ },
243
+ };
244
+ await fs.writeFile(getRegistryPath(), JSON.stringify(registry, null, 2));
245
+ // Verify registry has entry but no files on disk
246
+ const readRegistry = JSON.parse(await fs.readFile(getRegistryPath(), "utf-8"));
247
+ expect(readRegistry.namespaces.global.packages["ghost-pkg"]).toBeDefined();
248
+ const ghostPath = getPackagePath("global", "ghost-pkg", "1.0.0");
249
+ await expect(fs.access(ghostPath)).rejects.toThrow();
250
+ });
251
+ });
252
+ });
253
+ //# sourceMappingURL=e2e.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e.spec.js","sourceRoot":"","sources":["../../src/__tests__/e2e.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Integration Tests - Tests con módulos reales y fixtures
3
+ *
4
+ * Estos tests importan los módulos reales y verifican el comportamiento
5
+ * completo del sistema usando los fixtures.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=integration.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.spec.d.ts","sourceRoot":"","sources":["../../src/__tests__/integration.spec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}