@microwiseai/snapshot 0.3.71 → 0.5.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 (78) hide show
  1. package/dist/commands/clone-all.d.ts +21 -0
  2. package/dist/commands/clone-all.d.ts.map +1 -0
  3. package/dist/commands/clone-all.js +57 -0
  4. package/dist/commands/clone-all.js.map +1 -0
  5. package/dist/commands/install.d.ts +9 -1
  6. package/dist/commands/install.d.ts.map +1 -1
  7. package/dist/commands/install.js +219 -49
  8. package/dist/commands/install.js.map +1 -1
  9. package/dist/commands/license.js.map +1 -1
  10. package/dist/commands/list.d.ts +15 -0
  11. package/dist/commands/list.d.ts.map +1 -1
  12. package/dist/commands/list.js +21 -39
  13. package/dist/commands/list.js.map +1 -1
  14. package/dist/commands/publish.d.ts.map +1 -1
  15. package/dist/commands/publish.js +22 -0
  16. package/dist/commands/publish.js.map +1 -1
  17. package/dist/index.js +51 -29
  18. package/dist/index.js.map +1 -1
  19. package/dist/lib/config.d.ts.map +1 -1
  20. package/dist/lib/config.js +15 -10
  21. package/dist/lib/config.js.map +1 -1
  22. package/dist/lib/gitlab.d.ts.map +1 -1
  23. package/dist/lib/gitlab.js +6 -8
  24. package/dist/lib/gitlab.js.map +1 -1
  25. package/dist/lib/transitive-resolver.js.map +1 -1
  26. package/dist/lib/types.d.ts +1 -0
  27. package/dist/lib/types.d.ts.map +1 -1
  28. package/dist/lib/version-validator.d.ts +28 -0
  29. package/dist/lib/version-validator.d.ts.map +1 -0
  30. package/dist/lib/version-validator.js +105 -0
  31. package/dist/lib/version-validator.js.map +1 -0
  32. package/dist/lib.js.map +1 -1
  33. package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.d.ts +86 -1
  34. package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.d.ts.map +1 -1
  35. package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.js +171 -5
  36. package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.js.map +1 -1
  37. package/node_modules/@microwiseai/snapshot-dedup/dist/index.d.ts +1 -1
  38. package/node_modules/@microwiseai/snapshot-dedup/dist/index.d.ts.map +1 -1
  39. package/node_modules/@microwiseai/snapshot-dedup/dist/index.js +4 -2
  40. package/node_modules/@microwiseai/snapshot-dedup/dist/index.js.map +1 -1
  41. package/node_modules/@microwiseai/snapshot-dedup/package.json +8 -2
  42. package/package.json +18 -4
  43. package/dist/commands/doctor.d.ts +0 -2
  44. package/dist/commands/doctor.d.ts.map +0 -1
  45. package/dist/commands/doctor.js +0 -37
  46. package/dist/commands/doctor.js.map +0 -1
  47. package/dist/commands/setup.d.ts +0 -5
  48. package/dist/commands/setup.d.ts.map +0 -1
  49. package/dist/commands/setup.js +0 -52
  50. package/dist/commands/setup.js.map +0 -1
  51. package/dist/lib/access-sync.test.d.ts +0 -2
  52. package/dist/lib/access-sync.test.d.ts.map +0 -1
  53. package/dist/lib/access-sync.test.js +0 -112
  54. package/dist/lib/access-sync.test.js.map +0 -1
  55. package/dist/lib/auth-flow.test.d.ts +0 -2
  56. package/dist/lib/auth-flow.test.d.ts.map +0 -1
  57. package/dist/lib/auth-flow.test.js +0 -265
  58. package/dist/lib/auth-flow.test.js.map +0 -1
  59. package/dist/lib/config.test.d.ts +0 -2
  60. package/dist/lib/config.test.d.ts.map +0 -1
  61. package/dist/lib/config.test.js +0 -151
  62. package/dist/lib/config.test.js.map +0 -1
  63. package/dist/lib/gitlab.test.d.ts +0 -2
  64. package/dist/lib/gitlab.test.d.ts.map +0 -1
  65. package/dist/lib/gitlab.test.js +0 -63
  66. package/dist/lib/gitlab.test.js.map +0 -1
  67. package/dist/lib/prerequisites.d.ts +0 -33
  68. package/dist/lib/prerequisites.d.ts.map +0 -1
  69. package/dist/lib/prerequisites.js +0 -123
  70. package/dist/lib/prerequisites.js.map +0 -1
  71. package/dist/lib/registry.d.ts +0 -3
  72. package/dist/lib/registry.d.ts.map +0 -1
  73. package/dist/lib/registry.js +0 -53
  74. package/dist/lib/registry.js.map +0 -1
  75. package/dist/lib/transitive-resolver.test.d.ts +0 -2
  76. package/dist/lib/transitive-resolver.test.d.ts.map +0 -1
  77. package/dist/lib/transitive-resolver.test.js +0 -279
  78. package/dist/lib/transitive-resolver.test.js.map +0 -1
@@ -1,123 +0,0 @@
1
- import { execSync } from 'child_process';
2
- import { platform } from 'os';
3
- import { isLoggedIn } from './config.js';
4
- /**
5
- * Get OS-specific platform key
6
- */
7
- function getPlatformKey() {
8
- const os = platform();
9
- if (os === 'darwin')
10
- return 'macos-brew';
11
- if (os === 'linux') {
12
- // Detect apt vs yum
13
- try {
14
- execSync('which apt-get', { stdio: 'ignore' });
15
- return 'linux-apt';
16
- }
17
- catch {
18
- try {
19
- execSync('which yum', { stdio: 'ignore' });
20
- return 'linux-yum';
21
- }
22
- catch {
23
- return 'linux-unknown';
24
- }
25
- }
26
- }
27
- return 'unknown';
28
- }
29
- /**
30
- * Check if a command exists
31
- */
32
- function hasCommand(cmd) {
33
- try {
34
- execSync(`which ${cmd} 2>/dev/null`, { stdio: 'ignore' });
35
- return true;
36
- }
37
- catch {
38
- return false;
39
- }
40
- }
41
- /**
42
- * Minimal snapshot prerequisites
43
- */
44
- export const MINIMAL_PREREQUISITES = [
45
- {
46
- name: 'tmux',
47
- description: 'Terminal multiplexer (session management)',
48
- requiredBy: ['@ist/sesh'],
49
- check: () => hasCommand('tmux'),
50
- install: {
51
- 'linux-apt': 'sudo apt-get update -qq && sudo apt-get install -y tmux',
52
- 'linux-yum': 'sudo yum install -y tmux',
53
- 'macos-brew': 'brew install tmux',
54
- },
55
- autoInstall: true,
56
- },
57
- {
58
- name: 'IST CLI Auth',
59
- description: 'Authentication CLI for IST services (ist auth login)',
60
- requiredBy: ['snapshot install (authenticated)'],
61
- check: () => hasCommand('ist'),
62
- install: {
63
- 'linux-apt': 'npm install -g @microwiseai/cli-auth',
64
- 'linux-yum': 'npm install -g @microwiseai/cli-auth',
65
- 'macos-brew': 'npm install -g @microwiseai/cli-auth',
66
- },
67
- autoInstall: true,
68
- },
69
- {
70
- name: 'Claude Code',
71
- description: 'AI CLI for session creation',
72
- requiredBy: ['@ist/sesh'],
73
- check: () => hasCommand('claude'),
74
- install: {
75
- 'linux-apt': 'npm install -g @anthropic-ai/claude-code',
76
- 'linux-yum': 'npm install -g @anthropic-ai/claude-code',
77
- 'macos-brew': 'npm install -g @anthropic-ai/claude-code',
78
- },
79
- autoInstall: true,
80
- },
81
- {
82
- name: 'IST Credentials',
83
- description: 'Authentication for session isolation',
84
- requiredBy: ['snapshot install (authenticated)'],
85
- // SSOT: ~/.ist/credentials.json `.token` (IST JWT) via cli-auth v2, with
86
- // local expiry pre-check. NOT the legacy extensionless ~/.ist/credentials
87
- // file (that path predates the credential-schema convergence).
88
- check: () => isLoggedIn(),
89
- autoInstall: false,
90
- guide: 'Run "ist auth login" to authenticate.',
91
- },
92
- ];
93
- /**
94
- * Check all prerequisites and return results
95
- */
96
- export function checkPrerequisites(prerequisites = MINIMAL_PREREQUISITES) {
97
- const platformKey = getPlatformKey();
98
- return prerequisites.map(prereq => ({
99
- name: prereq.name,
100
- description: prereq.description,
101
- requiredBy: prereq.requiredBy,
102
- installed: prereq.check(),
103
- guide: prereq.guide,
104
- installCommand: prereq.install?.[platformKey] || prereq.install?.['linux-apt'],
105
- }));
106
- }
107
- /**
108
- * Install a single prerequisite
109
- */
110
- export function installPrerequisite(result) {
111
- if (result.installed)
112
- return { success: true };
113
- if (!result.installCommand)
114
- return { success: false, error: 'No install command available. ' + (result.guide || '') };
115
- try {
116
- execSync(result.installCommand, { stdio: 'inherit' });
117
- return { success: true };
118
- }
119
- catch (err) {
120
- return { success: false, error: err.message };
121
- }
122
- }
123
- //# sourceMappingURL=prerequisites.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prerequisites.js","sourceRoot":"","sources":["../../src/lib/prerequisites.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export declare function setupNpmrc(): boolean;
2
- export declare function getRegistryScopes(): string[];
3
- //# sourceMappingURL=registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"AAuBA,wBAAgB,UAAU,IAAI,OAAO,CAuCpC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C"}
@@ -1,53 +0,0 @@
1
- import { writeFileSync, readFileSync, existsSync } from 'fs';
2
- import { homedir } from 'os';
3
- import { join } from 'path';
4
- import { getGitlabToken } from './config.js';
5
- const NPMRC_PATH = join(homedir(), '.npmrc');
6
- const REGISTRY_CONFIGS = [
7
- { scope: '@ist', groupId: '110834981' },
8
- { scope: '@glpkg', groupId: '117429707' },
9
- { scope: '@anthropic', groupId: '110834981' },
10
- { scope: '@anthropic-ist', groupId: '110834981' },
11
- { scope: '@skit', groupId: '110834981' },
12
- { scope: '@skit-marketplace', groupId: '110834981' },
13
- { scope: '@pevo', groupId: '110834981' },
14
- { scope: '@microwiseai', groupId: '110834981' },
15
- ];
16
- export function setupNpmrc() {
17
- const token = getGitlabToken();
18
- if (!token) {
19
- return false;
20
- }
21
- // Read existing .npmrc if exists
22
- let existingContent = '';
23
- if (existsSync(NPMRC_PATH)) {
24
- existingContent = readFileSync(NPMRC_PATH, 'utf-8');
25
- }
26
- // Build new registry entries
27
- const newEntries = [];
28
- for (const config of REGISTRY_CONFIGS) {
29
- const registryUrl = `https://gitlab.com/api/v4/groups/${config.groupId}/-/packages/npm/`;
30
- const scopeEntry = `${config.scope}:registry=${registryUrl}`;
31
- const tokenEntry = `//${registryUrl.replace('https://', '')}:_authToken=\${GITLAB_TOKEN}`;
32
- // Only add if not already present
33
- if (!existingContent.includes(scopeEntry)) {
34
- newEntries.push(scopeEntry);
35
- }
36
- if (!existingContent.includes(`:_authToken=`) || !existingContent.includes(registryUrl.replace('https://', ''))) {
37
- // Add token entry for this registry
38
- const tokenLine = `//gitlab.com/api/v4/groups/${config.groupId}/-/packages/npm/:_authToken=${token}`;
39
- if (!existingContent.includes(tokenLine)) {
40
- newEntries.push(tokenLine);
41
- }
42
- }
43
- }
44
- if (newEntries.length > 0) {
45
- const finalContent = existingContent.trim() + '\n' + newEntries.join('\n') + '\n';
46
- writeFileSync(NPMRC_PATH, finalContent);
47
- }
48
- return true;
49
- }
50
- export function getRegistryScopes() {
51
- return REGISTRY_CONFIGS.map(c => c.scope);
52
- }
53
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=transitive-resolver.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transitive-resolver.test.d.ts","sourceRoot":"","sources":["../../src/lib/transitive-resolver.test.ts"],"names":[],"mappings":""}
@@ -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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"}