/* eslint-env node */ import { esbuildPlugin } from "@web/dev-server-esbuild"; import { importMapsPlugin } from "@web/dev-server-import-maps"; import { typescriptPaths as typescriptPathsPlugin } from "rollup-plugin-typescript-paths"; import commonjsPlugin from "@rollup/plugin-commonjs"; import { fromRollup } from "@web/dev-server-rollup"; import { fileURLToPath } from "url"; import glob from "glob"; const commonjs = fromRollup(commonjsPlugin); const typescriptPaths = fromRollup(typescriptPathsPlugin); // Map all css imports to mock file const cssImports = {}; glob.sync("./src/**/*.css").forEach((filepath) => { cssImports[filepath] = fileURLToPath( new URL("./src/__mocks__/css.js", import.meta.url), ); }); export default { nodeResolve: true, rootDir: process.cwd(), plugins: [ typescriptPaths({ preserveExtensions: true, absolute: false, nonRelative: true, // needed for non-ts files transform(path) { return `/${path}`; }, }), esbuildPlugin({ ts: true, tsconfig: fileURLToPath(new URL("./tsconfig.json", import.meta.url)), target: "esnext", }), commonjs({ include: [ // web-test-runner expects es modules, // include umd/commonjs modules here: "node_modules/url-pattern/**/*", ], }), importMapsPlugin({ inject: { importMap: { imports: { ...cssImports, "./src/shoelace": fileURLToPath( new URL("./src/__mocks__/shoelace.js", import.meta.url), ), "tailwindcss/tailwind.css": fileURLToPath( new URL("./src/__mocks__/css.js", import.meta.url), ), "@shoelace-style/shoelace/dist/themes/light.css": fileURLToPath( new URL("./src/__mocks__/css.js", import.meta.url), ), // FIXME: `@web/dev-server-esbuild` or its dependencies seem to be ignoring .js // extension and shoelace exports and switching it to .ts // Needs a better solution than import mapping individual files. // Maybe related: // - https://github.com/modernweb-dev/web/issues/1929 // - https://github.com/modernweb-dev/web/issues/224 "@shoelace-style/shoelace/dist/utilities/form.js": fileURLToPath( new URL( "./node_modules/@shoelace-style/shoelace/dist/utilities/form.js", import.meta.url, ), ), color: fileURLToPath( new URL("./src/__mocks__/color.js", import.meta.url), ), }, }, }, }), ], };