sanity
Version:
Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches
180 lines (179 loc) • 8.65 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
var __copyProps = (to, from, except, desc) => {
if (from && typeof from == "object" || typeof from == "function")
for (let key of __getOwnPropNames(from))
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
mod
));
var fs = require("node:fs"), path = require("node:path"), resolveFrom = require("resolve-from"), semver = require("semver"), runtime = require("./runtime.js"), chalk = require("chalk");
function _interopDefaultCompat(e) {
return e && typeof e == "object" && "default" in e ? e : { default: e };
}
var fs__default = /* @__PURE__ */ _interopDefaultCompat(fs), path__default = /* @__PURE__ */ _interopDefaultCompat(path), resolveFrom__default = /* @__PURE__ */ _interopDefaultCompat(resolveFrom), semver__default = /* @__PURE__ */ _interopDefaultCompat(semver), chalk__default = /* @__PURE__ */ _interopDefaultCompat(chalk);
const VENDOR_DIR = "vendor", VENDOR_IMPORTS = {
react: {
"^19.0.0": {
".": "./cjs/react.production.js",
"./jsx-runtime": "./cjs/react-jsx-runtime.production.js",
"./jsx-dev-runtime": "./cjs/react-jsx-dev-runtime.production.js",
"./compiler-runtime": "./cjs/react-compiler-runtime.production.js",
"./package.json": "./package.json"
},
"^18.0.0": {
".": "./cjs/react.production.min.js",
"./jsx-runtime": "./cjs/react-jsx-runtime.production.min.js",
"./jsx-dev-runtime": "./cjs/react-jsx-dev-runtime.production.min.js",
"./package.json": "./package.json"
}
},
"react-dom": {
"^19.0.0": {
".": "./cjs/react-dom.production.js",
"./client": "./cjs/react-dom-client.production.js",
"./server": "./cjs/react-dom-server-legacy.browser.production.js",
"./server.browser": "./cjs/react-dom-server-legacy.browser.production.js",
"./static": "./cjs/react-dom-server.browser.production.js",
"./static.browser": "./cjs/react-dom-server.browser.production.js",
"./package.json": "./package.json"
},
"^18.0.0": {
".": "./cjs/react-dom.production.min.js",
"./client": "./cjs/react-dom.production.min.js",
"./server": "./cjs/react-dom-server-legacy.browser.production.min.js",
"./server.browser": "./cjs/react-dom-server-legacy.browser.production.min.js",
"./package.json": "./package.json"
}
},
"styled-components": {
"^6.1.0": {
".": "./dist/styled-components.esm.js",
"./package.json": "./package.json"
}
}
};
async function buildVendorDependencies({
cwd,
outputDir,
basePath
}) {
const dir = path__default.default.relative(process.cwd(), path__default.default.resolve(cwd)), entry = {}, imports = {};
for (const [packageName, ranges] of Object.entries(VENDOR_IMPORTS)) {
const packageJsonPath = resolveFrom__default.default.silent(cwd, path__default.default.join(packageName, "package.json"));
if (!packageJsonPath)
throw new Error(`Could not find package.json for package '${packageName}' from directory '${dir}'. Is it installed?`);
let packageJson;
try {
packageJson = JSON.parse(await fs__default.default.promises.readFile(packageJsonPath, "utf-8"));
} catch (e) {
const message = `Could not read package.json for package '${packageName}' from directory '${dir}'`;
throw typeof e?.message == "string" ? (e.message = `${message}: ${e.message}`, e) : new Error(message, {
cause: e
});
}
const version = semver__default.default.coerce(packageJson.version)?.version;
if (!version)
throw new Error(`Could not parse version '${packageJson.version}' from '${packageName}'`);
const sortedRanges = Object.keys(ranges).sort((range1, range2) => {
const min1 = semver__default.default.minVersion(range1), min2 = semver__default.default.minVersion(range2);
if (!min1) throw new Error(`Could not parse range '${range1}'`);
if (!min2) throw new Error(`Could not parse range '${range2}'`);
return semver__default.default.rcompare(min1.version, min2.version);
}), matchedRange = sortedRanges.find((range) => semver__default.default.satisfies(version, range));
if (!matchedRange) {
const min = semver__default.default.minVersion(sortedRanges[sortedRanges.length - 1]);
throw min ? semver__default.default.gt(min.version, version) ? new Error(`Package '${packageName}' requires at least ${min.version}.`) : new Error(`Version '${version}' of package '${packageName}' is not supported yet.`) : new Error(`Could not find a minimum version for package '${packageName}'`);
}
const subpaths = ranges[matchedRange];
for (const [subpath, relativeEntryPoint] of Object.entries(subpaths)) {
const packagePath = path__default.default.dirname(packageJsonPath), entryPoint = resolveFrom__default.default.silent(packagePath, relativeEntryPoint);
if (!entryPoint)
throw new Error(`Failed to resolve entry point '${path__default.default.join(packageName, relativeEntryPoint)}'. `);
const specifier = path__default.default.posix.join(packageName, subpath), chunkName = path__default.default.posix.join(packageName, path__default.default.relative(packageName, specifier) || "index");
entry[chunkName] = entryPoint, imports[specifier] = path__default.default.posix.join("/", basePath, VENDOR_DIR, `${chunkName}.mjs`);
}
}
const {
build
} = await import("vite");
let buildResult = await build({
// Define a custom cache directory so that sanity's vite cache
// does not conflict with any potential local vite projects
cacheDir: "node_modules/.sanity/vite-vendor",
root: cwd,
configFile: !1,
logLevel: "silent",
appType: "custom",
mode: "production",
define: {
"process.env.NODE_ENV": JSON.stringify("production")
},
build: {
commonjsOptions: {
strictRequires: "auto"
},
minify: !0,
emptyOutDir: !1,
// Rely on CLI to do this
outDir: path__default.default.join(outputDir, VENDOR_DIR),
lib: {
entry,
formats: ["es"]
},
rollupOptions: {
external: runtime.createExternalFromImportMap({
imports
}),
output: {
entryFileNames: "[name]-[hash].mjs",
chunkFileNames: "[name]-[hash].mjs",
exports: "named",
format: "es"
},
treeshake: {
preset: "recommended"
}
}
}
});
buildResult = Array.isArray(buildResult) ? buildResult : [buildResult];
const hashedImports = {}, output = buildResult.flatMap((i) => i.output);
for (const chunk of output)
if (chunk.type !== "asset")
for (const [specifier, originalPath] of Object.entries(imports))
originalPath.endsWith(`${chunk.name}.mjs`) && (hashedImports[specifier] = path__default.default.posix.join("/", basePath, VENDOR_DIR, chunk.fileName));
return hashedImports;
}
function formatSize(bytes) {
return chalk__default.default.cyan(`${(bytes / 1024).toFixed()} kB`);
}
function formatModuleSizes(modules) {
const lines = [];
for (const mod of modules)
lines.push(` - ${formatModuleName(mod.name)} (${formatSize(mod.renderedLength)})`);
return lines.join(`
`);
}
function formatModuleName(modName) {
const delimiter = "/node_modules/", nodeIndex = modName.lastIndexOf(delimiter);
return nodeIndex === -1 ? modName : modName.slice(nodeIndex + delimiter.length);
}
function sortModulesBySize(chunks) {
return chunks.flatMap((chunk) => chunk.modules).sort((modA, modB) => modB.renderedLength - modA.renderedLength);
}
exports.buildVendorDependencies = buildVendorDependencies;
exports.formatModuleSizes = formatModuleSizes;
exports.sortModulesBySize = sortModulesBySize;
//# sourceMappingURL=moduleFormatUtils.js.map