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
+11 -1
View File
@@ -10,12 +10,15 @@ import { Pages } from "./pages";
import { PageEntry } from "./pageentry";
import { Replay } from "./replay";
import { Sorter } from "./sorter";
import { SWManager } from "./swmanager";
import { SWManager, serviceWorkerActivated } from "./swmanager";
import { URLResources } from "./url-resources";
import { Embed } from "./embed";
import "./coll-description";
import "./shoelace";
import rwpIcon from "~assets/icons/replaywebpage.svg";
import rwpLogoAnimated from "~assets/brand/replaywebpage-icon-color-animated.svg";
export {
ReplayWebApp,
Chooser,
@@ -48,6 +51,9 @@ export {
Embed,
Embed as ReplayWebPage,
SWManager,
serviceWorkerActivated,
rwpIcon,
rwpLogoAnimated,
};
export type { ItemType, URLResource } from "./types";
@@ -55,3 +61,7 @@ export type { ItemType, URLResource } from "./types";
export type { EmbedReplayEvent } from "./item";
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 type { LoadInfo } from "./item";
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,
};
if (!navigator.serviceWorker.controller) {
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(),
);
});
}
await serviceWorkerActivated();
if (this.worker) {
if (!this.noWebWorker) {
+5
View File
@@ -216,10 +216,15 @@ export {
clickOnSpacebarPress,
FaIcon,
WrModal,
/** @deprecated Import this directly from `lit` instead */
LitElement,
/** @deprecated Import this directly from `lit` instead */
html,
/** @deprecated Import this directly from `lit` instead */
css,
/** @deprecated Import this directly from `lit/directives/unsafe-css.js` instead */
unsafeCSS,
/** @deprecated Import this directly from `lit/directives/unsafe-svg.js` instead */
unsafeSVG,
apiPrefix,
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";