@dotglitch/ngx-common
Version:
Angular components and utilities that are commonly used.
91 lines • 12.5 kB
JavaScript
import * as path from 'path-browserify';
export class DependencyParser {
constructor() {
this.REGEX_NODE_MODULE = /^node:([\w\W\/]+)$/;
}
// https://github.com/lukasbach/monaco-editor-auto-typings/commit/fc046e7d9a2abbb5121ad8ab25195d8c1c277416
parseDependencies(source, parent) {
const importRegex = /import *.+ *from *['"](?<importPath>.+?)['"]/g;
const dynamicImportRegex = /await import ?\(['"](?<importPath>.+?)['"]\)/g;
const cjsRequireRegex = /require *\(['"](?<importPath>.+?)['"]\)/g;
const matches = [
...source.matchAll(importRegex),
...source.matchAll(dynamicImportRegex),
...source.matchAll(cjsRequireRegex)
];
const importPaths = matches.map(match => match.groups?.['importPath']);
const result = importPaths.map(imp => this.resolvePath(imp, parent));
return result;
}
resolvePath(importPath, parent) {
const nodeImport = importPath.match(this.REGEX_NODE_MODULE);
if (nodeImport) {
return {
kind: 'relative-in-package',
packageName: '@types/node',
importPath: `${nodeImport[1]}.d.ts`,
sourcePath: '',
};
}
if (typeof parent === 'string') {
if (importPath.startsWith('.')) {
return {
kind: 'relative',
importPath,
sourcePath: parent,
};
}
else if (importPath.startsWith('@')) {
const segments = importPath.split('/');
return {
kind: 'package',
packageName: `${segments[0]}/${segments[1]}`,
importPath: segments.slice(2).join('/'),
};
}
else {
const segments = importPath.split('/');
return {
kind: 'package',
packageName: segments[0],
importPath: segments.slice(1).join('/'),
};
}
}
else {
switch (parent.kind) {
case 'package':
throw Error('TODO?');
case 'relative':
throw Error('TODO2?');
case 'relative-in-package':
if (importPath.startsWith('.')) {
return {
kind: 'relative-in-package',
packageName: parent.packageName,
sourcePath: path.join(parent.sourcePath, parent.importPath),
importPath: importPath,
};
}
else if (importPath.startsWith('@')) {
const segments = importPath.split('/');
return {
kind: 'package',
packageName: `${segments[0]}/${segments[1]}`,
importPath: segments.slice(2).join('/'),
};
}
else {
const segments = importPath.split('/');
return {
kind: 'package',
packageName: segments[0],
importPath: segments.slice(1).join('/'),
};
}
}
}
return null;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jeS1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvdnNjb2RlL3RzLXR5cGUtcmVzb2x2ZXIvZGVwZW5kZW5jeS1wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxpQkFBaUIsQ0FBQztBQUd4QyxNQUFNLE9BQU8sZ0JBQWdCO0lBQTdCO1FBQ1ksc0JBQWlCLEdBQUcsb0JBQW9CLENBQUM7SUEwRnJELENBQUM7SUF4RkcsMEdBQTBHO0lBQ25HLGlCQUFpQixDQUFDLE1BQWMsRUFBRSxNQUFtQztRQUN4RSxNQUFNLFdBQVcsR0FBRywrQ0FBK0MsQ0FBQztRQUNwRSxNQUFNLGtCQUFrQixHQUFHLCtDQUErQyxDQUFDO1FBQzNFLE1BQU0sZUFBZSxHQUFHLDBDQUEwQyxDQUFDO1FBRW5FLE1BQU0sT0FBTyxHQUFHO1lBQ1osR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUMvQixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUM7WUFDdEMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztTQUN0QyxDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRXJFLE9BQU8sTUFBTSxDQUFBO0lBQ2pCLENBQUM7SUFFTyxXQUFXLENBQUMsVUFBa0IsRUFBRSxNQUFtQztRQUN2RSxNQUFNLFVBQVUsR0FB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QkFDeEIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzt5QkFDMUMsQ0FBQztvQkFDTixDQUFDO1lBQ1QsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgtYnJvd3NlcmlmeSc7XG5pbXBvcnQgeyBJbXBvcnRSZXNvdXJjZVBhdGggfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIERlcGVuZGVuY3lQYXJzZXIge1xuICAgIHByaXZhdGUgUkVHRVhfTk9ERV9NT0RVTEUgPSAvXm5vZGU6KFtcXHdcXFdcXC9dKykkLztcblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sdWthc2JhY2gvbW9uYWNvLWVkaXRvci1hdXRvLXR5cGluZ3MvY29tbWl0L2ZjMDQ2ZTdkOWEyYWJiYjUxMjFhZDhhYjI1MTk1ZDhjMWMyNzc0MTZcbiAgICBwdWJsaWMgcGFyc2VEZXBlbmRlbmNpZXMoc291cmNlOiBzdHJpbmcsIHBhcmVudDogSW1wb3J0UmVzb3VyY2VQYXRoIHwgc3RyaW5nKTogSW1wb3J0UmVzb3VyY2VQYXRoW10ge1xuICAgICAgICBjb25zdCBpbXBvcnRSZWdleCA9IC9pbXBvcnQgKi4rICpmcm9tICpbJ1wiXSg/PGltcG9ydFBhdGg+Lis/KVsnXCJdL2c7XG4gICAgICAgIGNvbnN0IGR5bmFtaWNJbXBvcnRSZWdleCA9IC9hd2FpdCBpbXBvcnQgP1xcKFsnXCJdKD88aW1wb3J0UGF0aD4uKz8pWydcIl1cXCkvZztcbiAgICAgICAgY29uc3QgY2pzUmVxdWlyZVJlZ2V4ID0gL3JlcXVpcmUgKlxcKFsnXCJdKD88aW1wb3J0UGF0aD4uKz8pWydcIl1cXCkvZztcblxuICAgICAgICBjb25zdCBtYXRjaGVzID0gW1xuICAgICAgICAgICAgLi4uc291cmNlLm1hdGNoQWxsKGltcG9ydFJlZ2V4KSxcbiAgICAgICAgICAgIC4uLnNvdXJjZS5tYXRjaEFsbChkeW5hbWljSW1wb3J0UmVnZXgpLFxuICAgICAgICAgICAgLi4uc291cmNlLm1hdGNoQWxsKGNqc1JlcXVpcmVSZWdleClcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaW1wb3J0UGF0aHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBtYXRjaC5ncm91cHM/LlsnaW1wb3J0UGF0aCddKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW1wb3J0UGF0aHMubWFwKGltcCA9PiB0aGlzLnJlc29sdmVQYXRoKGltcCwgcGFyZW50KSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzb2x2ZVBhdGgoaW1wb3J0UGF0aDogc3RyaW5nLCBwYXJlbnQ6IEltcG9ydFJlc291cmNlUGF0aCB8IHN0cmluZyk6IEltcG9ydFJlc291cmNlUGF0aCB7XG4gICAgICAgIGNvbnN0IG5vZGVJbXBvcnQgPSBpbXBvcnRQYXRoLm1hdGNoKHRoaXMuUkVHRVhfTk9ERV9NT0RVTEUpO1xuICAgICAgICBpZiAobm9kZUltcG9ydCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBraW5kOiAncmVsYXRpdmUtaW4tcGFja2FnZScsXG4gICAgICAgICAgICAgICAgcGFja2FnZU5hbWU6ICdAdHlwZXMvbm9kZScsXG4gICAgICAgICAgICAgICAgaW1wb3J0UGF0aDogYCR7bm9kZUltcG9ydFsxXX0uZC50c2AsXG4gICAgICAgICAgICAgICAgc291cmNlUGF0aDogJycsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoaW1wb3J0UGF0aC5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgICAgICAgICBpbXBvcnRQYXRoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VQYXRoOiBwYXJlbnQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGltcG9ydFBhdGguc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBpbXBvcnRQYXRoLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogJ3BhY2thZ2UnLFxuICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZTogYCR7c2VnbWVudHNbMF19LyR7c2VnbWVudHNbMV19YCxcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0UGF0aDogc2VnbWVudHMuc2xpY2UoMikuam9pbignLycpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWdtZW50cyA9IGltcG9ydFBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiAncGFja2FnZScsXG4gICAgICAgICAgICAgICAgICAgIHBhY2thZ2VOYW1lOiBzZWdtZW50c1swXSxcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0UGF0aDogc2VnbWVudHMuc2xpY2UoMSkuam9pbignLycpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhcmVudC5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAncGFja2FnZSc6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdUT0RPPycpO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3JlbGF0aXZlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1RPRE8yPycpO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3JlbGF0aXZlLWluLXBhY2thZ2UnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoaW1wb3J0UGF0aC5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZDogJ3JlbGF0aXZlLWluLXBhY2thZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VOYW1lOiBwYXJlbnQucGFja2FnZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGF0aDogcGF0aC5qb2luKHBhcmVudC5zb3VyY2VQYXRoLCBwYXJlbnQuaW1wb3J0UGF0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0UGF0aDogaW1wb3J0UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW1wb3J0UGF0aC5zdGFydHNXaXRoKCdAJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnRzID0gaW1wb3J0UGF0aC5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kOiAncGFja2FnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZU5hbWU6IGAke3NlZ21lbnRzWzBdfS8ke3NlZ21lbnRzWzFdfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0UGF0aDogc2VnbWVudHMuc2xpY2UoMikuam9pbignLycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnRzID0gaW1wb3J0UGF0aC5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kOiAncGFja2FnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZU5hbWU6IHNlZ21lbnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydFBhdGg6IHNlZ21lbnRzLnNsaWNlKDEpLmpvaW4oJy8nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iXX0=