@serwist/turbopack 9.5.6 → 9.5.8

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.
Files changed (47) hide show
  1. package/dist/chunks/index.schema-RVDaKxz4.js +189 -0
  2. package/dist/chunks/index.schema-RVDaKxz4.js.map +1 -0
  3. package/dist/index.d.mts +96 -0
  4. package/dist/index.d.mts.map +1 -0
  5. package/dist/index.mjs +166 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/dist/index.react.d.mts +42 -0
  8. package/dist/index.react.d.mts.map +1 -0
  9. package/dist/index.react.mjs +73 -0
  10. package/dist/index.react.mjs.map +1 -0
  11. package/dist/index.schema.d.mts +311 -0
  12. package/dist/index.schema.d.mts.map +1 -0
  13. package/dist/index.schema.mjs +2 -0
  14. package/dist/index.worker.d.mts +18 -0
  15. package/dist/index.worker.d.mts.map +1 -0
  16. package/dist/index.worker.mjs +227 -0
  17. package/dist/index.worker.mjs.map +1 -0
  18. package/package.json +33 -34
  19. package/src/index.schema.ts +1 -0
  20. package/src/index.ts +11 -2
  21. package/src/lib/utils.ts +3 -3
  22. package/src/types.ts +8 -1
  23. package/dist/chunks/index.schema.js +0 -183
  24. package/dist/index.d.ts +0 -22
  25. package/dist/index.d.ts.map +0 -1
  26. package/dist/index.js +0 -180
  27. package/dist/index.react.d.ts +0 -25
  28. package/dist/index.react.d.ts.map +0 -1
  29. package/dist/index.react.js +0 -88
  30. package/dist/index.schema.d.ts +0 -297
  31. package/dist/index.schema.d.ts.map +0 -1
  32. package/dist/index.schema.js +0 -8
  33. package/dist/index.worker.d.ts +0 -14
  34. package/dist/index.worker.d.ts.map +0 -1
  35. package/dist/index.worker.js +0 -261
  36. package/dist/lib/constants.d.ts +0 -2
  37. package/dist/lib/constants.d.ts.map +0 -1
  38. package/dist/lib/context.d.ts +0 -7
  39. package/dist/lib/context.d.ts.map +0 -1
  40. package/dist/lib/index.d.ts +0 -3
  41. package/dist/lib/index.d.ts.map +0 -1
  42. package/dist/lib/logger.d.ts +0 -8
  43. package/dist/lib/logger.d.ts.map +0 -1
  44. package/dist/lib/utils.d.ts +0 -3
  45. package/dist/lib/utils.d.ts.map +0 -1
  46. package/dist/types.d.ts +0 -65
  47. package/dist/types.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serwist/turbopack",
3
- "version": "9.5.6",
3
+ "version": "9.5.8",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "A module that integrates Serwist into your Next.js / Turbopack application.",
@@ -31,64 +31,63 @@
31
31
  "repository": "https://github.com/serwist/serwist",
32
32
  "bugs": "https://github.com/serwist/serwist/issues",
33
33
  "homepage": "https://serwist.pages.dev",
34
- "main": "./dist/index.js",
35
- "types": "./dist/index.d.ts",
34
+ "main": "./dist/index.mjs",
35
+ "types": "./dist/index.d.mts",
36
36
  "typesVersions": {
37
37
  "*": {
38
38
  "react": [
39
- "./dist/index.react.d.ts"
39
+ "./dist/index.react.d.mts"
40
40
  ],
41
41
  "worker": [
42
- "./dist/index.worker.d.ts"
42
+ "./dist/index.worker.d.mts"
43
43
  ],
44
44
  "schema": [
45
- "./dist/index.schema.d.ts"
45
+ "./dist/index.schema.d.mts"
46
46
  ]
47
47
  }
48
48
  },
49
49
  "exports": {
50
50
  ".": {
51
- "types": "./dist/index.d.ts",
52
- "default": "./dist/index.js"
51
+ "types": "./dist/index.d.mts",
52
+ "default": "./dist/index.mjs"
53
53
  },
54
54
  "./react": {
55
- "types": "./dist/index.react.d.ts",
56
- "default": "./dist/index.react.js"
55
+ "types": "./dist/index.react.d.mts",
56
+ "default": "./dist/index.react.mjs"
57
57
  },
58
58
  "./worker": {
59
- "types": "./dist/index.worker.d.ts",
60
- "default": "./dist/index.worker.js"
59
+ "types": "./dist/index.worker.d.mts",
60
+ "default": "./dist/index.worker.mjs"
61
61
  },
62
62
  "./schema": {
63
- "types": "./dist/index.schema.d.ts",
64
- "default": "./dist/index.schema.js"
63
+ "types": "./dist/index.schema.d.mts",
64
+ "default": "./dist/index.schema.mjs"
65
65
  },
66
66
  "./package.json": "./package.json"
67
67
  },
68
68
  "dependencies": {
69
- "@swc/core": "1.15.11",
70
- "browserslist": "4.28.1",
69
+ "@swc/core": "1.15.32",
70
+ "browserslist": "4.28.2",
71
71
  "kolorist": "1.8.0",
72
- "semver": "7.7.3",
72
+ "semver": "7.7.4",
73
73
  "zod": "4.3.6",
74
- "@serwist/build": "9.5.6",
75
- "@serwist/utils": "9.5.6",
76
- "serwist": "9.5.6",
77
- "@serwist/window": "9.5.6"
74
+ "@serwist/build": "9.5.8",
75
+ "serwist": "9.5.8",
76
+ "@serwist/window": "9.5.8",
77
+ "@serwist/utils": "9.5.8"
78
78
  },
79
79
  "devDependencies": {
80
- "@types/node": "25.1.0",
81
- "@types/react": "19.2.10",
80
+ "@types/node": "25.6.0",
81
+ "@types/react": "19.2.14",
82
82
  "@types/semver": "7.7.1",
83
- "esbuild": "0.27.2",
84
- "esbuild-wasm": "0.27.2",
85
- "next": "16.1.6",
86
- "react": "19.2.4",
87
- "react-dom": "19.2.4",
88
- "rollup": "4.57.0",
89
- "type-fest": "5.4.2",
90
- "typescript": "5.9.3",
91
- "@serwist/configs": "9.5.6"
83
+ "esbuild": "0.28.0",
84
+ "esbuild-wasm": "0.28.0",
85
+ "next": "16.2.4",
86
+ "react": "19.2.5",
87
+ "react-dom": "19.2.5",
88
+ "tsdown": "0.21.10",
89
+ "type-fest": "5.6.0",
90
+ "typescript": "6.0.3"
92
91
  },
93
92
  "peerDependencies": {
94
93
  "esbuild": ">=0.25.0 <1.0.0",
@@ -109,8 +108,8 @@
109
108
  }
110
109
  },
111
110
  "scripts": {
112
- "build": "rimraf dist && NODE_ENV=production rollup --config rollup.config.js",
113
- "dev": "rollup --config rollup.config.js --watch",
111
+ "build": "rimraf dist && NODE_ENV=production tsdown",
112
+ "dev": "tsdown --watch",
114
113
  "lint": "biome lint ./src",
115
114
  "qcheck": "biome check ./src",
116
115
  "typecheck": "tsc"
@@ -17,6 +17,7 @@ export const turboPartial = z.strictObject({
17
17
  })
18
18
  .optional(),
19
19
  useNativeEsbuild: z.boolean().prefault(process.platform === "win32"),
20
+ rebuildOnChange: z.boolean().prefault(true),
20
21
  esbuildOptions: z.partialRecord(z.literal(SUPPORTED_ESBUILD_OPTIONS), z.any()).prefault({}),
21
22
  });
22
23
 
package/src/index.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  // Workaround for Next.js + Turbopack, while plugins are still
2
2
  // not supported. This relies on Next.js Route Handlers and file
3
3
  // name determinism.
4
+ import crypto from "node:crypto";
5
+ import fs from "node:fs";
4
6
  import path from "node:path";
5
7
  import { type BuildResult, getFileManifestEntries, rebasePath } from "@serwist/build";
6
8
  import { SerwistConfigError, validationErrorMap } from "@serwist/build/schema";
@@ -93,6 +95,7 @@ export const createSerwistRoute = (options: InjectManifestOptions) => {
93
95
  ],
94
96
  };
95
97
  });
98
+ let lastHash: string | null = null;
96
99
  let map: Map<string, string> | null = null;
97
100
  // NOTE: ALL FILES MUST HAVE DETERMINISTIC NAMES. THIS IS BECAUSE
98
101
  // THE FOLLOWING MAP IS LOADED SEPARATELY FOR `generateStaticParams`
@@ -157,10 +160,16 @@ export const createSerwistRoute = (options: InjectManifestOptions) => {
157
160
  return [...map.keys()].map((e) => ({ path: path.relative(config.cwd, e) }));
158
161
  };
159
162
  const GET = async (_: Request, { params }: { params: Promise<{ path: string }> }) => {
160
- // TODO: obviously, files get stale in development when we pull this off.
161
163
  const { path: filePath } = await params;
162
164
  const config = await validation;
163
- if (!map) map = await loadMap(filePath);
165
+ if (isDev && config.rebuildOnChange) {
166
+ const swContent = fs.readFileSync(config.swSrc, "utf-8");
167
+ const currentHash = crypto.createHash("sha256").update(swContent).digest("hex");
168
+ if (!map || lastHash !== currentHash) {
169
+ map = await loadMap(filePath);
170
+ lastHash = currentHash;
171
+ }
172
+ } else if (!map) map = await loadMap(filePath);
164
173
  return new NextResponse(map.get(path.join(config.cwd, filePath)), {
165
174
  headers: {
166
175
  "Content-Type": contentTypeMap[path.extname(filePath)] || "text/plain",
package/src/lib/utils.ts CHANGED
@@ -6,9 +6,9 @@ export const loadNextConfig = async (cwd: string, isDev: boolean) => {
6
6
  // for loading `next/dist/server/config.js`.
7
7
  const nextConfig = await import(/* webpackIgnore: true */ "next/dist/server/config.js");
8
8
  // 1) what does `default.default` even mean
9
- return nextConfig.default.default(nextPhase, cwd, {
10
- silent: false,
11
- });
9
+ const loadConfig =
10
+ typeof nextConfig.default === "function" ? (nextConfig.default as unknown as typeof nextConfig.default.default) : nextConfig.default.default;
11
+ return loadConfig(nextPhase, cwd, { silent: false });
12
12
  };
13
13
 
14
14
  export const generateGlobPatterns = (distDir: string) => [
package/src/types.ts CHANGED
@@ -64,6 +64,13 @@ export interface TurboPartial {
64
64
  * to `false` if not on Windows, `true` otherwise.
65
65
  */
66
66
  useNativeEsbuild?: boolean;
67
+ /**
68
+ * Whether to automatically rebuild when source file changes
69
+ * while in development mode.
70
+ *
71
+ * @default true
72
+ */
73
+ rebuildOnChange?: boolean;
67
74
  /**
68
75
  * Options to configure the esbuild instance used to bundle
69
76
  * the service worker.
@@ -71,7 +78,7 @@ export interface TurboPartial {
71
78
  esbuildOptions?: EsbuildNativeOptions | EsbuildWasmOptions;
72
79
  }
73
80
 
74
- export interface TurboResolved extends Require<TurboPartial, "cwd" | "useNativeEsbuild" | "esbuildOptions"> {}
81
+ export interface TurboResolved extends Require<TurboPartial, "cwd" | "useNativeEsbuild" | "rebuildOnChange" | "esbuildOptions"> {}
75
82
 
76
83
  export type InjectManifestOptions = Prettify<
77
84
  Omit<BasePartial & GlobPartial & InjectPartial & OptionalGlobDirectoryPartial & TurboPartial, "disablePrecacheManifest">
@@ -1,183 +0,0 @@
1
- import path from 'node:path';
2
- import { injectPartial, globPartial, basePartial, assertType } from '@serwist/build/schema';
3
- import semver from 'semver';
4
- import z from 'zod';
5
- import { createRequire } from 'node:module';
6
- import { green, bold, white, yellow, red } from 'kolorist';
7
- import { PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_BUILD } from 'next/constants.js';
8
-
9
- const SUPPORTED_ESBUILD_OPTIONS = [
10
- "sourcemap",
11
- "legalComments",
12
- "sourceRoot",
13
- "sourcesContent",
14
- "format",
15
- "globalName",
16
- "target",
17
- "supported",
18
- "define",
19
- "treeShaking",
20
- "minify",
21
- "mangleProps",
22
- "reserveProps",
23
- "mangleQuoted",
24
- "mangleCache",
25
- "drop",
26
- "dropLabels",
27
- "minifyWhitespace",
28
- "minifyIdentifiers",
29
- "minifySyntax",
30
- "lineLimit",
31
- "charset",
32
- "ignoreAnnotations",
33
- "jsx",
34
- "jsxFactory",
35
- "jsxFragment",
36
- "jsxImportSource",
37
- "jsxDev",
38
- "jsxSideEffects",
39
- "pure",
40
- "keepNames",
41
- "absPaths",
42
- "color",
43
- "logLevel",
44
- "logLimit",
45
- "logOverride",
46
- "tsconfigRaw",
47
- "bundle",
48
- "splitting",
49
- "preserveSymlinks",
50
- "external",
51
- "packages",
52
- "alias",
53
- "loader",
54
- "resolveExtensions",
55
- "mainFields",
56
- "conditions",
57
- "allowOverwrite",
58
- "tsconfig",
59
- "outExtension",
60
- "publicPath",
61
- "inject",
62
- "banner",
63
- "footer",
64
- "plugins"
65
- ];
66
-
67
- const require$1 = createRequire(import.meta.url);
68
- const NEXT_VERSION = require$1("next/package.json").version;
69
- const LOGGING_SPACE_PREFIX = semver.gte(NEXT_VERSION, "16.0.0") ? "" : " ";
70
- const prefixedLog = (prefixType, ...message)=>{
71
- let prefix;
72
- let consoleMethod;
73
- switch(prefixType){
74
- case "wait":
75
- prefix = `${white(bold("○"))} (serwist)`;
76
- consoleMethod = "log";
77
- break;
78
- case "error":
79
- prefix = `${red(bold("X"))} (serwist)`;
80
- consoleMethod = "error";
81
- break;
82
- case "warn":
83
- prefix = `${yellow(bold("⚠"))} (serwist)`;
84
- consoleMethod = "warn";
85
- break;
86
- case "info":
87
- prefix = `${white(bold("○"))} (serwist)`;
88
- consoleMethod = "log";
89
- break;
90
- case "event":
91
- prefix = `${green(bold("✓"))} (serwist)`;
92
- consoleMethod = "log";
93
- break;
94
- }
95
- if ((message[0] === "" || message[0] === undefined) && message.length === 1) {
96
- message.shift();
97
- }
98
- if (message.length === 0) {
99
- console[consoleMethod]("");
100
- } else {
101
- console[consoleMethod](`${LOGGING_SPACE_PREFIX}${prefix}`, ...message);
102
- }
103
- };
104
- const wait = (...message)=>prefixedLog("wait", ...message);
105
- const error = (...message)=>prefixedLog("error", ...message);
106
- const warn = (...message)=>prefixedLog("warn", ...message);
107
- const info = (...message)=>prefixedLog("info", ...message);
108
- const event = (...message)=>prefixedLog("event", ...message);
109
-
110
- var logger = /*#__PURE__*/Object.freeze({
111
- __proto__: null,
112
- NEXT_VERSION: NEXT_VERSION,
113
- error: error,
114
- event: event,
115
- info: info,
116
- wait: wait,
117
- warn: warn
118
- });
119
-
120
- const loadNextConfig = async (cwd, isDev)=>{
121
- const nextPhase = isDev ? PHASE_DEVELOPMENT_SERVER : PHASE_PRODUCTION_BUILD;
122
- // webpackIgnore is only supported by Next.js 15 and above, but it is necessary
123
- const nextConfig = await import(/* webpackIgnore: true */ 'next/dist/server/config.js');
124
- return nextConfig.default.default(nextPhase, cwd, {
125
- silent: false
126
- });
127
- };
128
- const generateGlobPatterns = (distDir)=>[
129
- `${distDir}static/**/*.{js,css,html,ico,apng,png,avif,jpg,jpeg,jfif,pjpeg,pjp,gif,svg,webp,json,webmanifest}`,
130
- "public/**/*"
131
- ];
132
-
133
- const turboPartial = z.strictObject({
134
- cwd: z.string().prefault(process.cwd()),
135
- nextConfig: z.object({
136
- assetPrefix: z.string().optional(),
137
- basePath: z.string().optional(),
138
- distDir: z.string().optional()
139
- }).optional(),
140
- useNativeEsbuild: z.boolean().prefault(process.platform === "win32"),
141
- esbuildOptions: z.partialRecord(z.literal(SUPPORTED_ESBUILD_OPTIONS), z.any()).prefault({})
142
- });
143
- const injectManifestOptions = z.strictObject({
144
- ...basePartial.shape,
145
- ...globPartial.shape,
146
- ...injectPartial.shape,
147
- ...turboPartial.shape,
148
- globPatterns: z.array(z.string()).optional(),
149
- globDirectory: z.string().optional()
150
- }).omit({
151
- disablePrecacheManifest: true
152
- }).transform(async (input)=>{
153
- // webpackIgnore is only supported by Next.js 15 and above, but it is necessary
154
- const nextConfig = semver.gte(NEXT_VERSION, "15.0.0") ? {
155
- ...await loadNextConfig(input.cwd, process.env.NODE_ENV === "development"),
156
- ...input.nextConfig
157
- } : {
158
- distDir: input.nextConfig?.distDir ?? ".next",
159
- basePath: input.nextConfig?.basePath ?? "/",
160
- assetPrefix: input.nextConfig?.assetPrefix ?? input.nextConfig?.basePath ?? ""
161
- };
162
- let distDir = nextConfig.distDir;
163
- if (distDir[0] === "/") distDir = distDir.slice(1);
164
- if (distDir[distDir.length - 1] !== "/") distDir += "/";
165
- return {
166
- ...input,
167
- swSrc: path.isAbsolute(input.swSrc) ? input.swSrc : path.join(input.cwd, input.swSrc),
168
- globPatterns: input.globPatterns ?? generateGlobPatterns(distDir),
169
- globDirectory: input.globDirectory ?? input.cwd,
170
- dontCacheBustURLsMatching: input.dontCacheBustURLsMatching ?? new RegExp(`^${distDir}static/`),
171
- nextConfig: {
172
- ...nextConfig,
173
- distDir,
174
- basePath: nextConfig.basePath || "/"
175
- }
176
- };
177
- });
178
- assertType();
179
- assertType();
180
- assertType();
181
- assertType();
182
-
183
- export { injectManifestOptions as i, logger as l, turboPartial as t };
package/dist/index.d.ts DELETED
@@ -1,22 +0,0 @@
1
- import type { NextConfig } from "next";
2
- import { NextResponse } from "next/server.js";
3
- import type { InjectManifestOptions } from "./types.js";
4
- /**
5
- * Creates a Route Handler for Serwist files.
6
- * @param options Options for {@linkcode getFileManifestEntries}.
7
- */
8
- export declare const createSerwistRoute: (options: InjectManifestOptions) => {
9
- dynamic: "force-static";
10
- dynamicParams: false;
11
- revalidate: false;
12
- generateStaticParams: () => Promise<{
13
- path: string;
14
- }[]>;
15
- GET: (_: Request, { params }: {
16
- params: Promise<{
17
- path: string;
18
- }>;
19
- }) => Promise<NextResponse<unknown>>;
20
- };
21
- export declare const withSerwist: (nextConfig?: NextConfig) => NextConfig;
22
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK9C,OAAO,KAAK,EAAE,qBAAqB,EAAiC,MAAM,YAAY,CAAC;AAuCvF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAS,qBAAqB;;;;;;;aAmGzC,OAAO,cAAc;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE;CAajF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,aAAY,UAAe,KAAG,UAGxD,CAAC"}
package/dist/index.js DELETED
@@ -1,180 +0,0 @@
1
- import path from 'node:path';
2
- import { rebasePath, getFileManifestEntries } from '@serwist/build';
3
- import { validationErrorMap, SerwistConfigError } from '@serwist/build/schema';
4
- import { browserslistToEsbuild } from '@serwist/utils';
5
- import browserslist from 'browserslist';
6
- import { cyan, dim, yellow } from 'kolorist';
7
- import { MODERN_BROWSERSLIST_TARGET } from 'next/constants.js';
8
- import { NextResponse } from 'next/server.js';
9
- import { z } from 'zod';
10
- import { i as injectManifestOptions, l as logger } from './chunks/index.schema.js';
11
- import 'semver';
12
- import 'node:module';
13
-
14
- let esbuildWasm = null;
15
- let esbuildNative = null;
16
- const logSerwistResult = (filePath, buildResult)=>{
17
- const { count, size, warnings } = buildResult;
18
- const hasWarnings = warnings && warnings.length > 0;
19
- if (filePath === "sw.js" && (hasWarnings || count > 0)) {
20
- logger[hasWarnings ? "warn" : "event"](`${cyan(count)} precache entries ${dim(`(${(size / 1024).toFixed(2)} KiB)`)}${hasWarnings ? `\n${yellow([
21
- "⚠ warnings",
22
- ...warnings.map((w)=>` ${w}`),
23
- ""
24
- ].join("\n"))}` : ""}`);
25
- }
26
- };
27
- const validateGetManifestOptions = async (input)=>{
28
- const result = await injectManifestOptions.spa(input, {
29
- error: validationErrorMap
30
- });
31
- if (!result.success) {
32
- throw new SerwistConfigError({
33
- moduleName: "@serwist/turbopack",
34
- message: z.prettifyError(result.error)
35
- });
36
- }
37
- return result.data;
38
- };
39
- const isDev = process.env.NODE_ENV === "development";
40
- const contentTypeMap = {
41
- ".js": "application/javascript",
42
- ".map": "application/json; charset=UTF-8"
43
- };
44
- const createSerwistRoute = (options)=>{
45
- const dynamic = "force-static", dynamicParams = false, revalidate = false;
46
- const validation = validateGetManifestOptions(options).then((config)=>{
47
- return {
48
- ...config,
49
- disablePrecacheManifest: isDev,
50
- additionalPrecacheEntries: isDev ? [] : config.additionalPrecacheEntries,
51
- globIgnores: [
52
- ...config.globIgnores,
53
- rebasePath({
54
- file: config.swSrc,
55
- baseDirectory: config.globDirectory
56
- })
57
- ],
58
- manifestTransforms: [
59
- ...config.manifestTransforms ?? [],
60
- async (manifestEntries)=>{
61
- const manifest = manifestEntries.map((m)=>{
62
- if (m.url.startsWith(config.nextConfig.distDir)) {
63
- m.url = `${config.nextConfig.assetPrefix}/_next/${m.url.slice(config.nextConfig.distDir.length)}`;
64
- }
65
- if (m.url.startsWith("public/")) {
66
- m.url = path.posix.join(config.nextConfig.basePath, m.url.slice(7));
67
- }
68
- return m;
69
- });
70
- return {
71
- manifest,
72
- warnings: []
73
- };
74
- }
75
- ]
76
- };
77
- });
78
- let map = null;
79
- const loadMap = async (filePath)=>{
80
- const config = await validation;
81
- const { count, size, manifestEntries, warnings } = await getFileManifestEntries(config);
82
- const injectionPoint = config.injectionPoint || "";
83
- const manifestString = manifestEntries === undefined ? "undefined" : JSON.stringify(manifestEntries, null, 2);
84
- const log = (type, ...message)=>{
85
- if (filePath === "sw.js") {
86
- logger[type](...message);
87
- }
88
- };
89
- let esbuild;
90
- if (config.useNativeEsbuild) {
91
- log("info", "Using esbuild to bundle the service worker.");
92
- if (!esbuildNative) esbuildNative = import(/* webpackIgnore: true */ 'esbuild');
93
- esbuild = await esbuildNative;
94
- } else {
95
- log("info", "Using esbuild-wasm to bundle the service worker.");
96
- if (!esbuildWasm) esbuildWasm = import(/* webpackIgnore: true */ 'esbuild-wasm');
97
- esbuild = await esbuildWasm;
98
- }
99
- logSerwistResult(filePath, {
100
- count,
101
- size,
102
- warnings
103
- });
104
- const result = await esbuild.build({
105
- sourcemap: true,
106
- format: "esm",
107
- treeShaking: true,
108
- minify: !isDev,
109
- bundle: true,
110
- ...config.esbuildOptions,
111
- target: config.esbuildOptions?.target ?? browserslistToEsbuild(browserslist, config.cwd, MODERN_BROWSERSLIST_TARGET),
112
- platform: "browser",
113
- define: {
114
- ...config.esbuildOptions.define,
115
- ...injectionPoint ? {
116
- [injectionPoint]: manifestString
117
- } : {}
118
- },
119
- outdir: config.cwd,
120
- write: false,
121
- entryNames: "[name]",
122
- assetNames: "[name]-[hash]",
123
- chunkNames: "[name]-[hash]",
124
- entryPoints: [
125
- {
126
- in: config.swSrc,
127
- out: "sw"
128
- }
129
- ]
130
- });
131
- if (result.errors.length) {
132
- console.error("Failed to build the service worker.", result.errors);
133
- throw new Error();
134
- }
135
- if (result.warnings.length) {
136
- console.warn(result.warnings);
137
- }
138
- return new Map(result.outputFiles.map((e)=>[
139
- e.path,
140
- e.text
141
- ]));
142
- };
143
- const generateStaticParams = async ()=>{
144
- const config = await validation;
145
- if (!map) map = await loadMap("root");
146
- return [
147
- ...map.keys()
148
- ].map((e)=>({
149
- path: path.relative(config.cwd, e)
150
- }));
151
- };
152
- const GET = async (_, { params })=>{
153
- const { path: filePath } = await params;
154
- const config = await validation;
155
- if (!map) map = await loadMap(filePath);
156
- return new NextResponse(map.get(path.join(config.cwd, filePath)), {
157
- headers: {
158
- "Content-Type": contentTypeMap[path.extname(filePath)] || "text/plain",
159
- "Service-Worker-Allowed": "/"
160
- }
161
- });
162
- };
163
- return {
164
- dynamic,
165
- dynamicParams,
166
- revalidate,
167
- generateStaticParams,
168
- GET
169
- };
170
- };
171
- const withSerwist = (nextConfig = {})=>({
172
- ...nextConfig,
173
- serverExternalPackages: [
174
- ...nextConfig.serverExternalPackages ?? [],
175
- "esbuild",
176
- "esbuild-wasm"
177
- ]
178
- });
179
-
180
- export { createSerwistRoute, withSerwist };
@@ -1,25 +0,0 @@
1
- import { Serwist } from "@serwist/window";
2
- import { type ReactNode } from "react";
3
- import { useSerwist } from "./lib/context.js";
4
- export interface SerwistProviderProps {
5
- swUrl: string;
6
- disable?: boolean;
7
- register?: boolean;
8
- cacheOnNavigation?: boolean;
9
- reloadOnOnline?: boolean;
10
- options?: RegistrationOptions;
11
- children?: ReactNode;
12
- }
13
- declare global {
14
- interface Window {
15
- serwist: Serwist;
16
- }
17
- }
18
- /**
19
- * `@serwist/window` provider for Next.js apps.
20
- * @param options
21
- * @returns
22
- */
23
- export declare function SerwistProvider({ swUrl, disable, register, cacheOnNavigation, reloadOnOnline, options, children, }: SerwistProviderProps): import("react").JSX.Element;
24
- export { useSerwist };
25
- //# sourceMappingURL=index.react.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.react.d.ts","sourceRoot":"","sources":["../src/index.react.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAkB,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,OAAO,EAAE,OAAO,CAAC;KAClB;CACF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,OAAe,EACf,QAAe,EACf,iBAAwB,EACxB,cAAqB,EACrB,OAAO,EACP,QAAQ,GACT,EAAE,oBAAoB,+BAuDtB;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}