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
57 lines (56 loc) • 2.49 kB
JavaScript
;
var promises = require("node:fs/promises"), path = require("node:path"), node_worker_threads = require("node:worker_threads"), readPkgUp = require("read-pkg-up"), telemetry = require("@sanity/telemetry");
function _interopDefaultCompat(e) {
return e && typeof e == "object" && "default" in e ? e : { default: e };
}
var readPkgUp__default = /* @__PURE__ */ _interopDefaultCompat(readPkgUp);
const SchemaExtractedTrace = telemetry.defineTrace({
name: "Schema Extracted",
version: 0,
description: "Trace emitted when extracting schema"
});
async function extractAction(args, { workDir, output, telemetry: telemetry2 }) {
var _a;
const flags = args.extOptions, formatFlag = flags.format || "groq-type-nodes", enforceRequiredFields = flags["enforce-required-fields"] || !1, rootPkgPath = (_a = readPkgUp__default.default.sync({ cwd: __dirname })) == null ? void 0 : _a.path;
if (!rootPkgPath)
throw new Error("Could not find root directory for `sanity` package");
const workerPath = path.join(
path.dirname(rootPkgPath),
"lib",
"_internal",
"cli",
"threads",
"extractSchema.js"
), spinner = output.spinner({}).start(
enforceRequiredFields ? "Extracting schema, with enforced required fields" : "Extracting schema"
), trace = telemetry2.trace(SchemaExtractedTrace);
trace.start();
const worker = new node_worker_threads.Worker(workerPath, {
workerData: {
workDir,
workspaceName: flags.workspace,
enforceRequiredFields,
format: formatFlag
},
// eslint-disable-next-line no-process-env
env: process.env
});
try {
const { schema } = await new Promise((resolve, reject) => {
worker.addListener("message", resolve), worker.addListener("error", reject);
});
trace.log({
schemaAllTypesCount: schema.length,
schemaDocumentTypesCount: schema.filter((type) => type.type === "document").length,
schemaTypesCount: schema.filter((type) => type.type === "type").length,
enforceRequiredFields,
schemaFormat: formatFlag
});
const path$1 = flags.path || path.join(process.cwd(), "schema.json");
spinner.text = `Writing schema to ${path$1}`, await promises.writeFile(path$1, JSON.stringify(schema, null, 2)), trace.complete(), spinner.succeed("Extracted schema");
} catch (err) {
throw trace.error(err), spinner.fail("Failed to extract schema"), err;
}
}
exports.default = extractAction;
//# sourceMappingURL=extractAction.js.map