UNPKG

@serwist/turbopack

Version:

A module that integrates Serwist into your Next.js / Turbopack application.

189 lines (188 loc) 5.76 kB
import { createRequire } from "node:module"; import path from "node:path"; import { assertType, basePartial, globPartial, injectPartial } from "@serwist/build/schema"; import { bold, green, red, white, yellow } from "kolorist"; import { PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_BUILD } from "next/constants.js"; import z$1 from "zod"; import semver from "semver"; //#region \0rolldown/runtime.js var __defProp = Object.defineProperty; var __exportAll = (all, no_symbols) => { let target = {}; for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" }); return target; }; //#endregion //#region src/lib/constants.ts const SUPPORTED_ESBUILD_OPTIONS = [ "sourcemap", "legalComments", "sourceRoot", "sourcesContent", "format", "globalName", "target", "supported", "define", "treeShaking", "minify", "mangleProps", "reserveProps", "mangleQuoted", "mangleCache", "drop", "dropLabels", "minifyWhitespace", "minifyIdentifiers", "minifySyntax", "lineLimit", "charset", "ignoreAnnotations", "jsx", "jsxFactory", "jsxFragment", "jsxImportSource", "jsxDev", "jsxSideEffects", "pure", "keepNames", "absPaths", "color", "logLevel", "logLimit", "logOverride", "tsconfigRaw", "bundle", "splitting", "preserveSymlinks", "external", "packages", "alias", "loader", "resolveExtensions", "mainFields", "conditions", "allowOverwrite", "tsconfig", "outExtension", "publicPath", "inject", "banner", "footer", "plugins" ]; //#endregion //#region src/lib/logger.ts var logger_exports = /* @__PURE__ */ __exportAll({ NEXT_VERSION: () => NEXT_VERSION, error: () => error, event: () => event, info: () => info, wait: () => wait, warn: () => warn }); const NEXT_VERSION = createRequire(import.meta.url)("next/package.json").version; const LOGGING_SPACE_PREFIX = semver.gte(NEXT_VERSION, "16.0.0") ? "" : " "; const prefixedLog = (prefixType, ...message) => { let prefix; let consoleMethod; switch (prefixType) { case "wait": prefix = `${white(bold("○"))} (serwist)`; consoleMethod = "log"; break; case "error": prefix = `${red(bold("X"))} (serwist)`; consoleMethod = "error"; break; case "warn": prefix = `${yellow(bold("⚠"))} (serwist)`; consoleMethod = "warn"; break; case "info": prefix = `${white(bold("○"))} (serwist)`; consoleMethod = "log"; break; case "event": prefix = `${green(bold("✓"))} (serwist)`; consoleMethod = "log"; break; } if ((message[0] === "" || message[0] === void 0) && message.length === 1) message.shift(); if (message.length === 0) console[consoleMethod](""); else console[consoleMethod](`${LOGGING_SPACE_PREFIX}${prefix}`, ...message); }; const wait = (...message) => prefixedLog("wait", ...message); const error = (...message) => prefixedLog("error", ...message); const warn = (...message) => prefixedLog("warn", ...message); const info = (...message) => prefixedLog("info", ...message); const event = (...message) => prefixedLog("event", ...message); //#endregion //#region src/lib/utils.ts const loadNextConfig = async (cwd, isDev) => { const nextPhase = isDev ? PHASE_DEVELOPMENT_SERVER : PHASE_PRODUCTION_BUILD; // webpackIgnore is only supported by Next.js 15 and above, but it is necessary const nextConfig = await import( /* webpackIgnore: true */ "next/dist/server/config.js" ); return (typeof nextConfig.default === "function" ? nextConfig.default : nextConfig.default.default)(nextPhase, cwd, { silent: false }); }; const generateGlobPatterns = (distDir) => [`${distDir}static/**/*.{js,css,html,ico,apng,png,avif,jpg,jpeg,jfif,pjpeg,pjp,gif,svg,webp,json,webmanifest}`, "public/**/*"]; //#endregion //#region src/index.schema.ts const turboPartial = z$1.strictObject({ cwd: z$1.string().prefault(process.cwd()), nextConfig: z$1.object({ assetPrefix: z$1.string().optional(), basePath: z$1.string().optional(), distDir: z$1.string().optional() }).optional(), useNativeEsbuild: z$1.boolean().prefault(process.platform === "win32"), rebuildOnChange: z$1.boolean().prefault(true), esbuildOptions: z$1.partialRecord(z$1.literal(SUPPORTED_ESBUILD_OPTIONS), z$1.any()).prefault({}) }); const injectManifestOptions = z$1.strictObject({ ...basePartial.shape, ...globPartial.shape, ...injectPartial.shape, ...turboPartial.shape, globPatterns: z$1.array(z$1.string()).optional(), globDirectory: z$1.string().optional() }).omit({ disablePrecacheManifest: true }).transform(async (input) => { // webpackIgnore is only supported by Next.js 15 and above, but it is necessary const nextConfig = semver.gte(NEXT_VERSION, "15.0.0") ? { ...await loadNextConfig(input.cwd, process.env.NODE_ENV === "development"), ...input.nextConfig } : { distDir: input.nextConfig?.distDir ?? ".next", basePath: input.nextConfig?.basePath ?? "/", assetPrefix: input.nextConfig?.assetPrefix ?? input.nextConfig?.basePath ?? "" }; let distDir = nextConfig.distDir; if (distDir[0] === "/") distDir = distDir.slice(1); if (distDir[distDir.length - 1] !== "/") distDir += "/"; return { ...input, swSrc: path.isAbsolute(input.swSrc) ? input.swSrc : path.join(input.cwd, input.swSrc), globPatterns: input.globPatterns ?? generateGlobPatterns(distDir), globDirectory: input.globDirectory ?? input.cwd, dontCacheBustURLsMatching: input.dontCacheBustURLsMatching ?? new RegExp(`^${distDir}static/`), nextConfig: { ...nextConfig, distDir, basePath: nextConfig.basePath || "/" } }; }); assertType(); assertType(); assertType(); assertType(); //#endregion export { turboPartial as n, logger_exports as r, injectManifestOptions as t }; //# sourceMappingURL=index.schema-RVDaKxz4.js.map