@serwist/next 8.4.1 → 8.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ import type { RuntimeCaching } from "@serwist/build";
2
+ export declare const defaultCache: RuntimeCaching[];
package/dist/index.cjs CHANGED
@@ -792,29 +792,30 @@ const withPWAInit = (pluginOptions)=>{
792
792
  }));
793
793
  const swEntryJs = path.join(__dirname$1, "sw-entry.js");
794
794
  const entry = config.entry;
795
- config.entry = ()=>entry().then((entries)=>{
796
- if (entries["main.js"] && !entries["main.js"].includes(swEntryJs)) {
797
- if (Array.isArray(entries["main.js"])) {
798
- entries["main.js"].unshift(swEntryJs);
799
- } else if (typeof entries["main.js"] === "string") {
800
- entries["main.js"] = [
801
- swEntryJs,
802
- entries["main.js"]
803
- ];
804
- }
795
+ config.entry = async ()=>{
796
+ const entries = await entry();
797
+ if (entries["main.js"] && !entries["main.js"].includes(swEntryJs)) {
798
+ if (Array.isArray(entries["main.js"])) {
799
+ entries["main.js"].unshift(swEntryJs);
800
+ } else if (typeof entries["main.js"] === "string") {
801
+ entries["main.js"] = [
802
+ swEntryJs,
803
+ entries["main.js"]
804
+ ];
805
805
  }
806
- if (entries["main-app"] && !entries["main-app"].includes(swEntryJs)) {
807
- if (Array.isArray(entries["main-app"])) {
808
- entries["main-app"].unshift(swEntryJs);
809
- } else if (typeof entries["main-app"] === "string") {
810
- entries["main-app"] = [
811
- swEntryJs,
812
- entries["main-app"]
813
- ];
814
- }
806
+ }
807
+ if (entries["main-app"] && !entries["main-app"].includes(swEntryJs)) {
808
+ if (Array.isArray(entries["main-app"])) {
809
+ entries["main-app"].unshift(swEntryJs);
810
+ } else if (typeof entries["main-app"] === "string") {
811
+ entries["main-app"] = [
812
+ swEntryJs,
813
+ entries["main-app"]
814
+ ];
815
815
  }
816
- return entries;
817
- });
816
+ }
817
+ return entries;
818
+ };
818
819
  if (!options.isServer) {
819
820
  if (!register) {
820
821
  info("Service worker won't be automatically registered as per the config, please call the following code in componentDidMount or useEffect:");
@@ -859,7 +860,7 @@ const withPWAInit = (pluginOptions)=>{
859
860
  ]
860
861
  }));
861
862
  // Precache files in public folder
862
- let resolvedManifestEntries = additionalPrecacheEntries ?? [];
863
+ let resolvedManifestEntries = additionalPrecacheEntries;
863
864
  if (!resolvedManifestEntries) {
864
865
  const swDestFileName = path.basename(swDest);
865
866
  resolvedManifestEntries = fg.sync([
package/dist/index.d.cts CHANGED
@@ -0,0 +1,5 @@
1
+ import type { NextConfig } from "next";
2
+ import type { PluginOptions } from "./types.js";
3
+ declare const withPWAInit: (pluginOptions: PluginOptions) => (nextConfig?: NextConfig) => NextConfig;
4
+ export default withPWAInit;
5
+ export * from "./types.js";
package/dist/index.js CHANGED
@@ -787,29 +787,30 @@ const withPWAInit = (pluginOptions)=>{
787
787
  }));
788
788
  const swEntryJs = path.join(__dirname, "sw-entry.js");
789
789
  const entry = config.entry;
790
- config.entry = ()=>entry().then((entries)=>{
791
- if (entries["main.js"] && !entries["main.js"].includes(swEntryJs)) {
792
- if (Array.isArray(entries["main.js"])) {
793
- entries["main.js"].unshift(swEntryJs);
794
- } else if (typeof entries["main.js"] === "string") {
795
- entries["main.js"] = [
796
- swEntryJs,
797
- entries["main.js"]
798
- ];
799
- }
790
+ config.entry = async ()=>{
791
+ const entries = await entry();
792
+ if (entries["main.js"] && !entries["main.js"].includes(swEntryJs)) {
793
+ if (Array.isArray(entries["main.js"])) {
794
+ entries["main.js"].unshift(swEntryJs);
795
+ } else if (typeof entries["main.js"] === "string") {
796
+ entries["main.js"] = [
797
+ swEntryJs,
798
+ entries["main.js"]
799
+ ];
800
800
  }
801
- if (entries["main-app"] && !entries["main-app"].includes(swEntryJs)) {
802
- if (Array.isArray(entries["main-app"])) {
803
- entries["main-app"].unshift(swEntryJs);
804
- } else if (typeof entries["main-app"] === "string") {
805
- entries["main-app"] = [
806
- swEntryJs,
807
- entries["main-app"]
808
- ];
809
- }
801
+ }
802
+ if (entries["main-app"] && !entries["main-app"].includes(swEntryJs)) {
803
+ if (Array.isArray(entries["main-app"])) {
804
+ entries["main-app"].unshift(swEntryJs);
805
+ } else if (typeof entries["main-app"] === "string") {
806
+ entries["main-app"] = [
807
+ swEntryJs,
808
+ entries["main-app"]
809
+ ];
810
810
  }
811
- return entries;
812
- });
811
+ }
812
+ return entries;
813
+ };
813
814
  if (!options.isServer) {
814
815
  if (!register) {
815
816
  info("Service worker won't be automatically registered as per the config, please call the following code in componentDidMount or useEffect:");
@@ -854,7 +855,7 @@ const withPWAInit = (pluginOptions)=>{
854
855
  ]
855
856
  }));
856
857
  // Precache files in public folder
857
- let resolvedManifestEntries = additionalPrecacheEntries ?? [];
858
+ let resolvedManifestEntries = additionalPrecacheEntries;
858
859
  if (!resolvedManifestEntries) {
859
860
  const swDestFileName = path.basename(swDest);
860
861
  resolvedManifestEntries = fg.sync([
@@ -0,0 +1,9 @@
1
+ export type SerwistNextOptionsKey = "self.__SERWIST_SW_ENTRY";
2
+ export interface SerwistNextOptions {
3
+ sw: string;
4
+ scope: string;
5
+ cacheOnFrontEndNav: boolean;
6
+ register: boolean;
7
+ reloadOnOnline: boolean;
8
+ swEntryWorker: string | undefined;
9
+ }
@@ -0,0 +1,7 @@
1
+ export type MessageType = {
2
+ type: "__FRONTEND_NAV_CACHE__";
3
+ url: URL | string;
4
+ } | {
5
+ type: "__START_URL_CACHE__";
6
+ url: URL | string;
7
+ };
@@ -0,0 +1,6 @@
1
+ import { Serwist } from "@serwist/window";
2
+ declare global {
3
+ interface Window {
4
+ serwist: Serwist;
5
+ }
6
+ }
package/dist/types.d.cts CHANGED
@@ -0,0 +1,81 @@
1
+ import type { WebpackInjectManifestOptions } from "@serwist/build";
2
+ type Require<T, U extends keyof T> = T & Required<Pick<T, U>>;
3
+ export interface PluginOptions extends Require<WebpackInjectManifestOptions, "swDest"> {
4
+ /**
5
+ * Enable additional route caching when users navigate through pages with
6
+ * `next/link`. This improves the user experience in some cases but it
7
+ * also adds a bit of overhead due to additional network calls.
8
+ * @default false
9
+ */
10
+ cacheOnFrontEndNav?: boolean;
11
+ /**
12
+ * Whether Serwist should be disabled.
13
+ * @default false
14
+ */
15
+ disable?: boolean;
16
+ /**
17
+ * Whether `@serwist/next` should automatically register the service worker for you. If
18
+ * you want to register the service worker yourself, set this to `false` and run
19
+ * `window.serwist.register()` in `componentDidMount` or `useEffect`.
20
+ * @example
21
+ * ```tsx
22
+ * // app/register-pwa.tsx
23
+ * "use client";
24
+ * import { useEffect } from "react";
25
+ * import type { Serwist } from "@serwist/window";
26
+ *
27
+ * declare global {
28
+ * interface Window {
29
+ * serwist: Serwist;
30
+ * }
31
+ * }
32
+ *
33
+ * export default function RegisterPWA() {
34
+ * useEffect(() => {
35
+ * if ("serviceWorker" in navigator && window.serwist !== undefined) {
36
+ * window.serwist.register();
37
+ * }
38
+ * }, []);
39
+ * return <></>;
40
+ * }
41
+ *
42
+ * // app/layout.tsx
43
+ * import RegisterPWA from "./register-pwa";
44
+ *
45
+ * export default function RootLayout({
46
+ * children,
47
+ * }: {
48
+ * children: React.ReactNode;
49
+ * }) {
50
+ * return (
51
+ * <html lang="en">
52
+ * <head />
53
+ * <body>
54
+ * <RegisterPWA />
55
+ * {children}
56
+ * </body>
57
+ * </html>
58
+ * );
59
+ * }
60
+ * ```
61
+ * @default true
62
+ */
63
+ register?: boolean;
64
+ /**
65
+ * Whether Serwist should reload the app when it goes online.
66
+ * @default true
67
+ */
68
+ reloadOnOnline?: boolean;
69
+ /**
70
+ * The service worker's URL scope. Set to `/foo/` so that paths under `/foo/` are under the service
71
+ * worker's control while others are not.
72
+ * @default nextConfig.basePath
73
+ */
74
+ scope?: string;
75
+ /**
76
+ * The URL to the service worker.
77
+ * @default "/sw.js"
78
+ */
79
+ swUrl?: string;
80
+ }
81
+ export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Find the first truthy value in an array.
3
+ * @param arr
4
+ * @param fn
5
+ * @returns
6
+ */
7
+ export declare const findFirstTruthy: <T, U>(arr: T[], fn: (elm: T) => U) => NonNullable<U> | undefined;
@@ -0,0 +1,3 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import type fs from "node:fs";
3
+ export declare const getContentHash: (file: fs.PathOrFileDescriptor, isDev: boolean) => string;
@@ -0,0 +1,3 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import fs from "node:fs";
3
+ export declare const getFileHash: (file: fs.PathOrFileDescriptor) => string;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Get a package's version
3
+ * @param packageName
4
+ * @returns
5
+ */
6
+ export declare const getPackageVersion: (packageName: string) => string | undefined;
@@ -0,0 +1,6 @@
1
+ export { findFirstTruthy } from "./find-first-truthy.js";
2
+ export { getContentHash } from "./get-content-hash.js";
3
+ export { getFileHash } from "./get-file-hash.js";
4
+ export { getPackageVersion } from "./get-package-version.js";
5
+ export { loadTSConfig } from "./load-tsconfig.js";
6
+ export * as logger from "./logger.js";
@@ -0,0 +1,2 @@
1
+ import type { TsConfigJson as TSConfigJSON } from "type-fest";
2
+ export declare const loadTSConfig: (baseDir: string, relativeTSConfigPath: string | undefined) => TSConfigJSON | undefined;
@@ -0,0 +1,5 @@
1
+ export declare const wait: (...message: any[]) => void;
2
+ export declare const error: (...message: any[]) => void;
3
+ export declare const warn: (...message: any[]) => void;
4
+ export declare const info: (...message: any[]) => void;
5
+ export declare const event: (...message: any[]) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serwist/next",
3
- "version": "8.4.1",
3
+ "version": "8.4.3",
4
4
  "type": "module",
5
5
  "description": "A module that integrates Serwist into your Next.js application.",
6
6
  "files": [
@@ -67,9 +67,9 @@
67
67
  "dependencies": {
68
68
  "clean-webpack-plugin": "4.0.0",
69
69
  "fast-glob": "3.3.2",
70
- "@serwist/build": "8.4.1",
71
- "@serwist/webpack-plugin": "8.4.1",
72
- "@serwist/window": "8.4.1"
70
+ "@serwist/build": "8.4.3",
71
+ "@serwist/webpack-plugin": "8.4.3",
72
+ "@serwist/window": "8.4.3"
73
73
  },
74
74
  "devDependencies": {
75
75
  "@types/node": "20.10.5",
@@ -81,7 +81,7 @@
81
81
  "type-fest": "4.8.3",
82
82
  "typescript": "5.4.0-dev.20231226",
83
83
  "webpack": "5.89.0",
84
- "@serwist/constants": "8.4.1"
84
+ "@serwist/constants": "8.4.3"
85
85
  },
86
86
  "peerDependencies": {
87
87
  "next": ">=14.0.0",