docs: make the typedoc generation portable
authorJérôme Benoit <jerome.benoit@sap.com>
Sat, 12 Aug 2023 09:16:01 +0000 (11:16 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Sat, 12 Aug 2023 09:16:01 +0000 (11:16 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
.eslintrc.js
.gitignore
package.json
typedoc.json
typedoc.mjs [new file with mode: 0644]

index 3a35e685c40aa1c39f042d9e326c48be5c0fc0d5..0188819b8ba2b84d174ae01561cfbc6e8340724a 100644 (file)
@@ -66,6 +66,7 @@ module.exports = defineConfig({
           'jsdoc',
           'microjob',
           'mjs',
+          'npx',
           'num',
           'os',
           'perf',
index 2dea9b803b9df157d7035b4a7f92028646931eb7..404473ff6a0747e4ff8bd0926bea42b74cbe02e6 100644 (file)
@@ -77,5 +77,6 @@ package-lock.json
 *.bak
 lib
 dist
+tmp
 reports/
 benchmarks/internal/results/
index 4c07c9766e4f81d27834a739390bdd49aa90096b..d2f72a57c58e2849aef769c11e134b12379a27e7 100644 (file)
@@ -31,7 +31,7 @@
     "lint:fix": "eslint . --cache --fix",
     "lint:report": "eslint . --cache --format json --output-file reports/eslint.json",
     "release": "release-it",
-    "typedoc": "mkdir ./tmp && cp ./docs/*.md ./tmp && typedoc && cp ./tmp/*.md ./docs && rm -rf ./tmp",
+    "typedoc": "node typedoc.mjs",
     "prepublishOnly": "pnpm build:prod"
   },
   "ts-standard": {
index 0512900bb0fc6abfdcf706f574df8e5d4b4177d8..d95b2637da70ad05647f77debbd555d386571158 100644 (file)
@@ -1,6 +1,6 @@
 {
   "$schema": "https://typedoc.org/schema.json",
-  "tsconfig": "./tsconfig.production.json",
+  "tsconfig": "tsconfig.production.json",
   "entryPoints": ["src"],
   "out": "docs",
   "readme": "none",
diff --git a/typedoc.mjs b/typedoc.mjs
new file mode 100644 (file)
index 0000000..b9f9cc9
--- /dev/null
@@ -0,0 +1,32 @@
+import { copyFileSync, mkdirSync, readdirSync, rmSync } from 'node:fs'
+import { dirname, join } from 'node:path'
+import { fileURLToPath } from 'node:url'
+import { execSync } from 'node:child_process'
+
+try {
+  mkdirSync(join(dirname(fileURLToPath(import.meta.url)), 'tmp'), {
+    recursive: true
+  })
+  const markdownFiles = readdirSync(
+    join(dirname(fileURLToPath(import.meta.url)), 'docs')
+  ).filter(file => file.endsWith('.md'))
+  for (const markdownFile of markdownFiles) {
+    copyFileSync(
+      join(dirname(fileURLToPath(import.meta.url)), 'docs', markdownFile),
+      join(dirname(fileURLToPath(import.meta.url)), 'tmp', markdownFile)
+    )
+  }
+  execSync('npx typedoc', { stdio: 'inherit' })
+  for (const markdownFile of markdownFiles) {
+    copyFileSync(
+      join(dirname(fileURLToPath(import.meta.url)), 'tmp', markdownFile),
+      join(dirname(fileURLToPath(import.meta.url)), 'docs', markdownFile)
+    )
+  }
+  rmSync(join(dirname(fileURLToPath(import.meta.url)), 'tmp'), {
+    recursive: true,
+    force: true
+  })
+} catch (e) {
+  console.error(e)
+}