diff --git a/package-lock.json b/package-lock.json index 3b55e120bc..19cac402f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,9 +35,7 @@ "@vitejs/plugin-basic-ssl": "^1.0.1", "@vitejs/plugin-react": "^3.0.0", "@zip.js/zip.js": "^2.4.2", - "ansi-to-html": "^0.7.2", "chokidar": "^3.5.3", - "codemirror": "^5.65.9", "colors": "^1.4.0", "commonmark": "^0.30.0", "concurrently": "^6.2.1", @@ -2306,8 +2304,7 @@ "node_modules/codemirror": { "version": "5.65.9", "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.9.tgz", - "integrity": "sha512-19Jox5sAKpusTDgqgKB5dawPpQcY+ipQK7xoEI+MVucEF9qqFaXpeqY1KaoyGBso/wHQoDa4HMMxMjdsS3Zzzw==", - "dev": true + "integrity": "sha512-19Jox5sAKpusTDgqgKB5dawPpQcY+ipQK7xoEI+MVucEF9qqFaXpeqY1KaoyGBso/wHQoDa4HMMxMjdsS3Zzzw==" }, "node_modules/color-convert": { "version": "1.9.3", @@ -5743,6 +5740,10 @@ "source-map": "^0.6.1" } }, + "node_modules/web": { + "resolved": "packages/web", + "link": true + }, "node_modules/which": { "version": "2.0.2", "dev": true, @@ -6193,6 +6194,12 @@ "dependencies": { "ansi-to-html": "^0.7.2" } + }, + "packages/web": { + "version": "0.0.0", + "dependencies": { + "codemirror": "^5.65.9" + } } }, "dependencies": { @@ -7694,8 +7701,7 @@ "codemirror": { "version": "5.65.9", "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.9.tgz", - "integrity": "sha512-19Jox5sAKpusTDgqgKB5dawPpQcY+ipQK7xoEI+MVucEF9qqFaXpeqY1KaoyGBso/wHQoDa4HMMxMjdsS3Zzzw==", - "dev": true + "integrity": "sha512-19Jox5sAKpusTDgqgKB5dawPpQcY+ipQK7xoEI+MVucEF9qqFaXpeqY1KaoyGBso/wHQoDa4HMMxMjdsS3Zzzw==" }, "color-convert": { "version": "1.9.3", @@ -8675,7 +8681,7 @@ "html-reporter": { "version": "file:packages/html-reporter", "requires": { - "ansi-to-html": "*" + "ansi-to-html": "^0.7.2" } }, "http-cache-semantics": { @@ -9862,6 +9868,12 @@ } } }, + "web": { + "version": "file:packages/web", + "requires": { + "codemirror": "^5.65.9" + } + }, "which": { "version": "2.0.2", "dev": true, diff --git a/package.json b/package.json index 7db646c4e5..ede9b12703 100644 --- a/package.json +++ b/package.json @@ -70,9 +70,7 @@ "@vitejs/plugin-basic-ssl": "^1.0.1", "@vitejs/plugin-react": "^3.0.0", "@zip.js/zip.js": "^2.4.2", - "ansi-to-html": "^0.7.2", "chokidar": "^3.5.3", - "codemirror": "^5.65.9", "colors": "^1.4.0", "commonmark": "^0.30.0", "concurrently": "^6.2.1", diff --git a/packages/html-reporter/src/DEPS.list b/packages/html-reporter/src/DEPS.list new file mode 100644 index 0000000000..5308eedfc2 --- /dev/null +++ b/packages/html-reporter/src/DEPS.list @@ -0,0 +1,3 @@ +[*] +@playwright/experimental-ct-react +@web/** diff --git a/packages/protocol/src/DEPS.list b/packages/protocol/src/DEPS.list new file mode 100644 index 0000000000..e43dcb5d9f --- /dev/null +++ b/packages/protocol/src/DEPS.list @@ -0,0 +1 @@ +[*] diff --git a/packages/trace/src/DEPS.list b/packages/trace/src/DEPS.list new file mode 100644 index 0000000000..e43dcb5d9f --- /dev/null +++ b/packages/trace/src/DEPS.list @@ -0,0 +1 @@ +[*] diff --git a/packages/web/package.json b/packages/web/package.json new file mode 100644 index 0000000000..25449b39fe --- /dev/null +++ b/packages/web/package.json @@ -0,0 +1,10 @@ +{ + "name": "web", + "private": true, + "version": "0.0.0", + "scripts": { + }, + "dependencies": { + "codemirror": "^5.65.9" + } +} diff --git a/packages/web/src/DEPS.list b/packages/web/src/DEPS.list new file mode 100644 index 0000000000..78980e8898 --- /dev/null +++ b/packages/web/src/DEPS.list @@ -0,0 +1,3 @@ +[*] +@playwright/experimental-ct-react +third_party/** diff --git a/utils/check_deps.js b/utils/check_deps.js index 3aec6ef620..cd2bc3b64b 100644 --- a/utils/check_deps.js +++ b/utils/check_deps.js @@ -35,11 +35,15 @@ const peerDependencies = ['electron', 'react', 'react-dom', '@zip.js/zip.js']; const depsCache = {}; async function checkDeps() { - await innerCheckDeps(path.join(packagesDir, 'recorder'), true, true); - await innerCheckDeps(path.join(packagesDir, 'trace-viewer'), true, true); + await innerCheckDeps(path.join(packagesDir, 'protocol')); + 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 testPackageJson = await innerCheckDeps(path.join(packagesDir, 'playwright-test'), true, true); + const corePackageJson = await innerCheckDeps(path.join(packagesDir, 'playwright-core')); + const testPackageJson = await innerCheckDeps(path.join(packagesDir, 'playwright-test')); let hasVersionMismatch = false; for (const [key, value] of Object.entries(corePackageJson.dependencies || {})) { @@ -52,12 +56,17 @@ async function checkDeps() { process.exit(hasVersionMismatch ? 1 : 0); } -async function innerCheckDeps(root, checkDepsFile, checkPackageJson) { - console.log('Testing', path.relative(packagesDir, root)); +async function innerCheckDeps(root) { + console.log('Checking DEPS for ' + path.relative(packagesDir, root)); const deps = new Set(); 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({ options: { allowJs: true, @@ -70,7 +79,7 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) { const errors = []; 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) console.log(error); console.log(`--------------------------------------------------------`); @@ -80,7 +89,7 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) { process.exit(1); } - if (checkPackageJson) { + if (packageJSON) { for (const dep of peerDependencies) deps.delete(dep); for (const dep of deps) { @@ -90,13 +99,13 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) { } for (const dep of Object.keys(packageJSON.dependencies || {})) deps.delete(dep); - + if (deps.size) { console.log('Dependencies are not declared in package.json:'); for (const dep of deps) console.log(` ${dep}`); process.exit(1); - } + } } return packageJSON; @@ -126,7 +135,7 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) { 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)}`); return; } @@ -136,7 +145,7 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) { else 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)}`); } ts.forEachChild(node, x => visit(x, fileName)); @@ -201,7 +210,8 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) { if (error.code !== 'MODULE_NOT_FOUND') throw error; } - + if (!packageJSON) + return false; const match = importName.match(/(@[\w-]+\/)?([^/]+)/); const dependency = match[1] ? match[1] + '/' + match[2] : match[2]; return !!(packageJSON.dependencies || {})[dependency];