diff --git a/.github/actions/setup-sqruff/action.yml b/.github/actions/setup-sqruff/action.yml new file mode 100644 index 000000000..06fe2de2d --- /dev/null +++ b/.github/actions/setup-sqruff/action.yml @@ -0,0 +1,104 @@ +name: 'Install Sqruff CLI' +description: 'Install sqruff SQL linter and formatter' +author: 'quarylabs (forked fix from fank)' + +inputs: + version: + description: 'Version of Sqruff CLI to install' + required: false + default: 'latest' + github-token: + description: 'GitHub token for API requests (helps avoid rate limiting)' + required: false + default: '' + +runs: + using: 'composite' + steps: + - run: | + set -e # Exit on error + + # Function to make GitHub API calls with optional token + github_api_call() { + local url=$1 + if [ -n "${{ inputs.github-token }}" ]; then + curl -s -H "Authorization: token ${{ inputs.github-token }}" "$url" + else + curl -s "$url" + fi + } + + # Determine version to install + if [ "${{ inputs.version }}" = "latest" ]; then + echo "Fetching latest Sqruff release..." + API_RESPONSE=$(github_api_call "https://api.github.com/repos/quarylabs/sqruff/releases/latest") + + # Check if API call was successful + if echo "$API_RESPONSE" | grep -q "API rate limit exceeded"; then + echo "::error::GitHub API rate limit exceeded. Please provide a github-token input." + exit 1 + fi + + LATEST_VERSION=$(echo "$API_RESPONSE" | grep '"tag_name"' | cut -d '"' -f 4) + + if [ -z "$LATEST_VERSION" ]; then + echo "::error::Failed to fetch latest version from GitHub API" + echo "API Response: $API_RESPONSE" + exit 1 + fi + + echo "Latest version is $LATEST_VERSION" + VERSION=$LATEST_VERSION + else + VERSION=${{ inputs.version }} + fi + + # Detect architecture + ARCH=$(uname -m) + case $ARCH in + x86_64) + BINARY_NAME="sqruff-linux-x86_64-musl" + ;; + aarch64|arm64) + BINARY_NAME="sqruff-linux-aarch64-musl" + ;; + *) + echo "::error::Unsupported architecture: $ARCH" + exit 1 + ;; + esac + + # Download and install + echo "Installing Sqruff CLI version $VERSION for architecture $ARCH" + DOWNLOAD_URL="https://github.com/quarylabs/sqruff/releases/download/$VERSION/${BINARY_NAME}.tar.gz" + + echo "Downloading from: $DOWNLOAD_URL" + if ! wget -q --show-progress "$DOWNLOAD_URL" -O sqruff-cli.tar.gz; then + echo "::error::Failed to download Sqruff CLI from $DOWNLOAD_URL" + exit 1 + fi + + echo "Extracting archive..." + if ! tar -xzf sqruff-cli.tar.gz; then + echo "::error::Failed to extract tarball" + exit 1 + fi + + echo "Installing binary..." + if ! sudo mv sqruff /usr/local/bin/sqruff; then + echo "::error::Failed to install sqruff binary" + exit 1 + fi + + # Make sure it's executable + sudo chmod +x /usr/local/bin/sqruff + + # Verify installation + echo "Verifying installation..." + if sqruff --version; then + echo "✅ Sqruff CLI installed successfully!" + else + echo "::error::Failed to verify Sqruff CLI installation" + exit 1 + fi + shell: bash diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 549d3f7c3..1ccdde73a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,7 +34,9 @@ jobs: deno-version: '1.45.2' - name: Install sqruff - uses: quarylabs/install-sqruff-cli-action@main + uses: ./.github/actions/setup-sqruff + with: + github-token: ${{ secrets.GITHUB_TOKEN }} - name: Setup Atlas uses: ariga/setup-atlas@master @@ -75,7 +77,9 @@ jobs: deno-version: '1.45.2' - name: Install sqruff - uses: quarylabs/install-sqruff-cli-action@main + uses: ./.github/actions/setup-sqruff + with: + github-token: ${{ secrets.GITHUB_TOKEN }} - name: Setup Atlas uses: ariga/setup-atlas@master diff --git a/apps/demo/PLAUSIBLE_SETUP.md b/apps/demo/PLAUSIBLE_SETUP.md index 61364ba47..3a7f0189a 100644 --- a/apps/demo/PLAUSIBLE_SETUP.md +++ b/apps/demo/PLAUSIBLE_SETUP.md @@ -5,6 +5,7 @@ This guide walks you through setting up Plausible Analytics with a Cloudflare Wo ## Overview The setup consists of three parts: + 1. Plausible dashboard configuration 2. Cloudflare Worker proxy deployment 3. SvelteKit app configuration @@ -43,19 +44,22 @@ The setup consists of three parts: 2. Delete the default code 3. Copy the code from `cloudflare-worker-plausible-proxy.js` 4. **Update the configuration** at the top of the file: + ```javascript // Replace with your Plausible script URL from Part 1 const ProxyScript = 'https://plausible.io/js/pa-XXXXX.js'; // Customize these paths (avoid obvious names) - const ScriptName = '/metrics/script.js'; // Change to something unique - const Endpoint = '/metrics/event'; // Should match folder above + const ScriptName = '/metrics/script.js'; // Change to something unique + const Endpoint = '/metrics/event'; // Should match folder above ``` + 5. Click "Save and Deploy" ### Step 3: Test the Worker 1. Your worker will be available at: + ``` https://your-worker-name.your-account.workers.dev ``` @@ -78,6 +82,7 @@ If your site is on Cloudflare CDN, you can run the proxy as a subdirectory: 4. Click "Save" Now your proxy will be available at: + ``` https://yourdomain.com/analytics/metrics/script.js https://yourdomain.com/analytics/metrics/event @@ -91,24 +96,25 @@ Open `apps/demo/src/routes/+layout.svelte` and update the TODO section: ```typescript onMount(() => { - initPlausible({ - domain: 'demo.pgflow.dev', // Your actual domain - apiHost: 'https://your-worker.workers.dev/metrics', // Your proxy URL - trackLocalhost: false // Set to true for testing locally - }); + initPlausible({ + domain: 'demo.pgflow.dev', // Your actual domain + apiHost: 'https://your-worker.workers.dev/metrics', // Your proxy URL + trackLocalhost: false // Set to true for testing locally + }); }); ``` **Configuration options:** - **Without custom route** (worker URL): + ```typescript - apiHost: 'https://your-worker-name.your-account.workers.dev/metrics' + apiHost: 'https://your-worker-name.your-account.workers.dev/metrics'; ``` - **With custom route** (subdirectory): ```typescript - apiHost: '/analytics/metrics' // Relative path works! + apiHost: '/analytics/metrics'; // Relative path works! ``` ## Part 4: Track Custom Events @@ -123,19 +129,23 @@ track('button_clicked'); // Event with properties track('signup', { - tier: 'pro', - plan: 'monthly', - source: 'landing_page' + tier: 'pro', + plan: 'monthly', + source: 'landing_page' }); // Event with revenue tracking -track('purchase', { - product: 'pro-plan', - quantity: 1 -}, { - amount: 29.99, - currency: 'USD' -}); +track( + 'purchase', + { + product: 'pro-plan', + quantity: 1 + }, + { + amount: 29.99, + currency: 'USD' + } +); ``` ### Common Event Examples @@ -158,11 +168,13 @@ track('documentation_download', { doc_type: 'api_reference' }); ## Part 5: Verify Installation 1. **Start your dev server**: + ```bash pnpm nx dev demo ``` 2. **Open your browser console** and look for: + ``` [Plausible] Initialized successfully ``` @@ -173,10 +185,12 @@ track('documentation_download', { doc_type: 'api_reference' }); - Note: It may take a few seconds for events to appear 4. **Test custom events**: + ```typescript // In browser console or your code track('test_event', { test: true }); ``` + - Check Plausible dashboard > Custom Events to see it ## Troubleshooting diff --git a/apps/demo/cloudflare-worker-plausible-proxy.js b/apps/demo/cloudflare-worker-plausible-proxy.js index 81d7c9a62..bda89bde8 100644 --- a/apps/demo/cloudflare-worker-plausible-proxy.js +++ b/apps/demo/cloudflare-worker-plausible-proxy.js @@ -8,7 +8,7 @@ // CONFIGURATION - UPDATE THIS VALUE! // Get this from your Plausible dashboard (Site Settings > Site Installation) // It will look like: https://plausible.io/js/script.js (or pa-XXXXX.js for custom domains) -const ProxyScript = 'https://plausible.io/js/script.js'; // ← UPDATE THIS! +const ProxyScript = 'https://plausible.io/js/script.js'; // ← UPDATE THIS! // Customize these paths to avoid ad-blocker detection const ScriptName = '/stats/script.js'; @@ -18,34 +18,34 @@ const Endpoint = '/stats/event'; const ScriptWithoutExtension = ScriptName.replace('.js', ''); addEventListener('fetch', (event) => { - event.passThroughOnException(); - event.respondWith(handleRequest(event)); + event.passThroughOnException(); + event.respondWith(handleRequest(event)); }); async function handleRequest(event) { - const pathname = new URL(event.request.url).pathname; - const [baseUri, ...extensions] = pathname.split('.'); + const pathname = new URL(event.request.url).pathname; + const [baseUri] = pathname.split('.'); - if (baseUri.endsWith(ScriptWithoutExtension)) { - return getScript(event, extensions); - } else if (pathname.endsWith(Endpoint)) { - return postData(event); - } + if (baseUri.endsWith(ScriptWithoutExtension)) { + return getScript(event); + } else if (pathname.endsWith(Endpoint)) { + return postData(event); + } - return new Response(null, { status: 404 }); + return new Response(null, { status: 404 }); } -async function getScript(event, extensions) { - let response = await caches.default.match(event.request); - if (!response) { - response = await fetch(ProxyScript); - event.waitUntil(caches.default.put(event.request, response.clone())); - } - return response; +async function getScript(event) { + let response = await caches.default.match(event.request); + if (!response) { + response = await fetch(ProxyScript); + event.waitUntil(caches.default.put(event.request, response.clone())); + } + return response; } async function postData(event) { - const request = new Request(event.request); - request.headers.delete('cookie'); - return await fetch('https://plausible.io/api/event', request); + const request = new Request(event.request); + request.headers.delete('cookie'); + return await fetch('https://plausible.io/api/event', request); } diff --git a/apps/demo/package.json b/apps/demo/package.json index 1edf14adc..b90068e53 100644 --- a/apps/demo/package.json +++ b/apps/demo/package.json @@ -47,7 +47,6 @@ "dependencies": { "@pgflow/client": "workspace:*", "@pgflow/dsl": "workspace:*", - "@plausible-analytics/tracker": "^0.4.4", "@supabase/supabase-js": "^2.78.0", "@xyflow/svelte": "^1.4.1", "shiki": "^3.14.0" diff --git a/apps/demo/src/lib/analytics.ts b/apps/demo/src/lib/analytics.ts index 2d0b063e8..f58563593 100644 --- a/apps/demo/src/lib/analytics.ts +++ b/apps/demo/src/lib/analytics.ts @@ -1,61 +1,29 @@ -import { init, track as trackEvent } from '@plausible-analytics/tracker'; import { browser } from '$app/environment'; -interface PlausibleConfig { - domain: string; - apiHost?: string; - trackLocalhost?: boolean; +/** + * Plausible Analytics event options + */ +interface PlausibleOptions { + props?: Record; + revenue?: { amount: number; currency: string }; + callback?: (result?: { status?: number; error?: Error }) => void; } -let initialized = false; - /** - * Initialize Plausible analytics tracking. - * Should be called once when the app loads. - * - * @param config - Configuration options for Plausible - * @param config.domain - Your site's domain (e.g., 'demo.pgflow.dev') - * @param config.apiHost - Optional custom API endpoint (for proxy setup) - * @param config.trackLocalhost - Whether to track events on localhost (default: false) + * TypeScript declaration for the global Plausible function + * This function is made available by the Plausible script tag */ -export function initPlausible(config: PlausibleConfig): void { - // Only run in browser environment - if (!browser) { - return; - } - - // Prevent double initialization - if (initialized) { - console.warn('[Plausible] Already initialized'); - return; - } - - const { domain, apiHost, trackLocalhost = false } = config; - - try { - init({ - domain, - // If apiHost is provided, use it as the endpoint - ...(apiHost && { endpoint: `${apiHost}/event` }), - // Disable tracking on localhost unless explicitly enabled - captureOnLocalhost: trackLocalhost, - // Auto-capture pageviews - autoCapturePageviews: true, - // Track file downloads - fileDownloads: true, - // Track outbound links - outboundLinks: true - }); - - initialized = true; - console.log('[Plausible] Initialized successfully'); - } catch (error) { - console.error('[Plausible] Initialization failed:', error); +declare global { + interface Window { + plausible?: (eventName: string, options?: PlausibleOptions) => void; } } /** - * Track a custom event in Plausible. + * Track a custom event in Plausible Analytics. + * + * Note: Plausible must be loaded via script tag for this to work. + * The script tag is added in +layout.svelte. * * @param eventName - Name of the event to track * @param props - Optional properties to attach to the event @@ -78,17 +46,21 @@ export function track( props?: Record, revenue?: { amount: number; currency: string } ): void { + // Only run in browser environment if (!browser) { return; } - if (!initialized) { - console.warn('[Plausible] Not initialized. Call initPlausible() first.'); + // Check if Plausible is loaded + if (!window.plausible) { + console.warn( + '[Plausible] Script not loaded. Make sure the Plausible script tag is included in your HTML.' + ); return; } try { - trackEvent(eventName, { + window.plausible(eventName, { ...(props && { props }), ...(revenue && { revenue }) }); diff --git a/apps/demo/src/routes/+layout.svelte b/apps/demo/src/routes/+layout.svelte index 22407a301..3fd4182a3 100644 --- a/apps/demo/src/routes/+layout.svelte +++ b/apps/demo/src/routes/+layout.svelte @@ -1,23 +1,18 @@ + {@render children()} diff --git a/apps/demo/src/routes/+page.svelte b/apps/demo/src/routes/+page.svelte index b8184917f..2a434c351 100644 --- a/apps/demo/src/routes/+page.svelte +++ b/apps/demo/src/routes/+page.svelte @@ -570,14 +570,16 @@ href="https://pgflow.dev" class="text-xs text-muted-foreground hover:text-foreground" onclick={() => - track('External Link Clicked', { destination: 'website', location: 'header' })}>WebsiteWebsite | - track('External Link Clicked', { destination: 'github', location: 'header' })}>GitHubGitHub diff --git a/apps/demo/tsconfig.json b/apps/demo/tsconfig.json index a5567ee6b..3840a59d6 100644 --- a/apps/demo/tsconfig.json +++ b/apps/demo/tsconfig.json @@ -10,7 +10,18 @@ "sourceMap": true, "strict": true, "moduleResolution": "bundler" - } + }, + "references": [ + { + "path": "../../pkgs/edge-worker" + }, + { + "path": "../../pkgs/dsl" + }, + { + "path": "../../pkgs/client" + } + ] // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files // diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 71f7a1a7f..af8a1bbfe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -120,9 +120,6 @@ importers: '@pgflow/dsl': specifier: workspace:* version: link:../../pkgs/dsl - '@plausible-analytics/tracker': - specifier: ^0.4.4 - version: 0.4.4 '@supabase/supabase-js': specifier: ^2.78.0 version: 2.81.0 @@ -3858,9 +3855,6 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@plausible-analytics/tracker@0.4.4': - resolution: {integrity: sha512-fz0NOYUEYXtg1TBaPEEvtcBq3FfmLFuTe1VZw4M8sTWX129br5dguu3M15+plOQnc181ShYe67RfwhKgK89VnA==} - '@pnpm/config.env-replace@1.1.0': resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} engines: {node: '>=12.22.0'} @@ -5634,36 +5628,6 @@ packages: bare-abort-controller: optional: true - bare-fs@4.5.1: - resolution: {integrity: sha512-zGUCsm3yv/ePt2PHNbVxjjn0nNB1MkIaR4wOCxJ2ig5pCf5cCVAYJXVhQg/3OhhJV6DB1ts7Hv0oUaElc2TPQg==} - engines: {bare: '>=1.16.0'} - peerDependencies: - bare-buffer: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - - bare-os@3.6.2: - resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} - engines: {bare: '>=1.14.0'} - - bare-path@3.0.0: - resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - - bare-stream@2.7.0: - resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} - peerDependencies: - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - bare-events: - optional: true - - bare-url@2.3.2: - resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==} - base-64@1.0.0: resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} @@ -5923,9 +5887,6 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} @@ -7063,10 +7024,6 @@ packages: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} - expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} - expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} @@ -7493,9 +7450,6 @@ packages: gitconfiglocal@2.1.0: resolution: {integrity: sha512-qoerOEliJn3z+Zyn1HW2F6eoYJqKwS6MgC9cztTLUB/xLWX8gD/6T60pKn4+t/d6tP7JlybI7Z3z+I572CR/Vg==} - github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -9121,9 +9075,6 @@ packages: resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} @@ -9193,9 +9144,6 @@ packages: nanospinner@1.2.2: resolution: {integrity: sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==} - napi-build-utils@2.0.0: - resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} - natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -9254,16 +9202,9 @@ packages: no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - node-abi@3.80.0: - resolution: {integrity: sha512-LyPuZJcI9HVwzXK1GPxWNzrr+vr8Hp/3UqlmWxxh8p54U1ZbclOqbSog9lWHaCX+dBaiGi6n/hIX+mKu74GmPA==} - engines: {node: '>=10'} - node-abort-controller@3.1.1: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} - node-addon-api@6.1.0: - resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} - node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} @@ -10042,11 +9983,6 @@ packages: resolution: {integrity: sha512-cDWgoah1Gez9rN3H4165peY9qfpEo+SA61oQv65O3cRUE1pOEoJWwddwcqKE8XZYjbblOJlYDlLV4h67HrEVDg==} engines: {node: '>=12'} - prebuild-install@7.1.3: - resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} - engines: {node: '>=10'} - hasBin: true - precinct@12.2.0: resolution: {integrity: sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==} engines: {node: '>=18'} @@ -10808,10 +10744,6 @@ packages: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} - sharp@0.32.6: - resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} - engines: {node: '>=14.15.0'} - sharp@0.33.5: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -10867,12 +10799,6 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - - simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - simple-swizzle@0.2.4: resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} @@ -11320,12 +11246,6 @@ packages: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} - tar-fs@2.1.4: - resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - - tar-fs@3.1.1: - resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} - tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} @@ -11579,9 +11499,6 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - tw-animate-css@1.4.0: resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} @@ -16795,8 +16712,6 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@plausible-analytics/tracker@0.4.4': {} - '@pnpm/config.env-replace@1.1.0': {} '@pnpm/network.ca-file@1.0.2': @@ -19043,41 +18958,6 @@ snapshots: bare-events@2.8.2: {} - bare-fs@4.5.1: - dependencies: - bare-events: 2.8.2 - bare-path: 3.0.0 - bare-stream: 2.7.0(bare-events@2.8.2) - bare-url: 2.3.2 - fast-fifo: 1.3.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true - - bare-os@3.6.2: - optional: true - - bare-path@3.0.0: - dependencies: - bare-os: 3.6.2 - optional: true - - bare-stream@2.7.0(bare-events@2.8.2): - dependencies: - streamx: 2.23.0 - optionalDependencies: - bare-events: 2.8.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true - - bare-url@2.3.2: - dependencies: - bare-path: 3.0.0 - optional: true - base-64@1.0.0: {} base64-js@1.5.1: {} @@ -19365,8 +19245,6 @@ snapshots: dependencies: readdirp: 4.1.2 - chownr@1.1.4: {} - chownr@3.0.0: {} chrome-trace-event@1.0.4: {} @@ -20664,8 +20542,6 @@ snapshots: exit@0.1.2: {} - expand-template@2.0.3: {} - expand-tilde@2.0.2: dependencies: homedir-polyfill: 1.0.3 @@ -21178,8 +21054,6 @@ snapshots: dependencies: ini: 1.3.8 - github-from-package@0.0.0: {} - github-slugger@2.0.0: {} glob-parent@5.1.2: @@ -23493,8 +23367,6 @@ snapshots: dependencies: minipass: 7.1.2 - mkdirp-classic@0.5.3: {} - mkdirp@3.0.1: {} mlly@1.8.0: @@ -23556,8 +23428,6 @@ snapshots: dependencies: picocolors: 1.1.1 - napi-build-utils@2.0.0: {} - natural-compare@1.4.0: {} needle@3.3.1: @@ -23769,14 +23639,8 @@ snapshots: lower-case: 2.0.2 tslib: 2.8.1 - node-abi@3.80.0: - dependencies: - semver: 7.7.3 - node-abort-controller@3.1.1: {} - node-addon-api@6.1.0: {} - node-addon-api@7.1.1: {} node-domexception@1.0.0: {} @@ -24604,21 +24468,6 @@ snapshots: postgres@3.4.5: {} - prebuild-install@7.1.3: - dependencies: - detect-libc: 2.1.2 - expand-template: 2.0.3 - github-from-package: 0.0.0 - minimist: 1.2.8 - mkdirp-classic: 0.5.3 - napi-build-utils: 2.0.0 - node-abi: 3.80.0 - pump: 3.0.3 - rc: 1.2.8 - simple-get: 4.0.1 - tar-fs: 2.1.4 - tunnel-agent: 0.6.0 - precinct@12.2.0(supports-color@10.2.2): dependencies: '@dependents/detective-less': 5.0.1 @@ -25482,21 +25331,6 @@ snapshots: dependencies: kind-of: 6.0.3 - sharp@0.32.6: - dependencies: - color: 4.2.3 - detect-libc: 2.1.2 - node-addon-api: 6.1.0 - prebuild-install: 7.1.3 - semver: 7.7.3 - simple-get: 4.0.1 - tar-fs: 3.1.1 - tunnel-agent: 0.6.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - sharp@0.33.5: dependencies: color: 4.2.3 @@ -25620,14 +25454,6 @@ snapshots: signal-exit@4.1.0: {} - simple-concat@1.0.1: {} - - simple-get@4.0.1: - dependencies: - decompress-response: 6.0.0 - once: 1.4.0 - simple-concat: 1.0.1 - simple-swizzle@0.2.4: dependencies: is-arrayish: 0.3.4 @@ -26141,25 +25967,6 @@ snapshots: tapable@2.3.0: {} - tar-fs@2.1.4: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.3 - tar-stream: 2.2.0 - - tar-fs@3.1.1: - dependencies: - pump: 3.0.3 - tar-stream: 3.1.7 - optionalDependencies: - bare-fs: 4.5.1 - bare-path: 3.0.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - tar-stream@2.2.0: dependencies: bl: 4.1.0 @@ -26478,10 +26285,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - tunnel-agent@0.6.0: - dependencies: - safe-buffer: 5.2.1 - tw-animate-css@1.4.0: {} type-check@0.4.0: