@microwiseai/snapshot 0.3.71 → 0.4.0

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 (60) hide show
  1. package/dist/commands/doctor.js.map +1 -1
  2. package/dist/commands/install.d.ts +9 -1
  3. package/dist/commands/install.d.ts.map +1 -1
  4. package/dist/commands/install.js +210 -17
  5. package/dist/commands/install.js.map +1 -1
  6. package/dist/commands/license.js.map +1 -1
  7. package/dist/commands/list.d.ts +15 -0
  8. package/dist/commands/list.d.ts.map +1 -1
  9. package/dist/commands/list.js +21 -39
  10. package/dist/commands/list.js.map +1 -1
  11. package/dist/commands/publish.d.ts.map +1 -1
  12. package/dist/commands/publish.js +22 -0
  13. package/dist/commands/publish.js.map +1 -1
  14. package/dist/index.js +37 -11
  15. package/dist/index.js.map +1 -1
  16. package/dist/lib/config.d.ts.map +1 -1
  17. package/dist/lib/config.js +15 -10
  18. package/dist/lib/config.js.map +1 -1
  19. package/dist/lib/transitive-resolver.js.map +1 -1
  20. package/dist/lib/types.d.ts +1 -0
  21. package/dist/lib/types.d.ts.map +1 -1
  22. package/dist/lib/version-validator.d.ts +28 -0
  23. package/dist/lib/version-validator.d.ts.map +1 -0
  24. package/dist/lib/version-validator.js +105 -0
  25. package/dist/lib/version-validator.js.map +1 -0
  26. package/dist/lib.js.map +1 -1
  27. package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.d.ts +86 -1
  28. package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.d.ts.map +1 -1
  29. package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.js +171 -5
  30. package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.js.map +1 -1
  31. package/node_modules/@microwiseai/snapshot-dedup/dist/index.d.ts +1 -1
  32. package/node_modules/@microwiseai/snapshot-dedup/dist/index.d.ts.map +1 -1
  33. package/node_modules/@microwiseai/snapshot-dedup/dist/index.js +4 -2
  34. package/node_modules/@microwiseai/snapshot-dedup/dist/index.js.map +1 -1
  35. package/node_modules/@microwiseai/snapshot-dedup/package.json +8 -2
  36. package/package.json +9 -4
  37. package/dist/lib/access-sync.test.d.ts +0 -2
  38. package/dist/lib/access-sync.test.d.ts.map +0 -1
  39. package/dist/lib/access-sync.test.js +0 -112
  40. package/dist/lib/access-sync.test.js.map +0 -1
  41. package/dist/lib/auth-flow.test.d.ts +0 -2
  42. package/dist/lib/auth-flow.test.d.ts.map +0 -1
  43. package/dist/lib/auth-flow.test.js +0 -265
  44. package/dist/lib/auth-flow.test.js.map +0 -1
  45. package/dist/lib/config.test.d.ts +0 -2
  46. package/dist/lib/config.test.d.ts.map +0 -1
  47. package/dist/lib/config.test.js +0 -151
  48. package/dist/lib/config.test.js.map +0 -1
  49. package/dist/lib/gitlab.test.d.ts +0 -2
  50. package/dist/lib/gitlab.test.d.ts.map +0 -1
  51. package/dist/lib/gitlab.test.js +0 -63
  52. package/dist/lib/gitlab.test.js.map +0 -1
  53. package/dist/lib/registry.d.ts +0 -3
  54. package/dist/lib/registry.d.ts.map +0 -1
  55. package/dist/lib/registry.js +0 -53
  56. package/dist/lib/registry.js.map +0 -1
  57. package/dist/lib/transitive-resolver.test.d.ts +0 -2
  58. package/dist/lib/transitive-resolver.test.d.ts.map +0 -1
  59. package/dist/lib/transitive-resolver.test.js +0 -279
  60. package/dist/lib/transitive-resolver.test.js.map +0 -1
@@ -1,279 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- // Mock gitlab.js to avoid network calls
3
- vi.mock('./gitlab.js', () => ({
4
- fetchSnapshotFromRepo: vi.fn(),
5
- }));
6
- // Mock config.js to provide test values
7
- vi.mock('./config.js', async (importOriginal) => {
8
- const original = await importOriginal();
9
- return {
10
- ...original,
11
- getLicenseKey: vi.fn(() => 'test-license-key'),
12
- REGISTRY_PROXY_URL: 'https://test-registry.example.com',
13
- GITLAB_GROUP_ID: '12345',
14
- LICENSE_API_URL: 'https://test-license.example.com',
15
- };
16
- });
17
- describe('transitive-resolver.ts - Scope Extraction', () => {
18
- let fetchSnapshotFromRepo;
19
- let resolveAllDependencies;
20
- let clearTransitiveCache;
21
- beforeEach(async () => {
22
- vi.resetModules();
23
- // Get mocked fetchSnapshotFromRepo
24
- const gitlabModule = await import('./gitlab.js');
25
- fetchSnapshotFromRepo = gitlabModule.fetchSnapshotFromRepo;
26
- // Import the module under test
27
- const transitiveResolver = await import('./transitive-resolver.js');
28
- resolveAllDependencies = transitiveResolver.resolveAllDependencies;
29
- clearTransitiveCache = transitiveResolver.clearTransitiveCache;
30
- });
31
- afterEach(() => {
32
- vi.clearAllMocks();
33
- clearTransitiveCache?.();
34
- });
35
- describe('extractScopesFromRegistry - Dynamic Scope Extraction', () => {
36
- it('should extract scopes from snapshot.registry field', async () => {
37
- const mockSnapshot = {
38
- name: '@ist/test-snapshot',
39
- version: '1.0.0',
40
- registry: {
41
- '@ist': { group: '110834981' },
42
- '@microwiseai': { group: '99999999' },
43
- },
44
- install: {
45
- npm: {
46
- '@ist/some-package': '1.0.0',
47
- },
48
- },
49
- };
50
- fetchSnapshotFromRepo.mockResolvedValue(mockSnapshot);
51
- const result = await resolveAllDependencies('@ist/test-snapshot', {
52
- resolveTransitive: false, // Skip actual transitive resolution
53
- });
54
- // scopeGroups should contain extracted scopes from registry
55
- expect(result.scopeGroups).toHaveProperty('@ist');
56
- expect(result.scopeGroups).toHaveProperty('@microwiseai');
57
- expect(result.scopeGroups['@ist']).toBe('110834981');
58
- expect(result.scopeGroups['@microwiseai']).toBe('99999999');
59
- });
60
- it('should extract scopes from extended snapshot registry', async () => {
61
- const baseSnapshot = {
62
- name: '@ist/base',
63
- version: '1.0.0',
64
- registry: {
65
- '@ist': { group: '110834981' },
66
- },
67
- install: {},
68
- };
69
- const extendedSnapshot = {
70
- name: '@ist/extended',
71
- version: '1.0.0',
72
- extends: '@ist/base',
73
- registry: {
74
- '@custom': { group: '88888888' },
75
- },
76
- install: {},
77
- };
78
- fetchSnapshotFromRepo.mockImplementation(async (name) => {
79
- if (name === '@ist/extended')
80
- return extendedSnapshot;
81
- if (name === '@ist/base')
82
- return baseSnapshot;
83
- throw new Error(`Unknown snapshot: ${name}`);
84
- });
85
- const result = await resolveAllDependencies('@ist/extended', {
86
- resolveTransitive: false,
87
- });
88
- // Should have scopes from both base and extended snapshots
89
- expect(result.scopeGroups).toHaveProperty('@ist');
90
- expect(result.scopeGroups).toHaveProperty('@custom');
91
- });
92
- it('should return empty scopeGroups when no registry defined', async () => {
93
- const mockSnapshot = {
94
- name: '@ist/no-registry',
95
- version: '1.0.0',
96
- install: {},
97
- };
98
- fetchSnapshotFromRepo.mockResolvedValue(mockSnapshot);
99
- const result = await resolveAllDependencies('@ist/no-registry', {
100
- resolveTransitive: false,
101
- });
102
- expect(result.scopeGroups).toEqual({});
103
- });
104
- it('should not overwrite scope if already collected from parent', async () => {
105
- // Base has @ist → group A
106
- const baseSnapshot = {
107
- name: '@ist/base',
108
- version: '1.0.0',
109
- registry: {
110
- '@ist': { group: 'base-group' },
111
- },
112
- install: {},
113
- };
114
- // Child also defines @ist → group B (should be ignored since base comes first)
115
- const childSnapshot = {
116
- name: '@ist/child',
117
- version: '1.0.0',
118
- extends: '@ist/base',
119
- registry: {
120
- '@ist': { group: 'child-group' },
121
- },
122
- install: {},
123
- };
124
- fetchSnapshotFromRepo.mockImplementation(async (name) => {
125
- if (name === '@ist/child')
126
- return childSnapshot;
127
- if (name === '@ist/base')
128
- return baseSnapshot;
129
- throw new Error(`Unknown snapshot: ${name}`);
130
- });
131
- const result = await resolveAllDependencies('@ist/child', {
132
- resolveTransitive: false,
133
- });
134
- // First collected scope wins (from base snapshot traversed first)
135
- expect(result.scopeGroups['@ist']).toBe('base-group');
136
- });
137
- });
138
- describe('Package Collection', () => {
139
- it('should collect npm packages from install.npm', async () => {
140
- const mockSnapshot = {
141
- name: '@ist/pkg-test',
142
- version: '1.0.0',
143
- install: {
144
- npm: {
145
- '@ist/package-a': '1.0.0',
146
- '@ist/package-b': '2.0.0',
147
- },
148
- },
149
- };
150
- fetchSnapshotFromRepo.mockResolvedValue(mockSnapshot);
151
- const result = await resolveAllDependencies('@ist/pkg-test', {
152
- resolveTransitive: false,
153
- });
154
- expect(result.npm.length).toBe(2);
155
- const names = result.npm.map(p => p.name);
156
- expect(names).toContain('@ist/package-a');
157
- expect(names).toContain('@ist/package-b');
158
- });
159
- it('should collect skit packages from install.skit', async () => {
160
- const mockSnapshot = {
161
- name: '@ist/skit-test',
162
- version: '1.0.0',
163
- install: {
164
- skit: {
165
- '@ist/my-kit': '1.0.0',
166
- },
167
- },
168
- };
169
- fetchSnapshotFromRepo.mockResolvedValue(mockSnapshot);
170
- const result = await resolveAllDependencies('@ist/skit-test', {
171
- resolveTransitive: false,
172
- });
173
- expect(result.skit.length).toBe(1);
174
- expect(result.skit[0].name).toBe('@ist/my-kit');
175
- expect(result.skit[0].source).toBe('snapshot');
176
- });
177
- it('should collect from legacy packages field', async () => {
178
- const mockSnapshot = {
179
- name: '@ist/legacy',
180
- version: '1.0.0',
181
- packages: {
182
- '@ist/legacy-pkg': '1.0.0',
183
- '@ist/legacy-kit': '1.0.0', // -kit suffix → skit
184
- },
185
- };
186
- fetchSnapshotFromRepo.mockResolvedValue(mockSnapshot);
187
- const result = await resolveAllDependencies('@ist/legacy', {
188
- resolveTransitive: false,
189
- });
190
- // kit suffix package goes to skit
191
- const skitNames = result.skit.map(p => p.name);
192
- expect(skitNames).toContain('@ist/legacy-kit');
193
- // regular package goes to npm
194
- const npmNames = result.npm.map(p => p.name);
195
- expect(npmNames).toContain('@ist/legacy-pkg');
196
- });
197
- it('should collect from skits field', async () => {
198
- const mockSnapshot = {
199
- name: '@ist/skits-test',
200
- version: '1.0.0',
201
- skits: {
202
- '@ist/direct-kit': '1.0.0',
203
- },
204
- };
205
- fetchSnapshotFromRepo.mockResolvedValue(mockSnapshot);
206
- const result = await resolveAllDependencies('@ist/skits-test', {
207
- resolveTransitive: false,
208
- });
209
- expect(result.skit.length).toBe(1);
210
- expect(result.skit[0].name).toBe('@ist/direct-kit');
211
- expect(result.skit[0].isDirect).toBe(true);
212
- });
213
- });
214
- describe('Error Handling', () => {
215
- it('should record errors when snapshot fetch fails', async () => {
216
- fetchSnapshotFromRepo.mockRejectedValue(new Error('Network error'));
217
- const result = await resolveAllDependencies('@ist/failing', {
218
- resolveTransitive: false,
219
- });
220
- expect(result.errors.length).toBeGreaterThan(0);
221
- expect(result.errors[0].name).toBe('@ist/failing');
222
- expect(result.errors[0].error).toContain('Network error');
223
- });
224
- });
225
- describe('TransitiveResolutionResult structure', () => {
226
- it('should return expected structure', async () => {
227
- const mockSnapshot = {
228
- name: '@ist/structure-test',
229
- version: '1.0.0',
230
- install: {},
231
- };
232
- fetchSnapshotFromRepo.mockResolvedValue(mockSnapshot);
233
- const result = await resolveAllDependencies('@ist/structure-test', {
234
- resolveTransitive: false,
235
- });
236
- expect(result).toHaveProperty('npm');
237
- expect(result).toHaveProperty('skit');
238
- expect(result).toHaveProperty('errors');
239
- expect(result).toHaveProperty('scopeGroups');
240
- expect(Array.isArray(result.npm)).toBe(true);
241
- expect(Array.isArray(result.skit)).toBe(true);
242
- expect(Array.isArray(result.errors)).toBe(true);
243
- expect(typeof result.scopeGroups).toBe('object');
244
- });
245
- });
246
- });
247
- describe('resolveDepsFromLicenseAPI', () => {
248
- let resolveDepsFromLicenseAPI;
249
- beforeEach(async () => {
250
- vi.resetModules();
251
- const transitiveResolver = await import('./transitive-resolver.js');
252
- resolveDepsFromLicenseAPI = transitiveResolver.resolveDepsFromLicenseAPI;
253
- });
254
- afterEach(() => {
255
- vi.clearAllMocks();
256
- });
257
- it('should throw if packages array is empty', async () => {
258
- await expect(resolveDepsFromLicenseAPI({
259
- packages: [],
260
- groupId: '12345',
261
- scopes: ['@ist'],
262
- })).rejects.toThrow('packages array is required');
263
- });
264
- it('should throw if groupId is missing', async () => {
265
- await expect(resolveDepsFromLicenseAPI({
266
- packages: ['@ist/pkg@1.0.0'],
267
- groupId: '',
268
- scopes: ['@ist'],
269
- })).rejects.toThrow('groupId is required');
270
- });
271
- it('should throw if scopes array is empty', async () => {
272
- await expect(resolveDepsFromLicenseAPI({
273
- packages: ['@ist/pkg@1.0.0'],
274
- groupId: '12345',
275
- scopes: [],
276
- })).rejects.toThrow('scopes array is required');
277
- });
278
- });
279
- //# sourceMappingURL=transitive-resolver.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transitive-resolver.test.js","sourceRoot":"","sources":["../../src/lib/transitive-resolver.test.ts"],"names":[],"mappings":"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"}