@ms-cloudpack/package-utilities 0.5.1 → 0.7.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 +46 -1
- package/CHANGELOG.md +29 -2
- package/README.md +3 -0
- package/lib/createImportMap.js +5 -2
- package/lib/createImportMap.js.map +1 -1
- package/lib/createImportMap.test.js +1 -1
- package/lib/createResolveMap.d.ts +3 -4
- package/lib/createResolveMap.js +52 -29
- package/lib/createResolveMap.js.map +1 -1
- package/lib/createResolveMap.test.js +236 -9
- package/lib/createResolveMap.test.js.map +1 -1
- package/lib/detectModuleType.js +8 -1
- package/lib/detectModuleType.js.map +1 -1
- package/lib/detectModuleType.test.js +7 -1
- package/lib/detectModuleType.test.js.map +1 -1
- package/lib/evaluateImportsFromEntries.js +0 -3
- package/lib/evaluateImportsFromEntries.js.map +1 -1
- package/lib/evaluateImportsFromEntries.test.js +30 -1
- package/lib/evaluateImportsFromEntries.test.js.map +1 -1
- package/lib/findPackagePath.d.ts +1 -1
- package/lib/findPackagePath.js +13 -5
- package/lib/findPackagePath.js.map +1 -1
- package/lib/getExportPathFromEntry.js +1 -1
- package/lib/getExportPathFromEntry.js.map +1 -1
- package/lib/getExportPathFromEntry.test.js +7 -0
- package/lib/getExportPathFromEntry.test.js.map +1 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.js.map +1 -1
- package/lib/resolve.d.ts +6 -0
- package/lib/resolve.js +6 -0
- package/lib/resolve.js.map +1 -1
- package/lib/resolve.test.js +1 -1
- package/lib/resolveImportFromPackagePath.js +0 -1
- package/lib/resolveImportFromPackagePath.js.map +1 -1
- package/lib/resolvePackageEntries.js +11 -15
- package/lib/resolvePackageEntries.js.map +1 -1
- package/lib/resolvePackageEntries.test.js +7 -0
- package/lib/resolvePackageEntries.test.js.map +1 -1
- package/lib/testPaths.d.ts +8 -0
- package/lib/testPaths.js +8 -0
- package/lib/testPaths.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/package.json +1 -1
- package/lib/getInstalledPackages.d.ts +0 -44
- package/lib/getInstalledPackages.js +0 -85
- package/lib/getInstalledPackages.js.map +0 -1
- package/lib/getInstalledPackages.test.d.ts +0 -1
- package/lib/getInstalledPackages.test.js +0 -14
- package/lib/getInstalledPackages.test.js.map +0 -1
package/CHANGELOG.json
CHANGED
|
@@ -2,7 +2,52 @@
|
|
|
2
2
|
"name": "@ms-cloudpack/package-utilities",
|
|
3
3
|
"entries": [
|
|
4
4
|
{
|
|
5
|
-
"date": "Tue,
|
|
5
|
+
"date": "Tue, 16 Aug 2022 08:11:49 GMT",
|
|
6
|
+
"tag": "@ms-cloudpack/package-utilities_v0.7.0",
|
|
7
|
+
"version": "0.7.0",
|
|
8
|
+
"comments": {
|
|
9
|
+
"minor": [
|
|
10
|
+
{
|
|
11
|
+
"author": "dzearing@microsoft.com",
|
|
12
|
+
"package": "@ms-cloudpack/package-utilities",
|
|
13
|
+
"commit": "2187bf0fedddd542358718315866fcb6255cfcf2",
|
|
14
|
+
"comment": "Removing unused code."
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"date": "Fri, 12 Aug 2022 08:12:39 GMT",
|
|
21
|
+
"tag": "@ms-cloudpack/package-utilities_v0.6.1",
|
|
22
|
+
"version": "0.6.1",
|
|
23
|
+
"comments": {
|
|
24
|
+
"patch": [
|
|
25
|
+
{
|
|
26
|
+
"author": "dzearing@microsoft.com",
|
|
27
|
+
"package": "@ms-cloudpack/package-utilities",
|
|
28
|
+
"commit": "06b0e23a9cff634baf090a7310f9af625ca3922e",
|
|
29
|
+
"comment": "* evaluateImportsFromEntries: removing console logging\n* getExportPathFromEntry: adding \"module\" to the default list of conditions to use when deriving entry paths.\n* resolveImportFromPackagePath: removing console logging\n* resolvePackageEntries: if the browser entry is a string, resolve that over main or module."
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"date": "Fri, 05 Aug 2022 08:12:21 GMT",
|
|
36
|
+
"tag": "@ms-cloudpack/package-utilities_v0.6.0",
|
|
37
|
+
"version": "0.6.0",
|
|
38
|
+
"comments": {
|
|
39
|
+
"minor": [
|
|
40
|
+
{
|
|
41
|
+
"author": "dzearing@microsoft.com",
|
|
42
|
+
"package": "@ms-cloudpack/package-utilities",
|
|
43
|
+
"commit": "8aaedf79e1b7b0b33f19ab560f233bc9bd27b5e5",
|
|
44
|
+
"comment": "Tweaking a variety of API surface to prep for ori integration. Lots of improvements to how we resolve modules, lots of tests added."
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"date": "Tue, 02 Aug 2022 20:04:16 GMT",
|
|
6
51
|
"tag": "@ms-cloudpack/package-utilities_v0.5.1",
|
|
7
52
|
"version": "0.5.1",
|
|
8
53
|
"comments": {
|
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,39 @@
|
|
|
1
1
|
# Change Log - @ms-cloudpack/package-utilities
|
|
2
2
|
|
|
3
|
-
This log was last generated on Tue,
|
|
3
|
+
This log was last generated on Tue, 16 Aug 2022 08:11:49 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
+
## 0.7.0
|
|
8
|
+
|
|
9
|
+
Tue, 16 Aug 2022 08:11:49 GMT
|
|
10
|
+
|
|
11
|
+
### Minor changes
|
|
12
|
+
|
|
13
|
+
- Removing unused code. (dzearing@microsoft.com)
|
|
14
|
+
|
|
15
|
+
## 0.6.1
|
|
16
|
+
|
|
17
|
+
Fri, 12 Aug 2022 08:12:39 GMT
|
|
18
|
+
|
|
19
|
+
### Patches
|
|
20
|
+
|
|
21
|
+
- * evaluateImportsFromEntries: removing console logging
|
|
22
|
+
* getExportPathFromEntry: adding "module" to the default list of conditions to use when deriving entry paths.
|
|
23
|
+
* resolveImportFromPackagePath: removing console logging
|
|
24
|
+
* resolvePackageEntries: if the browser entry is a string, resolve that over main or module. (dzearing@microsoft.com)
|
|
25
|
+
|
|
26
|
+
## 0.6.0
|
|
27
|
+
|
|
28
|
+
Fri, 05 Aug 2022 08:12:21 GMT
|
|
29
|
+
|
|
30
|
+
### Minor changes
|
|
31
|
+
|
|
32
|
+
- Tweaking a variety of API surface to prep for ori integration. Lots of improvements to how we resolve modules, lots of tests added. (dzearing@microsoft.com)
|
|
33
|
+
|
|
7
34
|
## 0.5.1
|
|
8
35
|
|
|
9
|
-
Tue, 02 Aug 2022 20:04:
|
|
36
|
+
Tue, 02 Aug 2022 20:04:16 GMT
|
|
10
37
|
|
|
11
38
|
### Patches
|
|
12
39
|
|
package/README.md
ADDED
package/lib/createImportMap.js
CHANGED
|
@@ -13,9 +13,12 @@ export async function createImportMap(resolveMap, bundleServerUrl, packageDefini
|
|
|
13
13
|
// Initialize scopes
|
|
14
14
|
importMap.scopes ?? (importMap.scopes = {});
|
|
15
15
|
for (const scopedEntry of Object.values(resolveEntry.scopedVersions)) {
|
|
16
|
-
for (const requiredById of scopedEntry.requiredBy) {
|
|
16
|
+
for (const requiredById of Object.keys(scopedEntry.requiredBy)) {
|
|
17
17
|
const requiredByUrl = `${bundleServerUrl}/${requiredById}/`;
|
|
18
|
-
importMap.scopes[requiredByUrl] =
|
|
18
|
+
importMap.scopes[requiredByUrl] = {
|
|
19
|
+
...importMap.scopes[requiredByUrl],
|
|
20
|
+
...(await getImportMapFromEntry(scopedEntry, bundleServerUrl, packageDefinitions)),
|
|
21
|
+
};
|
|
19
22
|
}
|
|
20
23
|
}
|
|
21
24
|
}
|
|
@@ -1 +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,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAQ9B,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAsB,EACtB,eAAuB,EACvB,kBAAgD;IAEhD,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,KAAhB,SAAS,CAAC,MAAM,GAAK,EAAE,EAAC;YAExB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;gBACpE,KAAK,MAAM,YAAY,IAAI,WAAW,CAAC,UAAU,EAAE;
|
|
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,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAQ9B,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAsB,EACtB,eAAuB,EACvB,kBAAgD;IAEhD,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,KAAhB,SAAS,CAAC,MAAM,GAAK,EAAE,EAAC;YAExB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;gBACpE,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;oBAC9D,MAAM,aAAa,GAAG,GAAG,eAAe,IAAI,YAAY,GAAG,CAAC;oBAE5D,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG;wBAChC,GAAG,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC;wBAClC,GAAG,CAAC,MAAM,qBAAqB,CAAC,WAAW,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAC;qBACnF,CAAC;iBACH;aACF;SACF;KACF;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,KAAsB,EACtB,eAAuB,EACvB,kBAAgD;IAEhD,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,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,UAAU,CAAC;QACjC,MAAM,OAAO,GAAG,GAAG,eAAe,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,OAAO,GAAG,CAAC;QAE/E,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,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;gBAEtD,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,IAAI,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;qBAC5D;iBACF;aACF;SACF;aAAM;YACL,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;SAC7F;KACF;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createImportMap } from './createImportMap.js';
|
|
2
2
|
const bundleServerUrl = 'http://localhost:12345';
|
|
3
|
-
const basicResolveMapEntry = { name: 'a', version: '1.0.0', path: 'path/a', requiredBy:
|
|
3
|
+
const basicResolveMapEntry = { name: 'a', version: '1.0.0', path: 'path/a', requiredBy: {} };
|
|
4
4
|
describe('createImportMap', () => {
|
|
5
5
|
it('can translate a package with no entries', async () => {
|
|
6
6
|
const resolveMap = {
|
|
@@ -3,16 +3,15 @@ export declare type ResolveMapEntry = {
|
|
|
3
3
|
name: string;
|
|
4
4
|
version: string;
|
|
5
5
|
path: string;
|
|
6
|
-
requiredBy: string
|
|
6
|
+
requiredBy: Record<string, string>;
|
|
7
7
|
scopedVersions?: {
|
|
8
8
|
[version: string]: ResolveMapEntry;
|
|
9
9
|
};
|
|
10
10
|
};
|
|
11
|
-
export declare type PartialResolveMapEntry = Omit<ResolveMapEntry, 'requiredBy'> & {
|
|
12
|
-
requiredBy: Set<string>;
|
|
13
|
-
};
|
|
14
11
|
export declare type ResolveMap = Record<string, ResolveMapEntry>;
|
|
15
12
|
export declare function createResolveMap(options: {
|
|
16
13
|
appPath: string;
|
|
17
14
|
additionalPaths?: string[];
|
|
15
|
+
gitRootPath?: string;
|
|
16
|
+
strictVersioning?: boolean;
|
|
18
17
|
}): Promise<ResolveMap>;
|
package/lib/createResolveMap.js
CHANGED
|
@@ -1,29 +1,46 @@
|
|
|
1
1
|
import { getPackageDefinition } from './getPackageDefinition.js';
|
|
2
2
|
import { findPackagePath } from './findPackagePath.js';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
const { realpath } = fs.promises;
|
|
3
5
|
export async function createResolveMap(options) {
|
|
4
6
|
var _a, _b, _c, _d;
|
|
5
|
-
const { appPath, additionalPaths = [] } = options;
|
|
7
|
+
const { appPath, additionalPaths = [], gitRootPath, strictVersioning } = options;
|
|
6
8
|
const visitedPaths = new Set([appPath, ...additionalPaths]);
|
|
7
|
-
const pathsToVisit = [appPath, ...additionalPaths];
|
|
8
9
|
const allEntries = {};
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
10
|
+
const appDefinition = await getPackageDefinition(appPath, true);
|
|
11
|
+
const appId = `${appDefinition?.name}@${appDefinition?.version}`;
|
|
12
|
+
if (!appDefinition) {
|
|
13
|
+
throw new Error(`Could not find package.json for ${appPath}`);
|
|
14
|
+
}
|
|
15
|
+
for (const rootPath of [appPath, ...additionalPaths]) {
|
|
16
|
+
const pathsToVisit = [rootPath];
|
|
17
|
+
while (pathsToVisit.length) {
|
|
18
|
+
let packagePath = pathsToVisit.shift();
|
|
19
|
+
if (packagePath) {
|
|
20
|
+
packagePath = await realpath(packagePath);
|
|
21
|
+
const definition = await getPackageDefinition(packagePath, true);
|
|
22
|
+
if (definition && definition.name && definition.version) {
|
|
23
|
+
const packageId = `${definition.name}@${definition.version}`;
|
|
24
|
+
const namedEntries = (allEntries[_a = definition.name] ?? (allEntries[_a] = {}));
|
|
25
|
+
namedEntries[_b = definition.version] ?? (namedEntries[_b] = createMapEntry(definition, packagePath));
|
|
26
|
+
const packageDependencies = [
|
|
27
|
+
...Object.keys(definition?.dependencies || {}),
|
|
28
|
+
...Object.keys(definition?.peerDependencies || {}),
|
|
29
|
+
];
|
|
30
|
+
for (const depName of packageDependencies) {
|
|
31
|
+
const requiredVersion = definition?.dependencies?.[depName] || definition?.peerDependencies?.[depName];
|
|
32
|
+
const dependencyPath = await findPackagePath(depName, strictVersioning ? requiredVersion : undefined, packagePath, gitRootPath, !!definition?.peerDependencies?.[depName]);
|
|
33
|
+
if (dependencyPath) {
|
|
34
|
+
const dependencyDefinition = await getPackageDefinition(dependencyPath, true);
|
|
35
|
+
if (dependencyDefinition?.name && dependencyDefinition.version) {
|
|
36
|
+
const dependencyNamedEntries = (allEntries[_c = dependencyDefinition.name] ?? (allEntries[_c] = {}));
|
|
37
|
+
const dependencyEntry = (dependencyNamedEntries[_d = dependencyDefinition.version] ?? (dependencyNamedEntries[_d] = createMapEntry(dependencyDefinition, dependencyPath)));
|
|
38
|
+
dependencyEntry.requiredBy[packageId] = requiredVersion;
|
|
39
|
+
if (!visitedPaths.has(dependencyPath)) {
|
|
40
|
+
visitedPaths.add(dependencyPath);
|
|
41
|
+
pathsToVisit.push(dependencyPath);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
27
44
|
}
|
|
28
45
|
}
|
|
29
46
|
}
|
|
@@ -35,18 +52,24 @@ export async function createResolveMap(options) {
|
|
|
35
52
|
const resolveMap = {};
|
|
36
53
|
for (const [name, versions] of Object.entries(allEntries)) {
|
|
37
54
|
const [dominantVersion, ...otherVersions] = Object.keys(versions).sort((a, b) => {
|
|
38
|
-
|
|
55
|
+
if (versions[a].requiredBy[appId]) {
|
|
56
|
+
return -1;
|
|
57
|
+
}
|
|
58
|
+
if (versions[b].requiredBy[appId]) {
|
|
59
|
+
return 1;
|
|
60
|
+
}
|
|
61
|
+
// If both are transient to the app, sort by the number of dependencies.
|
|
62
|
+
const aDependentCount = Object.keys(versions[a].requiredBy).length;
|
|
63
|
+
const bDependentCount = Object.keys(versions[b].requiredBy).length;
|
|
64
|
+
return aDependentCount > bDependentCount ? -1 : 1;
|
|
39
65
|
});
|
|
40
66
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
67
|
const entry = (resolveMap[name] = allEntries[name][dominantVersion]);
|
|
42
|
-
entry.requiredBy = Array.from(entry.requiredBy);
|
|
43
68
|
if (otherVersions?.length) {
|
|
44
|
-
entry.scopedVersions = {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
scopedEntry.requiredBy = Array.from(scopedEntry.requiredBy);
|
|
49
|
-
}
|
|
69
|
+
entry.scopedVersions = otherVersions.reduce((scopedVersions, version) => {
|
|
70
|
+
scopedVersions[version] = allEntries[name][version];
|
|
71
|
+
return scopedVersions;
|
|
72
|
+
}, {});
|
|
50
73
|
}
|
|
51
74
|
}
|
|
52
75
|
return resolveMap;
|
|
@@ -57,7 +80,7 @@ function createMapEntry(packageDefinition, packagePath) {
|
|
|
57
80
|
name,
|
|
58
81
|
version,
|
|
59
82
|
path: packagePath,
|
|
60
|
-
requiredBy:
|
|
83
|
+
requiredBy: {},
|
|
61
84
|
};
|
|
62
85
|
}
|
|
63
86
|
//# sourceMappingURL=createResolveMap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createResolveMap.js","sourceRoot":"","sources":["../src/createResolveMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"createResolveMap.js","sourceRoot":"","sources":["../src/createResolveMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,36 +2,263 @@ import { slash } from '@ms-cloudpack/path-utilities';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { createResolveMap } from './createResolveMap.js';
|
|
4
4
|
import { filterJson } from './filterJson.js';
|
|
5
|
-
import { testProject1Path } from '../src/testPaths.js';
|
|
6
|
-
|
|
5
|
+
import { testProject1Path, testProjectFluentPath, testRepoPath, testUninstalledProjectPath, testWithReact16Path, testWithReact17Path, testWithUnmetDependenciesPath, testWithUnmetPeerDependenciesPath, } from '../src/testPaths.js';
|
|
6
|
+
import os from 'os';
|
|
7
|
+
import { v4 as uuid } from 'uuid';
|
|
8
|
+
import fsExtra from 'fs-extra';
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
import { writeJson } from '@ms-cloudpack/json-utilities';
|
|
11
|
+
import { fileURLToPath } from 'url';
|
|
12
|
+
const { ensureDir, rmdir } = fsExtra;
|
|
13
|
+
const { realpath } = fs.promises;
|
|
14
|
+
const createResolveMapSafe = async (options) => {
|
|
15
|
+
const resolveMap = await createResolveMap(options);
|
|
16
|
+
return filterJson(resolveMap, 'path', (oldPath) => {
|
|
17
|
+
return slash(path.relative(options.appPath, oldPath));
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
const currentPath = path.dirname(fileURLToPath(import.meta.url));
|
|
21
|
+
let tempFolderPath;
|
|
22
|
+
/*
|
|
23
|
+
* Helper which builds a temporary app install directory given a recursive array of [name, version, deps] recursive tuples.
|
|
24
|
+
*/
|
|
25
|
+
const constructDependencies = async (dependency, appPath = tempFolderPath) => {
|
|
26
|
+
const [name, version, deps] = dependency;
|
|
27
|
+
await ensureDir(appPath);
|
|
28
|
+
await writeJson(path.join(appPath, 'package.json'), {
|
|
29
|
+
name,
|
|
30
|
+
version,
|
|
31
|
+
dependencies: deps?.reduce((acc, [name, version]) => ({ ...acc, [name]: version }), {}),
|
|
32
|
+
});
|
|
33
|
+
if (deps) {
|
|
34
|
+
for (const dep of deps) {
|
|
35
|
+
await constructDependencies(dep, path.join(appPath, 'node_modules', dep[0]));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return appPath;
|
|
39
|
+
};
|
|
7
40
|
describe('createResolveMap', () => {
|
|
41
|
+
beforeEach(async () => {
|
|
42
|
+
tempFolderPath = path.join(os.tmpdir(), uuid());
|
|
43
|
+
await ensureDir(tempFolderPath);
|
|
44
|
+
tempFolderPath = await realpath(tempFolderPath);
|
|
45
|
+
});
|
|
46
|
+
afterEach(async () => {
|
|
47
|
+
await rmdir(tempFolderPath, { recursive: true });
|
|
48
|
+
});
|
|
8
49
|
it('can create a resolve map', async () => {
|
|
9
50
|
expect(await createResolveMapSafe({ appPath: testProject1Path })).toMatchInlineSnapshot(`
|
|
10
51
|
Object {
|
|
11
52
|
"b": Object {
|
|
12
53
|
"name": "b",
|
|
13
54
|
"path": "node_modules/b",
|
|
14
|
-
"requiredBy":
|
|
15
|
-
"test-project-1@0.0.1",
|
|
16
|
-
|
|
55
|
+
"requiredBy": Object {
|
|
56
|
+
"test-project-1@0.0.1": "^1.0.0",
|
|
57
|
+
},
|
|
17
58
|
"version": "1.0.0",
|
|
18
59
|
},
|
|
19
60
|
"c": Object {
|
|
20
61
|
"name": "c",
|
|
21
62
|
"path": "node_modules/c",
|
|
22
|
-
"requiredBy":
|
|
23
|
-
"test-project-1@0.0.1",
|
|
24
|
-
|
|
63
|
+
"requiredBy": Object {
|
|
64
|
+
"test-project-1@0.0.1": "^1.0.0",
|
|
65
|
+
},
|
|
25
66
|
"version": "1.0.0",
|
|
26
67
|
},
|
|
27
68
|
"test-project-1": Object {
|
|
28
69
|
"name": "test-project-1",
|
|
29
70
|
"path": "",
|
|
30
|
-
"requiredBy":
|
|
71
|
+
"requiredBy": Object {},
|
|
31
72
|
"version": "0.0.1",
|
|
32
73
|
},
|
|
33
74
|
}
|
|
34
75
|
`);
|
|
35
76
|
});
|
|
77
|
+
it('can create a resolve map for a project with a fluent package', async () => {
|
|
78
|
+
expect(await createResolveMapSafe({ appPath: testProjectFluentPath })).toMatchInlineSnapshot(`
|
|
79
|
+
Object {
|
|
80
|
+
"@fluentui/react": Object {
|
|
81
|
+
"name": "@fluentui/react",
|
|
82
|
+
"path": "node_modules/@fluentui/react",
|
|
83
|
+
"requiredBy": Object {
|
|
84
|
+
"test-project-fluent@1.0.0": "^8.42.0",
|
|
85
|
+
},
|
|
86
|
+
"version": "8.82.1",
|
|
87
|
+
},
|
|
88
|
+
"@fluentui/theme": Object {
|
|
89
|
+
"name": "@fluentui/theme",
|
|
90
|
+
"path": "node_modules/@fluentui/theme",
|
|
91
|
+
"requiredBy": Object {
|
|
92
|
+
"@fluentui/react@8.82.1": "^2.6.7",
|
|
93
|
+
},
|
|
94
|
+
"version": "2.6.7",
|
|
95
|
+
},
|
|
96
|
+
"@fluentui/utilities": Object {
|
|
97
|
+
"name": "@fluentui/utilities",
|
|
98
|
+
"path": "node_modules/@fluentui/utilities",
|
|
99
|
+
"requiredBy": Object {
|
|
100
|
+
"@fluentui/react@8.82.1": "^8.9.0",
|
|
101
|
+
"@fluentui/theme@2.6.7": "^8.9.0",
|
|
102
|
+
},
|
|
103
|
+
"version": "8.9.0",
|
|
104
|
+
},
|
|
105
|
+
"test-project-fluent": Object {
|
|
106
|
+
"name": "test-project-fluent",
|
|
107
|
+
"path": "",
|
|
108
|
+
"requiredBy": Object {},
|
|
109
|
+
"version": "1.0.0",
|
|
110
|
+
},
|
|
111
|
+
}
|
|
112
|
+
`);
|
|
113
|
+
});
|
|
114
|
+
it('prefers react 18 when most depend on it', async () => {
|
|
115
|
+
expect(await createResolveMapSafe({
|
|
116
|
+
appPath: await constructDependencies([
|
|
117
|
+
'testApp',
|
|
118
|
+
'1.0.0',
|
|
119
|
+
[
|
|
120
|
+
['library-a', '1.0.0', [['react', '17.0.0']]],
|
|
121
|
+
['library-b', '1.0.0', [['react', '18.0.0']]],
|
|
122
|
+
['react', '18.0.0'],
|
|
123
|
+
],
|
|
124
|
+
]),
|
|
125
|
+
})).toMatchInlineSnapshot(`
|
|
126
|
+
Object {
|
|
127
|
+
"library-a": Object {
|
|
128
|
+
"name": "library-a",
|
|
129
|
+
"path": "node_modules/library-a",
|
|
130
|
+
"requiredBy": Object {
|
|
131
|
+
"testApp@1.0.0": "1.0.0",
|
|
132
|
+
},
|
|
133
|
+
"version": "1.0.0",
|
|
134
|
+
},
|
|
135
|
+
"library-b": Object {
|
|
136
|
+
"name": "library-b",
|
|
137
|
+
"path": "node_modules/library-b",
|
|
138
|
+
"requiredBy": Object {
|
|
139
|
+
"testApp@1.0.0": "1.0.0",
|
|
140
|
+
},
|
|
141
|
+
"version": "1.0.0",
|
|
142
|
+
},
|
|
143
|
+
"react": Object {
|
|
144
|
+
"name": "react",
|
|
145
|
+
"path": "node_modules/react",
|
|
146
|
+
"requiredBy": Object {
|
|
147
|
+
"library-b@1.0.0": "18.0.0",
|
|
148
|
+
"testApp@1.0.0": "18.0.0",
|
|
149
|
+
},
|
|
150
|
+
"scopedVersions": Object {
|
|
151
|
+
"17.0.0": Object {
|
|
152
|
+
"name": "react",
|
|
153
|
+
"path": "node_modules/library-a/node_modules/react",
|
|
154
|
+
"requiredBy": Object {
|
|
155
|
+
"library-a@1.0.0": "17.0.0",
|
|
156
|
+
},
|
|
157
|
+
"version": "17.0.0",
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
"version": "18.0.0",
|
|
161
|
+
},
|
|
162
|
+
"testApp": Object {
|
|
163
|
+
"name": "testApp",
|
|
164
|
+
"path": "",
|
|
165
|
+
"requiredBy": Object {},
|
|
166
|
+
"version": "1.0.0",
|
|
167
|
+
},
|
|
168
|
+
}
|
|
169
|
+
`);
|
|
170
|
+
});
|
|
171
|
+
it('prefers react 17 because it is most used transient dependency', async () => {
|
|
172
|
+
const resolveMap = await createResolveMapSafe({
|
|
173
|
+
appPath: await constructDependencies([
|
|
174
|
+
'testApp',
|
|
175
|
+
'1.0.0',
|
|
176
|
+
[
|
|
177
|
+
['library-a', '1.0.0', [['react', '17.0.0', []]]],
|
|
178
|
+
['library-b', '1.0.0', [['react', '17.0.0', []]]],
|
|
179
|
+
['library-c', '1.0.0', [['react', '18.0.0', []]]],
|
|
180
|
+
],
|
|
181
|
+
]),
|
|
182
|
+
});
|
|
183
|
+
expect(resolveMap['react'].version).toBe('17.0.0');
|
|
184
|
+
});
|
|
185
|
+
it('prefers react 18 because it is an app dependency', async () => {
|
|
186
|
+
const resolveMap = await createResolveMapSafe({
|
|
187
|
+
appPath: await constructDependencies([
|
|
188
|
+
'testApp',
|
|
189
|
+
'1.0.0',
|
|
190
|
+
[
|
|
191
|
+
['library-a', '1.0.0', [['react', '17.0.0', []]]],
|
|
192
|
+
['library-b', '1.0.0', [['react', '17.0.0', []]]],
|
|
193
|
+
['react', '18.0.0', []],
|
|
194
|
+
],
|
|
195
|
+
]),
|
|
196
|
+
});
|
|
197
|
+
expect(resolveMap['react'].version).toBe('18.0.0');
|
|
198
|
+
});
|
|
199
|
+
it('can support monorepo scenarios and resolve the repo react version', async () => {
|
|
200
|
+
expect(await createResolveMapSafe({
|
|
201
|
+
appPath: path.join(testRepoPath, 'packages/app-with-installed-react'),
|
|
202
|
+
gitRootPath: testRepoPath,
|
|
203
|
+
})).toMatchInlineSnapshot(`
|
|
204
|
+
Object {
|
|
205
|
+
"app-with-installed-react": Object {
|
|
206
|
+
"name": "app-with-installed-react",
|
|
207
|
+
"path": "",
|
|
208
|
+
"requiredBy": Object {},
|
|
209
|
+
"version": "1.0.0",
|
|
210
|
+
},
|
|
211
|
+
"react": Object {
|
|
212
|
+
"name": "react",
|
|
213
|
+
"path": "../../node_modules/react",
|
|
214
|
+
"requiredBy": Object {
|
|
215
|
+
"app-with-installed-react@1.0.0": "999.0.0",
|
|
216
|
+
},
|
|
217
|
+
"version": "999.0.0",
|
|
218
|
+
},
|
|
219
|
+
}
|
|
220
|
+
`);
|
|
221
|
+
});
|
|
222
|
+
it('can throw when the monorepo is missing a semver required version of react using strict versioning checks', async () => {
|
|
223
|
+
expect(createResolveMapSafe({
|
|
224
|
+
appPath: path.join(testRepoPath, 'packages/app-with-missing-react'),
|
|
225
|
+
gitRootPath: testRepoPath,
|
|
226
|
+
strictVersioning: true,
|
|
227
|
+
})).rejects.toBeTruthy();
|
|
228
|
+
});
|
|
229
|
+
it(`can throw an error if a dependency is missing`, async () => {
|
|
230
|
+
expect(createResolveMapSafe({
|
|
231
|
+
appPath: testUninstalledProjectPath,
|
|
232
|
+
gitRootPath: testUninstalledProjectPath,
|
|
233
|
+
})).rejects.toBeTruthy();
|
|
234
|
+
});
|
|
235
|
+
it(`can throw an error if appPath doesn't exist`, async () => {
|
|
236
|
+
expect(createResolveMapSafe({ appPath: path.join(testUninstalledProjectPath, 'does-not-exist') })).rejects.toBeTruthy();
|
|
237
|
+
});
|
|
238
|
+
it(`can throw an error if appPath exists but is missing package.json`, () => {
|
|
239
|
+
expect(createResolveMapSafe({ appPath: currentPath })).rejects.toBeTruthy();
|
|
240
|
+
});
|
|
241
|
+
// In this test, react-dom has a peer dependency on react, and should be listed in requiredBy. Otherwise
|
|
242
|
+
// when react-dom imports react, it will use the app's version (which is not what we want.)
|
|
243
|
+
it(`can prefer react 16 but scope react 17`, async () => {
|
|
244
|
+
expect(await createResolveMapSafe({ appPath: testWithReact16Path, additionalPaths: [testWithReact17Path] })).toMatchSnapshot();
|
|
245
|
+
});
|
|
246
|
+
it(`can prefer react 17 but scope react 16`, async () => {
|
|
247
|
+
expect(await createResolveMapSafe({ appPath: testWithReact17Path, additionalPaths: [testWithReact16Path] })).toMatchSnapshot();
|
|
248
|
+
});
|
|
249
|
+
// it(`can prefer app dependencies that align with library semver requirements`, () => { });
|
|
250
|
+
it(`can fail with an unmet dependency`, () => {
|
|
251
|
+
expect(createResolveMapSafe({
|
|
252
|
+
appPath: testWithUnmetDependenciesPath,
|
|
253
|
+
gitRootPath: testWithUnmetDependenciesPath,
|
|
254
|
+
})).rejects.toBeTruthy();
|
|
255
|
+
});
|
|
256
|
+
// Because repos depend on things which have unmet peers, we have to avoid failing when we can't resolve them.
|
|
257
|
+
it(`can succeed with unmet peer dependencies`, async () => {
|
|
258
|
+
expect(await createResolveMapSafe({
|
|
259
|
+
appPath: testWithUnmetPeerDependenciesPath,
|
|
260
|
+
gitRootPath: testWithUnmetPeerDependenciesPath,
|
|
261
|
+
})).toMatchSnapshot();
|
|
262
|
+
});
|
|
36
263
|
});
|
|
37
264
|
//# 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,
|
|
1
|
+
{"version":3,"file":"createResolveMap.test.js","sourceRoot":"","sources":["../src/createResolveMap.test.ts"],"names":[],"mappings":"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"}
|
package/lib/detectModuleType.js
CHANGED
|
@@ -24,6 +24,13 @@ export async function detectModuleTypeFromSource(source) {
|
|
|
24
24
|
* @returns "esm" | "cjs" | undefined
|
|
25
25
|
*/
|
|
26
26
|
export async function detectModuleType(filePath) {
|
|
27
|
-
|
|
27
|
+
let source;
|
|
28
|
+
try {
|
|
29
|
+
source = await (await readFile(filePath, 'utf8')).toString();
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
return await detectModuleTypeFromSource(removeComments(source));
|
|
28
35
|
}
|
|
29
36
|
//# sourceMappingURL=detectModuleType.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detectModuleType.js","sourceRoot":"","sources":["../src/detectModuleType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;AAEjC,SAAS,cAAc,CAAC,MAAc;IACpC,kDAAkD;IAClD,OAAO,MAAM,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,iBAAiB;AACjF,CAAC;AAID;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,MAAc;IAC7D,IAAI,MAA8B,CAAC;IAEnC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvC,IACE,OAAO,CAAC,KAAK,CACX,wGAAwG,CACzG,EACD;QACA,MAAM,GAAG,KAAK,CAAC;KAChB;SAAM,IAAI,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,EAAE;QAClE,MAAM,GAAG,KAAK,CAAC;KAChB;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IACrD,
|
|
1
|
+
{"version":3,"file":"detectModuleType.js","sourceRoot":"","sources":["../src/detectModuleType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;AAEjC,SAAS,cAAc,CAAC,MAAc;IACpC,kDAAkD;IAClD,OAAO,MAAM,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,iBAAiB;AACjF,CAAC;AAID;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,MAAc;IAC7D,IAAI,MAA8B,CAAC;IAEnC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvC,IACE,OAAO,CAAC,KAAK,CACX,wGAAwG,CACzG,EACD;QACA,MAAM,GAAG,KAAK,CAAC;KAChB;SAAM,IAAI,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,EAAE;QAClE,MAAM,GAAG,KAAK,CAAC;KAChB;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IACrD,IAAI,MAAc,CAAC;IAEnB,IAAI;QACF,MAAM,GAAG,MAAM,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;KAC9D;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,SAAS,CAAC;KAClB;IAED,OAAO,MAAM,0BAA0B,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { fileURLToPath } from 'url';
|
|
2
|
+
import { detectModuleType, detectModuleTypeFromSource } from './detectModuleType.js';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
const currentPath = path.dirname(fileURLToPath(import.meta.url));
|
|
2
5
|
describe('detectModuleTypeFromSource', () => {
|
|
3
6
|
it('can detect imports mean esm', async () => {
|
|
4
7
|
expect(await detectModuleTypeFromSource(`import react from 'react';`)).toBe('esm');
|
|
@@ -18,5 +21,8 @@ describe('detectModuleTypeFromSource', () => {
|
|
|
18
21
|
it('can detect no modules', async () => {
|
|
19
22
|
expect(await detectModuleTypeFromSource(`const hello = 'hello';`)).toBeUndefined();
|
|
20
23
|
});
|
|
24
|
+
it('can return undefined for missing source', async () => {
|
|
25
|
+
expect(await detectModuleType(path.join(currentPath, 'does-not-exist.js'))).toBeUndefined();
|
|
26
|
+
});
|
|
21
27
|
});
|
|
22
28
|
//# sourceMappingURL=detectModuleType.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detectModuleType.test.js","sourceRoot":"","sources":["../src/detectModuleType.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"detectModuleType.test.js","sourceRoot":"","sources":["../src/detectModuleType.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjE,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,CAAC,MAAM,0BAA0B,CAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,CAAC,MAAM,0BAA0B,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,CAAC,MAAM,0BAA0B,CAAC,8BAA8B,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,CAAC,MAAM,0BAA0B,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,CAAC,MAAM,0BAA0B,CAAC,0DAA0D,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,CAAC,MAAM,0BAA0B,CAAC,wBAAwB,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,CAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC9F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|