generated from alecodes/base-template
Compare commits
No commits in common. "8ef4d8408c90965e4ddedf14e7a9ae83738211bf" and "511a0bbc53a232240c56a217577d5d9a34027643" have entirely different histories.
8ef4d8408c
...
511a0bbc53
11 changed files with 1 additions and 541 deletions
134
.gitignore
vendored
134
.gitignore
vendored
|
|
@ -3,141 +3,7 @@
|
||||||
|
|
||||||
#### -- TEMPLATES BEGIN -- ####
|
#### -- TEMPLATES BEGIN -- ####
|
||||||
|
|
||||||
### Node
|
|
||||||
|
|
||||||
# Logs
|
|
||||||
logs
|
|
||||||
*.log
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
lerna-debug.log*
|
|
||||||
.pnpm-debug.log*
|
|
||||||
|
|
||||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
|
||||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
|
||||||
|
|
||||||
# Runtime data
|
|
||||||
pids
|
|
||||||
*.pid
|
|
||||||
*.seed
|
|
||||||
*.pid.lock
|
|
||||||
|
|
||||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
|
||||||
lib-cov
|
|
||||||
|
|
||||||
# Coverage directory used by tools like istanbul
|
|
||||||
coverage
|
|
||||||
*.lcov
|
|
||||||
|
|
||||||
# nyc test coverage
|
|
||||||
.nyc_output
|
|
||||||
|
|
||||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
|
||||||
.grunt
|
|
||||||
|
|
||||||
# Bower dependency directory (https://bower.io/)
|
|
||||||
bower_components
|
|
||||||
|
|
||||||
# node-waf configuration
|
|
||||||
.lock-wscript
|
|
||||||
|
|
||||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
|
||||||
build/Release
|
|
||||||
|
|
||||||
# Dependency directories
|
|
||||||
node_modules/
|
|
||||||
jspm_packages/
|
|
||||||
|
|
||||||
# Snowpack dependency directory (https://snowpack.dev/)
|
|
||||||
web_modules/
|
|
||||||
|
|
||||||
# TypeScript cache
|
|
||||||
*.tsbuildinfo
|
|
||||||
|
|
||||||
# Optional npm cache directory
|
|
||||||
.npm
|
|
||||||
|
|
||||||
# Optional eslint cache
|
|
||||||
.eslintcache
|
|
||||||
|
|
||||||
# Optional stylelint cache
|
|
||||||
.stylelintcache
|
|
||||||
|
|
||||||
# Microbundle cache
|
|
||||||
.rpt2_cache/
|
|
||||||
.rts2_cache_cjs/
|
|
||||||
.rts2_cache_es/
|
|
||||||
.rts2_cache_umd/
|
|
||||||
|
|
||||||
# Optional REPL history
|
|
||||||
.node_repl_history
|
|
||||||
|
|
||||||
# Output of 'npm pack'
|
|
||||||
*.tgz
|
|
||||||
|
|
||||||
# Yarn Integrity file
|
|
||||||
.yarn-integrity
|
|
||||||
|
|
||||||
# dotenv environment variable files
|
|
||||||
.env
|
|
||||||
.env.development.local
|
|
||||||
.env.test.local
|
|
||||||
.env.production.local
|
|
||||||
.env.local
|
|
||||||
|
|
||||||
# parcel-bundler cache (https://parceljs.org/)
|
|
||||||
.cache
|
|
||||||
.parcel-cache
|
|
||||||
|
|
||||||
# Next.js build output
|
|
||||||
.next
|
|
||||||
out
|
|
||||||
|
|
||||||
# Nuxt.js build / generate output
|
|
||||||
.nuxt
|
|
||||||
dist
|
|
||||||
|
|
||||||
# Gatsby files
|
|
||||||
.cache/
|
|
||||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
|
||||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
|
||||||
# public
|
|
||||||
|
|
||||||
# vuepress build output
|
|
||||||
.vuepress/dist
|
|
||||||
|
|
||||||
# vuepress v2.x temp and cache directory
|
|
||||||
.temp
|
|
||||||
.cache
|
|
||||||
|
|
||||||
# Docusaurus cache and generated files
|
|
||||||
.docusaurus
|
|
||||||
|
|
||||||
# Serverless directories
|
|
||||||
.serverless/
|
|
||||||
|
|
||||||
# FuseBox cache
|
|
||||||
.fusebox/
|
|
||||||
|
|
||||||
# DynamoDB Local files
|
|
||||||
.dynamodb/
|
|
||||||
|
|
||||||
# TernJS port file
|
|
||||||
.tern-port
|
|
||||||
|
|
||||||
# Stores VSCode versions used for testing VSCode extensions
|
|
||||||
.vscode-test
|
|
||||||
|
|
||||||
# yarn v2
|
|
||||||
.yarn/cache
|
|
||||||
.yarn/unplugged
|
|
||||||
.yarn/build-state.yml
|
|
||||||
.yarn/install-state.gz
|
|
||||||
.pnp.*
|
|
||||||
|
|
||||||
#### -- TEMPLATES END -- ####
|
#### -- TEMPLATES END -- ####
|
||||||
|
|
||||||
# Allow to presever folder structure in excluded folers, should be the last rule
|
# Allow to presever folder structure in excluded folers, should be the last rule
|
||||||
!**/.gitkeep
|
!**/.gitkeep
|
||||||
dist
|
|
||||||
|
|
|
||||||
|
|
@ -2,4 +2,4 @@
|
||||||
mod repo ".devfiles/justfile"
|
mod repo ".devfiles/justfile"
|
||||||
|
|
||||||
dev:
|
dev:
|
||||||
watchexec --restart --clear --watch ./src bun run ./src/cli.ts
|
@echo "Edit the .justfile to setup the dev task!"
|
||||||
|
|
|
||||||
97
bun.lock
97
bun.lock
|
|
@ -1,97 +0,0 @@
|
||||||
{
|
|
||||||
"lockfileVersion": 1,
|
|
||||||
"workspaces": {
|
|
||||||
"": {
|
|
||||||
"name": "bun-static-plugin",
|
|
||||||
"dependencies": {
|
|
||||||
"sass": "^1.85.0",
|
|
||||||
"slug": "^10.0.0",
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@mini-strap/core": "^0.1.2",
|
|
||||||
"@types/bun": "latest",
|
|
||||||
"@types/slug": "^5.0.9",
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"typescript": "^5.0.0",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"packages": {
|
|
||||||
"@mini-strap/core": ["@mini-strap/core@0.1.2", "https://git.alecodes.page/api/packages/alecodes/npm/%40mini-strap%2Fcore/-/0.1.2/core-0.1.2.tgz", { "peerDependencies": { "typescript": "^5.0.0" }, "bin": { "@mini-strap/core": "build.ts" } }, "sha512-bt9su5jpslUMYmoNLz7s8P6RlN7Knriy8BtHBfVnpEizOh3DroStRr+yDCSLfhyByKXo6sa9ZNytc25ianEtbA=="],
|
|
||||||
|
|
||||||
"@parcel/watcher": ["@parcel/watcher@2.5.1", "", { "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", "micromatch": "^4.0.5", "node-addon-api": "^7.0.0" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.1", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", "@parcel/watcher-freebsd-x64": "2.5.1", "@parcel/watcher-linux-arm-glibc": "2.5.1", "@parcel/watcher-linux-arm-musl": "2.5.1", "@parcel/watcher-linux-arm64-glibc": "2.5.1", "@parcel/watcher-linux-arm64-musl": "2.5.1", "@parcel/watcher-linux-x64-glibc": "2.5.1", "@parcel/watcher-linux-x64-musl": "2.5.1", "@parcel/watcher-win32-arm64": "2.5.1", "@parcel/watcher-win32-ia32": "2.5.1", "@parcel/watcher-win32-x64": "2.5.1" } }, "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg=="],
|
|
||||||
|
|
||||||
"@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.5.1", "", { "os": "android", "cpu": "arm64" }, "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA=="],
|
|
||||||
|
|
||||||
"@parcel/watcher-darwin-arm64": ["@parcel/watcher-darwin-arm64@2.5.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw=="],
|
|
||||||
|
|
||||||
"@parcel/watcher-darwin-x64": ["@parcel/watcher-darwin-x64@2.5.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg=="],
|
|
||||||
|
|
||||||
"@parcel/watcher-freebsd-x64": ["@parcel/watcher-freebsd-x64@2.5.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ=="],
|
|
||||||
|
|
||||||
"@parcel/watcher-linux-arm-glibc": ["@parcel/watcher-linux-arm-glibc@2.5.1", "", { "os": "linux", "cpu": "arm" }, "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA=="],
|
|
||||||
|
|
||||||
"@parcel/watcher-linux-arm-musl": ["@parcel/watcher-linux-arm-musl@2.5.1", "", { "os": "linux", "cpu": "arm" }, "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q=="],
|
|
||||||
|
|
||||||
"@parcel/watcher-linux-arm64-glibc": ["@parcel/watcher-linux-arm64-glibc@2.5.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w=="],
|
|
||||||
|
|
||||||
"@parcel/watcher-linux-arm64-musl": ["@parcel/watcher-linux-arm64-musl@2.5.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg=="],
|
|
||||||
|
|
||||||
"@parcel/watcher-linux-x64-glibc": ["@parcel/watcher-linux-x64-glibc@2.5.1", "", { "os": "linux", "cpu": "x64" }, "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A=="],
|
|
||||||
|
|
||||||
"@parcel/watcher-linux-x64-musl": ["@parcel/watcher-linux-x64-musl@2.5.1", "", { "os": "linux", "cpu": "x64" }, "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg=="],
|
|
||||||
|
|
||||||
"@parcel/watcher-win32-arm64": ["@parcel/watcher-win32-arm64@2.5.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw=="],
|
|
||||||
|
|
||||||
"@parcel/watcher-win32-ia32": ["@parcel/watcher-win32-ia32@2.5.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ=="],
|
|
||||||
|
|
||||||
"@parcel/watcher-win32-x64": ["@parcel/watcher-win32-x64@2.5.1", "", { "os": "win32", "cpu": "x64" }, "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA=="],
|
|
||||||
|
|
||||||
"@types/bun": ["@types/bun@1.2.2", "", { "dependencies": { "bun-types": "1.2.2" } }, "sha512-tr74gdku+AEDN5ergNiBnplr7hpDp3V1h7fqI2GcR/rsUaM39jpSeKH0TFibRvU0KwniRx5POgaYnaXbk0hU+w=="],
|
|
||||||
|
|
||||||
"@types/node": ["@types/node@22.13.4", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg=="],
|
|
||||||
|
|
||||||
"@types/slug": ["@types/slug@5.0.9", "", {}, "sha512-6Yp8BSplP35Esa/wOG1wLNKiqXevpQTEF/RcL/NV6BBQaMmZh4YlDwCgrrFSoUE4xAGvnKd5c+lkQJmPrBAzfQ=="],
|
|
||||||
|
|
||||||
"@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="],
|
|
||||||
|
|
||||||
"braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
|
|
||||||
|
|
||||||
"bun-types": ["bun-types@1.2.2", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-RCbMH5elr9gjgDGDhkTTugA21XtJAy/9jkKe/G3WR2q17VPGhcquf9Sir6uay9iW+7P/BV0CAHA1XlHXMAVKHg=="],
|
|
||||||
|
|
||||||
"chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="],
|
|
||||||
|
|
||||||
"detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="],
|
|
||||||
|
|
||||||
"fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
|
|
||||||
|
|
||||||
"immutable": ["immutable@5.0.3", "", {}, "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw=="],
|
|
||||||
|
|
||||||
"is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
|
|
||||||
|
|
||||||
"is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
|
|
||||||
|
|
||||||
"is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
|
|
||||||
|
|
||||||
"micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="],
|
|
||||||
|
|
||||||
"node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="],
|
|
||||||
|
|
||||||
"picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
|
|
||||||
|
|
||||||
"readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="],
|
|
||||||
|
|
||||||
"sass": ["sass@1.85.0", "", { "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" }, "bin": { "sass": "sass.js" } }, "sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww=="],
|
|
||||||
|
|
||||||
"slug": ["slug@10.0.0", "", { "bin": { "slug": "cli.js" } }, "sha512-M8s2PWOUeSCdD4S1NH5lCzXg2zFV1fozrtfr0FSKl65x+EF1rUowj+/vyFlnHgxPxWzT+DL0VXKfYc1DHJoymg=="],
|
|
||||||
|
|
||||||
"source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
|
|
||||||
|
|
||||||
"to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
|
|
||||||
|
|
||||||
"typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="],
|
|
||||||
|
|
||||||
"undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="],
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
[install.scopes]
|
|
||||||
|
|
||||||
"@alecodes" = { token = "$NPM_REGISTRY_TOKEN", url = "https://git.alecodes.page/api/packages/alecodes/npm/" }
|
|
||||||
"@mini-strap" = { token = "$NPM_REGISTRY_TOKEN", url = "https://git.alecodes.page/api/packages/alecodes/npm/" }
|
|
||||||
18
package.json
18
package.json
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
"name": "bun-static-plugin",
|
|
||||||
"module": "src/index.ts",
|
|
||||||
"bin": "src/cli.ts",
|
|
||||||
"type": "module",
|
|
||||||
"devDependencies": {
|
|
||||||
"@mini-strap/core": "^0.1.2",
|
|
||||||
"@types/bun": "latest",
|
|
||||||
"@types/slug": "^5.0.9"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"typescript": "^5.0.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"sass": "^1.85.0",
|
|
||||||
"slug": "^10.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
25
src/cli.ts
25
src/cli.ts
|
|
@ -1,25 +0,0 @@
|
||||||
import Plugin, { LogType } from "./index.ts";
|
|
||||||
import { EntrypointType, type Config, type Entrypoint } from "./types.ts";
|
|
||||||
|
|
||||||
const config: Config = {
|
|
||||||
production: false,
|
|
||||||
outdir: "dist",
|
|
||||||
root: "testfiles",
|
|
||||||
};
|
|
||||||
|
|
||||||
const entrypoints: Entrypoint[] = [
|
|
||||||
{
|
|
||||||
path: "./testfiles/style.css",
|
|
||||||
type: EntrypointType.Css,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "./testfiles/index.ts",
|
|
||||||
type: EntrypointType.Js,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "@mini-strap/core",
|
|
||||||
type: EntrypointType.Package,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
await Plugin.build(config, entrypoints);
|
|
||||||
205
src/index.ts
205
src/index.ts
|
|
@ -1,205 +0,0 @@
|
||||||
import type { BuildConfig, BunPlugin, PluginBuilder } from "bun";
|
|
||||||
import type { FileImporter } from "sass";
|
|
||||||
import { type Config, type Entrypoint, EntrypointType, LogType } from "./types";
|
|
||||||
|
|
||||||
import { basename, join, normalize } from "node:path";
|
|
||||||
import { fileURLToPath } from "node:url";
|
|
||||||
|
|
||||||
import { rm } from "node:fs/promises";
|
|
||||||
import slug from "slug";
|
|
||||||
|
|
||||||
// This is used to prevent creating folders with external packages names
|
|
||||||
slug.extend({ "/": "-" });
|
|
||||||
|
|
||||||
const nodeModuleImporter: FileImporter<"async"> = {
|
|
||||||
findFileUrl(url) {
|
|
||||||
if (url.startsWith("@")) {
|
|
||||||
return new URL(import.meta.resolve(url));
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const sassPlugin: BunPlugin = {
|
|
||||||
name: "Sass Loader",
|
|
||||||
async setup(build: PluginBuilder) {
|
|
||||||
const sass = await import("sass");
|
|
||||||
|
|
||||||
build.onLoad({ filter: /\.scss$/ }, async ({ path }) => {
|
|
||||||
const result = await sass.compileAsync(path, {
|
|
||||||
importers: [nodeModuleImporter],
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
|
||||||
loader: "css",
|
|
||||||
contents: result.css,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
function log(logtype: LogType, msg: string) {
|
|
||||||
const reset = "\x1b[0m";
|
|
||||||
let color = Bun.color("white", "ansi");
|
|
||||||
|
|
||||||
switch (logtype) {
|
|
||||||
case LogType.Success:
|
|
||||||
color = Bun.color("green", "ansi");
|
|
||||||
break;
|
|
||||||
case LogType.Error:
|
|
||||||
color = Bun.color("#f24444", "ansi");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!color) {
|
|
||||||
color = reset;
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(color + msg + reset);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Packages needs to exist in the package.json file for this to work
|
|
||||||
function resolvePackage(pkg: string): Entrypoint {
|
|
||||||
const path = normalize(fileURLToPath(import.meta.resolve(pkg)));
|
|
||||||
const file = Bun.file(import.meta.resolve(pkg));
|
|
||||||
const mimetype = file.type.split(";").at(0);
|
|
||||||
|
|
||||||
let type: EntrypointType;
|
|
||||||
|
|
||||||
switch (mimetype) {
|
|
||||||
case "text/x-scss":
|
|
||||||
type = EntrypointType.Sass;
|
|
||||||
break;
|
|
||||||
case "text/javascript":
|
|
||||||
type = EntrypointType.Js;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new Error(`No loader found for type ${mimetype} at path ${path}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
path,
|
|
||||||
type,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export default {
|
|
||||||
log,
|
|
||||||
|
|
||||||
build: async (config: Config, entrypoints: Entrypoint[]) => {
|
|
||||||
// Resolve external packages
|
|
||||||
|
|
||||||
const external_cache: string[] = [];
|
|
||||||
const resolved_entrypoints = entrypoints.map((item) => {
|
|
||||||
if (item.type !== EntrypointType.Package) {
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
external_cache.push(item.path);
|
|
||||||
return resolvePackage(item.path);
|
|
||||||
});
|
|
||||||
|
|
||||||
const baseConfig = {
|
|
||||||
minify: config.production,
|
|
||||||
outdir: `${config.outdir}/js`,
|
|
||||||
packages: "external",
|
|
||||||
root: config.root,
|
|
||||||
splitting: config.production,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Apply build config per type
|
|
||||||
const loaders = {
|
|
||||||
assetLoader: {
|
|
||||||
entrypoints: resolved_entrypoints
|
|
||||||
.filter((entry) => entry.type === EntrypointType.Asset)
|
|
||||||
.map((entry) => entry.path),
|
|
||||||
outdir: `${config.outdir}/asset`,
|
|
||||||
},
|
|
||||||
stylesLoader: {
|
|
||||||
...baseConfig,
|
|
||||||
entrypoints: resolved_entrypoints
|
|
||||||
.filter((entry) =>
|
|
||||||
[EntrypointType.Css, EntrypointType.Sass].includes(entry.type),
|
|
||||||
)
|
|
||||||
.map((entry) => entry.path),
|
|
||||||
outdir: `${config.outdir}/css`,
|
|
||||||
plugins: [sassPlugin],
|
|
||||||
},
|
|
||||||
jsLoader: {
|
|
||||||
...baseConfig,
|
|
||||||
entrypoints: resolved_entrypoints
|
|
||||||
.filter((entry) => entry.type === EntrypointType.Js)
|
|
||||||
.map((entry) => entry.path),
|
|
||||||
target: "browser",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// Transform into a list to later use Promise.all
|
|
||||||
const assets = Object.values(loaders).filter(
|
|
||||||
(item) => item.entrypoints.length !== 0,
|
|
||||||
);
|
|
||||||
|
|
||||||
log(LogType.Info, "Building assets...");
|
|
||||||
|
|
||||||
const out = await Promise.all(
|
|
||||||
assets.map(async (item) => {
|
|
||||||
const result = await Bun.build(item as BuildConfig);
|
|
||||||
|
|
||||||
if (!result.success) {
|
|
||||||
throw new AggregateError(result.logs, "Build failed");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Normalize external packages folder structure
|
|
||||||
for (const out of result.outputs) {
|
|
||||||
if (!out.path.includes("node_modules")) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
let package_name = external_cache.find((pkg) =>
|
|
||||||
out.path.includes(pkg),
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!package_name) {
|
|
||||||
throw new Error(
|
|
||||||
`Could not normilize path for external package: ${out.path}`,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
package_name = slug(package_name);
|
|
||||||
|
|
||||||
if (!package_name) {
|
|
||||||
throw new Error(
|
|
||||||
`Could not normilize path for external package: ${out.path}`,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const new_path = join(
|
|
||||||
config.outdir,
|
|
||||||
"pkgs",
|
|
||||||
package_name,
|
|
||||||
basename(out.path),
|
|
||||||
);
|
|
||||||
|
|
||||||
await Bun.write(new_path, out);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
|
|
||||||
if (out.some((item) => !item.success)) {
|
|
||||||
throw new Error(`Some entrypoint failed to build: ${out}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
await rm(join(config.outdir, "node_modules"), {
|
|
||||||
recursive: true,
|
|
||||||
force: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
log(LogType.Success, "Complete!");
|
|
||||||
},
|
|
||||||
};
|
|
||||||
26
src/types.ts
26
src/types.ts
|
|
@ -1,26 +0,0 @@
|
||||||
export enum LogType {
|
|
||||||
Info = 1,
|
|
||||||
Success = 2,
|
|
||||||
Error = 3,
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Config {
|
|
||||||
production: boolean;
|
|
||||||
outdir: string;
|
|
||||||
root?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to match mime types
|
|
||||||
export enum EntrypointType {
|
|
||||||
Asset = "asset",
|
|
||||||
Js = "javascript",
|
|
||||||
Css = "css",
|
|
||||||
Sass = "scss",
|
|
||||||
Package = "pkg",
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Entrypoint {
|
|
||||||
path: string;
|
|
||||||
type: EntrypointType;
|
|
||||||
outdir?: string;
|
|
||||||
}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
console.log("Hello World!");
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
* {
|
|
||||||
background-color: red;
|
|
||||||
}
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
// Enable latest features
|
|
||||||
"lib": ["ESNext", "DOM"],
|
|
||||||
"target": "ESNext",
|
|
||||||
"module": "ESNext",
|
|
||||||
"moduleDetection": "force",
|
|
||||||
"jsx": "react-jsx",
|
|
||||||
"allowJs": true,
|
|
||||||
|
|
||||||
// Bundler mode
|
|
||||||
"moduleResolution": "bundler",
|
|
||||||
"allowImportingTsExtensions": true,
|
|
||||||
"verbatimModuleSyntax": true,
|
|
||||||
"noEmit": true,
|
|
||||||
|
|
||||||
// Best practices
|
|
||||||
"strict": true,
|
|
||||||
"skipLibCheck": true,
|
|
||||||
"noFallthroughCasesInSwitch": true,
|
|
||||||
|
|
||||||
// Some stricter flags (disabled by default)
|
|
||||||
"noUnusedLocals": false,
|
|
||||||
"noUnusedParameters": false,
|
|
||||||
"noPropertyAccessFromIndexSignature": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue