diff --git a/README.md b/README.md index d936b51..4375e6a 100644 --- a/README.md +++ b/README.md @@ -25,8 +25,10 @@ import { something } from "@the-rabbit-hole/WHATEVER_YOU_WANT" ## What does corey not love about this? +- I put near-zero effort into naming things. - I'd prefer the namespace to be shorter, `@the-rabbit-hole` is a bit long. - There are lots things I don't love about nano-remix, but it works well enough for now. +- The bun tailwind plugin doesn't work with nano-remix yet, but it looks like in a future bun release it will. ## How do I run the tests? diff --git a/packages/mything/.gitignore b/packages/mything/.gitignore deleted file mode 100644 index a14702c..0000000 --- a/packages/mything/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -# dependencies (bun install) -node_modules - -# output -out -dist -*.tgz - -# code coverage -coverage -*.lcov - -# logs -logs -_.log -report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# caches -.eslintcache -.cache -*.tsbuildinfo - -# IntelliJ based IDEs -.idea - -# Finder (MacOS) folder config -.DS_Store diff --git a/packages/mything/README.md b/packages/mything/README.md deleted file mode 100644 index 2521717..0000000 --- a/packages/mything/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# bun-react-tailwind-template - -To install dependencies: - -```bash -bun install -``` - -To start a development server: - -```bash -bun dev -``` - -To run for production: - -```bash -bun start -``` - -This project was created using `bun init` in bun v1.2.16. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/packages/mything/build.ts b/packages/mything/build.ts deleted file mode 100644 index 50ad7cf..0000000 --- a/packages/mything/build.ts +++ /dev/null @@ -1,169 +0,0 @@ -#!/usr/bin/env bun -import { build, type BuildConfig } from "bun"; -import plugin from "bun-plugin-tailwind"; -import { existsSync } from "fs"; -import { rm } from "fs/promises"; -import path from "path"; - -// Print help text if requested -if (process.argv.includes("--help") || process.argv.includes("-h")) { - console.log(` -šŸ—ļø Bun Build Script - -Usage: bun run build.ts [options] - -Common Options: - --outdir Output directory (default: "dist") - --minify Enable minification (or --minify.whitespace, --minify.syntax, etc) - --source-map Sourcemap type: none|linked|inline|external - --target Build target: browser|bun|node - --format Output format: esm|cjs|iife - --splitting Enable code splitting - --packages Package handling: bundle|external - --public-path Public path for assets - --env Environment handling: inline|disable|prefix* - --conditions Package.json export conditions (comma separated) - --external External packages (comma separated) - --banner Add banner text to output - --footer Add footer text to output - --define Define global constants (e.g. --define.VERSION=1.0.0) - --help, -h Show this help message - -Example: - bun run build.ts --outdir=dist --minify --source-map=linked --external=react,react-dom -`); - process.exit(0); -} - -// Helper function to convert kebab-case to camelCase -const toCamelCase = (str: string): string => { - return str.replace(/-([a-z])/g, g => g[1].toUpperCase()); -}; - -// Helper function to parse a value into appropriate type -const parseValue = (value: string): any => { - // Handle true/false strings - if (value === "true") return true; - if (value === "false") return false; - - // Handle numbers - if (/^\d+$/.test(value)) return parseInt(value, 10); - if (/^\d*\.\d+$/.test(value)) return parseFloat(value); - - // Handle arrays (comma-separated) - if (value.includes(",")) return value.split(",").map(v => v.trim()); - - // Default to string - return value; -}; - -// Magical argument parser that converts CLI args to BuildConfig -function parseArgs(): Partial { - const config: Record = {}; - const args = process.argv.slice(2); - - for (let i = 0; i < args.length; i++) { - const arg = args[i]; - if (!arg.startsWith("--")) continue; - - // Handle --no-* flags - if (arg.startsWith("--no-")) { - const key = toCamelCase(arg.slice(5)); - config[key] = false; - continue; - } - - // Handle --flag (boolean true) - if (!arg.includes("=") && (i === args.length - 1 || args[i + 1].startsWith("--"))) { - const key = toCamelCase(arg.slice(2)); - config[key] = true; - continue; - } - - // Handle --key=value or --key value - let key: string; - let value: string; - - if (arg.includes("=")) { - [key, value] = arg.slice(2).split("=", 2); - } else { - key = arg.slice(2); - value = args[++i]; - } - - // Convert kebab-case key to camelCase - key = toCamelCase(key); - - // Handle nested properties (e.g. --minify.whitespace) - if (key.includes(".")) { - const [parentKey, childKey] = key.split("."); - config[parentKey] = config[parentKey] || {}; - config[parentKey][childKey] = parseValue(value); - } else { - config[key] = parseValue(value); - } - } - - return config as Partial; -} - -// Helper function to format file sizes -const formatFileSize = (bytes: number): string => { - const units = ["B", "KB", "MB", "GB"]; - let size = bytes; - let unitIndex = 0; - - while (size >= 1024 && unitIndex < units.length - 1) { - size /= 1024; - unitIndex++; - } - - return `${size.toFixed(2)} ${units[unitIndex]}`; -}; - -console.log("\nšŸš€ Starting build process...\n"); - -// Parse CLI arguments with our magical parser -const cliConfig = parseArgs(); -const outdir = cliConfig.outdir || path.join(process.cwd(), "dist"); - -if (existsSync(outdir)) { - console.log(`šŸ—‘ļø Cleaning previous build at ${outdir}`); - await rm(outdir, { recursive: true, force: true }); -} - -const start = performance.now(); - -// Scan for all HTML files in the project -const entrypoints = [...new Bun.Glob("**.html").scanSync("src")] - .map(a => path.resolve("src", a)) - .filter(dir => !dir.includes("node_modules")); -console.log(`šŸ“„ Found ${entrypoints.length} HTML ${entrypoints.length === 1 ? "file" : "files"} to process\n`); - -// Build all the HTML files -const result = await build({ - entrypoints, - outdir, - plugins: [plugin], - minify: true, - target: "browser", - sourcemap: "linked", - define: { - "process.env.NODE_ENV": JSON.stringify("production"), - }, - ...cliConfig, // Merge in any CLI-provided options -}); - -// Print the results -const end = performance.now(); - -const outputTable = result.outputs.map(output => ({ - "File": path.relative(process.cwd(), output.path), - "Type": output.kind, - "Size": formatFileSize(output.size), -})); - -console.table(outputTable); -const buildTime = (end - start).toFixed(2); - -console.log(`\nāœ… Build completed in ${buildTime}ms\n`); diff --git a/packages/mything/bun-env.d.ts b/packages/mything/bun-env.d.ts deleted file mode 100644 index 72f1c26..0000000 --- a/packages/mything/bun-env.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Generated by `bun init` - -declare module "*.svg" { - /** - * A path to the SVG file - */ - const path: `${string}.svg`; - export = path; -} - -declare module "*.module.css" { - /** - * A record of class names to their corresponding CSS module classes - */ - const classes: { readonly [key: string]: string }; - export = classes; -} diff --git a/packages/mything/bunfig.toml b/packages/mything/bunfig.toml deleted file mode 100644 index 8877354..0000000 --- a/packages/mything/bunfig.toml +++ /dev/null @@ -1,4 +0,0 @@ - -[serve.static] -plugins = ["bun-plugin-tailwind"] -env = "BUN_PUBLIC_*" \ No newline at end of file diff --git a/packages/mything/package.json b/packages/mything/package.json deleted file mode 100644 index de3c8d9..0000000 --- a/packages/mything/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "bun-react-template", - "version": "0.1.0", - "private": true, - "type": "module", - "main": "src/index.tsx", - "module": "src/index.tsx", - "scripts": { - "dev": "bun --hot src/index.tsx", - "start": "NODE_ENV=production bun src/index.tsx", - "build": "bun run build.ts" - }, - "dependencies": { - "bun-plugin-tailwind": "^0.0.14", - "react": "^19", - "react-dom": "^19", - "tailwindcss": "^4.0.6" - }, - "devDependencies": { - "@types/react": "^19", - "@types/react-dom": "^19", - "@types/bun": "latest" - } -} diff --git a/packages/mything/src/APITester.tsx b/packages/mything/src/APITester.tsx deleted file mode 100644 index 0f378ae..0000000 --- a/packages/mything/src/APITester.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { useRef, type FormEvent } from "react"; - -export function APITester() { - const responseInputRef = useRef(null); - - const testEndpoint = async (e: FormEvent) => { - e.preventDefault(); - - try { - const form = e.currentTarget; - const formData = new FormData(form); - const endpoint = formData.get("endpoint") as string; - const url = new URL(endpoint, location.href); - const method = formData.get("method") as string; - const res = await fetch(url, { method }); - - const data = await res.json(); - responseInputRef.current!.value = JSON.stringify(data, null, 2); - } catch (error) { - responseInputRef.current!.value = String(error); - } - }; - - return ( -
-
- - - -
-