chore: move to folder-based deps lists (#13361)
This commit is contained in:
parent
424de6c38f
commit
1c3db811f5
|
|
@ -1,221 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
'browserServerImpl.ts': [ '**' ],
|
|
||||||
|
|
||||||
// CLI should only use client-side features.
|
|
||||||
'cli/': [
|
|
||||||
'..',
|
|
||||||
'cli/**',
|
|
||||||
'client/**',
|
|
||||||
'debug/injected/',
|
|
||||||
'generated/',
|
|
||||||
'grid/**',
|
|
||||||
'server/injected/',
|
|
||||||
'server/trace/**',
|
|
||||||
'utils/**',
|
|
||||||
],
|
|
||||||
|
|
||||||
'cli/driver.ts': [
|
|
||||||
'..',
|
|
||||||
'**',
|
|
||||||
],
|
|
||||||
|
|
||||||
// Client depends on chromium protocol for types.
|
|
||||||
'client/': [
|
|
||||||
'../types/**',
|
|
||||||
'common/',
|
|
||||||
'protocol/',
|
|
||||||
'server/chromium/protocol.d.ts',
|
|
||||||
'utils/',
|
|
||||||
],
|
|
||||||
|
|
||||||
'dispatchers/': [
|
|
||||||
'common/',
|
|
||||||
'protocol/',
|
|
||||||
'server/**',
|
|
||||||
'utils/'
|
|
||||||
],
|
|
||||||
|
|
||||||
// Grid
|
|
||||||
'grid/': [
|
|
||||||
'client/',
|
|
||||||
'dispatchers/**',
|
|
||||||
'server/',
|
|
||||||
'utils/**',
|
|
||||||
],
|
|
||||||
|
|
||||||
'inProcessFactory.ts': [ '**' ],
|
|
||||||
|
|
||||||
'outofprocess.ts': [
|
|
||||||
'client/',
|
|
||||||
'protocol/',
|
|
||||||
'utils/'
|
|
||||||
],
|
|
||||||
|
|
||||||
'protocol/': [
|
|
||||||
'utils/'
|
|
||||||
],
|
|
||||||
|
|
||||||
// Generic dependencies for server-side code.
|
|
||||||
'server/': [
|
|
||||||
'../types/types.d.ts',
|
|
||||||
'common/',
|
|
||||||
'generated/',
|
|
||||||
'protocol/**',
|
|
||||||
// Can depend on any files in these subdirectories.
|
|
||||||
'server/',
|
|
||||||
// Can depend on files directly in the server directory.
|
|
||||||
'server/common/**',
|
|
||||||
'server/injected/**',
|
|
||||||
'server/supplements/**',
|
|
||||||
// For fetch ?!?
|
|
||||||
'server/trace/recorder/tracing.ts',
|
|
||||||
'utils/',
|
|
||||||
],
|
|
||||||
|
|
||||||
// No dependencies for code shared between node and page.
|
|
||||||
'server/common/': [],
|
|
||||||
|
|
||||||
// Strict dependencies for injected code.
|
|
||||||
'server/injected/': [
|
|
||||||
'server/common/', 'protocol/channels.ts'
|
|
||||||
],
|
|
||||||
|
|
||||||
// Electron and Clank use chromium internally.
|
|
||||||
'server/android/': [
|
|
||||||
'common/',
|
|
||||||
'generated/',
|
|
||||||
'protocol/',
|
|
||||||
'protocol/**',
|
|
||||||
'server/',
|
|
||||||
'server/chromium/',
|
|
||||||
'server/common/**',
|
|
||||||
'server/injected/**',
|
|
||||||
'server/supplements/**',
|
|
||||||
'utils/',
|
|
||||||
],
|
|
||||||
|
|
||||||
'server/browserContext.ts': [
|
|
||||||
'common/',
|
|
||||||
'generated/',
|
|
||||||
'protocol/**',
|
|
||||||
'server/',
|
|
||||||
'server/common/**',
|
|
||||||
'server/injected/**',
|
|
||||||
'server/supplements/**',
|
|
||||||
'server/trace/recorder/tracing.ts',
|
|
||||||
'utils/',
|
|
||||||
],
|
|
||||||
|
|
||||||
'server/electron/': [
|
|
||||||
'common/',
|
|
||||||
'generated/',
|
|
||||||
'protocol/**',
|
|
||||||
'server/',
|
|
||||||
'server/chromium/',
|
|
||||||
'server/common/**',
|
|
||||||
'server/injected/**',
|
|
||||||
'server/supplements/**',
|
|
||||||
'utils/',
|
|
||||||
],
|
|
||||||
|
|
||||||
'server/playwright.ts': [
|
|
||||||
'common/',
|
|
||||||
'generated/',
|
|
||||||
'protocol/**',
|
|
||||||
'server/',
|
|
||||||
'server/android/',
|
|
||||||
'server/chromium/',
|
|
||||||
'server/common/**',
|
|
||||||
'server/electron/',
|
|
||||||
'server/firefox/',
|
|
||||||
'server/injected/**',
|
|
||||||
'server/supplements/**',
|
|
||||||
'server/webkit/',
|
|
||||||
'utils/',
|
|
||||||
],
|
|
||||||
|
|
||||||
'server/supplements/recorder/recorderApp.ts': [
|
|
||||||
'common/',
|
|
||||||
'server/',
|
|
||||||
'server/chromium/',
|
|
||||||
'utils/',
|
|
||||||
],
|
|
||||||
|
|
||||||
'server/supplements/recorderSupplement.ts': [
|
|
||||||
'common/',
|
|
||||||
'generated/',
|
|
||||||
'protocol/**',
|
|
||||||
'server/',
|
|
||||||
'server/common/**',
|
|
||||||
'server/injected/**',
|
|
||||||
'server/snapshot/',
|
|
||||||
'server/supplements/**',
|
|
||||||
'utils/',
|
|
||||||
],
|
|
||||||
|
|
||||||
|
|
||||||
// Trace viewer
|
|
||||||
'server/trace/common/': [
|
|
||||||
'common/',
|
|
||||||
'generated/',
|
|
||||||
'protocol/**',
|
|
||||||
'server/',
|
|
||||||
'server/common/**',
|
|
||||||
'server/injected/**',
|
|
||||||
'server/snapshot/',
|
|
||||||
'server/supplements/**',
|
|
||||||
'utils/',
|
|
||||||
],
|
|
||||||
|
|
||||||
// For testing
|
|
||||||
'server/trace/test/': [
|
|
||||||
'@trace-viewer/**',
|
|
||||||
'**',
|
|
||||||
],
|
|
||||||
|
|
||||||
'server/trace/recorder/': [
|
|
||||||
'common/',
|
|
||||||
'generated/',
|
|
||||||
'protocol/**',
|
|
||||||
'server/',
|
|
||||||
'server/common/**',
|
|
||||||
'server/injected/**',
|
|
||||||
'server/snapshot/',
|
|
||||||
'server/supplements/**',
|
|
||||||
'server/trace/common/',
|
|
||||||
'utils/',
|
|
||||||
],
|
|
||||||
|
|
||||||
'server/trace/viewer/': [
|
|
||||||
'common/',
|
|
||||||
'generated/',
|
|
||||||
'protocol/**',
|
|
||||||
'server/',
|
|
||||||
'server/chromium/',
|
|
||||||
'server/common/**',
|
|
||||||
'server/injected/**',
|
|
||||||
'server/snapshot/',
|
|
||||||
'server/supplements/**',
|
|
||||||
'server/trace/common/',
|
|
||||||
'server/trace/recorder/',
|
|
||||||
'utils/',
|
|
||||||
],
|
|
||||||
|
|
||||||
// The service is a cross-cutting feature, and so it depends on a bunch of things.
|
|
||||||
'remote/': [
|
|
||||||
'client/',
|
|
||||||
'debug/',
|
|
||||||
'dispatchers/',
|
|
||||||
'server/',
|
|
||||||
'server/electron/',
|
|
||||||
'server/supplements/',
|
|
||||||
'server/trace/',
|
|
||||||
'utils/**',
|
|
||||||
],
|
|
||||||
|
|
||||||
'utils/': [
|
|
||||||
'common/',
|
|
||||||
'protocol/',
|
|
||||||
'third_party/diff_match_patch',
|
|
||||||
],
|
|
||||||
};
|
|
||||||
10
packages/playwright-core/src/DEPS.list
Normal file
10
packages/playwright-core/src/DEPS.list
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
[browserServerImpl.ts]
|
||||||
|
**
|
||||||
|
|
||||||
|
[inProcessFactory.ts]
|
||||||
|
**
|
||||||
|
|
||||||
|
[outofprocess.ts]
|
||||||
|
client/
|
||||||
|
protocol/
|
||||||
|
utils/
|
||||||
16
packages/playwright-core/src/cli/DEPS.list
Normal file
16
packages/playwright-core/src/cli/DEPS.list
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
[*]
|
||||||
|
../../
|
||||||
|
../client
|
||||||
|
../debug/injected
|
||||||
|
../generated/
|
||||||
|
../grid
|
||||||
|
../server/injected/
|
||||||
|
../server/trace
|
||||||
|
../utils
|
||||||
|
|
||||||
|
[cli.ts]
|
||||||
|
../server/trace/viewer/traceViewer.ts
|
||||||
|
|
||||||
|
[driver.ts]
|
||||||
|
../**
|
||||||
|
../../
|
||||||
5
packages/playwright-core/src/client/DEPS.list
Normal file
5
packages/playwright-core/src/client/DEPS.list
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
[*]
|
||||||
|
../../types/
|
||||||
|
../common/
|
||||||
|
../protocol/
|
||||||
|
../utils/
|
||||||
5
packages/playwright-core/src/dispatchers/DEPS.list
Normal file
5
packages/playwright-core/src/dispatchers/DEPS.list
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
[*]
|
||||||
|
../common/
|
||||||
|
../protocol/
|
||||||
|
../server/**
|
||||||
|
../utils/
|
||||||
5
packages/playwright-core/src/grid/DEPS.list
Normal file
5
packages/playwright-core/src/grid/DEPS.list
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
[*]
|
||||||
|
../client/
|
||||||
|
../dispatchers/
|
||||||
|
../server/
|
||||||
|
../utils/
|
||||||
3
packages/playwright-core/src/protocol/DEPS.list
Normal file
3
packages/playwright-core/src/protocol/DEPS.list
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
[*]
|
||||||
|
../utils/
|
||||||
|
|
||||||
5
packages/playwright-core/src/remote/DEPS.list
Normal file
5
packages/playwright-core/src/remote/DEPS.list
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
[*]
|
||||||
|
../client/
|
||||||
|
../dispatchers/
|
||||||
|
../server/
|
||||||
|
../utils/
|
||||||
21
packages/playwright-core/src/server/DEPS.list
Normal file
21
packages/playwright-core/src/server/DEPS.list
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
[*]
|
||||||
|
../../types/types.d.ts
|
||||||
|
../common/
|
||||||
|
../generated/
|
||||||
|
../protocol/
|
||||||
|
../utils/
|
||||||
|
./
|
||||||
|
common/
|
||||||
|
injected/
|
||||||
|
supplements/
|
||||||
|
trace/recorder/tracing.ts
|
||||||
|
|
||||||
|
[browserContext.ts]
|
||||||
|
supplements/har/
|
||||||
|
|
||||||
|
[playwright.ts]
|
||||||
|
android/
|
||||||
|
chromium/
|
||||||
|
electron/
|
||||||
|
firefox/
|
||||||
|
webkit/
|
||||||
5
packages/playwright-core/src/server/android/DEPS.list
Normal file
5
packages/playwright-core/src/server/android/DEPS.list
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
[*]
|
||||||
|
../
|
||||||
|
../../protocol/
|
||||||
|
../../utils/
|
||||||
|
../chromium/
|
||||||
3
packages/playwright-core/src/server/common/DEPS.list
Normal file
3
packages/playwright-core/src/server/common/DEPS.list
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
[*]
|
||||||
|
|
||||||
|
|
||||||
5
packages/playwright-core/src/server/electron/DEPS.list
Normal file
5
packages/playwright-core/src/server/electron/DEPS.list
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
[*]
|
||||||
|
../
|
||||||
|
../../protocol/
|
||||||
|
../../utils/
|
||||||
|
../chromium/
|
||||||
2
packages/playwright-core/src/server/injected/DEPS.list
Normal file
2
packages/playwright-core/src/server/injected/DEPS.list
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
[*]
|
||||||
|
../common/
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
[*]
|
||||||
|
../
|
||||||
|
../../common/
|
||||||
|
../../protocol/
|
||||||
|
../../utils/
|
||||||
|
|
||||||
|
[recorderSupplement.ts]
|
||||||
|
../../generated/
|
||||||
|
./recorder/
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
[*]
|
||||||
|
../../injected/
|
||||||
|
../../../utils/
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
[*]
|
||||||
|
../../
|
||||||
|
../../../common/
|
||||||
|
../../../protocol/
|
||||||
|
../../../utils/
|
||||||
|
|
||||||
|
[recorderApp.ts]
|
||||||
|
../../chromium/crApp.ts
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
[*]
|
||||||
|
../../supplements/har/
|
||||||
|
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
[*]
|
||||||
|
../../
|
||||||
|
../../../common/
|
||||||
|
../../../generated/
|
||||||
|
../../../protocol/
|
||||||
|
../../../utils/
|
||||||
|
../../common/
|
||||||
|
../../supplements/har/
|
||||||
|
../common/
|
||||||
3
packages/playwright-core/src/server/trace/test/DEPS.list
Normal file
3
packages/playwright-core/src/server/trace/test/DEPS.list
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
[*]
|
||||||
|
../../../**
|
||||||
|
@trace-viewer/**
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[*]
|
||||||
|
../../
|
||||||
|
../../../generated/
|
||||||
|
../../../utils/
|
||||||
|
../../chromium/crApp.ts
|
||||||
4
packages/playwright-core/src/utils/DEPS.list
Normal file
4
packages/playwright-core/src/utils/DEPS.list
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[*]
|
||||||
|
../common/
|
||||||
|
../protocol/
|
||||||
|
../third_party/diff_match_patch
|
||||||
5
packages/playwright-test/src/DEPS.list
Normal file
5
packages/playwright-test/src/DEPS.list
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
[*]
|
||||||
|
../types/testReporter.d.ts
|
||||||
|
matchers/
|
||||||
|
reporters/
|
||||||
|
third_party/
|
||||||
6
packages/playwright-test/src/matchers/DEPS.list
Normal file
6
packages/playwright-test/src/matchers/DEPS.list
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
[*]
|
||||||
|
../expect.ts
|
||||||
|
../globals.ts
|
||||||
|
../testInfo.ts
|
||||||
|
../types.ts
|
||||||
|
../util.ts
|
||||||
4
packages/playwright-test/src/reporters/DEPS.list
Normal file
4
packages/playwright-test/src/reporters/DEPS.list
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[*]
|
||||||
|
../types.ts
|
||||||
|
../util.ts
|
||||||
|
../../types/testReporter.d.ts
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
'/': [
|
|
||||||
'@web/**'
|
|
||||||
]
|
|
||||||
};
|
|
||||||
2
packages/recorder/src/DEPS.list
Normal file
2
packages/recorder/src/DEPS.list
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
[*]
|
||||||
|
@web/**
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
'/': [
|
|
||||||
'@web/**',
|
|
||||||
'ui/',
|
|
||||||
],
|
|
||||||
|
|
||||||
'ui/': [
|
|
||||||
'@web/**',
|
|
||||||
'geometry.ts',
|
|
||||||
'entries.ts',
|
|
||||||
]
|
|
||||||
};
|
|
||||||
3
packages/trace-viewer/src/DEPS.list
Normal file
3
packages/trace-viewer/src/DEPS.list
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
[*]
|
||||||
|
@web/**
|
||||||
|
ui/
|
||||||
4
packages/trace-viewer/src/ui/DEPS.list
Normal file
4
packages/trace-viewer/src/ui/DEPS.list
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[*]
|
||||||
|
@web/**
|
||||||
|
../entries.ts
|
||||||
|
../geometry.ts
|
||||||
|
|
@ -26,6 +26,8 @@ const packagesDir = path.normalize(path.join(__dirname, '..', 'packages'));
|
||||||
const packages = fs.readdirSync(packagesDir);
|
const packages = fs.readdirSync(packagesDir);
|
||||||
const peerDependencies = ['electron', 'react', 'react-dom', '@zip.js/zip.js'];
|
const peerDependencies = ['electron', 'react', 'react-dom', '@zip.js/zip.js'];
|
||||||
|
|
||||||
|
const depsCache = {};
|
||||||
|
|
||||||
async function checkDeps() {
|
async function checkDeps() {
|
||||||
await innerCheckDeps(path.join(packagesDir, 'recorder'), true, true);
|
await innerCheckDeps(path.join(packagesDir, 'recorder'), true, true);
|
||||||
await innerCheckDeps(path.join(packagesDir, 'trace-viewer'), true, true);
|
await innerCheckDeps(path.join(packagesDir, 'trace-viewer'), true, true);
|
||||||
|
|
@ -45,10 +47,10 @@ async function checkDeps() {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function innerCheckDeps(root, checkDepsFile, checkPackageJson) {
|
async function innerCheckDeps(root, checkDepsFile, checkPackageJson) {
|
||||||
console.log('Testing', root);
|
console.log('Testing', path.relative(packagesDir, root));
|
||||||
const deps = new Set();
|
const deps = new Set();
|
||||||
const src = path.join(root, 'src');
|
const src = path.join(root, 'src');
|
||||||
const depsFile = checkDepsFile ? loadDEPSFile(src) : {};
|
|
||||||
const packageJSON = require(path.join(root, 'package.json'));
|
const packageJSON = require(path.join(root, 'package.json'));
|
||||||
const program = ts.createProgram({
|
const program = ts.createProgram({
|
||||||
options: {
|
options: {
|
||||||
|
|
@ -60,12 +62,8 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) {
|
||||||
});
|
});
|
||||||
const sourceFiles = program.getSourceFiles();
|
const sourceFiles = program.getSourceFiles();
|
||||||
const errors = [];
|
const errors = [];
|
||||||
const usedDeps = new Set(['/']);
|
|
||||||
sourceFiles.filter(x => !x.fileName.includes('node_modules')).map(x => visit(x, x.fileName));
|
sourceFiles.filter(x => !x.fileName.includes('node_modules')).map(x => visit(x, x.fileName));
|
||||||
for (const key of Object.keys(depsFile)) {
|
|
||||||
if (!usedDeps.has(key) && depsFile[key].length)
|
|
||||||
errors.push(`Stale DEPS entry "${key}"`);
|
|
||||||
}
|
|
||||||
if (checkDepsFile && errors.length) {
|
if (checkDepsFile && errors.length) {
|
||||||
for (const error of errors)
|
for (const error of errors)
|
||||||
console.log(error);
|
console.log(error);
|
||||||
|
|
@ -122,7 +120,7 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) {
|
||||||
importPath = importPath + '.d.ts';
|
importPath = importPath + '.d.ts';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (checkDepsFile && !allowImport(depsFile, fileName, importPath))
|
if (checkDepsFile && !allowImport(fileName, importPath))
|
||||||
errors.push(`Disallowed import ${path.relative(root, importPath)} in ${path.relative(root, fileName)}`);
|
errors.push(`Disallowed import ${path.relative(root, importPath)} in ${path.relative(root, fileName)}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -138,20 +136,38 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) {
|
||||||
ts.forEachChild(node, x => visit(x, fileName));
|
ts.forEachChild(node, x => visit(x, fileName));
|
||||||
}
|
}
|
||||||
|
|
||||||
function allowImport(depsFile, from, to) {
|
function allowImport(from, to) {
|
||||||
const fromDirectory = path.dirname(from);
|
const fromDirectory = path.dirname(from);
|
||||||
const toDirectory = path.dirname(to);
|
const toDirectory = path.dirname(to);
|
||||||
if (fromDirectory === toDirectory)
|
if (fromDirectory === toDirectory)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
while (!depsFile[from]) {
|
let depsDirectory = fromDirectory;
|
||||||
if (from.lastIndexOf('/') === -1)
|
while (depsDirectory.startsWith(packagesDir) && !depsCache[depsDirectory] && !fs.existsSync(path.join(depsDirectory, 'DEPS.list')))
|
||||||
return false;
|
depsDirectory = path.dirname(depsDirectory);
|
||||||
from = from.substring(0, from.lastIndexOf('/'));
|
|
||||||
|
let deps = depsCache[depsDirectory];
|
||||||
|
if (!deps) {
|
||||||
|
const depsListFile = path.join(depsDirectory, 'DEPS.list');
|
||||||
|
deps = {};
|
||||||
|
let group;
|
||||||
|
for (const line of fs.readFileSync(depsListFile, 'utf-8').split('\n').filter(Boolean).filter(l => !l.startsWith('#'))) {
|
||||||
|
const groupMatch = line.match(/\[(.*)\]/);
|
||||||
|
if (groupMatch) {
|
||||||
|
group = [];
|
||||||
|
deps[groupMatch[1]] = group;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (line.startsWith('@'))
|
||||||
|
group.push(line.replace(/@([\w-]+)\/(.*)/, path.join(packagesDir, '$1', 'src', '$2')));
|
||||||
|
else
|
||||||
|
group.push(path.resolve(depsDirectory, line));
|
||||||
|
}
|
||||||
|
depsCache[depsDirectory] = deps;
|
||||||
}
|
}
|
||||||
|
|
||||||
usedDeps.add(from);
|
const mergedDeps = [...(deps['*'] || []), ...(deps[path.relative(depsDirectory, from)] || [])]
|
||||||
for (const dep of depsFile[from]) {
|
for (const dep of mergedDeps) {
|
||||||
if (to === dep || toDirectory === dep)
|
if (to === dep || toDirectory === dep)
|
||||||
return true;
|
return true;
|
||||||
if (dep.endsWith('**')) {
|
if (dep.endsWith('**')) {
|
||||||
|
|
@ -163,7 +179,6 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function allowExternalImport(importName, packageJSON) {
|
function allowExternalImport(importName, packageJSON) {
|
||||||
// Only external imports are relevant. Files in src/web are bundled via webpack.
|
// Only external imports are relevant. Files in src/web are bundled via webpack.
|
||||||
if (importName.startsWith('.') || importName.startsWith('@'))
|
if (importName.startsWith('.') || importName.startsWith('@'))
|
||||||
|
|
@ -172,15 +187,16 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) {
|
||||||
return true;
|
return true;
|
||||||
try {
|
try {
|
||||||
const resolvedImport = require.resolve(importName);
|
const resolvedImport = require.resolve(importName);
|
||||||
const resolvedImportRelativeToNodeModules = path.relative(path.join(root, 'node_modules'), resolvedImport);
|
if (!resolvedImport.includes('node_modules'))
|
||||||
// Filter out internal Node.js modules
|
|
||||||
if (!resolvedImportRelativeToNodeModules.startsWith(importName))
|
|
||||||
return true;
|
return true;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (error.code !== 'MODULE_NOT_FOUND')
|
if (error.code !== 'MODULE_NOT_FOUND')
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
return !!(packageJSON.dependencies || {})[importName];
|
|
||||||
|
const match = importName.match(/(@[\w-]+\/)?([^/]+)/);
|
||||||
|
const dependency = match[1] ? match[1] + '/' + match[2] : match[2];
|
||||||
|
return !!(packageJSON.dependencies || {})[dependency];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -197,23 +213,6 @@ function listAllFiles(dir) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadDEPSFile(src) {
|
|
||||||
const deps = require(path.join(src, 'DEPS'));
|
|
||||||
const resolved = {};
|
|
||||||
for (let [key, values] of Object.entries(deps)) {
|
|
||||||
if (key === '/')
|
|
||||||
key = '';
|
|
||||||
resolved[path.resolve(src, key)] = values.map(v => {
|
|
||||||
if (v.startsWith('@')) {
|
|
||||||
const tokens = v.substring(1).split('/');
|
|
||||||
return path.resolve(packagesDir, tokens[0], 'src', ...tokens.slice(1));
|
|
||||||
}
|
|
||||||
return path.resolve(src, v);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return resolved;
|
|
||||||
}
|
|
||||||
|
|
||||||
checkDeps().catch(e => {
|
checkDeps().catch(e => {
|
||||||
console.error(e && e.stack ? e.stack : e);
|
console.error(e && e.stack ? e.stack : e);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue