@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.
- package/dist/commands/clone-all.d.ts +21 -0
- package/dist/commands/clone-all.d.ts.map +1 -0
- package/dist/commands/clone-all.js +57 -0
- package/dist/commands/clone-all.js.map +1 -0
- package/dist/commands/install.d.ts +9 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +219 -49
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/license.js.map +1 -1
- package/dist/commands/list.d.ts +15 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +21 -39
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +22 -0
- package/dist/commands/publish.js.map +1 -1
- package/dist/index.js +51 -29
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +15 -10
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/gitlab.d.ts.map +1 -1
- package/dist/lib/gitlab.js +6 -8
- package/dist/lib/gitlab.js.map +1 -1
- package/dist/lib/transitive-resolver.js.map +1 -1
- package/dist/lib/types.d.ts +1 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/version-validator.d.ts +28 -0
- package/dist/lib/version-validator.d.ts.map +1 -0
- package/dist/lib/version-validator.js +105 -0
- package/dist/lib/version-validator.js.map +1 -0
- package/dist/lib.js.map +1 -1
- package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.d.ts +86 -1
- package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.d.ts.map +1 -1
- package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.js +171 -5
- package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.js.map +1 -1
- package/node_modules/@microwiseai/snapshot-dedup/dist/index.d.ts +1 -1
- package/node_modules/@microwiseai/snapshot-dedup/dist/index.d.ts.map +1 -1
- package/node_modules/@microwiseai/snapshot-dedup/dist/index.js +4 -2
- package/node_modules/@microwiseai/snapshot-dedup/dist/index.js.map +1 -1
- package/node_modules/@microwiseai/snapshot-dedup/package.json +8 -2
- package/package.json +18 -4
- package/dist/commands/doctor.d.ts +0 -2
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -37
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/setup.d.ts +0 -5
- package/dist/commands/setup.d.ts.map +0 -1
- package/dist/commands/setup.js +0 -52
- package/dist/commands/setup.js.map +0 -1
- package/dist/lib/access-sync.test.d.ts +0 -2
- package/dist/lib/access-sync.test.d.ts.map +0 -1
- package/dist/lib/access-sync.test.js +0 -112
- package/dist/lib/access-sync.test.js.map +0 -1
- package/dist/lib/auth-flow.test.d.ts +0 -2
- package/dist/lib/auth-flow.test.d.ts.map +0 -1
- package/dist/lib/auth-flow.test.js +0 -265
- package/dist/lib/auth-flow.test.js.map +0 -1
- package/dist/lib/config.test.d.ts +0 -2
- package/dist/lib/config.test.d.ts.map +0 -1
- package/dist/lib/config.test.js +0 -151
- package/dist/lib/config.test.js.map +0 -1
- package/dist/lib/gitlab.test.d.ts +0 -2
- package/dist/lib/gitlab.test.d.ts.map +0 -1
- package/dist/lib/gitlab.test.js +0 -63
- package/dist/lib/gitlab.test.js.map +0 -1
- package/dist/lib/prerequisites.d.ts +0 -33
- package/dist/lib/prerequisites.d.ts.map +0 -1
- package/dist/lib/prerequisites.js +0 -123
- package/dist/lib/prerequisites.js.map +0 -1
- package/dist/lib/registry.d.ts +0 -3
- package/dist/lib/registry.d.ts.map +0 -1
- package/dist/lib/registry.js +0 -53
- package/dist/lib/registry.js.map +0 -1
- package/dist/lib/transitive-resolver.test.d.ts +0 -2
- package/dist/lib/transitive-resolver.test.d.ts.map +0 -1
- package/dist/lib/transitive-resolver.test.js +0 -279
- 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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"}
|
package/dist/lib/registry.d.ts
DELETED
|
@@ -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"}
|
package/dist/lib/registry.js
DELETED
|
@@ -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
|
package/dist/lib/registry.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|