From ad6ce0d73fbd015e00e59ec30bda3cc8de777832 Mon Sep 17 00:00:00 2001
From: Jacky Zhao <j.zhao2k19@gmail.com>
Date: Tue, 30 May 2023 15:02:20 +0000
Subject: [PATCH] plugin integration round 2

---
 quartz/bootstrap.mjs |   80 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 79 insertions(+), 1 deletions(-)

diff --git a/quartz/bootstrap.mjs b/quartz/bootstrap.mjs
index 0f66ea2..a8c9bca 100755
--- a/quartz/bootstrap.mjs
+++ b/quartz/bootstrap.mjs
@@ -1,2 +1,80 @@
 #!/usr/bin/env node
-console.log('hello world')
+import { readFileSync } from 'fs'
+import yargs from 'yargs'
+import { hideBin } from 'yargs/helpers'
+import esbuild from 'esbuild'
+import chalk from 'chalk'
+import requireFromString from 'require-from-string'
+
+const fp = "./quartz.config.ts"
+const { version } = JSON.parse(readFileSync("./package.json").toString())
+
+export const BuildArgv = {
+  output: {
+    string: true,
+    alias: ['o'],
+    default: 'public',
+    describe: 'output folder for files'
+  },
+  clean: {
+    boolean: true,
+    default: false,
+    describe: 'clean the output folder before building'
+  },
+  serve: {
+    boolean: true,
+    default: false,
+    describe: 'run a local server to preview your Quartz'
+  },
+  port: {
+    number: true,
+    default: 8080,
+    describe: 'port to serve Quartz on'
+  },
+  directory: {
+    string: true,
+    alias: ['d'],
+    default: 'content',
+    describe: 'directory to look for content files'
+  },
+  verbose: {
+    boolean: true,
+    alias: ['v'],
+    default: false,
+    describe: 'print out extra logging information'
+  }
+}
+
+yargs(hideBin(process.argv))
+  .scriptName("quartz")
+  .version(version)
+  .usage('$0 <cmd> [args]')
+  .command('build', 'Build Quartz into a bundle of static HTML files', BuildArgv, async (argv) => {
+    const out = await esbuild.build({
+      entryPoints: [fp],
+      write: false,
+      minifySyntax: true,
+      minifyWhitespace: true,
+      bundle: true,
+      keepNames: true,
+      platform: "node",
+      format: "cjs",
+      jsx: "automatic",
+      jsxImportSource: "preact",
+      external: ["@napi-rs/simple-git"]
+    }).catch(err => {
+      console.error(`${chalk.red("Couldn't parse Quartz configuration:")} ${fp}`)
+      console.log(`Reason: ${chalk.grey(err)}`)
+      console.log("hint: make sure all the required dependencies are installed (run `npm install`)")
+      process.exit(1)
+    })
+
+    const mod = out.outputFiles[0].text
+    const init = requireFromString(mod, fp).default
+    init(argv, version)
+  })
+  .showHelpOnFail(false)
+  .help()
+  .strict()
+  .demandCommand()
+  .argv

--
Gitblit v1.10.0