From 96805fe66848a784bab66f24d6f89b6b3d60e50a Mon Sep 17 00:00:00 2001 From: Alexander Marks Date: Wed, 24 Aug 2022 15:03:43 -0700 Subject: [PATCH] chore: Don't publish .ts or testing files Before this change, we publish .ts source files to the same directory as the .js/.d.ts files to npm. That means when a consumer imports a @material/web module with TypeScript, TypeScript prefers the .ts file over the .d.ts file when to load that module's types. That in turn means the consumer's TypeScript type-checks the entire @material/web .ts file, including its private implementation details (private fields, etc.). If the consumer's tsconfig.json is configured more strictly than @material/web's was (e.g. if noUnusedParameters is true), or if some additional ambient types are loaded (e.g. @types/node is installed, which changes the signature of setTimeout), they would get a compile error. This change stops publishing .ts files to npm to solve that problem for consumers. This also includes some related changes: - Sets inlineSources to true. This puts the .ts file contents directly inside the .js.map file, instead of linking to the .ts path. Otherwise sourcemaps would not work. - Sets declarationMap to false. This removes the .d.ts.map files, which are not useful without the .ts paths, because there is no equivalent to inlineSources for declarationMap (see https://github.com/microsoft/TypeScript/issues/38966). - Replaces .npmignore blocklist with package.json files allowlist (which I find to be a bit safer), and adds new omissions for testing files, which don't need to be published. Note that this doesn't solve the problem when using "npm link" for local cross-package development, because in that case the .ts files will still be present. So a better solution to this problem would be to have a separate src/ directory for .ts source files. That will require a Copybara transform to move the files. We can discuss this separately and do it as a followup if agreed. PiperOrigin-RevId: 469833263 --- .npmignore | 2 -- package.json | 10 ++++++++++ tsconfig.json | 3 ++- 3 files changed, 12 insertions(+), 3 deletions(-) delete mode 100644 .npmignore diff --git a/.npmignore b/.npmignore deleted file mode 100644 index 16c5705578..0000000000 --- a/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -css-to-ts.js -tsconfig.json diff --git a/package.json b/package.json index e8e91e9bee..fbff5c2828 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,16 @@ "prebuild:ts": "find . -name '*.css' -type f | xargs node css-to-ts.js", "build:ts": "tsc" }, + "files": [ + "**/*.js", + "**/*.js.map", + "**/*.d.ts", + "**/*.scss", + "!css-to-ts.js", + "!**/test/**", + "!**/testing/**", + "!**/*_test.*" + ], "dependencies": { "lit": "^2.3.0", "tslib": "^2.4.0" diff --git a/tsconfig.json b/tsconfig.json index 346cc84a7e..99fcf43e14 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,7 @@ "allowUnreachableCode": false, "baseUrl": ".", "declaration": true, - "declarationMap": true, + "declarationMap": false, "downlevelIteration": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, @@ -22,6 +22,7 @@ }, "skipLibCheck": true, "sourceMap": true, + "inlineSources": true, "strict": true, "strictNullChecks": false, "target": "es2020"