initial update

This commit is contained in:
Justin Deal 2025-04-26 23:21:07 -07:00
parent fd6d1d4e12
commit 89bd35218f
11329 changed files with 1529847 additions and 1 deletions

View File

@ -0,0 +1 @@
export default new Map();

View File

@ -0,0 +1 @@
export default new Map();

1
.astro/data-store.json Normal file
View File

@ -0,0 +1 @@
[["Map",1,2],"meta::meta",["Map",3,4,5,6],"astro-version","5.7.5","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[]},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"responsiveImages\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false},\"legacy\":{\"collections\":false}}"]

5
.astro/settings.json Normal file
View File

@ -0,0 +1,5 @@
{
"_variables": {
"lastUpdateCheck": 1745734849572
}
}

1
.astro/types.d.ts vendored Normal file
View File

@ -0,0 +1 @@
/// <reference types="astro/client" />

View File

@ -1,3 +1,82 @@
<<<<<<< HEAD
# justin.deal
My personal website and blog.
=======
![Zaggonaut, a retro-inspired theme for Astro.](./images/README.png)
Zaggonaut is a retro-inspired theme for Astro, built using TypeScript, TailwindCSS, and of course, Astro.
## Getting Started
[View the demo](https://zaggonaut.dev) or [view the source code](https://github.com/RATIU5/zaggonaut).
Alternatively, you can create a new Astro project with Zaggonaut like this:
```bash
# pnpm
pnpm create astro@latest --template RATIU5/zaggonaut
```
> [!IMPORTANT]
> Currently, `pnpm` is the only supported package manager due to `pnpm` throwing peer-dependency conflicts.
## Features
- Dark & light mode
- Customizable colors
- 100 / 100 Lighthouse score
- Fully accessible
- Fully responsive
- Type-safe
- SEO-friendly
## Customization
The entire theme is fully customizable. The theme is setup a specific way to make it easy to customize.
### Colors
You can customize the colors of the theme by editing the `src/styles/global.css` file.
This file uses Tailwind CSS and CSS variables to customize the colors of the theme.
Zaggonaut uses the following CSS variables:
- `--color-zag-dark`: The dark color of the theme
- `--color-zag-light`: The light color of the theme
- `--color-zag-dark-muted`: The dark color of the theme with a slight opacity
- `--color-zag-light-muted`: The light color of the theme with a slight opacity
- `--color-zag-accent-light`: The light accent color of the theme
- `--color-zag-accent-light-muted`: The light accent color of the theme with a slight opacity
- `--color-zag-accent-dark`: The dark accent color of the theme
- `--color-zag-accent-dark-muted`: The dark accent color of the theme with a slight opacity
### Text
You can customize the text of the theme by editing the `src/lib/variables.ts` file.
This file contains all of the text used throughout the theme.
For example, you can change the `username` variable to your own username and everywhere the username is used will be replaced with your username.
```typescript
export const GLOBAL = {
// Site metadata
username: "zaggonaut-fan123",
// ...
// Profile image
profileImage: "profile.webp",
// Menu items
menu: {
home: "/",
projects: "/projects",
blog: "/blog",
}
};
```
## Ready To Try?
Check out [the theme website](https://zaggonaut.dev) to give it a spin!
>>>>>>> beeac98 (initial commit)

10
astro.config.mjs Normal file
View File

@ -0,0 +1,10 @@
// @ts-check
import { defineConfig } from "astro/config";
import tailwindcss from "@tailwindcss/vite";
// https://astro.build/config
export default defineConfig({
vite: {
plugins: [tailwindcss()],
},
});

BIN
images/README.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 956 KiB

17
node_modules/.bin/astro generated vendored Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -z "$NODE_PATH" ]; then
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/astro@5.7.5_@types+node@22.15.2_jiti@2.4.2_lightningcss@1.29.2_rollup@4.40.0_typescript@5.8.3_yaml@2.7.1/node_modules/astro/node_modules:/home/justin/justin_deal/node_modules/.pnpm/astro@5.7.5_@types+node@22.15.2_jiti@2.4.2_lightningcss@1.29.2_rollup@4.40.0_typescript@5.8.3_yaml@2.7.1/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules"
else
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/astro@5.7.5_@types+node@22.15.2_jiti@2.4.2_lightningcss@1.29.2_rollup@4.40.0_typescript@5.8.3_yaml@2.7.1/node_modules/astro/node_modules:/home/justin/justin_deal/node_modules/.pnpm/astro@5.7.5_@types+node@22.15.2_jiti@2.4.2_lightningcss@1.29.2_rollup@4.40.0_typescript@5.8.3_yaml@2.7.1/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules:$NODE_PATH"
fi
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../astro/astro.js" "$@"
else
exec node "$basedir/../astro/astro.js" "$@"
fi

17
node_modules/.bin/browserslist generated vendored Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -z "$NODE_PATH" ]; then
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/browserslist@4.24.4/node_modules/browserslist/node_modules:/home/justin/justin_deal/node_modules/.pnpm/browserslist@4.24.4/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules"
else
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/browserslist@4.24.4/node_modules/browserslist/node_modules:/home/justin/justin_deal/node_modules/.pnpm/browserslist@4.24.4/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules:$NODE_PATH"
fi
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../.pnpm/browserslist@4.24.4/node_modules/browserslist/cli.js" "$@"
else
exec node "$basedir/../.pnpm/browserslist@4.24.4/node_modules/browserslist/cli.js" "$@"
fi

17
node_modules/.bin/jiti generated vendored Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -z "$NODE_PATH" ]; then
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/jiti@2.4.2/node_modules/jiti/lib/node_modules:/home/justin/justin_deal/node_modules/.pnpm/jiti@2.4.2/node_modules/jiti/node_modules:/home/justin/justin_deal/node_modules/.pnpm/jiti@2.4.2/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules"
else
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/jiti@2.4.2/node_modules/jiti/lib/node_modules:/home/justin/justin_deal/node_modules/.pnpm/jiti@2.4.2/node_modules/jiti/node_modules:/home/justin/justin_deal/node_modules/.pnpm/jiti@2.4.2/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules:$NODE_PATH"
fi
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../.pnpm/jiti@2.4.2/node_modules/jiti/lib/jiti-cli.mjs" "$@"
else
exec node "$basedir/../.pnpm/jiti@2.4.2/node_modules/jiti/lib/jiti-cli.mjs" "$@"
fi

17
node_modules/.bin/rollup generated vendored Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -z "$NODE_PATH" ]; then
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/rollup@4.40.0/node_modules/rollup/dist/bin/node_modules:/home/justin/justin_deal/node_modules/.pnpm/rollup@4.40.0/node_modules/rollup/dist/node_modules:/home/justin/justin_deal/node_modules/.pnpm/rollup@4.40.0/node_modules/rollup/node_modules:/home/justin/justin_deal/node_modules/.pnpm/rollup@4.40.0/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules"
else
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/rollup@4.40.0/node_modules/rollup/dist/bin/node_modules:/home/justin/justin_deal/node_modules/.pnpm/rollup@4.40.0/node_modules/rollup/dist/node_modules:/home/justin/justin_deal/node_modules/.pnpm/rollup@4.40.0/node_modules/rollup/node_modules:/home/justin/justin_deal/node_modules/.pnpm/rollup@4.40.0/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules:$NODE_PATH"
fi
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../.pnpm/rollup@4.40.0/node_modules/rollup/dist/bin/rollup" "$@"
else
exec node "$basedir/../.pnpm/rollup@4.40.0/node_modules/rollup/dist/bin/rollup" "$@"
fi

17
node_modules/.bin/tsc generated vendored Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -z "$NODE_PATH" ]; then
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/bin/node_modules:/home/justin/justin_deal/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/node_modules:/home/justin/justin_deal/node_modules/.pnpm/typescript@5.8.3/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules"
else
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/bin/node_modules:/home/justin/justin_deal/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/node_modules:/home/justin/justin_deal/node_modules/.pnpm/typescript@5.8.3/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules:$NODE_PATH"
fi
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../.pnpm/typescript@5.8.3/node_modules/typescript/bin/tsc" "$@"
else
exec node "$basedir/../.pnpm/typescript@5.8.3/node_modules/typescript/bin/tsc" "$@"
fi

17
node_modules/.bin/tsserver generated vendored Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -z "$NODE_PATH" ]; then
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/bin/node_modules:/home/justin/justin_deal/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/node_modules:/home/justin/justin_deal/node_modules/.pnpm/typescript@5.8.3/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules"
else
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/bin/node_modules:/home/justin/justin_deal/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/node_modules:/home/justin/justin_deal/node_modules/.pnpm/typescript@5.8.3/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules:$NODE_PATH"
fi
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../.pnpm/typescript@5.8.3/node_modules/typescript/bin/tsserver" "$@"
else
exec node "$basedir/../.pnpm/typescript@5.8.3/node_modules/typescript/bin/tsserver" "$@"
fi

17
node_modules/.bin/vite generated vendored Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -z "$NODE_PATH" ]; then
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/vite@6.3.3_@types+node@22.15.2_jiti@2.4.2_lightningcss@1.29.2_yaml@2.7.1/node_modules/vite/bin/node_modules:/home/justin/justin_deal/node_modules/.pnpm/vite@6.3.3_@types+node@22.15.2_jiti@2.4.2_lightningcss@1.29.2_yaml@2.7.1/node_modules/vite/node_modules:/home/justin/justin_deal/node_modules/.pnpm/vite@6.3.3_@types+node@22.15.2_jiti@2.4.2_lightningcss@1.29.2_yaml@2.7.1/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules"
else
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/vite@6.3.3_@types+node@22.15.2_jiti@2.4.2_lightningcss@1.29.2_yaml@2.7.1/node_modules/vite/bin/node_modules:/home/justin/justin_deal/node_modules/.pnpm/vite@6.3.3_@types+node@22.15.2_jiti@2.4.2_lightningcss@1.29.2_yaml@2.7.1/node_modules/vite/node_modules:/home/justin/justin_deal/node_modules/.pnpm/vite@6.3.3_@types+node@22.15.2_jiti@2.4.2_lightningcss@1.29.2_yaml@2.7.1/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules:$NODE_PATH"
fi
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../.pnpm/vite@6.3.3_@types+node@22.15.2_jiti@2.4.2_lightningcss@1.29.2_yaml@2.7.1/node_modules/vite/bin/vite.js" "$@"
else
exec node "$basedir/../.pnpm/vite@6.3.3_@types+node@22.15.2_jiti@2.4.2_lightningcss@1.29.2_yaml@2.7.1/node_modules/vite/bin/vite.js" "$@"
fi

17
node_modules/.bin/yaml generated vendored Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -z "$NODE_PATH" ]; then
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/yaml@2.7.1/node_modules/yaml/node_modules:/home/justin/justin_deal/node_modules/.pnpm/yaml@2.7.1/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules"
else
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/yaml@2.7.1/node_modules/yaml/node_modules:/home/justin/justin_deal/node_modules/.pnpm/yaml@2.7.1/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules:$NODE_PATH"
fi
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../.pnpm/yaml@2.7.1/node_modules/yaml/bin.mjs" "$@"
else
exec node "$basedir/../.pnpm/yaml@2.7.1/node_modules/yaml/bin.mjs" "$@"
fi

864
node_modules/.modules.yaml generated vendored Normal file
View File

@ -0,0 +1,864 @@
hoistPattern:
- '*'
hoistedDependencies:
'@astrojs/compiler@2.11.0':
'@astrojs/compiler': private
'@astrojs/internal-helpers@0.6.1':
'@astrojs/internal-helpers': private
'@astrojs/markdown-remark@6.3.1':
'@astrojs/markdown-remark': private
'@astrojs/prism@3.2.0':
'@astrojs/prism': private
'@astrojs/telemetry@3.2.1':
'@astrojs/telemetry': private
'@babel/helper-string-parser@7.25.9':
'@babel/helper-string-parser': private
'@babel/helper-validator-identifier@7.25.9':
'@babel/helper-validator-identifier': private
'@babel/parser@7.27.0':
'@babel/parser': private
'@babel/types@7.27.0':
'@babel/types': private
'@capsizecss/unpack@2.4.0':
'@capsizecss/unpack': private
'@esbuild/aix-ppc64@0.25.3':
'@esbuild/aix-ppc64': private
'@esbuild/android-arm64@0.25.3':
'@esbuild/android-arm64': private
'@esbuild/android-arm@0.25.3':
'@esbuild/android-arm': private
'@esbuild/android-x64@0.25.3':
'@esbuild/android-x64': private
'@esbuild/darwin-arm64@0.25.3':
'@esbuild/darwin-arm64': private
'@esbuild/darwin-x64@0.25.3':
'@esbuild/darwin-x64': private
'@esbuild/freebsd-arm64@0.25.3':
'@esbuild/freebsd-arm64': private
'@esbuild/freebsd-x64@0.25.3':
'@esbuild/freebsd-x64': private
'@esbuild/linux-arm64@0.25.3':
'@esbuild/linux-arm64': private
'@esbuild/linux-arm@0.25.3':
'@esbuild/linux-arm': private
'@esbuild/linux-ia32@0.25.3':
'@esbuild/linux-ia32': private
'@esbuild/linux-loong64@0.25.3':
'@esbuild/linux-loong64': private
'@esbuild/linux-mips64el@0.25.3':
'@esbuild/linux-mips64el': private
'@esbuild/linux-ppc64@0.25.3':
'@esbuild/linux-ppc64': private
'@esbuild/linux-riscv64@0.25.3':
'@esbuild/linux-riscv64': private
'@esbuild/linux-s390x@0.25.3':
'@esbuild/linux-s390x': private
'@esbuild/linux-x64@0.25.3':
'@esbuild/linux-x64': private
'@esbuild/netbsd-arm64@0.25.3':
'@esbuild/netbsd-arm64': private
'@esbuild/netbsd-x64@0.25.3':
'@esbuild/netbsd-x64': private
'@esbuild/openbsd-arm64@0.25.3':
'@esbuild/openbsd-arm64': private
'@esbuild/openbsd-x64@0.25.3':
'@esbuild/openbsd-x64': private
'@esbuild/sunos-x64@0.25.3':
'@esbuild/sunos-x64': private
'@esbuild/win32-arm64@0.25.3':
'@esbuild/win32-arm64': private
'@esbuild/win32-ia32@0.25.3':
'@esbuild/win32-ia32': private
'@esbuild/win32-x64@0.25.3':
'@esbuild/win32-x64': private
'@img/sharp-darwin-arm64@0.33.5':
'@img/sharp-darwin-arm64': private
'@img/sharp-darwin-x64@0.33.5':
'@img/sharp-darwin-x64': private
'@img/sharp-libvips-darwin-arm64@1.0.4':
'@img/sharp-libvips-darwin-arm64': private
'@img/sharp-libvips-darwin-x64@1.0.4':
'@img/sharp-libvips-darwin-x64': private
'@img/sharp-libvips-linux-arm64@1.0.4':
'@img/sharp-libvips-linux-arm64': private
'@img/sharp-libvips-linux-arm@1.0.5':
'@img/sharp-libvips-linux-arm': private
'@img/sharp-libvips-linux-s390x@1.0.4':
'@img/sharp-libvips-linux-s390x': private
'@img/sharp-libvips-linux-x64@1.0.4':
'@img/sharp-libvips-linux-x64': private
'@img/sharp-libvips-linuxmusl-arm64@1.0.4':
'@img/sharp-libvips-linuxmusl-arm64': private
'@img/sharp-libvips-linuxmusl-x64@1.0.4':
'@img/sharp-libvips-linuxmusl-x64': private
'@img/sharp-linux-arm64@0.33.5':
'@img/sharp-linux-arm64': private
'@img/sharp-linux-arm@0.33.5':
'@img/sharp-linux-arm': private
'@img/sharp-linux-s390x@0.33.5':
'@img/sharp-linux-s390x': private
'@img/sharp-linux-x64@0.33.5':
'@img/sharp-linux-x64': private
'@img/sharp-linuxmusl-arm64@0.33.5':
'@img/sharp-linuxmusl-arm64': private
'@img/sharp-linuxmusl-x64@0.33.5':
'@img/sharp-linuxmusl-x64': private
'@img/sharp-wasm32@0.33.5':
'@img/sharp-wasm32': private
'@img/sharp-win32-ia32@0.33.5':
'@img/sharp-win32-ia32': private
'@img/sharp-win32-x64@0.33.5':
'@img/sharp-win32-x64': private
'@jridgewell/sourcemap-codec@1.5.0':
'@jridgewell/sourcemap-codec': private
'@oslojs/encoding@1.1.0':
'@oslojs/encoding': private
'@rollup/pluginutils@5.1.4(rollup@4.40.0)':
'@rollup/pluginutils': private
'@rollup/rollup-android-arm-eabi@4.40.0':
'@rollup/rollup-android-arm-eabi': private
'@rollup/rollup-android-arm64@4.40.0':
'@rollup/rollup-android-arm64': private
'@rollup/rollup-darwin-arm64@4.40.0':
'@rollup/rollup-darwin-arm64': private
'@rollup/rollup-darwin-x64@4.40.0':
'@rollup/rollup-darwin-x64': private
'@rollup/rollup-freebsd-arm64@4.40.0':
'@rollup/rollup-freebsd-arm64': private
'@rollup/rollup-freebsd-x64@4.40.0':
'@rollup/rollup-freebsd-x64': private
'@rollup/rollup-linux-arm-gnueabihf@4.40.0':
'@rollup/rollup-linux-arm-gnueabihf': private
'@rollup/rollup-linux-arm-musleabihf@4.40.0':
'@rollup/rollup-linux-arm-musleabihf': private
'@rollup/rollup-linux-arm64-gnu@4.40.0':
'@rollup/rollup-linux-arm64-gnu': private
'@rollup/rollup-linux-arm64-musl@4.40.0':
'@rollup/rollup-linux-arm64-musl': private
'@rollup/rollup-linux-loongarch64-gnu@4.40.0':
'@rollup/rollup-linux-loongarch64-gnu': private
'@rollup/rollup-linux-powerpc64le-gnu@4.40.0':
'@rollup/rollup-linux-powerpc64le-gnu': private
'@rollup/rollup-linux-riscv64-gnu@4.40.0':
'@rollup/rollup-linux-riscv64-gnu': private
'@rollup/rollup-linux-riscv64-musl@4.40.0':
'@rollup/rollup-linux-riscv64-musl': private
'@rollup/rollup-linux-s390x-gnu@4.40.0':
'@rollup/rollup-linux-s390x-gnu': private
'@rollup/rollup-linux-x64-gnu@4.40.0':
'@rollup/rollup-linux-x64-gnu': private
'@rollup/rollup-linux-x64-musl@4.40.0':
'@rollup/rollup-linux-x64-musl': private
'@rollup/rollup-win32-arm64-msvc@4.40.0':
'@rollup/rollup-win32-arm64-msvc': private
'@rollup/rollup-win32-ia32-msvc@4.40.0':
'@rollup/rollup-win32-ia32-msvc': private
'@rollup/rollup-win32-x64-msvc@4.40.0':
'@rollup/rollup-win32-x64-msvc': private
'@shikijs/core@3.3.0':
'@shikijs/core': private
'@shikijs/engine-javascript@3.3.0':
'@shikijs/engine-javascript': private
'@shikijs/engine-oniguruma@3.3.0':
'@shikijs/engine-oniguruma': private
'@shikijs/langs@3.3.0':
'@shikijs/langs': private
'@shikijs/themes@3.3.0':
'@shikijs/themes': private
'@shikijs/types@3.3.0':
'@shikijs/types': private
'@shikijs/vscode-textmate@10.0.2':
'@shikijs/vscode-textmate': private
'@swc/helpers@0.5.17':
'@swc/helpers': private
'@tailwindcss/node@4.1.4':
'@tailwindcss/node': private
'@tailwindcss/oxide-android-arm64@4.1.4':
'@tailwindcss/oxide-android-arm64': private
'@tailwindcss/oxide-darwin-arm64@4.1.4':
'@tailwindcss/oxide-darwin-arm64': private
'@tailwindcss/oxide-darwin-x64@4.1.4':
'@tailwindcss/oxide-darwin-x64': private
'@tailwindcss/oxide-freebsd-x64@4.1.4':
'@tailwindcss/oxide-freebsd-x64': private
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.4':
'@tailwindcss/oxide-linux-arm-gnueabihf': private
'@tailwindcss/oxide-linux-arm64-gnu@4.1.4':
'@tailwindcss/oxide-linux-arm64-gnu': private
'@tailwindcss/oxide-linux-arm64-musl@4.1.4':
'@tailwindcss/oxide-linux-arm64-musl': private
'@tailwindcss/oxide-linux-x64-gnu@4.1.4':
'@tailwindcss/oxide-linux-x64-gnu': private
'@tailwindcss/oxide-linux-x64-musl@4.1.4':
'@tailwindcss/oxide-linux-x64-musl': private
'@tailwindcss/oxide-wasm32-wasi@4.1.4':
'@tailwindcss/oxide-wasm32-wasi': private
'@tailwindcss/oxide-win32-arm64-msvc@4.1.4':
'@tailwindcss/oxide-win32-arm64-msvc': private
'@tailwindcss/oxide-win32-x64-msvc@4.1.4':
'@tailwindcss/oxide-win32-x64-msvc': private
'@tailwindcss/oxide@4.1.4':
'@tailwindcss/oxide': private
'@types/debug@4.1.12':
'@types/debug': private
'@types/estree@1.0.7':
'@types/estree': private
'@types/hast@3.0.4':
'@types/hast': private
'@types/mdast@4.0.4':
'@types/mdast': private
'@types/ms@2.1.0':
'@types/ms': private
'@types/nlcst@2.0.3':
'@types/nlcst': private
'@types/unist@3.0.3':
'@types/unist': private
'@ungap/structured-clone@1.3.0':
'@ungap/structured-clone': private
acorn@8.14.1:
acorn: private
ansi-align@3.0.1:
ansi-align: private
ansi-regex@6.1.0:
ansi-regex: private
ansi-styles@6.2.1:
ansi-styles: private
anymatch@3.1.3:
anymatch: private
argparse@2.0.1:
argparse: private
aria-query@5.3.2:
aria-query: private
array-iterate@2.0.1:
array-iterate: private
autoprefixer@10.4.21(postcss@8.5.3):
autoprefixer: private
axobject-query@4.1.0:
axobject-query: private
bail@2.0.2:
bail: private
base-64@1.0.0:
base-64: private
base64-js@1.5.1:
base64-js: private
blob-to-buffer@1.2.9:
blob-to-buffer: private
boxen@8.0.1:
boxen: private
brotli@1.3.3:
brotli: private
browserslist@4.24.4:
browserslist: private
camelcase@8.0.0:
camelcase: private
caniuse-lite@1.0.30001715:
caniuse-lite: private
ccount@2.0.1:
ccount: private
chalk@5.4.1:
chalk: private
character-entities-html4@2.1.0:
character-entities-html4: private
character-entities-legacy@3.0.0:
character-entities-legacy: private
character-entities@2.0.2:
character-entities: private
chokidar@4.0.3:
chokidar: private
ci-info@4.2.0:
ci-info: private
cli-boxes@3.0.0:
cli-boxes: private
clone@2.1.2:
clone: private
clsx@2.1.1:
clsx: private
color-convert@2.0.1:
color-convert: private
color-name@1.1.4:
color-name: private
color-string@1.9.1:
color-string: private
color@4.2.3:
color: private
comma-separated-tokens@2.0.3:
comma-separated-tokens: private
common-ancestor-path@1.0.1:
common-ancestor-path: private
cookie-es@1.2.2:
cookie-es: private
cookie@1.0.2:
cookie: private
cross-fetch@3.2.0:
cross-fetch: private
crossws@0.3.4:
crossws: private
css-tree@3.1.0:
css-tree: private
cssesc@3.0.0:
cssesc: private
debug@4.4.0:
debug: private
decode-named-character-reference@1.1.0:
decode-named-character-reference: private
defu@6.1.4:
defu: private
dequal@2.0.3:
dequal: private
destr@2.0.5:
destr: private
detect-libc@2.0.4:
detect-libc: private
deterministic-object-hash@2.0.2:
deterministic-object-hash: private
devalue@5.1.1:
devalue: private
devlop@1.1.0:
devlop: private
dfa@1.2.0:
dfa: private
diff@5.2.0:
diff: private
dlv@1.1.3:
dlv: private
dset@3.1.4:
dset: private
electron-to-chromium@1.5.142:
electron-to-chromium: private
emoji-regex@10.4.0:
emoji-regex: private
enhanced-resolve@5.18.1:
enhanced-resolve: private
entities@6.0.0:
entities: private
es-module-lexer@1.7.0:
es-module-lexer: private
esbuild@0.25.3:
esbuild: private
escalade@3.2.0:
escalade: private
escape-string-regexp@5.0.0:
escape-string-regexp: private
estree-walker@3.0.3:
estree-walker: private
eventemitter3@5.0.1:
eventemitter3: private
extend@3.0.2:
extend: private
fast-deep-equal@3.1.3:
fast-deep-equal: private
fdir@6.4.4(picomatch@4.0.2):
fdir: private
flattie@1.1.1:
flattie: private
fontkit@2.0.4:
fontkit: private
fraction.js@4.3.7:
fraction.js: private
fsevents@2.3.3:
fsevents: private
get-east-asian-width@1.3.0:
get-east-asian-width: private
github-slugger@2.0.0:
github-slugger: private
graceful-fs@4.2.11:
graceful-fs: private
h3@1.15.1:
h3: private
hast-util-from-html@2.0.3:
hast-util-from-html: private
hast-util-from-parse5@8.0.3:
hast-util-from-parse5: private
hast-util-is-element@3.0.0:
hast-util-is-element: private
hast-util-parse-selector@4.0.0:
hast-util-parse-selector: private
hast-util-raw@9.1.0:
hast-util-raw: private
hast-util-to-html@9.0.5:
hast-util-to-html: private
hast-util-to-parse5@8.0.0:
hast-util-to-parse5: private
hast-util-to-text@4.0.2:
hast-util-to-text: private
hast-util-whitespace@3.0.0:
hast-util-whitespace: private
hastscript@9.0.1:
hastscript: private
html-escaper@3.0.3:
html-escaper: private
html-void-elements@3.0.0:
html-void-elements: private
http-cache-semantics@4.1.1:
http-cache-semantics: private
import-meta-resolve@4.1.0:
import-meta-resolve: private
iron-webcrypto@1.2.1:
iron-webcrypto: private
is-arrayish@0.3.2:
is-arrayish: private
is-docker@3.0.0:
is-docker: private
is-fullwidth-code-point@3.0.0:
is-fullwidth-code-point: private
is-inside-container@1.0.0:
is-inside-container: private
is-plain-obj@4.1.0:
is-plain-obj: private
is-wsl@3.1.0:
is-wsl: private
jiti@2.4.2:
jiti: private
js-yaml@4.1.0:
js-yaml: private
kleur@4.1.5:
kleur: private
lightningcss-darwin-arm64@1.29.2:
lightningcss-darwin-arm64: private
lightningcss-darwin-x64@1.29.2:
lightningcss-darwin-x64: private
lightningcss-freebsd-x64@1.29.2:
lightningcss-freebsd-x64: private
lightningcss-linux-arm-gnueabihf@1.29.2:
lightningcss-linux-arm-gnueabihf: private
lightningcss-linux-arm64-gnu@1.29.2:
lightningcss-linux-arm64-gnu: private
lightningcss-linux-arm64-musl@1.29.2:
lightningcss-linux-arm64-musl: private
lightningcss-linux-x64-gnu@1.29.2:
lightningcss-linux-x64-gnu: private
lightningcss-linux-x64-musl@1.29.2:
lightningcss-linux-x64-musl: private
lightningcss-win32-arm64-msvc@1.29.2:
lightningcss-win32-arm64-msvc: private
lightningcss-win32-x64-msvc@1.29.2:
lightningcss-win32-x64-msvc: private
lightningcss@1.29.2:
lightningcss: private
lilconfig@3.1.3:
lilconfig: private
lodash.castarray@4.4.0:
lodash.castarray: private
lodash.isplainobject@4.0.6:
lodash.isplainobject: private
lodash.merge@4.6.2:
lodash.merge: private
longest-streak@3.1.0:
longest-streak: private
lru-cache@10.4.3:
lru-cache: private
magic-string@0.30.17:
magic-string: private
magicast@0.3.5:
magicast: private
markdown-table@3.0.4:
markdown-table: private
mdast-util-definitions@6.0.0:
mdast-util-definitions: private
mdast-util-find-and-replace@3.0.2:
mdast-util-find-and-replace: private
mdast-util-from-markdown@2.0.2:
mdast-util-from-markdown: private
mdast-util-gfm-autolink-literal@2.0.1:
mdast-util-gfm-autolink-literal: private
mdast-util-gfm-footnote@2.1.0:
mdast-util-gfm-footnote: private
mdast-util-gfm-strikethrough@2.0.0:
mdast-util-gfm-strikethrough: private
mdast-util-gfm-table@2.0.0:
mdast-util-gfm-table: private
mdast-util-gfm-task-list-item@2.0.0:
mdast-util-gfm-task-list-item: private
mdast-util-gfm@3.1.0:
mdast-util-gfm: private
mdast-util-phrasing@4.1.0:
mdast-util-phrasing: private
mdast-util-to-hast@13.2.0:
mdast-util-to-hast: private
mdast-util-to-markdown@2.1.2:
mdast-util-to-markdown: private
mdast-util-to-string@4.0.0:
mdast-util-to-string: private
mdn-data@2.12.2:
mdn-data: private
micromark-core-commonmark@2.0.3:
micromark-core-commonmark: private
micromark-extension-gfm-autolink-literal@2.1.0:
micromark-extension-gfm-autolink-literal: private
micromark-extension-gfm-footnote@2.1.0:
micromark-extension-gfm-footnote: private
micromark-extension-gfm-strikethrough@2.1.0:
micromark-extension-gfm-strikethrough: private
micromark-extension-gfm-table@2.1.1:
micromark-extension-gfm-table: private
micromark-extension-gfm-tagfilter@2.0.0:
micromark-extension-gfm-tagfilter: private
micromark-extension-gfm-task-list-item@2.1.0:
micromark-extension-gfm-task-list-item: private
micromark-extension-gfm@3.0.0:
micromark-extension-gfm: private
micromark-factory-destination@2.0.1:
micromark-factory-destination: private
micromark-factory-label@2.0.1:
micromark-factory-label: private
micromark-factory-space@2.0.1:
micromark-factory-space: private
micromark-factory-title@2.0.1:
micromark-factory-title: private
micromark-factory-whitespace@2.0.1:
micromark-factory-whitespace: private
micromark-util-character@2.1.1:
micromark-util-character: private
micromark-util-chunked@2.0.1:
micromark-util-chunked: private
micromark-util-classify-character@2.0.1:
micromark-util-classify-character: private
micromark-util-combine-extensions@2.0.1:
micromark-util-combine-extensions: private
micromark-util-decode-numeric-character-reference@2.0.2:
micromark-util-decode-numeric-character-reference: private
micromark-util-decode-string@2.0.1:
micromark-util-decode-string: private
micromark-util-encode@2.0.1:
micromark-util-encode: private
micromark-util-html-tag-name@2.0.1:
micromark-util-html-tag-name: private
micromark-util-normalize-identifier@2.0.1:
micromark-util-normalize-identifier: private
micromark-util-resolve-all@2.0.1:
micromark-util-resolve-all: private
micromark-util-sanitize-uri@2.0.1:
micromark-util-sanitize-uri: private
micromark-util-subtokenize@2.1.0:
micromark-util-subtokenize: private
micromark-util-symbol@2.0.1:
micromark-util-symbol: private
micromark-util-types@2.0.2:
micromark-util-types: private
micromark@4.0.2:
micromark: private
mrmime@2.0.1:
mrmime: private
ms@2.1.3:
ms: private
nanoid@3.3.11:
nanoid: private
neotraverse@0.6.18:
neotraverse: private
nlcst-to-string@4.0.0:
nlcst-to-string: private
node-fetch-native@1.6.6:
node-fetch-native: private
node-fetch@2.7.0:
node-fetch: private
node-mock-http@1.0.0:
node-mock-http: private
node-releases@2.0.19:
node-releases: private
normalize-path@3.0.0:
normalize-path: private
normalize-range@0.1.2:
normalize-range: private
ofetch@1.4.1:
ofetch: private
ohash@2.0.11:
ohash: private
oniguruma-parser@0.12.0:
oniguruma-parser: private
oniguruma-to-es@4.3.1:
oniguruma-to-es: private
p-limit@6.2.0:
p-limit: private
p-queue@8.1.0:
p-queue: private
p-timeout@6.1.4:
p-timeout: private
package-manager-detector@1.2.0:
package-manager-detector: private
pako@0.2.9:
pako: private
parse-latin@7.0.0:
parse-latin: private
parse5@7.3.0:
parse5: private
picocolors@1.1.1:
picocolors: private
picomatch@4.0.2:
picomatch: private
postcss-load-config@4.0.2(postcss@8.5.3):
postcss-load-config: private
postcss-selector-parser@6.0.10:
postcss-selector-parser: private
postcss-value-parser@4.2.0:
postcss-value-parser: private
postcss@8.5.3:
postcss: private
prismjs@1.30.0:
prismjs: private
prompts@2.4.2:
prompts: private
property-information@7.0.0:
property-information: private
radix3@1.1.2:
radix3: private
readdirp@4.1.2:
readdirp: private
regex-recursion@6.0.2:
regex-recursion: private
regex-utilities@2.3.0:
regex-utilities: private
regex@6.0.1:
regex: private
rehype-parse@9.0.1:
rehype-parse: private
rehype-raw@7.0.0:
rehype-raw: private
rehype-stringify@10.0.1:
rehype-stringify: private
rehype@13.0.2:
rehype: private
remark-gfm@4.0.1:
remark-gfm: private
remark-parse@11.0.0:
remark-parse: private
remark-rehype@11.1.2:
remark-rehype: private
remark-smartypants@3.0.2:
remark-smartypants: private
remark-stringify@11.0.0:
remark-stringify: private
restructure@3.0.2:
restructure: private
retext-latin@4.0.0:
retext-latin: private
retext-smartypants@6.2.0:
retext-smartypants: private
retext-stringify@4.0.0:
retext-stringify: private
retext@9.0.0:
retext: private
rollup@4.40.0:
rollup: private
semver@7.7.1:
semver: private
sharp@0.33.5:
sharp: private
shiki@3.3.0:
shiki: private
simple-swizzle@0.2.2:
simple-swizzle: private
sisteransi@1.0.5:
sisteransi: private
smol-toml@1.3.4:
smol-toml: private
source-map-js@1.2.1:
source-map-js: private
space-separated-tokens@2.0.2:
space-separated-tokens: private
string-width@7.2.0:
string-width: private
stringify-entities@4.0.4:
stringify-entities: private
strip-ansi@7.1.0:
strip-ansi: private
tapable@2.2.1:
tapable: private
tiny-inflate@1.0.3:
tiny-inflate: private
tinyexec@0.3.2:
tinyexec: private
tinyglobby@0.2.13:
tinyglobby: private
tr46@0.0.3:
tr46: private
trim-lines@3.0.1:
trim-lines: private
trough@2.2.0:
trough: private
tsconfck@3.1.5(typescript@5.8.3):
tsconfck: private
tslib@2.8.1:
tslib: private
type-fest@4.40.0:
type-fest: private
typescript@5.8.3:
typescript: private
ufo@1.6.1:
ufo: private
ultrahtml@1.6.0:
ultrahtml: private
uncrypto@0.1.3:
uncrypto: private
undici-types@6.21.0:
undici-types: private
unicode-properties@1.4.1:
unicode-properties: private
unicode-trie@2.0.0:
unicode-trie: private
unified@11.0.5:
unified: private
unifont@0.2.0:
unifont: private
unist-util-find-after@5.0.0:
unist-util-find-after: private
unist-util-is@6.0.0:
unist-util-is: private
unist-util-modify-children@4.0.0:
unist-util-modify-children: private
unist-util-position@5.0.0:
unist-util-position: private
unist-util-remove-position@5.0.0:
unist-util-remove-position: private
unist-util-stringify-position@4.0.0:
unist-util-stringify-position: private
unist-util-visit-children@3.0.0:
unist-util-visit-children: private
unist-util-visit-parents@6.0.1:
unist-util-visit-parents: private
unist-util-visit@5.0.0:
unist-util-visit: private
unstorage@1.15.0:
unstorage: private
update-browserslist-db@1.1.3(browserslist@4.24.4):
update-browserslist-db: private
util-deprecate@1.0.2:
util-deprecate: private
vfile-location@5.0.3:
vfile-location: private
vfile-message@4.0.2:
vfile-message: private
vfile@6.0.3:
vfile: private
vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.1):
vite: private
vitefu@1.0.6(vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.1)):
vitefu: private
web-namespaces@2.0.1:
web-namespaces: private
webidl-conversions@3.0.1:
webidl-conversions: private
whatwg-url@5.0.0:
whatwg-url: private
which-pm-runs@1.1.0:
which-pm-runs: private
widest-line@5.0.0:
widest-line: private
wrap-ansi@9.0.0:
wrap-ansi: private
xxhash-wasm@1.1.0:
xxhash-wasm: private
yaml@2.7.1:
yaml: private
yargs-parser@21.1.1:
yargs-parser: private
yocto-queue@1.2.1:
yocto-queue: private
yocto-spinner@0.2.2:
yocto-spinner: private
yoctocolors@2.1.1:
yoctocolors: private
zod-to-json-schema@3.24.5(zod@3.24.3):
zod-to-json-schema: private
zod-to-ts@1.2.0(typescript@5.8.3)(zod@3.24.3):
zod-to-ts: private
zod@3.24.3:
zod: private
zwitch@2.0.4:
zwitch: private
ignoredBuilds:
- esbuild
- sharp
included:
dependencies: true
devDependencies: true
optionalDependencies: true
injectedDeps: {}
layoutVersion: 5
nodeLinker: isolated
packageManager: pnpm@10.6.0
pendingBuilds: []
prunedAt: Sat, 26 Apr 2025 05:42:30 GMT
publicHoistPattern: []
registries:
default: https://registry.npmjs.org/
skipped:
- '@emnapi/runtime@1.4.3'
- '@esbuild/aix-ppc64@0.25.3'
- '@esbuild/android-arm64@0.25.3'
- '@esbuild/android-arm@0.25.3'
- '@esbuild/android-x64@0.25.3'
- '@esbuild/darwin-arm64@0.25.3'
- '@esbuild/darwin-x64@0.25.3'
- '@esbuild/freebsd-arm64@0.25.3'
- '@esbuild/freebsd-x64@0.25.3'
- '@esbuild/linux-arm64@0.25.3'
- '@esbuild/linux-arm@0.25.3'
- '@esbuild/linux-ia32@0.25.3'
- '@esbuild/linux-loong64@0.25.3'
- '@esbuild/linux-mips64el@0.25.3'
- '@esbuild/linux-ppc64@0.25.3'
- '@esbuild/linux-riscv64@0.25.3'
- '@esbuild/linux-s390x@0.25.3'
- '@esbuild/netbsd-arm64@0.25.3'
- '@esbuild/netbsd-x64@0.25.3'
- '@esbuild/openbsd-arm64@0.25.3'
- '@esbuild/openbsd-x64@0.25.3'
- '@esbuild/sunos-x64@0.25.3'
- '@esbuild/win32-arm64@0.25.3'
- '@esbuild/win32-ia32@0.25.3'
- '@esbuild/win32-x64@0.25.3'
- '@img/sharp-darwin-arm64@0.33.5'
- '@img/sharp-darwin-x64@0.33.5'
- '@img/sharp-libvips-darwin-arm64@1.0.4'
- '@img/sharp-libvips-darwin-x64@1.0.4'
- '@img/sharp-libvips-linux-arm64@1.0.4'
- '@img/sharp-libvips-linux-arm@1.0.5'
- '@img/sharp-libvips-linux-s390x@1.0.4'
- '@img/sharp-libvips-linuxmusl-arm64@1.0.4'
- '@img/sharp-linux-arm64@0.33.5'
- '@img/sharp-linux-arm@0.33.5'
- '@img/sharp-linux-s390x@0.33.5'
- '@img/sharp-linuxmusl-arm64@0.33.5'
- '@img/sharp-wasm32@0.33.5'
- '@img/sharp-win32-ia32@0.33.5'
- '@img/sharp-win32-x64@0.33.5'
- '@rollup/rollup-android-arm-eabi@4.40.0'
- '@rollup/rollup-android-arm64@4.40.0'
- '@rollup/rollup-darwin-arm64@4.40.0'
- '@rollup/rollup-darwin-x64@4.40.0'
- '@rollup/rollup-freebsd-arm64@4.40.0'
- '@rollup/rollup-freebsd-x64@4.40.0'
- '@rollup/rollup-linux-arm-gnueabihf@4.40.0'
- '@rollup/rollup-linux-arm-musleabihf@4.40.0'
- '@rollup/rollup-linux-arm64-gnu@4.40.0'
- '@rollup/rollup-linux-arm64-musl@4.40.0'
- '@rollup/rollup-linux-loongarch64-gnu@4.40.0'
- '@rollup/rollup-linux-powerpc64le-gnu@4.40.0'
- '@rollup/rollup-linux-riscv64-gnu@4.40.0'
- '@rollup/rollup-linux-riscv64-musl@4.40.0'
- '@rollup/rollup-linux-s390x-gnu@4.40.0'
- '@rollup/rollup-win32-arm64-msvc@4.40.0'
- '@rollup/rollup-win32-ia32-msvc@4.40.0'
- '@rollup/rollup-win32-x64-msvc@4.40.0'
- '@tailwindcss/oxide-android-arm64@4.1.4'
- '@tailwindcss/oxide-darwin-arm64@4.1.4'
- '@tailwindcss/oxide-darwin-x64@4.1.4'
- '@tailwindcss/oxide-freebsd-x64@4.1.4'
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.4'
- '@tailwindcss/oxide-linux-arm64-gnu@4.1.4'
- '@tailwindcss/oxide-linux-arm64-musl@4.1.4'
- '@tailwindcss/oxide-wasm32-wasi@4.1.4'
- '@tailwindcss/oxide-win32-arm64-msvc@4.1.4'
- '@tailwindcss/oxide-win32-x64-msvc@4.1.4'
- fsevents@2.3.3
- lightningcss-darwin-arm64@1.29.2
- lightningcss-darwin-x64@1.29.2
- lightningcss-freebsd-x64@1.29.2
- lightningcss-linux-arm-gnueabihf@1.29.2
- lightningcss-linux-arm64-gnu@1.29.2
- lightningcss-linux-arm64-musl@1.29.2
- lightningcss-win32-arm64-msvc@1.29.2
- lightningcss-win32-x64-msvc@1.29.2
storeDir: /home/justin/.local/share/pnpm/store/v10
virtualStoreDir: .pnpm
virtualStoreDirMaxLength: 120

25
node_modules/.pnpm-workspace-state.json generated vendored Normal file
View File

@ -0,0 +1,25 @@
{
"lastValidatedTimestamp": 1745646150252,
"projects": {},
"pnpmfileExists": false,
"settings": {
"autoInstallPeers": true,
"dedupeDirectDeps": false,
"dedupeInjectedDeps": true,
"dedupePeerDependents": true,
"dev": true,
"excludeLinksFromLockfile": false,
"hoistPattern": [
"*"
],
"hoistWorkspacePackages": true,
"injectWorkspacePackages": false,
"linkWorkspacePackages": false,
"nodeLinker": "isolated",
"optional": true,
"preferWorkspacePackages": false,
"production": true,
"publicHoistPattern": []
},
"filteredInstall": false
}

View File

@ -0,0 +1,53 @@
MIT License
Copyright (c) 2021 [Astro contributors](https://github.com/withastro/compiler/graphs/contributors)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
"""
This license applies to parts of the `internal/` subdirectory originating from
the https://cs.opensource.google/go/x/net/+/master:html/ repository:
Copyright (c) 2009 The Go Authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -0,0 +1,66 @@
# Astro Compiler
Astros [Go](https://golang.org/) + WASM compiler.
## Install
```
npm install @astrojs/compiler
```
## Usage
#### Transform `.astro` to valid TypeScript
The Astro compiler can convert `.astro` syntax to a TypeScript Module whose default export generates HTML.
**Some notes**...
- TypeScript is valid `.astro` syntax! The output code may need an additional post-processing step to generate valid JavaScript.
- `.astro` files rely on a server implementation exposed as `astro/runtime/server/index.js` in the Node ecosystem. Other runtimes currently need to bring their own rendering implementation and reference it via `internalURL`. This is a pain point we're looking into fixing.
```js
import { transform, type TransformResult } from "@astrojs/compiler";
const result = await transform(source, {
filename: "/Users/astro/Code/project/src/pages/index.astro",
sourcemap: "both",
internalURL: "astro/runtime/server/index.js",
});
```
#### Parse `.astro` and return an AST
The Astro compiler can emit an AST using the `parse` method.
**Some notes**...
- Position data is currently incomplete and in some cases incorrect. We're working on it!
- A `TextNode` can represent both HTML `text` and JavaScript/TypeScript source code.
- The `@astrojs/compiler/utils` entrypoint exposes a `walk` function that can be used to traverse the AST. It also exposes the `is` helper which can be used as guards to derive the proper types for each `node`.
```js
import { parse } from "@astrojs/compiler";
import { walk, is } from "@astrojs/compiler/utils";
const result = await parse(source, {
position: false, // defaults to `true`
});
walk(result.ast, (node) => {
// `tag` nodes are `element` | `custom-element` | `component`
if (is.tag(node)) {
console.log(node.name);
}
});
```
## Develop
### VSCode / CodeSpaces
A `devcontainer` configuration is available for use with VSCode's [Remote Development extension pack](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack) and GitHub CodeSpaces.
## Contributing
[CONTRIBUTING.md](/CONTRIBUTING.md)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,11 @@
import { transform as transform$1, parse as parse$1, convertToTSX as convertToTSX$1, teardown as teardown$1, initialize as initialize$1 } from '../shared/types.js';
import '../shared/ast.js';
import '../shared/diagnostics.js';
declare const transform: typeof transform$1;
declare const parse: typeof parse$1;
declare const convertToTSX: typeof convertToTSX$1;
declare const teardown: typeof teardown$1;
declare const initialize: typeof initialize$1;
export { convertToTSX, initialize, parse, teardown, transform };

View File

@ -0,0 +1 @@
import{a as f}from"../chunk-QR6QDSEV.js";var u=(t,e)=>p().transform(t,e),S=(t,e)=>p().parse(t,e),v=(t,e)=>p().convertToTSX(t,e),a,i,h=()=>{a=void 0,i=void 0,globalThis["@astrojs/compiler"]=void 0},T=async t=>{let e=t.wasmURL;if(!e)throw new Error('Must provide the "wasmURL" option');e+="",a||(a=m(e).catch(n=>{throw a=void 0,n})),i=i||await a},p=()=>{if(!a)throw new Error('You need to call "initialize" before calling this');if(!i)throw new Error('You need to wait for the promise returned from "initialize" to be resolved before calling this');return i},y=async(t,e)=>{let n;return WebAssembly.instantiateStreaming?n=await WebAssembly.instantiateStreaming(fetch(t),e):n=await(async()=>{let s=await fetch(t).then(o=>o.arrayBuffer());return WebAssembly.instantiate(s,e)})(),n},m=async t=>{let e=new f,n=await y(t,e.importObject);e.run(n.instance);let c=globalThis["@astrojs/compiler"];return{transform:(s,o)=>new Promise(r=>r(c.transform(s,o||{}))),convertToTSX:(s,o)=>new Promise(r=>r(c.convertToTSX(s,o||{}))).then(r=>({...r,map:JSON.parse(r.map)})),parse:(s,o)=>new Promise(r=>r(c.parse(s,o||{}))).then(r=>({...r,ast:JSON.parse(r.ast)}))}};export{v as convertToTSX,T as initialize,S as parse,h as teardown,u as transform};

View File

@ -0,0 +1,3 @@
"use strict";var l=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var u=(o,e)=>{for(var t in e)l(o,t,{get:e[t],enumerable:!0})},f=(o,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of p(e))!N.call(o,r)&&r!==t&&l(o,r,{get:()=>e[r],enumerable:!(a=d(e,r))||a.enumerable});return o};var h=o=>f(l({},"__esModule",{value:!0}),o);var v={};u(v,{is:()=>s,serialize:()=>g,walk:()=>y});module.exports=h(v);function n(o){return e=>e.type===o}var s={parent(o){return Array.isArray(o.children)},literal(o){return typeof o.value=="string"},tag(o){return o.type==="element"||o.type==="custom-element"||o.type==="component"||o.type==="fragment"},whitespace(o){return o.type==="text"&&o.value.trim().length===0},root:n("root"),element:n("element"),customElement:n("custom-element"),component:n("component"),fragment:n("fragment"),expression:n("expression"),text:n("text"),doctype:n("doctype"),comment:n("comment"),frontmatter:n("frontmatter")},m=class{constructor(e){this.callback=e}async visit(e,t,a){if(await this.callback(e,t,a),s.parent(e)){let r=[];for(let i=0;i<e.children.length;i++){let c=e.children[i];r.push(this.callback(c,e,i))}await Promise.all(r)}}};function y(o,e){new m(e).visit(o)}function x(o){let e="";for(let t of o.attributes)switch(e+=" ",t.kind){case"empty":{e+=`${t.name}`;break}case"expression":{e+=`${t.name}={${t.value}}`;break}case"quoted":{e+=`${t.name}=${t.raw}`;break}case"template-literal":{e+=`${t.name}=\`${t.value}\``;break}case"shorthand":{e+=`{${t.name}}`;break}case"spread":{e+=`{...${t.value}}`;break}}return e}function g(o,e={selfClose:!0}){let t="";function a(r){if(s.root(r))for(let i of r.children)a(i);else if(s.frontmatter(r))t+=`---${r.value}---
`;else if(s.comment(r))t+=`<!--${r.value}-->`;else if(s.expression(r)){t+="{";for(let i of r.children)a(i);t+="}"}else if(s.literal(r))t+=r.value;else if(s.tag(r))if(t+=`<${r.name}`,t+=x(r),r.children.length===0&&e.selfClose)t+=" />";else{t+=">";for(let i of r.children)a(i);t+=`</${r.name}>`}}return a(o),t}0&&(module.exports={is,serialize,walk});

View File

@ -0,0 +1,28 @@
import { Node, ParentNode, LiteralNode, TagLikeNode, TextNode, RootNode, ElementNode, CustomElementNode, ComponentNode, FragmentNode, ExpressionNode, DoctypeNode, CommentNode, FrontmatterNode } from '../shared/ast.js';
type Visitor = (node: Node, parent?: ParentNode, index?: number) => void | Promise<void>;
declare const is: {
parent(node: Node): node is ParentNode;
literal(node: Node): node is LiteralNode;
tag(node: Node): node is TagLikeNode;
whitespace(node: Node): node is TextNode;
root: (node: Node) => node is RootNode;
element: (node: Node) => node is ElementNode;
customElement: (node: Node) => node is CustomElementNode;
component: (node: Node) => node is ComponentNode;
fragment: (node: Node) => node is FragmentNode;
expression: (node: Node) => node is ExpressionNode;
text: (node: Node) => node is TextNode;
doctype: (node: Node) => node is DoctypeNode;
comment: (node: Node) => node is CommentNode;
frontmatter: (node: Node) => node is FrontmatterNode;
};
declare function walk(node: ParentNode, callback: Visitor): void;
interface SerializeOptions {
selfClose: boolean;
}
/** @deprecated Please use `SerializeOptions` */
type SerializeOtions = SerializeOptions;
declare function serialize(root: Node, opts?: SerializeOptions): string;
export { SerializeOptions, SerializeOtions, Visitor, is, serialize, walk };

View File

@ -0,0 +1,3 @@
function n(o){return t=>t.type===o}var a={parent(o){return Array.isArray(o.children)},literal(o){return typeof o.value=="string"},tag(o){return o.type==="element"||o.type==="custom-element"||o.type==="component"||o.type==="fragment"},whitespace(o){return o.type==="text"&&o.value.trim().length===0},root:n("root"),element:n("element"),customElement:n("custom-element"),component:n("component"),fragment:n("fragment"),expression:n("expression"),text:n("text"),doctype:n("doctype"),comment:n("comment"),frontmatter:n("frontmatter")},l=class{constructor(t){this.callback=t}async visit(t,e,s){if(await this.callback(t,e,s),a.parent(t)){let r=[];for(let i=0;i<t.children.length;i++){let m=t.children[i];r.push(this.callback(m,t,i))}await Promise.all(r)}}};function N(o,t){new l(t).visit(o)}function c(o){let t="";for(let e of o.attributes)switch(t+=" ",e.kind){case"empty":{t+=`${e.name}`;break}case"expression":{t+=`${e.name}={${e.value}}`;break}case"quoted":{t+=`${e.name}=${e.raw}`;break}case"template-literal":{t+=`${e.name}=\`${e.value}\``;break}case"shorthand":{t+=`{${e.name}}`;break}case"spread":{t+=`{...${e.value}}`;break}}return t}function u(o,t={selfClose:!0}){let e="";function s(r){if(a.root(r))for(let i of r.children)s(i);else if(a.frontmatter(r))e+=`---${r.value}---
`;else if(a.comment(r))e+=`<!--${r.value}-->`;else if(a.expression(r)){e+="{";for(let i of r.children)s(i);e+="}"}else if(a.literal(r))e+=r.value;else if(a.tag(r))if(e+=`<${r.name}`,e+=c(r),r.children.length===0&&t.selfClose)e+=" />";else{e+=">";for(let i of r.children)s(i);e+=`</${r.name}>`}}return s(o),e}export{a as is,u as serialize,N as walk};

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,37 @@
declare class Go {
importObject: {
gojs: {
'runtime.wasmExit': (sp: any) => void;
'runtime.wasmWrite': (sp: any) => void;
'runtime.resetMemoryDataView': (sp: any) => void;
'runtime.nanotime1': (sp: any) => void;
'runtime.walltime': (sp: any) => void;
'runtime.scheduleTimeoutEvent': (sp: any) => void;
'runtime.clearTimeoutEvent': (sp: any) => void;
'runtime.getRandomData': (sp: any) => void;
'syscall/js.finalizeRef': (sp: any) => void;
'syscall/js.stringVal': (sp: any) => void;
'syscall/js.valueGet': (sp: any) => void;
'syscall/js.valueSet': (sp: any) => void;
'syscall/js.valueDelete': (sp: any) => void;
'syscall/js.valueIndex': (sp: any) => void;
'syscall/js.valueSetIndex': (sp: any) => void;
'syscall/js.valueCall': (sp: any) => void;
'syscall/js.valueInvoke': (sp: any) => void;
'syscall/js.valueNew': (sp: any) => void;
'syscall/js.valueLength': (sp: any) => void;
'syscall/js.valuePrepareString': (sp: any) => void;
'syscall/js.valueLoadString': (sp: any) => void;
'syscall/js.valueInstanceOf': (sp: any) => void;
'syscall/js.copyBytesToGo': (sp: any) => void;
'syscall/js.copyBytesToJS': (sp: any) => void;
debug: (value: any) => void;
};
};
constructor();
run(instance: any): Promise<void>;
private _resume;
private _makeFuncWrapper;
}
export { Go as default };

View File

@ -0,0 +1 @@
import{a}from"../chunk-QR6QDSEV.js";export{a as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,12 @@
import { transform as transform$1, parse as parse$1, convertToTSX as convertToTSX$1, teardown as teardown$1 } from '../shared/types.js';
export { HoistedScript, ParseOptions, ParseResult, PreprocessorResult, TransformOptions, TransformResult } from '../shared/types.js';
import '../shared/ast.js';
import '../shared/diagnostics.js';
declare const transform: typeof transform$1;
declare const parse: typeof parse$1;
declare const convertToTSX: typeof convertToTSX$1;
declare const compile: (template: string) => Promise<string>;
declare const teardown: typeof teardown$1;
export { compile, convertToTSX, parse, teardown, transform };

View File

@ -0,0 +1 @@
import{a as c}from"../chunk-W5DTLHV4.js";import{promises as m}from"fs";import{fileURLToPath as f}from"url";var w=async(t,s)=>i().then(r=>r.transform(t,s)),l=async(t,s)=>i().then(r=>r.parse(t,s)),b=async(t,s)=>i().then(r=>r.convertToTSX(t,s)),P=async t=>{let{default:s}=await import(`data:text/javascript;charset=utf-8;base64,${Buffer.from(t).toString("base64")}`);return s},n,g=()=>{n=void 0,globalThis["@astrojs/compiler"]=void 0},i=()=>(n||(n=d().catch(t=>{throw n=void 0,t})),n),y=async(t,s)=>{let r;return r=await(async()=>{let o=await m.readFile(t).then(e=>e.buffer);return WebAssembly.instantiate(new Uint8Array(o),s)})(),r},d=async()=>{let t=new c,s=await y(f(new URL("../astro.wasm",import.meta.url)),t.importObject);t.run(s.instance);let r=globalThis["@astrojs/compiler"];return{transform:(a,o)=>new Promise(e=>{try{e(r.transform(a,o||{}))}catch(p){throw n=void 0,p}}),parse:(a,o)=>new Promise(e=>e(r.parse(a,o||{}))).catch(e=>{throw n=void 0,e}).then(e=>({...e,ast:JSON.parse(e.ast)})),convertToTSX:(a,o)=>new Promise(e=>e(r.convertToTSX(a,o||{}))).catch(e=>{throw n=void 0,e}).then(e=>({...e,map:JSON.parse(e.map)}))}};export{P as compile,b as convertToTSX,l as parse,g as teardown,w as transform};

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,16 @@
import { TransformOptions, TransformResult, ParseOptions, ParseResult, ConvertToTSXOptions, TSXResult, transform as transform$1, parse as parse$1, convertToTSX as convertToTSX$1 } from '../shared/types.js';
import '../shared/ast.js';
import '../shared/diagnostics.js';
type UnwrappedPromise<T> = T extends (...params: any) => Promise<infer Return> ? (...params: Parameters<T>) => Return : T;
interface Service {
transform: UnwrappedPromise<typeof transform$1>;
parse: UnwrappedPromise<typeof parse$1>;
convertToTSX: UnwrappedPromise<typeof convertToTSX$1>;
}
declare const transform: (input: string, options: TransformOptions | undefined) => TransformResult;
declare const parse: (input: string, options: ParseOptions | undefined) => ParseResult;
declare const convertToTSX: (input: string, options: ConvertToTSXOptions | undefined) => TSXResult;
declare function startRunningService(): Service;
export { convertToTSX, parse, startRunningService, transform };

View File

@ -0,0 +1 @@
import{a as c}from"../chunk-W5DTLHV4.js";import{readFileSync as p}from"fs";import{fileURLToPath as m}from"url";function i(){return s||(s=f()),s}var s,l=(e,t)=>i().transform(e,t),w=(e,t)=>i().parse(e,t),h=(e,t)=>i().convertToTSX(e,t);function f(){let e=new c,t=v(m(new URL("../astro.wasm",import.meta.url)),e.importObject);e.run(t);let o=globalThis["@astrojs/compiler"];return{transform:(n,a)=>{try{return o.transform(n,a||{})}catch(r){throw s=void 0,r}},parse:(n,a)=>{try{let r=o.parse(n,a||{});return{...r,ast:JSON.parse(r.ast)}}catch(r){throw s=void 0,r}},convertToTSX:(n,a)=>{try{let r=o.convertToTSX(n,a||{});return{...r,map:JSON.parse(r.map)}}catch(r){throw s=void 0,r}}}}function v(e,t){let o=p(e);return new WebAssembly.Instance(new WebAssembly.Module(o),t)}export{h as convertToTSX,w as parse,f as startRunningService,l as transform};

View File

@ -0,0 +1,3 @@
"use strict";var l=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var u=(o,e)=>{for(var t in e)l(o,t,{get:e[t],enumerable:!0})},f=(o,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of p(e))!N.call(o,r)&&r!==t&&l(o,r,{get:()=>e[r],enumerable:!(a=d(e,r))||a.enumerable});return o};var h=o=>f(l({},"__esModule",{value:!0}),o);var k={};u(k,{is:()=>s,serialize:()=>g,walk:()=>y});module.exports=h(k);function n(o){return e=>e.type===o}var s={parent(o){return Array.isArray(o.children)},literal(o){return typeof o.value=="string"},tag(o){return o.type==="element"||o.type==="custom-element"||o.type==="component"||o.type==="fragment"},whitespace(o){return o.type==="text"&&o.value.trim().length===0},root:n("root"),element:n("element"),customElement:n("custom-element"),component:n("component"),fragment:n("fragment"),expression:n("expression"),text:n("text"),doctype:n("doctype"),comment:n("comment"),frontmatter:n("frontmatter")},m=class{constructor(e){this.callback=e}async visit(e,t,a){if(await this.callback(e,t,a),s.parent(e)){let r=[];for(let i=0;i<e.children.length;i++){let c=e.children[i];r.push(this.callback(c,e,i))}await Promise.all(r)}}};function y(o,e){new m(e).visit(o)}function x(o){let e="";for(let t of o.attributes)switch(e+=" ",t.kind){case"empty":{e+=`${t.name}`;break}case"expression":{e+=`${t.name}={${t.value}}`;break}case"quoted":{e+=`${t.name}=${t.raw}`;break}case"template-literal":{e+=`${t.name}=\`${t.value}\``;break}case"shorthand":{e+=`{${t.name}}`;break}case"spread":{e+=`{...${t.name}}`;break}}return e}function g(o,e={selfClose:!0}){let t="";function a(r){if(s.root(r))for(let i of r.children)a(i);else if(s.frontmatter(r))t+=`---${r.value}---
`;else if(s.comment(r))t+=`<!--${r.value}-->`;else if(s.expression(r)){t+="{";for(let i of r.children)a(i);t+="}"}else if(s.literal(r))t+=r.value;else if(s.tag(r))if(t+=`<${r.name}`,t+=x(r),r.children.length===0&&e.selfClose)t+=" />";else{t+=">";for(let i of r.children)a(i);t+=`</${r.name}>`}}return a(o),t}0&&(module.exports={is,serialize,walk});

View File

@ -0,0 +1,28 @@
import { Node, ParentNode, LiteralNode, TagLikeNode, TextNode, RootNode, ElementNode, CustomElementNode, ComponentNode, FragmentNode, ExpressionNode, DoctypeNode, CommentNode, FrontmatterNode } from '../shared/ast.js';
type Visitor = (node: Node, parent?: ParentNode, index?: number) => void | Promise<void>;
declare const is: {
parent(node: Node): node is ParentNode;
literal(node: Node): node is LiteralNode;
tag(node: Node): node is TagLikeNode;
whitespace(node: Node): node is TextNode;
root: (node: Node) => node is RootNode;
element: (node: Node) => node is ElementNode;
customElement: (node: Node) => node is CustomElementNode;
component: (node: Node) => node is ComponentNode;
fragment: (node: Node) => node is FragmentNode;
expression: (node: Node) => node is ExpressionNode;
text: (node: Node) => node is TextNode;
doctype: (node: Node) => node is DoctypeNode;
comment: (node: Node) => node is CommentNode;
frontmatter: (node: Node) => node is FrontmatterNode;
};
declare function walk(node: ParentNode, callback: Visitor): void;
interface SerializeOptions {
selfClose: boolean;
}
/** @deprecated Please use `SerializeOptions` */
type SerializeOtions = SerializeOptions;
declare function serialize(root: Node, opts?: SerializeOptions): string;
export { SerializeOptions, SerializeOtions, Visitor, is, serialize, walk };

View File

@ -0,0 +1,3 @@
function n(o){return t=>t.type===o}var a={parent(o){return Array.isArray(o.children)},literal(o){return typeof o.value=="string"},tag(o){return o.type==="element"||o.type==="custom-element"||o.type==="component"||o.type==="fragment"},whitespace(o){return o.type==="text"&&o.value.trim().length===0},root:n("root"),element:n("element"),customElement:n("custom-element"),component:n("component"),fragment:n("fragment"),expression:n("expression"),text:n("text"),doctype:n("doctype"),comment:n("comment"),frontmatter:n("frontmatter")},l=class{constructor(t){this.callback=t}async visit(t,e,s){if(await this.callback(t,e,s),a.parent(t)){let r=[];for(let i=0;i<t.children.length;i++){let m=t.children[i];r.push(this.callback(m,t,i))}await Promise.all(r)}}};function N(o,t){new l(t).visit(o)}function c(o){let t="";for(let e of o.attributes)switch(t+=" ",e.kind){case"empty":{t+=`${e.name}`;break}case"expression":{t+=`${e.name}={${e.value}}`;break}case"quoted":{t+=`${e.name}=${e.raw}`;break}case"template-literal":{t+=`${e.name}=\`${e.value}\``;break}case"shorthand":{t+=`{${e.name}}`;break}case"spread":{t+=`{...${e.name}}`;break}}return t}function u(o,t={selfClose:!0}){let e="";function s(r){if(a.root(r))for(let i of r.children)s(i);else if(a.frontmatter(r))e+=`---${r.value}---
`;else if(a.comment(r))e+=`<!--${r.value}-->`;else if(a.expression(r)){e+="{";for(let i of r.children)s(i);e+="}"}else if(a.literal(r))e+=r.value;else if(a.tag(r))if(e+=`<${r.name}`,e+=c(r),r.children.length===0&&t.selfClose)e+=" />";else{e+=">";for(let i of r.children)s(i);e+=`</${r.name}>`}}return s(o),e}export{a as is,u as serialize,N as walk};

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,37 @@
declare class Go {
importObject: {
gojs: {
'runtime.wasmExit': (sp: any) => void;
'runtime.wasmWrite': (sp: any) => void;
'runtime.resetMemoryDataView': (sp: any) => void;
'runtime.nanotime1': (sp: any) => void;
'runtime.walltime': (sp: any) => void;
'runtime.scheduleTimeoutEvent': (sp: any) => void;
'runtime.clearTimeoutEvent': (sp: any) => void;
'runtime.getRandomData': (sp: any) => void;
'syscall/js.finalizeRef': (sp: any) => void;
'syscall/js.stringVal': (sp: any) => void;
'syscall/js.valueGet': (sp: any) => void;
'syscall/js.valueSet': (sp: any) => void;
'syscall/js.valueDelete': (sp: any) => void;
'syscall/js.valueIndex': (sp: any) => void;
'syscall/js.valueSetIndex': (sp: any) => void;
'syscall/js.valueCall': (sp: any) => void;
'syscall/js.valueInvoke': (sp: any) => void;
'syscall/js.valueNew': (sp: any) => void;
'syscall/js.valueLength': (sp: any) => void;
'syscall/js.valuePrepareString': (sp: any) => void;
'syscall/js.valueLoadString': (sp: any) => void;
'syscall/js.valueInstanceOf': (sp: any) => void;
'syscall/js.copyBytesToGo': (sp: any) => void;
'syscall/js.copyBytesToJS': (sp: any) => void;
debug: (value: any) => void;
};
};
constructor();
run(instance: any): Promise<void>;
private _resume;
private _makeFuncWrapper;
}
export { Go as default };

View File

@ -0,0 +1 @@
import{a}from"../chunk-W5DTLHV4.js";export{a as default};

View File

@ -0,0 +1 @@
"use strict";var r=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var p=(t,e,d,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of i(e))!N.call(t,o)&&o!==d&&r(t,o,{get:()=>e[o],enumerable:!(n=a(e,o))||n.enumerable});return t};var s=t=>p(r({},"__esModule",{value:!0}),t);var m={};module.exports=s(m);

View File

@ -0,0 +1,74 @@
type ParentNode = RootNode | ElementNode | ComponentNode | CustomElementNode | FragmentNode | ExpressionNode;
type LiteralNode = TextNode | DoctypeNode | CommentNode | FrontmatterNode;
type Node = RootNode | ElementNode | ComponentNode | CustomElementNode | FragmentNode | ExpressionNode | TextNode | FrontmatterNode | DoctypeNode | CommentNode;
interface Position {
start: Point;
end?: Point;
}
interface Point {
/** 1-based line number */
line: number;
/** 1-based column number, per-line */
column: number;
/** 0-based byte offset */
offset: number;
}
interface BaseNode {
type: string;
position?: Position;
}
interface ParentLikeNode extends BaseNode {
type: 'element' | 'component' | 'custom-element' | 'fragment' | 'expression' | 'root';
children: Node[];
}
interface ValueNode extends BaseNode {
value: string;
}
interface RootNode extends ParentLikeNode {
type: 'root';
}
interface AttributeNode extends BaseNode {
type: 'attribute';
kind: 'quoted' | 'empty' | 'expression' | 'spread' | 'shorthand' | 'template-literal';
name: string;
value: string;
raw?: string;
}
interface TextNode extends ValueNode {
type: 'text';
}
interface ElementNode extends ParentLikeNode {
type: 'element';
name: string;
attributes: AttributeNode[];
}
interface FragmentNode extends ParentLikeNode {
type: 'fragment';
name: string;
attributes: AttributeNode[];
}
interface ComponentNode extends ParentLikeNode {
type: 'component';
name: string;
attributes: AttributeNode[];
}
interface CustomElementNode extends ParentLikeNode {
type: 'custom-element';
name: string;
attributes: AttributeNode[];
}
type TagLikeNode = ElementNode | FragmentNode | ComponentNode | CustomElementNode;
interface DoctypeNode extends ValueNode {
type: 'doctype';
}
interface CommentNode extends ValueNode {
type: 'comment';
}
interface FrontmatterNode extends ValueNode {
type: 'frontmatter';
}
interface ExpressionNode extends ParentLikeNode {
type: 'expression';
}
export { AttributeNode, BaseNode, CommentNode, ComponentNode, CustomElementNode, DoctypeNode, ElementNode, ExpressionNode, FragmentNode, FrontmatterNode, LiteralNode, Node, ParentLikeNode, ParentNode, Point, Position, RootNode, TagLikeNode, TextNode, ValueNode };

View File

@ -0,0 +1 @@
"use strict";var I=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var U=(E,N)=>{for(var _ in N)I(E,_,{get:N[_],enumerable:!0})},H=(E,N,_,A)=>{if(N&&typeof N=="object"||typeof N=="function")for(let T of G(N))!S.call(E,T)&&T!==_&&I(E,T,{get:()=>N[T],enumerable:!(A=M(N,T))||A.enumerable});return E};var W=E=>H(I({},"__esModule",{value:!0}),E);var P={};U(P,{DiagnosticCode:()=>O});module.exports=W(P);var O=(R=>(R[R.ERROR=1e3]="ERROR",R[R.ERROR_UNTERMINATED_JS_COMMENT=1001]="ERROR_UNTERMINATED_JS_COMMENT",R[R.ERROR_FRAGMENT_SHORTHAND_ATTRS=1002]="ERROR_FRAGMENT_SHORTHAND_ATTRS",R[R.ERROR_UNMATCHED_IMPORT=1003]="ERROR_UNMATCHED_IMPORT",R[R.ERROR_UNSUPPORTED_SLOT_ATTRIBUTE=1004]="ERROR_UNSUPPORTED_SLOT_ATTRIBUTE",R[R.WARNING=2e3]="WARNING",R[R.WARNING_UNTERMINATED_HTML_COMMENT=2001]="WARNING_UNTERMINATED_HTML_COMMENT",R[R.WARNING_UNCLOSED_HTML_TAG=2002]="WARNING_UNCLOSED_HTML_TAG",R[R.WARNING_DEPRECATED_DIRECTIVE=2003]="WARNING_DEPRECATED_DIRECTIVE",R[R.WARNING_IGNORED_DIRECTIVE=2004]="WARNING_IGNORED_DIRECTIVE",R[R.WARNING_UNSUPPORTED_EXPRESSION=2005]="WARNING_UNSUPPORTED_EXPRESSION",R[R.WARNING_SET_WITH_CHILDREN=2006]="WARNING_SET_WITH_CHILDREN",R[R.INFO=3e3]="INFO",R[R.HINT=4e3]="HINT",R))(O||{});0&&(module.exports={DiagnosticCode});

View File

@ -0,0 +1,18 @@
declare enum DiagnosticCode {
ERROR = 1000,
ERROR_UNTERMINATED_JS_COMMENT = 1001,
ERROR_FRAGMENT_SHORTHAND_ATTRS = 1002,
ERROR_UNMATCHED_IMPORT = 1003,
ERROR_UNSUPPORTED_SLOT_ATTRIBUTE = 1004,
WARNING = 2000,
WARNING_UNTERMINATED_HTML_COMMENT = 2001,
WARNING_UNCLOSED_HTML_TAG = 2002,
WARNING_DEPRECATED_DIRECTIVE = 2003,
WARNING_IGNORED_DIRECTIVE = 2004,
WARNING_UNSUPPORTED_EXPRESSION = 2005,
WARNING_SET_WITH_CHILDREN = 2006,
INFO = 3000,
HINT = 4000
}
export { DiagnosticCode };

View File

@ -0,0 +1 @@
var N=(R=>(R[R.ERROR=1e3]="ERROR",R[R.ERROR_UNTERMINATED_JS_COMMENT=1001]="ERROR_UNTERMINATED_JS_COMMENT",R[R.ERROR_FRAGMENT_SHORTHAND_ATTRS=1002]="ERROR_FRAGMENT_SHORTHAND_ATTRS",R[R.ERROR_UNMATCHED_IMPORT=1003]="ERROR_UNMATCHED_IMPORT",R[R.ERROR_UNSUPPORTED_SLOT_ATTRIBUTE=1004]="ERROR_UNSUPPORTED_SLOT_ATTRIBUTE",R[R.WARNING=2e3]="WARNING",R[R.WARNING_UNTERMINATED_HTML_COMMENT=2001]="WARNING_UNTERMINATED_HTML_COMMENT",R[R.WARNING_UNCLOSED_HTML_TAG=2002]="WARNING_UNCLOSED_HTML_TAG",R[R.WARNING_DEPRECATED_DIRECTIVE=2003]="WARNING_DEPRECATED_DIRECTIVE",R[R.WARNING_IGNORED_DIRECTIVE=2004]="WARNING_IGNORED_DIRECTIVE",R[R.WARNING_UNSUPPORTED_EXPRESSION=2005]="WARNING_UNSUPPORTED_EXPRESSION",R[R.WARNING_SET_WITH_CHILDREN=2006]="WARNING_SET_WITH_CHILDREN",R[R.INFO=3e3]="INFO",R[R.HINT=4e3]="HINT",R))(N||{});export{N as DiagnosticCode};

View File

@ -0,0 +1 @@
"use strict";var o=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var l=(r,t)=>{for(var n in t)o(r,n,{get:t[n],enumerable:!0})},g=(r,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of p(t))!c.call(r,e)&&e!==n&&o(r,e,{get:()=>t[e],enumerable:!(s=a(t,e))||s.enumerable});return r};var d=r=>g(o({},"__esModule",{value:!0}),r);var m={};l(m,{DiagnosticSeverity:()=>i});module.exports=d(m);var i=(e=>(e[e.Error=1]="Error",e[e.Warning=2]="Warning",e[e.Information=3]="Information",e[e.Hint=4]="Hint",e))(i||{});0&&(module.exports={DiagnosticSeverity});

View File

@ -0,0 +1,160 @@
import { RootNode } from './ast.js';
export { AttributeNode, BaseNode, CommentNode, ComponentNode, CustomElementNode, DoctypeNode, ElementNode, ExpressionNode, FragmentNode, FrontmatterNode, LiteralNode, Node, ParentLikeNode, ParentNode, Point, Position, TagLikeNode, TextNode, ValueNode } from './ast.js';
import { DiagnosticCode } from './diagnostics.js';
interface PreprocessorResult {
code: string;
map?: string;
}
interface PreprocessorError {
error: string;
}
interface ParseOptions {
position?: boolean;
}
declare enum DiagnosticSeverity {
Error = 1,
Warning = 2,
Information = 3,
Hint = 4
}
interface DiagnosticMessage {
severity: DiagnosticSeverity;
code: DiagnosticCode;
location: DiagnosticLocation;
hint?: string;
text: string;
}
interface DiagnosticLocation {
file: string;
line: number;
column: number;
length: number;
}
interface TransformOptions {
internalURL?: string;
filename?: string;
normalizedFilename?: string;
sourcemap?: boolean | 'inline' | 'external' | 'both';
astroGlobalArgs?: string;
compact?: boolean;
resultScopedSlot?: boolean;
scopedStyleStrategy?: 'where' | 'class' | 'attribute';
/**
* @deprecated "as" has been removed and no longer has any effect!
*/
as?: 'document' | 'fragment';
transitionsAnimationURL?: string;
resolvePath?: (specifier: string) => Promise<string> | string;
preprocessStyle?: (content: string, attrs: Record<string, string>) => null | Promise<PreprocessorResult | PreprocessorError>;
annotateSourceFile?: boolean;
/**
* Render script tags to be processed (e.g. script tags that have no attributes or only a `src` attribute)
* using a `renderScript` function from `internalURL`, instead of stripping the script entirely.
* @experimental
*/
renderScript?: boolean;
experimentalScriptOrder?: boolean;
}
type ConvertToTSXOptions = Pick<TransformOptions, 'filename' | 'normalizedFilename' | 'sourcemap'> & {
/** If set to true, script tags content will be included in the generated TSX
* Scripts will be wrapped in an arrow function to be compatible with JSX's spec
*/
includeScripts?: boolean;
/** If set to true, style tags content will be included in the generated TSX
* Styles will be wrapped in a template literal to be compatible with JSX's spec
*/
includeStyles?: boolean;
};
type HoistedScript = {
type: string;
} & ({
type: 'external';
src: string;
} | {
type: 'inline';
code: string;
map: string;
});
interface HydratedComponent {
exportName: string;
localName: string;
specifier: string;
resolvedPath: string;
}
interface TransformResult {
code: string;
map: string;
scope: string;
styleError: string[];
diagnostics: DiagnosticMessage[];
css: string[];
scripts: HoistedScript[];
hydratedComponents: HydratedComponent[];
clientOnlyComponents: HydratedComponent[];
serverComponents: HydratedComponent[];
containsHead: boolean;
propagation: boolean;
}
interface SourceMap {
file: string;
mappings: string;
names: string[];
sources: string[];
sourcesContent: string[];
version: number;
}
/**
* Represents a location in a TSX file.
* Both the `start` and `end` properties are 0-based, and are based off utf-16 code units. (i.e. JavaScript's `String.prototype.length`)
*/
interface TSXLocation {
start: number;
end: number;
}
interface TSXExtractedTag {
position: TSXLocation;
content: string;
}
interface TSXExtractedScript extends TSXExtractedTag {
type: 'processed-module' | 'module' | 'inline' | 'event-attribute' | 'json' | 'raw' | 'unknown';
}
interface TSXExtractedStyle extends TSXExtractedTag {
type: 'tag' | 'style-attribute';
lang: 'css' | 'scss' | 'sass' | 'less' | 'stylus' | 'styl' | 'postcss' | 'pcss' | 'unknown' | (string & {});
}
interface TSXResult {
code: string;
map: SourceMap;
diagnostics: DiagnosticMessage[];
metaRanges: {
frontmatter: TSXLocation;
body: TSXLocation;
scripts?: TSXExtractedScript[];
styles?: TSXExtractedStyle[];
};
}
interface ParseResult {
ast: RootNode;
diagnostics: DiagnosticMessage[];
}
declare function transform(input: string, options?: TransformOptions): Promise<TransformResult>;
declare function parse(input: string, options?: ParseOptions): Promise<ParseResult>;
declare function convertToTSX(input: string, options?: ConvertToTSXOptions): Promise<TSXResult>;
declare function initialize(options: InitializeOptions): Promise<void>;
/**
* When calling the core compiler APIs, e.g. `transform`, `parse`, etc, they
* would automatically instantiate a WASM instance to process the input. When
* done, you can call this to manually teardown the WASM instance.
*
* If the APIs are called again, they will automatically instantiate a new WASM
* instance. In browsers, you have to call `initialize()` again before using the APIs.
*
* Note: Calling teardown is optional and exists mostly as an optimization only.
*/
declare function teardown(): void;
interface InitializeOptions {
wasmURL?: string;
}
export { ConvertToTSXOptions, DiagnosticLocation, DiagnosticMessage, DiagnosticSeverity, HoistedScript, HydratedComponent, InitializeOptions, ParseOptions, ParseResult, PreprocessorError, PreprocessorResult, RootNode, SourceMap, TSXExtractedScript, TSXExtractedStyle, TSXExtractedTag, TSXLocation, TSXResult, TransformOptions, TransformResult, convertToTSX, initialize, parse, teardown, transform };

View File

@ -0,0 +1 @@
var t=(e=>(e[e.Error=1]="Error",e[e.Warning=2]="Warning",e[e.Information=3]="Information",e[e.Hint=4]="Hint",e))(t||{});export{t as DiagnosticSeverity};

View File

@ -0,0 +1,58 @@
{
"name": "@astrojs/compiler",
"author": "withastro",
"license": "MIT",
"type": "module",
"bugs": "https://github.com/withastro/compiler/issues",
"homepage": "https://astro.build",
"version": "2.11.0",
"main": "./dist/node/index.js",
"types": "./dist/shared/types.d.ts",
"repository": {
"type": "git",
"url": "https://github.com/withastro/compiler.git"
},
"files": [
"dist",
"types.d.ts",
"utils.d.ts",
"sync.d.ts"
],
"exports": {
".": {
"types": "./dist/node/index.d.ts",
"browser": "./dist/browser/index.js",
"import": "./dist/node/index.js",
"require": "./dist/node/index.cjs",
"default": "./dist/browser/index.js"
},
"./sync": {
"types": "./dist/node/sync.d.ts",
"import": "./dist/node/sync.js",
"require": "./dist/node/sync.cjs",
"default": "./dist/node/sync.js"
},
"./utils": {
"types": "./dist/node/utils.d.ts",
"browser": "./dist/browser/utils.js",
"import": "./dist/node/utils.js",
"require": "./dist/node/utils.cjs",
"default": "./dist/browser/utils.js"
},
"./astro.wasm": "./dist/astro.wasm",
"./types": "./dist/shared/types.d.ts",
"./package.json": "./package.json"
},
"devDependencies": {
"@jridgewell/trace-mapping": "^0.3.16",
"@types/node": "^18.15.11",
"@types/sass": "^1.43.1",
"acorn": "^8.8.1",
"esbuild": "^0.17.17",
"tsup": "^6.7.0",
"typescript": "~5.0.2"
},
"scripts": {
"build": "tsup"
}
}

View File

@ -0,0 +1 @@
export * from './dist/node/sync.js';

View File

@ -0,0 +1 @@
export type * from './dist/shared/types.js';

View File

@ -0,0 +1 @@
export * from './dist/node/utils.js';

View File

@ -0,0 +1,59 @@
MIT License
Copyright (c) 2021 Fred K. Schott
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
"""
This license applies to parts of the `packages/create-astro` and `packages/astro` subdirectories originating from the https://github.com/sveltejs/kit repository:
Copyright (c) 2020 [these people](https://github.com/sveltejs/kit/graphs/contributors)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""
"""
This license applies to parts of the `packages/create-astro` and `packages/astro` subdirectories originating from the https://github.com/vitejs/vite repository:
MIT License
Copyright (c) 2019-present, Yuxi (Evan) You and Vite contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
"""

View File

@ -0,0 +1,15 @@
import type { PathLike } from 'node:fs';
export declare function writeJson<T>(path: PathLike, data: T): Promise<void>;
export declare function removeDir(dir: PathLike): Promise<void>;
export declare function emptyDir(dir: PathLike): Promise<void>;
export declare function getFilesFromFolder(dir: URL): Promise<URL[]>;
/**
* Copies files into a folder keeping the folder structure intact.
* The resulting file tree will start at the common ancestor.
*
* @param {URL[]} files A list of files to copy (absolute path).
* @param {URL} outDir Destination folder where to copy the files to (absolute path).
* @param {URL[]} [exclude] A list of files to exclude (absolute path).
* @returns {Promise<string>} The common ancestor of the copied files.
*/
export declare function copyFilesToFolder(files: URL[], outDir: URL, exclude?: URL[]): Promise<string>;

View File

@ -0,0 +1,66 @@
import { existsSync } from "node:fs";
import * as fs from "node:fs/promises";
import nodePath from "node:path";
import { fileURLToPath } from "node:url";
async function writeJson(path, data) {
await fs.writeFile(path, JSON.stringify(data, null, " "), { encoding: "utf-8" });
}
async function removeDir(dir) {
await fs.rm(dir, { recursive: true, force: true, maxRetries: 3 });
}
async function emptyDir(dir) {
await removeDir(dir);
await fs.mkdir(dir, { recursive: true });
}
async function getFilesFromFolder(dir) {
const data = await fs.readdir(dir, { withFileTypes: true });
let files = [];
for (const item of data) {
if (item.isDirectory()) {
const moreFiles = await getFilesFromFolder(new URL(`./${item.name}/`, dir));
files = files.concat(moreFiles);
} else {
files.push(new URL(`./${item.name}`, dir));
}
}
return files;
}
async function copyFilesToFolder(files, outDir, exclude = []) {
const excludeList = exclude.map((url) => fileURLToPath(url));
const fileList = files.map((url) => fileURLToPath(url)).filter((f) => !excludeList.includes(f));
if (files.length === 0) throw new Error("No files found to copy");
let commonAncestor = nodePath.dirname(fileList[0]);
for (const file of fileList.slice(1)) {
while (!file.startsWith(commonAncestor)) {
commonAncestor = nodePath.dirname(commonAncestor);
}
}
for (const origin of fileList) {
const dest = new URL(nodePath.relative(commonAncestor, origin), outDir);
const realpath = await fs.realpath(origin);
const isSymlink = realpath !== origin;
const isDir = (await fs.stat(origin)).isDirectory();
if (isDir && !isSymlink) {
await fs.mkdir(new URL("..", dest), { recursive: true });
} else {
await fs.mkdir(new URL(".", dest), { recursive: true });
}
if (isSymlink) {
const realdest = fileURLToPath(new URL(nodePath.relative(commonAncestor, realpath), outDir));
const target = nodePath.relative(fileURLToPath(new URL(".", dest)), realdest);
if (!existsSync(dest)) {
await fs.symlink(target, dest, isDir ? "dir" : "file");
}
} else if (!isDir) {
await fs.copyFile(origin, dest);
}
}
return commonAncestor;
}
export {
copyFilesToFolder,
emptyDir,
getFilesFromFolder,
removeDir,
writeJson
};

View File

@ -0,0 +1,26 @@
/**
* A set of common path utilities commonly used through the Astro core and integration
* projects. These do things like ensure a forward slash prepends paths.
*/
export declare function appendExtension(path: string, extension: string): string;
export declare function appendForwardSlash(path: string): string;
export declare function prependForwardSlash(path: string): string;
export declare function collapseDuplicateSlashes(path: string): string;
export declare const MANY_TRAILING_SLASHES: RegExp;
export declare function collapseDuplicateTrailingSlashes(path: string, trailingSlash: boolean): string;
export declare function removeTrailingForwardSlash(path: string): string;
export declare function removeLeadingForwardSlash(path: string): string;
export declare function removeLeadingForwardSlashWindows(path: string): string;
export declare function trimSlashes(path: string): string;
export declare function startsWithForwardSlash(path: string): boolean;
export declare function startsWithDotDotSlash(path: string): boolean;
export declare function startsWithDotSlash(path: string): boolean;
export declare function isRelativePath(path: string): boolean;
export declare function joinPaths(...paths: (string | undefined)[]): string;
export declare function removeFileExtension(path: string): string;
export declare function removeQueryString(path: string): string;
export declare function isRemotePath(src: string): boolean;
export declare function slash(path: string): string;
export declare function fileExtension(path: string): string;
export declare function removeBase(path: string, base: string): string;
export declare function hasFileExtension(path: string): boolean;

View File

@ -0,0 +1,114 @@
function appendExtension(path, extension) {
return path + "." + extension;
}
function appendForwardSlash(path) {
return path.endsWith("/") ? path : path + "/";
}
function prependForwardSlash(path) {
return path[0] === "/" ? path : "/" + path;
}
function collapseDuplicateSlashes(path) {
return path.replace(/(?<!:)\/{2,}/g, "/");
}
const MANY_TRAILING_SLASHES = /\/{2,}$/g;
function collapseDuplicateTrailingSlashes(path, trailingSlash) {
if (!path) {
return path;
}
return path.replace(MANY_TRAILING_SLASHES, trailingSlash ? "/" : "") || "/";
}
function removeTrailingForwardSlash(path) {
return path.endsWith("/") ? path.slice(0, path.length - 1) : path;
}
function removeLeadingForwardSlash(path) {
return path.startsWith("/") ? path.substring(1) : path;
}
function removeLeadingForwardSlashWindows(path) {
return path.startsWith("/") && path[2] === ":" ? path.substring(1) : path;
}
function trimSlashes(path) {
return path.replace(/^\/|\/$/g, "");
}
function startsWithForwardSlash(path) {
return path[0] === "/";
}
function startsWithDotDotSlash(path) {
const c1 = path[0];
const c2 = path[1];
const c3 = path[2];
return c1 === "." && c2 === "." && c3 === "/";
}
function startsWithDotSlash(path) {
const c1 = path[0];
const c2 = path[1];
return c1 === "." && c2 === "/";
}
function isRelativePath(path) {
return startsWithDotDotSlash(path) || startsWithDotSlash(path);
}
function isString(path) {
return typeof path === "string" || path instanceof String;
}
function joinPaths(...paths) {
return paths.filter(isString).map((path, i) => {
if (i === 0) {
return removeTrailingForwardSlash(path);
} else if (i === paths.length - 1) {
return removeLeadingForwardSlash(path);
} else {
return trimSlashes(path);
}
}).join("/");
}
function removeFileExtension(path) {
let idx = path.lastIndexOf(".");
return idx === -1 ? path : path.slice(0, idx);
}
function removeQueryString(path) {
const index = path.lastIndexOf("?");
return index > 0 ? path.substring(0, index) : path;
}
function isRemotePath(src) {
return /^(?:http|ftp|https|ws):?\/\//.test(src) || src.startsWith("data:");
}
function slash(path) {
return path.replace(/\\/g, "/");
}
function fileExtension(path) {
const ext = path.split(".").pop();
return ext !== path ? `.${ext}` : "";
}
function removeBase(path, base) {
if (path.startsWith(base)) {
return path.slice(removeTrailingForwardSlash(base).length);
}
return path;
}
const WITH_FILE_EXT = /\/[^/]+\.\w+$/;
function hasFileExtension(path) {
return WITH_FILE_EXT.test(path);
}
export {
MANY_TRAILING_SLASHES,
appendExtension,
appendForwardSlash,
collapseDuplicateSlashes,
collapseDuplicateTrailingSlashes,
fileExtension,
hasFileExtension,
isRelativePath,
isRemotePath,
joinPaths,
prependForwardSlash,
removeBase,
removeFileExtension,
removeLeadingForwardSlash,
removeLeadingForwardSlashWindows,
removeQueryString,
removeTrailingForwardSlash,
slash,
startsWithDotDotSlash,
startsWithDotSlash,
startsWithForwardSlash,
trimSlashes
};

View File

@ -0,0 +1,62 @@
export type RemotePattern = {
hostname?: string;
pathname?: string;
protocol?: string;
port?: string;
};
/**
* Evaluates whether a given URL matches the specified remote pattern based on protocol, hostname, port, and pathname.
*
* @param {URL} url - The URL object to be matched against the remote pattern.
* @param {RemotePattern} remotePattern - The remote pattern object containing the protocol, hostname, port, and pathname to match.
* @return {boolean} Returns `true` if the URL matches the given remote pattern; otherwise, `false`.
*/
export declare function matchPattern(url: URL, remotePattern: RemotePattern): boolean;
/**
* Checks if the given URL's port matches the specified port. If no port is provided, it returns `true`.
*
* @param {URL} url - The URL object whose port will be checked.
* @param {string} [port=] - The port to match against the URL's port. Optional.
* @return {boolean} Returns `true` if the URL's port matches the specified port or if no port is provided; otherwise, `false`.
*/
export declare function matchPort(url: URL, port?: string): boolean;
/**
* Compares the protocol of the provided URL with a specified protocol.
*
* @param {URL} url - The URL object whose protocol needs to be checked.
* @param {string} [protocol] - The protocol to compare against, without the trailing colon. If not provided, the method will always return `true`.
* @return {boolean} Returns `true` if the protocol matches or if no protocol is specified; otherwise, `false`.
*/
export declare function matchProtocol(url: URL, protocol?: string): boolean;
/**
* Matches a given URL's hostname against a specified hostname, with optional support for wildcard patterns.
*
* @param {URL} url - The URL object whose hostname is to be matched.
* @param {string} [hostname] - The hostname to match against. Supports wildcard patterns if `allowWildcard` is `true`.
* @param {boolean} [allowWildcard=false] - Indicates whether wildcard patterns in the `hostname` parameter are allowed.
* @return {boolean} - Returns `true` if the URL's hostname matches the given hostname criteria; otherwise, `false`.
*/
export declare function matchHostname(url: URL, hostname?: string, allowWildcard?: boolean): boolean;
/**
* Matches a given URL's pathname against a specified pattern, with optional support for wildcards.
*
* @param {URL} url - The URL object containing the pathname to be matched.
* @param {string} [pathname] - The pathname pattern to match the URL against.
* @param {boolean} [allowWildcard=false] - Determines whether wildcard matching is allowed.
* @return {boolean} - Returns `true` if the URL's pathname matches the specified pattern; otherwise, `false`.
*/
export declare function matchPathname(url: URL, pathname?: string, allowWildcard?: boolean): boolean;
/**
* Determines whether a given remote resource, identified by its source URL,
* is allowed based on specified domains and remote patterns.
*
* @param {string} src - The source URL of the remote resource to be validated.
* @param {Object} options - The configuration options for domain and pattern matching.
* @param {string[]} options.domains - A list of allowed domain names.
* @param {RemotePattern[]} options.remotePatterns - A list of allowed remote patterns for matching.
* @return {boolean} Returns `true` if the source URL matches any of the specified domains or remote patterns; otherwise, `false`.
*/
export declare function isRemoteAllowed(src: string, { domains, remotePatterns, }: {
domains: string[];
remotePatterns: RemotePattern[];
}): boolean;

View File

@ -0,0 +1,57 @@
function matchPattern(url, remotePattern) {
return matchProtocol(url, remotePattern.protocol) && matchHostname(url, remotePattern.hostname, true) && matchPort(url, remotePattern.port) && matchPathname(url, remotePattern.pathname, true);
}
function matchPort(url, port) {
return !port || port === url.port;
}
function matchProtocol(url, protocol) {
return !protocol || protocol === url.protocol.slice(0, -1);
}
function matchHostname(url, hostname, allowWildcard = false) {
if (!hostname) {
return true;
} else if (!allowWildcard || !hostname.startsWith("*")) {
return hostname === url.hostname;
} else if (hostname.startsWith("**.")) {
const slicedHostname = hostname.slice(2);
return slicedHostname !== url.hostname && url.hostname.endsWith(slicedHostname);
} else if (hostname.startsWith("*.")) {
const slicedHostname = hostname.slice(1);
const additionalSubdomains = url.hostname.replace(slicedHostname, "").split(".").filter(Boolean);
return additionalSubdomains.length === 1;
}
return false;
}
function matchPathname(url, pathname, allowWildcard = false) {
if (!pathname) {
return true;
} else if (!allowWildcard || !pathname.endsWith("*")) {
return pathname === url.pathname;
} else if (pathname.endsWith("/**")) {
const slicedPathname = pathname.slice(0, -2);
return slicedPathname !== url.pathname && url.pathname.startsWith(slicedPathname);
} else if (pathname.endsWith("/*")) {
const slicedPathname = pathname.slice(0, -1);
const additionalPathChunks = url.pathname.replace(slicedPathname, "").split("/").filter(Boolean);
return additionalPathChunks.length === 1;
}
return false;
}
function isRemoteAllowed(src, {
domains,
remotePatterns
}) {
if (!URL.canParse(src)) {
return false;
}
const url = new URL(src);
return domains.some((domain) => matchHostname(url, domain)) || remotePatterns.some((remotePattern) => matchPattern(url, remotePattern));
}
export {
isRemoteAllowed,
matchHostname,
matchPathname,
matchPattern,
matchPort,
matchProtocol
};

View File

@ -0,0 +1,51 @@
{
"name": "@astrojs/internal-helpers",
"description": "Internal helpers used by core Astro packages.",
"version": "0.6.1",
"type": "module",
"author": "withastro",
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/withastro/astro.git",
"directory": "packages/internal-helpers"
},
"bugs": "https://github.com/withastro/astro/issues",
"exports": {
"./path": "./dist/path.js",
"./remote": "./dist/remote.js",
"./fs": "./dist/fs.js"
},
"typesVersions": {
"*": {
"path": [
"./dist/path.d.ts"
],
"remote": [
"./dist/remote.d.ts"
],
"fs": [
"./dist/fs.d.ts"
]
}
},
"files": [
"dist"
],
"devDependencies": {
"astro-scripts": "0.0.14"
},
"keywords": [
"astro",
"astro-component"
],
"publishConfig": {
"provenance": true
},
"scripts": {
"prepublish": "pnpm build",
"build": "astro-scripts build \"src/**/*.ts\" && tsc -p tsconfig.json",
"build:ci": "astro-scripts build \"src/**/*.ts\"",
"dev": "astro-scripts dev \"src/**/*.ts\""
}
}

View File

@ -0,0 +1,3 @@
# @astrojs/internal-helpers
These are internal helpers used by core Astro packages. This package does not follow semver and should not be used externally.

View File

@ -0,0 +1 @@
../../../@astrojs+internal-helpers@0.6.1/node_modules/@astrojs/internal-helpers

View File

@ -0,0 +1,59 @@
MIT License
Copyright (c) 2021 Fred K. Schott
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
"""
This license applies to parts of the `packages/create-astro` and `packages/astro` subdirectories originating from the https://github.com/sveltejs/kit repository:
Copyright (c) 2020 [these people](https://github.com/sveltejs/kit/graphs/contributors)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""
"""
This license applies to parts of the `packages/create-astro` and `packages/astro` subdirectories originating from the https://github.com/vitejs/vite repository:
MIT License
Copyright (c) 2019-present, Yuxi (Evan) You and Vite contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
"""

View File

@ -0,0 +1,20 @@
export declare function isFrontmatterValid(frontmatter: Record<string, any>): boolean;
export declare function extractFrontmatter(code: string): string | undefined;
export interface ParseFrontmatterOptions {
/**
* How the frontmatter should be handled in the returned `content` string.
* - `preserve`: Keep the frontmatter.
* - `remove`: Remove the frontmatter.
* - `empty-with-spaces`: Replace the frontmatter with empty spaces. (preserves sourcemap line/col/offset)
* - `empty-with-lines`: Replace the frontmatter with empty line breaks. (preserves sourcemap line/col)
*
* @default 'remove'
*/
frontmatter: 'preserve' | 'remove' | 'empty-with-spaces' | 'empty-with-lines';
}
export interface ParseFrontmatterResult {
frontmatter: Record<string, any>;
rawFrontmatter: string;
content: string;
}
export declare function parseFrontmatter(code: string, options?: ParseFrontmatterOptions): ParseFrontmatterResult;

View File

@ -0,0 +1,58 @@
import yaml from "js-yaml";
import * as toml from "smol-toml";
function isFrontmatterValid(frontmatter) {
try {
JSON.stringify(frontmatter);
} catch {
return false;
}
return typeof frontmatter === "object" && frontmatter !== null;
}
const frontmatterRE = /(?:^\uFEFF?|^\s*\n)(?:---|\+\+\+)([\s\S]*?\n)(?:---|\+\+\+)/;
const frontmatterTypeRE = /(?:^\uFEFF?|^\s*\n)(---|\+\+\+)/;
function extractFrontmatter(code) {
return frontmatterRE.exec(code)?.[1];
}
function getFrontmatterParser(code) {
return frontmatterTypeRE.exec(code)?.[1] === "+++" ? ["+++", toml.parse] : ["---", yaml.load];
}
function parseFrontmatter(code, options) {
const rawFrontmatter = extractFrontmatter(code);
if (rawFrontmatter == null) {
return { frontmatter: {}, rawFrontmatter: "", content: code };
}
const [delims, parser] = getFrontmatterParser(code);
const parsed = parser(rawFrontmatter);
const frontmatter = parsed && typeof parsed === "object" ? parsed : {};
let content;
switch (options?.frontmatter ?? "remove") {
case "preserve":
content = code;
break;
case "remove":
content = code.replace(`${delims}${rawFrontmatter}${delims}`, "");
break;
case "empty-with-spaces":
content = code.replace(
`${delims}${rawFrontmatter}${delims}`,
` ${rawFrontmatter.replace(/[^\r\n]/g, " ")} `
);
break;
case "empty-with-lines":
content = code.replace(
`${delims}${rawFrontmatter}${delims}`,
rawFrontmatter.replace(/[^\r\n]/g, "")
);
break;
}
return {
frontmatter,
rawFrontmatter,
content
};
}
export {
extractFrontmatter,
isFrontmatterValid,
parseFrontmatter
};

View File

@ -0,0 +1,16 @@
import type { Root } from 'hast';
type Highlighter = (code: string, language: string, options?: {
meta?: string;
}) => Promise<Root | string>;
export declare const defaultExcludeLanguages: string[];
/**
* A hast utility to syntax highlight code blocks with a given syntax highlighter.
*
* @param tree
* The hast tree in which to syntax highlight code blocks.
* @param highlighter
* A function which receives the code and language, and returns the HTML of a syntax
* highlighted `<pre>` element.
*/
export declare function highlightCodeBlocks(tree: Root, highlighter: Highlighter, excludeLanguages?: string[]): Promise<void>;
export {};

View File

@ -0,0 +1,61 @@
import { fromHtml } from "hast-util-from-html";
import { toText } from "hast-util-to-text";
import { removePosition } from "unist-util-remove-position";
import { visitParents } from "unist-util-visit-parents";
const languagePattern = /\blanguage-(\S+)\b/;
const defaultExcludeLanguages = ["math"];
async function highlightCodeBlocks(tree, highlighter, excludeLanguages = []) {
const nodes = [];
visitParents(tree, { type: "element", tagName: "code" }, (node, ancestors) => {
const parent = ancestors.at(-1);
if (parent?.type !== "element" || parent.tagName !== "pre") {
return;
}
if (parent.children.length !== 1) {
return;
}
let languageMatch;
let { className } = node.properties;
if (typeof className === "string") {
languageMatch = languagePattern.exec(className);
} else if (Array.isArray(className)) {
for (const cls of className) {
if (typeof cls !== "string") {
continue;
}
languageMatch = languagePattern.exec(cls);
if (languageMatch) {
break;
}
}
}
const language = languageMatch?.[1] || "plaintext";
if (excludeLanguages.includes(language) || defaultExcludeLanguages.includes(language)) {
return;
}
nodes.push({
node,
language,
parent,
grandParent: ancestors.at(-2)
});
});
for (const { node, language, grandParent, parent } of nodes) {
const meta = node.data?.meta ?? node.properties.metastring ?? void 0;
const code = toText(node, { whitespace: "pre" });
const result = await highlighter(code, language, { meta });
let replacement;
if (typeof result === "string") {
replacement = fromHtml(result, { fragment: true }).children[0];
removePosition(replacement);
} else {
replacement = result.children[0];
}
const index = grandParent.children.indexOf(parent);
grandParent.children[index] = replacement;
}
}
export {
defaultExcludeLanguages,
highlightCodeBlocks
};

View File

@ -0,0 +1,2 @@
import type * as unified from 'unified';
export declare function importPlugin(p: string): Promise<unified.Plugin>;

View File

@ -0,0 +1,7 @@
async function importPlugin(p) {
const importResult = await import(p);
return importResult.default;
}
export {
importPlugin
};

View File

@ -0,0 +1,2 @@
import type * as unified from 'unified';
export declare function importPlugin(p: string): Promise<unified.Plugin>;

View File

@ -0,0 +1,24 @@
import path from "node:path";
import { pathToFileURL } from "node:url";
import { resolve as importMetaResolve } from "import-meta-resolve";
let cwdUrlStr;
async function importPlugin(p) {
try {
const importResult2 = await import(
/* @vite-ignore */
p
);
return importResult2.default;
} catch {
}
cwdUrlStr ??= pathToFileURL(path.join(process.cwd(), "package.json")).toString();
const resolved = importMetaResolve(p, cwdUrlStr);
const importResult = await import(
/* @vite-ignore */
resolved
);
return importResult.default;
}
export {
importPlugin
};

View File

@ -0,0 +1,14 @@
import type { AstroMarkdownOptions, AstroMarkdownProcessorOptions, MarkdownProcessor, SyntaxHighlightConfig } from './types.js';
export { rehypeHeadingIds } from './rehype-collect-headings.js';
export { remarkCollectImages } from './remark-collect-images.js';
export { rehypePrism } from './rehype-prism.js';
export { rehypeShiki } from './rehype-shiki.js';
export { isFrontmatterValid, extractFrontmatter, parseFrontmatter, type ParseFrontmatterOptions, type ParseFrontmatterResult, } from './frontmatter.js';
export { createShikiHighlighter, type ShikiHighlighter, type CreateShikiHighlighterOptions, type ShikiHighlighterHighlightOptions, } from './shiki.js';
export * from './types.js';
export declare const syntaxHighlightDefaults: Required<SyntaxHighlightConfig>;
export declare const markdownConfigDefaults: Required<AstroMarkdownOptions>;
/**
* Create a markdown preprocessor to render multiple markdown files
*/
export declare function createMarkdownProcessor(opts?: AstroMarkdownProcessorOptions): Promise<MarkdownProcessor>;

View File

@ -0,0 +1,157 @@
import { loadPlugins } from "./load-plugins.js";
import { rehypeHeadingIds } from "./rehype-collect-headings.js";
import { rehypePrism } from "./rehype-prism.js";
import { rehypeShiki } from "./rehype-shiki.js";
import { remarkCollectImages } from "./remark-collect-images.js";
import rehypeRaw from "rehype-raw";
import rehypeStringify from "rehype-stringify";
import remarkGfm from "remark-gfm";
import remarkParse from "remark-parse";
import remarkRehype from "remark-rehype";
import remarkSmartypants from "remark-smartypants";
import { unified } from "unified";
import { VFile } from "vfile";
import { defaultExcludeLanguages } from "./highlight.js";
import { rehypeImages } from "./rehype-images.js";
import { rehypeHeadingIds as rehypeHeadingIds2 } from "./rehype-collect-headings.js";
import { remarkCollectImages as remarkCollectImages2 } from "./remark-collect-images.js";
import { rehypePrism as rehypePrism2 } from "./rehype-prism.js";
import { rehypeShiki as rehypeShiki2 } from "./rehype-shiki.js";
import {
isFrontmatterValid,
extractFrontmatter,
parseFrontmatter
} from "./frontmatter.js";
import {
createShikiHighlighter
} from "./shiki.js";
export * from "./types.js";
const syntaxHighlightDefaults = {
type: "shiki",
excludeLangs: defaultExcludeLanguages
};
const markdownConfigDefaults = {
syntaxHighlight: syntaxHighlightDefaults,
shikiConfig: {
langs: [],
theme: "github-dark",
themes: {},
wrap: false,
transformers: [],
langAlias: {}
},
remarkPlugins: [],
rehypePlugins: [],
remarkRehype: {},
gfm: true,
smartypants: true
};
const isPerformanceBenchmark = Boolean(process.env.ASTRO_PERFORMANCE_BENCHMARK);
async function createMarkdownProcessor(opts) {
const {
syntaxHighlight = markdownConfigDefaults.syntaxHighlight,
shikiConfig = markdownConfigDefaults.shikiConfig,
remarkPlugins = markdownConfigDefaults.remarkPlugins,
rehypePlugins = markdownConfigDefaults.rehypePlugins,
remarkRehype: remarkRehypeOptions = markdownConfigDefaults.remarkRehype,
gfm = markdownConfigDefaults.gfm,
smartypants = markdownConfigDefaults.smartypants,
experimentalHeadingIdCompat = false
} = opts ?? {};
const loadedRemarkPlugins = await Promise.all(loadPlugins(remarkPlugins));
const loadedRehypePlugins = await Promise.all(loadPlugins(rehypePlugins));
const parser = unified().use(remarkParse);
if (!isPerformanceBenchmark) {
if (gfm) {
parser.use(remarkGfm);
}
if (smartypants) {
parser.use(remarkSmartypants);
}
}
for (const [plugin, pluginOpts] of loadedRemarkPlugins) {
parser.use(plugin, pluginOpts);
}
if (!isPerformanceBenchmark) {
parser.use(remarkCollectImages, opts?.image);
}
parser.use(remarkRehype, {
allowDangerousHtml: true,
passThrough: [],
...remarkRehypeOptions
});
if (syntaxHighlight && !isPerformanceBenchmark) {
const syntaxHighlightType = typeof syntaxHighlight === "string" ? syntaxHighlight : syntaxHighlight?.type;
const excludeLangs = typeof syntaxHighlight === "object" ? syntaxHighlight?.excludeLangs : void 0;
if (syntaxHighlightType === "shiki") {
parser.use(rehypeShiki, shikiConfig, excludeLangs);
} else if (syntaxHighlightType === "prism") {
parser.use(rehypePrism, excludeLangs);
}
}
for (const [plugin, pluginOpts] of loadedRehypePlugins) {
parser.use(plugin, pluginOpts);
}
parser.use(rehypeImages);
if (!isPerformanceBenchmark) {
parser.use(rehypeHeadingIds, { experimentalHeadingIdCompat });
}
parser.use(rehypeRaw).use(rehypeStringify, { allowDangerousHtml: true });
return {
async render(content, renderOpts) {
const vfile = new VFile({
value: content,
path: renderOpts?.fileURL,
data: {
astro: {
frontmatter: renderOpts?.frontmatter ?? {}
}
}
});
const result = await parser.process(vfile).catch((err) => {
err = prefixError(err, `Failed to parse Markdown file "${vfile.path}"`);
console.error(err);
throw err;
});
return {
code: String(result.value),
metadata: {
headings: result.data.astro?.headings ?? [],
localImagePaths: result.data.astro?.localImagePaths ?? [],
remoteImagePaths: result.data.astro?.remoteImagePaths ?? [],
frontmatter: result.data.astro?.frontmatter ?? {}
}
};
}
};
}
function prefixError(err, prefix) {
if (err?.message) {
try {
err.message = `${prefix}:
${err.message}`;
return err;
} catch {
}
}
const wrappedError = new Error(`${prefix}${err ? `: ${err}` : ""}`);
try {
wrappedError.stack = err.stack;
wrappedError.cause = err;
} catch {
}
return wrappedError;
}
export {
createMarkdownProcessor,
createShikiHighlighter,
extractFrontmatter,
isFrontmatterValid,
markdownConfigDefaults,
parseFrontmatter,
rehypeHeadingIds2 as rehypeHeadingIds,
rehypePrism2 as rehypePrism,
rehypeShiki2 as rehypeShiki,
remarkCollectImages2 as remarkCollectImages,
syntaxHighlightDefaults
};

View File

@ -0,0 +1,2 @@
import type * as unified from 'unified';
export declare function loadPlugins(items: (string | [string, any] | unified.Plugin<any[], any> | [unified.Plugin<any[], any>, any])[]): Promise<[unified.Plugin, any?]>[];

View File

@ -0,0 +1,22 @@
import { importPlugin as _importPlugin } from "#import-plugin";
async function importPlugin(p) {
if (typeof p === "string") {
return await _importPlugin(p);
} else {
return p;
}
}
function loadPlugins(items) {
return items.map((p) => {
return new Promise((resolve, reject) => {
if (Array.isArray(p)) {
const [plugin, opts] = p;
return importPlugin(plugin).then((m) => resolve([m, opts])).catch((e) => reject(e));
}
return importPlugin(p).then((m) => resolve([m])).catch((e) => reject(e));
});
});
}
export {
loadPlugins
};

View File

@ -0,0 +1,11 @@
import type { RehypePlugin } from './types.js';
/**
* Rehype plugin that adds `id` attributes to headings based on their text content.
*
* @param options Optional configuration object for the plugin.
*
* @see https://docs.astro.build/en/guides/markdown-content/#heading-ids-and-plugins
*/
export declare function rehypeHeadingIds({ experimentalHeadingIdCompat, }?: {
experimentalHeadingIdCompat?: boolean;
}): ReturnType<RehypePlugin>;

View File

@ -0,0 +1,97 @@
import Slugger from "github-slugger";
import { visit } from "unist-util-visit";
const rawNodeTypes = /* @__PURE__ */ new Set(["text", "raw", "mdxTextExpression"]);
const codeTagNames = /* @__PURE__ */ new Set(["code", "pre"]);
function rehypeHeadingIds({
experimentalHeadingIdCompat
} = {}) {
return function(tree, file) {
const headings = [];
const frontmatter = file.data.astro?.frontmatter;
const slugger = new Slugger();
const isMDX = isMDXFile(file);
visit(tree, (node) => {
if (node.type !== "element") return;
const { tagName } = node;
if (tagName[0] !== "h") return;
const [, level] = /h([0-6])/.exec(tagName) ?? [];
if (!level) return;
const depth = Number.parseInt(level);
let text = "";
visit(node, (child, __, parent) => {
if (child.type === "element" || parent == null) {
return;
}
if (child.type === "raw") {
if (/^\n?<.*>\n?$/.test(child.value)) {
return;
}
}
if (rawNodeTypes.has(child.type)) {
if (isMDX || codeTagNames.has(parent.tagName)) {
let value = child.value;
if (isMdxTextExpression(child) && frontmatter) {
const frontmatterPath = getMdxFrontmatterVariablePath(child);
if (Array.isArray(frontmatterPath) && frontmatterPath.length > 0) {
const frontmatterValue = getMdxFrontmatterVariableValue(
frontmatter,
frontmatterPath
);
if (typeof frontmatterValue === "string") {
value = frontmatterValue;
}
}
}
text += value;
} else {
text += child.value.replace(/\{/g, "${");
}
}
});
node.properties = node.properties || {};
if (typeof node.properties.id !== "string") {
let slug = slugger.slug(text);
if (!experimentalHeadingIdCompat) {
if (slug.endsWith("-")) slug = slug.slice(0, -1);
}
node.properties.id = slug;
}
headings.push({ depth, slug: node.properties.id, text });
});
file.data.astro ??= {};
file.data.astro.headings = headings;
};
}
function isMDXFile(file) {
return Boolean(file.history[0]?.endsWith(".mdx"));
}
function getMdxFrontmatterVariablePath(node) {
if (!node.data?.estree || node.data.estree.body.length !== 1) return new Error();
const statement = node.data.estree.body[0];
if (statement?.type !== "ExpressionStatement" || statement.expression.type !== "MemberExpression")
return new Error();
let expression = statement.expression;
const expressionPath = [];
while (expression.type === "MemberExpression" && expression.property.type === (expression.computed ? "Literal" : "Identifier")) {
expressionPath.push(
expression.property.type === "Literal" ? String(expression.property.value) : expression.property.name
);
expression = expression.object;
}
if (expression.type !== "Identifier" || expression.name !== "frontmatter") return new Error();
return expressionPath.reverse();
}
function getMdxFrontmatterVariableValue(frontmatter, path) {
let value = frontmatter;
for (const key of path) {
if (!value[key]) return void 0;
value = value[key];
}
return value;
}
function isMdxTextExpression(node) {
return node.type === "mdxTextExpression";
}
export {
rehypeHeadingIds
};

View File

@ -0,0 +1,3 @@
import type { Root } from 'hast';
import type { VFile } from 'vfile';
export declare function rehypeImages(): (tree: Root, file: VFile) => void;

View File

@ -0,0 +1,33 @@
import { visit } from "unist-util-visit";
function rehypeImages() {
return function(tree, file) {
if (!file.data.astro?.localImagePaths?.length && !file.data.astro?.remoteImagePaths?.length) {
return;
}
const imageOccurrenceMap = /* @__PURE__ */ new Map();
visit(tree, "element", (node) => {
if (node.tagName !== "img") return;
if (typeof node.properties?.src !== "string") return;
const src = decodeURI(node.properties.src);
let newProperties;
if (file.data.astro?.localImagePaths?.includes(src)) {
newProperties = { ...node.properties, src };
} else if (file.data.astro?.remoteImagePaths?.includes(src)) {
newProperties = {
// By default, markdown images won't have width and height set. However, just in case another user plugin does set these, we should respect them.
inferSize: "width" in node.properties && "height" in node.properties ? void 0 : true,
...node.properties,
src
};
} else {
return;
}
const index = imageOccurrenceMap.get(node.properties.src) || 0;
imageOccurrenceMap.set(node.properties.src, index + 1);
node.properties = { __ASTRO_IMAGE_: JSON.stringify({ ...newProperties, index }) };
});
};
}
export {
rehypeImages
};

View File

@ -0,0 +1,3 @@
import type { Root } from 'hast';
import type { Plugin } from 'unified';
export declare const rehypePrism: Plugin<[string[]?], Root>;

View File

@ -0,0 +1,19 @@
import { runHighlighterWithAstro } from "@astrojs/prism/dist/highlighter";
import { highlightCodeBlocks } from "./highlight.js";
const rehypePrism = (excludeLangs) => {
return async (tree) => {
await highlightCodeBlocks(
tree,
(code, language) => {
let { html, classLanguage } = runHighlighterWithAstro(language, code);
return Promise.resolve(
`<pre class="${classLanguage}" data-language="${language}"><code is:raw class="${classLanguage}">${html}</code></pre>`
);
},
excludeLangs
);
};
};
export {
rehypePrism
};

View File

@ -0,0 +1,4 @@
import type { Root } from 'hast';
import type { Plugin } from 'unified';
import type { ShikiConfig } from './types.js';
export declare const rehypeShiki: Plugin<[ShikiConfig, string[]?], Root>;

View File

@ -0,0 +1,29 @@
import { highlightCodeBlocks } from "./highlight.js";
import { createShikiHighlighter } from "./shiki.js";
const rehypeShiki = (config, excludeLangs) => {
let highlighterAsync;
return async (tree) => {
highlighterAsync ??= createShikiHighlighter({
langs: config?.langs,
theme: config?.theme,
themes: config?.themes,
langAlias: config?.langAlias
});
const highlighter = await highlighterAsync;
await highlightCodeBlocks(
tree,
(code, language, options) => {
return highlighter.codeToHast(code, language, {
meta: options?.meta,
wrap: config?.wrap,
defaultColor: config?.defaultColor,
transformers: config?.transformers
});
},
excludeLangs
);
};
};
export {
rehypeShiki
};

View File

@ -0,0 +1,4 @@
import type { Root } from 'mdast';
import type { VFile } from 'vfile';
import type { AstroMarkdownProcessorOptions } from './types.js';
export declare function remarkCollectImages(opts: AstroMarkdownProcessorOptions['image']): (tree: Root, vfile: VFile) => void;

View File

@ -0,0 +1,38 @@
import { isRemoteAllowed } from "@astrojs/internal-helpers/remote";
import { definitions } from "mdast-util-definitions";
import { visit } from "unist-util-visit";
function remarkCollectImages(opts) {
const domains = opts?.domains ?? [];
const remotePatterns = opts?.remotePatterns ?? [];
return function(tree, vfile) {
if (typeof vfile?.path !== "string") return;
const definition = definitions(tree);
const localImagePaths = /* @__PURE__ */ new Set();
const remoteImagePaths = /* @__PURE__ */ new Set();
visit(tree, (node) => {
let url;
if (node.type === "image") {
url = decodeURI(node.url);
} else if (node.type === "imageReference") {
const imageDefinition = definition(node.identifier);
if (imageDefinition) {
url = decodeURI(imageDefinition.url);
}
}
if (!url) return;
if (URL.canParse(url)) {
if (isRemoteAllowed(url, { domains, remotePatterns })) {
remoteImagePaths.add(url);
}
} else if (!url.startsWith("/")) {
localImagePaths.add(url);
}
});
vfile.data.astro ??= {};
vfile.data.astro.localImagePaths = Array.from(localImagePaths);
vfile.data.astro.remoteImagePaths = Array.from(remoteImagePaths);
};
}
export {
remarkCollectImages
};

View File

@ -0,0 +1,43 @@
import type { Root } from 'hast';
import { type HighlighterCoreOptions, type LanguageRegistration, type ShikiTransformer, type ThemeRegistration, type ThemeRegistrationRaw } from 'shiki';
import type { ThemePresets } from './types.js';
export interface ShikiHighlighter {
codeToHast(code: string, lang?: string, options?: ShikiHighlighterHighlightOptions): Promise<Root>;
codeToHtml(code: string, lang?: string, options?: ShikiHighlighterHighlightOptions): Promise<string>;
}
export interface CreateShikiHighlighterOptions {
langs?: LanguageRegistration[];
theme?: ThemePresets | ThemeRegistration | ThemeRegistrationRaw;
themes?: Record<string, ThemePresets | ThemeRegistration | ThemeRegistrationRaw>;
langAlias?: HighlighterCoreOptions['langAlias'];
}
export interface ShikiHighlighterHighlightOptions {
/**
* Generate inline code element only, without the pre element wrapper.
*/
inline?: boolean;
/**
* Enable word wrapping.
* - true: enabled.
* - false: disabled.
* - null: All overflow styling removed. Code will overflow the element by default.
*/
wrap?: boolean | null;
/**
* Chooses a theme from the "themes" option that you've defined as the default styling theme.
*/
defaultColor?: 'light' | 'dark' | string | false;
/**
* Shiki transformers to customize the generated HTML by manipulating the hast tree.
*/
transformers?: ShikiTransformer[];
/**
* Additional attributes to be added to the root code block element.
*/
attributes?: Record<string, string>;
/**
* Raw `meta` information to be used by Shiki transformers.
*/
meta?: string;
}
export declare function createShikiHighlighter({ langs, theme, themes, langAlias, }?: CreateShikiHighlighterOptions): Promise<ShikiHighlighter>;

View File

@ -0,0 +1,109 @@
import {
createCssVariablesTheme,
createHighlighter,
isSpecialLang
} from "shiki";
let _cssVariablesTheme;
const cssVariablesTheme = () => _cssVariablesTheme ?? (_cssVariablesTheme = createCssVariablesTheme({
variablePrefix: "--astro-code-"
}));
async function createShikiHighlighter({
langs = [],
theme = "github-dark",
themes = {},
langAlias = {}
} = {}) {
theme = theme === "css-variables" ? cssVariablesTheme() : theme;
const highlighter = await createHighlighter({
langs: ["plaintext", ...langs],
langAlias,
themes: Object.values(themes).length ? Object.values(themes) : [theme]
});
async function highlight(code, lang = "plaintext", options, to) {
const resolvedLang = langAlias[lang] ?? lang;
const loadedLanguages = highlighter.getLoadedLanguages();
if (!isSpecialLang(lang) && !loadedLanguages.includes(resolvedLang)) {
try {
await highlighter.loadLanguage(resolvedLang);
} catch (_err) {
const langStr = lang === resolvedLang ? `"${lang}"` : `"${lang}" (aliased to "${resolvedLang}")`;
console.warn(`[Shiki] The language ${langStr} doesn't exist, falling back to "plaintext".`);
lang = "plaintext";
}
}
code = code.replace(/(?:\r\n|\r|\n)$/, "");
const themeOptions = Object.values(themes).length ? { themes } : { theme };
const inline = options?.inline ?? false;
return highlighter[to === "html" ? "codeToHtml" : "codeToHast"](code, {
...themeOptions,
defaultColor: options.defaultColor,
lang,
// NOTE: while we can spread `options.attributes` here so that Shiki can auto-serialize this as rendered
// attributes on the top-level tag, it's not clear whether it is fine to pass all attributes as meta, as
// they're technically not meta, nor parsed from Shiki's `parseMetaString` API.
meta: options?.meta ? { __raw: options?.meta } : void 0,
transformers: [
{
pre(node) {
if (inline) {
node.tagName = "code";
}
const {
class: attributesClass,
style: attributesStyle,
...rest
} = options?.attributes ?? {};
Object.assign(node.properties, rest);
const classValue = (normalizePropAsString(node.properties.class) ?? "") + (attributesClass ? ` ${attributesClass}` : "");
const styleValue = (normalizePropAsString(node.properties.style) ?? "") + (attributesStyle ? `; ${attributesStyle}` : "");
node.properties.class = classValue.replace(/shiki/g, "astro-code");
node.properties.dataLanguage = lang;
if (options.wrap === false || options.wrap === void 0) {
node.properties.style = styleValue + "; overflow-x: auto;";
} else if (options.wrap === true) {
node.properties.style = styleValue + "; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;";
}
},
line(node) {
if (resolvedLang === "diff") {
const innerSpanNode = node.children[0];
const innerSpanTextNode = innerSpanNode?.type === "element" && innerSpanNode.children?.[0];
if (innerSpanTextNode && innerSpanTextNode.type === "text") {
const start = innerSpanTextNode.value[0];
if (start === "+" || start === "-") {
innerSpanTextNode.value = innerSpanTextNode.value.slice(1);
innerSpanNode.children.unshift({
type: "element",
tagName: "span",
properties: { style: "user-select: none;" },
children: [{ type: "text", value: start }]
});
}
}
}
},
code(node) {
if (inline) {
return node.children[0];
}
}
},
...options.transformers ?? []
]
});
}
return {
codeToHast(code, lang, options = {}) {
return highlight(code, lang, options, "hast");
},
codeToHtml(code, lang, options = {}) {
return highlight(code, lang, options, "html");
}
};
}
function normalizePropAsString(value) {
return Array.isArray(value) ? value.join(" ") : value;
}
export {
createShikiHighlighter
};

View File

@ -0,0 +1,74 @@
import type { RemotePattern } from '@astrojs/internal-helpers/remote';
import type * as hast from 'hast';
import type * as mdast from 'mdast';
import type { Options as RemarkRehypeOptions } from 'remark-rehype';
import type { BuiltinTheme } from 'shiki';
import type * as unified from 'unified';
import type { CreateShikiHighlighterOptions, ShikiHighlighterHighlightOptions } from './shiki.js';
export type { Node } from 'unist';
declare module 'vfile' {
interface DataMap {
astro: {
headings?: MarkdownHeading[];
localImagePaths?: string[];
remoteImagePaths?: string[];
frontmatter?: Record<string, any>;
};
}
}
export type RemarkPlugin<PluginParameters extends any[] = any[]> = unified.Plugin<PluginParameters, mdast.Root>;
export type RemarkPlugins = (string | [string, any] | RemarkPlugin | [RemarkPlugin, any])[];
export type RehypePlugin<PluginParameters extends any[] = any[]> = unified.Plugin<PluginParameters, hast.Root>;
export type RehypePlugins = (string | [string, any] | RehypePlugin | [RehypePlugin, any])[];
export type RemarkRehype = RemarkRehypeOptions;
export type ThemePresets = BuiltinTheme | 'css-variables';
export type SyntaxHighlightConfigType = 'shiki' | 'prism';
export interface SyntaxHighlightConfig {
type: SyntaxHighlightConfigType;
excludeLangs?: string[];
}
export interface ShikiConfig extends Pick<CreateShikiHighlighterOptions, 'langs' | 'theme' | 'themes' | 'langAlias'>, Pick<ShikiHighlighterHighlightOptions, 'defaultColor' | 'wrap' | 'transformers'> {
}
/**
* Configuration options that end up in the markdown section of AstroConfig
*/
export interface AstroMarkdownOptions {
syntaxHighlight?: SyntaxHighlightConfig | SyntaxHighlightConfigType | false;
shikiConfig?: ShikiConfig;
remarkPlugins?: RemarkPlugins;
rehypePlugins?: RehypePlugins;
remarkRehype?: RemarkRehype;
gfm?: boolean;
smartypants?: boolean;
}
/**
* Extra configuration options from other parts of AstroConfig that get injected into this plugin
*/
export interface AstroMarkdownProcessorOptions extends AstroMarkdownOptions {
image?: {
domains?: string[];
remotePatterns?: RemotePattern[];
};
experimentalHeadingIdCompat?: boolean;
}
export interface MarkdownProcessor {
render: (content: string, opts?: MarkdownProcessorRenderOptions) => Promise<MarkdownProcessorRenderResult>;
}
export interface MarkdownProcessorRenderOptions {
/** Used for frontmatter injection plugins */
frontmatter?: Record<string, any>;
}
export interface MarkdownProcessorRenderResult {
code: string;
metadata: {
headings: MarkdownHeading[];
localImagePaths: string[];
remoteImagePaths: string[];
frontmatter: Record<string, any>;
};
}
export interface MarkdownHeading {
depth: number;
slug: string;
text: string;
}

View File

@ -0,0 +1,17 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -z "$NODE_PATH" ]; then
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/bin/node_modules:/home/justin/justin_deal/node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/node_modules:/home/justin/justin_deal/node_modules/.pnpm/js-yaml@4.1.0/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules"
else
export NODE_PATH="/home/justin/justin_deal/node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/bin/node_modules:/home/justin/justin_deal/node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/node_modules:/home/justin/justin_deal/node_modules/.pnpm/js-yaml@4.1.0/node_modules:/home/justin/justin_deal/node_modules/.pnpm/node_modules:$NODE_PATH"
fi
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../../../../../../js-yaml@4.1.0/node_modules/js-yaml/bin/js-yaml.js" "$@"
else
exec node "$basedir/../../../../../../js-yaml@4.1.0/node_modules/js-yaml/bin/js-yaml.js" "$@"
fi

View File

@ -0,0 +1,70 @@
{
"name": "@astrojs/markdown-remark",
"version": "6.3.1",
"type": "module",
"author": "withastro",
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/withastro/astro.git",
"directory": "packages/markdown/remark"
},
"bugs": "https://github.com/withastro/astro/issues",
"homepage": "https://astro.build",
"main": "./dist/index.js",
"exports": {
".": "./dist/index.js"
},
"imports": {
"#import-plugin": {
"browser": "./dist/import-plugin-browser.js",
"default": "./dist/import-plugin-default.js"
}
},
"files": [
"dist"
],
"dependencies": {
"github-slugger": "^2.0.0",
"hast-util-from-html": "^2.0.3",
"hast-util-to-text": "^4.0.2",
"import-meta-resolve": "^4.1.0",
"js-yaml": "^4.1.0",
"mdast-util-definitions": "^6.0.0",
"rehype-raw": "^7.0.0",
"rehype-stringify": "^10.0.1",
"remark-gfm": "^4.0.1",
"remark-parse": "^11.0.0",
"remark-rehype": "^11.1.1",
"remark-smartypants": "^3.0.2",
"shiki": "^3.0.0",
"smol-toml": "^1.3.1",
"unified": "^11.0.5",
"unist-util-remove-position": "^5.0.0",
"unist-util-visit": "^5.0.0",
"unist-util-visit-parents": "^6.0.1",
"vfile": "^6.0.3",
"@astrojs/internal-helpers": "0.6.1",
"@astrojs/prism": "3.2.0"
},
"devDependencies": {
"@types/estree": "^1.0.6",
"@types/hast": "^3.0.4",
"@types/js-yaml": "^4.0.9",
"@types/mdast": "^4.0.4",
"@types/unist": "^3.0.3",
"esbuild": "^0.24.2",
"mdast-util-mdx-expression": "^2.0.1",
"astro-scripts": "0.0.14"
},
"publishConfig": {
"provenance": true
},
"scripts": {
"prepublish": "pnpm build",
"build": "astro-scripts build \"src/**/*.ts\" && tsc -p tsconfig.json",
"build:ci": "astro-scripts build \"src/**/*.ts\"",
"dev": "astro-scripts dev \"src/**/*.ts\"",
"test": "astro-scripts test \"test/**/*.test.js\""
}
}

View File

@ -0,0 +1 @@
../../../@astrojs+prism@3.2.0/node_modules/@astrojs/prism

View File

@ -0,0 +1 @@
../../github-slugger@2.0.0/node_modules/github-slugger

View File

@ -0,0 +1 @@
../../hast-util-from-html@2.0.3/node_modules/hast-util-from-html

View File

@ -0,0 +1 @@
../../hast-util-to-text@4.0.2/node_modules/hast-util-to-text

Some files were not shown because too many files have changed in this diff Show More