@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
JavaScript
;
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