├── .gitignore ├── README.md ├── bun.lockb ├── index.ts ├── package.json ├── packages ├── hype │ ├── .gitignore │ ├── .vscode │ │ └── settings.json │ ├── README.md │ ├── drizzle.config.ts │ ├── package.json │ ├── pnpm-lock.yaml │ ├── public │ │ ├── hype.png │ │ ├── hypelogo.svg │ │ └── og.png │ ├── src │ │ ├── app.ts │ │ ├── html.ts │ │ ├── hype.ts │ │ ├── index.ts │ │ ├── javascripts.ts │ │ ├── router.ts │ │ ├── state │ │ │ └── signal.ts │ │ ├── themes │ │ │ ├── DEFAULT │ │ │ │ ├── blocks │ │ │ │ │ ├── Nav.ts │ │ │ │ │ └── README.md │ │ │ │ ├── footer.ts │ │ │ │ ├── header.ts │ │ │ │ ├── html.ts │ │ │ │ ├── meta.ts │ │ │ │ ├── style.css │ │ │ │ └── theme.toml │ │ │ ├── HYPE │ │ │ │ ├── blocks │ │ │ │ │ ├── Nav.ts │ │ │ │ │ └── README.md │ │ │ │ ├── footer.ts │ │ │ │ ├── header.ts │ │ │ │ ├── html.ts │ │ │ │ ├── meta.ts │ │ │ │ ├── style.css │ │ │ │ └── theme.toml │ │ │ └── README.md │ │ └── utils │ │ │ ├── file.ts │ │ │ ├── get_css_file.ts │ │ │ ├── get_file_extension.ts │ │ │ ├── get_theme_css_file.ts │ │ │ ├── route_process_to_array.ts │ │ │ └── transform_markdown.ts │ └── tsconfig.json ├── hype_cli │ ├── .gitignore │ ├── README.md │ ├── bun.lockb │ ├── index.ts │ ├── package.json │ └── tsconfig.json ├── hype_demo │ ├── .gitignore │ ├── .vscode │ │ └── settings.json │ ├── README.md │ ├── database │ │ ├── 0000_dark_kylun.sql │ │ ├── meta │ │ │ ├── 0000_snapshot.json │ │ │ └── _journal.json │ │ └── migrate.ts │ ├── drizzle.config.ts │ ├── hype.toml │ ├── package.json │ ├── public │ │ ├── hype.png │ │ ├── hypelogo.svg │ │ └── og.png │ ├── src │ │ ├── data │ │ │ ├── init.ts │ │ │ └── schema.ts │ │ ├── index.ts │ │ ├── pages │ │ │ ├── about.md │ │ │ ├── html.html │ │ │ ├── index.ts │ │ │ ├── markdown.md │ │ │ ├── nested │ │ │ │ └── index.ts │ │ │ └── recipes │ │ │ │ ├── delete.ts │ │ │ │ └── index.ts │ │ └── theme │ │ │ └── forms │ │ │ └── new_recipes.ts │ └── tsconfig.json └── hype_htmx_hono_middleware │ ├── .gitignore │ ├── README.md │ ├── bun.lockb │ ├── index.ts │ ├── package.json │ └── tsconfig.json └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore 2 | 3 | # Logs 4 | 5 | logs 6 | _.log 7 | npm-debug.log_ 8 | yarn-debug.log* 9 | yarn-error.log* 10 | lerna-debug.log* 11 | .pnpm-debug.log* 12 | 13 | # Caches 14 | 15 | .cache 16 | 17 | # Diagnostic reports (https://nodejs.org/api/report.html) 18 | 19 | report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 20 | 21 | # Runtime data 22 | 23 | pids 24 | _.pid 25 | _.seed 26 | *.pid.lock 27 | 28 | # Directory for instrumented libs generated by jscoverage/JSCover 29 | 30 | lib-cov 31 | 32 | # Coverage directory used by tools like istanbul 33 | 34 | coverage 35 | *.lcov 36 | 37 | # nyc test coverage 38 | 39 | .nyc_output 40 | 41 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 42 | 43 | .grunt 44 | 45 | # Bower dependency directory (https://bower.io/) 46 | 47 | bower_components 48 | 49 | # node-waf configuration 50 | 51 | .lock-wscript 52 | 53 | # Compiled binary addons (https://nodejs.org/api/addons.html) 54 | 55 | build/Release 56 | 57 | # Dependency directories 58 | 59 | node_modules/ 60 | jspm_packages/ 61 | 62 | # Snowpack dependency directory (https://snowpack.dev/) 63 | 64 | web_modules/ 65 | 66 | # TypeScript cache 67 | 68 | *.tsbuildinfo 69 | 70 | # Optional npm cache directory 71 | 72 | .npm 73 | 74 | # Optional eslint cache 75 | 76 | .eslintcache 77 | 78 | # Optional stylelint cache 79 | 80 | .stylelintcache 81 | 82 | # Microbundle cache 83 | 84 | .rpt2_cache/ 85 | .rts2_cache_cjs/ 86 | .rts2_cache_es/ 87 | .rts2_cache_umd/ 88 | 89 | # Optional REPL history 90 | 91 | .node_repl_history 92 | 93 | # Output of 'npm pack' 94 | 95 | *.tgz 96 | 97 | # Yarn Integrity file 98 | 99 | .yarn-integrity 100 | 101 | # dotenv environment variable files 102 | 103 | .env 104 | .env.development.local 105 | .env.test.local 106 | .env.production.local 107 | .env.local 108 | 109 | # parcel-bundler cache (https://parceljs.org/) 110 | 111 | .parcel-cache 112 | 113 | # Next.js build output 114 | 115 | .next 116 | out 117 | 118 | # Nuxt.js build / generate output 119 | 120 | .nuxt 121 | dist 122 | 123 | # Gatsby files 124 | 125 | # Comment in the public line in if your project uses Gatsby and not Next.js 126 | 127 | # https://nextjs.org/blog/next-9-1#public-directory-support 128 | 129 | # public 130 | 131 | # vuepress build output 132 | 133 | .vuepress/dist 134 | 135 | # vuepress v2.x temp and cache directory 136 | 137 | .temp 138 | 139 | # Docusaurus cache and generated files 140 | 141 | .docusaurus 142 | 143 | # Serverless directories 144 | 145 | .serverless/ 146 | 147 | # FuseBox cache 148 | 149 | .fusebox/ 150 | 151 | # DynamoDB Local files 152 | 153 | .dynamodb/ 154 | 155 | # TernJS port file 156 | 157 | .tern-port 158 | 159 | # Stores VSCode versions used for testing VSCode extensions 160 | 161 | .vscode-test 162 | 163 | # yarn v2 164 | 165 | .yarn/cache 166 | .yarn/unplugged 167 | .yarn/build-state.yml 168 | .yarn/install-state.gz 169 | .pnp.* 170 | 171 | # IntelliJ based IDEs 172 | .idea 173 | 174 | # Finder (MacOS) folder config 175 | .DS_Store 176 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Hype Logo](./packages/hype_demo/public/hype.png) 2 | 3 | # Hype 4 | 5 | Demo: https://hype.tolin.ski/ 6 | 7 | Take a look. It's nothing special yet, but it has potential. 8 | 9 | ## Want to help? 10 | 11 | Let's chat https://discord.gg/7eSBjEQMYq 12 | 13 | ### Code Highlighting 14 | 15 | Install: https://marketplace.visualstudio.com/items?itemName=bierner.lit-html 16 | 17 | ### Emmet 18 | 19 | ``` 20 | "emmet.includeLanguages": { 21 | "typescript": "html", 22 | "javascript": "html" 23 | }, 24 | ``` 25 | -------------------------------------------------------------------------------- /bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stolinski/Hype/09763d235e5c4c8def8a82f13f61c6fbb12e8476/bun.lockb -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | console.log("Hello via Bun!"); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hype_projects", 3 | "version": "1.0.0-next.0", 4 | "workspaces": [ 5 | "packages/hype", 6 | "packages/hype_demo", 7 | "packages/hype_cli", 8 | "packages/hype_htmx_hono_middleware" 9 | ], 10 | "devDependencies": { 11 | "@types/bun": "latest" 12 | }, 13 | "peerDependencies": { 14 | "typescript": "^5.0.0" 15 | }, 16 | "scripts": { 17 | "clean": "rm -rf node_modules packages/hype/node_modules packages/hype_demo/node_modules bun.lockb packages/hype/bun.lockb packages/hype_demo/bun.lockb" 18 | }, 19 | "dependencies": { 20 | "@clack/prompts": "^0.7.0", 21 | "kleur": "^4.1.5" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /packages/hype/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | 33 | # vercel 34 | .vercel 35 | 36 | **/*.trace 37 | **/*.zip 38 | **/*.tar.gz 39 | **/*.tgz 40 | **/*.log 41 | package-lock.json 42 | **/*.bun 43 | 44 | sqlite.db -------------------------------------------------------------------------------- /packages/hype/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cSpell.words": ["Elysia", "htmx"], 3 | "[javascript]": { 4 | "editor.defaultFormatter": "biomejs.biome" 5 | }, 6 | "[typescript]": { 7 | "editor.defaultFormatter": "biomejs.biome" 8 | }, 9 | "[html]": { 10 | "editor.defaultFormatter": "esbenp.prettier-vscode" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/hype/README.md: -------------------------------------------------------------------------------- 1 | ![Hype Logo](./public/hype.png) 2 | 3 | # Hype 4 | 5 | Demo: https://hype.tolin.ski/ 6 | 7 | Take a look. It's nothing special yet, but it has potential. 8 | 9 | ## What's going on here? 10 | 11 | Hype is a meta framework for easily and quickly building hyperfast websites and apps with HTMX & Bun. 12 | 13 | ## What is this repo? 14 | 15 | This repo is currently both a demo and the platform itself. The platform will eventually evolve into just packages and the demo will move elsewhere. 16 | 17 | ### What's in the box? 18 | 19 | This is trying to be a battery buddy of a framework. It holds your batteries. It's batteries included. 20 | 21 | 🔋 So what are those batteries 22 | 23 | - ✅ Server Routing Via ElysiaJS 24 | - ✅ Database & ORM via Drizzle (sqlite easy ootb) 25 | - ✅ HTML & JavaScript as template engine 26 | - ✅ File based routing without pain 27 | - ✅ Browser live reload 28 | - ✅ Markdown File Routes 29 | - ✅ HTML File Routes 30 | - ⌛ Animations 31 | - ⌛ A legit default template with easy mods and overrides 32 | - ⌛ Easy Tailwind / Uno 33 | - ⌛ Layouts 34 | - ⌛ Auth 35 | - ⌛ Form Generation 36 | - ⌛ Admin 37 | - ⌛ Swapable Templating Langs 38 | 39 | - ⌛ Client side helpers 40 | - ⌛ Scoped CSS 41 | 42 | ### What? 43 | 44 | Zero build, extreme speeds, no OOTB client side framework JS. Trying to keep deps super low here. 45 | 46 | #### The tech behind this 47 | 48 | - Elysia, 49 | - HTMX 50 | - HTML 51 | - Bun 52 | - Drizzle 53 | - SQLite 54 | - Biome 55 | 56 | Poke around but just know that nothing is final. 57 | 58 | ### What is this not doing? 59 | 60 | - ❌ Native Mobile 61 | 62 | ### Why? 63 | 64 | HTMX is sick and there are a ton of competing stacks and frameworks to use it in. This is trying to be THE JavaScript based way to write HTMX apps with batteries included. Meteor was my favorite framework, so just keep that in mind. 65 | 66 | ### Interesting Features 67 | 68 | Since args don't rerun components, we can pass a ton of props into them like the entire request and context info. Think Locals for svelte but in your component. 69 | 70 | ## Want to help? 71 | 72 | Let's chat https://discord.gg/7eSBjEQMYq 73 | 74 | ### Code Highlighting 75 | 76 | Install: https://marketplace.visualstudio.com/items?itemName=bierner.lit-html 77 | 78 | ### Emmet 79 | 80 | ``` 81 | "emmet.includeLanguages": { 82 | "typescript": "html", 83 | "javascript": "html" 84 | }, 85 | ``` 86 | -------------------------------------------------------------------------------- /packages/hype/drizzle.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "drizzle-kit"; 2 | 3 | export default defineConfig({ 4 | schema: "./.hype/data/schema.ts", 5 | out: "./database", 6 | driver: "better-sqlite", 7 | dbCredentials: { 8 | url: "./hype/database/sqlite.db", 9 | }, 10 | }); 11 | -------------------------------------------------------------------------------- /packages/hype/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "@libsql/client": "^0.4.2", 4 | "@preact/signals": "^1.2.2", 5 | "@types/dompurify": "^3.0.5", 6 | "@types/jsdom": "^21.1.6", 7 | "better-sqlite3": "^9.3.0", 8 | "dompurify": "^3.0.8", 9 | "drizzle-kit": "^0.20.13", 10 | "drizzle-orm": "^0.29.3", 11 | "hono": "^3.12.12", 12 | "jsdom": "^24.0.0", 13 | "simple-markdown": "1.0.0-alpha.0" 14 | }, 15 | "devDependencies": { 16 | "bun-types": "latest" 17 | }, 18 | "module": "src/index.ts", 19 | "name": "@hype/hype", 20 | "scripts": { 21 | "dev": "bun --hot run --watch src/index.ts", 22 | "generate": "drizzle-kit generate:sqlite", 23 | "migrate": "bun run ./src/migrate.ts", 24 | "test": "echo \"Error: no test specified\" && exit 1" 25 | }, 26 | "version": "1.0.0-next.3" 27 | } 28 | -------------------------------------------------------------------------------- /packages/hype/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@elysiajs/html': 9 | specifier: ^0.8.0 10 | version: 0.8.0(elysia@0.8.15)(typescript@5.3.3) 11 | '@elysiajs/static': 12 | specifier: ^0.8.1 13 | version: 0.8.1(elysia@0.8.15) 14 | '@libsql/client': 15 | specifier: ^0.4.2 16 | version: 0.4.3 17 | '@preact/signals': 18 | specifier: ^1.2.2 19 | version: 1.2.2(preact@10.19.3) 20 | '@types/dompurify': 21 | specifier: ^3.0.5 22 | version: 3.0.5 23 | '@types/jsdom': 24 | specifier: ^21.1.6 25 | version: 21.1.6 26 | better-sqlite3: 27 | specifier: ^9.3.0 28 | version: 9.4.0 29 | dompurify: 30 | specifier: ^3.0.8 31 | version: 3.0.8 32 | drizzle-kit: 33 | specifier: ^0.20.13 34 | version: 0.20.14 35 | drizzle-orm: 36 | specifier: ^0.29.3 37 | version: 0.29.3(@libsql/client@0.4.3)(better-sqlite3@9.4.0)(bun-types@1.0.26) 38 | elysia: 39 | specifier: latest 40 | version: 0.8.15(typescript@5.3.3) 41 | elysia-htmx: 42 | specifier: ^1.0.9 43 | version: 1.0.9(elysia@0.8.15)(typescript@5.3.3) 44 | jsdom: 45 | specifier: ^24.0.0 46 | version: 24.0.0 47 | simple-markdown: 48 | specifier: 1.0.0-alpha.0 49 | version: 1.0.0-alpha.0 50 | 51 | devDependencies: 52 | bun-types: 53 | specifier: latest 54 | version: 1.0.26 55 | 56 | packages: 57 | 58 | /@drizzle-team/studio@0.0.39: 59 | resolution: {integrity: sha512-c5Hkm7MmQC2n5qAsKShjQrHoqlfGslB8+qWzsGGZ+2dHMRTNG60UuzalF0h0rvBax5uzPXuGkYLGaQ+TUX3yMw==} 60 | dependencies: 61 | superjson: 2.2.1 62 | dev: false 63 | 64 | /@elysiajs/html@0.8.0(elysia@0.8.15)(typescript@5.3.3): 65 | resolution: {integrity: sha512-ER6sBnfw6pfrGeynHCP79NsuQf1FPkI7JKGTeyTd123hcXBJnzDlWcF2niVtL8kqgyjHH12qPBFNssJkeCSQpA==} 66 | peerDependencies: 67 | elysia: '>= 0.8.0' 68 | peerDependenciesMeta: 69 | '@kitajs/html': 70 | optional: true 71 | '@kitajs/ts-html-plugin': 72 | optional: true 73 | dependencies: 74 | '@kitajs/html': 3.1.2(@kitajs/ts-html-plugin@1.3.4) 75 | '@kitajs/ts-html-plugin': 1.3.4(@kitajs/html@3.1.2)(typescript@5.3.3) 76 | elysia: 0.8.15(typescript@5.3.3) 77 | transitivePeerDependencies: 78 | - typescript 79 | dev: false 80 | 81 | /@elysiajs/static@0.8.1(elysia@0.8.15): 82 | resolution: {integrity: sha512-SKMSZVrlcUASDOj1VYZu2Dx5vGRK5dq3wRHW1GWFhZ9FyW2uowvbc1lXSzRahAxVsJvvTStdEt2Etbx+pi9V8Q==} 83 | peerDependencies: 84 | elysia: '>= 0.8.0' 85 | dependencies: 86 | elysia: 0.8.15(typescript@5.3.3) 87 | node-cache: 5.1.2 88 | dev: false 89 | 90 | /@esbuild-kit/core-utils@3.3.2: 91 | resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} 92 | dependencies: 93 | esbuild: 0.18.20 94 | source-map-support: 0.5.21 95 | dev: false 96 | 97 | /@esbuild-kit/esm-loader@2.6.5: 98 | resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} 99 | dependencies: 100 | '@esbuild-kit/core-utils': 3.3.2 101 | get-tsconfig: 4.7.2 102 | dev: false 103 | 104 | /@esbuild/aix-ppc64@0.19.12: 105 | resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} 106 | engines: {node: '>=12'} 107 | cpu: [ppc64] 108 | os: [aix] 109 | requiresBuild: true 110 | dev: false 111 | optional: true 112 | 113 | /@esbuild/android-arm64@0.18.20: 114 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} 115 | engines: {node: '>=12'} 116 | cpu: [arm64] 117 | os: [android] 118 | requiresBuild: true 119 | dev: false 120 | optional: true 121 | 122 | /@esbuild/android-arm64@0.19.12: 123 | resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} 124 | engines: {node: '>=12'} 125 | cpu: [arm64] 126 | os: [android] 127 | requiresBuild: true 128 | dev: false 129 | optional: true 130 | 131 | /@esbuild/android-arm@0.18.20: 132 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} 133 | engines: {node: '>=12'} 134 | cpu: [arm] 135 | os: [android] 136 | requiresBuild: true 137 | dev: false 138 | optional: true 139 | 140 | /@esbuild/android-arm@0.19.12: 141 | resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} 142 | engines: {node: '>=12'} 143 | cpu: [arm] 144 | os: [android] 145 | requiresBuild: true 146 | dev: false 147 | optional: true 148 | 149 | /@esbuild/android-x64@0.18.20: 150 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} 151 | engines: {node: '>=12'} 152 | cpu: [x64] 153 | os: [android] 154 | requiresBuild: true 155 | dev: false 156 | optional: true 157 | 158 | /@esbuild/android-x64@0.19.12: 159 | resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} 160 | engines: {node: '>=12'} 161 | cpu: [x64] 162 | os: [android] 163 | requiresBuild: true 164 | dev: false 165 | optional: true 166 | 167 | /@esbuild/darwin-arm64@0.18.20: 168 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} 169 | engines: {node: '>=12'} 170 | cpu: [arm64] 171 | os: [darwin] 172 | requiresBuild: true 173 | dev: false 174 | optional: true 175 | 176 | /@esbuild/darwin-arm64@0.19.12: 177 | resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} 178 | engines: {node: '>=12'} 179 | cpu: [arm64] 180 | os: [darwin] 181 | requiresBuild: true 182 | dev: false 183 | optional: true 184 | 185 | /@esbuild/darwin-x64@0.18.20: 186 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} 187 | engines: {node: '>=12'} 188 | cpu: [x64] 189 | os: [darwin] 190 | requiresBuild: true 191 | dev: false 192 | optional: true 193 | 194 | /@esbuild/darwin-x64@0.19.12: 195 | resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} 196 | engines: {node: '>=12'} 197 | cpu: [x64] 198 | os: [darwin] 199 | requiresBuild: true 200 | dev: false 201 | optional: true 202 | 203 | /@esbuild/freebsd-arm64@0.18.20: 204 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} 205 | engines: {node: '>=12'} 206 | cpu: [arm64] 207 | os: [freebsd] 208 | requiresBuild: true 209 | dev: false 210 | optional: true 211 | 212 | /@esbuild/freebsd-arm64@0.19.12: 213 | resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} 214 | engines: {node: '>=12'} 215 | cpu: [arm64] 216 | os: [freebsd] 217 | requiresBuild: true 218 | dev: false 219 | optional: true 220 | 221 | /@esbuild/freebsd-x64@0.18.20: 222 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} 223 | engines: {node: '>=12'} 224 | cpu: [x64] 225 | os: [freebsd] 226 | requiresBuild: true 227 | dev: false 228 | optional: true 229 | 230 | /@esbuild/freebsd-x64@0.19.12: 231 | resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} 232 | engines: {node: '>=12'} 233 | cpu: [x64] 234 | os: [freebsd] 235 | requiresBuild: true 236 | dev: false 237 | optional: true 238 | 239 | /@esbuild/linux-arm64@0.18.20: 240 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} 241 | engines: {node: '>=12'} 242 | cpu: [arm64] 243 | os: [linux] 244 | requiresBuild: true 245 | dev: false 246 | optional: true 247 | 248 | /@esbuild/linux-arm64@0.19.12: 249 | resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} 250 | engines: {node: '>=12'} 251 | cpu: [arm64] 252 | os: [linux] 253 | requiresBuild: true 254 | dev: false 255 | optional: true 256 | 257 | /@esbuild/linux-arm@0.18.20: 258 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} 259 | engines: {node: '>=12'} 260 | cpu: [arm] 261 | os: [linux] 262 | requiresBuild: true 263 | dev: false 264 | optional: true 265 | 266 | /@esbuild/linux-arm@0.19.12: 267 | resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} 268 | engines: {node: '>=12'} 269 | cpu: [arm] 270 | os: [linux] 271 | requiresBuild: true 272 | dev: false 273 | optional: true 274 | 275 | /@esbuild/linux-ia32@0.18.20: 276 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} 277 | engines: {node: '>=12'} 278 | cpu: [ia32] 279 | os: [linux] 280 | requiresBuild: true 281 | dev: false 282 | optional: true 283 | 284 | /@esbuild/linux-ia32@0.19.12: 285 | resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} 286 | engines: {node: '>=12'} 287 | cpu: [ia32] 288 | os: [linux] 289 | requiresBuild: true 290 | dev: false 291 | optional: true 292 | 293 | /@esbuild/linux-loong64@0.18.20: 294 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} 295 | engines: {node: '>=12'} 296 | cpu: [loong64] 297 | os: [linux] 298 | requiresBuild: true 299 | dev: false 300 | optional: true 301 | 302 | /@esbuild/linux-loong64@0.19.12: 303 | resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} 304 | engines: {node: '>=12'} 305 | cpu: [loong64] 306 | os: [linux] 307 | requiresBuild: true 308 | dev: false 309 | optional: true 310 | 311 | /@esbuild/linux-mips64el@0.18.20: 312 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} 313 | engines: {node: '>=12'} 314 | cpu: [mips64el] 315 | os: [linux] 316 | requiresBuild: true 317 | dev: false 318 | optional: true 319 | 320 | /@esbuild/linux-mips64el@0.19.12: 321 | resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} 322 | engines: {node: '>=12'} 323 | cpu: [mips64el] 324 | os: [linux] 325 | requiresBuild: true 326 | dev: false 327 | optional: true 328 | 329 | /@esbuild/linux-ppc64@0.18.20: 330 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} 331 | engines: {node: '>=12'} 332 | cpu: [ppc64] 333 | os: [linux] 334 | requiresBuild: true 335 | dev: false 336 | optional: true 337 | 338 | /@esbuild/linux-ppc64@0.19.12: 339 | resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} 340 | engines: {node: '>=12'} 341 | cpu: [ppc64] 342 | os: [linux] 343 | requiresBuild: true 344 | dev: false 345 | optional: true 346 | 347 | /@esbuild/linux-riscv64@0.18.20: 348 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} 349 | engines: {node: '>=12'} 350 | cpu: [riscv64] 351 | os: [linux] 352 | requiresBuild: true 353 | dev: false 354 | optional: true 355 | 356 | /@esbuild/linux-riscv64@0.19.12: 357 | resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} 358 | engines: {node: '>=12'} 359 | cpu: [riscv64] 360 | os: [linux] 361 | requiresBuild: true 362 | dev: false 363 | optional: true 364 | 365 | /@esbuild/linux-s390x@0.18.20: 366 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} 367 | engines: {node: '>=12'} 368 | cpu: [s390x] 369 | os: [linux] 370 | requiresBuild: true 371 | dev: false 372 | optional: true 373 | 374 | /@esbuild/linux-s390x@0.19.12: 375 | resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} 376 | engines: {node: '>=12'} 377 | cpu: [s390x] 378 | os: [linux] 379 | requiresBuild: true 380 | dev: false 381 | optional: true 382 | 383 | /@esbuild/linux-x64@0.18.20: 384 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} 385 | engines: {node: '>=12'} 386 | cpu: [x64] 387 | os: [linux] 388 | requiresBuild: true 389 | dev: false 390 | optional: true 391 | 392 | /@esbuild/linux-x64@0.19.12: 393 | resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} 394 | engines: {node: '>=12'} 395 | cpu: [x64] 396 | os: [linux] 397 | requiresBuild: true 398 | dev: false 399 | optional: true 400 | 401 | /@esbuild/netbsd-x64@0.18.20: 402 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} 403 | engines: {node: '>=12'} 404 | cpu: [x64] 405 | os: [netbsd] 406 | requiresBuild: true 407 | dev: false 408 | optional: true 409 | 410 | /@esbuild/netbsd-x64@0.19.12: 411 | resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} 412 | engines: {node: '>=12'} 413 | cpu: [x64] 414 | os: [netbsd] 415 | requiresBuild: true 416 | dev: false 417 | optional: true 418 | 419 | /@esbuild/openbsd-x64@0.18.20: 420 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} 421 | engines: {node: '>=12'} 422 | cpu: [x64] 423 | os: [openbsd] 424 | requiresBuild: true 425 | dev: false 426 | optional: true 427 | 428 | /@esbuild/openbsd-x64@0.19.12: 429 | resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} 430 | engines: {node: '>=12'} 431 | cpu: [x64] 432 | os: [openbsd] 433 | requiresBuild: true 434 | dev: false 435 | optional: true 436 | 437 | /@esbuild/sunos-x64@0.18.20: 438 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} 439 | engines: {node: '>=12'} 440 | cpu: [x64] 441 | os: [sunos] 442 | requiresBuild: true 443 | dev: false 444 | optional: true 445 | 446 | /@esbuild/sunos-x64@0.19.12: 447 | resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} 448 | engines: {node: '>=12'} 449 | cpu: [x64] 450 | os: [sunos] 451 | requiresBuild: true 452 | dev: false 453 | optional: true 454 | 455 | /@esbuild/win32-arm64@0.18.20: 456 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} 457 | engines: {node: '>=12'} 458 | cpu: [arm64] 459 | os: [win32] 460 | requiresBuild: true 461 | dev: false 462 | optional: true 463 | 464 | /@esbuild/win32-arm64@0.19.12: 465 | resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} 466 | engines: {node: '>=12'} 467 | cpu: [arm64] 468 | os: [win32] 469 | requiresBuild: true 470 | dev: false 471 | optional: true 472 | 473 | /@esbuild/win32-ia32@0.18.20: 474 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} 475 | engines: {node: '>=12'} 476 | cpu: [ia32] 477 | os: [win32] 478 | requiresBuild: true 479 | dev: false 480 | optional: true 481 | 482 | /@esbuild/win32-ia32@0.19.12: 483 | resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} 484 | engines: {node: '>=12'} 485 | cpu: [ia32] 486 | os: [win32] 487 | requiresBuild: true 488 | dev: false 489 | optional: true 490 | 491 | /@esbuild/win32-x64@0.18.20: 492 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} 493 | engines: {node: '>=12'} 494 | cpu: [x64] 495 | os: [win32] 496 | requiresBuild: true 497 | dev: false 498 | optional: true 499 | 500 | /@esbuild/win32-x64@0.19.12: 501 | resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} 502 | engines: {node: '>=12'} 503 | cpu: [x64] 504 | os: [win32] 505 | requiresBuild: true 506 | dev: false 507 | optional: true 508 | 509 | /@kitajs/html@3.1.2(@kitajs/ts-html-plugin@1.3.4): 510 | resolution: {integrity: sha512-igMLn8VCrAyjFuK1OOsCkiiu95EQ+hK/C96moz9+MzX3lsMukZO/AqXRxdhTeB80AtE61pL+lUTuwTkqz/s+rQ==} 511 | engines: {node: '>=12'} 512 | peerDependencies: 513 | '@kitajs/ts-html-plugin': '>=1.3.3' 514 | dependencies: 515 | '@kitajs/ts-html-plugin': 1.3.4(@kitajs/html@3.1.2)(typescript@5.3.3) 516 | csstype: 3.1.3 517 | dev: false 518 | 519 | /@kitajs/ts-html-plugin@1.3.4(@kitajs/html@3.1.2)(typescript@5.3.3): 520 | resolution: {integrity: sha512-AAht1OvLkQizJ59DM70qBgb0VwdyW9KUtDaH66JrfanMMvSSoM598WspJrVdVbe50olw69H+nnTj0lEfNDVmPQ==} 521 | hasBin: true 522 | peerDependencies: 523 | '@kitajs/html': ^3.1.1 524 | typescript: ^5.2.2 525 | dependencies: 526 | '@kitajs/html': 3.1.2(@kitajs/ts-html-plugin@1.3.4) 527 | chalk: 4.1.2 528 | tslib: 2.6.2 529 | typescript: 5.3.3 530 | yargs: 17.7.2 531 | dev: false 532 | 533 | /@libsql/client@0.4.3: 534 | resolution: {integrity: sha512-AUYKnSPqAsFBVWBvmtrb4dG3pQlvTKT92eztAest9wQU2iJkabH8WzHLDb3dKFWKql7/kiCqvBQUVpozDwhekQ==} 535 | dependencies: 536 | '@libsql/core': 0.4.3 537 | '@libsql/hrana-client': 0.5.6 538 | js-base64: 3.7.6 539 | optionalDependencies: 540 | libsql: 0.2.0 541 | transitivePeerDependencies: 542 | - bufferutil 543 | - encoding 544 | - utf-8-validate 545 | dev: false 546 | 547 | /@libsql/core@0.4.3: 548 | resolution: {integrity: sha512-r28iYBtaLBW9RRgXPFh6cGCsVI/rwRlOzSOpAu/1PVTm6EJ3t233pUf97jETVHU0vjdr1d8VvV6fKAvJkokqCw==} 549 | dependencies: 550 | js-base64: 3.7.6 551 | dev: false 552 | 553 | /@libsql/darwin-arm64@0.2.0: 554 | resolution: {integrity: sha512-+qyT2W/n5CFH1YZWv2mxW4Fsoo4dX9Z9M/nvbQqZ7H84J8hVegvVAsIGYzcK8xAeMEcpU5yGKB1Y9NoDY4hOSQ==} 555 | cpu: [arm64] 556 | os: [darwin] 557 | requiresBuild: true 558 | dev: false 559 | optional: true 560 | 561 | /@libsql/darwin-x64@0.2.0: 562 | resolution: {integrity: sha512-hwmO2mF1n8oDHKFrUju6Jv+n9iFtTf5JUK+xlnIE3Td0ZwGC/O1R/Z/btZTd9nD+vsvakC8SJT7/Q6YlWIkhEw==} 563 | cpu: [x64] 564 | os: [darwin] 565 | requiresBuild: true 566 | dev: false 567 | optional: true 568 | 569 | /@libsql/hrana-client@0.5.6: 570 | resolution: {integrity: sha512-mjQoAmejZ1atG+M3YR2ZW+rg6ceBByH/S/h17ZoYZkqbWrvohFhXyz2LFxj++ARMoY9m6w3RJJIRdJdmnEUlFg==} 571 | dependencies: 572 | '@libsql/isomorphic-fetch': 0.1.12 573 | '@libsql/isomorphic-ws': 0.1.5 574 | js-base64: 3.7.6 575 | node-fetch: 3.3.2 576 | transitivePeerDependencies: 577 | - bufferutil 578 | - encoding 579 | - utf-8-validate 580 | dev: false 581 | 582 | /@libsql/isomorphic-fetch@0.1.12: 583 | resolution: {integrity: sha512-MRo4UcmjAGAa3ac56LoD5OE13m2p0lu0VEtZC2NZMcogM/jc5fU9YtMQ3qbPjFJ+u2BBjFZgMPkQaLS1dlMhpg==} 584 | dependencies: 585 | '@types/node-fetch': 2.6.11 586 | node-fetch: 2.7.0 587 | transitivePeerDependencies: 588 | - encoding 589 | dev: false 590 | 591 | /@libsql/isomorphic-ws@0.1.5: 592 | resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} 593 | dependencies: 594 | '@types/ws': 8.5.10 595 | ws: 8.16.0 596 | transitivePeerDependencies: 597 | - bufferutil 598 | - utf-8-validate 599 | dev: false 600 | 601 | /@libsql/linux-arm64-gnu@0.2.0: 602 | resolution: {integrity: sha512-1w2lPXIYtnBaK5t/Ej5E8x7lPiE+jP3KATI/W4yei5Z/ONJh7jQW5PJ7sYU95vTME3hWEM1FXN6kvzcpFAte7w==} 603 | cpu: [arm64] 604 | os: [linux] 605 | requiresBuild: true 606 | dev: false 607 | optional: true 608 | 609 | /@libsql/linux-arm64-musl@0.2.0: 610 | resolution: {integrity: sha512-lkblBEJ7xuNiWNjP8DDq0rqoWccszfkUS7Efh5EjJ+GDWdCBVfh08mPofIZg0fZVLWQCY3j+VZCG1qZfATBizg==} 611 | cpu: [arm64] 612 | os: [linux] 613 | requiresBuild: true 614 | dev: false 615 | optional: true 616 | 617 | /@libsql/linux-x64-gnu@0.2.0: 618 | resolution: {integrity: sha512-+x/d289KeJydwOhhqSxKT+6MSQTCfLltzOpTzPccsvdt5fxg8CBi+gfvEJ4/XW23Sa+9bc7zodFP0i6MOlxX7w==} 619 | cpu: [x64] 620 | os: [linux] 621 | requiresBuild: true 622 | dev: false 623 | optional: true 624 | 625 | /@libsql/linux-x64-musl@0.2.0: 626 | resolution: {integrity: sha512-5Xn0c5A6vKf9D1ASpgk7mef//FuY7t5Lktj/eiU4n3ryxG+6WTpqstTittJUgepVjcleLPYxIhQAYeYwTYH1IQ==} 627 | cpu: [x64] 628 | os: [linux] 629 | requiresBuild: true 630 | dev: false 631 | optional: true 632 | 633 | /@libsql/win32-x64-msvc@0.2.0: 634 | resolution: {integrity: sha512-rpK+trBIpRST15m3cMYg5aPaX7kvCIottxY7jZPINkKAaScvfbn9yulU/iZUM9YtuK96Y1ZmvwyVIK/Y5DzoMQ==} 635 | cpu: [x64] 636 | os: [win32] 637 | requiresBuild: true 638 | dev: false 639 | optional: true 640 | 641 | /@neon-rs/load@0.0.4: 642 | resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} 643 | requiresBuild: true 644 | dev: false 645 | optional: true 646 | 647 | /@preact/signals-core@1.5.1: 648 | resolution: {integrity: sha512-dE6f+WCX5ZUDwXzUIWNMhhglmuLpqJhuy3X3xHrhZYI0Hm2LyQwOu0l9mdPiWrVNsE+Q7txOnJPgtIqHCYoBVA==} 649 | dev: false 650 | 651 | /@preact/signals@1.2.2(preact@10.19.3): 652 | resolution: {integrity: sha512-ColCqdo4cRP18bAuIR4Oik5rDpiyFtPIJIygaYPMEAwTnl4buWkBOflGBSzhYyPyJfKpkwlekrvK+1pzQ2ldWw==} 653 | peerDependencies: 654 | preact: 10.x 655 | dependencies: 656 | '@preact/signals-core': 1.5.1 657 | preact: 10.19.3 658 | dev: false 659 | 660 | /@types/dompurify@3.0.5: 661 | resolution: {integrity: sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==} 662 | dependencies: 663 | '@types/trusted-types': 2.0.7 664 | dev: false 665 | 666 | /@types/jsdom@21.1.6: 667 | resolution: {integrity: sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw==} 668 | dependencies: 669 | '@types/node': 20.11.16 670 | '@types/tough-cookie': 4.0.5 671 | parse5: 7.1.2 672 | dev: false 673 | 674 | /@types/node-fetch@2.6.11: 675 | resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} 676 | dependencies: 677 | '@types/node': 20.11.16 678 | form-data: 4.0.0 679 | dev: false 680 | 681 | /@types/node@20.11.16: 682 | resolution: {integrity: sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==} 683 | dependencies: 684 | undici-types: 5.26.5 685 | 686 | /@types/tough-cookie@4.0.5: 687 | resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} 688 | dev: false 689 | 690 | /@types/trusted-types@2.0.7: 691 | resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} 692 | dev: false 693 | 694 | /@types/ws@8.5.10: 695 | resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} 696 | dependencies: 697 | '@types/node': 20.11.16 698 | 699 | /agent-base@7.1.0: 700 | resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} 701 | engines: {node: '>= 14'} 702 | dependencies: 703 | debug: 4.3.4 704 | transitivePeerDependencies: 705 | - supports-color 706 | dev: false 707 | 708 | /ansi-regex@5.0.1: 709 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 710 | engines: {node: '>=8'} 711 | dev: false 712 | 713 | /ansi-styles@4.3.0: 714 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 715 | engines: {node: '>=8'} 716 | dependencies: 717 | color-convert: 2.0.1 718 | dev: false 719 | 720 | /asynckit@0.4.0: 721 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 722 | dev: false 723 | 724 | /balanced-match@1.0.2: 725 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 726 | dev: false 727 | 728 | /base64-js@1.5.1: 729 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 730 | dev: false 731 | 732 | /better-sqlite3@9.4.0: 733 | resolution: {integrity: sha512-5kynxekMxSjCMiFyUBLHggFcJkCmiZi6fUkiGz/B5GZOvdRWQJD0klqCx5/Y+bm2AKP7I/DHbSFx26AxjruWNg==} 734 | requiresBuild: true 735 | dependencies: 736 | bindings: 1.5.0 737 | prebuild-install: 7.1.1 738 | dev: false 739 | 740 | /bindings@1.5.0: 741 | resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} 742 | dependencies: 743 | file-uri-to-path: 1.0.0 744 | dev: false 745 | 746 | /bl@4.1.0: 747 | resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} 748 | dependencies: 749 | buffer: 5.7.1 750 | inherits: 2.0.4 751 | readable-stream: 3.6.2 752 | dev: false 753 | 754 | /brace-expansion@2.0.1: 755 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 756 | dependencies: 757 | balanced-match: 1.0.2 758 | dev: false 759 | 760 | /buffer-from@1.1.2: 761 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 762 | dev: false 763 | 764 | /buffer@5.7.1: 765 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 766 | dependencies: 767 | base64-js: 1.5.1 768 | ieee754: 1.2.1 769 | dev: false 770 | 771 | /bun-types@1.0.26: 772 | resolution: {integrity: sha512-VcSj+SCaWIcMb0uSGIAtr8P92zq9q+unavcQmx27fk6HulCthXHBVrdGuXxAZbFtv7bHVjizRzR2mk9r/U8Nkg==} 773 | dependencies: 774 | '@types/node': 20.11.16 775 | '@types/ws': 8.5.10 776 | 777 | /camelcase@7.0.1: 778 | resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} 779 | engines: {node: '>=14.16'} 780 | dev: false 781 | 782 | /chalk@4.1.2: 783 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 784 | engines: {node: '>=10'} 785 | dependencies: 786 | ansi-styles: 4.3.0 787 | supports-color: 7.2.0 788 | dev: false 789 | 790 | /chalk@5.3.0: 791 | resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} 792 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 793 | dev: false 794 | 795 | /chownr@1.1.4: 796 | resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} 797 | dev: false 798 | 799 | /cli-color@2.0.3: 800 | resolution: {integrity: sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==} 801 | engines: {node: '>=0.10'} 802 | dependencies: 803 | d: 1.0.1 804 | es5-ext: 0.10.62 805 | es6-iterator: 2.0.3 806 | memoizee: 0.4.15 807 | timers-ext: 0.1.7 808 | dev: false 809 | 810 | /cliui@8.0.1: 811 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 812 | engines: {node: '>=12'} 813 | dependencies: 814 | string-width: 4.2.3 815 | strip-ansi: 6.0.1 816 | wrap-ansi: 7.0.0 817 | dev: false 818 | 819 | /clone@2.1.2: 820 | resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} 821 | engines: {node: '>=0.8'} 822 | dev: false 823 | 824 | /color-convert@2.0.1: 825 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 826 | engines: {node: '>=7.0.0'} 827 | dependencies: 828 | color-name: 1.1.4 829 | dev: false 830 | 831 | /color-name@1.1.4: 832 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 833 | dev: false 834 | 835 | /combined-stream@1.0.8: 836 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 837 | engines: {node: '>= 0.8'} 838 | dependencies: 839 | delayed-stream: 1.0.0 840 | dev: false 841 | 842 | /commander@9.5.0: 843 | resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} 844 | engines: {node: ^12.20.0 || >=14} 845 | dev: false 846 | 847 | /cookie@0.6.0: 848 | resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} 849 | engines: {node: '>= 0.6'} 850 | dev: false 851 | 852 | /copy-anything@3.0.5: 853 | resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} 854 | engines: {node: '>=12.13'} 855 | dependencies: 856 | is-what: 4.1.16 857 | dev: false 858 | 859 | /cssstyle@4.0.1: 860 | resolution: {integrity: sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==} 861 | engines: {node: '>=18'} 862 | dependencies: 863 | rrweb-cssom: 0.6.0 864 | dev: false 865 | 866 | /csstype@3.1.3: 867 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 868 | dev: false 869 | 870 | /d@1.0.1: 871 | resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} 872 | dependencies: 873 | es5-ext: 0.10.62 874 | type: 1.2.0 875 | dev: false 876 | 877 | /data-uri-to-buffer@4.0.1: 878 | resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} 879 | engines: {node: '>= 12'} 880 | dev: false 881 | 882 | /data-urls@5.0.0: 883 | resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} 884 | engines: {node: '>=18'} 885 | dependencies: 886 | whatwg-mimetype: 4.0.0 887 | whatwg-url: 14.0.0 888 | dev: false 889 | 890 | /debug@4.3.4: 891 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 892 | engines: {node: '>=6.0'} 893 | peerDependencies: 894 | supports-color: '*' 895 | peerDependenciesMeta: 896 | supports-color: 897 | optional: true 898 | dependencies: 899 | ms: 2.1.2 900 | dev: false 901 | 902 | /decimal.js@10.4.3: 903 | resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} 904 | dev: false 905 | 906 | /decompress-response@6.0.0: 907 | resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} 908 | engines: {node: '>=10'} 909 | dependencies: 910 | mimic-response: 3.1.0 911 | dev: false 912 | 913 | /deep-extend@0.6.0: 914 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} 915 | engines: {node: '>=4.0.0'} 916 | dev: false 917 | 918 | /delayed-stream@1.0.0: 919 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 920 | engines: {node: '>=0.4.0'} 921 | dev: false 922 | 923 | /detect-libc@2.0.2: 924 | resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} 925 | engines: {node: '>=8'} 926 | dev: false 927 | 928 | /difflib@0.2.4: 929 | resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} 930 | dependencies: 931 | heap: 0.2.7 932 | dev: false 933 | 934 | /dompurify@3.0.8: 935 | resolution: {integrity: sha512-b7uwreMYL2eZhrSCRC4ahLTeZcPZxSmYfmcQGXGkXiZSNW1X85v+SDM5KsWcpivIiUBH47Ji7NtyUdpLeF5JZQ==} 936 | dev: false 937 | 938 | /dreamopt@0.8.0: 939 | resolution: {integrity: sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==} 940 | engines: {node: '>=0.4.0'} 941 | dependencies: 942 | wordwrap: 1.0.0 943 | dev: false 944 | 945 | /drizzle-kit@0.20.14: 946 | resolution: {integrity: sha512-0fHv3YIEaUcSVPSGyaaBfOi9bmpajjhbJNdPsRMIUvYdLVxBu9eGjH8mRc3Qk7HVmEidFc/lhG1YyJhoXrn5yA==} 947 | hasBin: true 948 | dependencies: 949 | '@drizzle-team/studio': 0.0.39 950 | '@esbuild-kit/esm-loader': 2.6.5 951 | camelcase: 7.0.1 952 | chalk: 5.3.0 953 | commander: 9.5.0 954 | env-paths: 3.0.0 955 | esbuild: 0.19.12 956 | esbuild-register: 3.5.0(esbuild@0.19.12) 957 | glob: 8.1.0 958 | hanji: 0.0.5 959 | json-diff: 0.9.0 960 | minimatch: 7.4.6 961 | semver: 7.6.0 962 | zod: 3.22.4 963 | transitivePeerDependencies: 964 | - supports-color 965 | dev: false 966 | 967 | /drizzle-orm@0.29.3(@libsql/client@0.4.3)(better-sqlite3@9.4.0)(bun-types@1.0.26): 968 | resolution: {integrity: sha512-uSE027csliGSGYD0pqtM+SAQATMREb3eSM/U8s6r+Y0RFwTKwftnwwSkqx3oS65UBgqDOM0gMTl5UGNpt6lW0A==} 969 | peerDependencies: 970 | '@aws-sdk/client-rds-data': '>=3' 971 | '@cloudflare/workers-types': '>=3' 972 | '@libsql/client': '*' 973 | '@neondatabase/serverless': '>=0.1' 974 | '@opentelemetry/api': ^1.4.1 975 | '@planetscale/database': '>=1' 976 | '@types/better-sqlite3': '*' 977 | '@types/pg': '*' 978 | '@types/react': '>=18' 979 | '@types/sql.js': '*' 980 | '@vercel/postgres': '*' 981 | better-sqlite3: '>=7' 982 | bun-types: '*' 983 | expo-sqlite: '>=13.2.0' 984 | knex: '*' 985 | kysely: '*' 986 | mysql2: '>=2' 987 | pg: '>=8' 988 | postgres: '>=3' 989 | react: '>=18' 990 | sql.js: '>=1' 991 | sqlite3: '>=5' 992 | peerDependenciesMeta: 993 | '@aws-sdk/client-rds-data': 994 | optional: true 995 | '@cloudflare/workers-types': 996 | optional: true 997 | '@libsql/client': 998 | optional: true 999 | '@neondatabase/serverless': 1000 | optional: true 1001 | '@opentelemetry/api': 1002 | optional: true 1003 | '@planetscale/database': 1004 | optional: true 1005 | '@types/better-sqlite3': 1006 | optional: true 1007 | '@types/pg': 1008 | optional: true 1009 | '@types/react': 1010 | optional: true 1011 | '@types/sql.js': 1012 | optional: true 1013 | '@vercel/postgres': 1014 | optional: true 1015 | better-sqlite3: 1016 | optional: true 1017 | bun-types: 1018 | optional: true 1019 | expo-sqlite: 1020 | optional: true 1021 | knex: 1022 | optional: true 1023 | kysely: 1024 | optional: true 1025 | mysql2: 1026 | optional: true 1027 | pg: 1028 | optional: true 1029 | postgres: 1030 | optional: true 1031 | react: 1032 | optional: true 1033 | sql.js: 1034 | optional: true 1035 | sqlite3: 1036 | optional: true 1037 | dependencies: 1038 | '@libsql/client': 0.4.3 1039 | better-sqlite3: 9.4.0 1040 | bun-types: 1.0.26 1041 | dev: false 1042 | 1043 | /elysia-htmx@1.0.9(elysia@0.8.15)(typescript@5.3.3): 1044 | resolution: {integrity: sha512-5rmhOp93hjmKDQCCu9RSj6OnVJ1nsywBEA5k/uTAwVIkoFiCPDplAw1v6qJu7vwkxBu7M6bBzgsPIszFbfdabg==} 1045 | peerDependencies: 1046 | elysia: ^0.7.30 1047 | typescript: ^5.2.2 1048 | dependencies: 1049 | elysia: 0.8.15(typescript@5.3.3) 1050 | typescript: 5.3.3 1051 | dev: false 1052 | 1053 | /elysia@0.8.15(typescript@5.3.3): 1054 | resolution: {integrity: sha512-jJhIukagVZ31qwTEDrjkvpJv2ZhKewOG+eVbKj3N6MksBkLj1VXcTL6C4PZ1lACv1gU1HVRQNIeTy/eAeiMwZg==} 1055 | peerDependencies: 1056 | '@sinclair/typebox': '>= 0.31.0' 1057 | openapi-types: '>= 12.0.0' 1058 | typescript: '>= 5.0.0' 1059 | peerDependenciesMeta: 1060 | '@sinclair/typebox': 1061 | optional: true 1062 | openapi-types: 1063 | optional: true 1064 | typescript: 1065 | optional: true 1066 | dependencies: 1067 | cookie: 0.6.0 1068 | eventemitter3: 5.0.1 1069 | fast-decode-uri-component: 1.0.1 1070 | fast-querystring: 1.1.2 1071 | memoirist: 0.1.10 1072 | typescript: 5.3.3 1073 | dev: false 1074 | 1075 | /emoji-regex@8.0.0: 1076 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1077 | dev: false 1078 | 1079 | /end-of-stream@1.4.4: 1080 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 1081 | dependencies: 1082 | once: 1.4.0 1083 | dev: false 1084 | 1085 | /entities@4.5.0: 1086 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 1087 | engines: {node: '>=0.12'} 1088 | dev: false 1089 | 1090 | /env-paths@3.0.0: 1091 | resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} 1092 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1093 | dev: false 1094 | 1095 | /es5-ext@0.10.62: 1096 | resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} 1097 | engines: {node: '>=0.10'} 1098 | requiresBuild: true 1099 | dependencies: 1100 | es6-iterator: 2.0.3 1101 | es6-symbol: 3.1.3 1102 | next-tick: 1.1.0 1103 | dev: false 1104 | 1105 | /es6-iterator@2.0.3: 1106 | resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} 1107 | dependencies: 1108 | d: 1.0.1 1109 | es5-ext: 0.10.62 1110 | es6-symbol: 3.1.3 1111 | dev: false 1112 | 1113 | /es6-symbol@3.1.3: 1114 | resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} 1115 | dependencies: 1116 | d: 1.0.1 1117 | ext: 1.7.0 1118 | dev: false 1119 | 1120 | /es6-weak-map@2.0.3: 1121 | resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} 1122 | dependencies: 1123 | d: 1.0.1 1124 | es5-ext: 0.10.62 1125 | es6-iterator: 2.0.3 1126 | es6-symbol: 3.1.3 1127 | dev: false 1128 | 1129 | /esbuild-register@3.5.0(esbuild@0.19.12): 1130 | resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} 1131 | peerDependencies: 1132 | esbuild: '>=0.12 <1' 1133 | dependencies: 1134 | debug: 4.3.4 1135 | esbuild: 0.19.12 1136 | transitivePeerDependencies: 1137 | - supports-color 1138 | dev: false 1139 | 1140 | /esbuild@0.18.20: 1141 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} 1142 | engines: {node: '>=12'} 1143 | hasBin: true 1144 | requiresBuild: true 1145 | optionalDependencies: 1146 | '@esbuild/android-arm': 0.18.20 1147 | '@esbuild/android-arm64': 0.18.20 1148 | '@esbuild/android-x64': 0.18.20 1149 | '@esbuild/darwin-arm64': 0.18.20 1150 | '@esbuild/darwin-x64': 0.18.20 1151 | '@esbuild/freebsd-arm64': 0.18.20 1152 | '@esbuild/freebsd-x64': 0.18.20 1153 | '@esbuild/linux-arm': 0.18.20 1154 | '@esbuild/linux-arm64': 0.18.20 1155 | '@esbuild/linux-ia32': 0.18.20 1156 | '@esbuild/linux-loong64': 0.18.20 1157 | '@esbuild/linux-mips64el': 0.18.20 1158 | '@esbuild/linux-ppc64': 0.18.20 1159 | '@esbuild/linux-riscv64': 0.18.20 1160 | '@esbuild/linux-s390x': 0.18.20 1161 | '@esbuild/linux-x64': 0.18.20 1162 | '@esbuild/netbsd-x64': 0.18.20 1163 | '@esbuild/openbsd-x64': 0.18.20 1164 | '@esbuild/sunos-x64': 0.18.20 1165 | '@esbuild/win32-arm64': 0.18.20 1166 | '@esbuild/win32-ia32': 0.18.20 1167 | '@esbuild/win32-x64': 0.18.20 1168 | dev: false 1169 | 1170 | /esbuild@0.19.12: 1171 | resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} 1172 | engines: {node: '>=12'} 1173 | hasBin: true 1174 | requiresBuild: true 1175 | optionalDependencies: 1176 | '@esbuild/aix-ppc64': 0.19.12 1177 | '@esbuild/android-arm': 0.19.12 1178 | '@esbuild/android-arm64': 0.19.12 1179 | '@esbuild/android-x64': 0.19.12 1180 | '@esbuild/darwin-arm64': 0.19.12 1181 | '@esbuild/darwin-x64': 0.19.12 1182 | '@esbuild/freebsd-arm64': 0.19.12 1183 | '@esbuild/freebsd-x64': 0.19.12 1184 | '@esbuild/linux-arm': 0.19.12 1185 | '@esbuild/linux-arm64': 0.19.12 1186 | '@esbuild/linux-ia32': 0.19.12 1187 | '@esbuild/linux-loong64': 0.19.12 1188 | '@esbuild/linux-mips64el': 0.19.12 1189 | '@esbuild/linux-ppc64': 0.19.12 1190 | '@esbuild/linux-riscv64': 0.19.12 1191 | '@esbuild/linux-s390x': 0.19.12 1192 | '@esbuild/linux-x64': 0.19.12 1193 | '@esbuild/netbsd-x64': 0.19.12 1194 | '@esbuild/openbsd-x64': 0.19.12 1195 | '@esbuild/sunos-x64': 0.19.12 1196 | '@esbuild/win32-arm64': 0.19.12 1197 | '@esbuild/win32-ia32': 0.19.12 1198 | '@esbuild/win32-x64': 0.19.12 1199 | dev: false 1200 | 1201 | /escalade@3.1.2: 1202 | resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} 1203 | engines: {node: '>=6'} 1204 | dev: false 1205 | 1206 | /event-emitter@0.3.5: 1207 | resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} 1208 | dependencies: 1209 | d: 1.0.1 1210 | es5-ext: 0.10.62 1211 | dev: false 1212 | 1213 | /eventemitter3@5.0.1: 1214 | resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} 1215 | dev: false 1216 | 1217 | /expand-template@2.0.3: 1218 | resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} 1219 | engines: {node: '>=6'} 1220 | dev: false 1221 | 1222 | /ext@1.7.0: 1223 | resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} 1224 | dependencies: 1225 | type: 2.7.2 1226 | dev: false 1227 | 1228 | /fast-decode-uri-component@1.0.1: 1229 | resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} 1230 | dev: false 1231 | 1232 | /fast-querystring@1.1.2: 1233 | resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} 1234 | dependencies: 1235 | fast-decode-uri-component: 1.0.1 1236 | dev: false 1237 | 1238 | /fetch-blob@3.2.0: 1239 | resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} 1240 | engines: {node: ^12.20 || >= 14.13} 1241 | dependencies: 1242 | node-domexception: 1.0.0 1243 | web-streams-polyfill: 3.3.2 1244 | dev: false 1245 | 1246 | /file-uri-to-path@1.0.0: 1247 | resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} 1248 | dev: false 1249 | 1250 | /form-data@4.0.0: 1251 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 1252 | engines: {node: '>= 6'} 1253 | dependencies: 1254 | asynckit: 0.4.0 1255 | combined-stream: 1.0.8 1256 | mime-types: 2.1.35 1257 | dev: false 1258 | 1259 | /formdata-polyfill@4.0.10: 1260 | resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} 1261 | engines: {node: '>=12.20.0'} 1262 | dependencies: 1263 | fetch-blob: 3.2.0 1264 | dev: false 1265 | 1266 | /fs-constants@1.0.0: 1267 | resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} 1268 | dev: false 1269 | 1270 | /fs.realpath@1.0.0: 1271 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1272 | dev: false 1273 | 1274 | /get-caller-file@2.0.5: 1275 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1276 | engines: {node: 6.* || 8.* || >= 10.*} 1277 | dev: false 1278 | 1279 | /get-tsconfig@4.7.2: 1280 | resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} 1281 | dependencies: 1282 | resolve-pkg-maps: 1.0.0 1283 | dev: false 1284 | 1285 | /github-from-package@0.0.0: 1286 | resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} 1287 | dev: false 1288 | 1289 | /glob@8.1.0: 1290 | resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} 1291 | engines: {node: '>=12'} 1292 | dependencies: 1293 | fs.realpath: 1.0.0 1294 | inflight: 1.0.6 1295 | inherits: 2.0.4 1296 | minimatch: 5.1.6 1297 | once: 1.4.0 1298 | dev: false 1299 | 1300 | /hanji@0.0.5: 1301 | resolution: {integrity: sha512-Abxw1Lq+TnYiL4BueXqMau222fPSPMFtya8HdpWsz/xVAhifXou71mPh/kY2+08RgFcVccjG3uZHs6K5HAe3zw==} 1302 | dependencies: 1303 | lodash.throttle: 4.1.1 1304 | sisteransi: 1.0.5 1305 | dev: false 1306 | 1307 | /has-flag@4.0.0: 1308 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1309 | engines: {node: '>=8'} 1310 | dev: false 1311 | 1312 | /heap@0.2.7: 1313 | resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} 1314 | dev: false 1315 | 1316 | /html-encoding-sniffer@4.0.0: 1317 | resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} 1318 | engines: {node: '>=18'} 1319 | dependencies: 1320 | whatwg-encoding: 3.1.1 1321 | dev: false 1322 | 1323 | /http-proxy-agent@7.0.0: 1324 | resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} 1325 | engines: {node: '>= 14'} 1326 | dependencies: 1327 | agent-base: 7.1.0 1328 | debug: 4.3.4 1329 | transitivePeerDependencies: 1330 | - supports-color 1331 | dev: false 1332 | 1333 | /https-proxy-agent@7.0.2: 1334 | resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} 1335 | engines: {node: '>= 14'} 1336 | dependencies: 1337 | agent-base: 7.1.0 1338 | debug: 4.3.4 1339 | transitivePeerDependencies: 1340 | - supports-color 1341 | dev: false 1342 | 1343 | /iconv-lite@0.6.3: 1344 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 1345 | engines: {node: '>=0.10.0'} 1346 | dependencies: 1347 | safer-buffer: 2.1.2 1348 | dev: false 1349 | 1350 | /ieee754@1.2.1: 1351 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 1352 | dev: false 1353 | 1354 | /inflight@1.0.6: 1355 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1356 | dependencies: 1357 | once: 1.4.0 1358 | wrappy: 1.0.2 1359 | dev: false 1360 | 1361 | /inherits@2.0.4: 1362 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1363 | dev: false 1364 | 1365 | /ini@1.3.8: 1366 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 1367 | dev: false 1368 | 1369 | /is-fullwidth-code-point@3.0.0: 1370 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1371 | engines: {node: '>=8'} 1372 | dev: false 1373 | 1374 | /is-potential-custom-element-name@1.0.1: 1375 | resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} 1376 | dev: false 1377 | 1378 | /is-promise@2.2.2: 1379 | resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} 1380 | dev: false 1381 | 1382 | /is-what@4.1.16: 1383 | resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} 1384 | engines: {node: '>=12.13'} 1385 | dev: false 1386 | 1387 | /js-base64@3.7.6: 1388 | resolution: {integrity: sha512-NPrWuHFxFUknr1KqJRDgUQPexQF0uIJWjeT+2KjEePhitQxQEx5EJBG1lVn5/hc8aLycTpXrDOgPQ6Zq+EDiTA==} 1389 | dev: false 1390 | 1391 | /jsdom@24.0.0: 1392 | resolution: {integrity: sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==} 1393 | engines: {node: '>=18'} 1394 | peerDependencies: 1395 | canvas: ^2.11.2 1396 | peerDependenciesMeta: 1397 | canvas: 1398 | optional: true 1399 | dependencies: 1400 | cssstyle: 4.0.1 1401 | data-urls: 5.0.0 1402 | decimal.js: 10.4.3 1403 | form-data: 4.0.0 1404 | html-encoding-sniffer: 4.0.0 1405 | http-proxy-agent: 7.0.0 1406 | https-proxy-agent: 7.0.2 1407 | is-potential-custom-element-name: 1.0.1 1408 | nwsapi: 2.2.7 1409 | parse5: 7.1.2 1410 | rrweb-cssom: 0.6.0 1411 | saxes: 6.0.0 1412 | symbol-tree: 3.2.4 1413 | tough-cookie: 4.1.3 1414 | w3c-xmlserializer: 5.0.0 1415 | webidl-conversions: 7.0.0 1416 | whatwg-encoding: 3.1.1 1417 | whatwg-mimetype: 4.0.0 1418 | whatwg-url: 14.0.0 1419 | ws: 8.16.0 1420 | xml-name-validator: 5.0.0 1421 | transitivePeerDependencies: 1422 | - bufferutil 1423 | - supports-color 1424 | - utf-8-validate 1425 | dev: false 1426 | 1427 | /json-diff@0.9.0: 1428 | resolution: {integrity: sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ==} 1429 | hasBin: true 1430 | dependencies: 1431 | cli-color: 2.0.3 1432 | difflib: 0.2.4 1433 | dreamopt: 0.8.0 1434 | dev: false 1435 | 1436 | /libsql@0.2.0: 1437 | resolution: {integrity: sha512-ELBRqhpJx5Dap0187zKQnntZyk4EjlDHSrjIVL8t+fQ5e8IxbQTeYgZgigMjB1EvrETdkm0Y0VxBGhzPQ+t0Jg==} 1438 | cpu: [x64, arm64] 1439 | os: [darwin, linux, win32] 1440 | requiresBuild: true 1441 | dependencies: 1442 | '@neon-rs/load': 0.0.4 1443 | detect-libc: 2.0.2 1444 | optionalDependencies: 1445 | '@libsql/darwin-arm64': 0.2.0 1446 | '@libsql/darwin-x64': 0.2.0 1447 | '@libsql/linux-arm64-gnu': 0.2.0 1448 | '@libsql/linux-arm64-musl': 0.2.0 1449 | '@libsql/linux-x64-gnu': 0.2.0 1450 | '@libsql/linux-x64-musl': 0.2.0 1451 | '@libsql/win32-x64-msvc': 0.2.0 1452 | dev: false 1453 | optional: true 1454 | 1455 | /lodash.throttle@4.1.1: 1456 | resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} 1457 | dev: false 1458 | 1459 | /lru-cache@6.0.0: 1460 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1461 | engines: {node: '>=10'} 1462 | dependencies: 1463 | yallist: 4.0.0 1464 | dev: false 1465 | 1466 | /lru-queue@0.1.0: 1467 | resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} 1468 | dependencies: 1469 | es5-ext: 0.10.62 1470 | dev: false 1471 | 1472 | /memoirist@0.1.10: 1473 | resolution: {integrity: sha512-k2ARHDrSzqeQAWrgvE2NgNj7p5c1LkeFI1VizklJWDXAOTgq7m8mtl0v6W1mVawFNe3DH0hb4BdA91y3vwbqvw==} 1474 | dev: false 1475 | 1476 | /memoizee@0.4.15: 1477 | resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} 1478 | dependencies: 1479 | d: 1.0.1 1480 | es5-ext: 0.10.62 1481 | es6-weak-map: 2.0.3 1482 | event-emitter: 0.3.5 1483 | is-promise: 2.2.2 1484 | lru-queue: 0.1.0 1485 | next-tick: 1.1.0 1486 | timers-ext: 0.1.7 1487 | dev: false 1488 | 1489 | /mime-db@1.52.0: 1490 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1491 | engines: {node: '>= 0.6'} 1492 | dev: false 1493 | 1494 | /mime-types@2.1.35: 1495 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1496 | engines: {node: '>= 0.6'} 1497 | dependencies: 1498 | mime-db: 1.52.0 1499 | dev: false 1500 | 1501 | /mimic-response@3.1.0: 1502 | resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} 1503 | engines: {node: '>=10'} 1504 | dev: false 1505 | 1506 | /minimatch@5.1.6: 1507 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 1508 | engines: {node: '>=10'} 1509 | dependencies: 1510 | brace-expansion: 2.0.1 1511 | dev: false 1512 | 1513 | /minimatch@7.4.6: 1514 | resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} 1515 | engines: {node: '>=10'} 1516 | dependencies: 1517 | brace-expansion: 2.0.1 1518 | dev: false 1519 | 1520 | /minimist@1.2.8: 1521 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1522 | dev: false 1523 | 1524 | /mkdirp-classic@0.5.3: 1525 | resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} 1526 | dev: false 1527 | 1528 | /ms@2.1.2: 1529 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1530 | dev: false 1531 | 1532 | /napi-build-utils@1.0.2: 1533 | resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} 1534 | dev: false 1535 | 1536 | /next-tick@1.1.0: 1537 | resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} 1538 | dev: false 1539 | 1540 | /node-abi@3.54.0: 1541 | resolution: {integrity: sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==} 1542 | engines: {node: '>=10'} 1543 | dependencies: 1544 | semver: 7.6.0 1545 | dev: false 1546 | 1547 | /node-cache@5.1.2: 1548 | resolution: {integrity: sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==} 1549 | engines: {node: '>= 8.0.0'} 1550 | dependencies: 1551 | clone: 2.1.2 1552 | dev: false 1553 | 1554 | /node-domexception@1.0.0: 1555 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} 1556 | engines: {node: '>=10.5.0'} 1557 | dev: false 1558 | 1559 | /node-fetch@2.7.0: 1560 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 1561 | engines: {node: 4.x || >=6.0.0} 1562 | peerDependencies: 1563 | encoding: ^0.1.0 1564 | peerDependenciesMeta: 1565 | encoding: 1566 | optional: true 1567 | dependencies: 1568 | whatwg-url: 5.0.0 1569 | dev: false 1570 | 1571 | /node-fetch@3.3.2: 1572 | resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} 1573 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1574 | dependencies: 1575 | data-uri-to-buffer: 4.0.1 1576 | fetch-blob: 3.2.0 1577 | formdata-polyfill: 4.0.10 1578 | dev: false 1579 | 1580 | /nwsapi@2.2.7: 1581 | resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} 1582 | dev: false 1583 | 1584 | /once@1.4.0: 1585 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1586 | dependencies: 1587 | wrappy: 1.0.2 1588 | dev: false 1589 | 1590 | /parse5@7.1.2: 1591 | resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} 1592 | dependencies: 1593 | entities: 4.5.0 1594 | dev: false 1595 | 1596 | /preact@10.19.3: 1597 | resolution: {integrity: sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==} 1598 | dev: false 1599 | 1600 | /prebuild-install@7.1.1: 1601 | resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} 1602 | engines: {node: '>=10'} 1603 | hasBin: true 1604 | dependencies: 1605 | detect-libc: 2.0.2 1606 | expand-template: 2.0.3 1607 | github-from-package: 0.0.0 1608 | minimist: 1.2.8 1609 | mkdirp-classic: 0.5.3 1610 | napi-build-utils: 1.0.2 1611 | node-abi: 3.54.0 1612 | pump: 3.0.0 1613 | rc: 1.2.8 1614 | simple-get: 4.0.1 1615 | tar-fs: 2.1.1 1616 | tunnel-agent: 0.6.0 1617 | dev: false 1618 | 1619 | /psl@1.9.0: 1620 | resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} 1621 | dev: false 1622 | 1623 | /pump@3.0.0: 1624 | resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} 1625 | dependencies: 1626 | end-of-stream: 1.4.4 1627 | once: 1.4.0 1628 | dev: false 1629 | 1630 | /punycode@2.3.1: 1631 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1632 | engines: {node: '>=6'} 1633 | dev: false 1634 | 1635 | /querystringify@2.2.0: 1636 | resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} 1637 | dev: false 1638 | 1639 | /rc@1.2.8: 1640 | resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} 1641 | hasBin: true 1642 | dependencies: 1643 | deep-extend: 0.6.0 1644 | ini: 1.3.8 1645 | minimist: 1.2.8 1646 | strip-json-comments: 2.0.1 1647 | dev: false 1648 | 1649 | /readable-stream@3.6.2: 1650 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 1651 | engines: {node: '>= 6'} 1652 | dependencies: 1653 | inherits: 2.0.4 1654 | string_decoder: 1.3.0 1655 | util-deprecate: 1.0.2 1656 | dev: false 1657 | 1658 | /require-directory@2.1.1: 1659 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1660 | engines: {node: '>=0.10.0'} 1661 | dev: false 1662 | 1663 | /requires-port@1.0.0: 1664 | resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} 1665 | dev: false 1666 | 1667 | /resolve-pkg-maps@1.0.0: 1668 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1669 | dev: false 1670 | 1671 | /rrweb-cssom@0.6.0: 1672 | resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} 1673 | dev: false 1674 | 1675 | /safe-buffer@5.2.1: 1676 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1677 | dev: false 1678 | 1679 | /safer-buffer@2.1.2: 1680 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1681 | dev: false 1682 | 1683 | /saxes@6.0.0: 1684 | resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} 1685 | engines: {node: '>=v12.22.7'} 1686 | dependencies: 1687 | xmlchars: 2.2.0 1688 | dev: false 1689 | 1690 | /semver@7.6.0: 1691 | resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} 1692 | engines: {node: '>=10'} 1693 | hasBin: true 1694 | dependencies: 1695 | lru-cache: 6.0.0 1696 | dev: false 1697 | 1698 | /simple-concat@1.0.1: 1699 | resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} 1700 | dev: false 1701 | 1702 | /simple-get@4.0.1: 1703 | resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} 1704 | dependencies: 1705 | decompress-response: 6.0.0 1706 | once: 1.4.0 1707 | simple-concat: 1.0.1 1708 | dev: false 1709 | 1710 | /simple-markdown@1.0.0-alpha.0: 1711 | resolution: {integrity: sha512-SaQ6bVTEsaI23SvcqskJIe2Yozet0LoiPWDetSQ8MndKQNC9q6S/Y6jX932wjBMEy1MawilOFJPKYunUJk8rbA==} 1712 | dev: false 1713 | 1714 | /sisteransi@1.0.5: 1715 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 1716 | dev: false 1717 | 1718 | /source-map-support@0.5.21: 1719 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 1720 | dependencies: 1721 | buffer-from: 1.1.2 1722 | source-map: 0.6.1 1723 | dev: false 1724 | 1725 | /source-map@0.6.1: 1726 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1727 | engines: {node: '>=0.10.0'} 1728 | dev: false 1729 | 1730 | /string-width@4.2.3: 1731 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1732 | engines: {node: '>=8'} 1733 | dependencies: 1734 | emoji-regex: 8.0.0 1735 | is-fullwidth-code-point: 3.0.0 1736 | strip-ansi: 6.0.1 1737 | dev: false 1738 | 1739 | /string_decoder@1.3.0: 1740 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1741 | dependencies: 1742 | safe-buffer: 5.2.1 1743 | dev: false 1744 | 1745 | /strip-ansi@6.0.1: 1746 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1747 | engines: {node: '>=8'} 1748 | dependencies: 1749 | ansi-regex: 5.0.1 1750 | dev: false 1751 | 1752 | /strip-json-comments@2.0.1: 1753 | resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} 1754 | engines: {node: '>=0.10.0'} 1755 | dev: false 1756 | 1757 | /superjson@2.2.1: 1758 | resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} 1759 | engines: {node: '>=16'} 1760 | dependencies: 1761 | copy-anything: 3.0.5 1762 | dev: false 1763 | 1764 | /supports-color@7.2.0: 1765 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1766 | engines: {node: '>=8'} 1767 | dependencies: 1768 | has-flag: 4.0.0 1769 | dev: false 1770 | 1771 | /symbol-tree@3.2.4: 1772 | resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} 1773 | dev: false 1774 | 1775 | /tar-fs@2.1.1: 1776 | resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} 1777 | dependencies: 1778 | chownr: 1.1.4 1779 | mkdirp-classic: 0.5.3 1780 | pump: 3.0.0 1781 | tar-stream: 2.2.0 1782 | dev: false 1783 | 1784 | /tar-stream@2.2.0: 1785 | resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} 1786 | engines: {node: '>=6'} 1787 | dependencies: 1788 | bl: 4.1.0 1789 | end-of-stream: 1.4.4 1790 | fs-constants: 1.0.0 1791 | inherits: 2.0.4 1792 | readable-stream: 3.6.2 1793 | dev: false 1794 | 1795 | /timers-ext@0.1.7: 1796 | resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} 1797 | dependencies: 1798 | es5-ext: 0.10.62 1799 | next-tick: 1.1.0 1800 | dev: false 1801 | 1802 | /tough-cookie@4.1.3: 1803 | resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} 1804 | engines: {node: '>=6'} 1805 | dependencies: 1806 | psl: 1.9.0 1807 | punycode: 2.3.1 1808 | universalify: 0.2.0 1809 | url-parse: 1.5.10 1810 | dev: false 1811 | 1812 | /tr46@0.0.3: 1813 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1814 | dev: false 1815 | 1816 | /tr46@5.0.0: 1817 | resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} 1818 | engines: {node: '>=18'} 1819 | dependencies: 1820 | punycode: 2.3.1 1821 | dev: false 1822 | 1823 | /tslib@2.6.2: 1824 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1825 | dev: false 1826 | 1827 | /tunnel-agent@0.6.0: 1828 | resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} 1829 | dependencies: 1830 | safe-buffer: 5.2.1 1831 | dev: false 1832 | 1833 | /type@1.2.0: 1834 | resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} 1835 | dev: false 1836 | 1837 | /type@2.7.2: 1838 | resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} 1839 | dev: false 1840 | 1841 | /typescript@5.3.3: 1842 | resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} 1843 | engines: {node: '>=14.17'} 1844 | hasBin: true 1845 | dev: false 1846 | 1847 | /undici-types@5.26.5: 1848 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 1849 | 1850 | /universalify@0.2.0: 1851 | resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} 1852 | engines: {node: '>= 4.0.0'} 1853 | dev: false 1854 | 1855 | /url-parse@1.5.10: 1856 | resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} 1857 | dependencies: 1858 | querystringify: 2.2.0 1859 | requires-port: 1.0.0 1860 | dev: false 1861 | 1862 | /util-deprecate@1.0.2: 1863 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1864 | dev: false 1865 | 1866 | /w3c-xmlserializer@5.0.0: 1867 | resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} 1868 | engines: {node: '>=18'} 1869 | dependencies: 1870 | xml-name-validator: 5.0.0 1871 | dev: false 1872 | 1873 | /web-streams-polyfill@3.3.2: 1874 | resolution: {integrity: sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==} 1875 | engines: {node: '>= 8'} 1876 | dev: false 1877 | 1878 | /webidl-conversions@3.0.1: 1879 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 1880 | dev: false 1881 | 1882 | /webidl-conversions@7.0.0: 1883 | resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} 1884 | engines: {node: '>=12'} 1885 | dev: false 1886 | 1887 | /whatwg-encoding@3.1.1: 1888 | resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} 1889 | engines: {node: '>=18'} 1890 | dependencies: 1891 | iconv-lite: 0.6.3 1892 | dev: false 1893 | 1894 | /whatwg-mimetype@4.0.0: 1895 | resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} 1896 | engines: {node: '>=18'} 1897 | dev: false 1898 | 1899 | /whatwg-url@14.0.0: 1900 | resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} 1901 | engines: {node: '>=18'} 1902 | dependencies: 1903 | tr46: 5.0.0 1904 | webidl-conversions: 7.0.0 1905 | dev: false 1906 | 1907 | /whatwg-url@5.0.0: 1908 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 1909 | dependencies: 1910 | tr46: 0.0.3 1911 | webidl-conversions: 3.0.1 1912 | dev: false 1913 | 1914 | /wordwrap@1.0.0: 1915 | resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} 1916 | dev: false 1917 | 1918 | /wrap-ansi@7.0.0: 1919 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1920 | engines: {node: '>=10'} 1921 | dependencies: 1922 | ansi-styles: 4.3.0 1923 | string-width: 4.2.3 1924 | strip-ansi: 6.0.1 1925 | dev: false 1926 | 1927 | /wrappy@1.0.2: 1928 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1929 | dev: false 1930 | 1931 | /ws@8.16.0: 1932 | resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} 1933 | engines: {node: '>=10.0.0'} 1934 | peerDependencies: 1935 | bufferutil: ^4.0.1 1936 | utf-8-validate: '>=5.0.2' 1937 | peerDependenciesMeta: 1938 | bufferutil: 1939 | optional: true 1940 | utf-8-validate: 1941 | optional: true 1942 | dev: false 1943 | 1944 | /xml-name-validator@5.0.0: 1945 | resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} 1946 | engines: {node: '>=18'} 1947 | dev: false 1948 | 1949 | /xmlchars@2.2.0: 1950 | resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} 1951 | dev: false 1952 | 1953 | /y18n@5.0.8: 1954 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1955 | engines: {node: '>=10'} 1956 | dev: false 1957 | 1958 | /yallist@4.0.0: 1959 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1960 | dev: false 1961 | 1962 | /yargs-parser@21.1.1: 1963 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1964 | engines: {node: '>=12'} 1965 | dev: false 1966 | 1967 | /yargs@17.7.2: 1968 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 1969 | engines: {node: '>=12'} 1970 | dependencies: 1971 | cliui: 8.0.1 1972 | escalade: 3.1.2 1973 | get-caller-file: 2.0.5 1974 | require-directory: 2.1.1 1975 | string-width: 4.2.3 1976 | y18n: 5.0.8 1977 | yargs-parser: 21.1.1 1978 | dev: false 1979 | 1980 | /zod@3.22.4: 1981 | resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} 1982 | dev: false 1983 | -------------------------------------------------------------------------------- /packages/hype/public/hype.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stolinski/Hype/09763d235e5c4c8def8a82f13f61c6fbb12e8476/packages/hype/public/hype.png -------------------------------------------------------------------------------- /packages/hype/public/hypelogo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/hype/public/og.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stolinski/Hype/09763d235e5c4c8def8a82f13f61c6fbb12e8476/packages/hype/public/og.png -------------------------------------------------------------------------------- /packages/hype/src/app.ts: -------------------------------------------------------------------------------- 1 | export const IS_DEV = process.env.NODE_ENV === "development"; 2 | export const IS_PROD = process.env.NODE_ENV === "production"; 3 | export const IS_BROWSER = 4 | typeof window !== "undefined" && typeof document !== "undefined"; 5 | -------------------------------------------------------------------------------- /packages/hype/src/html.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This code was lovingly borrowed from Jim Nielsen's blog post - Scott 3 | * Tagged template literal function for coercing certain values to what 4 | * we would expcted for a more JSX-like syntax. 5 | * 6 | * For values that we don't want to coerce, we just skip outputing them 7 | * Example: 8 | * `class="${variable}"` 9 | * If the value of my variable was one of these types I don't want 10 | * JavaScript to coerce, then I'd get this: 11 | * 'class=""' 12 | * 13 | * https://blog.jim-nielsen.com/2019/jsx-like-syntax-for-tagged-template-literals/ 14 | */ 15 | export default function html(strings: TemplateStringsArray, ...values: any[]) { 16 | let out = ""; 17 | strings.forEach((string, i) => { 18 | const value = values[i]; 19 | 20 | // Array - Join to string and output with value 21 | if (Array.isArray(value)) { 22 | out += string + value.join(""); 23 | } 24 | // String - Output with value 25 | else if (typeof value === "string") { 26 | out += string + value; 27 | } 28 | // Number - Coerce to string and output with value 29 | // This would happen anyway, but for clarity's sake on what's happening here 30 | else if (typeof value === "number") { 31 | out += string + String(value); 32 | } 33 | // object, undefined, null, boolean - Don't output a value. 34 | else { 35 | out += string; 36 | } 37 | }); 38 | return out; 39 | } 40 | -------------------------------------------------------------------------------- /packages/hype/src/hype.ts: -------------------------------------------------------------------------------- 1 | // import { html, raw } from "hono/html"; 2 | import { htmxMiddleware } from "@hype/htmx_hono_middleware"; 3 | import { Hono } from "hono"; 4 | import { post_router, router } from "./router"; 5 | 6 | type HypeConfig = { 7 | APP_NAME: string; 8 | OG_IMAGE: string; 9 | SITE_DESCRIPTION: string; 10 | THEME: string; 11 | }; 12 | 13 | // Just experimenting with using jsdoc to get docs out of the code. 14 | /** 15 | * This function initializes an Hype app with the provided configuration, attaches necessary plugins, sets up a router, and starts the server. 16 | * It then logs a message with the server details. 17 | * ph 18 | * @param {HypeConfig} config - The configuration object for the Elysia app 19 | * @return {void} 20 | */ 21 | export async function getHype({ config }: { config: HypeConfig }) { 22 | // Run on initialization 23 | // Grabs all exports for theme. 24 | const { default: theme_root } = await import(`./themes/${config.THEME}/html`); 25 | const app = new Hono(); 26 | app.use("*", htmxMiddleware()); 27 | app.use("*", async (c, next) => { 28 | c.theme_root = theme_root; 29 | c.config = config; 30 | await next(); 31 | }); 32 | app.get("*", (c) => { 33 | return router(c); 34 | }); 35 | app.post("*", (c) => { 36 | return post_router(c); 37 | }); 38 | 39 | console.log( 40 | `📸 Hype is hyped up and running super fast at http://${app.server?.hostname}:${app.server?.port}` 41 | ); 42 | return app; 43 | } 44 | -------------------------------------------------------------------------------- /packages/hype/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./app"; 2 | export * from "./hype"; 3 | export * from "./javascripts"; 4 | export * from "./router"; 5 | import html from "./html"; 6 | 7 | export { html }; 8 | -------------------------------------------------------------------------------- /packages/hype/src/javascripts.ts: -------------------------------------------------------------------------------- 1 | import { IS_DEV } from "./app"; 2 | import html from "./html"; 3 | 4 | export const scripts = IS_DEV 5 | ? html` 6 | 34 | ` 35 | : ""; 36 | -------------------------------------------------------------------------------- /packages/hype/src/router.ts: -------------------------------------------------------------------------------- 1 | // Hi! Lots of naive code here. 2 | // I'm sure this will change quite a bit. 3 | import { createSignal } from "./state/signal"; 4 | import { PAGES_ROOT_PATH } from "./utils/file"; 5 | import { get_file_extension } from "./utils/get_file_extension"; 6 | import { route_process_to_array } from "./utils/route_process_to_array"; 7 | import { transform_markdown } from "./utils/transform_markdown"; 8 | // TODO: Folder nesting for layout.ts? 9 | 10 | type FileType = "md" | "html" | "ts"; 11 | 12 | type RouterComponent = { 13 | file_type: FileType; 14 | module: any; 15 | }; 16 | 17 | async function get_component(import_url: string): Promise { 18 | try { 19 | const module = await import(import_url); 20 | const file_type: FileType = get_file_extension(import_url) as FileType; 21 | 22 | return { 23 | file_type, 24 | module, 25 | }; 26 | } catch (e) { 27 | console.log(e); 28 | throw new Error("Component not found"); 29 | } 30 | } 31 | // TODO move to middleware 32 | const bun_router = new Bun.FileSystemRouter({ 33 | style: "nextjs", 34 | dir: PAGES_ROOT_PATH, 35 | fileExtensions: [".ts", ".md", ".html"], 36 | }); 37 | 38 | const routes = route_process_to_array(bun_router.routes); 39 | export const routes_sig = createSignal(routes); 40 | 41 | // TODO: these types will need to get figured out once the api is done. 42 | export const router = async ({ 43 | req, 44 | theme_root, 45 | config, 46 | htmx, 47 | html, 48 | body, 49 | ...rest 50 | }) => { 51 | try { 52 | const httpVerb = req.method.toLowerCase(); 53 | const route_data = { 54 | request: req, 55 | theme_root, 56 | config, 57 | htmx, 58 | html, 59 | body, 60 | ...rest, 61 | }; 62 | 63 | const url = new URL(req.url); 64 | const pathname = url.pathname; 65 | const path_match = bun_router.match(pathname); 66 | 67 | if (path_match) { 68 | const import_url = `${PAGES_ROOT_PATH}/${path_match.src}`; 69 | const { file_type, module } = await get_component(import_url); 70 | 71 | console.log( 72 | `${file_type} file loaded from ${import_url} with route: ${pathname}` 73 | ); 74 | 75 | if (file_type === "md") { 76 | const markdown = await Bun.file(import_url).text(); 77 | const html_data = transform_markdown(markdown); 78 | 79 | if (htmx?.request) { 80 | return html(html_data); 81 | } 82 | return html(theme_root({ children: html_data, ...route_data })); 83 | } 84 | 85 | if (file_type === "html") { 86 | const html_data = await Bun.file(import_url).text(); 87 | if (htmx?.request) { 88 | return html(html_data); 89 | } 90 | return html(theme_root({ children: html_data, ...route_data })); 91 | } 92 | 93 | if (file_type === "ts") { 94 | if (httpVerb === "get") { 95 | const page = await module.default({ ...route_data }); 96 | if (htmx?.request) { 97 | return html(page); 98 | } 99 | // TODO need to finalize or organize component args 100 | const complete_html = await theme_root({ 101 | children: page, 102 | ...route_data, 103 | }); 104 | return html(complete_html); 105 | } 106 | if (httpVerb === "post") { 107 | return module?.post({ ...route_data }); 108 | } 109 | } 110 | } 111 | } catch (e) { 112 | console.log("e", e); 113 | return "404 - Page not found"; 114 | } 115 | return "404 - Page not found"; 116 | }; 117 | 118 | export async function post_router(c) { 119 | const url = new URL(c.req.url); 120 | const pathname = url.pathname; 121 | const path_match = bun_router.match(pathname); 122 | if (path_match) { 123 | const import_url = `${PAGES_ROOT_PATH}/${path_match.src}`; 124 | const { module } = await get_component(import_url); 125 | return c.html(module?.post(c)); 126 | } 127 | return "404 - Page not found"; 128 | } 129 | -------------------------------------------------------------------------------- /packages/hype/src/state/signal.ts: -------------------------------------------------------------------------------- 1 | // signal.ts 2 | type Listener = (value: T) => void; 3 | 4 | function createSignal(initialValue: T) { 5 | let value = initialValue; 6 | const listeners: Listener[] = []; 7 | 8 | const subscribe = (listener: Listener) => { 9 | listeners.push(listener); 10 | return () => { 11 | const index = listeners.indexOf(listener); 12 | if (index > -1) { 13 | listeners.splice(index, 1); 14 | } 15 | }; 16 | }; 17 | 18 | const setValue = (newValue: T) => { 19 | if (newValue !== value) { 20 | value = newValue; 21 | listeners.forEach((listener) => listener(value)); 22 | } 23 | }; 24 | 25 | const getValue = () => value; 26 | 27 | return { subscribe, setValue, getValue }; 28 | } 29 | 30 | export { createSignal }; 31 | -------------------------------------------------------------------------------- /packages/hype/src/themes/DEFAULT/blocks/Nav.ts: -------------------------------------------------------------------------------- 1 | import html from "../../../html"; 2 | import { routes_sig } from "../../../router"; 3 | 4 | // TODO wizard that grabs the default templates from the 5 | // Components can be strings or functions, anon or named. 6 | // heck, even arrow functions if you'd like. 7 | 8 | function getCommonRoutes(allRoutes: string[], selectedRoutes: string[]) { 9 | // Flatten the first array 10 | const flattenedRoutes = allRoutes.flat(); 11 | 12 | // Filter the second array based on the flattened first array 13 | return selectedRoutes.filter((route) => flattenedRoutes.includes(route)); 14 | } 15 | 16 | export function Nav({ options }) { 17 | const c = routes_sig.getValue(); 18 | const common_routes = getCommonRoutes(c, options.links); 19 | 20 | const links = common_routes.map((route) => { 21 | if (Array.isArray(route)) { 22 | } else { 23 | return html` 24 |
  • 25 | ${route === "/" ? "Home" : route.substring(1)} 26 |
  • 27 | `; 28 | } 29 | }); 30 | 31 | return html` 32 | 37 | 38 | 56 | `; 57 | } 58 | -------------------------------------------------------------------------------- /packages/hype/src/themes/DEFAULT/blocks/README.md: -------------------------------------------------------------------------------- 1 | # Blocks 2 | 3 | Blocks are functions that are baked into Hype. These will simplify how you build common sites. 4 | 5 | They can be overridden by making your own inside of /src/templates 6 | -------------------------------------------------------------------------------- /packages/hype/src/themes/DEFAULT/footer.ts: -------------------------------------------------------------------------------- 1 | import html from "../../html"; 2 | 3 | export const footer = html` 4 |
    5 |

    Copyright 2024

    6 |
    7 | 8 | 13 | `; 14 | -------------------------------------------------------------------------------- /packages/hype/src/themes/DEFAULT/header.ts: -------------------------------------------------------------------------------- 1 | import html from "../../html"; 2 | import { Nav } from "./blocks/Nav"; 3 | 4 | // TODO cli script that duplicates and overrides default templates 5 | 6 | export const header = () => html` 7 |
    8 | 35 | 36 | 37 | ${Nav({ 38 | options: { 39 | links: ["/", "/about", "/markdown", "/html"], 40 | }, 41 | })} 42 | 43 |
    44 | 45 | 75 | `; 76 | -------------------------------------------------------------------------------- /packages/hype/src/themes/DEFAULT/html.ts: -------------------------------------------------------------------------------- 1 | import html from "../../html"; 2 | import { scripts } from "../../javascripts"; 3 | import { get_theme_css_file } from "../../utils/get_theme_css_file"; 4 | import { footer } from "./footer"; 5 | import { header } from "./header"; 6 | import { meta } from "./meta"; 7 | 8 | export default async ({ children, config }: { children: string }) => { 9 | const styles = await get_theme_css_file(config.THEME); 10 | return html` 11 | 12 | 13 | ${meta({ title: config.APP_NAME })} 14 | 15 | 16 | 17 | ${header()} 18 |
    ${children}
    19 | ${footer} 20 | ${scripts} 21 | 22 | 23 | 44 | `; 45 | }; 46 | -------------------------------------------------------------------------------- /packages/hype/src/themes/DEFAULT/meta.ts: -------------------------------------------------------------------------------- 1 | import html from "../../html"; 2 | 3 | export const meta = ({ title }: { title: string }) => 4 | html`${title} 5 | 6 | `; 7 | -------------------------------------------------------------------------------- /packages/hype/src/themes/DEFAULT/style.css: -------------------------------------------------------------------------------- 1 | :root { 2 | @custom-media --below-small (width < 400px); 3 | @custom-media --below-med (width < 700px); 4 | @custom-media --below-large (width < 900px); 5 | @custom-media --below-xlarge (width < 1200px); 6 | 7 | @custom-media --above-small (width >400px); 8 | @custom-media --above-med (width > 700px); 9 | @custom-media --above-large (width > 900px); 10 | @custom-media --above-xlarge (width > 1200px); 11 | 12 | --black-hue: none; 13 | --blacklch: 0% none var(--black-hue); 14 | --black-1: oklch(97% 0 var(--black-hue)); 15 | --black-2: oklch(90% 0 var(--black-hue)); 16 | --black-3: oklch(83% 0 var(--black-hue)); 17 | --black-4: oklch(72% 0 var(--black-hue)); 18 | --black-5: oklch(67% 0 var(--black-hue)); 19 | --black-6: oklch(50% 0 var(--black-hue)); 20 | --black-7: oklch(35% 0 var(--black-hue)); 21 | --black-8: oklch(23.08% 0 var(--black-hue)); 22 | --black-9: oklch(13% 0 var(--black-hue)); 23 | --black-10: oklch(var(--blacklch)); 24 | --black: var(--black-10); 25 | --dark-grey: var(--black-8); 26 | --white: oklch(100% none none); 27 | 28 | /* Typography */ 29 | --body-font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", 30 | Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; 31 | --heading-font-family: system-ui, -apple-system, BlinkMacSystemFont, 32 | "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", 33 | sans-serif; 34 | 35 | --font-size-xs: clamp(0.6rem, 0.17vw + 0.76rem, 0.7rem); 36 | --font-size-sm: clamp(0.8rem, 0.17vw + 0.76rem, 0.89rem); 37 | --font-size-base: clamp(1rem, 0.34vw + 0.91rem, 1.19rem); 38 | --font-size-md: clamp(1.25rem, 0.61vw + 1.1rem, 1.58rem); 39 | --font-size-lg: clamp(1.56rem, 1vw + 1.31rem, 2.11rem); 40 | --font-size-xl: clamp(1.95rem, 1.56vw + 1.56rem, 2.81rem); 41 | --font-size-xxl: clamp(2.44rem, 2.38vw + 1.85rem, 3rem); 42 | --font-size-xxxl: clamp(3.05rem, 3.54vw + 2.17rem, 5rem); 43 | 44 | /* Shadow */ 45 | --default-padding: 1rem; 46 | 47 | /* THEME COLORS */ 48 | /* Light Theme as the default */ 49 | /* Backgrounds */ 50 | 51 | --bg: var(--white); 52 | 53 | /* Foreground */ 54 | --fg: var(--black); 55 | 56 | --border-size: 1.5px; 57 | --border: solid var(--border-size) var(--fg-sheet); 58 | } 59 | 60 | @layer base { 61 | * { 62 | box-sizing: border-box; 63 | } 64 | 65 | html { 66 | box-sizing: border-box; 67 | } 68 | 69 | *, 70 | *::before-, 71 | *::after { 72 | box-sizing: inherit; 73 | } 74 | 75 | h1, 76 | h2, 77 | h3, 78 | h4, 79 | h5, 80 | h6 { 81 | font-weight: 700; 82 | line-height: 1.4; 83 | margin-block: 0.2em; 84 | } 85 | 86 | h1, 87 | .h1 { 88 | font-size: var(--font-size-xxxl); 89 | } 90 | h2, 91 | .h2 { 92 | font-size: var(--font-size-xxl); 93 | /* font-weight: 700; */ 94 | } 95 | h3, 96 | .h3 { 97 | font-size: var(--font-size-xl); 98 | /* font-weight: 700; */ 99 | } 100 | h4, 101 | .h4 { 102 | font-size: var(--font-size-lg); 103 | /* font-weight: 400; */ 104 | } 105 | h5, 106 | .h5 { 107 | font-size: var(--font-size-md); 108 | } 109 | 110 | .h6, 111 | h6, 112 | p, 113 | li { 114 | font-size: var(--font-size-base); 115 | } 116 | 117 | body { 118 | padding: 0; 119 | margin: 0; 120 | font-family: var(--body-font-family); 121 | color: var(--fg); 122 | background: var(--bg); 123 | } 124 | 125 | a, 126 | .a { 127 | color: var(--link-fg, var(--fg)); 128 | text-decoration: none; 129 | } 130 | 131 | a:hover { 132 | cursor: pointer; 133 | } 134 | 135 | :is(p, li) a, 136 | .a { 137 | color: var(--color-sheet); 138 | text-decoration: underline; 139 | text-decoration-color: var(--primary); 140 | text-decoration-thickness: 1.5px; 141 | } 142 | 143 | p { 144 | line-height: 1.7; 145 | } 146 | ul { 147 | @media (--below-med) { 148 | padding: 0; 149 | } 150 | } 151 | 152 | img { 153 | display: block; 154 | max-width: 100%; 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /packages/hype/src/themes/DEFAULT/theme.toml: -------------------------------------------------------------------------------- 1 | title = "DEFAULT" 2 | version = "0.0.1" -------------------------------------------------------------------------------- /packages/hype/src/themes/HYPE/blocks/Nav.ts: -------------------------------------------------------------------------------- 1 | import html from "../../../html"; 2 | import { routes_sig } from "../../../router"; 3 | 4 | // TODO wizard that grabs the default templates from the 5 | // Components can be strings or functions, anon or named. 6 | // heck, even arrow functions if you'd like. 7 | 8 | function getCommonRoutes(allRoutes: string[], selectedRoutes: string[]) { 9 | // Flatten the first array 10 | const flattenedRoutes = allRoutes.flat(); 11 | 12 | // Filter the second array based on the flattened first array 13 | return selectedRoutes.filter((route) => flattenedRoutes.includes(route)); 14 | } 15 | 16 | export function Nav({ options }) { 17 | const c = routes_sig.getValue(); 18 | const common_routes = getCommonRoutes(c, options.links); 19 | 20 | const links = common_routes.map((route) => { 21 | if (Array.isArray(route)) { 22 | } else { 23 | return html` 24 |
  • 25 | ${route === "/" ? "Home" : route.substring(1)} 26 |
  • 27 | `; 28 | } 29 | }); 30 | 31 | return html` 32 | 37 | 38 | 56 | `; 57 | } 58 | -------------------------------------------------------------------------------- /packages/hype/src/themes/HYPE/blocks/README.md: -------------------------------------------------------------------------------- 1 | # Blocks 2 | 3 | Blocks are functions that are baked into Hype. These will simplify how you build common sites. 4 | 5 | They can be overridden by making your own inside of /src/templates 6 | -------------------------------------------------------------------------------- /packages/hype/src/themes/HYPE/footer.ts: -------------------------------------------------------------------------------- 1 | import html from "../../html"; 2 | 3 | export const footer = html` 4 |
    5 |

    Copyright 2024

    6 |
    7 | 8 | 13 | `; 14 | -------------------------------------------------------------------------------- /packages/hype/src/themes/HYPE/header.ts: -------------------------------------------------------------------------------- 1 | import html from "../../html"; 2 | import { Nav } from "./blocks/Nav"; 3 | 4 | // TODO cli script that duplicates and overrides default templates 5 | 6 | export const header = () => html` 7 |
    8 | 35 | 36 | 37 | ${Nav({ 38 | options: { 39 | links: ["/", "/about", "/markdown", "/html"], 40 | }, 41 | })} 42 | 43 |
    44 | 45 | 75 | `; 76 | -------------------------------------------------------------------------------- /packages/hype/src/themes/HYPE/html.ts: -------------------------------------------------------------------------------- 1 | import html from "../../html"; 2 | import { scripts } from "../../javascripts"; 3 | import { get_theme_css_file } from "../../utils/get_theme_css_file"; 4 | import { footer } from "./footer"; 5 | import { header } from "./header"; 6 | import { meta } from "./meta"; 7 | 8 | export default async ({ children, config }: { children: string }) => { 9 | const styles = await get_theme_css_file(config.THEME); 10 | return html` 11 | 12 | 13 | ${meta({ title: config.APP_NAME })} 14 | 17 | 18 | 19 | ${header()} 20 |
    ${children}
    21 | ${footer} ${scripts} 22 | 23 | 24 | 42 | `; 43 | }; 44 | -------------------------------------------------------------------------------- /packages/hype/src/themes/HYPE/meta.ts: -------------------------------------------------------------------------------- 1 | import html from "../../html"; 2 | 3 | export const meta = ({ title }: { title: string }) => 4 | html`${title} 5 | 6 | `; 7 | -------------------------------------------------------------------------------- /packages/hype/src/themes/HYPE/style.css: -------------------------------------------------------------------------------- 1 | :root { 2 | /* Colors */ 3 | --tan: #f0e7d5; 4 | --black: #1f1f1f; 5 | --orange: #e75b2c; 6 | --yellow: #e8c951; 7 | /* Increase or decrease the number 8 | to change the vertical spacing globally*/ 9 | 10 | /* Base Vertical Spacing */ 11 | --space: 1.62; 12 | 13 | /* Vertical Spacing - multiplier */ 14 | --vspace: calc(var(--space) * 1rem); 15 | --vspace-0: calc(3 * var(--space) * 1rem); 16 | --vspace-1: calc(2 * var(--space) * 1rem); 17 | --vspace-2: calc(1.5 * var(--space) * 1rem); 18 | --vspace-3: calc(0.5 * var(--space) * 1rem); 19 | 20 | --bg: var(--tan); 21 | --fg: var(--black); 22 | 23 | --tint: oklch(100% 0 0 / 80%); 24 | --shade: oklch(0 0 0 / 10%); 25 | --deep-shade: oklch(0 0 0 / 70%); 26 | --tint-or-shade: color-mix(in oklab, var(--fg), transparent 90%); 27 | } 28 | 29 | html { 30 | font-size: 16px; 31 | } 32 | 33 | body { 34 | font-size: 1em; 35 | margin: 0 auto; 36 | background: var(--tan); 37 | color: var(--black); 38 | font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, 39 | Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; 40 | } 41 | 42 | p { 43 | line-height: var(--vspace); 44 | } 45 | 46 | h1 { 47 | color: var(--deep-shade); 48 | margin: var(--vspace-1) 0 var(--vspace-1) 0; 49 | line-height: calc(8 / var(--space) * var(--vspace)); 50 | } 51 | 52 | h2 { 53 | margin: var(--vspace-2) 0 var(--vspace-3) 0; 54 | line-height: 1em; 55 | } 56 | 57 | h3 { 58 | margin: var(--vspace-1) 0 var(--vspace-3) 0; 59 | line-height: 1em; 60 | } 61 | 62 | h4, 63 | h5, 64 | h6 { 65 | margin: var(--vspace-2) 0 var(--vspace-3) 0; 66 | line-height: var(--vspace); 67 | } 68 | 69 | .bigtitle, 70 | h1 { 71 | font-size: 8em; 72 | word-break: break-word; 73 | } 74 | 75 | .title, 76 | h2 { 77 | font-size: 3.375em; 78 | font-weight: lighter; 79 | word-break: break-word; 80 | } 81 | 82 | .subheading1, 83 | h3 { 84 | font-size: 2em; 85 | font-weight: normal; 86 | text-transform: uppercase; 87 | letter-spacing: 0.1em; 88 | } 89 | 90 | blockquote { 91 | font-size: 1em; 92 | font-style: italic; 93 | line-height: calc(1 * var(--vspace)); 94 | margin: var(--vspace-2) var(--vspace-2); 95 | } 96 | 97 | .subheading2, 98 | h4 { 99 | font-size: 1.4167em; 100 | text-transform: capitalize; 101 | } 102 | 103 | .subheading3, 104 | h5 { 105 | font-size: 1.2083em; 106 | font-weight: lighter; 107 | text-transform: uppercase; 108 | letter-spacing: 0.15em; 109 | } 110 | 111 | .subheading4, 112 | h6 { 113 | font-size: 1em; 114 | font-weight: normal; 115 | font-style: italic; 116 | font-family: "le-monde-livre-classic-byol", serif !important; 117 | letter-spacing: 0px !important; 118 | } 119 | 120 | .caption_ts { 121 | font-size: 0.7083em; 122 | font-weight: normal; 123 | font-style: italic; 124 | } 125 | 126 | .endnote_ts { 127 | font-size: 0.7083em; 128 | } 129 | 130 | .footnote_ts { 131 | margin: var(--vspace-0) 0 var(--vspace-2) 0; 132 | font-size: 0.6042em; 133 | border-top: 1px solid #ccc; 134 | line-height: 2em; 135 | } 136 | 137 | sup { 138 | font-size: 0.6042rem; 139 | margin: 0.5em; 140 | text-transform: none; 141 | font-style: italic; 142 | font-weight: normal; 143 | } 144 | 145 | input { 146 | font-size: 24px; 147 | background: transparent; 148 | border: solid 2px var(--black); 149 | padding: 10px 20px; 150 | } 151 | 152 | button { 153 | background: transparent; 154 | border-radius: 10px; 155 | font-size: 24px; 156 | border: solid 2px var(--black); 157 | padding: 10px 20px; 158 | } 159 | 160 | button:hover { 161 | background: var(--yellow); 162 | border-color: var(--yellow); 163 | } 164 | 165 | ul { 166 | list-style: none; 167 | padding: 0; 168 | } 169 | 170 | li { 171 | margin: calc(var(--vspace) / 3) 0; 172 | } 173 | 174 | @keyframes fade-in { 175 | from { 176 | opacity: 0; 177 | } 178 | } 179 | 180 | @keyframes fade-out { 181 | to { 182 | opacity: 0; 183 | } 184 | } 185 | 186 | @keyframes slide-from-right { 187 | from { 188 | transform: translateX(90px); 189 | } 190 | } 191 | 192 | @keyframes slide-to-left { 193 | to { 194 | transform: translateX(-90px); 195 | } 196 | } 197 | 198 | /* define animations for the old and new content */ 199 | ::view-transition-old(slide-it) { 200 | animation: 180ms cubic-bezier(0.4, 0, 1, 1) both fade-out, 201 | 300ms cubic-bezier(0.4, 0, 0.2, 1) both slide-to-left; 202 | } 203 | ::view-transition-new(slide-it) { 204 | animation: 120ms cubic-bezier(0, 0, 0.2, 1) 90ms both fade-in, 205 | 300ms cubic-bezier(0.4, 0, 0.2, 1) both slide-from-right; 206 | } 207 | 208 | /* tie the view transition to a given CSS class */ 209 | .auto-transition { 210 | view-transition-name: slide-it; 211 | } 212 | 213 | .pill { 214 | font-size: 0.7083em; 215 | background: var(--tint-or-shade); 216 | padding: 5px 10px; 217 | border-radius: 10px; 218 | } 219 | 220 | .box { 221 | padding: var(--vspace); 222 | border: 2px solid var(--black); 223 | } 224 | 225 | .note { 226 | padding: 20px; 227 | background-color: var(--tint-or-shade); 228 | } 229 | -------------------------------------------------------------------------------- /packages/hype/src/themes/HYPE/theme.toml: -------------------------------------------------------------------------------- 1 | title = "HYPE" 2 | version = "0.0.1" -------------------------------------------------------------------------------- /packages/hype/src/themes/README.md: -------------------------------------------------------------------------------- 1 | # Themes 2 | 3 | Themes are the building blocks of a website. Many times we do the same things over and over. Themes act as a starting template that can be modified, overridden or created and shared. 4 | 5 | By default, we load the DEFAULT theme. 6 | 7 | - note there is no developed functionality to automatically override themes. Planned for v1 8 | -------------------------------------------------------------------------------- /packages/hype/src/utils/file.ts: -------------------------------------------------------------------------------- 1 | import path from "path"; 2 | 3 | console.log("loading file utils template"); 4 | 5 | export const PAGES_LOCAL_PATH = "./src/pages"; 6 | export const PAGES_ROOT_PATH = path.resolve(process.cwd(), PAGES_LOCAL_PATH); 7 | -------------------------------------------------------------------------------- /packages/hype/src/utils/get_css_file.ts: -------------------------------------------------------------------------------- 1 | export async function read_file(path: string) { 2 | return await Bun.file(path).text(); 3 | } 4 | -------------------------------------------------------------------------------- /packages/hype/src/utils/get_file_extension.ts: -------------------------------------------------------------------------------- 1 | export function get_file_extension(path: string) { 2 | const parts = path.split("."); 3 | const part = parts.pop(); 4 | return part; 5 | } 6 | -------------------------------------------------------------------------------- /packages/hype/src/utils/get_theme_css_file.ts: -------------------------------------------------------------------------------- 1 | import { join } from 'path'; 2 | import { read_file } from "./get_css_file"; 3 | 4 | 5 | const location = import.meta.dir; 6 | 7 | export async function get_theme_css_file(THEME_NAME: string) { 8 | let styles = ""; 9 | try { 10 | const path = `../themes/${THEME_NAME}/style.css` 11 | const full = join(location, path); 12 | styles = await read_file(full); 13 | } catch (e) { 14 | console.log(e); 15 | } 16 | return styles; 17 | } 18 | -------------------------------------------------------------------------------- /packages/hype/src/utils/route_process_to_array.ts: -------------------------------------------------------------------------------- 1 | function getCommonRoutes(allRoutes, selectedRoutes) { 2 | // Flatten the first array 3 | const flattenedRoutes = allRoutes.flat(); 4 | 5 | // Filter the second array based on the flattened first array 6 | return selectedRoutes.filter((route) => flattenedRoutes.includes(route)); 7 | } 8 | 9 | export function route_process_to_array(routes) { 10 | const result = []; 11 | const nestedRoutes = {}; 12 | 13 | // Separate nested routes and identify top-level routes 14 | for (const route in routes) { 15 | const parts = route.split("/"); 16 | const basePath = "/" + parts[1]; 17 | 18 | if (parts.length > 2 && !nestedRoutes[basePath]) { 19 | // Initialize array for nested routes 20 | nestedRoutes[basePath] = []; 21 | } 22 | 23 | if (parts.length > 2) { 24 | // Add nested routes to their respective array 25 | nestedRoutes[basePath].push(route); 26 | } else { 27 | // Directly add top-level routes and the root route 28 | result.push(route); 29 | } 30 | } 31 | 32 | // Add nested routes arrays after their corresponding top-level route 33 | for (const baseRoute in nestedRoutes) { 34 | const index = result.indexOf(baseRoute); 35 | if (index !== -1) { 36 | result.splice(index + 1, 0, nestedRoutes[baseRoute]); 37 | } 38 | } 39 | 40 | return result; 41 | } 42 | -------------------------------------------------------------------------------- /packages/hype/src/utils/transform_markdown.ts: -------------------------------------------------------------------------------- 1 | import SimpleMarkdown from "simple-markdown"; 2 | 3 | export function transform_markdown(md_file_string: string) { 4 | return SimpleMarkdown.markdownToHtml(md_file_string); 5 | } 6 | -------------------------------------------------------------------------------- /packages/hype/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "ES2021" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "ES2022" /* Specify what module code is generated. */, 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, 31 | "baseUrl": "." /* Specify the base directory to resolve non-relative module names. */,/* Specify a set of entries that re-map imports to additional lookup locations. */, 32 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 33 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 34 | "types": [ 35 | "bun-types" 36 | ] /* Specify type package names to be included without being referenced in a source file. */, 37 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 38 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 39 | // "resolveJsonModule": true, /* Enable importing .json files. */ 40 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 41 | 42 | /* JavaScript Support */ 43 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 44 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 45 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 46 | 47 | /* Emit */ 48 | "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, 49 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 50 | "emitDeclarationOnly": true /* Only output d.ts files and not JavaScript files. */, 51 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 52 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 53 | "outDir": "./types" /* Specify an output folder for all emitted files. */, 54 | // "removeComments": true, /* Disable emitting comments. */ 55 | // "noEmit": true, /* Disable emitting files from a compilation. */ 56 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 57 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 58 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 59 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 60 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 61 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 62 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 63 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 64 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 65 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 66 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 67 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 68 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 69 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 70 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 71 | 72 | /* Interop Constraints */ 73 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 74 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 75 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, 76 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 77 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 78 | 79 | /* Type Checking */ 80 | "strict": true /* Enable all strict type-checking options. */, 81 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 82 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 83 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 84 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 85 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 86 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 87 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 88 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 89 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 90 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 91 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 92 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 93 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 94 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 95 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 96 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 97 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 98 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 99 | 100 | /* Completeness */ 101 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 102 | "skipLibCheck": true /* Skip type checking all .d.ts files. */, 103 | 104 | "paths": { 105 | "*": ["src/*"], 106 | "$": ["src"], 107 | "$/*": ["src/*"], 108 | "$theme": ["src/theme"], 109 | "$theme/*": ["src/theme/*"], 110 | "$data": ["src/data"], 111 | "$data/*": ["src/data/*"] 112 | } 113 | }, 114 | "exclude": ["node_modules", "**/*.spec.js"] 115 | } 116 | -------------------------------------------------------------------------------- /packages/hype_cli/.gitignore: -------------------------------------------------------------------------------- 1 | # Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore 2 | 3 | # Logs 4 | 5 | logs 6 | _.log 7 | npm-debug.log_ 8 | yarn-debug.log* 9 | yarn-error.log* 10 | lerna-debug.log* 11 | .pnpm-debug.log* 12 | 13 | # Caches 14 | 15 | .cache 16 | 17 | # Diagnostic reports (https://nodejs.org/api/report.html) 18 | 19 | report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 20 | 21 | # Runtime data 22 | 23 | pids 24 | _.pid 25 | _.seed 26 | *.pid.lock 27 | 28 | # Directory for instrumented libs generated by jscoverage/JSCover 29 | 30 | lib-cov 31 | 32 | # Coverage directory used by tools like istanbul 33 | 34 | coverage 35 | *.lcov 36 | 37 | # nyc test coverage 38 | 39 | .nyc_output 40 | 41 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 42 | 43 | .grunt 44 | 45 | # Bower dependency directory (https://bower.io/) 46 | 47 | bower_components 48 | 49 | # node-waf configuration 50 | 51 | .lock-wscript 52 | 53 | # Compiled binary addons (https://nodejs.org/api/addons.html) 54 | 55 | build/Release 56 | 57 | # Dependency directories 58 | 59 | node_modules/ 60 | jspm_packages/ 61 | 62 | # Snowpack dependency directory (https://snowpack.dev/) 63 | 64 | web_modules/ 65 | 66 | # TypeScript cache 67 | 68 | *.tsbuildinfo 69 | 70 | # Optional npm cache directory 71 | 72 | .npm 73 | 74 | # Optional eslint cache 75 | 76 | .eslintcache 77 | 78 | # Optional stylelint cache 79 | 80 | .stylelintcache 81 | 82 | # Microbundle cache 83 | 84 | .rpt2_cache/ 85 | .rts2_cache_cjs/ 86 | .rts2_cache_es/ 87 | .rts2_cache_umd/ 88 | 89 | # Optional REPL history 90 | 91 | .node_repl_history 92 | 93 | # Output of 'npm pack' 94 | 95 | *.tgz 96 | 97 | # Yarn Integrity file 98 | 99 | .yarn-integrity 100 | 101 | # dotenv environment variable files 102 | 103 | .env 104 | .env.development.local 105 | .env.test.local 106 | .env.production.local 107 | .env.local 108 | 109 | # parcel-bundler cache (https://parceljs.org/) 110 | 111 | .parcel-cache 112 | 113 | # Next.js build output 114 | 115 | .next 116 | out 117 | 118 | # Nuxt.js build / generate output 119 | 120 | .nuxt 121 | dist 122 | 123 | # Gatsby files 124 | 125 | # Comment in the public line in if your project uses Gatsby and not Next.js 126 | 127 | # https://nextjs.org/blog/next-9-1#public-directory-support 128 | 129 | # public 130 | 131 | # vuepress build output 132 | 133 | .vuepress/dist 134 | 135 | # vuepress v2.x temp and cache directory 136 | 137 | .temp 138 | 139 | # Docusaurus cache and generated files 140 | 141 | .docusaurus 142 | 143 | # Serverless directories 144 | 145 | .serverless/ 146 | 147 | # FuseBox cache 148 | 149 | .fusebox/ 150 | 151 | # DynamoDB Local files 152 | 153 | .dynamodb/ 154 | 155 | # TernJS port file 156 | 157 | .tern-port 158 | 159 | # Stores VSCode versions used for testing VSCode extensions 160 | 161 | .vscode-test 162 | 163 | # yarn v2 164 | 165 | .yarn/cache 166 | .yarn/unplugged 167 | .yarn/build-state.yml 168 | .yarn/install-state.gz 169 | .pnp.* 170 | 171 | # IntelliJ based IDEs 172 | .idea 173 | 174 | # Finder (MacOS) folder config 175 | .DS_Store 176 | -------------------------------------------------------------------------------- /packages/hype_cli/README.md: -------------------------------------------------------------------------------- 1 | # hype_cli 2 | 3 | To install dependencies: 4 | 5 | ```bash 6 | bun install 7 | ``` 8 | 9 | To run: 10 | 11 | ```bash 12 | bun run index.ts 13 | ``` 14 | 15 | This project was created using `bun init` in bun v1.0.25. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. 16 | -------------------------------------------------------------------------------- /packages/hype_cli/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stolinski/Hype/09763d235e5c4c8def8a82f13f61c6fbb12e8476/packages/hype_cli/bun.lockb -------------------------------------------------------------------------------- /packages/hype_cli/index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bun 2 | 3 | import * as p from "@clack/prompts"; 4 | import { bold, cyan, grey } from "kleur/colors"; 5 | import fs from "node:fs"; 6 | import path from "node:path"; 7 | 8 | let cwd = process.argv[2] || "."; 9 | 10 | console.log(grey("...getting hype")); 11 | p.intro("Status: Hype"); 12 | 13 | if (cwd === ".") { 14 | const dir = await p.text({ 15 | message: "Where should we create your project?", 16 | placeholder: " (hit Enter to use current directory)", 17 | }); 18 | 19 | if (p.isCancel(dir)) process.exit(1); 20 | 21 | if (dir) { 22 | cwd = dir; 23 | } 24 | } 25 | 26 | if (fs.existsSync(cwd)) { 27 | if (fs.readdirSync(cwd).length > 0) { 28 | const force = await p.confirm({ 29 | message: "Directory not empty. Continue?", 30 | initialValue: false, 31 | }); 32 | 33 | if (force !== true) { 34 | process.exit(1); 35 | } 36 | } 37 | } 38 | 39 | // await create(cwd, { 40 | // name: path.basename(path.resolve(cwd)), 41 | // template: "DEFAULT", 42 | // }); 43 | 44 | p.outro("Hype Created"); 45 | 46 | let i = 1; 47 | 48 | const relative = path.relative(process.cwd(), cwd); 49 | if (relative !== "") { 50 | console.log(` ${i++}: ${bold(cyan(`cd ${relative}`))}`); 51 | } 52 | 53 | console.log(` ${i++}: ${bold(cyan("bun install"))}`); 54 | console.log( 55 | ` ${i++}: ${bold( 56 | cyan('git init && git add -A && git commit -m "Initial commit"'), 57 | )} (optional)`, 58 | ); 59 | console.log(` ${i++}: ${bold(cyan("bun dev"))}`); 60 | 61 | console.log(`\nTo close the dev server, hit ${bold(cyan("Ctrl-C"))}`); 62 | -------------------------------------------------------------------------------- /packages/hype_cli/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "bin": { 3 | "get-hype": "./index.ts" 4 | }, 5 | "devDependencies": { 6 | "@types/bun": "latest" 7 | }, 8 | "module": "index.ts", 9 | "name": "@hype/hype_cli", 10 | "peerDependencies": { 11 | "typescript": "^5.0.0" 12 | }, 13 | "type": "module", 14 | "version": "1.0.0-next.0" 15 | } 16 | -------------------------------------------------------------------------------- /packages/hype_cli/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["ESNext"], 4 | "target": "ESNext", 5 | "module": "ESNext", 6 | "moduleDetection": "force", 7 | "jsx": "react-jsx", 8 | "allowJs": true, 9 | 10 | /* Bundler mode */ 11 | "moduleResolution": "bundler", 12 | "allowImportingTsExtensions": true, 13 | "verbatimModuleSyntax": true, 14 | "noEmit": true, 15 | 16 | /* Linting */ 17 | "skipLibCheck": true, 18 | "strict": true, 19 | "noFallthroughCasesInSwitch": true, 20 | "forceConsistentCasingInFileNames": true 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /packages/hype_demo/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | 33 | # vercel 34 | .vercel 35 | 36 | **/*.trace 37 | **/*.zip 38 | **/*.tar.gz 39 | **/*.tgz 40 | **/*.log 41 | package-lock.json 42 | **/*.bun 43 | 44 | sqlite.db -------------------------------------------------------------------------------- /packages/hype_demo/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cSpell.words": ["Elysia", "htmx"], 3 | "[javascript]": { 4 | "editor.defaultFormatter": "biomejs.biome" 5 | }, 6 | "[typescript]": { 7 | "editor.defaultFormatter": "biomejs.biome" 8 | }, 9 | "[html]": { 10 | "editor.defaultFormatter": "esbenp.prettier-vscode" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/hype_demo/README.md: -------------------------------------------------------------------------------- 1 | ![Hype Logo](./public/hype.png) 2 | 3 | # Hype 4 | 5 | Demo: https://hype.tolin.ski/ 6 | 7 | Take a look. It's nothing special yet, but it has potential. 8 | 9 | ## What's going on here? 10 | 11 | Hype is a meta framework for easily and quickly building hyperfast websites and apps with HTMX & Bun. 12 | 13 | ## What is this repo? 14 | 15 | This repo is currently both a demo and the platform itself. The platform will eventually evolve into just packages and the demo will move elsewhere. 16 | 17 | ### What's in the box? 18 | 19 | This is trying to be a battery buddy of a framework. It holds your batteries. It's batteries included. 20 | 21 | 🔋 So what are those batteries 22 | 23 | - ✅ Server Routing Via ElysiaJS 24 | - ✅ Database & ORM via Drizzle (sqlite easy ootb) 25 | - ✅ HTML & JavaScript as template engine 26 | - ✅ File based routing without pain 27 | - ✅ Browser live reload 28 | - ✅ Markdown File Routes 29 | - ✅ HTML File Routes 30 | - ⌛ Animations 31 | - ⌛ A legit default template with easy mods and overrides 32 | - ⌛ Easy Tailwind / Uno 33 | - ⌛ Layouts 34 | - ⌛ Auth 35 | - ⌛ Form Generation 36 | - ⌛ Admin 37 | - ⌛ Swapable Templating Langs 38 | 39 | - ⌛ Client side helpers 40 | - ⌛ Scoped CSS 41 | 42 | ### What? 43 | 44 | Zero build, extreme speeds, no OOTB client side framework JS. Trying to keep deps super low here. 45 | 46 | #### The tech behind this 47 | 48 | - Elysia, 49 | - HTMX 50 | - HTML 51 | - Bun 52 | - Drizzle 53 | - SQLite 54 | - Biome 55 | 56 | Poke around but just know that nothing is final. 57 | 58 | ### What is this not doing? 59 | 60 | - ❌ Native Mobile 61 | 62 | ### Why? 63 | 64 | HTMX is sick and there are a ton of competing stacks and frameworks to use it in. This is trying to be THE JavaScript based way to write HTMX apps with batteries included. Meteor was my favorite framework, so just keep that in mind. 65 | 66 | ### Interesting Features 67 | 68 | Since args don't rerun components, we can pass a ton of props into them like the entire request and context info. Think Locals for svelte but in your component. 69 | 70 | ## Want to help? 71 | 72 | Let's chat https://discord.gg/7eSBjEQMYq 73 | 74 | ### Code Highlighting 75 | 76 | Install: https://marketplace.visualstudio.com/items?itemName=bierner.lit-html 77 | 78 | ### Emmet 79 | 80 | ``` 81 | "emmet.includeLanguages": { 82 | "typescript": "html", 83 | "javascript": "html" 84 | }, 85 | ``` 86 | -------------------------------------------------------------------------------- /packages/hype_demo/database/0000_dark_kylun.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `recipes` ( 2 | `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, 3 | `name` text, 4 | `last_date_made` text 5 | ); 6 | --> statement-breakpoint 7 | CREATE TABLE `recipes_to_weeks` ( 8 | `recipes_id` integer NOT NULL, 9 | `weeks_id` integer NOT NULL, 10 | FOREIGN KEY (`recipes_id`) REFERENCES `recipes`(`id`) ON UPDATE no action ON DELETE no action, 11 | FOREIGN KEY (`weeks_id`) REFERENCES `weeks`(`id`) ON UPDATE no action ON DELETE no action 12 | ); 13 | --> statement-breakpoint 14 | CREATE TABLE `weeks` ( 15 | `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, 16 | `last_date_made` text DEFAULT CURRENT_DATE, 17 | `date_of_month` text 18 | ); 19 | -------------------------------------------------------------------------------- /packages/hype_demo/database/meta/0000_snapshot.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "5", 3 | "dialect": "sqlite", 4 | "id": "687e0b75-9701-4925-aa7d-5295e92904ad", 5 | "prevId": "00000000-0000-0000-0000-000000000000", 6 | "tables": { 7 | "recipes": { 8 | "name": "recipes", 9 | "columns": { 10 | "id": { 11 | "name": "id", 12 | "type": "integer", 13 | "primaryKey": true, 14 | "notNull": true, 15 | "autoincrement": true 16 | }, 17 | "name": { 18 | "name": "name", 19 | "type": "text", 20 | "primaryKey": false, 21 | "notNull": false, 22 | "autoincrement": false 23 | }, 24 | "last_date_made": { 25 | "name": "last_date_made", 26 | "type": "text", 27 | "primaryKey": false, 28 | "notNull": false, 29 | "autoincrement": false 30 | } 31 | }, 32 | "indexes": {}, 33 | "foreignKeys": {}, 34 | "compositePrimaryKeys": {}, 35 | "uniqueConstraints": {} 36 | }, 37 | "recipes_to_weeks": { 38 | "name": "recipes_to_weeks", 39 | "columns": { 40 | "recipes_id": { 41 | "name": "recipes_id", 42 | "type": "integer", 43 | "primaryKey": false, 44 | "notNull": true, 45 | "autoincrement": false 46 | }, 47 | "weeks_id": { 48 | "name": "weeks_id", 49 | "type": "integer", 50 | "primaryKey": false, 51 | "notNull": true, 52 | "autoincrement": false 53 | } 54 | }, 55 | "indexes": {}, 56 | "foreignKeys": { 57 | "recipes_to_weeks_recipes_id_recipes_id_fk": { 58 | "name": "recipes_to_weeks_recipes_id_recipes_id_fk", 59 | "tableFrom": "recipes_to_weeks", 60 | "tableTo": "recipes", 61 | "columnsFrom": [ 62 | "recipes_id" 63 | ], 64 | "columnsTo": [ 65 | "id" 66 | ], 67 | "onDelete": "no action", 68 | "onUpdate": "no action" 69 | }, 70 | "recipes_to_weeks_weeks_id_weeks_id_fk": { 71 | "name": "recipes_to_weeks_weeks_id_weeks_id_fk", 72 | "tableFrom": "recipes_to_weeks", 73 | "tableTo": "weeks", 74 | "columnsFrom": [ 75 | "weeks_id" 76 | ], 77 | "columnsTo": [ 78 | "id" 79 | ], 80 | "onDelete": "no action", 81 | "onUpdate": "no action" 82 | } 83 | }, 84 | "compositePrimaryKeys": {}, 85 | "uniqueConstraints": {} 86 | }, 87 | "weeks": { 88 | "name": "weeks", 89 | "columns": { 90 | "id": { 91 | "name": "id", 92 | "type": "integer", 93 | "primaryKey": true, 94 | "notNull": true, 95 | "autoincrement": true 96 | }, 97 | "last_date_made": { 98 | "name": "last_date_made", 99 | "type": "text", 100 | "primaryKey": false, 101 | "notNull": false, 102 | "autoincrement": false, 103 | "default": "CURRENT_DATE" 104 | }, 105 | "date_of_month": { 106 | "name": "date_of_month", 107 | "type": "text", 108 | "primaryKey": false, 109 | "notNull": false, 110 | "autoincrement": false 111 | } 112 | }, 113 | "indexes": {}, 114 | "foreignKeys": {}, 115 | "compositePrimaryKeys": {}, 116 | "uniqueConstraints": {} 117 | } 118 | }, 119 | "enums": {}, 120 | "_meta": { 121 | "schemas": {}, 122 | "tables": {}, 123 | "columns": {} 124 | } 125 | } -------------------------------------------------------------------------------- /packages/hype_demo/database/meta/_journal.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "5", 3 | "dialect": "sqlite", 4 | "entries": [ 5 | { 6 | "idx": 0, 7 | "version": "5", 8 | "when": 1706565298837, 9 | "tag": "0000_dark_kylun", 10 | "breakpoints": true 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /packages/hype_demo/database/migrate.ts: -------------------------------------------------------------------------------- 1 | import { migrate } from "drizzle-orm/better-sqlite3/migrator"; 2 | import { db, sqlite } from "../src/data/init"; 3 | 4 | migrate(db, { migrationsFolder: "./database" }); 5 | console.log("migrated db"); 6 | sqlite.close(); 7 | -------------------------------------------------------------------------------- /packages/hype_demo/drizzle.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "drizzle-kit"; 2 | 3 | export default defineConfig({ 4 | schema: "./src/data/schema.ts", 5 | out: "./database", 6 | driver: "better-sqlite", 7 | dbCredentials: { 8 | url: "./src/database/sqlite.db", 9 | }, 10 | }); 11 | -------------------------------------------------------------------------------- /packages/hype_demo/hype.toml: -------------------------------------------------------------------------------- 1 | # This file is where you put all of your app's meta data, including things that are used in the default themes. 2 | # With the express purpose of these being hardcoded and used within the app itself, you can make it easier 3 | # to change them without having to make changes to the app itself. 4 | 5 | APP_NAME = "Hype Demo" 6 | OG_IMAGE = "" # TODO 7 | SITE_DESCRIPTION = "" # TODO 8 | 9 | THEME="HYPE" 10 | 11 | 12 | # FUTURE IDEAS 13 | # DARK_MODE = true 14 | # AUTO_DARK_MODE_TOGGLE = true 15 | -------------------------------------------------------------------------------- /packages/hype_demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "@hype/hype": "1.0.0-next.3", 4 | "@libsql/client": "^0.4.2", 5 | "@types/dompurify": "^3.0.5", 6 | "@types/jsdom": "^21.1.6", 7 | "better-sqlite3": "^9.3.0", 8 | "dompurify": "^3.0.8", 9 | "drizzle-kit": "^0.20.13", 10 | "drizzle-orm": "^0.29.3", 11 | "jsdom": "^24.0.0", 12 | "simple-markdown": "1.0.0-alpha.0" 13 | }, 14 | "devDependencies": { 15 | "bun-types": "latest" 16 | }, 17 | "module": "src/index.js", 18 | "name": "@hype/hype_demo", 19 | "scripts": { 20 | "dev": "bun --hot run --watch src/index.ts", 21 | "generate": "drizzle-kit generate:sqlite", 22 | "migrate": "bun ./database/migrate", 23 | "test": "echo \"Error: no test specified\" && exit 1" 24 | }, 25 | "version": "1.0.0-next.1" 26 | } 27 | -------------------------------------------------------------------------------- /packages/hype_demo/public/hype.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stolinski/Hype/09763d235e5c4c8def8a82f13f61c6fbb12e8476/packages/hype_demo/public/hype.png -------------------------------------------------------------------------------- /packages/hype_demo/public/hypelogo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/hype_demo/public/og.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stolinski/Hype/09763d235e5c4c8def8a82f13f61c6fbb12e8476/packages/hype_demo/public/og.png -------------------------------------------------------------------------------- /packages/hype_demo/src/data/init.ts: -------------------------------------------------------------------------------- 1 | import Database from "bun:sqlite"; 2 | import { drizzle } from "drizzle-orm/bun-sqlite"; 3 | import * as schema from "./schema"; 4 | 5 | export const sqlite = new Database("./database/sqlite.db", { 6 | create: true, 7 | }); 8 | 9 | // We should attempt to run migrations here? 10 | 11 | export const db = drizzle(sqlite, { schema }); 12 | -------------------------------------------------------------------------------- /packages/hype_demo/src/data/schema.ts: -------------------------------------------------------------------------------- 1 | import { sql } from "drizzle-orm"; 2 | import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; 3 | 4 | export const recipes = sqliteTable("recipes", { 5 | id: integer("id", { mode: "number" }).primaryKey({ autoIncrement: true }), 6 | name: text("name"), 7 | last_date_made: text("last_date_made"), 8 | }); 9 | 10 | export const weeks = sqliteTable("weeks", { 11 | id: integer("id", { mode: "number" }).primaryKey({ autoIncrement: true }), 12 | last_date_made: text("last_date_made").default(sql`CURRENT_DATE`), 13 | date_of_month: text("date_of_month"), 14 | }); 15 | 16 | export const recipes_to_weeks = sqliteTable("recipes_to_weeks", { 17 | recipes_id: integer("recipes_id") 18 | .notNull() 19 | .references(() => recipes.id), 20 | weeks_id: integer("weeks_id") 21 | .notNull() 22 | .references(() => weeks.id), 23 | }); 24 | -------------------------------------------------------------------------------- /packages/hype_demo/src/index.ts: -------------------------------------------------------------------------------- 1 | import { getHype } from "@hype/hype"; 2 | import { EventEmitter } from "events"; 3 | import { WebSocketServer } from "ws"; 4 | import config from "../hype.toml"; 5 | 6 | const app = await getHype({ config }); 7 | 8 | // TODO move to library code 9 | // state.ts 10 | declare global { 11 | var wss: WebSocketServer | undefined; 12 | var emitter: EventEmitter | undefined; 13 | } 14 | 15 | // Function to add event listeners to a WebSocket client 16 | function addClientEventListeners(ws) { 17 | ws.on("close", () => { 18 | console.log("Live Reload Client disconnected"); 19 | }); 20 | } 21 | 22 | globalThis.wss ??= new WebSocketServer({ port: 8080 }); 23 | globalThis.emitter ??= new EventEmitter(); 24 | if (globalThis.emitter.listenerCount("reload") === 0) { 25 | globalThis.emitter.on("reload", () => { 26 | globalThis?.wss?.clients.forEach((client) => { 27 | if (client.readyState === WebSocket.OPEN) { 28 | client.send("reload"); 29 | } 30 | }); 31 | }); 32 | } 33 | 34 | if (!globalThis.wss.listenerCount("connection")) { 35 | globalThis.wss.on("connection", (ws) => { 36 | addClientEventListeners(ws); 37 | }); 38 | } 39 | 40 | globalThis?.emitter?.emit("reload"); 41 | export default app; 42 | -------------------------------------------------------------------------------- /packages/hype_demo/src/pages/about.md: -------------------------------------------------------------------------------- 1 | # About 2 | 3 | [See the code](https://github.com/stolinski/Hype/blob/main/src/pages/about.ts) 4 | 5 | Take a look. It's nothing special yet, but it has potential. 6 | 7 | ## What's going on here? 8 | 9 | Hype is a ~~meta~~ framework for easily and quickly building hyperfast websites and apps with HTMX & Bun. 10 | 11 | This is trying to be a battery buddy of a framework. It holds your batteries. It's batteries included. 12 | 13 | 🔋 So what are those batteries 14 | 15 | - ✅ Server Routing Via ElysiaJS 16 | - ✅ Database & ORM via Drizzle (sqlite easy ootb) 17 | - ✅ HTML & JavaScript as template engine 18 | - ✅ File based routing without pain 19 | - ✅ Browser live reload 20 | - ✅ Markdown File Routes 21 | - ✅ HTML File Routes 22 | - ⌛ A legit default template with easy mods and overrides (coming soon) 23 | - ⌛ Layouts (coming soon) 24 | - ⌛ Auth (coming soon) 25 | - ⌛ Form Generation (coming soon) 26 | - ⌛ Admin (coming soon) 27 | - ⌛ Animations (coming soon) 28 | - ⌛ Client side helpers (coming soon) 29 | - ⌛ Scoped CSS (coming whenever Firefox adds @scope) 30 | 31 | #### The tech 32 | 33 | - Elysia, 34 | - HTMX 35 | - HTML 36 | - Bun 37 | - Drizzle 38 | - SQLite 39 | - Biome 40 | 41 | Poke around but just know that nothing is final. 42 | 43 | ### Why? 44 | 45 | HTMX is sick and there are a ton of competing stacks and frameworks to use it in. This is trying to be THE JavaScript based way to write HTMX apps with batteries included. Meteor was my favorite framework, so just keep that in mind. 46 | 47 | ### Interesting Features 48 | 49 | Since args don't rerun components, we can pass a ton of props into them like the entire request and context info. Think Locals for svelte but in your component. 50 | 51 | ## Want to help? 52 | 53 | Let's chat https://discord.gg/7eSBjEQMYq 54 | 55 | ### Code Highlighting 56 | 57 | Install: https://marketplace.visualstudio.com/items?itemName=bierner.lit-html 58 | 59 | ### Emmet 60 | 61 | ``` 62 | "emmet.includeLanguages": { 63 | "typescript": "html", 64 | "javascript": "html" 65 | }, 66 | ``` 67 | -------------------------------------------------------------------------------- /packages/hype_demo/src/pages/html.html: -------------------------------------------------------------------------------- 1 |

    This is an HTML Route

    2 | 3 |

    4 | This lives in the pages dir 5 | See the code 9 | 10 |

    11 | 12 |

    13 | It composes automatically into your layouts and uses the file system routing 14 |

    15 | -------------------------------------------------------------------------------- /packages/hype_demo/src/pages/index.ts: -------------------------------------------------------------------------------- 1 | import { db } from "$/data/init"; 2 | import { new_recipes } from "$/theme/forms/new_recipes"; 3 | import { html } from "@hype/hype"; 4 | 5 | export default async () => { 6 | const data = await db.query.recipes.findMany({}); 7 | 8 | const recipes_list = data.map((recipe) => { 9 | return html`
  • ${recipe.name}
  • `; 10 | }); 11 | 12 | return html` 13 |

    Demo App

    14 |

    PROJECT STATUS: Super Early Exploration
    This demo app is intended to show how you might work in Hype to create awesome sites. Expect things to be imperfect

    15 | 16 |

    17 | Check out the source 18 |

    19 | 20 |
    21 |

    Hi

    22 |

    Try this form, it adds to a database. The delete button deletes it. This is just html forms and htmx progressively enhancing that. Keep in mind these are being stored in a database and the html is being returned and inserted into the dom. Check the network panel of your devtools.

    23 | 24 | ${new_recipes} 25 | 26 |
      27 | ${recipes_list} 28 |
    29 | 30 |
    31 | 32 |
    33 |
    34 | 35 | 40 | `; 41 | }; 42 | -------------------------------------------------------------------------------- /packages/hype_demo/src/pages/markdown.md: -------------------------------------------------------------------------------- 1 | # hi from markdown 2 | 3 | This is a Markdown route, it's not dynamic but perfect for blog posts. 4 | 5 | [See the code](https://github.com/stolinski/Hype/blob/main/src/pages/markdown.md) 6 | -------------------------------------------------------------------------------- /packages/hype_demo/src/pages/nested/index.ts: -------------------------------------------------------------------------------- 1 | import { html } from "@hype/hype"; 2 | 3 | export default () => html`

    This is a nested page

    `; 4 | -------------------------------------------------------------------------------- /packages/hype_demo/src/pages/recipes/delete.ts: -------------------------------------------------------------------------------- 1 | import { db } from "$/data/init"; 2 | import { recipes } from "$/data/schema"; 3 | import { html } from "@hype/hype"; 4 | 5 | export async function post({ request, body }: { request: Request }) { 6 | try { 7 | await db.delete(recipes); 8 | return html``; 9 | } catch (e) { 10 | console.log("e", e); 11 | return "fail"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/hype_demo/src/pages/recipes/index.ts: -------------------------------------------------------------------------------- 1 | import { db } from "$/data/init"; 2 | import { recipes } from "$/data/schema"; 3 | import { html } from "@hype/hype"; 4 | import createDOMPurify from "dompurify"; 5 | import type { Context } from "hono"; 6 | import { JSDOM } from "jsdom"; 7 | 8 | const window = new JSDOM("").window; 9 | const DOMPurify = createDOMPurify(window); 10 | 11 | function sanitizeHtmlInput(html: string) { 12 | return DOMPurify.sanitize(html, { ALLOWED_TAGS: [""] }); 13 | } 14 | 15 | // TODO would love someone to help with the types here. 16 | export async function post({ req }: Context) { 17 | const body = await req.parseBody(); 18 | try { 19 | const name = sanitizeHtmlInput(body.name); 20 | const added_recipe = await db 21 | .insert(recipes) 22 | .values({ 23 | name, 24 | }) 25 | .returning(); 26 | return html`
  • ${added_recipe[0].name}
  • `; 27 | } catch (e) { 28 | console.log("e", e); 29 | return "fail"; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /packages/hype_demo/src/theme/forms/new_recipes.ts: -------------------------------------------------------------------------------- 1 | import { html } from "@hype/hype"; 2 | 3 | // THIS IS INTERESTING 4 | // I NEED TO FIGURE OUT HOW TO FILTER THE COLUMNS IN THE SCHEMA 5 | // const data_types = {}; 6 | // for (const [column_name, column_info] of Object.entries( 7 | // recipes[Symbol.for("drizzle:Columns")] 8 | // )) { 9 | // data_types[column_name] = column_info.dataType; 10 | // } 11 | // console.log("data_types", data_types); 12 | 13 | export const new_recipes = html` 14 |
    15 | 16 | 17 |
    18 | `; 19 | -------------------------------------------------------------------------------- /packages/hype_demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "ES2021" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "ES2022" /* Specify what module code is generated. */, 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | "types": [ 36 | "bun-types" 37 | ] /* Specify type package names to be included without being referenced in a source file. */, 38 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 39 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 40 | // "resolveJsonModule": true, /* Enable importing .json files. */ 41 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 42 | 43 | /* JavaScript Support */ 44 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 45 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 46 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 47 | 48 | /* Emit */ 49 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 50 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 51 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 52 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 53 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 54 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 55 | // "removeComments": true, /* Disable emitting comments. */ 56 | // "noEmit": true, /* Disable emitting files from a compilation. */ 57 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 58 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 59 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 60 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 61 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 62 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 63 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 64 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 65 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 66 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 67 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 68 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 69 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 70 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 71 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 72 | 73 | /* Interop Constraints */ 74 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 75 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 76 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, 77 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 78 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 79 | 80 | /* Type Checking */ 81 | "strict": true /* Enable all strict type-checking options. */, 82 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 83 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 84 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 85 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 86 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 87 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 88 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 89 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 90 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 91 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 92 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 93 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 94 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 95 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 96 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 97 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 98 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 99 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 100 | 101 | /* Completeness */ 102 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 103 | "skipLibCheck": true /* Skip type checking all .d.ts files. */, 104 | "paths": { 105 | "$": ["./src"], 106 | "$/*": ["./src/*"], 107 | "$theme": ["./src/theme"], 108 | "$theme/*": ["./src/theme/*"], 109 | "$data": ["./src/data"], 110 | "$data/*": ["./src/data/*"] 111 | } 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /packages/hype_htmx_hono_middleware/.gitignore: -------------------------------------------------------------------------------- 1 | # Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore 2 | 3 | # Logs 4 | 5 | logs 6 | _.log 7 | npm-debug.log_ 8 | yarn-debug.log* 9 | yarn-error.log* 10 | lerna-debug.log* 11 | .pnpm-debug.log* 12 | 13 | # Caches 14 | 15 | .cache 16 | 17 | # Diagnostic reports (https://nodejs.org/api/report.html) 18 | 19 | report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 20 | 21 | # Runtime data 22 | 23 | pids 24 | _.pid 25 | _.seed 26 | *.pid.lock 27 | 28 | # Directory for instrumented libs generated by jscoverage/JSCover 29 | 30 | lib-cov 31 | 32 | # Coverage directory used by tools like istanbul 33 | 34 | coverage 35 | *.lcov 36 | 37 | # nyc test coverage 38 | 39 | .nyc_output 40 | 41 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 42 | 43 | .grunt 44 | 45 | # Bower dependency directory (https://bower.io/) 46 | 47 | bower_components 48 | 49 | # node-waf configuration 50 | 51 | .lock-wscript 52 | 53 | # Compiled binary addons (https://nodejs.org/api/addons.html) 54 | 55 | build/Release 56 | 57 | # Dependency directories 58 | 59 | node_modules/ 60 | jspm_packages/ 61 | 62 | # Snowpack dependency directory (https://snowpack.dev/) 63 | 64 | web_modules/ 65 | 66 | # TypeScript cache 67 | 68 | *.tsbuildinfo 69 | 70 | # Optional npm cache directory 71 | 72 | .npm 73 | 74 | # Optional eslint cache 75 | 76 | .eslintcache 77 | 78 | # Optional stylelint cache 79 | 80 | .stylelintcache 81 | 82 | # Microbundle cache 83 | 84 | .rpt2_cache/ 85 | .rts2_cache_cjs/ 86 | .rts2_cache_es/ 87 | .rts2_cache_umd/ 88 | 89 | # Optional REPL history 90 | 91 | .node_repl_history 92 | 93 | # Output of 'npm pack' 94 | 95 | *.tgz 96 | 97 | # Yarn Integrity file 98 | 99 | .yarn-integrity 100 | 101 | # dotenv environment variable files 102 | 103 | .env 104 | .env.development.local 105 | .env.test.local 106 | .env.production.local 107 | .env.local 108 | 109 | # parcel-bundler cache (https://parceljs.org/) 110 | 111 | .parcel-cache 112 | 113 | # Next.js build output 114 | 115 | .next 116 | out 117 | 118 | # Nuxt.js build / generate output 119 | 120 | .nuxt 121 | dist 122 | 123 | # Gatsby files 124 | 125 | # Comment in the public line in if your project uses Gatsby and not Next.js 126 | 127 | # https://nextjs.org/blog/next-9-1#public-directory-support 128 | 129 | # public 130 | 131 | # vuepress build output 132 | 133 | .vuepress/dist 134 | 135 | # vuepress v2.x temp and cache directory 136 | 137 | .temp 138 | 139 | # Docusaurus cache and generated files 140 | 141 | .docusaurus 142 | 143 | # Serverless directories 144 | 145 | .serverless/ 146 | 147 | # FuseBox cache 148 | 149 | .fusebox/ 150 | 151 | # DynamoDB Local files 152 | 153 | .dynamodb/ 154 | 155 | # TernJS port file 156 | 157 | .tern-port 158 | 159 | # Stores VSCode versions used for testing VSCode extensions 160 | 161 | .vscode-test 162 | 163 | # yarn v2 164 | 165 | .yarn/cache 166 | .yarn/unplugged 167 | .yarn/build-state.yml 168 | .yarn/install-state.gz 169 | .pnp.* 170 | 171 | # IntelliJ based IDEs 172 | .idea 173 | 174 | # Finder (MacOS) folder config 175 | .DS_Store 176 | -------------------------------------------------------------------------------- /packages/hype_htmx_hono_middleware/README.md: -------------------------------------------------------------------------------- 1 | # hype_htmx_hono_middleware 2 | 3 | To install dependencies: 4 | 5 | ```bash 6 | bun install 7 | ``` 8 | 9 | To run: 10 | 11 | ```bash 12 | bun run index.ts 13 | ``` 14 | 15 | This project was created using `bun init` in bun v1.0.25. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. 16 | -------------------------------------------------------------------------------- /packages/hype_htmx_hono_middleware/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stolinski/Hype/09763d235e5c4c8def8a82f13f61c6fbb12e8476/packages/hype_htmx_hono_middleware/bun.lockb -------------------------------------------------------------------------------- /packages/hype_htmx_hono_middleware/index.ts: -------------------------------------------------------------------------------- 1 | import type { Context } from "hono"; 2 | 3 | type HxSwap = 4 | | "innerHTML" 5 | | "outerHTML" 6 | | "beforebegin" 7 | | "afterbegin" 8 | | "beforeend" 9 | | "afterend" 10 | | "delete" 11 | | "none"; 12 | 13 | interface HXProperties { 14 | request: boolean; 15 | boosted: boolean; 16 | historyRestoreRequest: boolean; 17 | currentURL: string; 18 | prompt: string; 19 | target: string; 20 | triggerName: string; 21 | trigger: string; 22 | // Add other properties and methods as needed... 23 | setLocation: (url: string) => void; 24 | // Continue defining other properties and methods... 25 | isHTMX: () => boolean; 26 | stopPolling: () => void; 27 | } 28 | 29 | declare module "hono" { 30 | interface Context { 31 | htmx: HXProperties; 32 | } 33 | } 34 | 35 | // Define a middleware to enhance the context with HTMX properties 36 | export const htmxMiddleware = () => async (c: Context, next: Function) => { 37 | // Enhance context with HTMX specific properties and methods 38 | c.htmx = { 39 | request: c.req.header("hx-request") === "true", 40 | boosted: c.req.header("hx-boosted") === "true", 41 | historyRestoreRequest: 42 | c.req.header("hx-history-restore-request") === "true", 43 | currentURL: c.req.header("hx-current-url") ?? "", 44 | prompt: c.req.header("hx-prompt") ?? "", 45 | target: c.req.header("hx-target") ?? "", 46 | triggerName: c.req.header("hx-trigger-name") ?? "", 47 | trigger: c.req.header("hx-trigger") ?? "", 48 | // get isHTMX() { 49 | // return ( 50 | // headers("hx-request") === "true" || headers("hx-boosted") === "true" 51 | // ); 52 | // }, 53 | // stopPolling: () => (c.status = 286), 54 | }; 55 | 56 | await next(); 57 | }; 58 | -------------------------------------------------------------------------------- /packages/hype_htmx_hono_middleware/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "hono": "^3.12.12" 4 | }, 5 | "devDependencies": { 6 | "@types/bun": "latest" 7 | }, 8 | "module": "index.ts", 9 | "name": "@hype/htmx_hono_middleware", 10 | "peerDependencies": { 11 | "typescript": "^5.0.0" 12 | }, 13 | "type": "module", 14 | "version": "1.0.0-next.0" 15 | } 16 | -------------------------------------------------------------------------------- /packages/hype_htmx_hono_middleware/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["ESNext"], 4 | "target": "ESNext", 5 | "module": "ESNext", 6 | "moduleDetection": "force", 7 | "jsx": "react-jsx", 8 | "allowJs": true, 9 | 10 | /* Bundler mode */ 11 | "moduleResolution": "bundler", 12 | "allowImportingTsExtensions": true, 13 | "verbatimModuleSyntax": true, 14 | "noEmit": true, 15 | 16 | /* Linting */ 17 | "skipLibCheck": true, 18 | "strict": true, 19 | "noFallthroughCasesInSwitch": true, 20 | "forceConsistentCasingInFileNames": true 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["ESNext"], 4 | "target": "ESNext", 5 | "module": "ESNext", 6 | "moduleDetection": "force", 7 | "jsx": "react-jsx", 8 | "allowJs": true, 9 | 10 | /* Bundler mode */ 11 | "moduleResolution": "bundler", 12 | "allowImportingTsExtensions": true, 13 | "verbatimModuleSyntax": true, 14 | "noEmit": true, 15 | 16 | /* Linting */ 17 | "skipLibCheck": true, 18 | "strict": true, 19 | "noFallthroughCasesInSwitch": true, 20 | "forceConsistentCasingInFileNames": true 21 | } 22 | } 23 | --------------------------------------------------------------------------------