From 0b0709d393a112b84b96272297cc0bd7d37f36d4 Mon Sep 17 00:00:00 2001 From: Ed Heltzel <402910+edheltzel@users.noreply.github.com> Date: Tue, 6 Aug 2024 09:00:17 -0400 Subject: [PATCH 1/7] chore: package and readme updates - browserslist `^4.23.3` - stylelint `^16.8.1` - bun `1.1.21` --- README.md | 6 +++++- bun.lockb | Bin 168872 -> 168904 bytes package.json | 6 +++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3a32b78..2be2b7f 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,11 @@ We are assuming that you already have Node with NPM (or another package manger, We are using [Bun](https://bun.sh/) as our package manager. -But, you can swap `bun` in favor of your preferences ๐Ÿ‘‰ [NPM](https://www.npmjs.com/) , [Yarn](https://yarnpkg.com/), and and [Pnpm](https://pnpm.io). Use whatever you want ๐Ÿ‘ just be sure to update the `preview` script in `package.json` with what ever flavor you choose to use. +But, you can swap `bun` in favor of your preferences ๐Ÿ‘‰ [NPM](https://www.npmjs.com/) , [Yarn](https://yarnpkg.com/), and and [Pnpm](https://pnpm.io). Use whatever you want ๐Ÿ‘ just be sure to update the `package.json` with what ever flavor you choose to use: + - change `preview` with your preference + - change `upgrade` with your preference + - remove `preinstall` script + - remove `packageManager` from `package.json` It's highly recommended that you enable Node's [corepack](https://nodejs.org/api/corepack.html), this way Yarn and PNPM are included in your toolbox without the need to install them separately. diff --git a/bun.lockb b/bun.lockb index 31042c13669174134d68fa151a7ade736b6d8fc3..6fd20a7acd3664ff50743a51bfb8435274419763 100755 GIT binary patch delta 3654 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 K0i?SMH~$V5lLJ%$ delta 3783 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 T?6?tk3s@01G;`9e9KQ5-|H&j2 diff --git a/package.json b/package.json index 6f1c654..8195d2f 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "@11ty/eleventy-navigation": "^0.3.5", "@11ty/eleventy-plugin-syntaxhighlight": "^5.0.0", "@biomejs/biome": "1.8.3", - "browserslist": "^4.23.2", + "browserslist": "^4.23.3", "eleventy-plugin-embed-everything": "^1.18.2", "esbuild": "^0.23.0", "fast-glob": "^3.3.2", @@ -20,7 +20,7 @@ "markdown-it": "^14.1.0", "markdown-it-attrs": "^4.1.6", "markdown-it-bracketed-spans": "^1.0.1", - "stylelint": "^16.7.0", + "stylelint": "^16.8.1", "stylelint-config-standard": "^36.0.1" }, "dependencies": { @@ -49,5 +49,5 @@ "upgrade": "bunx npm-check-updates -ui", "release": "gh release create v$npm_package_version --generate-notes --latest" }, - "packageManager": "bun@1.1.20" + "packageManager": "bun@1.1.21" } From fbc69827d21338f5a9c4bfeee3c416082aa76cb4 Mon Sep 17 00:00:00 2001 From: Ed Heltzel <402910+edheltzel@users.noreply.github.com> Date: Tue, 6 Aug 2024 10:46:37 -0400 Subject: [PATCH 2/7] minor: .node-version to .nvmrc --- .node-version => .nvmrc | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .node-version => .nvmrc (100%) diff --git a/.node-version b/.nvmrc similarity index 100% rename from .node-version rename to .nvmrc From 3a51e1765c53299ccf19c614fea6f12d8a20f164 Mon Sep 17 00:00:00 2001 From: Ed Heltzel <402910+edheltzel@users.noreply.github.com> Date: Tue, 6 Aug 2024 13:22:02 -0400 Subject: [PATCH 3/7] chore: change environment var from "production" to "prod" in scripts and files for consistency and clarity --- .env.example | 1 + README.md | 2 +- package.json | 2 +- src/_flightdeck/transforms.js | 2 +- src/_flightdeck/transforms/_legacyEsBuild.js | 2 +- src/_flightdeck/transforms/_scss.js | 2 +- src/_flightdeck/transforms/esBuild.js | 2 +- src/_includes/partials/meta.njk | 2 +- 8 files changed, 8 insertions(+), 7 deletions(-) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..053059e --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +ENV=dev diff --git a/README.md b/README.md index 2be2b7f..f530c0a 100644 --- a/README.md +++ b/README.md @@ -216,7 +216,7 @@ bun run start bun run clean && bun run build:11ty $ bun run build:11ty - ENV=production eleventy + ENV=prod eleventy $ bun run debug DEBUG=Eleventy* eleventy diff --git a/package.json b/package.json index 8195d2f..17381bc 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "scripts": { "preinstall": "npx only-allow bun", "start": "eleventy --serve", - "build": "ENV=production eleventy", + "build": "ENV=prod eleventy", "debug": "DEBUG=Eleventy* eleventy", "preview": "bun run clean && bun run build && bunx http-server dist -p 4000", "check": "biome check", diff --git a/src/_flightdeck/transforms.js b/src/_flightdeck/transforms.js index c344a0b..c0e2d2b 100644 --- a/src/_flightdeck/transforms.js +++ b/src/_flightdeck/transforms.js @@ -9,7 +9,7 @@ * */ -const isProd = process.env.ENV === "production"; +const isProd = process.env.ENV === "prod"; const { markdownIt } = require("./transforms/markdownIt"); // markdown-it plugins const { transformImages } = require("./transforms/allimages"); // optimize all images in src/assets/images const minifyHtml = require("./transforms/minifyHtml"); diff --git a/src/_flightdeck/transforms/_legacyEsBuild.js b/src/_flightdeck/transforms/_legacyEsBuild.js index 08b0712..dcc69de 100644 --- a/src/_flightdeck/transforms/_legacyEsBuild.js +++ b/src/_flightdeck/transforms/_legacyEsBuild.js @@ -6,7 +6,7 @@ * @requires esbuild */ -const isProd = process.env.ENV === "production"; +const isProd = process.env.ENV === "prod"; const esbuild = require("esbuild"); /** diff --git a/src/_flightdeck/transforms/_scss.js b/src/_flightdeck/transforms/_scss.js index 0d3beba..11e5b4f 100644 --- a/src/_flightdeck/transforms/_scss.js +++ b/src/_flightdeck/transforms/_scss.js @@ -42,7 +42,7 @@ const transformScss = (config) => { loadPaths: ["node_modules/@picocss/pico/scss", "node_modules/@picocss/pico/scss/themes/default"], }, postcss: postcss([autoprefixer, cssDeclarationSorter({ order: "concentric-css" })]), - when: [{ ENV: "production" }], + when: [{ ENV: "prod" }], }, ]); }; diff --git a/src/_flightdeck/transforms/esBuild.js b/src/_flightdeck/transforms/esBuild.js index fd4007e..678cf6b 100644 --- a/src/_flightdeck/transforms/esBuild.js +++ b/src/_flightdeck/transforms/esBuild.js @@ -7,7 +7,7 @@ * @requires path */ -const isProd = process.env.ENV === "production"; +const isProd = process.env.ENV === "prod"; const esbuild = require("esbuild"); const path = require("node:path"); diff --git a/src/_includes/partials/meta.njk b/src/_includes/partials/meta.njk index aa506ac..906048a 100644 --- a/src/_includes/partials/meta.njk +++ b/src/_includes/partials/meta.njk @@ -19,6 +19,6 @@ -{% if site.env === "production" %} +{% if site.env === "prod" %} {% include "utilities/analytics.njk" %} {% endif %} From 049274ac54422c98872b94e27f1787911f6bfe08 Mon Sep 17 00:00:00 2001 From: Ed Heltzel <402910+edheltzel@users.noreply.github.com> Date: Tue, 6 Aug 2024 14:05:23 -0400 Subject: [PATCH 4/7] chore: update .editorconfig and biome.json to use tabs for indentation, remove deprecated .stylelintrc.json file with biome 1.8.3 css linting/formatting are available. one less depends --- .editorconfig | 8 ++++---- .stylelintrc.json | 11 ----------- biome.json | 11 ++++++++++- bun.lockb | Bin 168904 -> 136944 bytes package.json | 8 +++----- 5 files changed, 17 insertions(+), 21 deletions(-) delete mode 100644 .stylelintrc.json diff --git a/.editorconfig b/.editorconfig index f758142..9b5bae3 100644 --- a/.editorconfig +++ b/.editorconfig @@ -6,7 +6,7 @@ root = true charset = utf-8 end_of_line = lf indent_size = 2 -indent_style = space +indent_style = tab insert_final_newline = true trim_trailing_whitespace = true @@ -15,13 +15,13 @@ trim_trailing_whitespace = false indent_size = 2 [*.{njk,nunjucks,liquid,html}] -indent_style = space +indent_style = tab indent_size = 2 [*.{css,scss}] -indent_style = space +indent_style = tab indent_size = 2 [*.{json,yaml,yml}] -indent_style = space +indent_style = tab indent_size = 2 diff --git a/.stylelintrc.json b/.stylelintrc.json deleted file mode 100644 index c6af60f..0000000 --- a/.stylelintrc.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": [ - "stylelint-config-standard" - ], - "rules": { - "property-no-unknown": null, - "at-rule-no-unknown": null, - "selector-class-pattern": null, - "import-notation": null - } -} diff --git a/biome.json b/biome.json index e1e8159..fc4c5a5 100644 --- a/biome.json +++ b/biome.json @@ -7,7 +7,7 @@ }, "formatter": { "enabled": true, - "indentStyle": "space", + "indentStyle": "tab", "lineWidth": 120 }, "javascript": { @@ -17,6 +17,15 @@ }, "globals": ["$", "_", "externalVariable"] }, + "css":{ + "formatter":{ + "enabled": true, + "lineWidth": 120 + }, + "linter":{ + "enabled": true + } + }, "files": { "ignore": [ "./node_modules", diff --git a/bun.lockb b/bun.lockb index 6fd20a7acd3664ff50743a51bfb8435274419763..56ccf782dee88f67c5c5bbadc762081fb302a7a4 100755 GIT binary patch delta 24680 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 Date: Tue, 6 Aug 2024 14:31:25 -0400 Subject: [PATCH 5/7] feature: improves theme toggle updated theme toggle to include auto mode if users prefer dark mode. --- src/_includes/layouts/base.njk | 2 +- src/assets/js/components/toggle-theme.js | 25 ++++++++++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/_includes/layouts/base.njk b/src/_includes/layouts/base.njk index 9a4678e..959641d 100644 --- a/src/_includes/layouts/base.njk +++ b/src/_includes/layouts/base.njk @@ -1,7 +1,7 @@ {%- include "partials/meta.njk" -%} diff --git a/src/assets/js/components/toggle-theme.js b/src/assets/js/components/toggle-theme.js index f98965f..cca8d57 100644 --- a/src/assets/js/components/toggle-theme.js +++ b/src/assets/js/components/toggle-theme.js @@ -6,15 +6,24 @@ */ export default function toggleTheme() { return { - /** @type {boolean} */ - darkMode: localStorage.getItem("darkMode") === "true", + darkMode: localStorage.getItem("themeMode") || "auto", - /** - * Toggle dark mode - */ - toggleDarkMode() { - this.darkMode = !this.darkMode; - localStorage.setItem("darkMode", String(this.darkMode)); + get isDarkMode() { + if (this.darkMode === "auto") { + return window.matchMedia("(prefers-color-scheme: dark)").matches; + } + return this.darkMode === "dark"; }, + + toggleDarkMode() { + // If it's auto, set it based on current system preference + if (this.darkMode === "auto") { + this.darkMode = this.isDarkMode ? "light" : "dark"; + } else { + // Simply toggle between dark and light + this.darkMode = this.darkMode === "dark" ? "light" : "dark"; + } + localStorage.setItem("themeMode", this.darkMode); + } }; } From f766a2280400d30c392baf61fbf5a7ed488e6eb5 Mon Sep 17 00:00:00 2001 From: Ed Heltzel <402910+edheltzel@users.noreply.github.com> Date: Tue, 6 Aug 2024 14:31:58 -0400 Subject: [PATCH 6/7] chore: update server port in workflow.js from 4321 to 54321 for fun :) --- src/_flightdeck/workflow.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_flightdeck/workflow.js b/src/_flightdeck/workflow.js index 434c1b9..d1dd964 100644 --- a/src/_flightdeck/workflow.js +++ b/src/_flightdeck/workflow.js @@ -11,7 +11,7 @@ module.exports = (config, options) => { config.setQuietMode(true); // reduce console config.setServerOptions({ - port: 4321, // like Astro + port: 54321, // like Astro showVersion: true, // show the server version number on the command line showAllHosts: false, // show local network IP address for device testing }); From 2a5be7c89791ced2eefd28cd95ed6858940be1d8 Mon Sep 17 00:00:00 2001 From: Ed Heltzel <402910+edheltzel@users.noreply.github.com> Date: Tue, 6 Aug 2024 14:36:44 -0400 Subject: [PATCH 7/7] docs: update README.md for improved command descriptions and updated dependency list; added `preinstall` command details --- README.md | 106 +++++++++++++++++++++++++++--------------------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index f530c0a..0d1939a 100644 --- a/README.md +++ b/README.md @@ -168,25 +168,24 @@ bun run install see all dependencies bun pm ls - ~/Developer/flightdeck node_modules (581) - โ”œโ”€โ”€ @11ty/eleventy@2.0.1 - โ”œโ”€โ”€ @11ty/eleventy-img@4.0.2 - โ”œโ”€โ”€ @11ty/eleventy-navigation@0.3.5 - โ”œโ”€โ”€ @11ty/eleventy-plugin-syntaxhighlight@5.0.0 - โ”œโ”€โ”€ @alpinejs/persist@3.14.1 - โ”œโ”€โ”€ @biomejs/biome@1.8.3 - โ”œโ”€โ”€ alpinejs@3.14.1 - โ”œโ”€โ”€ browserslist@4.23.2 - โ”œโ”€โ”€ eleventy-plugin-embed-everything@1.18.2 - โ”œโ”€โ”€ esbuild@0.23.0 - โ”œโ”€โ”€ fast-glob@3.3.2 - โ”œโ”€โ”€ html-minifier@4.0.0 - โ”œโ”€โ”€ lightningcss@1.25.1 - โ”œโ”€โ”€ lightningcss-cli@1.25.1 - โ”œโ”€โ”€ markdown-it@14.1.0 - โ”œโ”€โ”€ markdown-it-attrs@4.1.6 - โ”œโ”€โ”€ stylelint@16.7.0 - โ””โ”€โ”€ stylelint-config-standard@36.0.1 + ~/Developer/flightdeck node_modules (465) + โ”œโ”€โ”€ @11ty/eleventy@2.0.1 + โ”œโ”€โ”€ @11ty/eleventy-img@4.0.2 + โ”œโ”€โ”€ @11ty/eleventy-navigation@0.3.5 + โ”œโ”€โ”€ @11ty/eleventy-plugin-syntaxhighlight@5.0.0 + โ”œโ”€โ”€ @alpinejs/persist@3.14.1 + โ”œโ”€โ”€ @biomejs/biome@1.8.3 + โ”œโ”€โ”€ alpinejs@3.14.1 + โ”œโ”€โ”€ browserslist@4.23.3 + โ”œโ”€โ”€ eleventy-plugin-embed-everything@1.18.2 + โ”œโ”€โ”€ esbuild@0.23.0 + โ”œโ”€โ”€ fast-glob@3.3.2 + โ”œโ”€โ”€ html-minifier@4.0.0 + โ”œโ”€โ”€ lightningcss@1.25.1 + โ”œโ”€โ”€ lightningcss-cli@1.25.1 + โ”œโ”€โ”€ markdown-it@14.1.0 + โ”œโ”€โ”€ markdown-it-attrs@4.1.6 + โ””โ”€โ”€ markdown-it-bracketed-spans@1.0.1

(back to top)

@@ -205,65 +204,66 @@ bun run start
Available Run Commands - package.json scripts (14 found): - $ bun run start - eleventy --serve --incremental + package.json scripts (13 found): + $ bun run preinstall + npx only-allow bun - $ bun run restart - bun run clean && bun run start + $ bun run start + eleventy --serve - $ bun run build - bun run clean && bun run build:11ty + $ bun run build + ENV=prod eleventy - $ bun run build:11ty - ENV=prod eleventy + $ bun run debug + DEBUG=Eleventy* eleventy - $ bun run debug - DEBUG=Eleventy* eleventy + $ bun run deploy + wrangler pages deploy dist --project-name my-flightdeck --commit-message \"local build & deploy\" - $ bun run preview - bunx http-server dist -p 4000 + $ bun run preview + bun run clean && bun run build && bunx http-server dist -p 54321 - $ bun run check - biome check + $ bun run check + biome check - $ bun run format - biome format -- + $ bun run format + biome format -- - $ bun run lint - biome lint -- + $ bun run lint + biome lint -- - $ bun run lint:css - stylelint \"src/**/*.css\" --fix + $ bun run clean + ./.scrub.sh site - $ bun run clean - ./.scrub.sh site + $ bun run purge + ./.scrub.sh purge - $ bun run purge - ./.scrub.sh purge + $ bun run upgrade + bunx npm-check-updates -ui - $ bun run upgrade - bunx npm-check-updates -ui - - $ bun run release - gh release create v$npm_package_version --generate-notes --latest + $ bun run release + gh release create v$npm_package_version --generate-notes --latest
+- `preinstall` command - runs `npx only-allow bun` to ensure that only Bun is installed. +- `start` command - starts the development server with Eleventy. - `build` command - executes the production build of your site with Eleventy, includes HTML minification, compressed Sass, optimized images, and bundled javascript. - for our workflow, Cloudflare handles the DNS while Cloudflare Pages does the building and hosting - Cloudflare's Auto Minify minifies the HTML, CSS, and JS. You can easily add minification to the build process by adding a plugin to Eleventy. +- `debug` command - runs the development server with Eleventy with debug logging enabled. +- `deploy` command - deploys the "manual" production build to Cloudflare Pages. - `preview` command - spins up a local server to preview the production build. -- `check` command - runs biome lint and format at the same time JS/TS, see `biome.json`. +- `check` command - runs biome lint and format at the same time JS/TS/CSS, see `biome.json`. - ie: `bun run check ./src/assets/js/app.js` -- `format` command - uses biome to format JS/TS, see `biome.json`. +- `format` command - uses biome to format JS/TS/CSS, see `biome.json`. - ie: `bun run format ./src/assets/js/app.js` -- `lint` command - uses biome to lint JS/TS, see `biome.json`. +- `lint` command - uses biome to lint JS/TS/CSS, see `biome.json`. - ie: `bun run lint ./src/assets/js/app.js` -- `lint:css` command - uses stylelint to find issues in your css. - `clean` command - scrubs/removes the `dist/` and `.cache` directories - `purge` command - scrubs/removes the `dist/`, `.cache`, `node_modules`, and any lock files from npm, yarn, pnpm or bun. - ๐Ÿงผ A fresh install. - **๐Ÿ‘€ NOTE: Both `clean` and `purge` are executed from a bash script** - `upgrade` command - uses `bunx npm-check-updates -ui` to upgrade dependencies to their latest versions and updates the `package.json` - this is a work around for `bun run upgrade` not working as expected or how other package managers work. +- `release` command - creates a new release on GitHub.

(back to top)