@serwist/turbopack
Version:
A module that integrates Serwist into your Next.js / Turbopack application.
94 lines (90 loc) • 2.15 kB
JavaScript
import path from 'node:path';
import { injectPartial, globPartial, basePartial, assertType } from '@serwist/build/schema';
import z from 'zod';
const DEFAULT_GLOB_PATTERNS = [
".next/static/**/*.{js,css,html,ico,apng,png,avif,jpg,jpeg,jfif,pjpeg,pjp,gif,svg,webp,json,webmanifest}",
"public/**/*"
];
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"
];
const turboPartial = z.strictObject({
cwd: z.string().prefault(process.cwd()),
basePath: z.string(),
esbuildOptions: z.partialRecord(z.literal(SUPPORTED_ESBUILD_OPTIONS), z.any()).prefault({})
});
const injectManifestOptions = z.strictObject({
...basePartial.shape,
...globPartial.shape,
...injectPartial.shape,
...turboPartial.shape,
globPatterns: z.array(z.string()).prefault(DEFAULT_GLOB_PATTERNS),
globDirectory: z.string().optional()
}).omit({
disablePrecacheManifest: true
}).transform((input)=>{
return {
...input,
swSrc: path.isAbsolute(input.swSrc) ? input.swSrc : path.join(input.cwd, input.swSrc),
globDirectory: input.globDirectory ?? input.cwd
};
});
assertType();
assertType();
assertType();
assertType();
export { injectManifestOptions, turboPartial };