@ms-cloudpack/package-utilities 0.2.0 → 0.3.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/CHANGELOG.json +16 -1
- package/CHANGELOG.md +10 -2
- package/lib/createImportMap.d.ts +7 -0
- package/lib/createImportMap.js +47 -0
- package/lib/createImportMap.js.map +1 -0
- package/lib/createImportMap.test.d.ts +1 -0
- package/lib/createImportMap.test.js +176 -0
- package/lib/createImportMap.test.js.map +1 -0
- package/lib/createResolveMap.d.ts +5 -3
- package/lib/createResolveMap.js +12 -17
- package/lib/createResolveMap.js.map +1 -1
- package/lib/createResolveMap.test.js +20 -1
- package/lib/createResolveMap.test.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.json
CHANGED
|
@@ -2,7 +2,22 @@
|
|
|
2
2
|
"name": "@ms-cloudpack/package-utilities",
|
|
3
3
|
"entries": [
|
|
4
4
|
{
|
|
5
|
-
"date": "
|
|
5
|
+
"date": "Sat, 21 May 2022 00:31:20 GMT",
|
|
6
|
+
"tag": "@ms-cloudpack/package-utilities_v0.3.0",
|
|
7
|
+
"version": "0.3.0",
|
|
8
|
+
"comments": {
|
|
9
|
+
"minor": [
|
|
10
|
+
{
|
|
11
|
+
"author": "dzearing@microsoft.com",
|
|
12
|
+
"package": "@ms-cloudpack/package-utilities",
|
|
13
|
+
"commit": "c26c7bcc7abda501d07180598e3da003b435b03b",
|
|
14
|
+
"comment": "Adding api to generate an import map based on a resolve map."
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"date": "Fri, 20 May 2022 04:26:15 GMT",
|
|
6
21
|
"tag": "@ms-cloudpack/package-utilities_v0.2.0",
|
|
7
22
|
"version": "0.2.0",
|
|
8
23
|
"comments": {
|
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
# Change Log - @ms-cloudpack/package-utilities
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Sat, 21 May 2022 00:31:20 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
+
## 0.3.0
|
|
8
|
+
|
|
9
|
+
Sat, 21 May 2022 00:31:20 GMT
|
|
10
|
+
|
|
11
|
+
### Minor changes
|
|
12
|
+
|
|
13
|
+
- Adding api to generate an import map based on a resolve map. (dzearing@microsoft.com)
|
|
14
|
+
|
|
7
15
|
## 0.2.0
|
|
8
16
|
|
|
9
|
-
Fri, 20 May 2022 04:
|
|
17
|
+
Fri, 20 May 2022 04:26:15 GMT
|
|
10
18
|
|
|
11
19
|
### Minor changes
|
|
12
20
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ResolveMap } from './createResolveMap.js';
|
|
2
|
+
import { type PackageDefinition } from './getPackageDefinition.js';
|
|
3
|
+
export interface ImportMap {
|
|
4
|
+
imports: Record<string, string>;
|
|
5
|
+
scopes?: Record<string, Record<string, string>>;
|
|
6
|
+
}
|
|
7
|
+
export declare function createImportMap(resolveMap: ResolveMap, bundleServerUrl: string, packageDefinitions?: Record<string, PackageDefinition>): Promise<ImportMap>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { slash } from '@ms-cloudpack/path-utilities';
|
|
3
|
+
import { getPackageDefinition } from './getPackageDefinition.js';
|
|
4
|
+
import { getExportPathFromEntry } from './getExportPathFromEntry.js';
|
|
5
|
+
import { merge } from 'merge';
|
|
6
|
+
export async function createImportMap(resolveMap, bundleServerUrl, packageDefinitions) {
|
|
7
|
+
const importMap = {
|
|
8
|
+
imports: {},
|
|
9
|
+
};
|
|
10
|
+
for (const resolveEntry of Object.values(resolveMap)) {
|
|
11
|
+
merge(importMap.imports, await getImportMapFromEntry(resolveEntry, bundleServerUrl, packageDefinitions));
|
|
12
|
+
if (resolveEntry.scopedVersions) {
|
|
13
|
+
// Initialize scopes
|
|
14
|
+
importMap.scopes = importMap.scopes || {};
|
|
15
|
+
for (const scopedEntry of Object.values(resolveEntry.scopedVersions)) {
|
|
16
|
+
for (const requiredById of scopedEntry.requiredBy) {
|
|
17
|
+
const requiredByUrl = `${bundleServerUrl}/${requiredById}/`;
|
|
18
|
+
importMap.scopes[requiredByUrl] = await getImportMapFromEntry(scopedEntry, bundleServerUrl, packageDefinitions);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return importMap;
|
|
24
|
+
}
|
|
25
|
+
async function getImportMapFromEntry(entry, bundleServerUrl, packageDefinitions) {
|
|
26
|
+
const importMap = {};
|
|
27
|
+
const definition = packageDefinitions?.[entry.path] || (await getPackageDefinition(entry.path, true));
|
|
28
|
+
if (definition) {
|
|
29
|
+
const baseUrl = `${bundleServerUrl}/${definition.name}@${definition.version}`;
|
|
30
|
+
if (definition.exports) {
|
|
31
|
+
for (const [exportKey, exportEntry] of Object.entries(definition.exports)) {
|
|
32
|
+
const importAlias = slash(path.join(definition.name, exportKey));
|
|
33
|
+
if (!importMap[importAlias]) {
|
|
34
|
+
const exportPath = getExportPathFromEntry(exportEntry);
|
|
35
|
+
if (exportPath) {
|
|
36
|
+
importMap[importAlias] = slash(path.join(baseUrl, exportPath));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
importMap[definition.name] = slash(path.join(baseUrl, definition.module || definition.main || 'index.js'));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return importMap;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=createImportMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createImportMap.js","sourceRoot":"","sources":["../src/createImportMap.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAErD,OAAO,EAAE,oBAAoB,EAA0B,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAO9B,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAsB,EACtB,eAAuB,EACvB,kBAAsD;IAEtD,MAAM,SAAS,GAAc;QAC3B,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;QACpD,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,qBAAqB,CAAC,YAAY,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAC,CAAC;QAEzG,IAAI,YAAY,CAAC,cAAc,EAAE;YAC/B,oBAAoB;YACpB,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;YAE1C,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;gBACpE,KAAK,MAAM,YAAY,IAAI,WAAW,CAAC,UAAU,EAAE;oBACjD,MAAM,aAAa,GAAG,GAAG,eAAe,IAAI,YAAY,GAAG,CAAC;oBAC5D,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,qBAAqB,CAC3D,WAAW,EACX,eAAe,EACf,kBAAkB,CACnB,CAAC;iBACH;aACF;SACF;KACF;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,KAAsB,EACtB,eAAuB,EACvB,kBAAsD;IAEtD,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAEtG,IAAI,UAAU,EAAE;QACd,MAAM,OAAO,GAAG,GAAG,eAAe,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QAE9E,IAAI,UAAU,CAAC,OAAO,EAAE;YACtB,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;gBACzE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;gBAEjE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;oBAC3B,MAAM,UAAU,GAAuB,sBAAsB,CAAC,WAAW,CAAC,CAAC;oBAE3E,IAAI,UAAU,EAAE;wBACd,SAAS,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;qBAChE;iBACF;aACF;SACF;aAAM;YACL,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC;SAC5G;KACF;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { createImportMap } from './createImportMap.js';
|
|
2
|
+
const bundleServerUrl = 'http://localhost:12345';
|
|
3
|
+
const basicResolveMapEntry = { name: 'a', version: '1.0.0', path: 'path/a', requiredBy: [] };
|
|
4
|
+
describe('createImportMap', () => {
|
|
5
|
+
it('can translate a package with no entries', async () => {
|
|
6
|
+
const resolveMap = {
|
|
7
|
+
a: basicResolveMapEntry,
|
|
8
|
+
};
|
|
9
|
+
const packages = {
|
|
10
|
+
'path/a': {
|
|
11
|
+
name: 'a',
|
|
12
|
+
version: '1.0.0',
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
expect(await createImportMap(resolveMap, bundleServerUrl, packages)).toMatchInlineSnapshot(`
|
|
16
|
+
Object {
|
|
17
|
+
"imports": Object {
|
|
18
|
+
"a": "http:/localhost:12345/a@1.0.0/index.js",
|
|
19
|
+
},
|
|
20
|
+
}
|
|
21
|
+
`);
|
|
22
|
+
});
|
|
23
|
+
it('can translate a package with 1 main entry', async () => {
|
|
24
|
+
const resolveMap = {
|
|
25
|
+
a: basicResolveMapEntry,
|
|
26
|
+
};
|
|
27
|
+
const packages = {
|
|
28
|
+
'path/a': {
|
|
29
|
+
name: 'a',
|
|
30
|
+
version: '1.0.0',
|
|
31
|
+
main: './foo/main.js',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
expect(await createImportMap(resolveMap, bundleServerUrl, packages)).toMatchInlineSnapshot(`
|
|
35
|
+
Object {
|
|
36
|
+
"imports": Object {
|
|
37
|
+
"a": "http:/localhost:12345/a@1.0.0/foo/main.js",
|
|
38
|
+
},
|
|
39
|
+
}
|
|
40
|
+
`);
|
|
41
|
+
});
|
|
42
|
+
it('can translate a package with 1 module entry', async () => {
|
|
43
|
+
const resolveMap = {
|
|
44
|
+
a: basicResolveMapEntry,
|
|
45
|
+
};
|
|
46
|
+
const packages = {
|
|
47
|
+
'path/a': {
|
|
48
|
+
name: 'a',
|
|
49
|
+
version: '1.0.0',
|
|
50
|
+
module: './foo/module.js',
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
expect(await createImportMap(resolveMap, bundleServerUrl, packages)).toMatchInlineSnapshot(`
|
|
54
|
+
Object {
|
|
55
|
+
"imports": Object {
|
|
56
|
+
"a": "http:/localhost:12345/a@1.0.0/foo/module.js",
|
|
57
|
+
},
|
|
58
|
+
}
|
|
59
|
+
`);
|
|
60
|
+
});
|
|
61
|
+
it('prefers module over main', async () => {
|
|
62
|
+
const resolveMap = {
|
|
63
|
+
a: basicResolveMapEntry,
|
|
64
|
+
};
|
|
65
|
+
const packages = {
|
|
66
|
+
'path/a': {
|
|
67
|
+
name: 'a',
|
|
68
|
+
version: '1.0.0',
|
|
69
|
+
main: './foo/main.js',
|
|
70
|
+
module: './foo/module.js',
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
expect(await createImportMap(resolveMap, bundleServerUrl, packages)).toMatchInlineSnapshot(`
|
|
74
|
+
Object {
|
|
75
|
+
"imports": Object {
|
|
76
|
+
"a": "http:/localhost:12345/a@1.0.0/foo/module.js",
|
|
77
|
+
},
|
|
78
|
+
}
|
|
79
|
+
`);
|
|
80
|
+
});
|
|
81
|
+
it('can translate a package with a basic exports map (value = string)', async () => {
|
|
82
|
+
const resolveMap = {
|
|
83
|
+
a: basicResolveMapEntry,
|
|
84
|
+
};
|
|
85
|
+
const packages = {
|
|
86
|
+
'path/a': {
|
|
87
|
+
name: 'a',
|
|
88
|
+
version: '1.0.0',
|
|
89
|
+
exports: {
|
|
90
|
+
'.': './foo/string.js',
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
expect(await createImportMap(resolveMap, bundleServerUrl, packages)).toMatchInlineSnapshot(`
|
|
95
|
+
Object {
|
|
96
|
+
"imports": Object {
|
|
97
|
+
"a": "http:/localhost:12345/a@1.0.0/foo/string.js",
|
|
98
|
+
},
|
|
99
|
+
}
|
|
100
|
+
`);
|
|
101
|
+
});
|
|
102
|
+
it('can translate a package with a basic exports map (value = object, default)', async () => {
|
|
103
|
+
const resolveMap = {
|
|
104
|
+
a: basicResolveMapEntry,
|
|
105
|
+
};
|
|
106
|
+
const packages = {
|
|
107
|
+
'path/a': {
|
|
108
|
+
name: 'a',
|
|
109
|
+
version: '1.0.0',
|
|
110
|
+
exports: {
|
|
111
|
+
'.': { default: './foo/default.js' },
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
expect(await createImportMap(resolveMap, bundleServerUrl, packages)).toMatchInlineSnapshot(`
|
|
116
|
+
Object {
|
|
117
|
+
"imports": Object {
|
|
118
|
+
"a": "http:/localhost:12345/a@1.0.0/foo/default.js",
|
|
119
|
+
},
|
|
120
|
+
}
|
|
121
|
+
`);
|
|
122
|
+
});
|
|
123
|
+
it('can translate a package with a basic exports map (value = object, prefer import)', async () => {
|
|
124
|
+
const resolveMap = {
|
|
125
|
+
a: basicResolveMapEntry,
|
|
126
|
+
};
|
|
127
|
+
const packages = {
|
|
128
|
+
'path/a': {
|
|
129
|
+
name: 'a',
|
|
130
|
+
version: '1.0.0',
|
|
131
|
+
exports: {
|
|
132
|
+
'.': {
|
|
133
|
+
import: './foo/import.js',
|
|
134
|
+
default: './foo/default.js',
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
expect(await createImportMap(resolveMap, bundleServerUrl, packages)).toMatchInlineSnapshot(`
|
|
140
|
+
Object {
|
|
141
|
+
"imports": Object {
|
|
142
|
+
"a": "http:/localhost:12345/a@1.0.0/foo/import.js",
|
|
143
|
+
},
|
|
144
|
+
}
|
|
145
|
+
`);
|
|
146
|
+
});
|
|
147
|
+
it('can translate a package with a basic exports map (value = object, named export)', async () => {
|
|
148
|
+
const resolveMap = {
|
|
149
|
+
a: basicResolveMapEntry,
|
|
150
|
+
};
|
|
151
|
+
const packages = {
|
|
152
|
+
'path/a': {
|
|
153
|
+
name: 'a',
|
|
154
|
+
version: '1.0.0',
|
|
155
|
+
exports: {
|
|
156
|
+
'.': {
|
|
157
|
+
import: './foo/import.js',
|
|
158
|
+
default: './foo/default.js',
|
|
159
|
+
},
|
|
160
|
+
'./lib/Button': {
|
|
161
|
+
import: './lib/Button.js',
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
expect(await createImportMap(resolveMap, bundleServerUrl, packages)).toMatchInlineSnapshot(`
|
|
167
|
+
Object {
|
|
168
|
+
"imports": Object {
|
|
169
|
+
"a": "http:/localhost:12345/a@1.0.0/foo/import.js",
|
|
170
|
+
"a/lib/Button": "http:/localhost:12345/a@1.0.0/lib/Button.js",
|
|
171
|
+
},
|
|
172
|
+
}
|
|
173
|
+
`);
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
//# sourceMappingURL=createImportMap.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createImportMap.test.js","sourceRoot":"","sources":["../src/createImportMap.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,13 +3,15 @@ export declare type ResolveMapEntry = {
|
|
|
3
3
|
name: string;
|
|
4
4
|
version: string;
|
|
5
5
|
path: string;
|
|
6
|
+
requiredBy: string[];
|
|
6
7
|
scopedVersions?: {
|
|
7
|
-
[
|
|
8
|
+
[version: string]: ResolveMapEntry;
|
|
8
9
|
};
|
|
9
10
|
};
|
|
10
|
-
export declare type
|
|
11
|
-
|
|
11
|
+
export declare type PartialResolveMapEntry = Omit<ResolveMapEntry, 'requiredBy'> & {
|
|
12
|
+
requiredBy: Set<string>;
|
|
12
13
|
};
|
|
14
|
+
export declare type ResolveMap = Record<string, ResolveMapEntry>;
|
|
13
15
|
export declare function createResolveMap(options: {
|
|
14
16
|
appPath: string;
|
|
15
17
|
additionalPaths?: string[];
|
package/lib/createResolveMap.js
CHANGED
|
@@ -4,7 +4,6 @@ export async function createResolveMap(options) {
|
|
|
4
4
|
const { appPath, additionalPaths = [] } = options;
|
|
5
5
|
const visitedPaths = new Set([appPath, ...additionalPaths]);
|
|
6
6
|
const pathsToVisit = [appPath, ...additionalPaths];
|
|
7
|
-
const relationships = {};
|
|
8
7
|
const allEntries = {};
|
|
9
8
|
while (pathsToVisit.length) {
|
|
10
9
|
const packagePath = pathsToVisit.shift();
|
|
@@ -12,16 +11,13 @@ export async function createResolveMap(options) {
|
|
|
12
11
|
const definition = await getPackageDefinition(packagePath, true);
|
|
13
12
|
if (definition) {
|
|
14
13
|
const packageId = `${definition.name}@${definition.version}`;
|
|
15
|
-
allEntries[packageId] = createMapEntry(definition, packagePath);
|
|
16
14
|
for (const depName of Object.keys(definition?.dependencies || {})) {
|
|
17
15
|
const dependencyPath = findPackagePath(depName, packagePath);
|
|
18
16
|
const dependencyDefinition = await getPackageDefinition(dependencyPath, true);
|
|
19
17
|
if (dependencyDefinition) {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
depVersionList[dependencyDefinition.version] || []);
|
|
24
|
-
relationshipList.push(packageId);
|
|
18
|
+
const dependencyNamedEntries = (allEntries[dependencyDefinition.name] ??= {});
|
|
19
|
+
const dependencyEntry = (dependencyNamedEntries[dependencyDefinition.version] ??= createMapEntry(dependencyDefinition, dependencyPath));
|
|
20
|
+
dependencyEntry.requiredBy.add(packageId);
|
|
25
21
|
if (!visitedPaths.has(dependencyPath)) {
|
|
26
22
|
visitedPaths.add(dependencyPath);
|
|
27
23
|
pathsToVisit.push(dependencyPath);
|
|
@@ -34,21 +30,19 @@ export async function createResolveMap(options) {
|
|
|
34
30
|
// Now we have all entries and relationships. Iterate through the relationships to build
|
|
35
31
|
// The final resolve map.
|
|
36
32
|
const resolveMap = {};
|
|
37
|
-
for (const [name, versions] of Object.entries(
|
|
33
|
+
for (const [name, versions] of Object.entries(allEntries)) {
|
|
38
34
|
const [dominantVersion, ...otherVersions] = Object.keys(versions).sort((a, b) => {
|
|
39
|
-
return versions[a].
|
|
35
|
+
return versions[a].requiredBy.size < versions[b].requiredBy.size ? 1 : -1;
|
|
40
36
|
});
|
|
41
|
-
|
|
42
|
-
const entry = (resolveMap[name] =
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
38
|
+
const entry = (resolveMap[name] = allEntries[name][dominantVersion]);
|
|
39
|
+
entry.requiredBy = Array.from(entry.requiredBy);
|
|
43
40
|
if (otherVersions?.length) {
|
|
44
41
|
entry.scopedVersions = {};
|
|
45
42
|
for (const otherVersion of otherVersions) {
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
for (const dependentId of dependents) {
|
|
50
|
-
entry.scopedVersions[dependentId] = scopedId;
|
|
51
|
-
}
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
|
+
const scopedEntry = (entry.scopedVersions[otherVersion] = versions[otherVersion]);
|
|
45
|
+
scopedEntry.requiredBy = Array.from(scopedEntry.requiredBy);
|
|
52
46
|
}
|
|
53
47
|
}
|
|
54
48
|
}
|
|
@@ -60,6 +54,7 @@ function createMapEntry(packageDefinition, packagePath) {
|
|
|
60
54
|
name,
|
|
61
55
|
version,
|
|
62
56
|
path: packagePath,
|
|
57
|
+
requiredBy: new Set(),
|
|
63
58
|
};
|
|
64
59
|
}
|
|
65
60
|
//# sourceMappingURL=createResolveMap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createResolveMap.js","sourceRoot":"","sources":["../src/createResolveMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAA0B,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"createResolveMap.js","sourceRoot":"","sources":["../src/createResolveMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,26 @@ import { testProject1Path } from '../src/testPaths.js';
|
|
|
6
6
|
const createResolveMapSafe = async (options) => filterJson(await createResolveMap(options), 'path', (oldPath) => slash(path.relative(testProject1Path, oldPath)));
|
|
7
7
|
describe('createResolveMap', () => {
|
|
8
8
|
it('can create a resolve map', async () => {
|
|
9
|
-
expect(await createResolveMapSafe({ appPath: testProject1Path })).
|
|
9
|
+
expect(await createResolveMapSafe({ appPath: testProject1Path })).toMatchInlineSnapshot(`
|
|
10
|
+
Object {
|
|
11
|
+
"b": Object {
|
|
12
|
+
"name": "b",
|
|
13
|
+
"path": "node_modules/b",
|
|
14
|
+
"requiredBy": Array [
|
|
15
|
+
"test-project-1@0.0.1",
|
|
16
|
+
],
|
|
17
|
+
"version": "1.0.0",
|
|
18
|
+
},
|
|
19
|
+
"c": Object {
|
|
20
|
+
"name": "c",
|
|
21
|
+
"path": "node_modules/c",
|
|
22
|
+
"requiredBy": Array [
|
|
23
|
+
"test-project-1@0.0.1",
|
|
24
|
+
],
|
|
25
|
+
"version": "1.0.0",
|
|
26
|
+
},
|
|
27
|
+
}
|
|
28
|
+
`);
|
|
10
29
|
});
|
|
11
30
|
});
|
|
12
31
|
//# sourceMappingURL=createResolveMap.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createResolveMap.test.js","sourceRoot":"","sources":["../src/createResolveMap.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,oBAAoB,GAA4B,KAAK,EAAE,OAAO,EAAE,EAAE,CACtE,UAAU,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAEpH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,CAAC,MAAM,oBAAoB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"createResolveMap.test.js","sourceRoot":"","sources":["../src/createResolveMap.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,oBAAoB,GAA4B,KAAK,EAAE,OAAO,EAAE,EAAE,CACtE,UAAU,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAEpH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,CAAC,MAAM,oBAAoB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;KAmBvF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/lib/index.d.ts
CHANGED
|
@@ -7,3 +7,4 @@ export { resolveImportFromPackage, resolveImportFromPackagePath, type ResolveImp
|
|
|
7
7
|
export { detectModuleType, type ModuleType } from './detectModuleType.js';
|
|
8
8
|
export { resolvePackageEntries } from './resolvePackageEntries.js';
|
|
9
9
|
export { isExternalPackage } from './isExternalPackage.js';
|
|
10
|
+
export { createImportMap, type ImportMap } from './createImportMap.js';
|
package/lib/index.js
CHANGED
|
@@ -6,4 +6,5 @@ export { resolveImportFromPackage, resolveImportFromPackagePath, } from './resol
|
|
|
6
6
|
export { detectModuleType } from './detectModuleType.js';
|
|
7
7
|
export { resolvePackageEntries } from './resolvePackageEntries.js';
|
|
8
8
|
export { isExternalPackage } from './isExternalPackage.js';
|
|
9
|
+
export { createImportMap } from './createImportMap.js';
|
|
9
10
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAyC,MAAM,uBAAuB,CAAC;AAEhG,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAA6C,MAAM,2BAA2B,CAAC;AAC5G,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,wBAAwB,EACxB,4BAA4B,GAE7B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAmB,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAyC,MAAM,uBAAuB,CAAC;AAEhG,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAA6C,MAAM,2BAA2B,CAAC;AAC5G,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,wBAAwB,EACxB,4BAA4B,GAE7B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAmB,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAkB,MAAM,sBAAsB,CAAC"}
|