@ms-cloudpack/package-utilities 0.0.1
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/lib/createResolveMap.d.ts +19 -0
- package/lib/createResolveMap.js +120 -0
- package/lib/createResolveMap.js.map +1 -0
- package/lib/createResolveMap.test.d.ts +1 -0
- package/lib/createResolveMap.test.js +12 -0
- package/lib/createResolveMap.test.js.map +1 -0
- package/lib/evaluateImportsFromEntries.d.ts +31 -0
- package/lib/evaluateImportsFromEntries.js +149 -0
- package/lib/evaluateImportsFromEntries.js.map +1 -0
- package/lib/evaluateImportsFromEntries.test.d.ts +1 -0
- package/lib/evaluateImportsFromEntries.test.js +9 -0
- package/lib/evaluateImportsFromEntries.test.js.map +1 -0
- package/lib/filterJson.d.ts +3 -0
- package/lib/filterJson.js +21 -0
- package/lib/filterJson.js.map +1 -0
- package/lib/getExportPathFromEntry.d.ts +5 -0
- package/lib/getExportPathFromEntry.js +27 -0
- package/lib/getExportPathFromEntry.js.map +1 -0
- package/lib/getExportPathFromEntry.test.d.ts +1 -0
- package/lib/getExportPathFromEntry.test.js +34 -0
- package/lib/getExportPathFromEntry.test.js.map +1 -0
- package/lib/getInstalledPackages.d.ts +44 -0
- package/lib/getInstalledPackages.js +87 -0
- package/lib/getInstalledPackages.js.map +1 -0
- package/lib/getInstalledPackages.test.d.ts +1 -0
- package/lib/getInstalledPackages.test.js +14 -0
- package/lib/getInstalledPackages.test.js.map +1 -0
- package/lib/getPackageDefinition.d.ts +22 -0
- package/lib/getPackageDefinition.js +25 -0
- package/lib/getPackageDefinition.js.map +1 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -0
- package/lib/isExternalPackage.d.ts +1 -0
- package/lib/isExternalPackage.js +9 -0
- package/lib/isExternalPackage.js.map +1 -0
- package/lib/isExternalPackage.test.d.ts +1 -0
- package/lib/isExternalPackage.test.js +12 -0
- package/lib/isExternalPackage.test.js.map +1 -0
- package/lib/isFile.d.ts +1 -0
- package/lib/isFile.js +12 -0
- package/lib/isFile.js.map +1 -0
- package/lib/isFile.test.d.ts +1 -0
- package/lib/isFile.test.js +16 -0
- package/lib/isFile.test.js.map +1 -0
- package/lib/isFolder.d.ts +1 -0
- package/lib/isFolder.js +10 -0
- package/lib/isFolder.js.map +1 -0
- package/lib/isFolder.test.d.ts +1 -0
- package/lib/isFolder.test.js +15 -0
- package/lib/isFolder.test.js.map +1 -0
- package/lib/parseImportString.d.ts +6 -0
- package/lib/parseImportString.js +9 -0
- package/lib/parseImportString.js.map +1 -0
- package/lib/parseImportString.test.d.ts +1 -0
- package/lib/parseImportString.test.js +20 -0
- package/lib/parseImportString.test.js.map +1 -0
- package/lib/resolve.d.ts +1 -0
- package/lib/resolve.js +21 -0
- package/lib/resolve.js.map +1 -0
- package/lib/resolve.test.d.ts +1 -0
- package/lib/resolve.test.js +12 -0
- package/lib/resolve.test.js.map +1 -0
- package/lib/resolveImportFromPackage.test.d.ts +1 -0
- package/lib/resolveImportFromPackage.test.js +153 -0
- package/lib/resolveImportFromPackage.test.js.map +1 -0
- package/lib/resolveImportFromPackagePath.d.ts +11 -0
- package/lib/resolveImportFromPackagePath.js +113 -0
- package/lib/resolveImportFromPackagePath.js.map +1 -0
- package/lib/testPaths.d.ts +3 -0
- package/lib/testPaths.js +6 -0
- package/lib/testPaths.js.map +1 -0
- package/lib/tsdoc-metadata.json +11 -0
- package/package.json +36 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { slash } from '@ms-cloudpack/path-utilities';
|
|
3
|
+
import { getInstalledPackages } from "./getInstalledPackages.js";
|
|
4
|
+
import { filterJson } from './filterJson.js';
|
|
5
|
+
import { testProject1Path } from '../src/testPaths.js';
|
|
6
|
+
async function getInstalledPackagesSafe(installPath) {
|
|
7
|
+
return filterJson(await getInstalledPackages(installPath), 'path', oldPath => slash(path.relative(installPath, oldPath)));
|
|
8
|
+
}
|
|
9
|
+
describe('getInstalledPackages', () => {
|
|
10
|
+
it('can get installed packages', async () => {
|
|
11
|
+
expect(await getInstalledPackagesSafe(testProject1Path)).toMatchSnapshot();
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=getInstalledPackages.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getInstalledPackages.test.js","sourceRoot":"../src/","sources":["getInstalledPackages.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,KAAK,UAAU,wBAAwB,CAAC,WAAmB;IACzD,OAAO,UAAU,CACf,MAAM,oBAAoB,CAAC,WAAW,CAAC,EACvC,MAAM,EACN,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CACnD,CAAC,CAAC;AACP,CAAC;AAED,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,CAAC,MAAM,wBAAwB,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare type ExportsEntry = string | {
|
|
2
|
+
[key: string]: ExportsEntry;
|
|
3
|
+
} | ExportsEntry[];
|
|
4
|
+
export declare type PackageDefinition = {
|
|
5
|
+
name: string;
|
|
6
|
+
version: string;
|
|
7
|
+
main?: string;
|
|
8
|
+
module?: string;
|
|
9
|
+
exports?: ExportsEntry;
|
|
10
|
+
/**
|
|
11
|
+
* @deprecated - Don't use this.
|
|
12
|
+
*/
|
|
13
|
+
browser?: string | Record<string, string>;
|
|
14
|
+
scripts?: Record<string, string>;
|
|
15
|
+
dependencies?: Record<string, string>;
|
|
16
|
+
devDependencies?: Record<string, string>;
|
|
17
|
+
};
|
|
18
|
+
export declare function getPackageDefinition(appPath: string, useCache?: boolean): Promise<PackageDefinition | undefined>;
|
|
19
|
+
/**
|
|
20
|
+
* Updates a package definition and the cache we use for them.
|
|
21
|
+
*/
|
|
22
|
+
export declare function updatePackageDefinition(appPath: string, definition: PackageDefinition): Promise<void>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
const { readFile, writeFile } = fs.promises;
|
|
4
|
+
const defs = {};
|
|
5
|
+
export async function getPackageDefinition(appPath, useCache) {
|
|
6
|
+
if (appPath) {
|
|
7
|
+
try {
|
|
8
|
+
return (defs[appPath] =
|
|
9
|
+
(useCache && defs[appPath]) ||
|
|
10
|
+
JSON.parse(await readFile(path.join(appPath, "package.json"), "utf8")));
|
|
11
|
+
}
|
|
12
|
+
catch (e) { /* no-op */ }
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Updates a package definition and the cache we use for them.
|
|
18
|
+
*/
|
|
19
|
+
export async function updatePackageDefinition(appPath, definition) {
|
|
20
|
+
if (appPath) {
|
|
21
|
+
await writeFile(path.join(appPath, 'package.json'), JSON.stringify(definition, null, 2), 'utf8');
|
|
22
|
+
defs[appPath] = definition;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=getPackageDefinition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPackageDefinition.js","sourceRoot":"../src/","sources":["getPackageDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAuBxB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;AAC5C,MAAM,IAAI,GAAsC,EAAE,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAe,EAAE,QAAkB;IAC5E,IAAI,OAAO,EAAE;QACX,IAAI;YACF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;gBACnB,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC3B,IAAI,CAAC,KAAK,CACR,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;SAClE;QAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE;KAC5B;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAe,EAAE,UAA6B;IAC1F,IAAI,OAAO,EAAE;QACX,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACjG,IAAI,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC;KAC5B;AACH,CAAC"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { createResolveMap, type ResolveMapEntry, type ResolveMap } from './createResolveMap.js';
|
|
2
|
+
export { type InstalledPackagesResult } from './getInstalledPackages.js';
|
|
3
|
+
export { evaluateImportsFromEntries } from './evaluateImportsFromEntries.js';
|
|
4
|
+
export { getPackageDefinition, type PackageDefinition, type ExportsEntry } from './getPackageDefinition.js';
|
|
5
|
+
export { resolve } from './resolve.js';
|
|
6
|
+
export { resolveImportFromPackage, resolveImportFromPackagePath } from './resolveImportFromPackagePath.js';
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { createResolveMap } from './createResolveMap.js';
|
|
2
|
+
export { evaluateImportsFromEntries } from './evaluateImportsFromEntries.js';
|
|
3
|
+
export { getPackageDefinition } from './getPackageDefinition.js';
|
|
4
|
+
export { resolve } from './resolve.js';
|
|
5
|
+
export { resolveImportFromPackage, resolveImportFromPackagePath } from './resolveImportFromPackagePath.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../src/","sources":["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,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isExternalPackage(packagePath: string): boolean;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { slash } from "@ms-cloudpack/path-utilities";
|
|
2
|
+
export function isExternalPackage(packagePath) {
|
|
3
|
+
if (packagePath) {
|
|
4
|
+
const parts = slash(packagePath).split('/');
|
|
5
|
+
return (parts.indexOf('node_modules') >= 0);
|
|
6
|
+
}
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=isExternalPackage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isExternalPackage.js","sourceRoot":"../src/","sources":["isExternalPackage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAErD,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,IAAI,WAAW,EAAE;QACf,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE5C,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;KAC7C;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { isExternalPackage } from './isExternalPackage.js';
|
|
3
|
+
import { testProject2Path } from './testPaths.js';
|
|
4
|
+
describe('isExternalPackage', () => {
|
|
5
|
+
it('can return true on an external package', () => {
|
|
6
|
+
expect(isExternalPackage(path.resolve(testProject2Path, 'node_modules/b'))).toBeTruthy();
|
|
7
|
+
});
|
|
8
|
+
it('can return false on an internal package', () => {
|
|
9
|
+
expect(isExternalPackage(testProject2Path)).toBeFalsy();
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=isExternalPackage.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isExternalPackage.test.js","sourceRoot":"../src/","sources":["isExternalPackage.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAEjC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC"}
|
package/lib/isFile.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isFile(filePath: string): boolean;
|
package/lib/isFile.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isFile.js","sourceRoot":"../src/","sources":["isFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,MAAM,UAAU,MAAM,CAAC,QAAgB;IACrC,IAAI;QACF,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;KACtB;IAAC,MAAM;QACN,KAAK;KACN;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { isFile } from './isFile.js';
|
|
3
|
+
import { testProject2Path } from './testPaths.js';
|
|
4
|
+
describe('isFile', () => {
|
|
5
|
+
it('returns true on a file', () => {
|
|
6
|
+
console.log(path.join(testProject2Path, 'package.json'));
|
|
7
|
+
expect(isFile(path.join(testProject2Path, 'package.json'))).toBeTruthy();
|
|
8
|
+
});
|
|
9
|
+
it('returns false on a folder', () => {
|
|
10
|
+
expect(isFile(testProject2Path)).toBeFalsy();
|
|
11
|
+
});
|
|
12
|
+
it('returns false on a missing file', () => {
|
|
13
|
+
expect(isFile(path.join(testProject2Path, 'does-not-exist.txt'))).toBeFalsy();
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=isFile.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isFile.test.js","sourceRoot":"../src/","sources":["isFile.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAA;QACxD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isFolder(itemPath: string): boolean;
|
package/lib/isFolder.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isFolder.js","sourceRoot":"../src/","sources":["isFolder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACvC,IAAI;QACF,OAAO,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;KAC9C;IAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE;IAE3B,OAAO,KAAK,CAAC;AACf,CAAC;AACD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { isFolder } from './isFolder.js';
|
|
3
|
+
import { testProject2Path } from '../src/testPaths.js';
|
|
4
|
+
describe('isFolder', () => {
|
|
5
|
+
it('returns true on a folder', () => {
|
|
6
|
+
expect(isFolder(testProject2Path)).toBeTruthy();
|
|
7
|
+
});
|
|
8
|
+
it('returns false on a file', () => {
|
|
9
|
+
expect(isFolder(path.join(testProject2Path, '../package.json'))).toBeFalsy();
|
|
10
|
+
});
|
|
11
|
+
it('returns false on a missing file', () => {
|
|
12
|
+
expect(isFolder(path.join(testProject2Path, 'does-not-exist.txt'))).toBeFalsy();
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=isFolder.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isFolder.test.js","sourceRoot":"../src/","sources":["isFolder.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function parseImportString(importString = '') {
|
|
2
|
+
const matches = importString.match(/[/]?(@[-_a-z-A-Z0-9.]+\/[-_a-z-A-Z0-9.]+|[a-zA-Z-0-9.]+)(@([-_a-zA-Z-0-9.]+))?(\/([-_/a-zA-Z0-9.]+))?/) || [];
|
|
3
|
+
return {
|
|
4
|
+
packageName: matches[1] || "",
|
|
5
|
+
version: matches[3] || "",
|
|
6
|
+
importPath: matches[5] || "",
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=parseImportString.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseImportString.js","sourceRoot":"../src/","sources":["parseImportString.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,iBAAiB,CAAC,YAAY,GAAG,EAAE;IACjD,MAAM,OAAO,GACX,YAAY,CAAC,KAAK,CAChB,uGAAuG,CACxG,IAAI,EAAE,CAAC;IAEV,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;QAC7B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;QACzB,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;KAC7B,CAAC;AAEJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { parseImportString } from './parseImportString.js';
|
|
2
|
+
describe(`parseImportString`, () => {
|
|
3
|
+
it(`can parse a package import`, () => {
|
|
4
|
+
expect(parseImportString('package')).toEqual({ packageName: 'package', version: '', importPath: '' });
|
|
5
|
+
});
|
|
6
|
+
it(`can parse a package import with a scope`, () => {
|
|
7
|
+
expect(parseImportString('@scope/package')).toEqual({ packageName: '@scope/package', version: '', importPath: '' });
|
|
8
|
+
});
|
|
9
|
+
it(`can parse a package import with a scope and path`, () => {
|
|
10
|
+
expect(parseImportString('@scope/package/path/to/thing')).toEqual({ packageName: '@scope/package', version: '', importPath: 'path/to/thing' });
|
|
11
|
+
});
|
|
12
|
+
it(`can parse a package import with a scope, version, and path`, () => {
|
|
13
|
+
expect(parseImportString('@scope/package@1234567890.1234567890.1234567890-abcdeABCDE/path/to/thing')).toEqual({
|
|
14
|
+
packageName: '@scope/package',
|
|
15
|
+
version: '1234567890.1234567890.1234567890-abcdeABCDE',
|
|
16
|
+
importPath: 'path/to/thing'
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=parseImportString.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseImportString.test.js","sourceRoot":"../src/","sources":["parseImportString.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IACtH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC;IACjJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CACJ,iBAAiB,CAAC,0EAA0E,CAAC,CAC9F,CAAC,OAAO,CACP;YACE,WAAW,EAAE,gBAAgB;YAC7B,OAAO,EAAE,6CAA6C;YACtD,UAAU,EAAE,eAAe;SAC5B,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC"}
|
package/lib/resolve.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function resolve(packageName: string, parentPath: string): Promise<string | undefined>;
|
package/lib/resolve.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import resolvePackage from 'resolve';
|
|
3
|
+
export async function resolve(packageName, parentPath) {
|
|
4
|
+
const packageRootImport = path.join(packageName, 'package.json');
|
|
5
|
+
return new Promise((success) => {
|
|
6
|
+
try {
|
|
7
|
+
resolvePackage(packageRootImport, { basedir: parentPath, preserveSymlinks: false }, (err, resolvedPath) => {
|
|
8
|
+
if (err || !resolvedPath) {
|
|
9
|
+
success(undefined);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
success(path.dirname(resolvedPath));
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
success(undefined);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"../src/","sources":["resolve.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,cAAc,MAAM,SAAS,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,WAAmB,EAAE,UAAkB;IACnE,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAEjE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI;YACF,cAAc,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE;gBACxG,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;oBACxB,OAAO,CAAC,SAAS,CAAC,CAAC;iBACpB;qBAAM;oBACL,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;iBACrC;YACH,CAAC,CAAC,CAAC;SACJ;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,SAAS,CAAC,CAAC;SACpB;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { resolve } from './resolve.js';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
const currentPath = fileURLToPath(import.meta.url);
|
|
4
|
+
describe('resolve', () => {
|
|
5
|
+
it('finds an installed path to a package', async () => {
|
|
6
|
+
expect(await resolve('@ms-cloudpack/path-utilities', currentPath)).toContain('path-utilities');
|
|
7
|
+
});
|
|
8
|
+
it('returns undefined for unfound packages', async () => {
|
|
9
|
+
expect(await resolve('@ms-cloudpack/does-not-exist', currentPath)).toBeUndefined();
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=resolve.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.test.js","sourceRoot":"../src/","sources":["resolve.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEnD,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,CAAC,MAAM,OAAO,CAAC,8BAA8B,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,CAAC,MAAM,OAAO,CAAC,8BAA8B,EAAE,WAAW,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACrF,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { resolveImportFromPackage } from "./resolveImportFromPackagePath.js";
|
|
2
|
+
import { testProject2Path } from '../src/testPaths.js';
|
|
3
|
+
const defaultPackageDefinition = {
|
|
4
|
+
name: 'package',
|
|
5
|
+
version: '1.0.0',
|
|
6
|
+
};
|
|
7
|
+
describe('resolveImportFromPackage', () => {
|
|
8
|
+
it('can resolve a main entry', async () => {
|
|
9
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
10
|
+
...defaultPackageDefinition,
|
|
11
|
+
main: './lib/main.js'
|
|
12
|
+
}, '')).toEqual('lib/main.js');
|
|
13
|
+
});
|
|
14
|
+
it('can fall back to a subfolder', async () => {
|
|
15
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
16
|
+
...defaultPackageDefinition,
|
|
17
|
+
main: 'build'
|
|
18
|
+
})).toEqual('build/index.js');
|
|
19
|
+
});
|
|
20
|
+
it('can resolve a module entry', async () => {
|
|
21
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
22
|
+
...defaultPackageDefinition,
|
|
23
|
+
main: './lib/main.js',
|
|
24
|
+
module: './lib/module.js'
|
|
25
|
+
}, '')).toEqual('lib/module.js');
|
|
26
|
+
});
|
|
27
|
+
it('can resolve a string exports entry', async () => {
|
|
28
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
29
|
+
...defaultPackageDefinition,
|
|
30
|
+
main: './lib/main.js',
|
|
31
|
+
module: './lib/module.js',
|
|
32
|
+
exports: './lib/exports.js'
|
|
33
|
+
}, '')).toEqual('lib/exports.js');
|
|
34
|
+
});
|
|
35
|
+
it('can resolve a default string exports entry', async () => {
|
|
36
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
37
|
+
...defaultPackageDefinition,
|
|
38
|
+
main: './lib/main.js',
|
|
39
|
+
module: './lib/module.js',
|
|
40
|
+
exports: {
|
|
41
|
+
default: 'lib/exports-default.js'
|
|
42
|
+
}
|
|
43
|
+
}, '')).toEqual('lib/exports-default.js');
|
|
44
|
+
});
|
|
45
|
+
it('can resolve a default map exports entry', async () => {
|
|
46
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
47
|
+
...defaultPackageDefinition,
|
|
48
|
+
main: './lib/main.js',
|
|
49
|
+
module: './lib/module.js',
|
|
50
|
+
exports: {
|
|
51
|
+
'.': './lib/exports.js'
|
|
52
|
+
}
|
|
53
|
+
}, '')).toEqual('lib/exports.js');
|
|
54
|
+
});
|
|
55
|
+
it('can resolve a default map exports entry with default', async () => {
|
|
56
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
57
|
+
...defaultPackageDefinition,
|
|
58
|
+
main: './lib/main.js',
|
|
59
|
+
module: './lib/module.js',
|
|
60
|
+
exports: {
|
|
61
|
+
'.': {
|
|
62
|
+
default: './lib/exports-default.js',
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}, '')).toEqual('lib/exports-default.js');
|
|
66
|
+
});
|
|
67
|
+
it('can resolve a default map exports entry with import', async () => {
|
|
68
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
69
|
+
...defaultPackageDefinition,
|
|
70
|
+
main: './lib/main.js',
|
|
71
|
+
module: './lib/module.js',
|
|
72
|
+
exports: {
|
|
73
|
+
'.': {
|
|
74
|
+
'require': './lib/exports-require.js',
|
|
75
|
+
'import': './lib/exports-import.js',
|
|
76
|
+
'default': './lib/exports-default.js',
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}, '')).toEqual('lib/exports-import.js');
|
|
80
|
+
});
|
|
81
|
+
it('can resolve a path mapped in the exports map', async () => {
|
|
82
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
83
|
+
...defaultPackageDefinition,
|
|
84
|
+
main: './lib/main.js',
|
|
85
|
+
module: './lib/module.js',
|
|
86
|
+
exports: {
|
|
87
|
+
'.': {
|
|
88
|
+
'require': './lib/exports-require.js',
|
|
89
|
+
'import': './lib/exports-import.js',
|
|
90
|
+
'default': './lib/exports-default.js',
|
|
91
|
+
},
|
|
92
|
+
'./lib/Button': {
|
|
93
|
+
'require': './lib/exports-button-require.js',
|
|
94
|
+
'import': './lib/exports-button-import.js',
|
|
95
|
+
'default': './lib/exports-button-default.js',
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}, 'lib/Button')).toEqual('lib/exports-button-import.js');
|
|
99
|
+
});
|
|
100
|
+
it('can resolve a source file exports map', async () => {
|
|
101
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
102
|
+
...defaultPackageDefinition,
|
|
103
|
+
exports: './lib/tsx.js',
|
|
104
|
+
}, '', { preferSource: true })).toEqual('src/tsx.tsx');
|
|
105
|
+
});
|
|
106
|
+
it('can remap imports using browser overrides', async () => {
|
|
107
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
108
|
+
...defaultPackageDefinition,
|
|
109
|
+
browser: {
|
|
110
|
+
'lib/main.js': './lib/tsx.js'
|
|
111
|
+
},
|
|
112
|
+
main: 'lib/main.js'
|
|
113
|
+
}, '')).toEqual('lib/tsx.js');
|
|
114
|
+
});
|
|
115
|
+
it('can remap imports using browser overrides (preferSource)', async () => {
|
|
116
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
117
|
+
...defaultPackageDefinition,
|
|
118
|
+
browser: {
|
|
119
|
+
'./lib/main.js': './lib/tsx.js'
|
|
120
|
+
},
|
|
121
|
+
main: 'lib/main.js'
|
|
122
|
+
}, '', { preferSource: true })).toEqual('src/tsx.tsx');
|
|
123
|
+
});
|
|
124
|
+
it('can remap deep imports (preferSource)', async () => {
|
|
125
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
126
|
+
...defaultPackageDefinition,
|
|
127
|
+
}, 'lib/tsx', { preferSource: true })).toEqual('src/tsx.tsx');
|
|
128
|
+
});
|
|
129
|
+
it('can remap deep imports with an exports map (preferSource)', async () => {
|
|
130
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
131
|
+
...defaultPackageDefinition,
|
|
132
|
+
exports: {
|
|
133
|
+
'./lib/tsx': 'lib/main.js'
|
|
134
|
+
}
|
|
135
|
+
}, 'lib/tsx', { preferSource: true })).toEqual('src/main.ts');
|
|
136
|
+
});
|
|
137
|
+
// package example: github.com/form-data/form-data
|
|
138
|
+
it('can remap imports using browser overrides (no extension, browser string)', async () => {
|
|
139
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
140
|
+
...defaultPackageDefinition,
|
|
141
|
+
browser: './lib/tsx',
|
|
142
|
+
main: 'lib/main'
|
|
143
|
+
}, '')).toEqual('lib/tsx.js');
|
|
144
|
+
});
|
|
145
|
+
// package example: supports color
|
|
146
|
+
it('can handle a package with only a browser entry', async () => {
|
|
147
|
+
expect(await resolveImportFromPackage(testProject2Path, {
|
|
148
|
+
...defaultPackageDefinition,
|
|
149
|
+
browser: './lib/main',
|
|
150
|
+
}, '')).toEqual('lib/main.js');
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=resolveImportFromPackage.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveImportFromPackage.test.js","sourceRoot":"../src/","sources":["resolveImportFromPackage.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type PackageDefinition } from './getPackageDefinition.js';
|
|
2
|
+
export declare function resolveImportFromPackagePath(packagePath: string, requestedPath?: string, options?: {
|
|
3
|
+
preferSource: boolean;
|
|
4
|
+
}): Promise<string>;
|
|
5
|
+
/**
|
|
6
|
+
* Note: this function prefers resolving ESM and browser entries.
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveImportFromPackage(packagePath: string, packageDefinition: PackageDefinition, importPath?: string, options?: {
|
|
9
|
+
preferSource?: boolean;
|
|
10
|
+
cwd?: string;
|
|
11
|
+
}): Promise<string>;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { intermediateToSourcePath, slash } from '@ms-cloudpack/path-utilities';
|
|
3
|
+
import { getPackageDefinition } from './getPackageDefinition.js';
|
|
4
|
+
import { isFile } from './isFile.js';
|
|
5
|
+
import { getExportPathFromEntry } from './getExportPathFromEntry.js';
|
|
6
|
+
import { isFolder } from './isFolder.js';
|
|
7
|
+
import { isExternalPackage } from './isExternalPackage.js';
|
|
8
|
+
export async function resolveImportFromPackagePath(packagePath, requestedPath = '', options = { preferSource: true }) {
|
|
9
|
+
const packageDefinition = await getPackageDefinition(packagePath);
|
|
10
|
+
if (!packageDefinition) {
|
|
11
|
+
console.log(`Couldn't load definition for "${packagePath}"`);
|
|
12
|
+
return requestedPath;
|
|
13
|
+
}
|
|
14
|
+
return resolveImportFromPackage(packagePath, packageDefinition, requestedPath, options);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Note: this function prefers resolving ESM and browser entries.
|
|
18
|
+
*/
|
|
19
|
+
export async function resolveImportFromPackage(packagePath, packageDefinition, importPath = '', options = {}) {
|
|
20
|
+
const originalPackagePath = packagePath;
|
|
21
|
+
const fullRequestedPath = path.join(packagePath, importPath);
|
|
22
|
+
// If the requested subfolder has a package.json, treat it as a sub-package. (some npm packages have nested package.jsons!)
|
|
23
|
+
if (importPath && isFolder(fullRequestedPath)) {
|
|
24
|
+
const subPackageDefinition = await getPackageDefinition(fullRequestedPath);
|
|
25
|
+
if (subPackageDefinition) {
|
|
26
|
+
packageDefinition = subPackageDefinition;
|
|
27
|
+
packagePath = fullRequestedPath;
|
|
28
|
+
importPath = '';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Remove leading slashes if needed.
|
|
32
|
+
if (importPath[0] === '/') {
|
|
33
|
+
importPath = importPath.substr(1);
|
|
34
|
+
}
|
|
35
|
+
// Build a list of intermediate file candidates.
|
|
36
|
+
let candidates = [];
|
|
37
|
+
const { exports } = packageDefinition;
|
|
38
|
+
// If we have an exports map, this takes priority in resolution.
|
|
39
|
+
if (exports) {
|
|
40
|
+
// If the requested path is null, we can use the default exports from the exports map.
|
|
41
|
+
if (typeof exports === 'string') {
|
|
42
|
+
if (!importPath) {
|
|
43
|
+
candidates.push(exports);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else if (Array.isArray(exports)) {
|
|
47
|
+
candidates.push(getExportPathFromEntry(exports));
|
|
48
|
+
}
|
|
49
|
+
else if (!importPath) {
|
|
50
|
+
candidates.push(getExportPathFromEntry(exports['.'] || exports));
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
candidates.push(getExportPathFromEntry(exports['./' + importPath]));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (!importPath) {
|
|
57
|
+
candidates.push(packageDefinition.module);
|
|
58
|
+
candidates.push(packageDefinition.main);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
candidates.push(importPath);
|
|
62
|
+
}
|
|
63
|
+
// Fallback to index.js
|
|
64
|
+
if (!packageDefinition.main && !packageDefinition.module && !importPath) {
|
|
65
|
+
candidates.push('index.js');
|
|
66
|
+
}
|
|
67
|
+
// If the package has browser remappings, respect them.
|
|
68
|
+
let { browser } = packageDefinition;
|
|
69
|
+
// If the browser entry is a string, convert it into an object.
|
|
70
|
+
if (typeof browser === 'string') {
|
|
71
|
+
const mainOrModule = packageDefinition.module || packageDefinition.main;
|
|
72
|
+
if (mainOrModule) {
|
|
73
|
+
browser = { [mainOrModule]: browser };
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
candidates.push(packageDefinition.browser);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (typeof browser === 'object') {
|
|
80
|
+
for (const browserMapping of Object.keys(browser)) {
|
|
81
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
82
|
+
const candidateEntry = candidates[i];
|
|
83
|
+
if (candidateEntry && path.relative(browserMapping, candidateEntry) === '') {
|
|
84
|
+
candidates[i] = browser[browserMapping];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Ensure we can handle missing extensions and fall back to js
|
|
90
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
91
|
+
const candidate = candidates[i];
|
|
92
|
+
if (candidate && path.extname(candidate) !== '.js') {
|
|
93
|
+
candidates.splice(i + 1, 0, candidate + '.js');
|
|
94
|
+
candidates.splice(i + 2, 0, candidate + '/index.js');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// (optional) Add source paths if we prefer source files to intermediate files.
|
|
98
|
+
const preferSource = options.preferSource && !isExternalPackage(packagePath);
|
|
99
|
+
if (preferSource) {
|
|
100
|
+
candidates = [
|
|
101
|
+
...candidates.map(c => c && intermediateToSourcePath(c, packagePath)),
|
|
102
|
+
...candidates
|
|
103
|
+
];
|
|
104
|
+
}
|
|
105
|
+
// Search candidates for first match.
|
|
106
|
+
const foundPath = candidates.find((candidatePath) => candidatePath && isFile(path.join(packagePath, candidatePath)));
|
|
107
|
+
if (!foundPath && path.basename(importPath).indexOf('chunk-') !== 0) {
|
|
108
|
+
console.log(`Couldn't resolve import ("${packagePath}", importPath="${importPath}", preferSource=${!!preferSource}), Tried:\n${candidates.map(c => ' "' + c + '"').join('\n')}`);
|
|
109
|
+
}
|
|
110
|
+
// Nothing was found. Default to requested path.
|
|
111
|
+
return slash(path.relative(originalPackagePath, path.join(packagePath, foundPath || importPath)));
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=resolveImportFromPackagePath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveImportFromPackagePath.js","sourceRoot":"../src/","sources":["resolveImportFromPackagePath.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAA0B,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,WAAmB,EACnB,aAAa,GAAG,EAAE,EAClB,OAAO,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE;IAEhC,MAAM,iBAAiB,GAAG,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAElE,IAAI,CAAC,iBAAiB,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,iCAAiC,WAAW,GAAG,CAAC,CAAC;QAC7D,OAAO,aAAa,CAAC;KACtB;IAED,OAAO,wBAAwB,CAAC,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;AAC1F,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,WAAmB,EACnB,iBAAoC,EACpC,UAAU,GAAG,EAAE,EACf,UAGI,EAAE;IAGN,MAAM,mBAAmB,GAAG,WAAW,CAAC;IACxC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAE7D,2HAA2H;IAC3H,IAAI,UAAU,IAAI,QAAQ,CAAC,iBAAiB,CAAC,EAAE;QAC7C,MAAM,oBAAoB,GAAG,MAAM,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QAE3E,IAAI,oBAAoB,EAAE;YACxB,iBAAiB,GAAG,oBAAoB,CAAC;YACzC,WAAW,GAAG,iBAAiB,CAAC;YAChC,UAAU,GAAG,EAAE,CAAC;SACjB;KACF;IAED,oCAAoC;IACpC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QACzB,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACnC;IAED,gDAAgD;IAChD,IAAI,UAAU,GAA2B,EAAE,CAAC;IAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC;IAEtC,gEAAgE;IAChE,IAAI,OAAO,EAAE;QACX,sFAAsF;QACtF,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,IAAI,CAAC,UAAU,EAAE;gBACf,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC1B;SACF;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACjC,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;SAClD;aAAM,IAAI,CAAC,UAAU,EAAE;YACtB,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;SAClE;aAAM;YACL,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;SACrE;KACF;IAED,IAAI,CAAC,UAAU,EAAE;QACf,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1C,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;KACzC;SAAM;QACL,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC7B;IAED,uBAAuB;IACvB,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE;QACvE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC7B;IAED,uDAAuD;IACvD,IAAI,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC;IAEpC,+DAA+D;IAC/D,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC;QAExE,IAAI,YAAY,EAAE;YAChB,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC;SACvC;aAAM;YACL,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAiB,CAAC,CAAC;SACtD;KACF;IAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAErC,IAAI,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE;oBAC1E,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;iBACzC;aACF;SACF;KACF;IAED,8DAA8D;IAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAEhC,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,KAAK,EAAE;YAClD,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;YAC/C,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC,CAAA;SACrD;KACF;IAED,+EAA+E;IAC/E,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAE7E,IAAI,YAAY,EAAE;QAChB,UAAU,GAAG;YACX,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,wBAAwB,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YACrE,GAAG,UAAU;SACd,CAAA;KACF;IAED,qCAAqC;IACrC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAClD,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAC/D,CAAC;IAEF,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACnE,OAAO,CAAC,GAAG,CAAC,6BAA6B,WAAW,kBAAkB,UAAU,mBAAmB,CAAC,CAAC,YAAY,cAAc,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACnL;IAED,gDAAgD;IAEhD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CACxB,mBAAmB,EACnB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,IAAI,UAAU,CAAC,CAChD,CAAC,CAAC;AACL,CAAC"}
|