Make module types explicit and convert some to ESM (#15964)

This commit is contained in:
Steve Repsher 2023-03-30 05:23:43 -04:00 committed by GitHub
parent fcc95825e3
commit 1f1898fa46
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
53 changed files with 188 additions and 188 deletions

View File

@ -20,7 +20,7 @@
"settings": {
"import/resolver": {
"webpack": {
"config": "./webpack.config.js"
"config": "./webpack.config.cjs"
}
}
},

View File

@ -43,7 +43,7 @@ jobs:
LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }}
- name: Bump version
run: script/version_bump.js nightly
run: script/version_bump.cjs nightly
- name: Build nightly Python wheels
run: |

View File

@ -1,6 +1,6 @@
const path = require("path");
const env = require("./env.js");
const paths = require("./paths.js");
const env = require("./env.cjs");
const paths = require("./paths.cjs");
// GitHub base URL to use for production source maps
// Nightly builds use the commit SHA, otherwise assumes there is a tag that matches the version
@ -99,7 +99,7 @@ module.exports.babelOptions = ({ latestBuild, isProdBuild, isTestBuild }) => ({
[
path.resolve(
paths.polymer_dir,
"build-scripts/babel-plugins/inline-constants-plugin.js"
"build-scripts/babel-plugins/inline-constants-plugin.cjs"
),
{
modules: ["@mdi/js"],

View File

@ -1,6 +1,6 @@
const fs = require("fs");
const path = require("path");
const paths = require("./paths.js");
const paths = require("./paths.cjs");
module.exports = {
useRollup() {

View File

@ -1,18 +1,18 @@
// Run HA develop mode
const gulp = require("gulp");
const env = require("../env");
require("./clean.js");
require("./translations.js");
require("./locale-data.js");
require("./gen-icons-json.js");
require("./gather-static.js");
require("./compress.js");
require("./webpack.js");
require("./service-worker.js");
require("./entry-html.js");
require("./rollup.js");
require("./wds.js");
const env = require("../env.cjs");
require("./clean.cjs");
require("./translations.cjs");
require("./locale-data.cjs");
require("./gen-icons-json.cjs");
require("./gather-static.cjs");
require("./compress.cjs");
require("./webpack.cjs");
require("./service-worker.cjs");
require("./entry-html.cjs");
require("./rollup.cjs");
require("./wds.cjs");
gulp.task(
"develop-app",

View File

@ -1,14 +1,13 @@
const gulp = require("gulp");
const env = require("../env.cjs");
const env = require("../env");
require("./clean.js");
require("./translations.js");
require("./gather-static.js");
require("./webpack.js");
require("./service-worker.js");
require("./entry-html.js");
require("./rollup.js");
require("./clean.cjs");
require("./translations.cjs");
require("./gather-static.cjs");
require("./webpack.cjs");
require("./service-worker.cjs");
require("./entry-html.cjs");
require("./rollup.cjs");
gulp.task(
"develop-cast",

View File

@ -1,7 +1,7 @@
const del = import("del");
const gulp = require("gulp");
const paths = require("../paths");
require("./translations");
const paths = require("../paths.cjs");
require("./translations.cjs");
gulp.task(
"clean",

View File

@ -4,7 +4,7 @@ const gulp = require("gulp");
const zopfli = require("gulp-zopfli-green");
const merge = require("merge-stream");
const path = require("path");
const paths = require("../paths");
const paths = require("../paths.cjs");
const zopfliOptions = { threshold: 150 };

View File

@ -1,16 +1,15 @@
// Run demo develop mode
const gulp = require("gulp");
const env = require("../env.cjs");
const env = require("../env");
require("./clean.js");
require("./translations.js");
require("./gen-icons-json.js");
require("./gather-static.js");
require("./webpack.js");
require("./service-worker.js");
require("./entry-html.js");
require("./rollup.js");
require("./clean.cjs");
require("./translations.cjs");
require("./gen-icons-json.cjs");
require("./gather-static.cjs");
require("./webpack.cjs");
require("./service-worker.cjs");
require("./entry-html.cjs");
require("./rollup.cjs");
gulp.task(
"develop-demo",

View File

@ -4,9 +4,9 @@ const fs = require("fs-extra");
const path = require("path");
const template = require("lodash.template");
const { minify } = require("html-minifier-terser");
const paths = require("../paths.js");
const env = require("../env.js");
const { htmlMinifierOptions, terserOptions } = require("../bundle.js");
const paths = require("../paths.cjs");
const env = require("../env.cjs");
const { htmlMinifierOptions, terserOptions } = require("../bundle.cjs");
const templatePath = (tpl) =>
path.resolve(paths.polymer_dir, "src/html/", `${tpl}.html.template`);

View File

@ -6,17 +6,17 @@ const { marked } = require("marked");
const glob = require("glob");
const yaml = require("js-yaml");
const env = require("../env");
const paths = require("../paths");
const env = require("../env.cjs");
const paths = require("../paths.cjs");
require("./clean.js");
require("./translations.js");
require("./gen-icons-json.js");
require("./gather-static.js");
require("./webpack.js");
require("./service-worker.js");
require("./entry-html.js");
require("./rollup.js");
require("./clean.cjs");
require("./translations.cjs");
require("./gen-icons-json.cjs");
require("./gather-static.cjs");
require("./webpack.cjs");
require("./service-worker.cjs");
require("./entry-html.cjs");
require("./rollup.cjs");
gulp.task("gather-gallery-pages", async function gatherPages() {
const pageDir = path.resolve(paths.gallery_dir, "src/pages");
@ -89,9 +89,7 @@ gulp.task("gather-gallery-pages", async function gatherPages() {
// Generate sidebar
const sidebarPath = path.resolve(paths.gallery_dir, "sidebar.js");
// To make watch work during development
delete require.cache[sidebarPath];
const sidebar = require(sidebarPath);
const sidebar = (await import(sidebarPath)).default;
const pagesToProcess = {};
for (const key of processed) {

View File

@ -3,7 +3,7 @@
const gulp = require("gulp");
const path = require("path");
const fs = require("fs-extra");
const paths = require("../paths");
const paths = require("../paths.cjs");
const npmPath = (...parts) =>
path.resolve(paths.polymer_dir, "node_modules", ...parts);

View File

@ -134,11 +134,11 @@ gulp.task("gen-icons-json", (done) => {
});
const file = fs.readFileSync(PACKAGE_PATH, { encoding });
const package = JSON.parse(file);
const packageMeta = JSON.parse(file);
fs.writeFileSync(
path.resolve(OUTPUT_DIR, "iconMetadata.json"),
JSON.stringify({ version: package.version, parts })
JSON.stringify({ version: packageMeta.version, parts })
);
fs.writeFileSync(

View File

@ -1,13 +1,13 @@
const gulp = require("gulp");
const env = require("../env");
require("./clean.js");
require("./gen-icons-json.js");
require("./webpack.js");
require("./compress.js");
require("./rollup.js");
require("./gather-static.js");
require("./translations.js");
require("./gen-icons-json.js");
const env = require("../env.cjs");
require("./clean.cjs");
require("./compress.cjs");
require("./entry-html.cjs");
require("./gather-static.cjs");
require("./gen-icons-json.cjs");
require("./rollup.cjs");
require("./translations.cjs");
require("./webpack.cjs");
gulp.task(
"develop-hassio",

View File

@ -2,7 +2,7 @@ const del = import("del");
const path = require("path");
const gulp = require("gulp");
const fs = require("fs");
const paths = require("../paths");
const paths = require("../paths.cjs");
const outDir = "build/locale-data";

View File

@ -6,8 +6,8 @@ const handler = require("serve-handler");
const http = require("http");
const log = require("fancy-log");
const open = require("open");
const rollupConfig = require("../rollup");
const paths = require("../paths");
const rollupConfig = require("../rollup.cjs");
const paths = require("../paths.cjs");
const bothBuilds = (createConfigFunc, params) =>
gulp.series(
@ -46,7 +46,7 @@ function createServer(serveOptions) {
);
}
function watchRollup(createConfig, extraWatchSrc = [], serveOptions) {
function watchRollup(createConfig, extraWatchSrc = [], serveOptions = null) {
const { inputOptions, outputOptions } = createConfig({
isProdBuild: false,
latestBuild: true,

View File

@ -5,7 +5,7 @@ const path = require("path");
const fs = require("fs-extra");
const workboxBuild = require("workbox-build");
const sourceMapUrl = require("source-map-url");
const paths = require("../paths.js");
const paths = require("../paths.cjs");
const swDest = path.resolve(paths.app_output_root, "service_worker.js");

View File

@ -9,11 +9,11 @@ const flatmap = require("gulp-flatmap");
const merge = require("gulp-merge-json");
const rename = require("gulp-rename");
const transform = require("gulp-json-transform");
const { mapFiles } = require("../util");
const env = require("../env");
const paths = require("../paths");
const { mapFiles } = require("../util.cjs");
const env = require("../env.cjs");
const paths = require("../paths.cjs");
require("./fetch-nightly-translations");
require("./fetch-nightly-translations.cjs");
const inFrontendDir = "translations/frontend";
const inBackendDir = "translations/backend";

View File

@ -5,15 +5,15 @@ const webpack = require("webpack");
const WebpackDevServer = require("webpack-dev-server");
const log = require("fancy-log");
const path = require("path");
const env = require("../env");
const paths = require("../paths");
const env = require("../env.cjs");
const paths = require("../paths.cjs");
const {
createAppConfig,
createDemoConfig,
createCastConfig,
createHassioConfig,
createGalleryConfig,
} = require("../webpack");
} = require("../webpack.cjs");
const bothBuilds = (createConfigFunc, params) => [
createConfigFunc({ ...params, latestBuild: true }),

View File

@ -103,7 +103,7 @@ module.exports = function (opts = {}) {
}
delete optionsObject.type;
if (!new RegExp("^.*/").test(workerFile)) {
if (!/^.*\//.test(workerFile)) {
this.warn(
`Paths passed to the Worker constructor must be relative or absolute, i.e. start with /, ./ or ../ (just like dynamic import!). Ignoring "${workerFile}".`
);

View File

@ -3,18 +3,18 @@ const path = require("path");
const commonjs = require("@rollup/plugin-commonjs");
const resolve = require("@rollup/plugin-node-resolve");
const json = require("@rollup/plugin-json");
const babel = require("@rollup/plugin-babel").babel;
const { babel } = require("@rollup/plugin-babel");
const replace = require("@rollup/plugin-replace");
const visualizer = require("rollup-plugin-visualizer");
const { string } = require("rollup-plugin-string");
const { terser } = require("rollup-plugin-terser");
const manifest = require("./rollup-plugins/manifest-plugin");
const worker = require("./rollup-plugins/worker-plugin");
const dontHashPlugin = require("./rollup-plugins/dont-hash-plugin");
const ignore = require("./rollup-plugins/ignore-plugin");
const manifest = require("./rollup-plugins/manifest-plugin.cjs");
const worker = require("./rollup-plugins/worker-plugin.cjs");
const dontHashPlugin = require("./rollup-plugins/dont-hash-plugin.cjs");
const ignore = require("./rollup-plugins/ignore-plugin.cjs");
const bundle = require("./bundle");
const paths = require("./paths");
const bundle = require("./bundle.cjs");
const paths = require("./paths.cjs");
const extensions = [".js", ".ts"];

View File

@ -4,8 +4,8 @@ const TerserPlugin = require("terser-webpack-plugin");
const { WebpackManifestPlugin } = require("webpack-manifest-plugin");
const log = require("fancy-log");
const WebpackBar = require("webpackbar");
const paths = require("./paths.js");
const bundle = require("./bundle.js");
const paths = require("./paths.cjs");
const bundle = require("./bundle.cjs");
class LogStartCompilePlugin {
ignoredFirst = false;
@ -64,6 +64,9 @@ const createWebpackConfig = ({
cacheCompression: false,
},
},
resolve: {
fullySpecified: false,
},
},
{
test: /\.css$/,

View File

@ -1,5 +1,5 @@
const rollup = require("../build-scripts/rollup.js");
const env = require("../build-scripts/env.js");
import rollup from "../build-scripts/rollup.cjs";
import env from "../build-scripts/env.cjs";
const config = rollup.createCastConfig({
isProdBuild: env.isProdBuild(),
@ -7,4 +7,4 @@ const config = rollup.createCastConfig({
isStatsBuild: env.isStatsBuild(),
});
module.exports = { ...config.inputOptions, output: config.outputOptions };
export default { ...config.inputOptions, output: config.outputOptions };

View File

@ -1,8 +1,8 @@
const { createCastConfig } = require("../build-scripts/webpack.js");
const { isProdBuild, isStatsBuild } = require("../build-scripts/env.js");
import webpack from "../build-scripts/webpack.cjs";
import env from "../build-scripts/env.cjs";
module.exports = createCastConfig({
isProdBuild: isProdBuild(),
isStatsBuild: isStatsBuild(),
export default webpack.createCastConfig({
isProdBuild: env.isProdBuild(),
isStatsBuild: env.isStatsBuild(),
latestBuild: true,
});

View File

@ -1,5 +1,5 @@
const rollup = require("../build-scripts/rollup.js");
const env = require("../build-scripts/env.js");
import rollup from "../build-scripts/rollup.cjs";
import env from "../build-scripts/env.cjs";
const config = rollup.createDemoConfig({
isProdBuild: env.isProdBuild(),
@ -7,4 +7,4 @@ const config = rollup.createDemoConfig({
isStatsBuild: env.isStatsBuild(),
});
module.exports = { ...config.inputOptions, output: config.outputOptions };
export default { ...config.inputOptions, output: config.outputOptions };

View File

@ -1,12 +1,11 @@
const { createDemoConfig } = require("../build-scripts/webpack.js");
const { isProdBuild, isStatsBuild } = require("../build-scripts/env.js");
import webpack from "../build-scripts/webpack.cjs";
import env from "../build-scripts/env.cjs";
// File just used for stats builds
const latestBuild = true;
module.exports = createDemoConfig({
isProdBuild: isProdBuild(),
isStatsBuild: isStatsBuild(),
export default webpack.createDemoConfig({
isProdBuild: env.isProdBuild(),
isStatsBuild: env.isStatsBuild(),
latestBuild,
});

View File

@ -1,5 +1,5 @@
const rollup = require("../build-scripts/rollup.js");
const env = require("../build-scripts/env.js");
import rollup from "../build-scripts/rollup.cjs";
import env from "../build-scripts/env.cjs";
const config = rollup.createGalleryConfig({
isProdBuild: env.isProdBuild(),
@ -7,4 +7,4 @@ const config = rollup.createGalleryConfig({
isStatsBuild: env.isStatsBuild(),
});
module.exports = { ...config.inputOptions, output: config.outputOptions };
export default { ...config.inputOptions, output: config.outputOptions };

View File

@ -1,4 +1,4 @@
module.exports = [
export default [
{
// This section has no header and so all page links are shown directly in the sidebar
category: "concepts",

View File

@ -1,8 +1,8 @@
const { createGalleryConfig } = require("../build-scripts/webpack.js");
const { isProdBuild, isStatsBuild } = require("../build-scripts/env.js");
import webpack from "../build-scripts/webpack.cjs";
import env from "../build-scripts/env.cjs";
module.exports = createGalleryConfig({
isProdBuild: isProdBuild(),
isStatsBuild: isStatsBuild(),
export default webpack.createGalleryConfig({
isProdBuild: env.isProdBuild(),
isStatsBuild: env.isStatsBuild(),
latestBuild: true,
});

View File

@ -1,3 +1,13 @@
var requireDir = require("require-dir");
import { globIterate } from "glob";
requireDir("./build-scripts/gulp/");
const gulpImports = [];
for await (const gulpModule of globIterate("build-scripts/gulp/*.?(c|m)js", {
dotRelative: true,
})) {
gulpImports.push(import(gulpModule));
}
// Since all tasks are currently registered with gulp.task(), this is enough
// If any are converted to named exports, need to loop and aggregate exports here
await Promise.all(gulpImports);

View File

@ -1,5 +1,5 @@
const rollup = require("../build-scripts/rollup.js");
const env = require("../build-scripts/env.js");
import rollup from "../build-scripts/rollup.cjs";
import env from "../build-scripts/env.cjs";
const config = rollup.createHassioConfig({
isProdBuild: env.isProdBuild(),
@ -7,4 +7,4 @@ const config = rollup.createHassioConfig({
isStatsBuild: env.isStatsBuild(),
});
module.exports = { ...config.inputOptions, output: config.outputOptions };
export default { ...config.inputOptions, output: config.outputOptions };

View File

@ -1,8 +1,8 @@
const { createHassioConfig } = require("../build-scripts/webpack.js");
const { isProdBuild, isStatsBuild } = require("../build-scripts/env.js");
import webpack from "../build-scripts/webpack.cjs";
import env from "../build-scripts/env.cjs";
module.exports = createHassioConfig({
isProdBuild: isProdBuild(),
isStatsBuild: isStatsBuild(),
export default webpack.createHassioConfig({
isProdBuild: env.isProdBuild(),
isStatsBuild: env.isStatsBuild(),
latestBuild: true,
});

View File

@ -1,5 +1,5 @@
module.exports = {
"*.{js,ts}": ["prettier --write", "eslint --fix"],
export default {
"*.?(c|m){js,ts}": ["eslint --fix", "prettier --write"],
"!(/translations)*.{json,css,md,html}": "prettier --write",
"translations/*/*.json": (files) =>
'printf "%s\n" "Translation files should not be added or modified here. Instead, make the necessary modifications in src/translations/en.json. Other languages are managed externally. Please see https://developers.home-assistant.io/docs/translations/ for details." ' +

View File

@ -19,10 +19,11 @@
"postinstall": "husky install",
"prepack": "pinst --disable",
"postpack": "pinst --enable",
"test": "instant-mocha --webpack-config ./test/webpack.config.js --require ./test/setup.js \"test/**/*.ts\""
"test": "instant-mocha --webpack-config ./test/webpack.config.js --require ./test/setup.cjs \"test/**/*.ts\""
},
"author": "Paulus Schoutsen <Paulus@PaulusSchoutsen.nl> (http://paulusschoutsen.nl)",
"license": "Apache-2.0",
"type": "module",
"dependencies": {
"@braintree/sanitize-url": "6.0.2",
"@codemirror/autocomplete": "6.4.2",
@ -227,7 +228,6 @@
"open": "8.4.2",
"pinst": "3.0.0",
"prettier": "2.8.7",
"require-dir": "1.2.0",
"rollup": "2.79.1",
"rollup-plugin-string": "3.0.0",
"rollup-plugin-terser": "7.0.2",
@ -254,7 +254,6 @@
"@polymer/polymer": "patch:@polymer/polymer@3.5.1#./.yarn/patches/@polymer/polymer/pr-5569.patch",
"@material/mwc-button@^0.25.3": "^0.27.0"
},
"main": "src/home-assistant.js",
"prettier": {
"trailingComma": "es5",
"arrowParens": "always"

View File

@ -1,5 +1,5 @@
const rollup = require("./build-scripts/rollup.js");
const env = require("./build-scripts/env.js");
import rollup from "../build-scripts/rollup.cjs";
import env from "../build-scripts/env.cjs";
const config = rollup.createAppConfig({
isProdBuild: env.isProdBuild(),
@ -7,4 +7,4 @@ const config = rollup.createAppConfig({
isStatsBuild: env.isStatsBuild(),
});
module.exports = { ...config.inputOptions, output: config.outputOptions };
export default { ...config.inputOptions, output: config.outputOptions };

View File

@ -1,7 +1,8 @@
const { createAppConfig } = require("../build-scripts/webpack.js");
import webpack from "../build-scripts/webpack.cjs";
module.exports = createAppConfig({
export default webpack.createAppConfig({
isProdBuild: false,
latestBuild: true,
isStatsBuild: false,
isTestBuild: true,
});

View File

@ -1,20 +1,26 @@
{
"compilerOptions": {
"target": "es2017",
"module": "esnext",
// Language Options
"target": "ES2017",
"lib": ["ES2017", "DOM", "DOM.Iterable", "WebWorker"],
"experimentalDecorators": true,
// Modules
"module": "ESNext",
"moduleResolution": "node",
"lib": ["es2017", "dom", "dom.iterable", "WebWorker"],
"resolveJsonModule": true,
// Babel handles transpiling and no need for declaration files
"noEmit": true,
// Type checking options
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"strict": true,
"noImplicitAny": false,
// Do not check type declaration files
"skipLibCheck": true,
"resolveJsonModule": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
// Interop with CommonJS and other tools
"esModuleInterop": true,
"plugins": [
{
"name": "ts-lit-plugin",

View File

@ -1,7 +1,6 @@
const cors = require("@koa/cors");
const { rollupAdapter } = require("@web/dev-server-rollup");
const rollup = require("./build-scripts/rollup");
import cors from "@koa/cors";
import { rollupAdapter } from "@web/dev-server-rollup";
import rollup from "./build-scripts/rollup.cjs";
const rollupWDSPlugins = rollup
.createAppConfig({
@ -13,7 +12,7 @@ const rollupWDSPlugins = rollup
);
/** @type import("@web/dev-server/src/config/DevServerConfig.ts") */
module.exports = {
export default {
mimeTypes: {
"**/*.ts": "js",
"**/*.json": "js",

28
webpack.config.cjs Normal file
View File

@ -0,0 +1,28 @@
/* eslint-disable @typescript-eslint/no-var-requires */
// Needs to remain CommonJS until eslint-import-resolver-webpack supports ES modules
const webpack = require("./build-scripts/webpack.cjs");
const env = require("./build-scripts/env.cjs");
// This file exists because we haven't migrated the stats script yet
const configs = [
webpack.createAppConfig({
isProdBuild: env.isProdBuild(),
isStatsBuild: env.isStatsBuild(),
isTestBuild: env.isTestBuild(),
latestBuild: true,
}),
];
if (env.isProdBuild() && !env.isStatsBuild()) {
configs.push(
webpack.createAppConfig({
isProdBuild: env.isProdBuild(),
isStatsBuild: env.isStatsBuild(),
isTestBuild: env.isTestBuild(),
latestBuild: false,
})
);
}
module.exports = configs;

View File

@ -1,33 +0,0 @@
/* eslint-disable import/extensions */
/* eslint-disable @typescript-eslint/no-var-requires */
const { createAppConfig } = require("./build-scripts/webpack.js");
const {
isProdBuild,
isStatsBuild,
isTestBuild,
} = require("./build-scripts/env.js");
// This file exists because we haven't migrated the stats script yet
const configs = [
createAppConfig({
isProdBuild: isProdBuild(),
isStatsBuild: isStatsBuild(),
isTestBuild: isTestBuild(),
latestBuild: true,
}),
];
// const configs = [createConfig(isProdBuild, /* latestBuild */ true)];
if (isProdBuild && !isStatsBuild) {
configs.push(
createAppConfig({
isProdBuild: isProdBuild(),
isStatsBuild: isStatsBuild(),
isTestBuild: isTestBuild(),
latestBuild: false,
})
);
}
module.exports = configs;

View File

@ -9571,7 +9571,6 @@ __metadata:
qr-scanner: 1.4.2
qrcode: 1.5.1
regenerator-runtime: 0.13.11
require-dir: 1.2.0
resize-observer-polyfill: 1.5.1
roboto-fontface: 0.10.0
rollup: 2.79.1
@ -13443,13 +13442,6 @@ __metadata:
languageName: node
linkType: hard
"require-dir@npm:1.2.0":
version: 1.2.0
resolution: "require-dir@npm:1.2.0"
checksum: 8bbc4757d7e3fae0799e24cb363f165a89e0cc83172de9d5fd95f8e75cf2368764199e5fd557434d6318ab1f271415cc9d3ef190076393e6e993a7b1add8ef27
languageName: node
linkType: hard
"require-directory@npm:^2.1.1":
version: 2.1.1
resolution: "require-directory@npm:2.1.1"