Something went wrong. Try again.
Something went wrong. Try again.
6.4 kB · 266 lines
Shell
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267#!/usr/bin/env bashset -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"cd "$SCRIPT_DIR"
PKG_NAME="@weaver.sh/renderer"PKG_VERSION="0.1.1"
# Targets to buildTARGETS=(bundler web nodejs deno)
COMMAND="${1:-build}"shift || true
# Feature variantsdeclare -A VARIANTS=( ["core"]="" ["full"]="syntax-highlighting")
build() { local target="$1" local variant="$2" local features="$3" local out_dir="pkg/${variant}/${target}"
echo "Building ${variant}/${target}..."
local feature_args="" if [[ -n "$features" ]]; then feature_args="--features $features" fi
wasm-pack build \ --out-name weaver_renderer \ --out-dir "$out_dir" \ --target "$target" \ --no-default-features \ $feature_args
# Report size local wasm_file="${out_dir}/weaver_renderer_bg.wasm" if [[ -f "$wasm_file" ]]; then local size=$(ls -lh "$wasm_file" | awk '{print $5}') echo " → ${size}" fi}
generate_package_json() { local variant="$1" local out_dir="pkg/${variant}" local description="AT Protocol record renderer (${variant})"
if [[ "$variant" == "full" ]]; then description="AT Protocol record renderer with syntax highlighting" else description="AT Protocol record renderer (lightweight, no syntax highlighting)" fi
cat > "${out_dir}/package.json" << EOF{ "name": "${PKG_NAME}-${variant}", "version": "${PKG_VERSION}", "description": "${description}", "license": "MPL-2.0", "repository": { "type": "git", "url": "https://tangled.org/nonbinary.computer/weaver" }, "keywords": ["atproto", "bluesky", "markdown", "renderer", "wasm"], "main": "nodejs/weaver_renderer.js", "module": "bundler/weaver_renderer.js", "browser": "web/weaver_renderer.js", "types": "bundler/weaver_renderer.d.ts", "exports": { ".": { "deno": "./deno/weaver_renderer.js", "node": { "import": "./nodejs/weaver_renderer.js", "require": "./nodejs/weaver_renderer.js" }, "browser": { "import": "./web/weaver_renderer.js" }, "default": "./bundler/weaver_renderer.js" }, "./bundler": { "import": "./bundler/weaver_renderer.js", "types": "./bundler/weaver_renderer.d.ts" }, "./web": { "import": "./web/weaver_renderer.js", "types": "./web/weaver_renderer.d.ts" }, "./nodejs": { "import": "./nodejs/weaver_renderer.js", "require": "./nodejs/weaver_renderer.js", "types": "./nodejs/weaver_renderer.d.ts" }, "./deno": { "import": "./deno/weaver_renderer.js", "types": "./deno/weaver_renderer.d.ts" } }, "files": [ "bundler/", "web/", "nodejs/", "deno/", "README.md" ]}EOF}
generate_readme() { local variant="$1" local out_dir="pkg/${variant}"
cat > "${out_dir}/README.md" << 'EOF'# @weaver.sh/renderer
WASM bindings for rendering AT Protocol records (Bluesky posts, etc.) to HTML.
## Installation
```bashnpm install @weaver.sh/renderer-full # With syntax highlightingnpm install @weaver.sh/renderer-core # Light(er) weight```
## Usage
### With a bundler (webpack, vite, etc.)
```javascriptimport init, { render_record, render_markdown } from '@weaver.sh/renderer-full';
await init();
const html = render_record(atUri, recordJson);```
### Direct browser usage (no bundler)
```html<script type="module"> import init, { render_record } from '@weaver.sh/renderer-full/web'; await init(); // ...</script>```
### Node.js
```javascriptconst { render_record } = require('@weaver.sh/renderer-full/nodejs');```
## API
- `render_record(at_uri, record_json, fallback_author?, resolved_content?)` - Render an AT Protocol record- `render_markdown(markdown, resolved_content?)` - Render markdown to HTML- `render_math(latex, display_mode)` - Render LaTeX math to MathML- `render_faceted_text(text, facets_json)` - Render rich text with facetsEOF}
do_build() {# Clean previous buildsrm -rf pkg
# Build all combinationsfor variant in "${!VARIANTS[@]}"; do features="${VARIANTS[$variant]}"
for target in "${TARGETS[@]}"; do build "$target" "$variant" "$features" done
generate_package_json "$variant" generate_readme "$variant"
# Clean up wasm-pack artifacts we don't need find "pkg/${variant}" -name ".gitignore" -delete find "pkg/${variant}" -name "package.json" -path "*/bundler/*" -delete find "pkg/${variant}" -name "package.json" -path "*/web/*" -delete find "pkg/${variant}" -name "package.json" -path "*/nodejs/*" -delete find "pkg/${variant}" -name "package.json" -path "*/deno/*" -deletedone
echo ""echo "Build complete!"echo ""ls -lh pkg/core/web/*.wasm pkg/full/web/*.wasm 2>/dev/null || trueecho ""echo "Packages:"echo " pkg/core/ - @weaver.sh/renderer-core (no syntax highlighting)"echo " pkg/full/ - @weaver.sh/renderer-full (with syntax highlighting)"}
do_pack() { echo "Packing..." for variant in "${!VARIANTS[@]}"; do echo " ${variant}..." (cd "pkg/${variant}" && npm pack) done echo "" echo "Tarballs created:" ls -lh pkg/*/*.tgz 2>/dev/null || true}
do_publish() { local tag="${1:-}" local tag_arg="" if [[ -n "$tag" ]]; then tag_arg="--tag $tag" fi
echo "Publishing..." for variant in "${!VARIANTS[@]}"; do echo " ${variant}..." (cd "pkg/${variant}" && npm publish --access public $tag_arg) done echo "" echo "Published!"}
usage() { echo "Usage: $0 [command]" echo "" echo "Commands:" echo " build Build all variants and targets (default)" echo " pack Create npm tarballs" echo " publish Publish to npm registry" echo " all Build, pack, and publish" echo "" echo "Options for publish:" echo " --tag <tag> Publish with a specific tag (e.g., 'next', 'beta')"}
case "$COMMAND" in build) do_build ;; pack) do_pack ;; publish) do_publish "$@" ;; all) do_build do_pack do_publish "$@" ;; -h|--help|help) usage ;; *) echo "Unknown command: $COMMAND" usage exit 1 ;;esac