Files
medusa-store/docs-util/packages/scripts/generate-reference.ts
Shahed Nasser 7d650771d1 docs: generate medusa-react reference (#6004)
* add new plugin for better organization

* added handling in theme for mutations and query types

* added tsdoc to hooks

* added tsdocs to utility functions

* added tsdoc to providers

* generated reference

* general fixes for generated reference

* generated api reference specs + general fixes

* add missing import react

* split utilities into different directories

* added overview page

* added link to customer authentication section

* fix lint errors

* added changeset

* fix readme

* fixed build error

* added expand fields + other sections to overview

* updated what's new section

* general refactoring

* remove unnecessary query field

* fix links

* added ignoreApi option
2024-01-05 17:03:38 +02:00

101 lines
2.7 KiB
JavaScript

#!/usr/bin/env node
import path from "path"
import fs from "fs"
import { exec } from "child_process"
import { globSync } from "glob"
import randomColor from "randomcolor"
import chalk, { ChalkInstance } from "chalk"
import { createRequire } from "node:module"
const require = createRequire(import.meta.url)
const referenceNames = process.argv.slice(2) || ["all"]
const basePath = path.join(require.resolve("typedoc-config"), "..")
let generatedCount = 0
let totalCount = referenceNames.length
let ranMerger = false
if (!referenceNames.length) {
console.error(
chalk.red(
"No reference names specified. Please specify the name of a reference to generate, or use `all` to generate all references."
)
)
process.exit(1)
}
referenceNames.forEach((name) => {
if (name === "all") {
// generate reference for all configration files in
// `typedoc-config` directory, except for files starting
// with `_`
const files = globSync("[^_]**.js", {
cwd: basePath,
})
totalCount = files.length
files.forEach((file) => generateReference(file))
} else if (name === "merge") {
runMerger()
} else {
generateReference(`${name}.js`)
}
})
export function generateReference(referenceName: string) {
const configPathName = path.join(basePath, referenceName)
// check if the config file exists
if (!fs.existsSync(configPathName)) {
console.log(
chalk.red(
`Config file for ${referenceName} doesn't exist. Make sure to create it in ${configPathName}`
)
)
return
}
const colorLog = chalk.hex(randomColor())
formatColoredLog(colorLog, referenceName, "Generating reference...")
const typedocProcess = exec(`typedoc --options ${configPathName}`)
typedocProcess.stdout?.on("data", (chunk: string) => {
formatColoredLog(colorLog, referenceName, chunk.trim())
})
typedocProcess.on("exit", (code) => {
formatColoredLog(colorLog, referenceName, "Finished Generating reference.")
generatedCount++
if (generatedCount >= totalCount && !ranMerger && code !== 1) {
runMerger()
}
})
typedocProcess.stderr?.on("data", (chunk: string) => {
// split multiline outputs
const split: string[] = chunk.split("\n")
split.forEach((line: string) => {
if (!line.length) {
return
}
formatColoredLog(
colorLog,
referenceName,
`${chalk.red("An error occurred")}: ${line.trim()}`
)
})
})
}
function formatColoredLog(
chalkInstance: ChalkInstance,
title: string,
message: string
) {
console.log(`${chalkInstance(title)} -> ${message}`)
}
function runMerger() {
// run merger
console.log(chalk.bgBlueBright("\n\nRunning Merger\n\n"))
ranMerger = true
generateReference("_merger.js")
}