diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a85c8ff..55eb28c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,14 +14,15 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: '18.x' + node-version: '20' corepack-enable: true registry-url: 'https://registry.npmjs.org' - name: Deps run: | + npm i -g corepack@latest corepack enable pnpm i --frozen-lockfile - name: Test - run: pnpm -r test + run: pnpm test:ci diff --git a/adex/.snapshots/0f704ada2712880ee7394b0fc9b10abf/0.json b/adex/.snapshots/0f704ada2712880ee7394b0fc9b10abf/0.json new file mode 100644 index 0000000..7aa40b2 --- /dev/null +++ b/adex/.snapshots/0f704ada2712880ee7394b0fc9b10abf/0.json @@ -0,0 +1 @@ +"\n \n \n \n \n\n \n \n \n\n \n \n \n \n \n

Hello World

\n \n \n " \ No newline at end of file diff --git a/adex/.snapshots/0f704ada2712880ee7394b0fc9b10abf/1.json b/adex/.snapshots/0f704ada2712880ee7394b0fc9b10abf/1.json new file mode 100644 index 0000000..5f09be1 --- /dev/null +++ b/adex/.snapshots/0f704ada2712880ee7394b0fc9b10abf/1.json @@ -0,0 +1 @@ +"\n \n \n \n \n\n \n \n \n\n \n \n \n \n \n

About

\n \n \n " \ No newline at end of file diff --git a/adex/.snapshots/dd4c9d1ee8f7b693c42e503acab1a0c0/0.json b/adex/.snapshots/dd4c9d1ee8f7b693c42e503acab1a0c0/0.json new file mode 100644 index 0000000..4e505d1 --- /dev/null +++ b/adex/.snapshots/dd4c9d1ee8f7b693c42e503acab1a0c0/0.json @@ -0,0 +1 @@ +"\n \n \n \n \n\n \n \n \n\n \n \n \n \n \n

Hello World

\n \n \n " \ No newline at end of file diff --git a/adex/.snapshots/dd4c9d1ee8f7b693c42e503acab1a0c0/1.json b/adex/.snapshots/dd4c9d1ee8f7b693c42e503acab1a0c0/1.json new file mode 100644 index 0000000..5f09be1 --- /dev/null +++ b/adex/.snapshots/dd4c9d1ee8f7b693c42e503acab1a0c0/1.json @@ -0,0 +1 @@ +"\n \n \n \n \n\n \n \n \n\n \n \n \n \n \n

About

\n \n \n " \ No newline at end of file diff --git a/adex/.snapshots/dd4c9d1ee8f7b693c42e503acab1a0c0/2.json b/adex/.snapshots/dd4c9d1ee8f7b693c42e503acab1a0c0/2.json new file mode 100644 index 0000000..13a73d8 --- /dev/null +++ b/adex/.snapshots/dd4c9d1ee8f7b693c42e503acab1a0c0/2.json @@ -0,0 +1 @@ +"import { createHotContext as __vite__createHotContext } from \"/@vite/client\";import.meta.hot = __vite__createHotContext(\"/@id/__x00__virtual:adex:global.css\");import { updateStyle as __vite__updateStyle, removeStyle as __vite__removeStyle } from \"/@vite/client\"\nconst __vite__id = \"\\u0000virtual:adex:global.css\"\nconst __vite__css = \"\"\n__vite__updateStyle(__vite__id, __vite__css)\nimport.meta.hot.accept()\nimport.meta.hot.prune(() => __vite__removeStyle(__vite__id))" \ No newline at end of file diff --git a/adex/package.json b/adex/package.json index b7a19b4..bdf1d99 100644 --- a/adex/package.json +++ b/adex/package.json @@ -59,7 +59,8 @@ "runtime" ], "scripts": { - "next": "bumpp" + "next": "bumpp", + "test": "glob -c 'node --test' tests/**/*.spec.js" }, "dependencies": { "@barelyhuman/tiny-use": "^0.0.2", @@ -77,10 +78,13 @@ "unifont": "^0.0.2" }, "devDependencies": { + "@matteo.collina/snap": "^0.3.0", "@preact/preset-vite": "^2.8.2", "@types/node": "^20.14.10", "adex-adapter-node": "^0.0.17", "autoprefixer": "^10.4.19", + "glob": "^11.0.1", + "kolorist": "^1.8.0", "tailwindcss": "^3.4.4", "vite": "^5.3.1" }, diff --git a/adex/runtime/client.js b/adex/runtime/client.js index d2bb424..12a906a 100644 --- a/adex/runtime/client.js +++ b/adex/runtime/client.js @@ -13,13 +13,6 @@ import 'virtual:adex:global.css' // @ts-expect-error injected by vite import { routes } from '~routes' -const withComponents = routes.map(d => { - return { - ...d, - component: lazy(d.module), - } -}) - function ComponentWrapper({ url = '' }) { return h( LocationProvider, @@ -31,8 +24,8 @@ function ComponentWrapper({ url = '' }) { h( Router, {}, - withComponents.map(d => - h(Route, { path: d.routePath, component: d.component }) + routes.map(d => + h(Route, { path: d.routePath, component: lazy(d.module) }) ) ) ) @@ -46,6 +39,7 @@ export const App = ({ url = '' }) => { async function hydrate() { preactHydrate(h(ComponentWrapper, {}), document.getElementById('app')) } + if (typeof window !== 'undefined') { hydrate() } diff --git a/adex/runtime/handler.js b/adex/runtime/handler.js index 02db02c..8a72436 100644 --- a/adex/runtime/handler.js +++ b/adex/runtime/handler.js @@ -1,7 +1,7 @@ import { CONSTANTS, emitToHooked } from 'adex/hook' import { prepareRequest, prepareResponse } from 'adex/http' import { toStatic } from 'adex/ssr' -import { renderToString } from 'adex/utils/isomorphic' +import { renderToStringAsync } from 'adex/utils/isomorphic' import { h } from 'preact' // @ts-expect-error injected by vite @@ -60,9 +60,7 @@ export async function handler(req, res) { // @ts-expect-error global.location = new URL(req.url, 'http://localhost') - const rendered = await renderToString( - h(App, { url: [baseURL, search].filter(Boolean).join('?') }) - ) + const rendered = await renderToStringAsync(h(App, { url: req.url }), {}) const htmlString = HTMLTemplate({ metas, @@ -73,7 +71,7 @@ export async function handler(req, res) { routeParams: Buffer.from(JSON.stringify(routeParams), 'utf8').toString( 'base64' ), - body: rendered.html, + body: rendered, }) const modifiableContext = { req: req, diff --git a/adex/src/head.d.ts b/adex/src/head.d.ts index d8d30d2..2aa3fd2 100644 --- a/adex/src/head.d.ts +++ b/adex/src/head.d.ts @@ -1,4 +1,4 @@ -export type { +export { useHead, useLang, useLink, diff --git a/adex/src/utils/isomorphic.js b/adex/src/utils/isomorphic.js index 16f21ee..022cea8 100644 --- a/adex/src/utils/isomorphic.js +++ b/adex/src/utils/isomorphic.js @@ -1,2 +1,2 @@ export { parse as pathToRegex } from 'regexparam' -export { prerender as renderToString } from 'preact-iso' +export { renderToStringAsync } from 'preact-render-to-string' diff --git a/adex/src/vite.js b/adex/src/vite.js index 17ad98d..6c84bbe 100644 --- a/adex/src/vite.js +++ b/adex/src/vite.js @@ -61,6 +61,71 @@ export function adex({ 'virtual:adex:handler', readFileSync(join(__dirname, '../runtime/handler.js'), 'utf8') ), + createVirtualModule( + 'virtual:adex:server', + `import { createServer } from '${adapterMap[adapter]}' + import { dirname, join } from 'node:path' + import { fileURLToPath } from 'node:url' + import { existsSync, readFileSync } from 'node:fs' + import { env } from 'adex/env' + + import 'virtual:adex:font.css' + import 'virtual:adex:global.css' + + const __dirname = dirname(fileURLToPath(import.meta.url)) + + const PORT = parseInt(env.get('PORT', '3000'), 10) + const HOST = env.get('HOST', 'localhost') + + const paths = { + assets: join(__dirname, './assets'), + islands: join(__dirname, './islands'), + client: join(__dirname, '../client'), + } + + function getServerManifest() { + const manifestPath = join(__dirname, 'manifest.json') + if (existsSync(manifestPath)) { + const manifestFile = readFileSync(manifestPath, 'utf8') + return parseManifest(manifestFile) + } + return {} + } + + function getClientManifest() { + const manifestPath = join(__dirname, '../client/manifest.json') + if (existsSync(manifestPath)) { + const manifestFile = readFileSync(manifestPath, 'utf8') + return parseManifest(manifestFile) + } + return {} + } + + function parseManifest(manifestString) { + try { + const manifestJSON = JSON.parse(manifestString) + return manifestJSON + } catch (err) { + return {} + } + } + + const server = createServer({ + port: PORT, + host: HOST, + adex:{ + manifests:{server:getServerManifest(),client:getClientManifest()}, + paths, + } + }) + + if ('run' in server) { + server.run() + } + + export default server.fetch + ` + ), addFontsPlugin(fonts), adexDevServer({ islands }), adexBuildPrep({ islands }), @@ -176,7 +241,7 @@ function adexIslandsBuilder() { // if being imported by the client, don't send // back the transformed server code, send the // original component - if (!viteEnv.ssr) return + if (!viteEnv?.ssr) return const islands = findIslands(readSourceFile(id), { isFunctionIsland: node => @@ -655,7 +720,7 @@ function adexGuards() { // ignore usage of `process.env` in `adex/env` const envLoadId = await this.resolve('adex/env') - if (id === envLoadId.id) return + if (id === envLoadId?.id) return if (code.includes('process.env')) { this.error( diff --git a/adex/tests/fixtures/minimal-tailwind/jsconfig.json b/adex/tests/fixtures/minimal-tailwind/jsconfig.json new file mode 100644 index 0000000..ada9d24 --- /dev/null +++ b/adex/tests/fixtures/minimal-tailwind/jsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions":{ + "jsx":"react-jsx", + "jsxImportSource": "preact" + } +} \ No newline at end of file diff --git a/adex/tests/fixtures/minimal-tailwind/package.json b/adex/tests/fixtures/minimal-tailwind/package.json new file mode 100644 index 0000000..85bb496 --- /dev/null +++ b/adex/tests/fixtures/minimal-tailwind/package.json @@ -0,0 +1,14 @@ +{ + "name": "minimal-tailwind", + "type": "module", + "dependencies": { + "@preact/preset-vite": "catalog:", + "adex": "workspace:*", + "preact": "catalog:" + }, + "devDependencies": { + "autoprefixer": "^10.4.20", + "tailwindcss": "^3", + "vite": "^5.4.8" + } +} diff --git a/adex/tests/fixtures/minimal-tailwind/postcss.config.js b/adex/tests/fixtures/minimal-tailwind/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/adex/tests/fixtures/minimal-tailwind/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/adex/tests/fixtures/minimal-tailwind/src/global.css b/adex/tests/fixtures/minimal-tailwind/src/global.css new file mode 100644 index 0000000..bd6213e --- /dev/null +++ b/adex/tests/fixtures/minimal-tailwind/src/global.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/adex/tests/fixtures/minimal-tailwind/src/pages/about.jsx b/adex/tests/fixtures/minimal-tailwind/src/pages/about.jsx new file mode 100644 index 0000000..0202b3b --- /dev/null +++ b/adex/tests/fixtures/minimal-tailwind/src/pages/about.jsx @@ -0,0 +1,3 @@ +export default function AboutPage() { + return

About

+} diff --git a/adex/tests/fixtures/minimal-tailwind/src/pages/index.jsx b/adex/tests/fixtures/minimal-tailwind/src/pages/index.jsx new file mode 100644 index 0000000..631b063 --- /dev/null +++ b/adex/tests/fixtures/minimal-tailwind/src/pages/index.jsx @@ -0,0 +1,3 @@ +export default function Page() { + return

Hello World

+} diff --git a/adex/tests/fixtures/minimal-tailwind/tailwind.config.js b/adex/tests/fixtures/minimal-tailwind/tailwind.config.js new file mode 100644 index 0000000..2ff664f --- /dev/null +++ b/adex/tests/fixtures/minimal-tailwind/tailwind.config.js @@ -0,0 +1,8 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: ['./src/pages/**/*.{tsx,jsx}'], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/adex/tests/fixtures/minimal-tailwind/vite.config.js b/adex/tests/fixtures/minimal-tailwind/vite.config.js new file mode 100644 index 0000000..b05212f --- /dev/null +++ b/adex/tests/fixtures/minimal-tailwind/vite.config.js @@ -0,0 +1,13 @@ +import { defineConfig } from 'vite' +import { adex } from "adex" +import preact from "@preact/preset-vite" + +export default defineConfig({ + plugins: [ + adex({ + islands: false, + ssr: true, + }), + preact(), + ], +}) diff --git a/adex/tests/fixtures/minimal/jsconfig.json b/adex/tests/fixtures/minimal/jsconfig.json new file mode 100644 index 0000000..ada9d24 --- /dev/null +++ b/adex/tests/fixtures/minimal/jsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions":{ + "jsx":"react-jsx", + "jsxImportSource": "preact" + } +} \ No newline at end of file diff --git a/adex/tests/fixtures/minimal/package.json b/adex/tests/fixtures/minimal/package.json new file mode 100644 index 0000000..abbf00a --- /dev/null +++ b/adex/tests/fixtures/minimal/package.json @@ -0,0 +1,14 @@ +{ + "name": "minimal", + "type": "module", + "dependencies": { + "adex": "workspace:*", + "preact": "catalog:", + "@preact/preset-vite": "catalog:" + }, + + "devDependencies": { + "vite": "^5.4.8" + } + +} diff --git a/adex/tests/fixtures/minimal/src/pages/about.jsx b/adex/tests/fixtures/minimal/src/pages/about.jsx new file mode 100644 index 0000000..0202b3b --- /dev/null +++ b/adex/tests/fixtures/minimal/src/pages/about.jsx @@ -0,0 +1,3 @@ +export default function AboutPage() { + return

About

+} diff --git a/adex/tests/fixtures/minimal/src/pages/index.jsx b/adex/tests/fixtures/minimal/src/pages/index.jsx new file mode 100644 index 0000000..15a9b6e --- /dev/null +++ b/adex/tests/fixtures/minimal/src/pages/index.jsx @@ -0,0 +1,3 @@ +export default function Page() { + return

Hello World

+} diff --git a/adex/tests/fixtures/minimal/vite.config.js b/adex/tests/fixtures/minimal/vite.config.js new file mode 100644 index 0000000..b05212f --- /dev/null +++ b/adex/tests/fixtures/minimal/vite.config.js @@ -0,0 +1,13 @@ +import { defineConfig } from 'vite' +import { adex } from "adex" +import preact from "@preact/preset-vite" + +export default defineConfig({ + plugins: [ + adex({ + islands: false, + ssr: true, + }), + preact(), + ], +}) diff --git a/adex/tests/minimal-tailwind.spec.js b/adex/tests/minimal-tailwind.spec.js new file mode 100644 index 0000000..e4cc8a0 --- /dev/null +++ b/adex/tests/minimal-tailwind.spec.js @@ -0,0 +1,37 @@ +import Snap from '@matteo.collina/snap' +import { after, before, describe, it } from 'node:test' +import assert, { deepEqual } from 'node:assert' + +import { devServerURL, launchDemoDevServer } from './utils.js' +const snap = Snap(import.meta.url) + +describe('devMode ssr minimal with styles', async () => { + let devServerProc + before(async () => { + devServerProc = await launchDemoDevServer('tests/fixtures/minimal-tailwind') + }) + after(async () => { + devServerProc.kill() + }) + + await it('gives a non-static ssr response', async ctx => { + const response = await fetch(devServerURL).then(d => d.text()) + const snapshot = await snap(response) + deepEqual(response, snapshot) + }) + + await it('gives a static SSR response', async ctx => { + const response2 = await fetch(new URL('/about', devServerURL)).then(d => + d.text() + ) + const snapshot = await snap(response2) + deepEqual(response2, snapshot) + }) + + await it('has styles', async ctx => { + const response = await fetch( + new URL('/virtual:adex:global.css', devServerURL) + ).then(d => d.text()) + assert.ok(response.includes('.text-red-500')) + }) +}) diff --git a/adex/tests/minimal.spec.js b/adex/tests/minimal.spec.js new file mode 100644 index 0000000..e307fd5 --- /dev/null +++ b/adex/tests/minimal.spec.js @@ -0,0 +1,36 @@ +import Snap from '@matteo.collina/snap' +import { after, before, describe, it } from 'node:test' +import { deepEqual } from 'node:assert/strict' + +import { devServerURL, launchDemoDevServer } from './utils.js' + +const snap = Snap(import.meta.url) + +describe('devMode ssr minimal', async () => { + let devServerProc + before(async () => { + devServerProc = await launchDemoDevServer('tests/fixtures/minimal') + }) + after(async () => { + devServerProc.kill() + }) + + await it('gives a non-static ssr response', async ctx => { + const response = await fetch(devServerURL).then(d => d.text()) + deepEqual(response, await snap(response)) + }) + + await it('gives a static SSR response', async ctx => { + const response2 = await fetch(new URL('/about', devServerURL)).then(d => + d.text() + ) + deepEqual(response2, await snap(response2)) + }) + + await it('blank styles', async ctx => { + const response = await fetch( + new URL('/virtual:adex:global.css', devServerURL) + ).then(d => d.text()) + deepEqual(response, await snap(response)) + }) +}) diff --git a/adex/tests/utils.js b/adex/tests/utils.js new file mode 100644 index 0000000..4922caf --- /dev/null +++ b/adex/tests/utils.js @@ -0,0 +1,96 @@ +import { spawn } from 'node:child_process' +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import { stripColors } from 'kolorist' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +export const dir = (...args) => path.join(__dirname, '..', ...args) + +export const devServerURL = new URL('http://localhost:5173/') + +/** + * Wait for vite dev server to start + * @param {import('node:child_process').ChildProcess} devServerProc + * @returns {Promise} + */ +function waitForServerStart(devServerProc) { + return new Promise((resolve, reject) => { + function onError(err) { + cleanup() + reject(err) + } + + /** @param {number | null} code */ + function onClose(code) { + cleanup() + reject(new Error(`Dev server closed unexpectedly with code "${code}"`)) + } + + let serverReady = false + let stdout = '' + /** @param {Buffer | string} chunk */ + function onData(chunk) { + try { + /** @type {string} */ + const data = Buffer.isBuffer(chunk) + ? chunk.toString('utf-8') + : chunk.toString() + + stdout += data + + const matchableStdout = stripColors(stdout) + + if (matchableStdout.match(/ready\sin\s[0-9]+\sms/g) != null) { + serverReady = true + } + + if (matchableStdout.match(/localhost:(\d+)/) != null) { + const matchedPort = matchableStdout.match(/localhost:(\d+)/) + devServerURL.port = matchedPort[1] + if (serverReady) { + cleanup() + resolve() + } + } + } catch (e) { + reject(e) + } + } + + function cleanup() { + try { + devServerProc.stdout?.off('data', onData) + devServerProc.off('error', onError) + devServerProc.off('close', onClose) + } catch (e) { + reject(e) + } + } + + devServerProc.stdout?.on('data', onData) + devServerProc.on('error', onError) + devServerProc.on('close', onClose) + }) +} + +/** + * @param {string} fixturePath + */ +export async function launchDemoDevServer(fixturePath) { + console.log(`launching on ${dir(fixturePath)}`) + /** @type {import('node:child_process').ChildProcess} */ + const devServerProc = spawn( + process.execPath, + [dir('node_modules/vite/bin/vite.js')], + { cwd: dir(fixturePath), stdio: 'pipe' } + ) + + await waitForServerStart(devServerProc) + + // Ensure the server remains active until the test completes. + process.once('exit', () => { + devServerProc.kill() + }) + + return devServerProc +} diff --git a/adex/vitest.config.ts b/adex/vitest.config.ts new file mode 100644 index 0000000..06ba1d7 --- /dev/null +++ b/adex/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' + +export default defineConfig({ + test: { + hookTimeout: 30_000, + }, +}) diff --git a/package.json b/package.json index c6da7fc..e4a2f25 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "author": "reaper", "scripts": { "play": "pnpm --filter='playground' -r dev", - "test": "echo 'true'", + "test": "pnpm -r test", + "test:ci": "pnpm -r test:ci", "publish:ci": "lerna publish from-git --registry 'https://registry.npmjs.org' --yes", "next": "lerna version --sync-workspace-lock", "nuke": "pnpm -r exec rm -rvf node_modules" diff --git a/playground/vite.config.js b/playground/vite.config.js index 4026052..2ddcaeb 100644 --- a/playground/vite.config.js +++ b/playground/vite.config.js @@ -8,7 +8,6 @@ export default defineConfig({ plugins: [ adex({ islands: false, - ssr: false, fonts: { providers: [providers.google()], families: [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dcc7e5d..a8c24b5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,15 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +catalogs: + default: + '@preact/preset-vite': + specifier: 2.9.1 + version: 2.9.1 + preact: + specifier: 10.24.2 + version: 10.24.2 + overrides: cross-spawn@>=7.0.0 <7.0.5: '>=7.0.5' @@ -72,6 +81,12 @@ importers: specifier: ^0.0.2 version: 0.0.2 devDependencies: + '@barelyhuman/node-snapshot': + specifier: ^0.0.4 + version: 0.0.4 + '@matteo.collina/snap': + specifier: ^0.3.0 + version: 0.3.0 '@preact/preset-vite': specifier: ^2.8.2 version: 2.9.1(@babel/core@7.24.7)(preact@10.24.2)(vite@5.4.8(@types/node@20.16.10)(lightningcss@1.25.1)) @@ -84,6 +99,12 @@ importers: autoprefixer: specifier: ^10.4.19 version: 10.4.20(postcss@8.4.47) + glob: + specifier: ^11.0.1 + version: 11.0.1 + kolorist: + specifier: ^1.8.0 + version: 1.8.0 tailwindcss: specifier: ^3.4.4 version: 3.4.13 @@ -91,6 +112,44 @@ importers: specifier: ^5.3.1 version: 5.4.8(@types/node@20.16.10)(lightningcss@1.25.1) + adex/tests/fixtures/minimal: + dependencies: + '@preact/preset-vite': + specifier: 'catalog:' + version: 2.9.1(@babel/core@7.24.7)(preact@10.24.2)(vite@5.4.8(@types/node@20.16.10)(lightningcss@1.25.1)) + adex: + specifier: workspace:* + version: link:../../.. + preact: + specifier: 'catalog:' + version: 10.24.2 + devDependencies: + vite: + specifier: ^5.4.8 + version: 5.4.8(@types/node@20.16.10)(lightningcss@1.25.1) + + adex/tests/fixtures/minimal-tailwind: + dependencies: + '@preact/preset-vite': + specifier: 'catalog:' + version: 2.9.1(@babel/core@7.24.7)(preact@10.24.2)(vite@5.4.8(@types/node@20.16.10)(lightningcss@1.25.1)) + adex: + specifier: workspace:* + version: link:../../.. + preact: + specifier: 'catalog:' + version: 10.24.2 + devDependencies: + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.47) + tailwindcss: + specifier: ^3 + version: 3.4.13 + vite: + specifier: ^5.4.8 + version: 5.4.8(@types/node@20.16.10)(lightningcss@1.25.1) + create-adex: dependencies: kleur: @@ -267,6 +326,10 @@ packages: peerDependencies: astring: ^1.8.6 + '@barelyhuman/node-snapshot@0.0.4': + resolution: {integrity: sha512-zNd691OYuyIVzeNK+CbyRnTNn4TKOgCPMl2RSMy90yyK/HKf1yd5oFu7wYxn4STruoJ/HjwLrkhgQXPEG0s52w==, tarball: https://registry.npmjs.org/@barelyhuman/node-snapshot/-/node-snapshot-0.0.4.tgz} + engines: {node: '>=18'} + '@barelyhuman/prettier-config@1.1.0': resolution: {integrity: sha512-OlommcxHffkX+BtAsXP1ipK0WzKgNha5a+T+reNlNZZkHPZzZrLpQ23snAbubN4xZiV73Z6E+To02ZZka0eTTQ==, tarball: https://registry.npmjs.org/@barelyhuman/prettier-config/-/prettier-config-1.1.0.tgz} @@ -477,6 +540,10 @@ packages: '@isaacs/string-locale-compare@1.1.0': resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==, tarball: https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz} + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==, tarball: https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==, tarball: https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz} engines: {node: '>=6.0.0'} @@ -544,6 +611,9 @@ packages: resolution: {integrity: sha512-C4CycUp4rgdTGtWYGoa+Ci8EZUsO7b0sAl8Vsdwzjk3g2FRD8d62tpD5Q6drthUQrWRKWpg62rY3q+H+7CGSPg==, tarball: https://registry.npmjs.org/@lerna-lite/version/-/version-3.7.1.tgz} engines: {node: ^18.0.0 || >=20.0.0} + '@matteo.collina/snap@0.3.0': + resolution: {integrity: sha512-CtoSZVegbLSMOoDjy+5TCZFY6juqSpc7P7slP5hx5jTu28ncvouAf1QrBqeLuPimIonU+ekbtkNNOlIl/a6GFw==, tarball: https://registry.npmjs.org/@matteo.collina/snap/-/snap-0.3.0.tgz} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, tarball: https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz} engines: {node: '>= 8'} @@ -818,6 +888,9 @@ packages: resolution: {integrity: sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==, tarball: https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz} engines: {node: ^16.14.0 || >=18.0.0} + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==, tarball: https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz} + '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==, tarball: https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz} engines: {node: '>=18'} @@ -933,6 +1006,10 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz} + engines: {node: '>=10'} + ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz} engines: {node: '>=12'} @@ -1213,8 +1290,8 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==, tarball: https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz} engines: {node: '>= 12'} - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==, tarball: https://registry.npmjs.org/debug/-/debug-4.3.5.tgz} + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==, tarball: https://registry.npmjs.org/debug/-/debug-4.4.0.tgz} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1255,6 +1332,10 @@ packages: didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==, tarball: https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz} + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==, tarball: https://registry.npmjs.org/diff/-/diff-5.2.0.tgz} + engines: {node: '>=0.3.1'} + dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==, tarball: https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz} @@ -1367,6 +1448,10 @@ packages: resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==, tarball: https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==, tarball: https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz} + engines: {node: '>=18'} + foreground-child@3.2.1: resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==, tarball: https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz} engines: {node: '>=14'} @@ -1450,6 +1535,11 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==, tarball: https://registry.npmjs.org/glob/-/glob-10.4.5.tgz} hasBin: true + glob@11.0.1: + resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==, tarball: https://registry.npmjs.org/glob/-/glob-11.0.1.tgz} + engines: {node: 20 || >=22} + hasBin: true + globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, tarball: https://registry.npmjs.org/globals/-/globals-11.12.0.tgz} engines: {node: '>=4'} @@ -1635,6 +1725,10 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==, tarball: https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz} + jackspeak@4.0.3: + resolution: {integrity: sha512-oSwM7q8PTHQWuZAlp995iPpPJ4Vkl7qT0ZRD+9duL9j2oBy6KcTfyxc8mEuHJYC+z/kbps80aJLkaNzTOrf/kw==, tarball: https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.3.tgz} + engines: {node: 20 || >=22} + jiti@1.21.6: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==, tarball: https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz} hasBin: true @@ -1800,6 +1894,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz} + lru-cache@11.0.2: + resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz} @@ -1841,6 +1939,10 @@ packages: resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==, tarball: https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz} hasBin: true + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==, tarball: https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz} + engines: {node: 20 || >=22} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==, tarball: https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz} engines: {node: '>=16 || 14 >=14.17'} @@ -1900,8 +2002,8 @@ packages: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==, tarball: https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz} engines: {node: '>=10'} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, tarball: https://registry.npmjs.org/ms/-/ms-2.1.2.tgz} + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, tarball: https://registry.npmjs.org/ms/-/ms-2.1.3.tgz} mute-stream@1.0.0: resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==, tarball: https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz} @@ -2133,6 +2235,10 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==, tarball: https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==, tarball: https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz} + engines: {node: 20 || >=22} + path-type@5.0.0: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==, tarball: https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz} engines: {node: '>=12'} @@ -2229,6 +2335,10 @@ packages: engines: {node: '>=14'} hasBin: true + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==, tarball: https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + proc-log@4.2.0: resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==, tarball: https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -2271,6 +2381,9 @@ packages: rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==, tarball: https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz} + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==, tarball: https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz} + react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==, tarball: https://registry.npmjs.org/react/-/react-18.3.1.tgz} engines: {node: '>=0.10.0'} @@ -2784,7 +2897,7 @@ snapshots: '@babel/traverse': 7.24.7 '@babel/types': 7.24.7 convert-source-map: 2.0.0 - debug: 4.3.5 + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -2915,7 +3028,7 @@ snapshots: '@babel/helper-split-export-declaration': 7.24.7 '@babel/parser': 7.24.7 '@babel/types': 7.24.7 - debug: 4.3.5 + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -2931,6 +3044,12 @@ snapshots: astring: 1.9.0 xtend: 4.0.2 + '@barelyhuman/node-snapshot@0.0.4': + dependencies: + diff: 5.2.0 + kleur: 4.1.5 + pretty-format: 29.7.0 + '@barelyhuman/prettier-config@1.1.0': {} '@barelyhuman/tiny-use@0.0.2': {} @@ -3120,6 +3239,10 @@ snapshots: '@isaacs/string-locale-compare@1.1.0': {} + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -3304,6 +3427,11 @@ snapshots: - supports-color - typescript + '@matteo.collina/snap@0.3.0': + dependencies: + find-up: 7.0.0 + slash: 5.1.0 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -3523,7 +3651,7 @@ snapshots: '@prefresh/vite': 2.4.6(preact@10.24.2)(vite@5.4.8(@types/node@20.16.10)(lightningcss@1.25.1)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.24.7) - debug: 4.3.5 + debug: 4.4.0 kolorist: 1.8.0 magic-string: 0.30.5 node-html-parser: 6.1.13 @@ -3648,6 +3776,8 @@ snapshots: '@sigstore/core': 1.1.0 '@sigstore/protobuf-specs': 0.3.2 + '@sinclair/typebox@0.27.8': {} + '@sindresorhus/merge-streams@2.3.0': {} '@tailwindcss/forms@0.5.9(tailwindcss@3.4.13)': @@ -3719,7 +3849,7 @@ snapshots: agent-base@7.1.1: dependencies: - debug: 4.3.5 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -3744,6 +3874,8 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.1: {} any-promise@1.3.0: {} @@ -4037,9 +4169,9 @@ snapshots: data-uri-to-buffer@4.0.1: {} - debug@4.3.5: + debug@4.4.0: dependencies: - ms: 2.1.2 + ms: 2.1.3 dedent@1.5.3: {} @@ -4060,6 +4192,8 @@ snapshots: didyoumean@1.2.2: {} + diff@5.2.0: {} + dlv@1.1.3: {} dom-serializer@2.0.0: @@ -4198,6 +4332,12 @@ snapshots: locate-path: 7.2.0 path-exists: 5.0.0 + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + foreground-child@3.2.1: dependencies: cross-spawn: 7.0.6 @@ -4289,6 +4429,15 @@ snapshots: package-json-from-dist: 1.0.0 path-scurry: 1.11.1 + glob@11.0.1: + dependencies: + foreground-child: 3.2.1 + jackspeak: 4.0.3 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 2.0.0 + globals@11.12.0: {} globby@14.0.2: @@ -4334,14 +4483,14 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 - debug: 4.3.5 + debug: 4.4.0 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 - debug: 4.3.5 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -4457,6 +4606,10 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@4.0.3: + dependencies: + '@isaacs/cliui': 8.0.2 + jiti@1.21.6: {} js-tokens@4.0.0: {} @@ -4585,6 +4738,8 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.0.2: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -4629,6 +4784,10 @@ snapshots: mini-svg-data-uri@1.4.4: {} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -4685,7 +4844,7 @@ snapshots: mrmime@2.0.0: {} - ms@2.1.2: {} + ms@2.1.3: {} mute-stream@1.0.0: {} @@ -4941,6 +5100,11 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-scurry@2.0.0: + dependencies: + lru-cache: 11.0.2 + minipass: 7.1.2 + path-type@5.0.0: {} pathe@1.1.2: {} @@ -5017,6 +5181,12 @@ snapshots: prettier@3.3.2: {} + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + proc-log@4.2.0: {} proggy@2.0.0: {} @@ -5048,6 +5218,8 @@ snapshots: defu: 6.1.4 destr: 2.0.3 + react-is@18.3.1: {} + react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -5190,7 +5362,7 @@ snapshots: socks-proxy-agent@8.0.4: dependencies: agent-base: 7.1.1 - debug: 4.3.5 + debug: 4.4.0 socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -5361,7 +5533,7 @@ snapshots: tuf-js@2.2.1: dependencies: '@tufjs/models': 2.0.1 - debug: 4.3.5 + debug: 4.4.0 make-fetch-happen: 13.0.1 transitivePeerDependencies: - supports-color diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ac5f7db..e0a1b25 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,3 +3,8 @@ packages: - create-adex - playground - packages/**/* + - adex/tests/**/* + +catalog: + "preact": 10.24.2 + "@preact/preset-vite": 2.9.1