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
101 lines (100 loc) • 4.82 kB
JavaScript
;
var path = require("path"), util = require("util"), chalk = require("chalk"), telemetry = require("@sanity/telemetry"), rimraf$1 = require("rimraf"), previewServer = require("./previewServer.js");
require("vite");
require("./runtime.js");
require("@vitejs/plugin-react");
require("debug");
require("read-pkg-up");
require("@sanity/cli");
require("resolve-from");
require("connect-history-api-fallback");
require("fs");
require("fs/promises");
var timing = require("./timing.js");
function _interopDefaultCompat(e) {
return e && typeof e == "object" && "default" in e ? e : { default: e };
}
var path__default = /* @__PURE__ */ _interopDefaultCompat(path), chalk__default = /* @__PURE__ */ _interopDefaultCompat(chalk), rimraf__default = /* @__PURE__ */ _interopDefaultCompat(rimraf$1);
const BuildTrace = telemetry.defineTrace({
name: "Studio Build Completed",
version: 0,
description: "A Studio build completed"
}), rimraf = util.promisify(rimraf__default.default);
async function buildSanityStudio(args, context, overrides) {
var _a;
const timer = timing.getTimer(), { output, prompt, workDir, cliConfig, telemetry: telemetry$1 = telemetry.noopLogger } = context, flags = {
minify: !0,
stats: !1,
"source-maps": !1,
...args.extOptions
}, unattendedMode = !!(flags.yes || flags.y), defaultOutputDir = path__default.default.resolve(path__default.default.join(workDir, "dist")), outputDir = path__default.default.resolve(args.argsWithoutOptions[0] || defaultOutputDir);
if (await timing.checkStudioDependencyVersions(workDir), (await timing.checkRequiredDependencies(context)).didInstall)
return { didCompile: !1 };
const envVarKeys = getSanityEnvVars();
envVarKeys.length > 0 && (output.print(
`
Including the following environment variables as part of the JavaScript bundle:`
), envVarKeys.forEach((key) => output.print(`- ${key}`)), output.print(""));
let shouldClean = !0;
outputDir !== defaultOutputDir && !unattendedMode && (shouldClean = await prompt.single({
type: "confirm",
message: `Do you want to delete the existing directory (${outputDir}) first?`,
default: !0
}));
let basePath = "/";
const envBasePath = process.env.SANITY_STUDIO_BASEPATH, configBasePath = (_a = cliConfig == null ? void 0 : cliConfig.project) == null ? void 0 : _a.basePath;
overrides != null && overrides.basePath ? basePath = overrides.basePath : envBasePath ? basePath = envBasePath : configBasePath && (basePath = configBasePath), envBasePath && configBasePath && output.warn(
`Overriding configured base path (${configBasePath}) with value from environment variable (${envBasePath})`
);
let spin;
if (shouldClean) {
timer.start("cleanOutputFolder"), spin = output.spinner("Clean output folder").start(), await rimraf(outputDir);
const cleanDuration = timer.end("cleanOutputFolder");
spin.text = `Clean output folder (${cleanDuration.toFixed()}ms)`, spin.succeed();
}
spin = output.spinner("Build Sanity Studio").start();
const trace = telemetry$1.trace(BuildTrace);
trace.start();
try {
timer.start("bundleStudio");
const bundle = await previewServer.buildStaticFiles({
cwd: workDir,
outputDir,
basePath,
sourceMap: !!flags["source-maps"],
minify: !!flags.minify,
vite: cliConfig && "vite" in cliConfig ? cliConfig.vite : void 0
});
trace.log({
outputSize: bundle.chunks.flatMap((chunk) => chunk.modules.flatMap((mod) => mod.renderedLength)).reduce((sum, n) => sum + n, 0)
});
const buildDuration = timer.end("bundleStudio");
spin.text = `Build Sanity Studio (${buildDuration.toFixed()}ms)`, spin.succeed(), trace.complete(), flags.stats && (output.print(`
Largest module files:`), output.print(formatModuleSizes(sortModulesBySize(bundle.chunks).slice(0, 15))));
} catch (err) {
throw spin.fail(), trace.error(err), err;
}
return { didCompile: !0 };
}
function getSanityEnvVars(env = process.env) {
return Object.keys(env).filter((key) => key.toUpperCase().startsWith("SANITY_STUDIO_"));
}
function sortModulesBySize(chunks) {
return chunks.flatMap((chunk) => chunk.modules).sort((modA, modB) => modB.renderedLength - modA.renderedLength);
}
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 formatSize(bytes) {
return chalk__default.default.cyan(`${(bytes / 1024).toFixed()} kB`);
}
exports.default = buildSanityStudio;
//# sourceMappingURL=buildAction.js.map