@serwist/turbopack
Version:
A module that integrates Serwist into your Next.js / Turbopack application.
189 lines (188 loc) • 5.76 kB
JavaScript
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