Add 'utils' module export (#410)

Export core utils and assets used by RWP in /utils.
Add serviceWorkerActivated() utility promise.

---------

Co-authored-by: emma <hi@emma.cafe>
This commit is contained in:
Ilya Kreymer
2025-03-12 21:55:29 -07:00
committed by GitHub
co-authored by emma
parent 2ef95985cd
commit 592ccc5253
9 changed files with 54 additions and 16 deletions
+8
View File
@@ -2,16 +2,24 @@
## CHANGES ## CHANGES
v2.3.4
- API: Add utils module for basic utility function exports
- Loading: Update to wabac.js (2.22.2), includes fixes to MultiWACZ loading
v2.3.3 v2.3.3
- UI: Support custom 'downloadUrl' when loading from Multi-WACZ JSON source - don't show download if unset - UI: Support custom 'downloadUrl' when loading from Multi-WACZ JSON source - don't show download if unset
- UI: Don't show 'Archive Info' menu option for Multi-WACZ JSON source in embed mode - UI: Don't show 'Archive Info' menu option for Multi-WACZ JSON source in embed mode
- UI: Use localized data format for current language settings - UI: Use localized data format for current language settings
- Loading: Use negative offset range requests (via wabac.js 2.21.3) - Loading: Use negative offset range requests (via wabac.js 2.21.3)
v2.3.2 v2.3.2
- Loading: fix dynamic page lookup for URLs with query strings (via wabac.js 2.21.2) - Loading: fix dynamic page lookup for URLs with query strings (via wabac.js 2.21.2)
v2.3.1 v2.3.1
- Loading: additional loading optimizations, bump wabac.js to 2.21.1 - Loading: additional loading optimizations, bump wabac.js to 2.21.1
v2.3.0 v2.3.0
+7 -3
View File
@@ -1,7 +1,7 @@
{ {
"name": "replaywebpage", "name": "replaywebpage",
"productName": "ReplayWeb.page", "productName": "ReplayWeb.page",
"version": "2.3.3", "version": "2.3.4",
"description": "Serverless Web Archive Replay", "description": "Serverless Web Archive Replay",
"repository": "https://github.com/webrecorder/replayweb.page", "repository": "https://github.com/webrecorder/replayweb.page",
"homepage": "https://replayweb.page/", "homepage": "https://replayweb.page/",
@@ -13,12 +13,16 @@
"default": "./dist/index.js" "default": "./dist/index.js"
}, },
"./src/electron-*": "./src/electron-*.ts", "./src/electron-*": "./src/electron-*.ts",
"./index.html": "./index.html" "./index.html": "./index.html",
"./utils": {
"types": "./dist/types/utils/index.d.ts",
"default": "./dist/utils.js"
}
}, },
"dependencies": { "dependencies": {
"@fortawesome/fontawesome-free": "^5.15.4", "@fortawesome/fontawesome-free": "^5.15.4",
"@shoelace-style/shoelace": "~2.15.1", "@shoelace-style/shoelace": "~2.15.1",
"@webrecorder/wabac": "^2.21.3", "@webrecorder/wabac": "^2.22.2",
"bulma": "^0.9.3", "bulma": "^0.9.3",
"electron-log": "^4.4.1", "electron-log": "^4.4.1",
"electron-updater": "^6.3.9", "electron-updater": "^6.3.9",
+11 -1
View File
@@ -10,12 +10,15 @@ import { Pages } from "./pages";
import { PageEntry } from "./pageentry"; import { PageEntry } from "./pageentry";
import { Replay } from "./replay"; import { Replay } from "./replay";
import { Sorter } from "./sorter"; import { Sorter } from "./sorter";
import { SWManager } from "./swmanager"; import { SWManager, serviceWorkerActivated } from "./swmanager";
import { URLResources } from "./url-resources"; import { URLResources } from "./url-resources";
import { Embed } from "./embed"; import { Embed } from "./embed";
import "./coll-description"; import "./coll-description";
import "./shoelace"; import "./shoelace";
import rwpIcon from "~assets/icons/replaywebpage.svg";
import rwpLogoAnimated from "~assets/brand/replaywebpage-icon-color-animated.svg";
export { export {
ReplayWebApp, ReplayWebApp,
Chooser, Chooser,
@@ -48,6 +51,9 @@ export {
Embed, Embed,
Embed as ReplayWebPage, Embed as ReplayWebPage,
SWManager, SWManager,
serviceWorkerActivated,
rwpIcon,
rwpLogoAnimated,
}; };
export type { ItemType, URLResource } from "./types"; export type { ItemType, URLResource } from "./types";
@@ -55,3 +61,7 @@ export type { ItemType, URLResource } from "./types";
export type { EmbedReplayEvent } from "./item"; export type { EmbedReplayEvent } from "./item";
export * from "./misc"; export * from "./misc";
export * from "./pageutils";
export * from "./utils/dateTimeFormatter";
+2 -8
View File
@@ -9,6 +9,7 @@ import { parseURLSchemeHostPath } from "./pageutils";
import { property } from "lit/decorators.js"; import { property } from "lit/decorators.js";
import type { LoadInfo } from "./item"; import type { LoadInfo } from "./item";
import { ifDefined } from "lit/directives/if-defined.js"; import { ifDefined } from "lit/directives/if-defined.js";
import { serviceWorkerActivated } from "./swmanager";
// =========================================================================== // ===========================================================================
/** /**
@@ -231,14 +232,7 @@ You can select a file to upload from the main page by clicking the 'Choose File.
file: source, file: source,
}; };
if (!navigator.serviceWorker.controller) { await serviceWorkerActivated();
await new Promise((resolve) => {
navigator.serviceWorker.addEventListener("controllerchange", () =>
// @ts-expect-error - TS2794 - Expected 1 arguments, but got 0. Did you forget to include 'void' in your type argument to 'Promise'?
resolve(),
);
});
}
if (this.worker) { if (this.worker) {
if (!this.noWebWorker) { if (!this.noWebWorker) {
+5
View File
@@ -216,10 +216,15 @@ export {
clickOnSpacebarPress, clickOnSpacebarPress,
FaIcon, FaIcon,
WrModal, WrModal,
/** @deprecated Import this directly from `lit` instead */
LitElement, LitElement,
/** @deprecated Import this directly from `lit` instead */
html, html,
/** @deprecated Import this directly from `lit` instead */
css, css,
/** @deprecated Import this directly from `lit/directives/unsafe-css.js` instead */
unsafeCSS, unsafeCSS,
/** @deprecated Import this directly from `lit/directives/unsafe-svg.js` instead */
unsafeSVG, unsafeSVG,
apiPrefix, apiPrefix,
replayPrefix, replayPrefix,
+12
View File
@@ -153,3 +153,15 @@ export class SWManager {
`; `;
} }
} }
export async function serviceWorkerActivated() {
if (navigator.serviceWorker.controller) {
return;
}
await new Promise<void>((resolve) => {
navigator.serviceWorker.addEventListener("controllerchange", () => {
resolve();
});
});
}
+4
View File
@@ -0,0 +1,4 @@
export * from "./dateTimeFormatter";
export * from "./assertNonNullish";
export * from "../pageutils";
export { SWManager, serviceWorkerActivated } from "../swmanager";
+1
View File
@@ -98,6 +98,7 @@ const libConfig = (env, argv) => {
/** @type {import('webpack').Configuration['entry']} */ /** @type {import('webpack').Configuration['entry']} */
const entry = { const entry = {
index: "./src/index.ts", index: "./src/index.ts",
utils: "./src/utils/index.ts",
}; };
const extraPlugins = []; const extraPlugins = [];
+4 -4
View File
@@ -1028,10 +1028,10 @@
resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e"
integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==
"@webrecorder/wabac@^2.21.3": "@webrecorder/wabac@^2.22.2":
version "2.21.3" version "2.22.2"
resolved "https://registry.yarnpkg.com/@webrecorder/wabac/-/wabac-2.21.3.tgz#2a376e848e1bf09dbe98e78a6c41034f8cef80d9" resolved "https://registry.yarnpkg.com/@webrecorder/wabac/-/wabac-2.22.2.tgz#9b905bac70f8d8961e804576cdadc9d2bba1e576"
integrity sha512-RgWFCRj1VEa0o2i8HTIlr5ol3W1C0ySI3cdBb8Q1okSYKzG3Xaqlnui2iTpWiJNgvayKzZs1fTxcQuKz/vMYgQ== integrity sha512-bLuiKPJpVm5jsYXv6/h6A9OK02Jg4WCPzzN72vM0ktHHyY1GUniw0iM4IcZRP3cMx67Ot3ELPe2VULvlEc47oA==
dependencies: dependencies:
"@peculiar/asn1-ecc" "^2.3.4" "@peculiar/asn1-ecc" "^2.3.4"
"@peculiar/asn1-schema" "^2.3.3" "@peculiar/asn1-schema" "^2.3.3"