Skip to content

Commit

Permalink
Configure package exports explicitly (#336)
Browse files Browse the repository at this point in the history
Closes #337
Blocks webrecorder/archiveweb.page#198

Adds a dedicated `misc` export, as well as explicitly exporting the
`electron-*` files and the `index.html` file. This restricts imports to
only these files, and allows us to not have to exactly match webpack
configs between RWP and AWP.
  • Loading branch information
emma-sg committed Jun 19, 2024
1 parent 2700797 commit 1feee35
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 5 deletions.
14 changes: 12 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,18 @@
"homepage": "https://replayweb.page/",
"author": "Webrecorder Software",
"license": "AGPL-3.0-or-later",
"main": "ui.js",
"types": "dist/types/index.d.ts",
"exports": {
".": {
"types": "./dist/types/index.d.ts",
"default": "./ui.js"
},
"./misc": {
"types": "./dist/types/misc.d.ts",
"default": "./dist/misc.js"
},
"./src/electron-*": "./src/electron-*.ts",
"./index.html": "./index.html"
},
"dependencies": {
"@fortawesome/fontawesome-free": "^5.15.4",
"@shoelace-style/shoelace": "~2.15.1",
Expand Down
2 changes: 1 addition & 1 deletion src/components/labeled-field.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import faX from "@fortawesome/fontawesome-free/svgs/solid/times.svg";

import { registerIconLibrary } from "@shoelace-style/shoelace/dist/utilities/icon-library.js";

import systemLibrary from "@shoelace-style/shoelace/dist/components/icon/library.system";
import systemLibrary from "@shoelace-style/shoelace/dist/components/icon/library.system.js";

// disable system library to prevent loading of unused data: URLs
// allow only "x-lg" as it is needed for sl-dialog
Expand Down
2 changes: 1 addition & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"outDir": "./dist/",
"module": "esnext",
"target": "es6",
"moduleResolution": "node",
"moduleResolution": "Bundler",
"allowJs": true,
"strict": true,
"declaration": true,
Expand Down
89 changes: 88 additions & 1 deletion webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -188,4 +188,91 @@ const browserConfig = (/*env, argv*/) => {
return merge(tsConfig, config);
};

module.exports = [browserConfig, electronMainConfig, electronPreloadConfig];
const miscConfig = (/*env, argv*/) => {
const isDevServer = process.env.WEBPACK_SERVE;

/** @type {import('webpack').Configuration['entry']} */
const entry = {
misc: "./src/misc.ts",
};

/** @type {import('webpack').Configuration} */
const config = {
target: "web",
mode: "production",
cache: {
type: isDevServer ? "memory" : "filesystem",
},
resolve: {
fallback: { crypto: false },
},
entry,
optimization,

output: {
path: path.join(__dirname, "dist"),
filename: "[name].js",
libraryTarget: "self",
globalObject: "self",
publicPath: "/",
},

devServer: {
compress: true,
port: 9990,
open: false,
static: __dirname,
//publicPath: "/"
},

plugins: [
new webpack.NormalModuleReplacementPlugin(/^node:*/, (resource) => {
switch (resource.request) {
case "node:stream":
resource.request = "stream-browserify";
break;
}
}),

new webpack.optimize.LimitChunkCountPlugin({
maxChunks: 1,
}),
new webpack.ProvidePlugin({
process: "process/browser",
}),
new MiniCssExtractPlugin(),
new webpack.DefinePlugin({
__SW_NAME__: JSON.stringify("sw.js"),
__HELPER_PROXY__: JSON.stringify(HELPER_PROXY),
__GDRIVE_CLIENT_ID__: JSON.stringify(GDRIVE_CLIENT_ID),
__VERSION__: JSON.stringify(package_json.version),
}),
new webpack.BannerPlugin(BANNER_TEXT),
],

module: {
rules: [
{
test: /\.svg$/,
use: ["raw-loader"],
},
{
test: /main.scss$/,
use: ["css-loader", "sass-loader"],
},
{
test: /wombat.js|wombatWorkers.js|index.html$/i,
use: ["raw-loader"],
},
],
},
};
return merge(tsConfig, config);
};

module.exports = [
browserConfig,
miscConfig,
electronMainConfig,
electronPreloadConfig,
];

0 comments on commit 1feee35

Please sign in to comment.