@ms-cloudpack/package-utilities 2.3.11 → 2.3.12

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.
@@ -1,7 +1,6 @@
1
1
  import { PackageDefinitions } from './PackageDefinitions.js';
2
2
  import { findPackagePath } from './findPackagePath.js';
3
- import fs from 'fs';
4
- const { realpath } = fs.promises;
3
+ import fsPromises from 'fs/promises';
5
4
  export async function createResolveMap(options) {
6
5
  var _a, _b, _c, _d;
7
6
  const { appPath, additionalPaths = [], gitRootPath, strictVersioning, packages = PackageDefinitions.getInstance(), } = options;
@@ -20,7 +19,7 @@ export async function createResolveMap(options) {
20
19
  while (pathsToVisit.length) {
21
20
  let packagePath = pathsToVisit.shift();
22
21
  if (packagePath) {
23
- packagePath = await realpath(packagePath);
22
+ packagePath = await fsPromises.realpath(packagePath);
24
23
  const definition = await packages.get(packagePath);
25
24
  if (definition && definition.name && definition.version) {
26
25
  const packageId = `${definition.name}@${definition.version}`;
@@ -1 +1 @@
1
- {"version":3,"file":"createResolveMap.js","sourceRoot":"","sources":["../src/createResolveMap.ts"],"names":[],"mappings":"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","sourcesContent":["import { PackageDefinitions } from './PackageDefinitions.js';\nimport { findPackagePath } from './findPackagePath.js';\nimport type { PackageJson, PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport fs from 'fs';\n\nconst { realpath } = fs.promises;\n\nexport type PackageNameVersion = `${string}@${string}`;\n\nexport type ResolveMapEntry = {\n name: string;\n version: string;\n path: string;\n requiredBy: Record<string, string>;\n scopedVersions?: {\n [version: string]: ResolveMapEntry;\n };\n};\n\nexport type ResolveMap = Record<string, ResolveMapEntry>;\n\nexport async function createResolveMap(options: {\n appPath: string;\n additionalPaths?: string[];\n gitRootPath?: string;\n strictVersioning?: boolean;\n packages?: PackageDefinitionsCache;\n}): Promise<ResolveMap> {\n const {\n appPath,\n additionalPaths = [],\n gitRootPath,\n strictVersioning,\n packages = PackageDefinitions.getInstance(),\n } = options;\n const visitedPaths = new Set<string>([appPath, ...additionalPaths]);\n const allEntries: Record<string, Record<string, ResolveMapEntry>> = {};\n const appDefinition = await packages.get(appPath);\n\n if (!appDefinition) {\n throw new Error(`Could not find package.json for ${appPath}`);\n }\n if (!appDefinition.name || !appDefinition.version) {\n throw new Error(`package.json for ${appPath} is missing a name or version`);\n }\n\n const appId = `${appDefinition.name}@${appDefinition.version}`;\n\n for (const rootPath of [appPath, ...additionalPaths]) {\n const pathsToVisit: string[] = [rootPath];\n\n while (pathsToVisit.length) {\n let packagePath = pathsToVisit.shift();\n\n if (packagePath) {\n packagePath = await realpath(packagePath);\n\n const definition = await packages.get(packagePath);\n\n if (definition && definition.name && definition.version) {\n const packageId: PackageNameVersion = `${definition.name}@${definition.version}`;\n\n const namedEntries = (allEntries[definition.name] ??= {});\n\n namedEntries[definition.version] ??= createMapEntry(definition, packagePath);\n\n const packageDependencies = [\n ...Object.keys(definition?.dependencies || {}),\n ...Object.keys(definition?.peerDependencies || {}),\n ];\n for (const depName of packageDependencies) {\n const requiredVersion =\n definition?.dependencies?.[depName] || (definition?.peerDependencies?.[depName] as string);\n const dependencyPath = await findPackagePath(\n depName,\n strictVersioning ? requiredVersion : undefined,\n packagePath,\n gitRootPath,\n !!definition?.peerDependencies?.[depName],\n );\n\n if (dependencyPath) {\n const dependencyDefinition = await packages.get(dependencyPath);\n\n if (dependencyDefinition?.name && dependencyDefinition.version) {\n const dependencyNamedEntries = (allEntries[dependencyDefinition.name] ??= {});\n const dependencyEntry = (dependencyNamedEntries[dependencyDefinition.version] ??= createMapEntry(\n dependencyDefinition,\n dependencyPath,\n ));\n\n dependencyEntry.requiredBy[packageId] = requiredVersion;\n\n if (!visitedPaths.has(dependencyPath)) {\n visitedPaths.add(dependencyPath);\n pathsToVisit.push(dependencyPath);\n }\n }\n }\n }\n }\n }\n }\n }\n\n // Now we have all entries and relationships. Iterate through the relationships to build\n // The final resolve map.\n const resolveMap: ResolveMap = {};\n\n for (const [name, versions] of Object.entries(allEntries)) {\n const [dominantVersion, ...otherVersions] = Object.keys(versions).sort((a, b) => {\n if (versions[a].requiredBy[appId]) {\n return -1;\n }\n\n if (versions[b].requiredBy[appId]) {\n return 1;\n }\n\n // If both are transitive to the app, sort by the number of dependencies.\n const aDependentCount = Object.keys(versions[a].requiredBy).length;\n const bDependentCount = Object.keys(versions[b].requiredBy).length;\n\n return aDependentCount > bDependentCount ? -1 : 1;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const entry = (resolveMap[name] = allEntries[name][dominantVersion] as any as ResolveMapEntry);\n\n if (otherVersions?.length) {\n entry.scopedVersions = otherVersions.reduce((scopedVersions, version) => {\n scopedVersions[version] = allEntries[name][version];\n return scopedVersions;\n }, {} as Record<string, ResolveMapEntry>);\n }\n }\n\n return resolveMap;\n}\n\nfunction createMapEntry(packageDefinition: PackageJson, packagePath: string): ResolveMapEntry {\n const { name = '', version = '' } = packageDefinition;\n\n return {\n name,\n version,\n path: packagePath,\n requiredBy: {},\n };\n}\n"]}
1
+ {"version":3,"file":"createResolveMap.js","sourceRoot":"","sources":["../src/createResolveMap.ts"],"names":[],"mappings":"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","sourcesContent":["import { PackageDefinitions } from './PackageDefinitions.js';\nimport { findPackagePath } from './findPackagePath.js';\nimport type { PackageJson, PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport fsPromises from 'fs/promises';\n\nexport type PackageNameVersion = `${string}@${string}`;\n\nexport type ResolveMapEntry = {\n name: string;\n version: string;\n path: string;\n requiredBy: Record<string, string>;\n scopedVersions?: {\n [version: string]: ResolveMapEntry;\n };\n};\n\nexport type ResolveMap = Record<string, ResolveMapEntry>;\n\nexport async function createResolveMap(options: {\n appPath: string;\n additionalPaths?: string[];\n gitRootPath?: string;\n strictVersioning?: boolean;\n packages?: PackageDefinitionsCache;\n}): Promise<ResolveMap> {\n const {\n appPath,\n additionalPaths = [],\n gitRootPath,\n strictVersioning,\n packages = PackageDefinitions.getInstance(),\n } = options;\n const visitedPaths = new Set<string>([appPath, ...additionalPaths]);\n const allEntries: Record<string, Record<string, ResolveMapEntry>> = {};\n const appDefinition = await packages.get(appPath);\n\n if (!appDefinition) {\n throw new Error(`Could not find package.json for ${appPath}`);\n }\n if (!appDefinition.name || !appDefinition.version) {\n throw new Error(`package.json for ${appPath} is missing a name or version`);\n }\n\n const appId = `${appDefinition.name}@${appDefinition.version}`;\n\n for (const rootPath of [appPath, ...additionalPaths]) {\n const pathsToVisit: string[] = [rootPath];\n\n while (pathsToVisit.length) {\n let packagePath = pathsToVisit.shift();\n\n if (packagePath) {\n packagePath = await fsPromises.realpath(packagePath);\n\n const definition = await packages.get(packagePath);\n\n if (definition && definition.name && definition.version) {\n const packageId: PackageNameVersion = `${definition.name}@${definition.version}`;\n\n const namedEntries = (allEntries[definition.name] ??= {});\n\n namedEntries[definition.version] ??= createMapEntry(definition, packagePath);\n\n const packageDependencies = [\n ...Object.keys(definition?.dependencies || {}),\n ...Object.keys(definition?.peerDependencies || {}),\n ];\n for (const depName of packageDependencies) {\n const requiredVersion =\n definition?.dependencies?.[depName] || (definition?.peerDependencies?.[depName] as string);\n const dependencyPath = await findPackagePath(\n depName,\n strictVersioning ? requiredVersion : undefined,\n packagePath,\n gitRootPath,\n !!definition?.peerDependencies?.[depName],\n );\n\n if (dependencyPath) {\n const dependencyDefinition = await packages.get(dependencyPath);\n\n if (dependencyDefinition?.name && dependencyDefinition.version) {\n const dependencyNamedEntries = (allEntries[dependencyDefinition.name] ??= {});\n const dependencyEntry = (dependencyNamedEntries[dependencyDefinition.version] ??= createMapEntry(\n dependencyDefinition,\n dependencyPath,\n ));\n\n dependencyEntry.requiredBy[packageId] = requiredVersion;\n\n if (!visitedPaths.has(dependencyPath)) {\n visitedPaths.add(dependencyPath);\n pathsToVisit.push(dependencyPath);\n }\n }\n }\n }\n }\n }\n }\n }\n\n // Now we have all entries and relationships. Iterate through the relationships to build\n // The final resolve map.\n const resolveMap: ResolveMap = {};\n\n for (const [name, versions] of Object.entries(allEntries)) {\n const [dominantVersion, ...otherVersions] = Object.keys(versions).sort((a, b) => {\n if (versions[a].requiredBy[appId]) {\n return -1;\n }\n\n if (versions[b].requiredBy[appId]) {\n return 1;\n }\n\n // If both are transitive to the app, sort by the number of dependencies.\n const aDependentCount = Object.keys(versions[a].requiredBy).length;\n const bDependentCount = Object.keys(versions[b].requiredBy).length;\n\n return aDependentCount > bDependentCount ? -1 : 1;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const entry = (resolveMap[name] = allEntries[name][dominantVersion] as any as ResolveMapEntry);\n\n if (otherVersions?.length) {\n entry.scopedVersions = otherVersions.reduce((scopedVersions, version) => {\n scopedVersions[version] = allEntries[name][version];\n return scopedVersions;\n }, {} as Record<string, ResolveMapEntry>);\n }\n }\n\n return resolveMap;\n}\n\nfunction createMapEntry(packageDefinition: PackageJson, packagePath: string): ResolveMapEntry {\n const { name = '', version = '' } = packageDefinition;\n\n return {\n name,\n version,\n path: packagePath,\n requiredBy: {},\n };\n}\n"]}
@@ -1,5 +1,4 @@
1
- import fs from 'fs';
2
- const { readFile } = fs.promises;
1
+ import fsPromises from 'fs/promises';
3
2
  function removeComments(source) {
4
3
  // Takes a string of code, not an actual function.
5
4
  return source.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, '').trim(); // Strip comments
@@ -26,7 +25,7 @@ export function detectModuleTypeFromSource(source) {
26
25
  export async function detectModuleType(filePath) {
27
26
  let source;
28
27
  try {
29
- source = (await readFile(filePath, 'utf8')).toString();
28
+ source = (await fsPromises.readFile(filePath, 'utf8')).toString();
30
29
  }
31
30
  catch (e) {
32
31
  return undefined;
@@ -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,UAAU,0BAA0B,CAAC,MAAc;IACvD,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,8DAA8D,CAAC,EAAE;QACxF,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,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;KACxD;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,SAAS,CAAC;KAClB;IAED,OAAO,0BAA0B,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC","sourcesContent":["import fs from 'fs';\n\nconst { readFile } = fs.promises;\n\nfunction removeComments(source: string) {\n // Takes a string of code, not an actual function.\n return source.replace(/\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*/g, '').trim(); // Strip comments\n}\n\nexport type ModuleType = 'esm' | 'cjs';\n\n/**\n * Determines if the given source is commonjs or esm.\n * @returns \"esm\" | \"cjs\" | undefined\n */\nexport function detectModuleTypeFromSource(source: string): ModuleType | undefined {\n let result: ModuleType | undefined;\n\n const content = removeComments(source);\n\n if (\n content.match(\n /(import *)|(import {)|(export {)|(export \\*)|(export (default )?[_a-zA-Z0-9]+)|(export [a-zA-Z]+ from)/,\n )\n ) {\n result = 'esm';\n } else if (content.match(/module\\.exports[ =]+|exports\\.|typeof exports|require\\(['\"]+/)) {\n result = 'cjs';\n }\n\n return result;\n}\n\n/**\n * Determines if the given file is commonjs or esm.\n * @returns \"esm\" | \"cjs\" | undefined\n */\nexport async function detectModuleType(filePath: string): Promise<ModuleType | undefined> {\n let source: string;\n\n try {\n source = (await readFile(filePath, 'utf8')).toString();\n } catch (e) {\n return undefined;\n }\n\n return detectModuleTypeFromSource(removeComments(source));\n}\n"]}
1
+ {"version":3,"file":"detectModuleType.js","sourceRoot":"","sources":["../src/detectModuleType.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,aAAa,CAAC;AAErC,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,UAAU,0BAA0B,CAAC,MAAc;IACvD,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,8DAA8D,CAAC,EAAE;QACxF,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,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;KACnE;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,SAAS,CAAC;KAClB;IAED,OAAO,0BAA0B,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC","sourcesContent":["import fsPromises from 'fs/promises';\n\nfunction removeComments(source: string) {\n // Takes a string of code, not an actual function.\n return source.replace(/\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*/g, '').trim(); // Strip comments\n}\n\nexport type ModuleType = 'esm' | 'cjs';\n\n/**\n * Determines if the given source is commonjs or esm.\n * @returns \"esm\" | \"cjs\" | undefined\n */\nexport function detectModuleTypeFromSource(source: string): ModuleType | undefined {\n let result: ModuleType | undefined;\n\n const content = removeComments(source);\n\n if (\n content.match(\n /(import *)|(import {)|(export {)|(export \\*)|(export (default )?[_a-zA-Z0-9]+)|(export [a-zA-Z]+ from)/,\n )\n ) {\n result = 'esm';\n } else if (content.match(/module\\.exports[ =]+|exports\\.|typeof exports|require\\(['\"]+/)) {\n result = 'cjs';\n }\n\n return result;\n}\n\n/**\n * Determines if the given file is commonjs or esm.\n * @returns \"esm\" | \"cjs\" | undefined\n */\nexport async function detectModuleType(filePath: string): Promise<ModuleType | undefined> {\n let source: string;\n\n try {\n source = (await fsPromises.readFile(filePath, 'utf8')).toString();\n } catch (e) {\n return undefined;\n }\n\n return detectModuleTypeFromSource(removeComments(source));\n}\n"]}
@@ -1,15 +1,14 @@
1
1
  import path from 'path';
2
- import fs from 'fs';
2
+ import fsPromises from 'fs/promises';
3
3
  import semver from 'semver';
4
4
  import { PackageDefinitions } from './PackageDefinitions.js';
5
- const { realpath } = fs.promises;
6
5
  export async function findPackagePath(dependencyName, versionRequirement, cwd, gitRootPath, isOptional) {
7
6
  let packagePath = cwd;
8
7
  do {
9
8
  const resolvedPath = path.join(packagePath, 'node_modules', dependencyName);
10
9
  const definition = await PackageDefinitions.getInstance().get(resolvedPath);
11
10
  if (definition?.version && (!versionRequirement || semver.satisfies(definition.version, versionRequirement))) {
12
- return await realpath(resolvedPath);
11
+ return fsPromises.realpath(resolvedPath);
13
12
  }
14
13
  // We haven't found it. Try to move up a directory.
15
14
  packagePath = path.dirname(packagePath);
@@ -1 +1 @@
1
- {"version":3,"file":"findPackagePath.js","sourceRoot":"","sources":["../src/findPackagePath.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,cAAsB,EACtB,kBAAsC,EACtC,GAAW,EACX,WAAoB,EACpB,UAAoB;IAEpB,IAAI,WAAW,GAAG,GAAG,CAAC;IAEtB,GAAG;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE5E,IAAI,UAAU,EAAE,OAAO,IAAI,CAAC,CAAC,kBAAkB,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE;YAC5G,OAAO,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC;SACrC;QAED,mDAAmD;QACnD,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAExC,oDAAoD;QACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC9C,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACzC;QAED,yCAAyC;QACzC,IAAI,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;YACxC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACzC;KACF,QAAQ,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,WAAW,EAAE;IAElH,IAAI,CAAC,UAAU,EAAE;QACf,MAAM,IAAI,KAAK,CACb,sBAAsB,cAAc,GAClC,kBAAkB,CAAC,CAAC,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAClD,WAAW,GAAG,0DAA0D,CACzE,CAAC;KACH;IAED,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport semver from 'semver';\nimport { PackageDefinitions } from './PackageDefinitions.js';\n\nconst { realpath } = fs.promises;\n\nexport async function findPackagePath(\n dependencyName: string,\n versionRequirement: string | undefined,\n cwd: string,\n gitRootPath?: string,\n isOptional?: boolean,\n): Promise<string | undefined> {\n let packagePath = cwd;\n\n do {\n const resolvedPath = path.join(packagePath, 'node_modules', dependencyName);\n const definition = await PackageDefinitions.getInstance().get(resolvedPath);\n\n if (definition?.version && (!versionRequirement || semver.satisfies(definition.version, versionRequirement))) {\n return await realpath(resolvedPath);\n }\n\n // We haven't found it. Try to move up a directory.\n packagePath = path.dirname(packagePath);\n\n // If we moved up into a scope folder, skip over it.\n if (path.basename(packagePath).startsWith('@')) {\n packagePath = path.dirname(packagePath);\n }\n\n // Skip over nested node_modules folders.\n if (packagePath.endsWith('node_modules')) {\n packagePath = path.dirname(packagePath);\n }\n } while ((!gitRootPath || packagePath.length >= gitRootPath.length) && path.dirname(packagePath) !== packagePath);\n\n if (!isOptional) {\n throw new Error(\n `Could not resolve \"${dependencyName}${\n versionRequirement ? `@${versionRequirement}` : ``\n }\" from \"${cwd}\". Make sure you have installed the latest dependencies.`,\n );\n }\n\n return undefined;\n}\n"]}
1
+ {"version":3,"file":"findPackagePath.js","sourceRoot":"","sources":["../src/findPackagePath.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,cAAsB,EACtB,kBAAsC,EACtC,GAAW,EACX,WAAoB,EACpB,UAAoB;IAEpB,IAAI,WAAW,GAAG,GAAG,CAAC;IAEtB,GAAG;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE5E,IAAI,UAAU,EAAE,OAAO,IAAI,CAAC,CAAC,kBAAkB,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE;YAC5G,OAAO,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;SAC1C;QAED,mDAAmD;QACnD,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAExC,oDAAoD;QACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC9C,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACzC;QAED,yCAAyC;QACzC,IAAI,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;YACxC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACzC;KACF,QAAQ,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,WAAW,EAAE;IAElH,IAAI,CAAC,UAAU,EAAE;QACf,MAAM,IAAI,KAAK,CACb,sBAAsB,cAAc,GAClC,kBAAkB,CAAC,CAAC,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAClD,WAAW,GAAG,0DAA0D,CACzE,CAAC;KACH;IAED,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import path from 'path';\nimport fsPromises from 'fs/promises';\nimport semver from 'semver';\nimport { PackageDefinitions } from './PackageDefinitions.js';\n\nexport async function findPackagePath(\n dependencyName: string,\n versionRequirement: string | undefined,\n cwd: string,\n gitRootPath?: string,\n isOptional?: boolean,\n): Promise<string | undefined> {\n let packagePath = cwd;\n\n do {\n const resolvedPath = path.join(packagePath, 'node_modules', dependencyName);\n const definition = await PackageDefinitions.getInstance().get(resolvedPath);\n\n if (definition?.version && (!versionRequirement || semver.satisfies(definition.version, versionRequirement))) {\n return fsPromises.realpath(resolvedPath);\n }\n\n // We haven't found it. Try to move up a directory.\n packagePath = path.dirname(packagePath);\n\n // If we moved up into a scope folder, skip over it.\n if (path.basename(packagePath).startsWith('@')) {\n packagePath = path.dirname(packagePath);\n }\n\n // Skip over nested node_modules folders.\n if (packagePath.endsWith('node_modules')) {\n packagePath = path.dirname(packagePath);\n }\n } while ((!gitRootPath || packagePath.length >= gitRootPath.length) && path.dirname(packagePath) !== packagePath);\n\n if (!isOptional) {\n throw new Error(\n `Could not resolve \"${dependencyName}${\n versionRequirement ? `@${versionRequirement}` : ``\n }\" from \"${cwd}\". Make sure you have installed the latest dependencies.`,\n );\n }\n\n return undefined;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/package-utilities",
3
- "version": "2.3.11",
3
+ "version": "2.3.12",
4
4
  "description": "Utilities for resolving/parsing packages and their imports.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -16,9 +16,9 @@
16
16
  "@babel/parser": "^7.16.12",
17
17
  "@babel/traverse": "^7.16.10",
18
18
  "@ms-cloudpack/bundler-types": "^0.12.0",
19
- "@ms-cloudpack/json-utilities": "^0.0.5",
19
+ "@ms-cloudpack/json-utilities": "^0.0.6",
20
20
  "@ms-cloudpack/package-overrides": "^0.3.4",
21
- "@ms-cloudpack/path-utilities": "^2.1.1",
21
+ "@ms-cloudpack/path-utilities": "^2.1.2",
22
22
  "@ms-cloudpack/path-string-parsing": "^1.0.1",
23
23
  "merge": "^2.1.1",
24
24
  "resolve": "^1.22.0"