UNPKG

@sanity/tsdoc

Version:

Generate API reference docs from TypeScript projects and store in a Sanity-friendly JSON format. Render a static frontend, or as React components.

71 lines (70 loc) 3.4 kB
"use strict"; var client = require("@sanity/client"), tsdoc = require("@sanity/tsdoc"), chalk = require("chalk"), mkdirp = require("mkdirp"), path = require("path"), pkgUp = require("pkg-up"); function _interopDefaultCompat(e) { return e && typeof e == "object" && "default" in e ? e : { default: e }; } var chalk__default = /* @__PURE__ */ _interopDefaultCompat(chalk), mkdirp__default = /* @__PURE__ */ _interopDefaultCompat(mkdirp), path__default = /* @__PURE__ */ _interopDefaultCompat(path), pkgUp__default = /* @__PURE__ */ _interopDefaultCompat(pkgUp); async function _fetchPackageDocsFromSanity(sanity) { return await client.createClient({ ...sanity, apiVersion: "2022-10-01", useCdn: !1 }).fetch('*[_type == "api.package"]'); } async function etlCommand(options) { const { cwd, outDir = "etc", tsconfig: tsconfigPath = "tsconfig.json", strict = !1 } = options, packageJsonPath = await pkgUp__default.default({ cwd }); if (!packageJsonPath) throw new Error("package.json not found"); const packagePath = path__default.default.dirname(packageJsonPath), config = await tsdoc._loadConfig({ packagePath }); let pkgDocs = []; config?.output?.sanity && (pkgDocs = await _fetchPackageDocsFromSanity(config.output.sanity)); const { pkg, results } = await tsdoc.extract({ customTags: config?.extract?.customTags, packagePath, rules: config?.extract?.rules, strict, tsconfig: config?.input?.tsconfig ?? tsconfigPath, bundledPackages: config?.input?.bundledPackages }), jsonPath = path__default.default.resolve(packagePath, outDir, `${pkg.name}/${pkg.version}.json`); for (const result of results) console.log(""), console.log(`${chalk__default.default.bgCyan(chalk__default.default.black(` ${path__default.default.join(pkg.name, result.exportPath || "")} `))} extracted from ${chalk__default.default.cyan(path__default.default.relative(".", result.typesPath))}`), tsdoc._printExtractMessages(cwd, result.messages); results.flatMap((result) => result.messages).filter((m) => m.logLevel === "error").length && process.exit(1); const currPackageDoc = pkgDocs.find((p) => [p.scope, p.name].filter(Boolean).join("/") == pkg.name); currPackageDoc && (delete currPackageDoc._createdAt, delete currPackageDoc._updatedAt); const docs = tsdoc.transform(results, { currPackageDoc, package: { version: pkg.version } }); await mkdirp__default.default(path__default.default.dirname(jsonPath)), config?.output?.sanity && !config.output?.sanity.token && console.warn( // prettier-ignore `${chalk__default.default.gray("ignore")} no token provided, skipped writing to sanity (${config.output.sanity.projectId}:${config.output.sanity.dataset})` ), await tsdoc.load(docs, { cwd, fs: { path: jsonPath }, sanity: config?.output?.sanity }), console.log(""), console.log( // prettier-ignore `${chalk__default.default.green("success")} wrote ${docs.length} documents to ${path__default.default.relative(cwd, jsonPath)}` ), config?.output?.sanity?.token && (console.log(""), console.log( // prettier-ignore `${chalk__default.default.green("success")} wrote ${docs.length} documents to Sanity (${config.output?.sanity.projectId}:${config.output?.sanity.dataset})` )); } exports.etlCommand = etlCommand; //# sourceMappingURL=index2.js.map