From 6e1e00388b9ff6fd806414d8ea6c22d50cd9c17a Mon Sep 17 00:00:00 2001 From: Bogdan Savluk Date: Mon, 15 Mar 2021 17:13:36 +0100 Subject: [PATCH] update tsconfig generation to reference dependencies used in source code (#12941) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update tsconfig generation to reference dependencies used in source code in some cases there are devDependecnies used for type-checking, this change adds references to them when generationg tsconfig * use regexp to extract import sources instead of parsing the code * try reverting globby to previously installed version * Run `generate-tsconfig` after `bootstrap-only` * Revert "try reverting globby to previously installed version" This reverts commit 56489622137f6f56938c781ea3aec5c98528b033. Co-authored-by: Nicolò Ribaudo --- Makefile | 4 ++-- package.json | 1 + scripts/generators/tsconfig.js | 31 ++++++++++++++++++++++++++++--- yarn.lock | 9 +++++---- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 1f1528bc1572..4ee1816e393f 100644 --- a/Makefile +++ b/Makefile @@ -243,8 +243,8 @@ endif bootstrap-only: clean-all yarn install -bootstrap: bootstrap-only generate-tsconfig - $(MAKE) build +bootstrap: bootstrap-only + $(MAKE) generate-tsconfig build clean-lib: $(foreach source, $(SOURCES), \ diff --git a/package.json b/package.json index 659e1cd45ccd..5739bd86af84 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "eslint-plugin-prettier": "^3.1.2", "fancy-log": "^1.3.3", "flow-bin": "^0.123.0", + "globby": "^11.0.2", "gulp": "^4.0.2", "gulp-babel": "^8.0.0", "gulp-filter": "^5.1.0", diff --git a/scripts/generators/tsconfig.js b/scripts/generators/tsconfig.js index eee32f516d98..7b4b4846e4d0 100644 --- a/scripts/generators/tsconfig.js +++ b/scripts/generators/tsconfig.js @@ -2,6 +2,7 @@ import path from "path"; import fs from "fs"; import { createRequire } from "module"; import { fileURLToPath } from "url"; +import globby from "globby"; const require = createRequire(import.meta.url); @@ -34,6 +35,27 @@ const tsPkgs = [ ...getTsPkgs("codemods"), ]; +function sourceDeps(packageDir) { + const files = globby.sync(`src/**/*.ts`, { + cwd: packageDir, + onlyFiles: true, + dot: true, + ignore: ["**/node_modules/**"], + }); + const result = new Set(); + for (const file of files) { + const filename = path.join(packageDir, file); + const source = fs.readFileSync(filename, { encoding: "utf8" }); + + for (const [importSource] of source.matchAll( + /(?<=from\s*")@babel\/[^"/]+/g + )) { + result.add(importSource); + } + } + return result; +} + for (const { dir } of tsPkgs) { const pkg = require(`${dir}/package.json`); @@ -43,9 +65,12 @@ for (const { dir } of tsPkgs) { if (!tsconfig.generated) continue; } catch {} - const deps = []; - if (pkg.dependencies) deps.push(...Object.keys(pkg.dependencies)); - if (pkg.peerDependencies) deps.push(...Object.keys(pkg.peerDependencies)); + const deps = new Set([ + ...(pkg.dependencies ? Object.keys(pkg.dependencies) : []), + ...(pkg.peerDependencies ? Object.keys(pkg.peerDependencies) : []), + // todo(flow->ts): update dependencies in package.json if dependency declared incorrectly + ...sourceDeps(dir), + ]); const references = []; for (const dep of deps) { diff --git a/yarn.lock b/yarn.lock index e0f7348f669d..236bcc31cc70 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5499,6 +5499,7 @@ __metadata: eslint-plugin-prettier: ^3.1.2 fancy-log: ^1.3.3 flow-bin: ^0.123.0 + globby: ^11.0.2 gulp: ^4.0.2 gulp-babel: ^8.0.0 gulp-filter: ^5.1.0 @@ -8661,9 +8662,9 @@ fsevents@^1.2.7: languageName: node linkType: hard -"globby@npm:^11.0.1": - version: 11.0.1 - resolution: "globby@npm:11.0.1" +"globby@npm:^11.0.1, globby@npm:^11.0.2": + version: 11.0.2 + resolution: "globby@npm:11.0.2" dependencies: array-union: ^2.1.0 dir-glob: ^3.0.1 @@ -8671,7 +8672,7 @@ fsevents@^1.2.7: ignore: ^5.1.4 merge2: ^1.3.0 slash: ^3.0.0 - checksum: e7239e9e468c3692aec31dc97b5efc13dd21edf38820baeda98118ade39f475c4ff9e7610859eb4a3c75277ca2616e371265fec3c626aba5db4335bc41c59ac7 + checksum: d23f2a6b8897b97fb27422cde243e0fd406ebbaa821929293b27c977d169884f8112494cda4f456a51d0ec1e133e3ac703ec24bfed484e327305ea34a665eb06 languageName: node linkType: hard