@skillsmith/mcp-server 0.3.7 → 0.3.9
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/README.md +3 -1
- package/dist/.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/assets/skills/skillsmith/SKILL.md +2 -65
- package/dist/src/tools/install.conflict-helpers.test.d.ts +0 -15
- package/dist/src/tools/install.conflict-helpers.test.d.ts.map +0 -1
- package/dist/src/tools/install.conflict-helpers.test.js +0 -243
- package/dist/src/tools/install.conflict-helpers.test.js.map +0 -1
- package/dist/src/tools/install.conflict.test.d.ts +0 -15
- package/dist/src/tools/install.conflict.test.d.ts.map +0 -1
- package/dist/src/tools/install.conflict.test.js +0 -354
- package/dist/src/tools/install.conflict.test.js.map +0 -1
- package/dist/src/tools/merge.test.d.ts +0 -11
- package/dist/src/tools/merge.test.d.ts.map +0 -1
- package/dist/src/tools/merge.test.js +0 -224
- package/dist/src/tools/merge.test.js.map +0 -1
- package/dist/tests/integration/install-conflict.integration.test.d.ts +0 -8
- package/dist/tests/integration/install-conflict.integration.test.d.ts.map +0 -1
- package/dist/tests/integration/install-conflict.integration.test.js +0 -384
- package/dist/tests/integration/install-conflict.integration.test.js.map +0 -1
- package/dist/tests/integration/install-trust-parsing.integration.test.d.ts +0 -13
- package/dist/tests/integration/install-trust-parsing.integration.test.d.ts.map +0 -1
- package/dist/tests/integration/install-trust-parsing.integration.test.js +0 -290
- package/dist/tests/integration/install-trust-parsing.integration.test.js.map +0 -1
|
@@ -1,384 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SMI-1869: Conflict Resolution Flow Integration Tests
|
|
3
|
-
* Tests for conflict detection and resolution during skill reinstallation
|
|
4
|
-
*
|
|
5
|
-
* Split from install.integration.test.ts per governance standards (SMI-1880)
|
|
6
|
-
*/
|
|
7
|
-
import { describe, it, expect, beforeEach, afterEach, beforeAll } from 'vitest';
|
|
8
|
-
import * as fs from 'fs/promises';
|
|
9
|
-
import * as path from 'path';
|
|
10
|
-
import { createTestFilesystem, createMockManifest, fileExists, readJsonFile, } from './setup.js';
|
|
11
|
-
describe('SMI-1869: Conflict Resolution Flow', () => {
|
|
12
|
-
let fsContext;
|
|
13
|
-
// Import conflict resolution helpers
|
|
14
|
-
let hashContent;
|
|
15
|
-
let storeOriginal;
|
|
16
|
-
let loadOriginal;
|
|
17
|
-
let detectModifications;
|
|
18
|
-
let createSkillBackup;
|
|
19
|
-
// Import merge function
|
|
20
|
-
let threeWayMerge;
|
|
21
|
-
beforeAll(async () => {
|
|
22
|
-
const conflictHelpers = await import('../../src/tools/install.conflict-helpers.js');
|
|
23
|
-
hashContent = conflictHelpers.hashContent;
|
|
24
|
-
storeOriginal = conflictHelpers.storeOriginal;
|
|
25
|
-
loadOriginal = conflictHelpers.loadOriginal;
|
|
26
|
-
detectModifications = conflictHelpers.detectModifications;
|
|
27
|
-
createSkillBackup = conflictHelpers.createSkillBackup;
|
|
28
|
-
const mergeModule = await import('../../src/tools/merge.js');
|
|
29
|
-
threeWayMerge = mergeModule.threeWayMerge;
|
|
30
|
-
});
|
|
31
|
-
beforeEach(async () => {
|
|
32
|
-
fsContext = await createTestFilesystem();
|
|
33
|
-
});
|
|
34
|
-
afterEach(async () => {
|
|
35
|
-
await fsContext.cleanup();
|
|
36
|
-
});
|
|
37
|
-
describe('Scenario 1: Detect conflict on reinstall with local modifications', () => {
|
|
38
|
-
it('should detect local modifications when force=true reinstall', async () => {
|
|
39
|
-
const skillName = 'modified-skill';
|
|
40
|
-
const skillPath = path.join(fsContext.skillsDir, skillName);
|
|
41
|
-
// 1. Install skill initially
|
|
42
|
-
await fs.mkdir(skillPath, { recursive: true });
|
|
43
|
-
const originalContent = `# Modified Skill
|
|
44
|
-
|
|
45
|
-
This is the original content from GitHub that was installed initially.
|
|
46
|
-
It has enough content to pass validation requirements for testing.
|
|
47
|
-
|
|
48
|
-
## Usage
|
|
49
|
-
Use this skill by mentioning it in Claude Code.
|
|
50
|
-
`;
|
|
51
|
-
await fs.writeFile(path.join(skillPath, 'SKILL.md'), originalContent);
|
|
52
|
-
// Store original hash
|
|
53
|
-
const originalHash = hashContent(originalContent);
|
|
54
|
-
// Create manifest with original hash
|
|
55
|
-
await createMockManifest(fsContext.manifestDir, {
|
|
56
|
-
[skillName]: {
|
|
57
|
-
id: 'owner/modified-skill',
|
|
58
|
-
name: skillName,
|
|
59
|
-
version: '1.0.0',
|
|
60
|
-
source: 'github:owner/modified-skill',
|
|
61
|
-
installPath: skillPath,
|
|
62
|
-
installedAt: new Date().toISOString(),
|
|
63
|
-
lastUpdated: new Date().toISOString(),
|
|
64
|
-
},
|
|
65
|
-
});
|
|
66
|
-
// 2. Modify the skill locally
|
|
67
|
-
const modifiedContent = `# Modified Skill
|
|
68
|
-
|
|
69
|
-
This is the MODIFIED content that the user changed locally.
|
|
70
|
-
The user added custom instructions and configurations here.
|
|
71
|
-
It has enough content to pass validation requirements for testing.
|
|
72
|
-
|
|
73
|
-
## Usage
|
|
74
|
-
Use this skill by mentioning it in Claude Code.
|
|
75
|
-
|
|
76
|
-
## My Custom Section
|
|
77
|
-
This section was added by the user.
|
|
78
|
-
`;
|
|
79
|
-
await fs.writeFile(path.join(skillPath, 'SKILL.md'), modifiedContent);
|
|
80
|
-
// 3. Detect modifications
|
|
81
|
-
const modResult = await detectModifications(skillPath, originalHash);
|
|
82
|
-
expect(modResult.modified).toBe(true);
|
|
83
|
-
expect(modResult.currentHash).not.toBe(originalHash);
|
|
84
|
-
expect(modResult.originalHash).toBe(originalHash);
|
|
85
|
-
});
|
|
86
|
-
it('should not detect modifications when content unchanged', async () => {
|
|
87
|
-
const skillName = 'unchanged-skill';
|
|
88
|
-
const skillPath = path.join(fsContext.skillsDir, skillName);
|
|
89
|
-
await fs.mkdir(skillPath, { recursive: true });
|
|
90
|
-
const content = `# Unchanged Skill
|
|
91
|
-
|
|
92
|
-
This skill content has not been modified since installation.
|
|
93
|
-
It remains exactly as it was when first installed from GitHub.
|
|
94
|
-
|
|
95
|
-
## Usage
|
|
96
|
-
Use this skill by mentioning it in Claude Code.
|
|
97
|
-
`;
|
|
98
|
-
await fs.writeFile(path.join(skillPath, 'SKILL.md'), content);
|
|
99
|
-
const contentHash = hashContent(content);
|
|
100
|
-
const modResult = await detectModifications(skillPath, contentHash);
|
|
101
|
-
expect(modResult.modified).toBe(false);
|
|
102
|
-
expect(modResult.currentHash).toBe(contentHash);
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
describe('Scenario 2: conflictAction=overwrite creates backup and replaces', () => {
|
|
106
|
-
it('should create backup before overwriting modified skill', async () => {
|
|
107
|
-
const skillName = 'overwrite-test-skill';
|
|
108
|
-
const skillPath = path.join(fsContext.skillsDir, skillName);
|
|
109
|
-
// Setup skill with content
|
|
110
|
-
await fs.mkdir(skillPath, { recursive: true });
|
|
111
|
-
const originalContent = `# Overwrite Test
|
|
112
|
-
|
|
113
|
-
Original content that will be backed up before overwrite.
|
|
114
|
-
This tests the backup functionality during conflict resolution.
|
|
115
|
-
|
|
116
|
-
## Original Section
|
|
117
|
-
This content existed before the update.
|
|
118
|
-
`;
|
|
119
|
-
await fs.writeFile(path.join(skillPath, 'SKILL.md'), originalContent);
|
|
120
|
-
// Create backup
|
|
121
|
-
const backupPath = await createSkillBackup(skillName, skillPath, 'pre-update');
|
|
122
|
-
// Verify backup was created
|
|
123
|
-
expect(await fileExists(backupPath)).toBe(true);
|
|
124
|
-
expect(await fileExists(path.join(backupPath, 'SKILL.md'))).toBe(true);
|
|
125
|
-
// Verify backup content matches original
|
|
126
|
-
const backupContent = await fs.readFile(path.join(backupPath, 'SKILL.md'), 'utf-8');
|
|
127
|
-
expect(backupContent).toBe(originalContent);
|
|
128
|
-
// Now simulate overwrite with new content
|
|
129
|
-
const newContent = `# Overwrite Test
|
|
130
|
-
|
|
131
|
-
This is the new upstream content from GitHub.
|
|
132
|
-
The original content has been backed up and replaced.
|
|
133
|
-
|
|
134
|
-
## Updated Section
|
|
135
|
-
This content is from the latest version.
|
|
136
|
-
`;
|
|
137
|
-
await fs.writeFile(path.join(skillPath, 'SKILL.md'), newContent);
|
|
138
|
-
// Verify skill has new content
|
|
139
|
-
const currentContent = await fs.readFile(path.join(skillPath, 'SKILL.md'), 'utf-8');
|
|
140
|
-
expect(currentContent).toBe(newContent);
|
|
141
|
-
// Backup still has original
|
|
142
|
-
const stillBackedUp = await fs.readFile(path.join(backupPath, 'SKILL.md'), 'utf-8');
|
|
143
|
-
expect(stillBackedUp).toBe(originalContent);
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
describe('Scenario 3: conflictAction=merge with clean merge (no conflicts)', () => {
|
|
147
|
-
it('should cleanly merge non-overlapping changes', async () => {
|
|
148
|
-
const base = `# Merge Test Skill
|
|
149
|
-
|
|
150
|
-
This is the base content that both versions started from.
|
|
151
|
-
|
|
152
|
-
## Section A
|
|
153
|
-
Original section A content.
|
|
154
|
-
|
|
155
|
-
## Section B
|
|
156
|
-
Original section B content.
|
|
157
|
-
`;
|
|
158
|
-
// Local adds Section C
|
|
159
|
-
const local = `# Merge Test Skill
|
|
160
|
-
|
|
161
|
-
This is the base content that both versions started from.
|
|
162
|
-
|
|
163
|
-
## Section A
|
|
164
|
-
Original section A content.
|
|
165
|
-
|
|
166
|
-
## Section B
|
|
167
|
-
Original section B content.
|
|
168
|
-
|
|
169
|
-
## Section C (Local Addition)
|
|
170
|
-
This section was added by the user locally.
|
|
171
|
-
`;
|
|
172
|
-
// Upstream modifies Section A
|
|
173
|
-
const upstream = `# Merge Test Skill
|
|
174
|
-
|
|
175
|
-
This is the base content that both versions started from.
|
|
176
|
-
|
|
177
|
-
## Section A
|
|
178
|
-
UPDATED section A content from upstream.
|
|
179
|
-
|
|
180
|
-
## Section B
|
|
181
|
-
Original section B content.
|
|
182
|
-
`;
|
|
183
|
-
const mergeResult = threeWayMerge(base, local, upstream);
|
|
184
|
-
expect(mergeResult.success).toBe(true);
|
|
185
|
-
expect(mergeResult.conflicts).toBeUndefined();
|
|
186
|
-
expect(mergeResult.merged).toBeDefined();
|
|
187
|
-
// Merged result should contain both changes
|
|
188
|
-
expect(mergeResult.merged).toContain('UPDATED section A content from upstream');
|
|
189
|
-
expect(mergeResult.merged).toContain('Section C (Local Addition)');
|
|
190
|
-
});
|
|
191
|
-
it('should preserve local changes when upstream is unchanged', async () => {
|
|
192
|
-
const base = `# Simple Skill
|
|
193
|
-
|
|
194
|
-
Original content.
|
|
195
|
-
`;
|
|
196
|
-
const local = `# Simple Skill
|
|
197
|
-
|
|
198
|
-
Modified by user.
|
|
199
|
-
`;
|
|
200
|
-
const upstream = base; // Upstream unchanged
|
|
201
|
-
const mergeResult = threeWayMerge(base, local, upstream);
|
|
202
|
-
expect(mergeResult.success).toBe(true);
|
|
203
|
-
expect(mergeResult.merged).toBe(local);
|
|
204
|
-
});
|
|
205
|
-
it('should take upstream changes when local is unchanged', async () => {
|
|
206
|
-
const base = `# Simple Skill
|
|
207
|
-
|
|
208
|
-
Original content.
|
|
209
|
-
`;
|
|
210
|
-
const local = base; // Local unchanged
|
|
211
|
-
const upstream = `# Simple Skill
|
|
212
|
-
|
|
213
|
-
Updated by author.
|
|
214
|
-
`;
|
|
215
|
-
const mergeResult = threeWayMerge(base, local, upstream);
|
|
216
|
-
expect(mergeResult.success).toBe(true);
|
|
217
|
-
expect(mergeResult.merged).toBe(upstream);
|
|
218
|
-
});
|
|
219
|
-
});
|
|
220
|
-
describe('Scenario 4: conflictAction=merge with conflicts (should have markers)', () => {
|
|
221
|
-
it('should insert conflict markers when both sides modify same section', async () => {
|
|
222
|
-
const base = `# Conflicting Skill
|
|
223
|
-
|
|
224
|
-
This line will be modified by both sides.
|
|
225
|
-
|
|
226
|
-
## End Section
|
|
227
|
-
Unchanged content.
|
|
228
|
-
`;
|
|
229
|
-
// Local modifies the line one way
|
|
230
|
-
const local = `# Conflicting Skill
|
|
231
|
-
|
|
232
|
-
LOCAL: This is the user's modification to the line.
|
|
233
|
-
|
|
234
|
-
## End Section
|
|
235
|
-
Unchanged content.
|
|
236
|
-
`;
|
|
237
|
-
// Upstream modifies the same line differently
|
|
238
|
-
const upstream = `# Conflicting Skill
|
|
239
|
-
|
|
240
|
-
UPSTREAM: This is the author's modification to the line.
|
|
241
|
-
|
|
242
|
-
## End Section
|
|
243
|
-
Unchanged content.
|
|
244
|
-
`;
|
|
245
|
-
const mergeResult = threeWayMerge(base, local, upstream);
|
|
246
|
-
expect(mergeResult.success).toBe(false);
|
|
247
|
-
expect(mergeResult.conflicts).toBeDefined();
|
|
248
|
-
expect(mergeResult.conflicts.length).toBeGreaterThan(0);
|
|
249
|
-
// Merged content should have conflict markers
|
|
250
|
-
expect(mergeResult.merged).toContain('<<<<<<< LOCAL');
|
|
251
|
-
expect(mergeResult.merged).toContain('=======');
|
|
252
|
-
expect(mergeResult.merged).toContain('>>>>>>> UPSTREAM');
|
|
253
|
-
});
|
|
254
|
-
it('should identify conflict line numbers', async () => {
|
|
255
|
-
const base = `Line 1
|
|
256
|
-
Line 2
|
|
257
|
-
Line 3`;
|
|
258
|
-
const local = `Line 1
|
|
259
|
-
LOCAL change
|
|
260
|
-
Line 3`;
|
|
261
|
-
const upstream = `Line 1
|
|
262
|
-
UPSTREAM change
|
|
263
|
-
Line 3`;
|
|
264
|
-
const mergeResult = threeWayMerge(base, local, upstream);
|
|
265
|
-
expect(mergeResult.success).toBe(false);
|
|
266
|
-
expect(mergeResult.conflicts).toBeDefined();
|
|
267
|
-
expect(mergeResult.conflicts[0].lineNumber).toBeDefined();
|
|
268
|
-
});
|
|
269
|
-
});
|
|
270
|
-
describe('Scenario 5: conflictAction=cancel aborts installation', () => {
|
|
271
|
-
it('should preserve original content when cancel is chosen', async () => {
|
|
272
|
-
const skillName = 'cancel-test-skill';
|
|
273
|
-
const skillPath = path.join(fsContext.skillsDir, skillName);
|
|
274
|
-
await fs.mkdir(skillPath, { recursive: true });
|
|
275
|
-
const originalContent = `# Cancel Test Skill
|
|
276
|
-
|
|
277
|
-
This content should remain unchanged after cancel.
|
|
278
|
-
The user decided not to proceed with the update.
|
|
279
|
-
|
|
280
|
-
## User Customization
|
|
281
|
-
Important customizations that must be preserved.
|
|
282
|
-
`;
|
|
283
|
-
await fs.writeFile(path.join(skillPath, 'SKILL.md'), originalContent);
|
|
284
|
-
// Simulate cancel action - content should not change
|
|
285
|
-
// (In real implementation, the install function returns early)
|
|
286
|
-
// Verify content unchanged
|
|
287
|
-
const currentContent = await fs.readFile(path.join(skillPath, 'SKILL.md'), 'utf-8');
|
|
288
|
-
expect(currentContent).toBe(originalContent);
|
|
289
|
-
});
|
|
290
|
-
});
|
|
291
|
-
describe('Original Content Storage and Retrieval', () => {
|
|
292
|
-
it('should store and retrieve original content for future merges', async () => {
|
|
293
|
-
const skillName = 'storage-test-skill';
|
|
294
|
-
const originalContent = `# Storage Test
|
|
295
|
-
|
|
296
|
-
This content will be stored for future conflict resolution.
|
|
297
|
-
It serves as the base for three-way merges.
|
|
298
|
-
|
|
299
|
-
## Important
|
|
300
|
-
This section contains critical information.
|
|
301
|
-
`;
|
|
302
|
-
const metadata = {
|
|
303
|
-
version: '1.0.0',
|
|
304
|
-
source: 'github:owner/storage-test-skill',
|
|
305
|
-
installedAt: new Date().toISOString(),
|
|
306
|
-
};
|
|
307
|
-
// Store original
|
|
308
|
-
await storeOriginal(skillName, originalContent, metadata);
|
|
309
|
-
// Retrieve original
|
|
310
|
-
const retrieved = await loadOriginal(skillName);
|
|
311
|
-
expect(retrieved).toBe(originalContent);
|
|
312
|
-
});
|
|
313
|
-
it('should return null for skill without stored original', async () => {
|
|
314
|
-
const result = await loadOriginal('nonexistent-skill');
|
|
315
|
-
expect(result).toBeNull();
|
|
316
|
-
});
|
|
317
|
-
});
|
|
318
|
-
describe('Hash Computation', () => {
|
|
319
|
-
it('should produce consistent hashes for same content', () => {
|
|
320
|
-
const content = 'Test content for hashing';
|
|
321
|
-
const hash1 = hashContent(content);
|
|
322
|
-
const hash2 = hashContent(content);
|
|
323
|
-
expect(hash1).toBe(hash2);
|
|
324
|
-
});
|
|
325
|
-
it('should produce different hashes for different content', () => {
|
|
326
|
-
const hash1 = hashContent('Content A');
|
|
327
|
-
const hash2 = hashContent('Content B');
|
|
328
|
-
expect(hash1).not.toBe(hash2);
|
|
329
|
-
});
|
|
330
|
-
it('should produce 64-character SHA-256 hex string', () => {
|
|
331
|
-
const hash = hashContent('Any content');
|
|
332
|
-
expect(hash).toMatch(/^[a-f0-9]{64}$/);
|
|
333
|
-
});
|
|
334
|
-
});
|
|
335
|
-
describe('Manifest Update with Original Hash', () => {
|
|
336
|
-
it('should store originalContentHash in manifest entry', async () => {
|
|
337
|
-
const skillName = 'hash-manifest-skill';
|
|
338
|
-
const content = `# Hash Manifest Test
|
|
339
|
-
|
|
340
|
-
Testing that the original content hash is stored in manifest.
|
|
341
|
-
This enables future modification detection.
|
|
342
|
-
|
|
343
|
-
## Section
|
|
344
|
-
Content section.
|
|
345
|
-
`;
|
|
346
|
-
const contentHash = hashContent(content);
|
|
347
|
-
await createMockManifest(fsContext.manifestDir, {
|
|
348
|
-
[skillName]: {
|
|
349
|
-
id: 'owner/hash-manifest-skill',
|
|
350
|
-
name: skillName,
|
|
351
|
-
version: '1.0.0',
|
|
352
|
-
source: 'github:owner/hash-manifest-skill',
|
|
353
|
-
installPath: path.join(fsContext.skillsDir, skillName),
|
|
354
|
-
installedAt: new Date().toISOString(),
|
|
355
|
-
lastUpdated: new Date().toISOString(),
|
|
356
|
-
},
|
|
357
|
-
});
|
|
358
|
-
// Update manifest to include originalContentHash
|
|
359
|
-
const manifestPath = path.join(fsContext.manifestDir, 'manifest.json');
|
|
360
|
-
const manifest = await readJsonFile(manifestPath);
|
|
361
|
-
manifest.installedSkills[skillName].originalContentHash = contentHash;
|
|
362
|
-
await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2));
|
|
363
|
-
// Verify hash is stored
|
|
364
|
-
const updated = await readJsonFile(manifestPath);
|
|
365
|
-
expect(updated.installedSkills[skillName].originalContentHash).toBe(contentHash);
|
|
366
|
-
});
|
|
367
|
-
});
|
|
368
|
-
describe('Backup Cleanup', () => {
|
|
369
|
-
it('should create multiple backups with unique timestamps', async () => {
|
|
370
|
-
const skillName = 'multi-backup-skill';
|
|
371
|
-
const skillPath = path.join(fsContext.skillsDir, skillName);
|
|
372
|
-
await fs.mkdir(skillPath, { recursive: true });
|
|
373
|
-
await fs.writeFile(path.join(skillPath, 'SKILL.md'), '# Multi Backup\n\nContent for backup testing with multiple versions.');
|
|
374
|
-
// Create multiple backups
|
|
375
|
-
const backup1 = await createSkillBackup(skillName, skillPath, 'backup-1');
|
|
376
|
-
await new Promise((r) => setTimeout(r, 10)); // Ensure different timestamps
|
|
377
|
-
const backup2 = await createSkillBackup(skillName, skillPath, 'backup-2');
|
|
378
|
-
expect(backup1).not.toBe(backup2);
|
|
379
|
-
expect(await fileExists(backup1)).toBe(true);
|
|
380
|
-
expect(await fileExists(backup2)).toBe(true);
|
|
381
|
-
});
|
|
382
|
-
});
|
|
383
|
-
});
|
|
384
|
-
//# sourceMappingURL=install-conflict.integration.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install-conflict.integration.test.js","sourceRoot":"","sources":["../../../tests/integration/install-conflict.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview SMI-1491 & SMI-1533: Install Tool Parsing and Trust Tier Tests
|
|
3
|
-
* @module @skillsmith/mcp-server/tests/integration/install-trust-parsing
|
|
4
|
-
* @see SMI-1491, SMI-1533, SMI-1880
|
|
5
|
-
*
|
|
6
|
-
* Split from install.integration.test.ts per governance (500 line limit)
|
|
7
|
-
*
|
|
8
|
-
* Tests cover:
|
|
9
|
-
* - SMI-1491: parseRepoUrl and parseSkillId with isRegistryId
|
|
10
|
-
* - SMI-1533: Trust-tier security scanning
|
|
11
|
-
*/
|
|
12
|
-
export {};
|
|
13
|
-
//# sourceMappingURL=install-trust-parsing.integration.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install-trust-parsing.integration.test.d.ts","sourceRoot":"","sources":["../../../tests/integration/install-trust-parsing.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|