chore: run check-deps for all packages (#21395)
This commit is contained in:
parent
fbaf56a13f
commit
d904a6129f
26
package-lock.json
generated
26
package-lock.json
generated
|
|
@ -35,9 +35,7 @@
|
||||||
"@vitejs/plugin-basic-ssl": "^1.0.1",
|
"@vitejs/plugin-basic-ssl": "^1.0.1",
|
||||||
"@vitejs/plugin-react": "^3.0.0",
|
"@vitejs/plugin-react": "^3.0.0",
|
||||||
"@zip.js/zip.js": "^2.4.2",
|
"@zip.js/zip.js": "^2.4.2",
|
||||||
"ansi-to-html": "^0.7.2",
|
|
||||||
"chokidar": "^3.5.3",
|
"chokidar": "^3.5.3",
|
||||||
"codemirror": "^5.65.9",
|
|
||||||
"colors": "^1.4.0",
|
"colors": "^1.4.0",
|
||||||
"commonmark": "^0.30.0",
|
"commonmark": "^0.30.0",
|
||||||
"concurrently": "^6.2.1",
|
"concurrently": "^6.2.1",
|
||||||
|
|
@ -2306,8 +2304,7 @@
|
||||||
"node_modules/codemirror": {
|
"node_modules/codemirror": {
|
||||||
"version": "5.65.9",
|
"version": "5.65.9",
|
||||||
"resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.9.tgz",
|
"resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.9.tgz",
|
||||||
"integrity": "sha512-19Jox5sAKpusTDgqgKB5dawPpQcY+ipQK7xoEI+MVucEF9qqFaXpeqY1KaoyGBso/wHQoDa4HMMxMjdsS3Zzzw==",
|
"integrity": "sha512-19Jox5sAKpusTDgqgKB5dawPpQcY+ipQK7xoEI+MVucEF9qqFaXpeqY1KaoyGBso/wHQoDa4HMMxMjdsS3Zzzw=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"node_modules/color-convert": {
|
"node_modules/color-convert": {
|
||||||
"version": "1.9.3",
|
"version": "1.9.3",
|
||||||
|
|
@ -5743,6 +5740,10 @@
|
||||||
"source-map": "^0.6.1"
|
"source-map": "^0.6.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/web": {
|
||||||
|
"resolved": "packages/web",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
"node_modules/which": {
|
"node_modules/which": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
|
@ -6193,6 +6194,12 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ansi-to-html": "^0.7.2"
|
"ansi-to-html": "^0.7.2"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"packages/web": {
|
||||||
|
"version": "0.0.0",
|
||||||
|
"dependencies": {
|
||||||
|
"codemirror": "^5.65.9"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
@ -7694,8 +7701,7 @@
|
||||||
"codemirror": {
|
"codemirror": {
|
||||||
"version": "5.65.9",
|
"version": "5.65.9",
|
||||||
"resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.9.tgz",
|
"resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.9.tgz",
|
||||||
"integrity": "sha512-19Jox5sAKpusTDgqgKB5dawPpQcY+ipQK7xoEI+MVucEF9qqFaXpeqY1KaoyGBso/wHQoDa4HMMxMjdsS3Zzzw==",
|
"integrity": "sha512-19Jox5sAKpusTDgqgKB5dawPpQcY+ipQK7xoEI+MVucEF9qqFaXpeqY1KaoyGBso/wHQoDa4HMMxMjdsS3Zzzw=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"color-convert": {
|
"color-convert": {
|
||||||
"version": "1.9.3",
|
"version": "1.9.3",
|
||||||
|
|
@ -8675,7 +8681,7 @@
|
||||||
"html-reporter": {
|
"html-reporter": {
|
||||||
"version": "file:packages/html-reporter",
|
"version": "file:packages/html-reporter",
|
||||||
"requires": {
|
"requires": {
|
||||||
"ansi-to-html": "*"
|
"ansi-to-html": "^0.7.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"http-cache-semantics": {
|
"http-cache-semantics": {
|
||||||
|
|
@ -9862,6 +9868,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"web": {
|
||||||
|
"version": "file:packages/web",
|
||||||
|
"requires": {
|
||||||
|
"codemirror": "^5.65.9"
|
||||||
|
}
|
||||||
|
},
|
||||||
"which": {
|
"which": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
|
|
||||||
|
|
@ -70,9 +70,7 @@
|
||||||
"@vitejs/plugin-basic-ssl": "^1.0.1",
|
"@vitejs/plugin-basic-ssl": "^1.0.1",
|
||||||
"@vitejs/plugin-react": "^3.0.0",
|
"@vitejs/plugin-react": "^3.0.0",
|
||||||
"@zip.js/zip.js": "^2.4.2",
|
"@zip.js/zip.js": "^2.4.2",
|
||||||
"ansi-to-html": "^0.7.2",
|
|
||||||
"chokidar": "^3.5.3",
|
"chokidar": "^3.5.3",
|
||||||
"codemirror": "^5.65.9",
|
|
||||||
"colors": "^1.4.0",
|
"colors": "^1.4.0",
|
||||||
"commonmark": "^0.30.0",
|
"commonmark": "^0.30.0",
|
||||||
"concurrently": "^6.2.1",
|
"concurrently": "^6.2.1",
|
||||||
|
|
|
||||||
3
packages/html-reporter/src/DEPS.list
Normal file
3
packages/html-reporter/src/DEPS.list
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
[*]
|
||||||
|
@playwright/experimental-ct-react
|
||||||
|
@web/**
|
||||||
1
packages/protocol/src/DEPS.list
Normal file
1
packages/protocol/src/DEPS.list
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
[*]
|
||||||
1
packages/trace/src/DEPS.list
Normal file
1
packages/trace/src/DEPS.list
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
[*]
|
||||||
10
packages/web/package.json
Normal file
10
packages/web/package.json
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"name": "web",
|
||||||
|
"private": true,
|
||||||
|
"version": "0.0.0",
|
||||||
|
"scripts": {
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"codemirror": "^5.65.9"
|
||||||
|
}
|
||||||
|
}
|
||||||
3
packages/web/src/DEPS.list
Normal file
3
packages/web/src/DEPS.list
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
[*]
|
||||||
|
@playwright/experimental-ct-react
|
||||||
|
third_party/**
|
||||||
|
|
@ -35,11 +35,15 @@ const peerDependencies = ['electron', 'react', 'react-dom', '@zip.js/zip.js'];
|
||||||
const depsCache = {};
|
const depsCache = {};
|
||||||
|
|
||||||
async function checkDeps() {
|
async function checkDeps() {
|
||||||
await innerCheckDeps(path.join(packagesDir, 'recorder'), true, true);
|
await innerCheckDeps(path.join(packagesDir, 'protocol'));
|
||||||
await innerCheckDeps(path.join(packagesDir, 'trace-viewer'), true, true);
|
await innerCheckDeps(path.join(packagesDir, 'trace'));
|
||||||
|
await innerCheckDeps(path.join(packagesDir, 'web'));
|
||||||
|
await innerCheckDeps(path.join(packagesDir, 'html-reporter'));
|
||||||
|
await innerCheckDeps(path.join(packagesDir, 'recorder'));
|
||||||
|
await innerCheckDeps(path.join(packagesDir, 'trace-viewer'));
|
||||||
|
|
||||||
const corePackageJson = await innerCheckDeps(path.join(packagesDir, 'playwright-core'), true, true);
|
const corePackageJson = await innerCheckDeps(path.join(packagesDir, 'playwright-core'));
|
||||||
const testPackageJson = await innerCheckDeps(path.join(packagesDir, 'playwright-test'), true, true);
|
const testPackageJson = await innerCheckDeps(path.join(packagesDir, 'playwright-test'));
|
||||||
|
|
||||||
let hasVersionMismatch = false;
|
let hasVersionMismatch = false;
|
||||||
for (const [key, value] of Object.entries(corePackageJson.dependencies || {})) {
|
for (const [key, value] of Object.entries(corePackageJson.dependencies || {})) {
|
||||||
|
|
@ -52,12 +56,17 @@ async function checkDeps() {
|
||||||
process.exit(hasVersionMismatch ? 1 : 0);
|
process.exit(hasVersionMismatch ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function innerCheckDeps(root, checkDepsFile, checkPackageJson) {
|
async function innerCheckDeps(root) {
|
||||||
console.log('Testing', path.relative(packagesDir, root));
|
console.log('Checking DEPS for ' + 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 packageJSON = require(path.join(root, 'package.json'));
|
let packageJSON;
|
||||||
|
try {
|
||||||
|
packageJSON = require(path.join(root, 'package.json'));
|
||||||
|
} catch {
|
||||||
|
}
|
||||||
|
|
||||||
const program = ts.createProgram({
|
const program = ts.createProgram({
|
||||||
options: {
|
options: {
|
||||||
allowJs: true,
|
allowJs: true,
|
||||||
|
|
@ -70,7 +79,7 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) {
|
||||||
const errors = [];
|
const errors = [];
|
||||||
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));
|
||||||
|
|
||||||
if (checkDepsFile && errors.length) {
|
if (errors.length) {
|
||||||
for (const error of errors)
|
for (const error of errors)
|
||||||
console.log(error);
|
console.log(error);
|
||||||
console.log(`--------------------------------------------------------`);
|
console.log(`--------------------------------------------------------`);
|
||||||
|
|
@ -80,7 +89,7 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) {
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (checkPackageJson) {
|
if (packageJSON) {
|
||||||
for (const dep of peerDependencies)
|
for (const dep of peerDependencies)
|
||||||
deps.delete(dep);
|
deps.delete(dep);
|
||||||
for (const dep of deps) {
|
for (const dep of deps) {
|
||||||
|
|
@ -90,13 +99,13 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) {
|
||||||
}
|
}
|
||||||
for (const dep of Object.keys(packageJSON.dependencies || {}))
|
for (const dep of Object.keys(packageJSON.dependencies || {}))
|
||||||
deps.delete(dep);
|
deps.delete(dep);
|
||||||
|
|
||||||
if (deps.size) {
|
if (deps.size) {
|
||||||
console.log('Dependencies are not declared in package.json:');
|
console.log('Dependencies are not declared in package.json:');
|
||||||
for (const dep of deps)
|
for (const dep of deps)
|
||||||
console.log(` ${dep}`);
|
console.log(` ${dep}`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return packageJSON;
|
return packageJSON;
|
||||||
|
|
@ -126,7 +135,7 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) {
|
||||||
importPath = importPath + '.d.ts';
|
importPath = importPath + '.d.ts';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (checkDepsFile && !allowImport(fileName, importPath))
|
if (!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;
|
||||||
}
|
}
|
||||||
|
|
@ -136,7 +145,7 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) {
|
||||||
else
|
else
|
||||||
deps.add(importName.split('/')[0]);
|
deps.add(importName.split('/')[0]);
|
||||||
|
|
||||||
if (checkDepsFile && !allowExternalImport(importName, packageJSON))
|
if (!allowExternalImport(importName, packageJSON))
|
||||||
errors.push(`Disallowed external dependency ${importName} from ${path.relative(root, fileName)}`);
|
errors.push(`Disallowed external dependency ${importName} from ${path.relative(root, fileName)}`);
|
||||||
}
|
}
|
||||||
ts.forEachChild(node, x => visit(x, fileName));
|
ts.forEachChild(node, x => visit(x, fileName));
|
||||||
|
|
@ -201,7 +210,8 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) {
|
||||||
if (error.code !== 'MODULE_NOT_FOUND')
|
if (error.code !== 'MODULE_NOT_FOUND')
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
if (!packageJSON)
|
||||||
|
return false;
|
||||||
const match = importName.match(/(@[\w-]+\/)?([^/]+)/);
|
const match = importName.match(/(@[\w-]+\/)?([^/]+)/);
|
||||||
const dependency = match[1] ? match[1] + '/' + match[2] : match[2];
|
const dependency = match[1] ? match[1] + '/' + match[2] : match[2];
|
||||||
return !!(packageJSON.dependencies || {})[dependency];
|
return !!(packageJSON.dependencies || {})[dependency];
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue