From 4bdc17d4a11f0ba517c6d9124d296458332c536b Mon Sep 17 00:00:00 2001
From: Jacky Zhao <j.zhao2k19@gmail.com>
Date: Sat, 03 Jun 2023 19:07:19 +0000
Subject: [PATCH] inline scripts

---
 quartz/bootstrap.mjs |   34 ++++++++++++++++++++++++++++++----
 1 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/quartz/bootstrap.mjs b/quartz/bootstrap.mjs
index 4886e3d..16a0c69 100755
--- a/quartz/bootstrap.mjs
+++ b/quartz/bootstrap.mjs
@@ -1,6 +1,7 @@
 #!/usr/bin/env node
-import { readFileSync } from 'fs'
+import { promises, readFileSync } from 'fs'
 import yargs from 'yargs'
+import path from 'path'
 import { hideBin } from 'yargs/helpers'
 import esbuild from 'esbuild'
 import chalk from 'chalk'
@@ -61,9 +62,34 @@
       jsx: "automatic",
       jsxImportSource: "preact",
       external: ["@napi-rs/simple-git", "shiki"],
-      plugins: [sassPlugin({
-        type: 'css-text'
-      })]
+      plugins: [
+        sassPlugin({
+          type: 'css-text'
+        }),
+        {
+          name: 'inline-script-loader',
+          setup(build) {
+            build.onLoad({ filter: /\.inline\.(ts|js)$/ }, async (args) => {
+              let text = await promises.readFile(args.path, 'utf8')
+              const transpiled = await esbuild.build({
+                stdin: {
+                  contents: text,
+                  sourcefile: path.relative(path.resolve('.'), args.path),
+                },
+                write: false,
+                bundle: true,
+                platform: "browser",
+                format: "esm",
+              })
+              const rawMod = transpiled.outputFiles[0].text
+              return {
+                contents: rawMod,
+                loader: 'text',
+              }
+            })
+          }
+        }
+      ]
     }).catch(err => {
       console.error(`${chalk.red("Couldn't parse Quartz configuration:")} ${fp}`)
       console.log(`Reason: ${chalk.grey(err)}`)

--
Gitblit v1.10.0