From 04af90232bd1d8620fd438422d9ca15567477484 Mon Sep 17 00:00:00 2001 From: defunkt-dev Date: Thu, 25 Jun 2026 20:57:46 -0600 Subject: [PATCH 01/29] feat: init commits for marko-store --- .changeset/add-marko-store.md | 5 + knip.json | 4 + packages/marko-store/README.md | 77 ++++ packages/marko-store/eslint.config.js | 6 + packages/marko-store/marko.json | 1 + packages/marko-store/package.json | 72 ++++ packages/marko-store/src/index.ts | 1 + .../marko-store/src/tags/store-atom.marko | 23 + .../marko-store/src/tags/store-selector.marko | 73 ++++ .../tests/fixtures/atom-host.marko | 13 + .../tests/fixtures/selector-host.marko | 12 + .../selector-selector-swap-host.marko | 17 + .../fixtures/selector-source-swap-host.marko | 21 + .../marko-store/tests/fixtures/ssr-atom.marko | 5 + .../fixtures/ssr-object-antipattern.marko | 25 ++ .../tests/fixtures/ssr-selector.marko | 5 + .../marko-store/tests/fixtures/ssr-store.ts | 6 + packages/marko-store/tests/index.test.ts | 37 ++ packages/marko-store/tests/marko.d.ts | 14 + packages/marko-store/tests/setup.ts | 48 +++ packages/marko-store/tests/ssr.test.ts | 58 +++ packages/marko-store/tests/tags.test.ts | 129 ++++++ packages/marko-store/tsconfig.build.json | 7 + packages/marko-store/tsconfig.json | 9 + packages/marko-store/tsdown.config.ts | 18 + packages/marko-store/vitest.config.ts | 18 + pnpm-lock.yaml | 402 ++++++++++++++++++ 27 files changed, 1106 insertions(+) create mode 100644 .changeset/add-marko-store.md create mode 100644 packages/marko-store/README.md create mode 100644 packages/marko-store/eslint.config.js create mode 100644 packages/marko-store/marko.json create mode 100644 packages/marko-store/package.json create mode 100644 packages/marko-store/src/index.ts create mode 100644 packages/marko-store/src/tags/store-atom.marko create mode 100644 packages/marko-store/src/tags/store-selector.marko create mode 100644 packages/marko-store/tests/fixtures/atom-host.marko create mode 100644 packages/marko-store/tests/fixtures/selector-host.marko create mode 100644 packages/marko-store/tests/fixtures/selector-selector-swap-host.marko create mode 100644 packages/marko-store/tests/fixtures/selector-source-swap-host.marko create mode 100644 packages/marko-store/tests/fixtures/ssr-atom.marko create mode 100644 packages/marko-store/tests/fixtures/ssr-object-antipattern.marko create mode 100644 packages/marko-store/tests/fixtures/ssr-selector.marko create mode 100644 packages/marko-store/tests/fixtures/ssr-store.ts create mode 100644 packages/marko-store/tests/index.test.ts create mode 100644 packages/marko-store/tests/marko.d.ts create mode 100644 packages/marko-store/tests/setup.ts create mode 100644 packages/marko-store/tests/ssr.test.ts create mode 100644 packages/marko-store/tests/tags.test.ts create mode 100644 packages/marko-store/tsconfig.build.json create mode 100644 packages/marko-store/tsconfig.json create mode 100644 packages/marko-store/tsdown.config.ts create mode 100644 packages/marko-store/vitest.config.ts diff --git a/.changeset/add-marko-store.md b/.changeset/add-marko-store.md new file mode 100644 index 00000000..da19fc7d --- /dev/null +++ b/.changeset/add-marko-store.md @@ -0,0 +1,5 @@ +--- +"@tanstack/marko-store": minor +--- + +Add `@tanstack/marko-store`, a Marko 6 adapter for TanStack Store. It provides the `` and `` tags — the Marko equivalents of the `useSelector` / `useStore` adapters — and re-exports the full `@tanstack/store` core. diff --git a/knip.json b/knip.json index 7b3bcfa8..5970b825 100644 --- a/knip.json +++ b/knip.json @@ -1,6 +1,10 @@ { "$schema": "https://unpkg.com/knip@5/schema.json", "workspaces": { + "packages/marko-store": { + "entry": ["src/index.ts", "src/tags/**/*.marko"], + "ignoreDependencies": ["marko", "@marko/vite"] + }, "packages/vue-store": { "ignoreDependencies": ["vue2", "vue2.7"] } diff --git a/packages/marko-store/README.md b/packages/marko-store/README.md new file mode 100644 index 00000000..f5f97b59 --- /dev/null +++ b/packages/marko-store/README.md @@ -0,0 +1,77 @@ +# @tanstack/marko-store + +Marko 6 adapter for [TanStack Store](https://tanstack.com/store). + +This package re-exports the entire `@tanstack/store` core and adds two Marko +tags that subscribe a component to a store and re-render only when the value +you select actually changes. + +## Installation + +```sh +npm install @tanstack/store @tanstack/marko-store +``` + +`marko` is a peer dependency (`^6`). + +## Sources are always passed as thunks + +Every tag takes its source through a `from` function — `from=(() => store)`, +never `from=store`. A registered function keeps the (non-serializable) store +inside its closure, which is what lets a component resume on the client after +server rendering. Passing the store object directly would put it into +serializable component state and break resume. `from` must return the same +store instance every call (don't create the store inside the thunk). + +## `` + +Reads a value out of any store or atom and keeps it in sync. With a `selector`, +the tag re-renders only when the selected slice changes. + +```marko +import { createStore } from "@tanstack/store" + +static const store = createStore({ count: 0, name: "Ada" }) + + store) selector=(s => s.count)> +

Count: ${count}

+
+``` + +| Attribute | Required | Description | +| ---------- | -------- | ------------------------------------------------------------------ | +| `from` | yes | Thunk returning the store/atom (`() => store`). | +| `selector` | no | Maps the snapshot to the slice you want. Defaults to the snapshot. | +| `compare` | no | Equality check for the selected slice. Defaults to `===`. | + +Without a `selector` it tracks the whole snapshot. The tag returns the selected +value, so `` binds `x` for use in the body. + +## `` + +Two-way binding for an atom created with `createAtom`. The returned value is +writable: assigning it calls the atom's setter. + +```marko +import { createAtom } from "@tanstack/store" + +static const count = createAtom(0) + + count)> + + +``` + +| Attribute | Required | Description | +| --------- | -------- | ------------------------------------ | +| `from` | yes | Thunk returning the atom (`() => a`). | + +`` is for atoms (it writes via `.set`). For a writable `Store`, read +it with `` and write with `store.setState(...)` directly. + +> Burst writes in a single tick collapse to one update. To apply several +> dependent updates synchronously, use the updater form: `atom.set(p => p + 1)`. + +## License + +MIT diff --git a/packages/marko-store/eslint.config.js b/packages/marko-store/eslint.config.js new file mode 100644 index 00000000..6f7e1f4a --- /dev/null +++ b/packages/marko-store/eslint.config.js @@ -0,0 +1,6 @@ +// @ts-check + +import { defineConfig } from 'eslint/config' +import rootConfig from '../../eslint.config.js' + +export default defineConfig([...rootConfig]) diff --git a/packages/marko-store/marko.json b/packages/marko-store/marko.json new file mode 100644 index 00000000..82bf8ffd --- /dev/null +++ b/packages/marko-store/marko.json @@ -0,0 +1 @@ +{ "tags-dir": "./src/tags", "script-lang": "ts" } diff --git a/packages/marko-store/package.json b/packages/marko-store/package.json new file mode 100644 index 00000000..46fac8db --- /dev/null +++ b/packages/marko-store/package.json @@ -0,0 +1,72 @@ +{ + "name": "@tanstack/marko-store", + "version": "0.11.0", + "description": "Framework agnostic type-safe store w/ reactive framework adapters", + "author": "Tanner Linsley", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/TanStack/store.git", + "directory": "packages/marko-store" + }, + "homepage": "https://tanstack.com/store", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "keywords": [ + "store", + "marko", + "typescript" + ], + "scripts": { + "clean": "premove ./dist ./coverage", + "test:eslint": "eslint ./src ./tests", + "test:types": "pnpm run \"/^test:types:ts[0-9]{2}$/\"", + "test:types:ts56": "node ../../node_modules/typescript56/lib/tsc.js", + "test:types:ts57": "node ../../node_modules/typescript57/lib/tsc.js", + "test:types:ts58": "node ../../node_modules/typescript58/lib/tsc.js", + "test:types:ts59": "tsc", + "test:lib": "vitest", + "test:lib:dev": "pnpm run test:lib --watch", + "test:build": "publint --strict", + "build": "tsdown --tsconfig tsconfig.build.json" + }, + "type": "module", + "types": "./dist/index.d.ts", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + }, + "./package.json": "./package.json", + "./marko.json": "./marko.json", + "./src/tags/*": "./src/tags/*" + }, + "sideEffects": false, + "files": [ + "dist", + "src/tags", + "marko.json", + "README.md" + ], + "dependencies": { + "@tanstack/store": "workspace:*" + }, + "devDependencies": { + "@marko/vite": "^6", + "@testing-library/dom": "^10.4.0", + "marko": "^6" + }, + "peerDependencies": { + "marko": "^6" + } +} diff --git a/packages/marko-store/src/index.ts b/packages/marko-store/src/index.ts new file mode 100644 index 00000000..877b23ea --- /dev/null +++ b/packages/marko-store/src/index.ts @@ -0,0 +1 @@ +export * from '@tanstack/store' diff --git a/packages/marko-store/src/tags/store-atom.marko b/packages/marko-store/src/tags/store-atom.marko new file mode 100644 index 00000000..845c04a3 --- /dev/null +++ b/packages/marko-store/src/tags/store-atom.marko @@ -0,0 +1,23 @@ +export interface Input { + from: () => { + get(): T + set(value: T | ((prev: T) => T)): void + subscribe(listener: (value: T) => void): { unsubscribe(): void } + } +} + + + + void) | null }> + onMount() { + this.unsub = input.from().subscribe((next) => { + value = next as any + }).unsubscribe + } + onDestroy() { + this.unsub?.() + this.unsub = null + } +/> + + diff --git a/packages/marko-store/src/tags/store-selector.marko b/packages/marko-store/src/tags/store-selector.marko new file mode 100644 index 00000000..a8798eb1 --- /dev/null +++ b/packages/marko-store/src/tags/store-selector.marko @@ -0,0 +1,73 @@ +export interface Input { + from: () => { + get(): TSource + subscribe(listener: (value: TSource) => void): { unsubscribe(): void } + } + selector?: (snapshot: TSource) => TSelected + compare?: (a: TSelected, b: TSelected) => boolean +} + + a === b)/> + snapshot))/> + + + void) | null + src: ReturnType["from"]> | null + sel: Input["selector"] + last: unknown +}> + onMount() { + const source = input.from() + this.src = source + this.sel = input.selector + const selector = input.selector ?? ((snapshot: any) => snapshot) + this.last = selector(source.get()) + value = this.last as any + this.unsub = source.subscribe((snapshot) => { + const sel = input.selector ?? ((s: any) => s) + const cmp = input.compare ?? defaultCompare + const next = sel(snapshot) + if (!cmp(this.last as any, next)) { + this.last = next + value = next as any + } + }).unsubscribe + } + + onUpdate() { + const source = input.from() + const selector = input.selector ?? ((snapshot: any) => snapshot) + const cmp = input.compare ?? defaultCompare + if (source !== this.src) { + this.unsub?.() + this.src = source + this.sel = input.selector + this.last = selector(source.get()) + value = this.last as any + this.unsub = source.subscribe((snapshot) => { + const sel = input.selector ?? ((s: any) => s) + const c = input.compare ?? defaultCompare + const next = sel(snapshot) + if (!c(this.last as any, next)) { + this.last = next + value = next as any + } + }).unsubscribe + } else if (input.selector !== this.sel) { + this.sel = input.selector + const next = selector(source.get()) + if (!cmp(this.last as any, next)) { + this.last = next + value = next as any + } + } + } + + onDestroy() { + this.unsub?.() + this.unsub = null + } +/> + + diff --git a/packages/marko-store/tests/fixtures/atom-host.marko b/packages/marko-store/tests/fixtures/atom-host.marko new file mode 100644 index 00000000..43f4a0c4 --- /dev/null +++ b/packages/marko-store/tests/fixtures/atom-host.marko @@ -0,0 +1,13 @@ +import StoreAtom from "../../src/tags/store-atom.marko" + +export interface Input { + from: () => { + get(): any + set(value: any): void + subscribe(listener: (value: any) => void): { unsubscribe(): void } + } +} + + +
${value}
+ diff --git a/packages/marko-store/tests/fixtures/selector-host.marko b/packages/marko-store/tests/fixtures/selector-host.marko new file mode 100644 index 00000000..ca5cc62c --- /dev/null +++ b/packages/marko-store/tests/fixtures/selector-host.marko @@ -0,0 +1,12 @@ +import StoreSelector from "../../src/tags/store-selector.marko" + +export interface Input { + from: () => { + get(): any + subscribe(listener: (value: any) => void): { unsubscribe(): void } + } + selector?: (snapshot: any) => any +} + + +
${value}
diff --git a/packages/marko-store/tests/fixtures/selector-selector-swap-host.marko b/packages/marko-store/tests/fixtures/selector-selector-swap-host.marko new file mode 100644 index 00000000..127a75e2 --- /dev/null +++ b/packages/marko-store/tests/fixtures/selector-selector-swap-host.marko @@ -0,0 +1,17 @@ +import StoreSelector from "../../src/tags/store-selector.marko" + +// Keeps one source but toggles the selector. Flipping it leaves the source equal +// (source === this.src) and changes input.selector, so the tag's onUpdate takes +// the re-seed branch (input.selector !== this.sel). +export interface Input { + from: () => { + get(): any + subscribe(listener: (value: any) => void): { unsubscribe(): void } + } +} + + + s.other) : ((s) => s.count))/> + +
${value}
+ diff --git a/packages/marko-store/tests/fixtures/selector-source-swap-host.marko b/packages/marko-store/tests/fixtures/selector-source-swap-host.marko new file mode 100644 index 00000000..0ea5435c --- /dev/null +++ b/packages/marko-store/tests/fixtures/selector-source-swap-host.marko @@ -0,0 +1,21 @@ +import StoreSelector from "../../src/tags/store-selector.marko" + +// Toggles which of two stores is passed to through `from`. +// Flipping the toggle changes the resolved source, so the tag's onUpdate takes +// the resubscribe-and-re-seed branch (source !== this.src). +export interface Input { + storeA: { + get(): any + subscribe(listener: (value: any) => void): { unsubscribe(): void } + } + storeB: { + get(): any + subscribe(listener: (value: any) => void): { unsubscribe(): void } + } +} + + + + active) selector=(s => s.count)/> +
${value}
+ diff --git a/packages/marko-store/tests/fixtures/ssr-atom.marko b/packages/marko-store/tests/fixtures/ssr-atom.marko new file mode 100644 index 00000000..78e00876 --- /dev/null +++ b/packages/marko-store/tests/fixtures/ssr-atom.marko @@ -0,0 +1,5 @@ +import { countAtom } from "./ssr-store" +import StoreAtom from "../../src/tags/store-atom.marko" + + countAtom)/> +
${value}
diff --git a/packages/marko-store/tests/fixtures/ssr-object-antipattern.marko b/packages/marko-store/tests/fixtures/ssr-object-antipattern.marko new file mode 100644 index 00000000..5cb018ca --- /dev/null +++ b/packages/marko-store/tests/fixtures/ssr-object-antipattern.marko @@ -0,0 +1,25 @@ +// Anti-pattern on purpose: the store arrives as a bare OBJECT attribute and is +// captured in a client-resumable lifecycle closure. The serializer walks the +// attribute value (a Store instance) and rejects. This is the failure the thunk +// channel exists to avoid; the real tags never trigger it because they only ever +// close over the registered `from` function. +export interface Input { + store: { + get(): any + subscribe(listener: (value: any) => void): { unsubscribe(): void } + } +} + + + void) | null }> + onMount() { + this.unsub = input.store.subscribe((next) => { + value = next + }).unsubscribe + } + onDestroy() { + this.unsub?.() + this.unsub = null + } +/> +
${JSON.stringify(value)}
diff --git a/packages/marko-store/tests/fixtures/ssr-selector.marko b/packages/marko-store/tests/fixtures/ssr-selector.marko new file mode 100644 index 00000000..18a12f98 --- /dev/null +++ b/packages/marko-store/tests/fixtures/ssr-selector.marko @@ -0,0 +1,5 @@ +import { counterStore } from "./ssr-store" +import StoreSelector from "../../src/tags/store-selector.marko" + + counterStore) selector=(s => s.count)/> +
${count}
diff --git a/packages/marko-store/tests/fixtures/ssr-store.ts b/packages/marko-store/tests/fixtures/ssr-store.ts new file mode 100644 index 00000000..b1c6949c --- /dev/null +++ b/packages/marko-store/tests/fixtures/ssr-store.ts @@ -0,0 +1,6 @@ +import { createAtom, createStore } from '../../src/index' + +// Module singletons so the SSR fixtures' inline thunks close over a stable, +// compiler-registered reference (see ssr.test.ts header for why this matters). +export const counterStore = createStore({ count: 5, other: 0 }) +export const countAtom = createAtom(7) diff --git a/packages/marko-store/tests/index.test.ts b/packages/marko-store/tests/index.test.ts new file mode 100644 index 00000000..4a87c746 --- /dev/null +++ b/packages/marko-store/tests/index.test.ts @@ -0,0 +1,37 @@ +import { describe, expect, test } from 'vitest' +import { + ReadonlyStore, + Store, + batch, + createAsyncAtom, + createAtom, + createStore, + flush, + shallow, + toObserver, +} from '../src/index' + +describe('@tanstack/marko-store re-exports @tanstack/store', () => { + test('store constructors are present', () => { + expect(typeof createStore).toBe('function') + expect(typeof Store).toBe('function') + expect(typeof ReadonlyStore).toBe('function') + }) + + test('atom constructors are present', () => { + expect(typeof createAtom).toBe('function') + expect(typeof createAsyncAtom).toBe('function') + }) + + test('utilities are present', () => { + for (const fn of [batch, flush, shallow, toObserver]) { + expect(typeof fn).toBe('function') + } + }) + + test('a re-exported store actually works', () => { + const store = createStore({ n: 1 }) + store.setState((prev) => ({ n: prev.n + 1 })) + expect(store.get().n).toBe(2) + }) +}) diff --git a/packages/marko-store/tests/marko.d.ts b/packages/marko-store/tests/marko.d.ts new file mode 100644 index 00000000..8e45baed --- /dev/null +++ b/packages/marko-store/tests/marko.d.ts @@ -0,0 +1,14 @@ +// Ambient declaration for *.marko template imports in tests. +// @marko/vite compiles .marko files to browser templates exposing mount(); the +// SSR (node-environment) tests additionally use the server template's render(), +// for which they cast the import to `any`. We declare the minimal browser shape +// here so the .ts test files type-check without the full Marko language toolchain. +declare module '*.marko' { + const template: { + mount: ( + input: Record, + container: Element | DocumentFragment, + ) => { destroy: () => void } + } + export default template +} diff --git a/packages/marko-store/tests/setup.ts b/packages/marko-store/tests/setup.ts new file mode 100644 index 00000000..9f8bc9d5 --- /dev/null +++ b/packages/marko-store/tests/setup.ts @@ -0,0 +1,48 @@ +/** + * Marko scheduler polyfills for jsdom. + * + * Marko 6's scheduler (schedule.ts) walks queueMicrotask -> requestAnimationFrame + * -> MessageChannel. jsdom's rAF and MessageChannel are unreliable: rAF may never + * fire and MessageChannel may not integrate with the event loop. Without these, + * the module-level `isScheduled` flag sticks after the first scheduled render and + * every later update queues but never flushes. These mirror Marko's own test + * infrastructure (runtime-tags create-browser.ts), as does @tanstack/marko-query. + */ + +if (typeof window !== 'undefined') { + // requestAnimationFrame: batch callbacks, fire on the next macrotask. + let queue: Array | undefined + ;(window as any).requestAnimationFrame = function requestAnimationFrame( + fn: FrameRequestCallback, + ) { + if (queue) { + queue.push(fn) + } else { + queue = [fn] + setTimeout(() => { + const timestamp = performance.now() + const batch = queue! + queue = undefined + for (const cb of batch) cb(timestamp) + }) + } + return 0 + } + ;(window as any).cancelAnimationFrame = () => {} + + // MessageChannel: postMessage -> setImmediate -> queueMicrotask. + ;(window as any).MessageChannel = class MessageChannel { + port1: any + port2: any + constructor() { + this.port1 = { onmessage() {} } + this.port2 = { + postMessage: () => { + setImmediate(() => { + window.queueMicrotask(this.port1.onmessage) + }) + }, + } + } + } +} diff --git a/packages/marko-store/tests/ssr.test.ts b/packages/marko-store/tests/ssr.test.ts new file mode 100644 index 00000000..4b55c8b8 --- /dev/null +++ b/packages/marko-store/tests/ssr.test.ts @@ -0,0 +1,58 @@ +// @vitest-environment node +// +// Server-render guard. The node environment is deliberate: vitest then uses +// @marko/vite's HTML (server) transform, so Marko's serializer actually runs -- +// the path the jsdom client-mount tests never touch, and where a non-serializable +// value would crash on resume. +// +// The positive cases prove the thunk channel (from={() => store}) survives SSR: +// the tag closes over the registered thunk function, so the store stays inside +// the closure and is never walked by the serializer. The SSR fixtures define the +// thunk INLINE (compiler-registered) over a module-singleton store -- a thunk +// created in this .ts file would itself be an unregistered function and fail to +// serialize. +// +// The keystone guard proves the failure mode the thunk channel exists to avoid: +// a store passed as a bare OBJECT attribute is captured in a resumable closure, +// the attribute value is walked, and serialization rejects. + +import { describe, expect, it } from 'vitest' +import SsrSelector from './fixtures/ssr-selector.marko' +import SsrAtom from './fixtures/ssr-atom.marko' +import SsrObjectAntipattern from './fixtures/ssr-object-antipattern.marko' +import { counterStore } from './fixtures/ssr-store' + +async function renderToString( + template: any, + input: Record, +): Promise { + let out = '' + for await (const chunk of template.render(input)) out += String(chunk) + return out +} + +const cell = (html: string, id: string): string | null => { + const m = html.match(new RegExp(`data-testid=["']?${id}["']?>([^<]*)`)) + return m?.[1] ?? null +} + +describe('SSR render — thunk channel', () => { + it(' renders server-side and seeds the selected value', async () => { + await expect(renderToString(SsrSelector, {})).resolves.toBeTypeOf('string') + const html = await renderToString(SsrSelector, {}) + expect(cell(html, 'count')).toBe('5') + }) + + it(' renders server-side and seeds the value', async () => { + const html = await renderToString(SsrAtom, {}) + expect(cell(html, 'value')).toBe('7') + }) +}) + +describe('SSR keystone guard — why sources must be thunks', () => { + it('rejects when a store is passed as a bare object attribute', async () => { + await expect( + renderToString(SsrObjectAntipattern, { store: counterStore }), + ).rejects.toThrow(/serialize/i) + }) +}) diff --git a/packages/marko-store/tests/tags.test.ts b/packages/marko-store/tests/tags.test.ts new file mode 100644 index 00000000..14d1a094 --- /dev/null +++ b/packages/marko-store/tests/tags.test.ts @@ -0,0 +1,129 @@ +/** + * Tag-level integration tests for and . + * + * We call template.mount() directly (the Marko 6 DOM API) instead of using + * @marko/testing-library: its v6 detection (`!template.renderSync`) misfires on + * Marko 6 browser templates — which DO have renderSync — and takes the Marko + * 3/4 path, calling a render() that browser templates don't expose. The same + * workaround is used by @tanstack/marko-virtual. @marko/vite compiles the .marko + * fixtures to browser templates in jsdom, and waitFor() retries until Marko's + * rAF-based reactive flush completes. + * + * Each test creates a FRESH store/atom and passes it as a thunk (from: () => x). + * Client mounts never serialize, so a test-created thunk is fine here; the SSR + * tests (ssr.test.ts) cover the resume/serialization path separately. + */ + +import { afterEach, describe, expect, test } from 'vitest' +import { waitFor } from '@testing-library/dom' +import { createAtom, createStore } from '../src/index' +import SelectorHostTemplate from './fixtures/selector-host.marko' +import AtomHostTemplate from './fixtures/atom-host.marko' +import SourceSwapHostTemplate from './fixtures/selector-source-swap-host.marko' +import SelectorSwapHostTemplate from './fixtures/selector-selector-swap-host.marko' + +const SelectorHost = SelectorHostTemplate as any +const AtomHost = AtomHostTemplate as any +const SourceSwapHost = SourceSwapHostTemplate as any +const SelectorSwapHost = SelectorSwapHostTemplate as any + +const instances: Array<{ destroy: () => void }> = [] + +function mount(Template: any, input: Record = {}) { + const container = document.createElement('div') + document.body.appendChild(container) + instances.push(Template.mount(input, container)) + return container +} + +afterEach(() => { + instances.forEach((i) => i.destroy()) + instances.length = 0 + document.body.innerHTML = '' +}) + +const cell = (el: Element, id: string) => + el.querySelector(`[data-testid='${id}']`)?.textContent ?? null + +describe(' read path', () => { + test('seeds from the store and updates when the selected slice changes', async () => { + const store = createStore({ count: 5, other: 0 }) + const el = mount(SelectorHost, { + from: () => store, + selector: (s: { count: number }) => s.count, + }) + expect(cell(el, 'value')).toBe('5') + + store.setState((s) => ({ ...s, count: s.count + 1 })) + await waitFor(() => expect(cell(el, 'value')).toBe('6')) + }) + + test('dedupes when an unrelated field changes', async () => { + const store = createStore({ count: 5, other: 0 }) + const el = mount(SelectorHost, { + from: () => store, + selector: (s: { count: number }) => s.count, + }) + await waitFor(() => expect(cell(el, 'value')).toBe('5')) + + // The selected slice (count) is unchanged, so the tag must not re-render. + store.setState((s) => ({ ...s, other: s.other + 99 })) + await new Promise((resolve) => setTimeout(resolve, 20)) + expect(cell(el, 'value')).toBe('5') + }) +}) + +describe(' write path', () => { + test('echoes a write back through valueChange without looping', async () => { + const atom = createAtom(7) + const el = mount(AtomHost, { from: () => atom }) + expect(cell(el, 'value')).toBe('7') + ;(el.querySelector("[data-testid='inc']") as HTMLElement).dispatchEvent( + new MouseEvent('click', { bubbles: true }), + ) + + await waitFor(() => expect(cell(el, 'value')).toBe('8')) + expect(atom.get()).toBe(8) + }) +}) + +describe(' onUpdate', () => { + test('resubscribes and re-seeds when the source store changes', async () => { + const storeA = createStore({ count: 1, other: 0 }) + const storeB = createStore({ count: 100, other: 0 }) + const el = mount(SourceSwapHost, { storeA, storeB }) + expect(cell(el, 'value')).toBe('1') + + // Swap the source: a new resolved store reaches onUpdate, which unsubscribes + // from the old one, re-seeds from the new one, and subscribes to it. + ;(el.querySelector("[data-testid='swap']") as HTMLElement).dispatchEvent( + new MouseEvent('click', { bubbles: true }), + ) + await waitFor(() => expect(cell(el, 'value')).toBe('100')) + + // Updates to the new source now flow through. + storeB.setState((s) => ({ ...s, count: 101 })) + await waitFor(() => expect(cell(el, 'value')).toBe('101')) + + // The old source is no longer observed. + storeA.setState((s) => ({ ...s, count: 999 })) + await new Promise((resolve) => setTimeout(resolve, 20)) + expect(cell(el, 'value')).toBe('101') + }) + + test('re-seeds when the selector changes against the same source', async () => { + const store = createStore({ count: 5, other: 42 }) + const el = mount(SelectorSwapHost, { from: () => store }) + expect(cell(el, 'value')).toBe('5') + + // Swap the selector: same source, so onUpdate re-seeds with the new selection. + ;( + el.querySelector("[data-testid='swap-selector']") as HTMLElement + ).dispatchEvent(new MouseEvent('click', { bubbles: true })) + await waitFor(() => expect(cell(el, 'value')).toBe('42')) + + // The live subscription reflects the new selector on the next change. + store.setState((s) => ({ ...s, other: 43 })) + await waitFor(() => expect(cell(el, 'value')).toBe('43')) + }) +}); diff --git a/packages/marko-store/tsconfig.build.json b/packages/marko-store/tsconfig.build.json new file mode 100644 index 00000000..89dadab5 --- /dev/null +++ b/packages/marko-store/tsconfig.build.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "paths": {} + }, + "include": ["src"] +} diff --git a/packages/marko-store/tsconfig.json b/packages/marko-store/tsconfig.json new file mode 100644 index 00000000..95732870 --- /dev/null +++ b/packages/marko-store/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "paths": { + "@tanstack/store": ["../store/src"] + } + }, + "include": ["src/**/*.ts", "tests/**/*.ts", "eslint.config.js", "vitest.config.ts"] +} diff --git a/packages/marko-store/tsdown.config.ts b/packages/marko-store/tsdown.config.ts new file mode 100644 index 00000000..918fd624 --- /dev/null +++ b/packages/marko-store/tsdown.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from 'tsdown' + +export default defineConfig({ + entry: ['./src/index.ts'], + format: ['esm', 'cjs'], + unbundle: true, + dts: true, + sourcemap: true, + clean: true, + minify: false, + fixedExtension: false, + // NOTE: unlike react-store, `exports: true` is intentionally NOT set here. + // tsdown's `exports: true` rewrites package.json "exports" from the built + // entries only, which wipes the hand-authored ".marko" tag subpaths + // ("./marko.json", "./src/tags/*") — those ship as source, not built output. + // We maintain "exports" by hand in package.json. publint --strict still runs. + publint: { strict: true }, +}) diff --git a/packages/marko-store/vitest.config.ts b/packages/marko-store/vitest.config.ts new file mode 100644 index 00000000..d7e035bc --- /dev/null +++ b/packages/marko-store/vitest.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from 'vitest/config' +import marko from '@marko/vite' +import packageJson from './package.json' + +// @marko/vite is an app plugin (it sets up SSR + browser transforms) and is +// used by vitest only — never by the library build (tsdown handles that). +export default defineConfig({ + plugins: [marko() as any], + test: { + name: packageJson.name, + dir: './tests', + watch: false, + environment: 'jsdom', + setupFiles: ['./tests/setup.ts'], + coverage: { enabled: true, provider: 'istanbul', include: ['src/**/*'] }, + typecheck: { enabled: true }, + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c5cfedcb..9400894a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -999,6 +999,22 @@ importers: specifier: ^3.3.1 version: 3.3.2 + packages/marko-store: + dependencies: + '@tanstack/store': + specifier: workspace:* + version: link:../store + devDependencies: + '@marko/vite': + specifier: ^6 + version: 6.1.0(@marko/compiler@5.39.66)(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + '@testing-library/dom': + specifier: ^10.4.0 + version: 10.4.1 + marko: + specifier: ^6 + version: 6.1.18 + packages/preact-store: dependencies: '@tanstack/store': @@ -2051,6 +2067,10 @@ packages: '@changesets/write@0.4.0': resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} + '@chialab/estransform@0.19.1': + resolution: {integrity: sha512-Op0TvQxnzdcnBriFUIjgg3V3MpOB9Cfs4S7TvIuypPegFOSvuFAOcPl5V02NJ9dyGoOc8W6ORbSldc5PYKhOCQ==} + engines: {node: '>=18'} + '@csstools/color-helpers@6.0.2': resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} engines: {node: '>=20.19.0'} @@ -2890,12 +2910,26 @@ packages: cpu: [x64] os: [win32] + '@luxass/strip-json-comments@1.4.0': + resolution: {integrity: sha512-Zl343to4u/t8jz1q7R/1UY6hLX+344cwPLEXsIYthVwdU5zyjuVBGcpf2E24+QZkwFfRfmnHTcscreQzWn3hiA==} + engines: {node: '>=18'} + '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@marko/compiler@5.39.66': + resolution: {integrity: sha512-Xky1vqj1wh8o0Cps/RRgo5p4i8DL+YOSFMvViFfRCTXbMMFNMFH6gUtk1S/oA9yIouhL1iULpxp3F87oWa2ZbA==} + engines: {node: 18 || 20 || >=22} + + '@marko/vite@6.1.0': + resolution: {integrity: sha512-aZrtaDehP4FebYm5GQIqgzyWNvEOeSPDufD1JF6UvN0AhQqyPVLgM25644dxvQSCbNoaOFNb+GQj1V/9Nn9PBw==} + peerDependencies: + '@marko/compiler': ^5 + vite: ^8 + '@mdn/browser-compat-data@5.7.6': resolution: {integrity: sha512-7xdrMX0Wk7grrTZQwAoy1GkvPMFoizStUoL+VmtUkAxegbCCec+3FKwOM6yc/uGU5+BEczQHXAlWiqvM8JeENg==} @@ -2942,6 +2976,88 @@ packages: cpu: [x64] os: [win32] + '@napi-rs/magic-string-android-arm-eabi@0.3.4': + resolution: {integrity: sha512-sszAYxqtzzJ4FDerDNHcqL9NhqPhj8W4DNiOanXYy50mA5oojlRtaAFPiB5ZMrWDBM32v5Q30LrmxQ4eTtu2Dg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@napi-rs/magic-string-android-arm64@0.3.4': + resolution: {integrity: sha512-jdQ6HuO0X5rkX4MauTcWR4HWdgjakTOmmzqXg8L26+jOHVVG1LZE+Su5qvV4bP8vMb2h+vPE+JsnwqSmWymu3Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/magic-string-darwin-arm64@0.3.4': + resolution: {integrity: sha512-6NmMtvURce9/oq09XBZmuIeI6lPLGtEJ2ZPO/QzL3nLZa6wygiCnO/sFACKYNg5/73ET5HMMTeuogE1JI+r2Lw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/magic-string-darwin-x64@0.3.4': + resolution: {integrity: sha512-f9LmfMiUAKDOtl0meOuLYeVb6OERrgGzrTg1Tn3R3fTAShM2kxRbfAuPE9ljuXxIFzOv/uqRNLSl/LqCJwpREA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/magic-string-freebsd-x64@0.3.4': + resolution: {integrity: sha512-rqduQ4odiDK4QdM45xHWRTU4wtFIfpp8g8QGpz+3qqg7ivldDqbbNOrBaf6Oeu77uuEvWggnkyuChotfKgJdJQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/magic-string-linux-arm-gnueabihf@0.3.4': + resolution: {integrity: sha512-pVaJEdEpiPqIfq3M4+yMAATS7Z9muDcWYn8H7GFH1ygh8GwgLgKfy/n/lG2M6zp18Mwd0x7E2E/qg9GgCyUzoQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/magic-string-linux-arm64-gnu@0.3.4': + resolution: {integrity: sha512-9FwoAih/0tzEZx0BjYYIxWkSRMjonIn91RFM3q3MBs/evmThXUYXUqLNa1PPIkK1JoksswtDi48qWWLt8nGflQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/magic-string-linux-arm64-musl@0.3.4': + resolution: {integrity: sha512-wCR7R+WPOcAKmVQc1s6h6HwfwW1vL9pM8BjUY9Ljkdb8wt1LmZEmV2Sgfc1SfbRQzbyl+pKeufP6adRRQVzYDA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/magic-string-linux-x64-gnu@0.3.4': + resolution: {integrity: sha512-sbxFDpYnt5WFbxQ1xozwOvh5A7IftqSI0WnE9O7KsQIOi0ej2dvFbfOW4tmFkvH/YP8KJELo5AhP2+kEq1DpYA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/magic-string-linux-x64-musl@0.3.4': + resolution: {integrity: sha512-jN4h/7e2Ul8v3UK5IZu38NXLMdzVWhY4uEDlnwuUAhwRh26wBQ1/pLD97Uy/Z3dFNBQPcsv60XS9fOM1YDNT6w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/magic-string-win32-arm64-msvc@0.3.4': + resolution: {integrity: sha512-gMUyTRHLWpzX2ntJFCbW2Gnla9Y/WUmbkZuW5SBAo/Jo8QojHn76Y4PNgnoXdzcsV9b/45RBxurYKAfFg9WTyg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/magic-string-win32-ia32-msvc@0.3.4': + resolution: {integrity: sha512-QIMauMOvEHgL00K9np/c9CT/CRtLOz3mRTQqcZ9XGzSoAMrpxH71KSpDJrKl7h7Ro6TZ+hJ0C3T+JVuTCZNv4A==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/magic-string-win32-x64-msvc@0.3.4': + resolution: {integrity: sha512-V8FMSf828MzOI3P6/765MR7zHU6CUZqiyPhmAnwYoKFNxfv7oCviN/G6NcENeCdcYOvNgh5fYzaNLB96ndId5A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/magic-string@0.3.4': + resolution: {integrity: sha512-DEWl/B99RQsyMT3F9bvrXuhL01/eIQp/dtNSE3G1jQ4mTGRcP4iHWxoPZ577WrbjUinrNgvRA5+08g8fkPgimQ==} + engines: {node: '>= 10'} + '@napi-rs/nice-android-arm-eabi@1.1.1': resolution: {integrity: sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==} engines: {node: '>= 10'} @@ -3206,12 +3322,22 @@ packages: cpu: [arm64] os: [darwin] + '@oxc-parser/binding-darwin-arm64@0.8.0': + resolution: {integrity: sha512-3Dws5Wzj9efojjqvhS4ZF+Abh0EoiI5ciOE2kdLifMzSg4fnmYAIOktoUnPEo87TNIb4SiFJ5JgPBgEyq42Eow==} + cpu: [arm64] + os: [darwin] + '@oxc-parser/binding-darwin-x64@0.121.0': resolution: {integrity: sha512-SsHzipdxTKUs3I9EOAPmnIimEeJOemqRlRDOp9LIj+96wtxZejF51gNibmoGq8KoqbT1ssAI5po/E3J+vEtXGA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] + '@oxc-parser/binding-darwin-x64@0.8.0': + resolution: {integrity: sha512-DAUJ/mfq0Jn2VDYn69bhHTsIWj+aZ/viamexFwaLL7ntkIFmGpzAJZUlWofpY1IRJynKWW+P5AOLYXMllw4qUw==} + cpu: [x64] + os: [darwin] + '@oxc-parser/binding-freebsd-x64@0.121.0': resolution: {integrity: sha512-v1APOTkCp+RWOIDAHRoaeW/UoaHF15a60E8eUL6kUQXh+i4K7PBwq2Wi7jm8p0ymID5/m/oC1w3W31Z/+r7HQw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3237,6 +3363,12 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-arm64-gnu@0.8.0': + resolution: {integrity: sha512-ZHQVey/O4K3zTIKtpfsbtJIE8MPTRHRxgY3dejaoeFQGf9C3HasgF132Yp4zN/jOUx+x8czKPVa/Af40ViyhGQ==} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-arm64-musl@0.121.0': resolution: {integrity: sha512-qT663J/W8yQFw3dtscbEi9LKJevr20V7uWs2MPGTnvNZ3rm8anhhE16gXGpxDOHeg9raySaSHKhd4IGa3YZvuw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3244,6 +3376,12 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-linux-arm64-musl@0.8.0': + resolution: {integrity: sha512-Diw+Tnf5v+zAYXzDoSKCZsMaroU6GoqZMS7smfDtFnZYTHWZrsTmPBLUQe7AFiG7O7tkhsCdcWjOYgbVkrSVOA==} + cpu: [arm64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-linux-ppc64-gnu@0.121.0': resolution: {integrity: sha512-mYNe4NhVvDBbPkAP8JaVS8lC1dsoJZWH5WCjpw5E+sjhk1R08wt3NnXYUzum7tIiWPfgQxbCMcoxgeemFASbRw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3279,6 +3417,12 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-x64-gnu@0.8.0': + resolution: {integrity: sha512-WloqcRrtQUVEP/Sy8ZeEgF0HgBKQjOv3zLFZqbC5ipkerKriGcVbsq3fOIMOi/55AM6/UhIAjeZGnoeco72JjQ==} + cpu: [x64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-x64-musl@0.121.0': resolution: {integrity: sha512-P9KlyTpuBuMi3NRGpJO8MicuGZfOoqZVRP1WjOecwx8yk4L/+mrCRNc5egSi0byhuReblBF2oVoDSMgV9Bj4Hw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3286,6 +3430,12 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-linux-x64-musl@0.8.0': + resolution: {integrity: sha512-2j7BD9szwSXTvSj0Q8VE98UHGYvrgZzdLy4EyB0FilhQnopEfz+YV674rWGY2Il1VYxHJwGctrTJHvARolu37g==} + cpu: [x64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-openharmony-arm64@0.121.0': resolution: {integrity: sha512-R+4jrWOfF2OAPPhj3Eb3U5CaKNAH9/btMveMULIrcNW/hjfysFQlF8wE0GaVBr81dWz8JLgQlsxwctoL78JwXw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3303,6 +3453,12 @@ packages: cpu: [arm64] os: [win32] + '@oxc-parser/binding-win32-arm64-msvc@0.8.0': + resolution: {integrity: sha512-mcomr1og17yCmnwn8Q7CRzrH9Va0HccWe4Ld3/u/elBsw0SEzYGVvECRzCyRglYAbKTtusz7as9Jee0RiMOMmg==} + cpu: [arm64] + os: [win32] + libc: [null] + '@oxc-parser/binding-win32-ia32-msvc@0.121.0': resolution: {integrity: sha512-4Ob1qvYMPnlF2N9rdmKdkQFdrq16QVcQwBsO8yiPZXof0fHKFF+LmQV501XFbi7lHyrKm8rlJRfQ/M8bZZPVLw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3315,6 +3471,12 @@ packages: cpu: [x64] os: [win32] + '@oxc-parser/binding-win32-x64-msvc@0.8.0': + resolution: {integrity: sha512-nIBkc1KZOVYUaHT3+U+gM354P3byMAIXMvlmLMbs0kWVRcI4vrzL8qwWpC6QdBQxWKZGqPEqGolv8H4dDYA9nQ==} + cpu: [x64] + os: [win32] + libc: [null] + '@oxc-project/types@0.113.0': resolution: {integrity: sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA==} @@ -3438,6 +3600,10 @@ packages: '@package-json/types@0.0.12': resolution: {integrity: sha512-uu43FGU34B5VM9mCNjXCwLaGHYjXdNincqKLaraaCW+7S2+SmiBg1Nv8bPnmschrIfZmfKNY9f3fC376MRrObw==} + '@parcel/source-map@2.1.1': + resolution: {integrity: sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==} + engines: {node: ^12.18.3 || >=14} + '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} engines: {node: '>= 10.0.0'} @@ -5111,6 +5277,9 @@ packages: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} @@ -5186,6 +5355,9 @@ packages: compare-versions@6.1.1: resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + complain@1.6.1: + resolution: {integrity: sha512-WsiVAbAPcPSwyC5k8g/PLceaW0MXJUw61KqBd9uiyDOSuDIC6Ho/EbyhdFjeV6wq44R2g/b8IFpvV/1ZyXiqUQ==} + compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -5413,6 +5585,11 @@ packages: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -5567,6 +5744,9 @@ packages: error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + es-abstract@1.24.1: resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} engines: {node: '>= 0.4'} @@ -5586,6 +5766,9 @@ packages: resolution: {integrity: sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ==} engines: {node: '>= 0.4'} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.0.0: resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} @@ -5906,6 +6089,10 @@ packages: fast-uri@3.1.2: resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -6195,6 +6382,9 @@ packages: html-link-extractor@1.0.5: resolution: {integrity: sha512-ADd49pudM157uWHwHQPUSX4ssMsvR/yHIswOR5CUfBdK9g9ZYGMhVSE6KZVHJ6kCkR0gH4htsfzU6zECDNVwyw==} + htmljs-parser@5.11.0: + resolution: {integrity: sha512-YXdNqYB/FChJMpCG+UfVS/q/zfFErui92zIIduCFT71C3F6+lZWE4K6l5nGfFWQ2w4GCkgH/eEWQ1nWayBXIDQ==} + htmlparser2@10.1.0: resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} @@ -6691,6 +6881,12 @@ packages: kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + lasso-caching-fs@1.0.2: + resolution: {integrity: sha512-mudop0s8U3tLm3Fn9lhiZsiELpLeJToEo6RlDLdph7vWRxL9Sz0o+9WUw1IwlpCYXv/P0CLsMYWFgPwIKWEYvg==} + + lasso-package-root@1.0.1: + resolution: {integrity: sha512-j6LnauNCldqSDvOxoKpD6sTzudPGMiwcZQbySoF9KvJ0lD9Dp2t6QZF8kC0jbUDHuQPiAo5RuQ/mC3AGXscUYA==} + launch-editor@2.13.2: resolution: {integrity: sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==} @@ -6924,6 +7120,10 @@ packages: engines: {node: '>= 20'} hasBin: true + marko@6.1.18: + resolution: {integrity: sha512-gBYHZwsGINVz+2QEhV+mreocTF9JDa/cSndJafp+yGH1v9pudOtYLdLuPMP4ZPnaWvJwuAfmfUF1Xul4s3UEuQ==} + engines: {node: '>=22'} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -7325,6 +7525,9 @@ packages: resolution: {integrity: sha512-ek9o58+SCv6AV7nchiAcUJy1DNE2CC5WRdBcO0mF+W4oRjNQfPO7b3pLjTHSFECpHkKGOZSQxx3hk8viIL5YCg==} engines: {node: ^20.19.0 || >=22.12.0} + oxc-parser@0.8.0: + resolution: {integrity: sha512-ObPeMkbDX7igb7NyyAC8CbVC3fY+YmlMsxsRQ2oyFBkpQtI5tjoyqSDKbS9A9EcJvt2q89C4UoC+HjVBdLYYJg==} + oxc-resolver@11.19.1: resolution: {integrity: sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg==} @@ -7666,6 +7869,15 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} + raptor-async@1.1.3: + resolution: {integrity: sha512-VZCxygWMjW9lKqnApK9D2QbfyzRn7ehiTqnXWwMCLBXANSy+xbnYfbX/5f8YX3bZXu+g+JESmqWPchIQrZj2ig==} + + raptor-regexp@1.0.1: + resolution: {integrity: sha512-DqC7ViHJUs3jLIxJI1/HVvCu3yPJaP8CM7PGsHvjimg7yJ3lLOdCBxlPE0G2Q8OJgUA8Pe7nvhm6lcQ3hZepow==} + + raptor-util@3.2.0: + resolution: {integrity: sha512-uEDMMkBCJvjTqYMBnJNxn+neiS6a0rhybQNA9RaexGor1uvKjwyHA5VcbZMZEuqXhKUWbL+WNS7PhuZVZNB7pw==} + raw-body@2.5.3: resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} engines: {node: '>= 0.8'} @@ -7751,6 +7963,9 @@ packages: resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} hasBin: true + relative-import-path@1.0.0: + resolution: {integrity: sha512-ZvbtoduKQmD4PZeJPfH6Ql21qUWhaMxiHkIsH+FUnZqKDwNIXBtGg5zRZyHWomiGYk8n5+KMBPK7Mi4D0XWfNg==} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -7939,6 +8154,10 @@ packages: select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + self-closing-tags@1.0.1: + resolution: {integrity: sha512-7t6hNbYMxM+VHXTgJmxwgZgLGktuXtVVD5AivWzNTdJBM4DBjnDKDzkf2SrNjihaArpeJYNjxkELBu1evI4lQA==} + engines: {node: '>=0.12.0'} + selfsigned@5.5.0: resolution: {integrity: sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==} engines: {node: '>=18'} @@ -8195,6 +8414,9 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} @@ -10442,6 +10664,14 @@ snapshots: human-id: 4.1.3 prettier: 2.8.8 + '@chialab/estransform@0.19.1': + dependencies: + '@napi-rs/magic-string': 0.3.4 + '@parcel/source-map': 2.1.1 + cjs-module-lexer: 1.4.3 + es-module-lexer: 1.7.0 + oxc-parser: 0.8.0 + '@csstools/color-helpers@6.0.2': {} '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': @@ -11125,6 +11355,8 @@ snapshots: '@lmdb/lmdb-win32-x64@3.5.1': optional: true + '@luxass/strip-json-comments@1.4.0': {} + '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.29.2 @@ -11141,6 +11373,37 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 + '@marko/compiler@5.39.66': + dependencies: + '@luxass/strip-json-comments': 1.4.0 + complain: 1.6.1 + he: 1.2.0 + htmljs-parser: 5.11.0 + jsesc: 3.1.0 + kleur: 4.1.5 + lasso-package-root: 1.0.1 + raptor-regexp: 1.0.1 + raptor-util: 3.2.0 + relative-import-path: 1.0.0 + resolve-from: 5.0.0 + self-closing-tags: 1.0.1 + source-map-support: 0.5.21 + + '@marko/vite@6.1.0(@marko/compiler@5.39.66)(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))': + dependencies: + '@chialab/estransform': 0.19.1 + '@marko/compiler': 5.39.66 + anymatch: 3.1.3 + domelementtype: 2.3.0 + domhandler: 5.0.3 + fast-glob: 3.3.3 + htmljs-parser: 5.11.0 + htmlparser2: 10.1.0 + relative-import-path: 1.0.0 + resolve: 1.22.11 + resolve.exports: 2.0.3 + vite: 8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + '@mdn/browser-compat-data@5.7.6': {} '@mdn/browser-compat-data@6.1.5': {} @@ -11185,6 +11448,61 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': optional: true + '@napi-rs/magic-string-android-arm-eabi@0.3.4': + optional: true + + '@napi-rs/magic-string-android-arm64@0.3.4': + optional: true + + '@napi-rs/magic-string-darwin-arm64@0.3.4': + optional: true + + '@napi-rs/magic-string-darwin-x64@0.3.4': + optional: true + + '@napi-rs/magic-string-freebsd-x64@0.3.4': + optional: true + + '@napi-rs/magic-string-linux-arm-gnueabihf@0.3.4': + optional: true + + '@napi-rs/magic-string-linux-arm64-gnu@0.3.4': + optional: true + + '@napi-rs/magic-string-linux-arm64-musl@0.3.4': + optional: true + + '@napi-rs/magic-string-linux-x64-gnu@0.3.4': + optional: true + + '@napi-rs/magic-string-linux-x64-musl@0.3.4': + optional: true + + '@napi-rs/magic-string-win32-arm64-msvc@0.3.4': + optional: true + + '@napi-rs/magic-string-win32-ia32-msvc@0.3.4': + optional: true + + '@napi-rs/magic-string-win32-x64-msvc@0.3.4': + optional: true + + '@napi-rs/magic-string@0.3.4': + optionalDependencies: + '@napi-rs/magic-string-android-arm-eabi': 0.3.4 + '@napi-rs/magic-string-android-arm64': 0.3.4 + '@napi-rs/magic-string-darwin-arm64': 0.3.4 + '@napi-rs/magic-string-darwin-x64': 0.3.4 + '@napi-rs/magic-string-freebsd-x64': 0.3.4 + '@napi-rs/magic-string-linux-arm-gnueabihf': 0.3.4 + '@napi-rs/magic-string-linux-arm64-gnu': 0.3.4 + '@napi-rs/magic-string-linux-arm64-musl': 0.3.4 + '@napi-rs/magic-string-linux-x64-gnu': 0.3.4 + '@napi-rs/magic-string-linux-x64-musl': 0.3.4 + '@napi-rs/magic-string-win32-arm64-msvc': 0.3.4 + '@napi-rs/magic-string-win32-ia32-msvc': 0.3.4 + '@napi-rs/magic-string-win32-x64-msvc': 0.3.4 + '@napi-rs/nice-android-arm-eabi@1.1.1': optional: true @@ -11400,9 +11718,15 @@ snapshots: '@oxc-parser/binding-darwin-arm64@0.121.0': optional: true + '@oxc-parser/binding-darwin-arm64@0.8.0': + optional: true + '@oxc-parser/binding-darwin-x64@0.121.0': optional: true + '@oxc-parser/binding-darwin-x64@0.8.0': + optional: true + '@oxc-parser/binding-freebsd-x64@0.121.0': optional: true @@ -11415,9 +11739,15 @@ snapshots: '@oxc-parser/binding-linux-arm64-gnu@0.121.0': optional: true + '@oxc-parser/binding-linux-arm64-gnu@0.8.0': + optional: true + '@oxc-parser/binding-linux-arm64-musl@0.121.0': optional: true + '@oxc-parser/binding-linux-arm64-musl@0.8.0': + optional: true + '@oxc-parser/binding-linux-ppc64-gnu@0.121.0': optional: true @@ -11433,9 +11763,15 @@ snapshots: '@oxc-parser/binding-linux-x64-gnu@0.121.0': optional: true + '@oxc-parser/binding-linux-x64-gnu@0.8.0': + optional: true + '@oxc-parser/binding-linux-x64-musl@0.121.0': optional: true + '@oxc-parser/binding-linux-x64-musl@0.8.0': + optional: true + '@oxc-parser/binding-openharmony-arm64@0.121.0': optional: true @@ -11450,12 +11786,18 @@ snapshots: '@oxc-parser/binding-win32-arm64-msvc@0.121.0': optional: true + '@oxc-parser/binding-win32-arm64-msvc@0.8.0': + optional: true + '@oxc-parser/binding-win32-ia32-msvc@0.121.0': optional: true '@oxc-parser/binding-win32-x64-msvc@0.121.0': optional: true + '@oxc-parser/binding-win32-x64-msvc@0.8.0': + optional: true + '@oxc-project/types@0.113.0': {} '@oxc-project/types@0.121.0': {} @@ -11531,6 +11873,10 @@ snapshots: '@package-json/types@0.0.12': {} + '@parcel/source-map@2.1.1': + dependencies: + detect-libc: 1.0.3 + '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -13295,6 +13641,8 @@ snapshots: chrome-trace-event@1.0.4: {} + cjs-module-lexer@1.4.3: {} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 @@ -13358,6 +13706,10 @@ snapshots: compare-versions@6.1.1: {} + complain@1.6.1: + dependencies: + error-stack-parser: 2.1.4 + compressible@2.0.18: dependencies: mime-db: 1.54.0 @@ -13589,6 +13941,8 @@ snapshots: detect-indent@6.1.0: {} + detect-libc@1.0.3: {} + detect-libc@2.1.2: {} detect-node@2.1.0: {} @@ -13718,6 +14072,10 @@ snapshots: dependencies: is-arrayish: 0.2.1 + error-stack-parser@2.1.4: + dependencies: + stackframe: 1.3.4 + es-abstract@1.24.1: dependencies: array-buffer-byte-length: 1.0.2 @@ -13811,6 +14169,8 @@ snapshots: math-intrinsics: 1.1.0 safe-array-concat: 1.1.3 + es-module-lexer@1.7.0: {} + es-module-lexer@2.0.0: {} es-object-atoms@1.1.1: @@ -14352,6 +14712,8 @@ snapshots: fast-uri@3.1.2: {} + fastest-levenshtein@1.0.16: {} + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -14649,6 +15011,8 @@ snapshots: dependencies: cheerio: 1.2.0 + htmljs-parser@5.11.0: {} + htmlparser2@10.1.0: dependencies: domelementtype: 2.3.0 @@ -15150,6 +15514,14 @@ snapshots: kolorist@1.8.0: {} + lasso-caching-fs@1.0.2: + dependencies: + raptor-async: 1.1.3 + + lasso-package-root@1.0.1: + dependencies: + lasso-caching-fs: 1.0.2 + launch-editor@2.13.2: dependencies: picocolors: 1.1.1 @@ -15401,6 +15773,13 @@ snapshots: marked@17.0.5: {} + marko@6.1.18: + dependencies: + '@marko/compiler': 5.39.66 + csstype: 3.2.3 + fastest-levenshtein: 1.0.16 + magic-string: 0.30.21 + math-intrinsics@1.1.0: {} mdn-data@2.27.1: {} @@ -15894,6 +16273,17 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' + oxc-parser@0.8.0: + optionalDependencies: + '@oxc-parser/binding-darwin-arm64': 0.8.0 + '@oxc-parser/binding-darwin-x64': 0.8.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.8.0 + '@oxc-parser/binding-linux-arm64-musl': 0.8.0 + '@oxc-parser/binding-linux-x64-gnu': 0.8.0 + '@oxc-parser/binding-linux-x64-musl': 0.8.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.8.0 + '@oxc-parser/binding-win32-x64-msvc': 0.8.0 + oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): optionalDependencies: '@oxc-resolver/binding-android-arm-eabi': 11.19.1 @@ -16232,6 +16622,12 @@ snapshots: range-parser@1.2.1: {} + raptor-async@1.1.3: {} + + raptor-regexp@1.0.1: {} + + raptor-util@3.2.0: {} + raw-body@2.5.3: dependencies: bytes: 3.1.2 @@ -16340,6 +16736,8 @@ snapshots: dependencies: jsesc: 3.1.0 + relative-import-path@1.0.0: {} + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -16596,6 +16994,8 @@ snapshots: select-hose@2.0.0: {} + self-closing-tags@1.0.1: {} + selfsigned@5.5.0: dependencies: '@peculiar/x509': 1.14.3 @@ -16914,6 +17314,8 @@ snapshots: stackback@0.0.2: {} + stackframe@1.3.4: {} + statuses@1.5.0: {} statuses@2.0.2: {} From 6ac2983607541455bc5a08270a8df1ee91435f7b Mon Sep 17 00:00:00 2001 From: defunkt-dev Date: Thu, 25 Jun 2026 21:40:25 -0600 Subject: [PATCH 02/29] fix type issues --- knip.json | 2 +- packages/marko-store/package.json | 5 +- .../marko-store/src/tags/store-atom.marko | 2 +- .../marko-store/src/tags/store-selector.marko | 10 +- .../selector-selector-swap-host.marko | 2 +- .../fixtures/selector-source-swap-host.marko | 2 +- .../fixtures/ssr-object-antipattern.marko | 2 +- .../tests/fixtures/ssr-selector.marko | 2 +- packages/marko-store/tests/tags.test.ts | 2 +- packages/marko-store/tsconfig.marko.json | 14 + .../marko-store/tsconfig.marko.tsbuildinfo | 1 + pnpm-lock.yaml | 417 ++++++++++++++++-- 12 files changed, 419 insertions(+), 42 deletions(-) create mode 100644 packages/marko-store/tsconfig.marko.json create mode 100644 packages/marko-store/tsconfig.marko.tsbuildinfo diff --git a/knip.json b/knip.json index 5970b825..15da7038 100644 --- a/knip.json +++ b/knip.json @@ -3,7 +3,7 @@ "workspaces": { "packages/marko-store": { "entry": ["src/index.ts", "src/tags/**/*.marko"], - "ignoreDependencies": ["marko", "@marko/vite"] + "ignoreDependencies": ["@marko/language-tools", "@marko/type-check", "@marko/vite", "marko"] }, "packages/vue-store": { "ignoreDependencies": ["vue2", "vue2.7"] diff --git a/packages/marko-store/package.json b/packages/marko-store/package.json index 46fac8db..95e9e635 100644 --- a/packages/marko-store/package.json +++ b/packages/marko-store/package.json @@ -22,11 +22,12 @@ "scripts": { "clean": "premove ./dist ./coverage", "test:eslint": "eslint ./src ./tests", - "test:types": "pnpm run \"/^test:types:ts[0-9]{2}$/\"", + "test:types": "pnpm run \"/^test:types:ts[0-9]{2}$/\" && pnpm run test:types:marko", "test:types:ts56": "node ../../node_modules/typescript56/lib/tsc.js", "test:types:ts57": "node ../../node_modules/typescript57/lib/tsc.js", "test:types:ts58": "node ../../node_modules/typescript58/lib/tsc.js", "test:types:ts59": "tsc", + "test:types:marko": "marko-type-check -p tsconfig.marko.json", "test:lib": "vitest", "test:lib:dev": "pnpm run test:lib --watch", "test:build": "publint --strict", @@ -62,6 +63,8 @@ "@tanstack/store": "workspace:*" }, "devDependencies": { + "@marko/language-tools": "^2.6.0", + "@marko/type-check": "^3.1.0", "@marko/vite": "^6", "@testing-library/dom": "^10.4.0", "marko": "^6" diff --git a/packages/marko-store/src/tags/store-atom.marko b/packages/marko-store/src/tags/store-atom.marko index 845c04a3..0bf40133 100644 --- a/packages/marko-store/src/tags/store-atom.marko +++ b/packages/marko-store/src/tags/store-atom.marko @@ -8,7 +8,7 @@ export interface Input { - void) | null }> + void) | null }> onMount() { this.unsub = input.from().subscribe((next) => { value = next as any diff --git a/packages/marko-store/src/tags/store-selector.marko b/packages/marko-store/src/tags/store-selector.marko index a8798eb1..fa1200b2 100644 --- a/packages/marko-store/src/tags/store-selector.marko +++ b/packages/marko-store/src/tags/store-selector.marko @@ -7,15 +7,15 @@ export interface Input { compare?: (a: TSelected, b: TSelected) => boolean } - a === b)/> + a === b)/> snapshot))/> void) | null - src: ReturnType["from"]> | null - sel: Input["selector"] - last: unknown + unsub?: (() => void) | null + src?: ReturnType["from"]> | null + sel?: Input["selector"] + last?: unknown }> onMount() { const source = input.from() diff --git a/packages/marko-store/tests/fixtures/selector-selector-swap-host.marko b/packages/marko-store/tests/fixtures/selector-selector-swap-host.marko index 127a75e2..554219f3 100644 --- a/packages/marko-store/tests/fixtures/selector-selector-swap-host.marko +++ b/packages/marko-store/tests/fixtures/selector-selector-swap-host.marko @@ -11,7 +11,7 @@ export interface Input { } - s.other) : ((s) => s.count))/> + s.other) : ((s: any) => s.count))/>
${value}
diff --git a/packages/marko-store/tests/fixtures/selector-source-swap-host.marko b/packages/marko-store/tests/fixtures/selector-source-swap-host.marko index 0ea5435c..2ca471ab 100644 --- a/packages/marko-store/tests/fixtures/selector-source-swap-host.marko +++ b/packages/marko-store/tests/fixtures/selector-source-swap-host.marko @@ -16,6 +16,6 @@ export interface Input { - active) selector=(s => s.count)/> + active) selector=((s: any) => s.count)/>
${value}
diff --git a/packages/marko-store/tests/fixtures/ssr-object-antipattern.marko b/packages/marko-store/tests/fixtures/ssr-object-antipattern.marko index 5cb018ca..94dd6969 100644 --- a/packages/marko-store/tests/fixtures/ssr-object-antipattern.marko +++ b/packages/marko-store/tests/fixtures/ssr-object-antipattern.marko @@ -11,7 +11,7 @@ export interface Input { } - void) | null }> + void) | null }> onMount() { this.unsub = input.store.subscribe((next) => { value = next diff --git a/packages/marko-store/tests/fixtures/ssr-selector.marko b/packages/marko-store/tests/fixtures/ssr-selector.marko index 18a12f98..5f9a266b 100644 --- a/packages/marko-store/tests/fixtures/ssr-selector.marko +++ b/packages/marko-store/tests/fixtures/ssr-selector.marko @@ -1,5 +1,5 @@ import { counterStore } from "./ssr-store" import StoreSelector from "../../src/tags/store-selector.marko" - counterStore) selector=(s => s.count)/> + counterStore) selector=((s: any) => s.count)/>
${count}
diff --git a/packages/marko-store/tests/tags.test.ts b/packages/marko-store/tests/tags.test.ts index 14d1a094..f17a974e 100644 --- a/packages/marko-store/tests/tags.test.ts +++ b/packages/marko-store/tests/tags.test.ts @@ -126,4 +126,4 @@ describe(' onUpdate', () => { store.setState((s) => ({ ...s, other: 43 })) await waitFor(() => expect(cell(el, 'value')).toBe('43')) }) -}); +}) diff --git a/packages/marko-store/tsconfig.marko.json b/packages/marko-store/tsconfig.marko.json new file mode 100644 index 00000000..3d1d5546 --- /dev/null +++ b/packages/marko-store/tsconfig.marko.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": true, + "paths": {}, + "types": ["node"] + }, + "include": [ + "src/**/*.ts", + "src/**/*.marko", + "tests/**/*.ts", + "tests/**/*.marko" + ] +} diff --git a/packages/marko-store/tsconfig.marko.tsbuildinfo b/packages/marko-store/tsconfig.marko.tsbuildinfo new file mode 100644 index 00000000..797fe624 --- /dev/null +++ b/packages/marko-store/tsconfig.marko.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2025.float16.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../store/dist/alien.d.ts","../store/dist/types.d.ts","../store/dist/atom.d.ts","../store/dist/store.d.ts","../store/dist/shallow.d.ts","../store/dist/index.d.ts","./src/index.ts","../../node_modules/.pnpm/marko@6.1.18/node_modules/marko/tags/let.d.marko","../../node_modules/.pnpm/marko@6.1.18/node_modules/marko/tags/lifecycle.d.marko","./src/tags/store-atom.marko","../../node_modules/.pnpm/marko@6.1.18/node_modules/marko/tags/const.d.marko","./src/tags/store-selector.marko","../../node_modules/.pnpm/@vitest+pretty-format@4.1.4/node_modules/@vitest/pretty-format/dist/index.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/display.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/types.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/helpers.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/timers.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/index.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/types.d-bcelap-c.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/diff.d.ts","../../node_modules/.pnpm/@vitest+runner@4.1.4/node_modules/@vitest/runner/dist/tasks.d-bh0ijn67.d.ts","../../node_modules/.pnpm/@vitest+runner@4.1.4/node_modules/@vitest/runner/dist/index.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/traces.d.402v_yfi.d.ts","../../node_modules/.pnpm/vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4.2_sass@1.97.3_terser@5.46.0_yaml@2.8.3/node_modules/vite/types/hmrpayload.d.ts","../../node_modules/.pnpm/vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4.2_sass@1.97.3_terser@5.46.0_yaml@2.8.3/node_modules/vite/dist/node/chunks/modulerunnertransport.d.ts","../../node_modules/.pnpm/vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4.2_sass@1.97.3_terser@5.46.0_yaml@2.8.3/node_modules/vite/types/customevent.d.ts","../../node_modules/.pnpm/vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4.2_sass@1.97.3_terser@5.46.0_yaml@2.8.3/node_modules/vite/types/hot.d.ts","../../node_modules/.pnpm/vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4.2_sass@1.97.3_terser@5.46.0_yaml@2.8.3/node_modules/vite/dist/node/module-runner.d.ts","../../node_modules/.pnpm/@vitest+snapshot@4.1.4/node_modules/@vitest/snapshot/dist/environment.d-dojxxzv9.d.ts","../../node_modules/.pnpm/@vitest+snapshot@4.1.4/node_modules/@vitest/snapshot/dist/rawsnapshot.d-d_x3-62x.d.ts","../../node_modules/.pnpm/@vitest+snapshot@4.1.4/node_modules/@vitest/snapshot/dist/index.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/config.d.chuh6-ad.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/environment.d.crsxczp1.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/rpc.d.bfmwpdph.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/worker.d.ccknuvi5.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/browser.d.c0zgu1u9.d.ts","../../node_modules/.pnpm/@vitest+spy@4.1.4/node_modules/@vitest/spy/optional-types.d.ts","../../node_modules/.pnpm/@vitest+spy@4.1.4/node_modules/@vitest/spy/dist/index.d.ts","../../node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.d.ts","../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../../node_modules/.pnpm/@vitest+expect@4.1.4/node_modules/@vitest/expect/dist/index.d.ts","../../node_modules/.pnpm/@vitest+runner@4.1.4/node_modules/@vitest/runner/dist/utils.d.ts","../../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/benchmark.d.daahlpsq.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/global.d.d74z04p1.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/optional-runtime-types.d.ts","../../node_modules/.pnpm/@vitest+mocker@4.1.4_vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4._52529e11fbc5270d800772cd5a3414fe/node_modules/@vitest/mocker/dist/types.d-bji5eawu.d.ts","../../node_modules/.pnpm/@vitest+mocker@4.1.4_vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4._52529e11fbc5270d800772cd5a3414fe/node_modules/@vitest/mocker/dist/index.d-b41z0auw.d.ts","../../node_modules/.pnpm/@vitest+mocker@4.1.4_vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4._52529e11fbc5270d800772cd5a3414fe/node_modules/@vitest/mocker/dist/index.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/suite.d.udjtyagw.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/evaluatedmodules.d.bxj5omdx.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/runners.d.ts","../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/index.d.ts","./tests/index.test.ts","./tests/marko.d.ts","./tests/setup.ts","./tests/fixtures/ssr-store.ts","./tests/fixtures/ssr-selector.marko","./tests/fixtures/ssr-atom.marko","./tests/fixtures/ssr-object-antipattern.marko","./tests/ssr.test.ts","../../node_modules/.pnpm/@types+aria-query@5.0.4/node_modules/@types/aria-query/index.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/matches.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/wait-for.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/query-helpers.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/queries.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/get-queries-for-element.d.ts","../../node_modules/.pnpm/pretty-format@27.5.1/node_modules/pretty-format/build/types.d.ts","../../node_modules/.pnpm/pretty-format@27.5.1/node_modules/pretty-format/build/index.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/screen.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/wait-for-element-to-be-removed.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/get-node-text.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/events.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/pretty-dom.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/role-helpers.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/config.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/suggestions.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/index.d.ts","./tests/fixtures/selector-host.marko","./tests/fixtures/atom-host.marko","./tests/fixtures/selector-source-swap-host.marko","./tests/fixtures/selector-selector-swap-host.marko","./tests/tags.test.ts","../../node_modules/.pnpm/@marko+language-tools@2.6.0/node_modules/@marko/language-tools/marko.internal.d.ts","../../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../../node_modules/.pnpm/marko@6.1.18/node_modules/marko/tags-html.d.ts","../../node_modules/.pnpm/marko@6.1.18/node_modules/marko/index.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/blob.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/console.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/crypto.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/encoding.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/utility.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/client-stats.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/round-robin-pool.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/h2c-client.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-call-history.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/snapshot-agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/cache-interceptor.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/importmeta.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/messaging.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/performance.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/streams.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/timers.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/url.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/inspector/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/path/posix.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/path/win32.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/quic.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/test/reporters.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/util/types.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/index.d.ts"],"fileIdsList":[[159,222,230,234,237,239,240,241,254],[135,159,222,230,234,237,239,240,241,254],[132,133,134,135,136,139,140,141,142,143,144,145,146,159,222,230,234,237,239,240,241,254],[131,159,222,230,234,237,239,240,241,254],[138,159,222,230,234,237,239,240,241,254],[132,133,134,159,222,230,234,237,239,240,241,254],[132,133,159,222,230,234,237,239,240,241,254],[135,136,138,159,222,230,234,237,239,240,241,254],[133,159,222,230,234,237,239,240,241,254],[102,103,159,222,230,234,237,239,240,241,254],[159,219,220,222,230,234,237,239,240,241,254],[159,221,222,230,234,237,239,240,241,254],[222,230,234,237,239,240,241,254],[159,222,230,234,237,239,240,241,254,262],[159,222,223,228,230,233,234,237,239,240,241,243,254,259,271],[159,222,223,224,230,233,234,237,239,240,241,254],[159,222,225,230,234,237,239,240,241,254,272],[159,222,226,227,230,234,237,239,240,241,245,254],[159,222,227,230,234,237,239,240,241,254,259,268],[159,222,228,230,233,234,237,239,240,241,243,254],[159,221,222,229,230,234,237,239,240,241,254],[159,222,230,231,234,237,239,240,241,254],[159,222,230,232,233,234,237,239,240,241,254],[159,221,222,230,233,234,237,239,240,241,254],[159,222,230,233,234,235,237,239,240,241,254,259,271],[159,222,230,233,234,235,237,239,240,241,254,259,262],[159,209,222,230,233,234,236,237,239,240,241,243,254,259,271],[159,222,230,233,234,236,237,239,240,241,243,254,259,268,271],[159,222,230,234,236,237,238,239,240,241,254,259,268,271],[157,158,159,160,161,162,163,164,165,166,167,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278],[159,222,230,233,234,237,239,240,241,254],[159,222,230,234,237,239,241,254],[159,222,230,234,237,239,240,241,242,254,271],[159,222,230,233,234,237,239,240,241,243,254,259],[159,222,230,234,237,239,240,241,245,254],[159,222,230,234,237,239,240,241,246,254],[159,222,230,233,234,237,239,240,241,249,254],[159,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278],[159,222,230,234,237,239,240,241,251,254],[159,222,230,234,237,239,240,241,252,254],[159,222,227,230,234,237,239,240,241,243,254,262],[159,222,230,233,234,237,239,240,241,254,255],[159,222,230,234,237,239,240,241,254,256,272,275],[159,222,230,233,234,237,239,240,241,254,259,261,262],[159,222,230,234,237,239,240,241,254,260,262],[159,222,230,234,237,239,240,241,254,262,272],[159,222,230,234,237,239,240,241,254,263],[159,219,222,230,234,237,239,240,241,254,259,265,271],[159,222,230,234,237,239,240,241,254,259,264],[159,222,230,233,234,237,239,240,241,254,266,267],[159,222,230,234,237,239,240,241,254,266,267],[159,222,227,230,234,237,239,240,241,243,254,259,268],[159,222,230,234,237,239,240,241,254,269],[159,222,230,234,237,239,240,241,243,254,270],[159,222,230,234,236,237,239,240,241,252,254,271],[159,222,230,234,237,239,240,241,254,272,273],[159,222,227,230,234,237,239,240,241,254,273],[159,222,230,234,237,239,240,241,254,259,274],[159,222,230,234,237,239,240,241,242,254,275],[159,222,230,234,237,239,240,241,254,276],[159,222,225,230,234,237,239,240,241,254],[159,222,227,230,234,237,239,240,241,254],[159,222,230,234,237,239,240,241,254,272],[159,209,222,230,234,237,239,240,241,254],[159,222,230,234,237,239,240,241,254,271],[159,222,230,234,237,239,240,241,254,277],[159,222,230,234,237,239,240,241,249,254],[159,222,230,234,237,239,240,241,254,267],[159,209,222,230,233,234,235,237,239,240,241,249,254,259,262,271,274,275,277],[159,222,230,234,237,239,240,241,254,259,278],[75,81,99,100,101,104,159,222,230,234,237,239,240,241,254],[111,159,222,230,234,237,239,240,241,254],[111,112,159,222,230,234,237,239,240,241,254],[79,81,82,159,222,230,234,237,239,240,241,254],[79,81,159,222,230,234,237,239,240,241,254],[79,159,222,230,234,237,239,240,241,254],[74,79,90,91,159,222,230,234,237,239,240,241,254],[74,79,90,159,222,230,234,237,239,240,241,254],[98,159,222,230,234,237,239,240,241,254],[74,80,159,222,230,234,237,239,240,241,254],[74,159,222,230,234,237,239,240,241,254],[76,159,222,230,234,237,239,240,241,254],[74,75,76,77,78,159,222,230,234,237,239,240,241,254],[117,118,159,222,230,234,237,239,240,241,254],[117,118,119,120,159,222,230,234,237,239,240,241,254],[117,119,159,222,230,234,237,239,240,241,254],[117,159,222,230,234,237,239,240,241,254],[124,155,159,222,230,234,237,239,240,241,254],[154,159,222,230,234,237,239,240,241,254],[137,159,222,230,234,237,239,240,241,254],[159,174,177,180,181,222,230,234,237,239,240,241,254,271],[159,177,222,230,234,237,239,240,241,254,259,271],[159,177,181,222,230,234,237,239,240,241,254,271],[159,222,230,234,237,239,240,241,254,259],[159,171,222,230,234,237,239,240,241,254],[159,175,222,230,234,237,239,240,241,254],[159,173,174,177,222,230,234,237,239,240,241,254,271],[159,222,230,234,237,239,240,241,243,254,268],[159,222,230,234,237,239,240,241,254,279],[159,171,222,230,234,237,239,240,241,254,279],[159,173,177,222,230,234,237,239,240,241,243,254,271],[159,168,169,170,172,176,222,230,233,234,237,239,240,241,254,259,271],[159,177,186,194,222,230,234,237,239,240,241,254],[159,169,175,222,230,234,237,239,240,241,254],[159,177,203,204,222,230,234,237,239,240,241,254],[159,169,172,177,222,230,234,237,239,240,241,254,262,271,279],[159,177,222,230,234,237,239,240,241,254],[159,173,177,222,230,234,237,239,240,241,254,271],[159,168,222,230,234,237,239,240,241,254],[159,171,172,173,175,176,177,178,179,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,204,205,206,207,208,222,230,234,237,239,240,241,254],[159,177,196,199,222,230,234,237,239,240,241,254],[159,177,186,187,188,222,230,234,237,239,240,241,254],[159,175,177,187,189,222,230,234,237,239,240,241,254],[159,176,222,230,234,237,239,240,241,254],[159,169,171,177,222,230,234,237,239,240,241,254],[159,177,181,187,189,222,230,234,237,239,240,241,254],[159,181,222,230,234,237,239,240,241,254],[159,175,177,180,222,230,234,237,239,240,241,254,271],[159,169,173,177,186,222,230,234,237,239,240,241,254],[159,177,196,222,230,234,237,239,240,241,254],[159,189,222,230,234,237,239,240,241,254],[159,171,177,203,222,230,234,237,239,240,241,254,262,277,279],[85,159,222,230,234,237,239,240,241,254],[85,86,87,88,159,222,230,234,237,239,240,241,254],[87,159,222,230,234,237,239,240,241,254],[83,106,107,109,159,222,230,234,237,239,240,241,254],[83,84,96,109,159,222,230,234,237,239,240,241,254],[74,81,83,92,109,159,222,230,234,237,239,240,241,254],[89,159,222,230,234,237,239,240,241,254],[74,83,92,95,105,108,109,159,222,230,234,237,239,240,241,254],[83,84,89,92,109,159,222,230,234,237,239,240,241,254],[83,106,107,108,109,159,222,230,234,237,239,240,241,254],[83,89,93,94,95,109,159,222,230,234,237,239,240,241,254],[74,79,81,83,84,89,92,93,94,95,96,97,99,105,106,107,108,109,110,113,114,115,116,121,159,222,230,234,237,239,240,241,254],[74,81,83,84,92,93,106,107,108,109,114,159,222,230,234,237,239,240,241,254],[67,159,222,230,234,237,239,240,241,254],[69,70,159,222,230,234,237,239,240,241,254],[69,70,72,159,222,230,234,237,239,240,241,254],[71,159,222,230,234,237,239,240,241,254],[73,159,222,230,234,237,239,240,241,254],[69,72,73,159,222,230,234,237,239,240,241,254],[71,126,159,222,230,234,237,239,240,241,254],[73,126,159,222,230,234,237,239,240,241,254],[68,159,222,230,234,237,239,240,241,254],[68,122,159,222,230,234,237,239,240,241,254],[122,126,127,128,129,159,222,230,234,237,239,240,241,254],[68,122,147,148,149,150,151,159,222,230,234,237,239,240,241,254],[63,159,222,230,234,237,239,240,241,254],[63,64,65,66,159,222,230,234,237,239,240,241,254],[62,159,222,230,234,237,239,240,241,254]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},"39f13fb4279fe07702c870642a2ec26db019d3afdb5b369523c45c77ed266c65","51aae950c97b61105064619e52f8b4e702ed9d88f6a38d8a6d461389be28dd0b","08a8feab6868367d5112474f9015e5b00c101012a639309e88fb105f94ced534","a15a870f6ab5a26a7eb91ddd8c47ff4e00bc23ece96ab48ff8aaf42450478a50","73390a82cbd5ea87d8bcdf183d66853207a111de00a8512c68ca17b47a11e65d","53755d0e8037d36720dc68e2e8c77512698befd0c0d48ac5d20c41986df91bc2","e746dbf4e43b9e40b9965f1cbe15f029b066423b294c6a69ea7f2f9cd9091758","2e88396eb16a936421ad6de3e2da7a7b","41f7e591762f7ab63f1cae9baad59534","b320bf9f32b091f50800df8894392fd5","10faacc9b67dd33e042f567ac9343c13","28934f4e9d4f4ee2fabd4e20e127c9d5",{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"3b0a56d056d81a011e484b9c05d5e430711aaecd561a788bad1d0498aad782c7","impliedFormat":99},{"version":"9443967db823b66d1682be7fc66392be7c7924e10c3e54900f456341e94591a6","impliedFormat":99},{"version":"424f71d1fae96ac2e878af92345bb87bea1d29f757228fbc190133b305643f2c","impliedFormat":99},{"version":"ac3d263474022e9a14c43f588f485d549641d839b159ecc971978b90f34bdf6b","impliedFormat":99},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"de4a612aa8f1704af486f701e21993c786ba7d8cfed55fffa6684026aea2346e","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"8887e70871f697fa42ad7cdf32168db60ec2d6760c173c97973e35377fe5d83b","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"6bb6d57454370324434bcf355942dee45b0e0d8ab0fa3e98bafe8a30718273b4","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"a86701e56b10a6d1ef9b2ecaeedbab94ed7b957a646cd71fd09d02b323c6d3d7","impliedFormat":99},{"version":"976932e3807786cdae46ed5dfcd02c44f3fa25c157a0e8392f5a2dabb9a14a4e","impliedFormat":99},{"version":"59b7a8ec1781284f6602af48487b68fc3baadf34cb4cbcbb31f213b6712fac34","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"ed9bb55ddcbebd5cb3eee991f57ff21438546ee40ee1c310281bd12a6c7cf65b","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"4c3d12ac5744ff4ba2e1ce97ec307f09d726b4cfcfd5eff3315ccc080d620fb9","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"abdaf8c2f20089a6b23a6287007ed16f9cf76d0045ce2973a5f8508c87286d21","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"8c9917efcdf61e9b9a73ac1e289c612f12db33519ca1445cca41865f7887c737","impliedFormat":99},"dc7de349426eeba24b0424219a61ef400d6fbbd9a75ce1a924964f33066e20a7","59ec10f39bff3eaf54f0ab11a2da8097a235519d4c2bebfff514ea3d83b4e3fa",{"version":"943627b96a61dbb76261f6cdf0192ae32ffd49ad466a87595e8fba1f748db814","affectsGlobalScope":true},"d513ea666385f2c8007e764e582e9ddb7bdcfe686eadf102be053e25ff9eb265","2adc3d8d9e7018f11f8f95f9772804f3","7e82a2d918950e6553231ada223aa21b","0a6ebd564b9cd399aab7fe4b29804fc5","c68a896d1a455d98f7b068f6c3e99c445b4c01c8dad8cd40c60804eab919e452",{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"3cfb7c0c642b19fb75132154040bb7cd840f0002f9955b14154e69611b9b3f81","impliedFormat":1},{"version":"8387ec1601cf6b8948672537cf8d430431ba0d87b1f9537b4597c1ab8d3ade5b","impliedFormat":1},{"version":"d16f1c460b1ca9158e030fdf3641e1de11135e0c7169d3e8cf17cc4cc35d5e64","impliedFormat":1},{"version":"a934063af84f8117b8ce51851c1af2b76efe960aa4c7b48d0343a1b15c01aedf","impliedFormat":1},{"version":"e3c5ad476eb2fca8505aee5bdfdf9bf11760df5d0f9545db23f12a5c4d72a718","impliedFormat":1},{"version":"462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","impliedFormat":1},{"version":"5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","impliedFormat":1},{"version":"d0570ce419fb38287e7b39c910b468becb5b2278cf33b1000a3d3e82a46ecae2","impliedFormat":1},{"version":"3aca7f4260dad9dcc0a0333654cb3cde6664d34a553ec06c953bce11151764d7","impliedFormat":1},{"version":"a0a6f0095f25f08a7129bc4d7cb8438039ec422dc341218d274e1e5131115988","impliedFormat":1},{"version":"b58f396fe4cfe5a0e4d594996bc8c1bfe25496fbc66cf169d41ac3c139418c77","impliedFormat":1},{"version":"45785e608b3d380c79e21957a6d1467e1206ac0281644e43e8ed6498808ace72","impliedFormat":1},{"version":"bece27602416508ba946868ad34d09997911016dbd6893fb884633017f74e2c5","impliedFormat":1},{"version":"2a90177ebaef25de89351de964c2c601ab54d6e3a157cba60d9cd3eaf5a5ee1a","impliedFormat":1},{"version":"82200e963d3c767976a5a9f41ecf8c65eca14a6b33dcbe00214fcbe959698c46","impliedFormat":1},{"version":"b4966c503c08bbd9e834037a8ab60e5f53c5fd1092e8873c4a1c344806acdab2","impliedFormat":1},"cbff6d86c61506feebebf2e5204c3a2e","77c5d8fa66f03d542472c4a343d84f8e","cc1ca60428e3906aa45dfb1d3b4dba23","0fc1985168c5d611789e82c0701bae48","70db4230f2c1d9974206ad3b904757972593c2fd2bec0d28ee474bc7a44ba6d0",{"version":"c265bff524f49bce83a4b52c16325e5bafbf5ee5b68e4544ceac12d8f1fcd7c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"bf987531ac8c5b5a795bbac840e92daea5b135ecdec6371c143e8d116599079f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b059875943da7c4555bb340cffea782dcc789d9cd633deed4fc1f856356f5784","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4137ebf04166f3a325f056aa56101adc75e9dceb30404a1844eb8604d89770e2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"8caeb65fdc3bfe0d13f86f67324fcb2d858ed1c55f1f0cce892eb1acfb9f3239","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"e3905f6902f0b69e5eefc230daa69fdd4ab707a973ec2d086d65af1b3ea47ef0","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"07e4e61e946a9c15045539ecd5f5d2d02e7aab6fa82567826857e09cf0f37c2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c4714ccc29149efb8777a1da0b04b8d2258f5d13ddbf4cd3c3d361fb531ac86","impliedFormat":1},{"version":"3ff275f84f89f8a7c0543da838f9da9614201abc4ce74c533029825adfb4433d","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"f9713757bcdfa4d58b48c0fb249e752c94a3eee8bf4532b906094246ac49ef88","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"6fe28249ac0c7bc19a79aa9264baf00efbd080e868dbe1d3052033ad1c64f206","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"ce8653341224f8b45ff46d2a06f2cacb96f841f768a886c9d8dd8ec0878b11bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"a74edb3bab7394a9dbde529d60632be590def2f5f01024dbd85441587fbfbbe0","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"00049ccc87f3f37726db03c01ca68fe74fd9c0109b68c29eb9923ebec2c76b13","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"68d3f35108e2608b1f2f28b36d19d7055f31c4465cc5692cbd06c716a9fe7973","impliedFormat":1},{"version":"a6d543044570fbeed13a7f9925a868081cd2b14ef59cdd9da6ae76d41cab03d3","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"eab2f3179607acb3d44b2db2a76dd7d621c5039b145dc160a1ee733963f9d2f5","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"6f5383b3df1cdf4ff1aa7fb0850f77042b5786b5e65ec9a9b6be56ebfe4d9036","impliedFormat":1},{"version":"62fc21ed9ccbd83bd1166de277a4b5daaa8d15b5fa614c75610d20f3b73fba87","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"c77fb31bc17fd241d3922a9f88c59e3361cdf76d1328ba9412fc6bf7310b638d","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"694b812e0ed11285e8822cf8131e3ce7083a500b3b1d185fff9ed1089677bd0a","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1}],"root":[68,71,73,[123,130],[148,153],156],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"allowUnreachableCode":false,"allowUnusedLabels":false,"checkJs":true,"composite":true,"declaration":true,"esModuleInterop":true,"module":99,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[153,1],[101,1],[145,1],[142,1],[141,1],[136,2],[147,3],[132,4],[143,5],[135,6],[134,7],[144,1],[139,8],[146,1],[140,9],[133,1],[131,1],[104,10],[102,1],[219,11],[220,11],[221,12],[159,13],[222,14],[223,15],[224,16],[157,1],[225,17],[226,18],[227,19],[228,20],[229,21],[230,22],[231,22],[232,23],[233,24],[234,25],[235,26],[160,1],[158,1],[236,27],[237,28],[238,29],[279,30],[239,31],[240,32],[241,31],[242,33],[243,34],[245,35],[246,36],[247,36],[248,36],[249,37],[250,38],[251,39],[252,40],[253,41],[254,42],[255,42],[256,43],[257,1],[258,1],[259,44],[260,45],[261,44],[262,46],[263,47],[264,48],[265,49],[266,50],[267,51],[268,52],[269,53],[270,54],[271,55],[272,56],[273,57],[274,58],[275,59],[276,60],[161,31],[162,1],[163,61],[164,62],[165,1],[166,63],[167,1],[210,64],[211,65],[212,66],[213,66],[214,67],[215,1],[216,14],[217,68],[218,65],[277,69],[278,70],[105,71],[112,72],[113,73],[111,1],[74,1],[83,74],[82,75],[106,74],[90,76],[92,77],[91,78],[99,79],[98,1],[81,80],[75,81],[77,82],[79,83],[78,1],[80,81],[76,1],[103,1],[244,1],[154,1],[119,84],[121,85],[120,86],[118,87],[117,1],[156,88],[155,89],[72,1],[69,1],[70,1],[138,90],[137,1],[107,1],[100,1],[60,1],[61,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[58,1],[1,1],[59,1],[186,91],[198,92],[183,93],[199,94],[208,95],[174,96],[175,97],[173,98],[207,99],[202,100],[206,101],[177,102],[195,103],[176,104],[205,105],[171,106],[172,100],[178,107],[179,1],[185,108],[182,107],[169,109],[209,110],[200,111],[189,112],[188,107],[190,113],[193,114],[187,115],[191,116],[203,99],[180,117],[181,118],[194,119],[170,94],[197,120],[196,107],[184,118],[192,121],[201,1],[168,1],[204,122],[86,123],[89,124],[87,123],[85,1],[88,125],[108,126],[97,127],[93,128],[94,76],[115,129],[109,130],[95,131],[114,132],[84,1],[96,133],[122,134],[116,135],[110,1],[68,136],[71,137],[73,138],[149,139],[148,140],[151,141],[150,141],[128,142],[129,137],[127,143],[126,144],[123,145],[124,1],[125,1],[130,146],[152,147],[62,1],[64,148],[67,149],[66,1],[65,148],[63,150]],"affectedFilesPendingEmit":[[68,17],[71,17],[73,17],[149,17],[148,17],[151,17],[150,17],[128,17],[129,17],[127,17],[126,17],[123,17],[125,17],[130,17],[152,17]],"emitSignatures":[68,71,73,123,125,126,127,128,129,130,148,149,150,151,152],"version":"6.0.3"} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9400894a..829610a6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -969,7 +969,7 @@ importers: devDependencies: '@analogjs/vite-plugin-angular': specifier: ^2.4.5 - version: 2.4.5(cd1678fbfdd77b23b6bdbf3f09017a19) + version: 2.4.5(981d0923643984e7df52ebd265f97d33) '@angular/common': specifier: ^21.2.8 version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) @@ -1005,6 +1005,12 @@ importers: specifier: workspace:* version: link:../store devDependencies: + '@marko/language-tools': + specifier: ^2.6.0 + version: 2.6.0 + '@marko/type-check': + specifier: ^3.1.0 + version: 3.1.0 '@marko/vite': specifier: ^6 version: 6.1.0(@marko/compiler@5.39.66)(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) @@ -1038,7 +1044,7 @@ importers: version: 10.29.1 typescript-eslint: specifier: ^8.58.1 - version: 8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) vitest: specifier: ^4.1.4 version: 4.1.4(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2)(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) @@ -1103,7 +1109,7 @@ importers: version: 1.9.12 vue: specifier: ^3.5.32 - version: 3.5.32(typescript@6.0.2) + version: 3.5.32(typescript@6.0.3) packages/svelte-store: dependencies: @@ -1113,7 +1119,7 @@ importers: devDependencies: '@sveltejs/package': specifier: ^2.5.7 - version: 2.5.7(svelte@5.55.7(@typescript-eslint/types@8.58.1))(typescript@6.0.2) + version: 2.5.7(svelte@5.55.7(@typescript-eslint/types@8.58.1))(typescript@6.0.3) '@sveltejs/vite-plugin-svelte': specifier: ^7.0.0 version: 7.0.0(svelte@5.55.7(@typescript-eslint/types@8.58.1))(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) @@ -1128,7 +1134,7 @@ importers: version: 5.55.7(@typescript-eslint/types@8.58.1) svelte-check: specifier: ^4.4.6 - version: 4.4.6(picomatch@4.0.4)(svelte@5.55.7(@typescript-eslint/types@8.58.1))(typescript@6.0.2) + version: 4.4.6(picomatch@4.0.4)(svelte@5.55.7(@typescript-eslint/types@8.58.1))(typescript@6.0.3) packages/vue-store: dependencies: @@ -1137,20 +1143,20 @@ importers: version: link:../store vue-demi: specifier: ^0.14.10 - version: 0.14.10(@vue/composition-api@1.7.2(vue@3.5.32(typescript@6.0.2)))(vue@3.5.32(typescript@6.0.2)) + version: 0.14.10(@vue/composition-api@1.7.2(vue@3.5.32(typescript@6.0.3)))(vue@3.5.32(typescript@6.0.3)) devDependencies: '@testing-library/vue': specifier: ^8.1.0 - version: 8.1.0(@vue/compiler-sfc@3.5.32)(vue@3.5.32(typescript@6.0.2)) + version: 8.1.0(@vue/compiler-sfc@3.5.32)(vue@3.5.32(typescript@6.0.3)) '@vitejs/plugin-vue': specifier: ^6.0.5 - version: 6.0.5(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + version: 6.0.5(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.3)) '@vue/composition-api': specifier: ^1.7.2 - version: 1.7.2(vue@3.5.32(typescript@6.0.2)) + version: 1.7.2(vue@3.5.32(typescript@6.0.3)) vue: specifier: ^3.5.32 - version: 3.5.32(typescript@6.0.2) + version: 3.5.32(typescript@6.0.3) vue2: specifier: npm:vue@2.6 version: vue@2.6.14 @@ -2924,6 +2930,13 @@ packages: resolution: {integrity: sha512-Xky1vqj1wh8o0Cps/RRgo5p4i8DL+YOSFMvViFfRCTXbMMFNMFH6gUtk1S/oA9yIouhL1iULpxp3F87oWa2ZbA==} engines: {node: 18 || 20 || >=22} + '@marko/language-tools@2.6.0': + resolution: {integrity: sha512-Ut35zMYlDXqxrhcF+I24XLngYKptAposGBADt3Ba6YO+fP13B5hZsMjCQLBJFzHjAkRutCmVT7/kaqAc4f88TQ==} + + '@marko/type-check@3.1.0': + resolution: {integrity: sha512-vPNhfN0RboRIflegKJK0mvs/jnZcntp684R5q+qrSAkUDn1Z3PkDfNc1SIl3uPcvJ746ZNqylXILLMjF39uUyA==} + hasBin: true + '@marko/vite@6.1.0': resolution: {integrity: sha512-aZrtaDehP4FebYm5GQIqgzyWNvEOeSPDufD1JF6UvN0AhQqyPVLgM25644dxvQSCbNoaOFNb+GQj1V/9Nn9PBw==} peerDependencies: @@ -4971,6 +4984,9 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -8786,6 +8802,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} @@ -9428,13 +9449,13 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@analogjs/vite-plugin-angular@2.4.5(cd1678fbfdd77b23b6bdbf3f09017a19)': + '@analogjs/vite-plugin-angular@2.4.5(981d0923643984e7df52ebd265f97d33)': dependencies: tinyglobby: 0.2.16 ts-morph: 21.0.1 optionalDependencies: - '@angular-devkit/build-angular': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(typescript@6.0.2)(vitest@4.1.4)(yaml@2.8.3) - '@angular/build': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(postcss@8.5.14)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.4)(yaml@2.8.3) + '@angular-devkit/build-angular': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.3))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(typescript@6.0.3)(vitest@4.1.4)(yaml@2.8.3) + '@angular/build': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.3))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(postcss@8.5.14)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.4)(yaml@2.8.3) '@angular-devkit/architect@0.2102.7(chokidar@5.0.0)': dependencies: @@ -9530,6 +9551,94 @@ snapshots: - webpack-cli - yaml + '@angular-devkit/build-angular@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.3))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(typescript@6.0.3)(vitest@4.1.4)(yaml@2.8.3)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) + '@angular-devkit/build-webpack': 0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)))(webpack@5.105.2(esbuild@0.27.3)) + '@angular-devkit/core': 21.2.7(chokidar@5.0.0) + '@angular/build': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.3))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(postcss@8.5.6)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.4)(yaml@2.8.3) + '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.3) + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) + '@babel/preset-env': 7.29.0(@babel/core@7.29.0) + '@babel/runtime': 7.28.6 + '@discoveryjs/json-ext': 0.6.3 + '@ngtools/webpack': 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.3))(typescript@6.0.3)(webpack@5.105.2(esbuild@0.27.3)) + ansi-colors: 4.1.3 + autoprefixer: 10.4.27(postcss@8.5.6) + babel-loader: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(esbuild@0.27.3)) + browserslist: 4.28.2 + copy-webpack-plugin: 14.0.0(webpack@5.105.2(esbuild@0.27.3)) + css-loader: 7.1.3(webpack@5.105.2(esbuild@0.27.3)) + esbuild-wasm: 0.27.3 + http-proxy-middleware: 3.0.5 + istanbul-lib-instrument: 6.0.3 + jsonc-parser: 3.3.1 + karma-source-map-support: 1.4.0 + less: 4.4.2 + less-loader: 12.3.1(less@4.4.2)(webpack@5.105.2(esbuild@0.27.3)) + license-webpack-plugin: 4.0.2(webpack@5.105.2(esbuild@0.27.3)) + loader-utils: 3.3.1 + mini-css-extract-plugin: 2.10.0(webpack@5.105.2(esbuild@0.27.3)) + open: 11.0.0 + ora: 9.3.0 + picomatch: 4.0.4 + piscina: 5.1.4 + postcss: 8.5.6 + postcss-loader: 8.2.0(postcss@8.5.6)(typescript@6.0.3)(webpack@5.105.2(esbuild@0.27.3)) + resolve-url-loader: 5.0.0 + rxjs: 7.8.2 + sass: 1.97.3 + sass-loader: 16.0.7(sass@1.97.3)(webpack@5.105.2(esbuild@0.27.3)) + semver: 7.7.4 + source-map-loader: 5.0.0(webpack@5.105.2(esbuild@0.27.3)) + source-map-support: 0.5.21 + terser: 5.46.0 + tinyglobby: 0.2.15 + tree-kill: 1.2.2 + tslib: 2.8.1 + typescript: 6.0.3 + webpack: 5.105.2(esbuild@0.27.7) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)) + webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)) + webpack-merge: 6.0.1 + webpack-subresource-integrity: 5.1.0(webpack@5.105.2(esbuild@0.27.3)) + optionalDependencies: + '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) + esbuild: 0.27.3 + transitivePeerDependencies: + - '@angular/compiler' + - '@emnapi/core' + - '@emnapi/runtime' + - '@rspack/core' + - '@swc/core' + - '@types/node' + - bufferutil + - chokidar + - debug + - html-webpack-plugin + - jiti + - lightningcss + - node-sass + - sass-embedded + - stylus + - sugarss + - supports-color + - tsx + - uglify-js + - utf-8-validate + - vitest + - webpack-cli + - yaml + optional: true + '@angular-devkit/build-webpack@0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)))(webpack@5.105.2(esbuild@0.27.3))': dependencies: '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) @@ -9565,7 +9674,7 @@ snapshots: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 - '@angular/build@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(postcss@8.5.14)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.4)(yaml@2.8.3)': + '@angular/build@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(postcss@8.5.6)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.4)(yaml@2.8.3)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) @@ -9598,6 +9707,61 @@ snapshots: undici: 7.24.4 vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) watchpack: 2.5.1 + optionalDependencies: + '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) + less: 4.4.2 + lmdb: 3.5.1 + postcss: 8.5.6 + vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + - '@types/node' + - chokidar + - jiti + - lightningcss + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + '@angular/build@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.3))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(postcss@8.5.14)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.4)(yaml@2.8.3)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) + '@angular/compiler': 21.2.8 + '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.3) + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-split-export-declaration': 7.24.7 + '@inquirer/confirm': 5.1.21(@types/node@25.6.0) + '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + beasties: 0.4.1 + browserslist: 4.28.2 + esbuild: 0.27.3 + https-proxy-agent: 7.0.6 + istanbul-lib-instrument: 6.0.3 + jsonc-parser: 3.3.1 + listr2: 9.0.5 + magic-string: 0.30.21 + mrmime: 2.0.1 + parse5-html-rewriting-stream: 8.0.0 + picomatch: 4.0.4 + piscina: 5.1.4 + rolldown: 1.0.0-rc.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + sass: 1.97.3 + semver: 7.7.4 + source-map-support: 0.5.21 + tinyglobby: 0.2.15 + tslib: 2.8.1 + typescript: 6.0.3 + undici: 7.24.4 + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + watchpack: 2.5.1 optionalDependencies: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/platform-browser': 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) @@ -9621,12 +9785,12 @@ snapshots: - yaml optional: true - '@angular/build@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(postcss@8.5.6)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.2)(vitest@4.1.4)(yaml@2.8.3)': + '@angular/build@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.3))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(postcss@8.5.6)(terser@5.46.0)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.4)(yaml@2.8.3)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) '@angular/compiler': 21.2.8 - '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.2) + '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.3) '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-split-export-declaration': 7.24.7 @@ -9650,7 +9814,7 @@ snapshots: source-map-support: 0.5.21 tinyglobby: 0.2.15 tslib: 2.8.1 - typescript: 6.0.2 + typescript: 6.0.3 undici: 7.24.4 vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) watchpack: 2.5.1 @@ -9660,7 +9824,7 @@ snapshots: less: 4.4.2 lmdb: 3.5.1 postcss: 8.5.6 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4)(jsdom@29.0.2)(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -9675,6 +9839,7 @@ snapshots: - terser - tsx - yaml + optional: true '@angular/cli@21.2.7(@types/node@25.6.0)(chokidar@5.0.0)': dependencies: @@ -9724,6 +9889,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.3)': + dependencies: + '@angular/compiler': 21.2.8 + '@babel/core': 7.29.0 + '@jridgewell/sourcemap-codec': 1.5.5 + chokidar: 5.0.0 + convert-source-map: 1.9.0 + reflect-metadata: 0.2.2 + semver: 7.7.4 + tslib: 2.8.1 + yargs: 18.0.0 + optionalDependencies: + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + optional: true + '@angular/compiler@21.2.8': dependencies: tslib: 2.8.1 @@ -11389,6 +11571,22 @@ snapshots: self-closing-tags: 1.0.1 source-map-support: 0.5.21 + '@marko/language-tools@2.6.0': + dependencies: + '@luxass/strip-json-comments': 1.4.0 + '@marko/compiler': 5.39.66 + htmljs-parser: 5.11.0 + relative-import-path: 1.0.0 + + '@marko/type-check@3.1.0': + dependencies: + '@luxass/strip-json-comments': 1.4.0 + '@marko/compiler': 5.39.66 + '@marko/language-tools': 2.6.0 + arg: 5.0.2 + kleur: 4.1.5 + typescript: 6.0.3 + '@marko/vite@6.1.0(@marko/compiler@5.39.66)(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))': dependencies: '@chialab/estransform': 0.19.1 @@ -11601,6 +11799,13 @@ snapshots: typescript: 6.0.2 webpack: 5.105.2(esbuild@0.27.7) + '@ngtools/webpack@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@6.0.3))(typescript@6.0.3)(webpack@5.105.2(esbuild@0.27.3))': + dependencies: + '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.3) + typescript: 6.0.3 + webpack: 5.105.2(esbuild@0.27.7) + optional: true + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': dependencies: eslint-scope: 5.1.1 @@ -12407,14 +12612,14 @@ snapshots: dependencies: acorn: 8.16.0 - '@sveltejs/package@2.5.7(svelte@5.55.7(@typescript-eslint/types@8.58.1))(typescript@6.0.2)': + '@sveltejs/package@2.5.7(svelte@5.55.7(@typescript-eslint/types@8.58.1))(typescript@6.0.3)': dependencies: chokidar: 5.0.0 kleur: 4.1.5 sade: 1.8.1 semver: 7.7.4 svelte: 5.55.7(@typescript-eslint/types@8.58.1) - svelte2tsx: 0.7.53(svelte@5.55.7(@typescript-eslint/types@8.58.1))(typescript@6.0.2) + svelte2tsx: 0.7.53(svelte@5.55.7(@typescript-eslint/types@8.58.1))(typescript@6.0.3) transitivePeerDependencies: - typescript @@ -12532,12 +12737,12 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 - '@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.32)(vue@3.5.32(typescript@6.0.2))': + '@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.32)(vue@3.5.32(typescript@6.0.3))': dependencies: '@babel/runtime': 7.29.2 '@testing-library/dom': 9.3.4 '@vue/test-utils': 2.4.6 - vue: 3.5.32(typescript@6.0.2) + vue: 3.5.32(typescript@6.0.3) optionalDependencies: '@vue/compiler-sfc': 3.5.32 @@ -12729,6 +12934,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.58.1 + '@typescript-eslint/type-utils': 8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.58.1 + eslint: 10.3.0(jiti@2.6.1) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@typescript-eslint/scope-manager': 8.58.1 @@ -12741,6 +12962,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.58.1 + '@typescript-eslint/types': 8.58.1 + '@typescript-eslint/typescript-estree': 8.58.1(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.58.1 + debug: 4.4.3 + eslint: 10.3.0(jiti@2.6.1) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/project-service@8.58.1(typescript@6.0.2)': dependencies: '@typescript-eslint/tsconfig-utils': 8.58.1(typescript@6.0.2) @@ -12750,6 +12983,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.58.1(typescript@6.0.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.58.1(typescript@6.0.3) + '@typescript-eslint/types': 8.58.1 + debug: 4.4.3 + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@8.58.1': dependencies: '@typescript-eslint/types': 8.58.1 @@ -12759,6 +13001,10 @@ snapshots: dependencies: typescript: 6.0.2 + '@typescript-eslint/tsconfig-utils@8.58.1(typescript@6.0.3)': + dependencies: + typescript: 6.0.3 + '@typescript-eslint/type-utils@8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@typescript-eslint/types': 8.58.1 @@ -12771,6 +13017,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3)': + dependencies: + '@typescript-eslint/types': 8.58.1 + '@typescript-eslint/typescript-estree': 8.58.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) + debug: 4.4.3 + eslint: 10.3.0(jiti@2.6.1) + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.58.1': {} '@typescript-eslint/typescript-estree@8.58.1(typescript@6.0.2)': @@ -12788,6 +13046,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.58.1(typescript@6.0.3)': + dependencies: + '@typescript-eslint/project-service': 8.58.1(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.58.1(typescript@6.0.3) + '@typescript-eslint/types': 8.58.1 + '@typescript-eslint/visitor-keys': 8.58.1 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.7.4 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.6.1)) @@ -12799,6 +13072,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.58.1 + '@typescript-eslint/types': 8.58.1 + '@typescript-eslint/typescript-estree': 8.58.1(typescript@6.0.3) + eslint: 10.3.0(jiti@2.6.1) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.58.1': dependencies: '@typescript-eslint/types': 8.58.1 @@ -12878,6 +13162,12 @@ snapshots: vite: 8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) vue: 3.5.32(typescript@6.0.2) + '@vitejs/plugin-vue@6.0.5(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.3))': + dependencies: + '@rolldown/pluginutils': 1.0.0-rc.2 + vite: 8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + vue: 3.5.32(typescript@6.0.3) + '@vitest/coverage-istanbul@4.1.4(vitest@4.1.4)': dependencies: '@babel/core': 7.29.0 @@ -12994,9 +13284,9 @@ snapshots: '@vue/compiler-dom': 3.5.32 '@vue/shared': 3.5.32 - '@vue/composition-api@1.7.2(vue@3.5.32(typescript@6.0.2))': + '@vue/composition-api@1.7.2(vue@3.5.32(typescript@6.0.3))': dependencies: - vue: 3.5.32(typescript@6.0.2) + vue: 3.5.32(typescript@6.0.3) '@vue/language-core@3.2.6': dependencies: @@ -13030,6 +13320,12 @@ snapshots: '@vue/shared': 3.5.32 vue: 3.5.32(typescript@6.0.2) + '@vue/server-renderer@3.5.32(vue@3.5.32(typescript@6.0.3))': + dependencies: + '@vue/compiler-ssr': 3.5.32 + '@vue/shared': 3.5.32 + vue: 3.5.32(typescript@6.0.3) + '@vue/shared@3.5.32': {} '@vue/test-utils@2.4.6': @@ -13243,6 +13539,8 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.2 + arg@5.0.2: {} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -13786,6 +14084,16 @@ snapshots: optionalDependencies: typescript: 6.0.2 + cosmiconfig@9.0.1(typescript@6.0.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + optionalDependencies: + typescript: 6.0.3 + optional: true + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -16483,6 +16791,18 @@ snapshots: transitivePeerDependencies: - typescript + postcss-loader@8.2.0(postcss@8.5.6)(typescript@6.0.3)(webpack@5.105.2(esbuild@0.27.3)): + dependencies: + cosmiconfig: 9.0.1(typescript@6.0.3) + jiti: 2.6.1 + postcss: 8.5.6 + semver: 7.7.4 + optionalDependencies: + webpack: 5.105.2(esbuild@0.27.7) + transitivePeerDependencies: + - typescript + optional: true + postcss-media-query-parser@0.2.3: {} postcss-modules-extract-imports@3.1.0(postcss@8.5.14): @@ -17444,6 +17764,18 @@ snapshots: transitivePeerDependencies: - picomatch + svelte-check@4.4.6(picomatch@4.0.4)(svelte@5.55.7(@typescript-eslint/types@8.58.1))(typescript@6.0.3): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + chokidar: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picocolors: 1.1.1 + sade: 1.8.1 + svelte: 5.55.7(@typescript-eslint/types@8.58.1) + typescript: 6.0.3 + transitivePeerDependencies: + - picomatch + svelte-eslint-parser@1.6.0(svelte@5.55.7(@typescript-eslint/types@8.58.1)): dependencies: eslint-scope: 8.4.0 @@ -17456,12 +17788,12 @@ snapshots: optionalDependencies: svelte: 5.55.7(@typescript-eslint/types@8.58.1) - svelte2tsx@0.7.53(svelte@5.55.7(@typescript-eslint/types@8.58.1))(typescript@6.0.2): + svelte2tsx@0.7.53(svelte@5.55.7(@typescript-eslint/types@8.58.1))(typescript@6.0.3): dependencies: dedent-js: 1.0.1 scule: 1.3.0 svelte: 5.55.7(@typescript-eslint/types@8.58.1) - typescript: 6.0.2 + typescript: 6.0.3 svelte@5.55.7(@typescript-eslint/types@8.58.1): dependencies: @@ -17579,6 +17911,10 @@ snapshots: dependencies: typescript: 6.0.2 + ts-api-utils@2.5.0(typescript@6.0.3): + dependencies: + typescript: 6.0.3 + ts-declaration-location@1.0.7(typescript@6.0.2): dependencies: picomatch: 4.0.4 @@ -17722,6 +18058,17 @@ snapshots: transitivePeerDependencies: - supports-color + typescript-eslint@8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/parser': 8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.58.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.58.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.3.0(jiti@2.6.1) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + typescript@5.6.3: {} typescript@5.7.3: {} @@ -17730,6 +18077,8 @@ snapshots: typescript@6.0.2: {} + typescript@6.0.3: {} + uc.micro@2.1.0: {} unbash@2.2.0: {} @@ -17949,11 +18298,11 @@ snapshots: vue-component-type-helpers@2.2.12: {} - vue-demi@0.14.10(@vue/composition-api@1.7.2(vue@3.5.32(typescript@6.0.2)))(vue@3.5.32(typescript@6.0.2)): + vue-demi@0.14.10(@vue/composition-api@1.7.2(vue@3.5.32(typescript@6.0.3)))(vue@3.5.32(typescript@6.0.3)): dependencies: - vue: 3.5.32(typescript@6.0.2) + vue: 3.5.32(typescript@6.0.3) optionalDependencies: - '@vue/composition-api': 1.7.2(vue@3.5.32(typescript@6.0.2)) + '@vue/composition-api': 1.7.2(vue@3.5.32(typescript@6.0.3)) vue-eslint-parser@10.4.0(eslint@10.3.0(jiti@2.6.1)): dependencies: @@ -17990,6 +18339,16 @@ snapshots: optionalDependencies: typescript: 6.0.2 + vue@3.5.32(typescript@6.0.3): + dependencies: + '@vue/compiler-dom': 3.5.32 + '@vue/compiler-sfc': 3.5.32 + '@vue/runtime-dom': 3.5.32 + '@vue/server-renderer': 3.5.32(vue@3.5.32(typescript@6.0.3)) + '@vue/shared': 3.5.32 + optionalDependencies: + typescript: 6.0.3 + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 From c93c86cd425e9ada487936284a8aded82f6f06d1 Mon Sep 17 00:00:00 2001 From: defunkt-dev Date: Thu, 25 Jun 2026 22:35:51 -0600 Subject: [PATCH 03/29] knip failure fix --- knip.json | 2 +- packages/marko-store/tests/ssr.test.ts | 4 ++-- packages/marko-store/tsconfig.marko.tsbuildinfo | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/knip.json b/knip.json index 15da7038..e1dfef2b 100644 --- a/knip.json +++ b/knip.json @@ -3,7 +3,7 @@ "workspaces": { "packages/marko-store": { "entry": ["src/index.ts", "src/tags/**/*.marko"], - "ignoreDependencies": ["@marko/language-tools", "@marko/type-check", "@marko/vite", "marko"] + "ignoreDependencies": ["@marko/language-tools", "marko"] }, "packages/vue-store": { "ignoreDependencies": ["vue2", "vue2.7"] diff --git a/packages/marko-store/tests/ssr.test.ts b/packages/marko-store/tests/ssr.test.ts index 4b55c8b8..253ad55a 100644 --- a/packages/marko-store/tests/ssr.test.ts +++ b/packages/marko-store/tests/ssr.test.ts @@ -20,7 +20,7 @@ import { describe, expect, it } from 'vitest' import SsrSelector from './fixtures/ssr-selector.marko' import SsrAtom from './fixtures/ssr-atom.marko' import SsrObjectAntipattern from './fixtures/ssr-object-antipattern.marko' -import { counterStore } from './fixtures/ssr-store' +import { countAtom, counterStore } from './fixtures/ssr-store' async function renderToString( template: any, @@ -45,7 +45,7 @@ describe('SSR render — thunk channel', () => { it(' renders server-side and seeds the value', async () => { const html = await renderToString(SsrAtom, {}) - expect(cell(html, 'value')).toBe('7') + expect(cell(html, 'value')).toBe(String(countAtom.get())) }) }) diff --git a/packages/marko-store/tsconfig.marko.tsbuildinfo b/packages/marko-store/tsconfig.marko.tsbuildinfo index 797fe624..558c3cb5 100644 --- a/packages/marko-store/tsconfig.marko.tsbuildinfo +++ b/packages/marko-store/tsconfig.marko.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2025.float16.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../store/dist/alien.d.ts","../store/dist/types.d.ts","../store/dist/atom.d.ts","../store/dist/store.d.ts","../store/dist/shallow.d.ts","../store/dist/index.d.ts","./src/index.ts","../../node_modules/.pnpm/marko@6.1.18/node_modules/marko/tags/let.d.marko","../../node_modules/.pnpm/marko@6.1.18/node_modules/marko/tags/lifecycle.d.marko","./src/tags/store-atom.marko","../../node_modules/.pnpm/marko@6.1.18/node_modules/marko/tags/const.d.marko","./src/tags/store-selector.marko","../../node_modules/.pnpm/@vitest+pretty-format@4.1.4/node_modules/@vitest/pretty-format/dist/index.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/display.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/types.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/helpers.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/timers.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/index.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/types.d-bcelap-c.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/diff.d.ts","../../node_modules/.pnpm/@vitest+runner@4.1.4/node_modules/@vitest/runner/dist/tasks.d-bh0ijn67.d.ts","../../node_modules/.pnpm/@vitest+runner@4.1.4/node_modules/@vitest/runner/dist/index.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/traces.d.402v_yfi.d.ts","../../node_modules/.pnpm/vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4.2_sass@1.97.3_terser@5.46.0_yaml@2.8.3/node_modules/vite/types/hmrpayload.d.ts","../../node_modules/.pnpm/vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4.2_sass@1.97.3_terser@5.46.0_yaml@2.8.3/node_modules/vite/dist/node/chunks/modulerunnertransport.d.ts","../../node_modules/.pnpm/vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4.2_sass@1.97.3_terser@5.46.0_yaml@2.8.3/node_modules/vite/types/customevent.d.ts","../../node_modules/.pnpm/vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4.2_sass@1.97.3_terser@5.46.0_yaml@2.8.3/node_modules/vite/types/hot.d.ts","../../node_modules/.pnpm/vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4.2_sass@1.97.3_terser@5.46.0_yaml@2.8.3/node_modules/vite/dist/node/module-runner.d.ts","../../node_modules/.pnpm/@vitest+snapshot@4.1.4/node_modules/@vitest/snapshot/dist/environment.d-dojxxzv9.d.ts","../../node_modules/.pnpm/@vitest+snapshot@4.1.4/node_modules/@vitest/snapshot/dist/rawsnapshot.d-d_x3-62x.d.ts","../../node_modules/.pnpm/@vitest+snapshot@4.1.4/node_modules/@vitest/snapshot/dist/index.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/config.d.chuh6-ad.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/environment.d.crsxczp1.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/rpc.d.bfmwpdph.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/worker.d.ccknuvi5.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/browser.d.c0zgu1u9.d.ts","../../node_modules/.pnpm/@vitest+spy@4.1.4/node_modules/@vitest/spy/optional-types.d.ts","../../node_modules/.pnpm/@vitest+spy@4.1.4/node_modules/@vitest/spy/dist/index.d.ts","../../node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.d.ts","../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../../node_modules/.pnpm/@vitest+expect@4.1.4/node_modules/@vitest/expect/dist/index.d.ts","../../node_modules/.pnpm/@vitest+runner@4.1.4/node_modules/@vitest/runner/dist/utils.d.ts","../../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/benchmark.d.daahlpsq.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/global.d.d74z04p1.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/optional-runtime-types.d.ts","../../node_modules/.pnpm/@vitest+mocker@4.1.4_vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4._52529e11fbc5270d800772cd5a3414fe/node_modules/@vitest/mocker/dist/types.d-bji5eawu.d.ts","../../node_modules/.pnpm/@vitest+mocker@4.1.4_vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4._52529e11fbc5270d800772cd5a3414fe/node_modules/@vitest/mocker/dist/index.d-b41z0auw.d.ts","../../node_modules/.pnpm/@vitest+mocker@4.1.4_vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4._52529e11fbc5270d800772cd5a3414fe/node_modules/@vitest/mocker/dist/index.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/suite.d.udjtyagw.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/evaluatedmodules.d.bxj5omdx.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/runners.d.ts","../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/index.d.ts","./tests/index.test.ts","./tests/marko.d.ts","./tests/setup.ts","./tests/fixtures/ssr-store.ts","./tests/fixtures/ssr-selector.marko","./tests/fixtures/ssr-atom.marko","./tests/fixtures/ssr-object-antipattern.marko","./tests/ssr.test.ts","../../node_modules/.pnpm/@types+aria-query@5.0.4/node_modules/@types/aria-query/index.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/matches.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/wait-for.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/query-helpers.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/queries.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/get-queries-for-element.d.ts","../../node_modules/.pnpm/pretty-format@27.5.1/node_modules/pretty-format/build/types.d.ts","../../node_modules/.pnpm/pretty-format@27.5.1/node_modules/pretty-format/build/index.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/screen.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/wait-for-element-to-be-removed.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/get-node-text.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/events.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/pretty-dom.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/role-helpers.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/config.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/suggestions.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/index.d.ts","./tests/fixtures/selector-host.marko","./tests/fixtures/atom-host.marko","./tests/fixtures/selector-source-swap-host.marko","./tests/fixtures/selector-selector-swap-host.marko","./tests/tags.test.ts","../../node_modules/.pnpm/@marko+language-tools@2.6.0/node_modules/@marko/language-tools/marko.internal.d.ts","../../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../../node_modules/.pnpm/marko@6.1.18/node_modules/marko/tags-html.d.ts","../../node_modules/.pnpm/marko@6.1.18/node_modules/marko/index.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/blob.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/console.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/crypto.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/encoding.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/utility.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/client-stats.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/round-robin-pool.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/h2c-client.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-call-history.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/snapshot-agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/cache-interceptor.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/importmeta.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/messaging.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/performance.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/streams.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/timers.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/url.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/inspector/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/path/posix.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/path/win32.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/quic.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/test/reporters.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/util/types.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/index.d.ts"],"fileIdsList":[[159,222,230,234,237,239,240,241,254],[135,159,222,230,234,237,239,240,241,254],[132,133,134,135,136,139,140,141,142,143,144,145,146,159,222,230,234,237,239,240,241,254],[131,159,222,230,234,237,239,240,241,254],[138,159,222,230,234,237,239,240,241,254],[132,133,134,159,222,230,234,237,239,240,241,254],[132,133,159,222,230,234,237,239,240,241,254],[135,136,138,159,222,230,234,237,239,240,241,254],[133,159,222,230,234,237,239,240,241,254],[102,103,159,222,230,234,237,239,240,241,254],[159,219,220,222,230,234,237,239,240,241,254],[159,221,222,230,234,237,239,240,241,254],[222,230,234,237,239,240,241,254],[159,222,230,234,237,239,240,241,254,262],[159,222,223,228,230,233,234,237,239,240,241,243,254,259,271],[159,222,223,224,230,233,234,237,239,240,241,254],[159,222,225,230,234,237,239,240,241,254,272],[159,222,226,227,230,234,237,239,240,241,245,254],[159,222,227,230,234,237,239,240,241,254,259,268],[159,222,228,230,233,234,237,239,240,241,243,254],[159,221,222,229,230,234,237,239,240,241,254],[159,222,230,231,234,237,239,240,241,254],[159,222,230,232,233,234,237,239,240,241,254],[159,221,222,230,233,234,237,239,240,241,254],[159,222,230,233,234,235,237,239,240,241,254,259,271],[159,222,230,233,234,235,237,239,240,241,254,259,262],[159,209,222,230,233,234,236,237,239,240,241,243,254,259,271],[159,222,230,233,234,236,237,239,240,241,243,254,259,268,271],[159,222,230,234,236,237,238,239,240,241,254,259,268,271],[157,158,159,160,161,162,163,164,165,166,167,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278],[159,222,230,233,234,237,239,240,241,254],[159,222,230,234,237,239,241,254],[159,222,230,234,237,239,240,241,242,254,271],[159,222,230,233,234,237,239,240,241,243,254,259],[159,222,230,234,237,239,240,241,245,254],[159,222,230,234,237,239,240,241,246,254],[159,222,230,233,234,237,239,240,241,249,254],[159,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278],[159,222,230,234,237,239,240,241,251,254],[159,222,230,234,237,239,240,241,252,254],[159,222,227,230,234,237,239,240,241,243,254,262],[159,222,230,233,234,237,239,240,241,254,255],[159,222,230,234,237,239,240,241,254,256,272,275],[159,222,230,233,234,237,239,240,241,254,259,261,262],[159,222,230,234,237,239,240,241,254,260,262],[159,222,230,234,237,239,240,241,254,262,272],[159,222,230,234,237,239,240,241,254,263],[159,219,222,230,234,237,239,240,241,254,259,265,271],[159,222,230,234,237,239,240,241,254,259,264],[159,222,230,233,234,237,239,240,241,254,266,267],[159,222,230,234,237,239,240,241,254,266,267],[159,222,227,230,234,237,239,240,241,243,254,259,268],[159,222,230,234,237,239,240,241,254,269],[159,222,230,234,237,239,240,241,243,254,270],[159,222,230,234,236,237,239,240,241,252,254,271],[159,222,230,234,237,239,240,241,254,272,273],[159,222,227,230,234,237,239,240,241,254,273],[159,222,230,234,237,239,240,241,254,259,274],[159,222,230,234,237,239,240,241,242,254,275],[159,222,230,234,237,239,240,241,254,276],[159,222,225,230,234,237,239,240,241,254],[159,222,227,230,234,237,239,240,241,254],[159,222,230,234,237,239,240,241,254,272],[159,209,222,230,234,237,239,240,241,254],[159,222,230,234,237,239,240,241,254,271],[159,222,230,234,237,239,240,241,254,277],[159,222,230,234,237,239,240,241,249,254],[159,222,230,234,237,239,240,241,254,267],[159,209,222,230,233,234,235,237,239,240,241,249,254,259,262,271,274,275,277],[159,222,230,234,237,239,240,241,254,259,278],[75,81,99,100,101,104,159,222,230,234,237,239,240,241,254],[111,159,222,230,234,237,239,240,241,254],[111,112,159,222,230,234,237,239,240,241,254],[79,81,82,159,222,230,234,237,239,240,241,254],[79,81,159,222,230,234,237,239,240,241,254],[79,159,222,230,234,237,239,240,241,254],[74,79,90,91,159,222,230,234,237,239,240,241,254],[74,79,90,159,222,230,234,237,239,240,241,254],[98,159,222,230,234,237,239,240,241,254],[74,80,159,222,230,234,237,239,240,241,254],[74,159,222,230,234,237,239,240,241,254],[76,159,222,230,234,237,239,240,241,254],[74,75,76,77,78,159,222,230,234,237,239,240,241,254],[117,118,159,222,230,234,237,239,240,241,254],[117,118,119,120,159,222,230,234,237,239,240,241,254],[117,119,159,222,230,234,237,239,240,241,254],[117,159,222,230,234,237,239,240,241,254],[124,155,159,222,230,234,237,239,240,241,254],[154,159,222,230,234,237,239,240,241,254],[137,159,222,230,234,237,239,240,241,254],[159,174,177,180,181,222,230,234,237,239,240,241,254,271],[159,177,222,230,234,237,239,240,241,254,259,271],[159,177,181,222,230,234,237,239,240,241,254,271],[159,222,230,234,237,239,240,241,254,259],[159,171,222,230,234,237,239,240,241,254],[159,175,222,230,234,237,239,240,241,254],[159,173,174,177,222,230,234,237,239,240,241,254,271],[159,222,230,234,237,239,240,241,243,254,268],[159,222,230,234,237,239,240,241,254,279],[159,171,222,230,234,237,239,240,241,254,279],[159,173,177,222,230,234,237,239,240,241,243,254,271],[159,168,169,170,172,176,222,230,233,234,237,239,240,241,254,259,271],[159,177,186,194,222,230,234,237,239,240,241,254],[159,169,175,222,230,234,237,239,240,241,254],[159,177,203,204,222,230,234,237,239,240,241,254],[159,169,172,177,222,230,234,237,239,240,241,254,262,271,279],[159,177,222,230,234,237,239,240,241,254],[159,173,177,222,230,234,237,239,240,241,254,271],[159,168,222,230,234,237,239,240,241,254],[159,171,172,173,175,176,177,178,179,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,204,205,206,207,208,222,230,234,237,239,240,241,254],[159,177,196,199,222,230,234,237,239,240,241,254],[159,177,186,187,188,222,230,234,237,239,240,241,254],[159,175,177,187,189,222,230,234,237,239,240,241,254],[159,176,222,230,234,237,239,240,241,254],[159,169,171,177,222,230,234,237,239,240,241,254],[159,177,181,187,189,222,230,234,237,239,240,241,254],[159,181,222,230,234,237,239,240,241,254],[159,175,177,180,222,230,234,237,239,240,241,254,271],[159,169,173,177,186,222,230,234,237,239,240,241,254],[159,177,196,222,230,234,237,239,240,241,254],[159,189,222,230,234,237,239,240,241,254],[159,171,177,203,222,230,234,237,239,240,241,254,262,277,279],[85,159,222,230,234,237,239,240,241,254],[85,86,87,88,159,222,230,234,237,239,240,241,254],[87,159,222,230,234,237,239,240,241,254],[83,106,107,109,159,222,230,234,237,239,240,241,254],[83,84,96,109,159,222,230,234,237,239,240,241,254],[74,81,83,92,109,159,222,230,234,237,239,240,241,254],[89,159,222,230,234,237,239,240,241,254],[74,83,92,95,105,108,109,159,222,230,234,237,239,240,241,254],[83,84,89,92,109,159,222,230,234,237,239,240,241,254],[83,106,107,108,109,159,222,230,234,237,239,240,241,254],[83,89,93,94,95,109,159,222,230,234,237,239,240,241,254],[74,79,81,83,84,89,92,93,94,95,96,97,99,105,106,107,108,109,110,113,114,115,116,121,159,222,230,234,237,239,240,241,254],[74,81,83,84,92,93,106,107,108,109,114,159,222,230,234,237,239,240,241,254],[67,159,222,230,234,237,239,240,241,254],[69,70,159,222,230,234,237,239,240,241,254],[69,70,72,159,222,230,234,237,239,240,241,254],[71,159,222,230,234,237,239,240,241,254],[73,159,222,230,234,237,239,240,241,254],[69,72,73,159,222,230,234,237,239,240,241,254],[71,126,159,222,230,234,237,239,240,241,254],[73,126,159,222,230,234,237,239,240,241,254],[68,159,222,230,234,237,239,240,241,254],[68,122,159,222,230,234,237,239,240,241,254],[122,126,127,128,129,159,222,230,234,237,239,240,241,254],[68,122,147,148,149,150,151,159,222,230,234,237,239,240,241,254],[63,159,222,230,234,237,239,240,241,254],[63,64,65,66,159,222,230,234,237,239,240,241,254],[62,159,222,230,234,237,239,240,241,254]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},"39f13fb4279fe07702c870642a2ec26db019d3afdb5b369523c45c77ed266c65","51aae950c97b61105064619e52f8b4e702ed9d88f6a38d8a6d461389be28dd0b","08a8feab6868367d5112474f9015e5b00c101012a639309e88fb105f94ced534","a15a870f6ab5a26a7eb91ddd8c47ff4e00bc23ece96ab48ff8aaf42450478a50","73390a82cbd5ea87d8bcdf183d66853207a111de00a8512c68ca17b47a11e65d","53755d0e8037d36720dc68e2e8c77512698befd0c0d48ac5d20c41986df91bc2","e746dbf4e43b9e40b9965f1cbe15f029b066423b294c6a69ea7f2f9cd9091758","2e88396eb16a936421ad6de3e2da7a7b","41f7e591762f7ab63f1cae9baad59534","b320bf9f32b091f50800df8894392fd5","10faacc9b67dd33e042f567ac9343c13","28934f4e9d4f4ee2fabd4e20e127c9d5",{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"3b0a56d056d81a011e484b9c05d5e430711aaecd561a788bad1d0498aad782c7","impliedFormat":99},{"version":"9443967db823b66d1682be7fc66392be7c7924e10c3e54900f456341e94591a6","impliedFormat":99},{"version":"424f71d1fae96ac2e878af92345bb87bea1d29f757228fbc190133b305643f2c","impliedFormat":99},{"version":"ac3d263474022e9a14c43f588f485d549641d839b159ecc971978b90f34bdf6b","impliedFormat":99},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"de4a612aa8f1704af486f701e21993c786ba7d8cfed55fffa6684026aea2346e","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"8887e70871f697fa42ad7cdf32168db60ec2d6760c173c97973e35377fe5d83b","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"6bb6d57454370324434bcf355942dee45b0e0d8ab0fa3e98bafe8a30718273b4","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"a86701e56b10a6d1ef9b2ecaeedbab94ed7b957a646cd71fd09d02b323c6d3d7","impliedFormat":99},{"version":"976932e3807786cdae46ed5dfcd02c44f3fa25c157a0e8392f5a2dabb9a14a4e","impliedFormat":99},{"version":"59b7a8ec1781284f6602af48487b68fc3baadf34cb4cbcbb31f213b6712fac34","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"ed9bb55ddcbebd5cb3eee991f57ff21438546ee40ee1c310281bd12a6c7cf65b","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"4c3d12ac5744ff4ba2e1ce97ec307f09d726b4cfcfd5eff3315ccc080d620fb9","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"abdaf8c2f20089a6b23a6287007ed16f9cf76d0045ce2973a5f8508c87286d21","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"8c9917efcdf61e9b9a73ac1e289c612f12db33519ca1445cca41865f7887c737","impliedFormat":99},"dc7de349426eeba24b0424219a61ef400d6fbbd9a75ce1a924964f33066e20a7","59ec10f39bff3eaf54f0ab11a2da8097a235519d4c2bebfff514ea3d83b4e3fa",{"version":"943627b96a61dbb76261f6cdf0192ae32ffd49ad466a87595e8fba1f748db814","affectsGlobalScope":true},"d513ea666385f2c8007e764e582e9ddb7bdcfe686eadf102be053e25ff9eb265","2adc3d8d9e7018f11f8f95f9772804f3","7e82a2d918950e6553231ada223aa21b","0a6ebd564b9cd399aab7fe4b29804fc5","c68a896d1a455d98f7b068f6c3e99c445b4c01c8dad8cd40c60804eab919e452",{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"3cfb7c0c642b19fb75132154040bb7cd840f0002f9955b14154e69611b9b3f81","impliedFormat":1},{"version":"8387ec1601cf6b8948672537cf8d430431ba0d87b1f9537b4597c1ab8d3ade5b","impliedFormat":1},{"version":"d16f1c460b1ca9158e030fdf3641e1de11135e0c7169d3e8cf17cc4cc35d5e64","impliedFormat":1},{"version":"a934063af84f8117b8ce51851c1af2b76efe960aa4c7b48d0343a1b15c01aedf","impliedFormat":1},{"version":"e3c5ad476eb2fca8505aee5bdfdf9bf11760df5d0f9545db23f12a5c4d72a718","impliedFormat":1},{"version":"462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","impliedFormat":1},{"version":"5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","impliedFormat":1},{"version":"d0570ce419fb38287e7b39c910b468becb5b2278cf33b1000a3d3e82a46ecae2","impliedFormat":1},{"version":"3aca7f4260dad9dcc0a0333654cb3cde6664d34a553ec06c953bce11151764d7","impliedFormat":1},{"version":"a0a6f0095f25f08a7129bc4d7cb8438039ec422dc341218d274e1e5131115988","impliedFormat":1},{"version":"b58f396fe4cfe5a0e4d594996bc8c1bfe25496fbc66cf169d41ac3c139418c77","impliedFormat":1},{"version":"45785e608b3d380c79e21957a6d1467e1206ac0281644e43e8ed6498808ace72","impliedFormat":1},{"version":"bece27602416508ba946868ad34d09997911016dbd6893fb884633017f74e2c5","impliedFormat":1},{"version":"2a90177ebaef25de89351de964c2c601ab54d6e3a157cba60d9cd3eaf5a5ee1a","impliedFormat":1},{"version":"82200e963d3c767976a5a9f41ecf8c65eca14a6b33dcbe00214fcbe959698c46","impliedFormat":1},{"version":"b4966c503c08bbd9e834037a8ab60e5f53c5fd1092e8873c4a1c344806acdab2","impliedFormat":1},"cbff6d86c61506feebebf2e5204c3a2e","77c5d8fa66f03d542472c4a343d84f8e","cc1ca60428e3906aa45dfb1d3b4dba23","0fc1985168c5d611789e82c0701bae48","70db4230f2c1d9974206ad3b904757972593c2fd2bec0d28ee474bc7a44ba6d0",{"version":"c265bff524f49bce83a4b52c16325e5bafbf5ee5b68e4544ceac12d8f1fcd7c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"bf987531ac8c5b5a795bbac840e92daea5b135ecdec6371c143e8d116599079f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b059875943da7c4555bb340cffea782dcc789d9cd633deed4fc1f856356f5784","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4137ebf04166f3a325f056aa56101adc75e9dceb30404a1844eb8604d89770e2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"8caeb65fdc3bfe0d13f86f67324fcb2d858ed1c55f1f0cce892eb1acfb9f3239","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"e3905f6902f0b69e5eefc230daa69fdd4ab707a973ec2d086d65af1b3ea47ef0","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"07e4e61e946a9c15045539ecd5f5d2d02e7aab6fa82567826857e09cf0f37c2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c4714ccc29149efb8777a1da0b04b8d2258f5d13ddbf4cd3c3d361fb531ac86","impliedFormat":1},{"version":"3ff275f84f89f8a7c0543da838f9da9614201abc4ce74c533029825adfb4433d","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"f9713757bcdfa4d58b48c0fb249e752c94a3eee8bf4532b906094246ac49ef88","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"6fe28249ac0c7bc19a79aa9264baf00efbd080e868dbe1d3052033ad1c64f206","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"ce8653341224f8b45ff46d2a06f2cacb96f841f768a886c9d8dd8ec0878b11bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"a74edb3bab7394a9dbde529d60632be590def2f5f01024dbd85441587fbfbbe0","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"00049ccc87f3f37726db03c01ca68fe74fd9c0109b68c29eb9923ebec2c76b13","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"68d3f35108e2608b1f2f28b36d19d7055f31c4465cc5692cbd06c716a9fe7973","impliedFormat":1},{"version":"a6d543044570fbeed13a7f9925a868081cd2b14ef59cdd9da6ae76d41cab03d3","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"eab2f3179607acb3d44b2db2a76dd7d621c5039b145dc160a1ee733963f9d2f5","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"6f5383b3df1cdf4ff1aa7fb0850f77042b5786b5e65ec9a9b6be56ebfe4d9036","impliedFormat":1},{"version":"62fc21ed9ccbd83bd1166de277a4b5daaa8d15b5fa614c75610d20f3b73fba87","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"c77fb31bc17fd241d3922a9f88c59e3361cdf76d1328ba9412fc6bf7310b638d","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"694b812e0ed11285e8822cf8131e3ce7083a500b3b1d185fff9ed1089677bd0a","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1}],"root":[68,71,73,[123,130],[148,153],156],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"allowUnreachableCode":false,"allowUnusedLabels":false,"checkJs":true,"composite":true,"declaration":true,"esModuleInterop":true,"module":99,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[153,1],[101,1],[145,1],[142,1],[141,1],[136,2],[147,3],[132,4],[143,5],[135,6],[134,7],[144,1],[139,8],[146,1],[140,9],[133,1],[131,1],[104,10],[102,1],[219,11],[220,11],[221,12],[159,13],[222,14],[223,15],[224,16],[157,1],[225,17],[226,18],[227,19],[228,20],[229,21],[230,22],[231,22],[232,23],[233,24],[234,25],[235,26],[160,1],[158,1],[236,27],[237,28],[238,29],[279,30],[239,31],[240,32],[241,31],[242,33],[243,34],[245,35],[246,36],[247,36],[248,36],[249,37],[250,38],[251,39],[252,40],[253,41],[254,42],[255,42],[256,43],[257,1],[258,1],[259,44],[260,45],[261,44],[262,46],[263,47],[264,48],[265,49],[266,50],[267,51],[268,52],[269,53],[270,54],[271,55],[272,56],[273,57],[274,58],[275,59],[276,60],[161,31],[162,1],[163,61],[164,62],[165,1],[166,63],[167,1],[210,64],[211,65],[212,66],[213,66],[214,67],[215,1],[216,14],[217,68],[218,65],[277,69],[278,70],[105,71],[112,72],[113,73],[111,1],[74,1],[83,74],[82,75],[106,74],[90,76],[92,77],[91,78],[99,79],[98,1],[81,80],[75,81],[77,82],[79,83],[78,1],[80,81],[76,1],[103,1],[244,1],[154,1],[119,84],[121,85],[120,86],[118,87],[117,1],[156,88],[155,89],[72,1],[69,1],[70,1],[138,90],[137,1],[107,1],[100,1],[60,1],[61,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[58,1],[1,1],[59,1],[186,91],[198,92],[183,93],[199,94],[208,95],[174,96],[175,97],[173,98],[207,99],[202,100],[206,101],[177,102],[195,103],[176,104],[205,105],[171,106],[172,100],[178,107],[179,1],[185,108],[182,107],[169,109],[209,110],[200,111],[189,112],[188,107],[190,113],[193,114],[187,115],[191,116],[203,99],[180,117],[181,118],[194,119],[170,94],[197,120],[196,107],[184,118],[192,121],[201,1],[168,1],[204,122],[86,123],[89,124],[87,123],[85,1],[88,125],[108,126],[97,127],[93,128],[94,76],[115,129],[109,130],[95,131],[114,132],[84,1],[96,133],[122,134],[116,135],[110,1],[68,136],[71,137],[73,138],[149,139],[148,140],[151,141],[150,141],[128,142],[129,137],[127,143],[126,144],[123,145],[124,1],[125,1],[130,146],[152,147],[62,1],[64,148],[67,149],[66,1],[65,148],[63,150]],"affectedFilesPendingEmit":[[68,17],[71,17],[73,17],[149,17],[148,17],[151,17],[150,17],[128,17],[129,17],[127,17],[126,17],[123,17],[125,17],[130,17],[152,17]],"emitSignatures":[68,71,73,123,125,126,127,128,129,130,148,149,150,151,152],"version":"6.0.3"} \ No newline at end of file +{"fileNames":["../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2025.float16.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../store/dist/alien.d.ts","../store/dist/types.d.ts","../store/dist/atom.d.ts","../store/dist/store.d.ts","../store/dist/shallow.d.ts","../store/dist/index.d.ts","./src/index.ts","../../node_modules/.pnpm/marko@6.1.18/node_modules/marko/tags/let.d.marko","../../node_modules/.pnpm/marko@6.1.18/node_modules/marko/tags/lifecycle.d.marko","./src/tags/store-atom.marko","../../node_modules/.pnpm/marko@6.1.18/node_modules/marko/tags/const.d.marko","./src/tags/store-selector.marko","../../node_modules/.pnpm/@vitest+pretty-format@4.1.4/node_modules/@vitest/pretty-format/dist/index.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/display.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/types.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/helpers.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/timers.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/index.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/types.d-bcelap-c.d.ts","../../node_modules/.pnpm/@vitest+utils@4.1.4/node_modules/@vitest/utils/dist/diff.d.ts","../../node_modules/.pnpm/@vitest+runner@4.1.4/node_modules/@vitest/runner/dist/tasks.d-bh0ijn67.d.ts","../../node_modules/.pnpm/@vitest+runner@4.1.4/node_modules/@vitest/runner/dist/index.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/traces.d.402v_yfi.d.ts","../../node_modules/.pnpm/vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4.2_sass@1.97.3_terser@5.46.0_yaml@2.8.3/node_modules/vite/types/hmrpayload.d.ts","../../node_modules/.pnpm/vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4.2_sass@1.97.3_terser@5.46.0_yaml@2.8.3/node_modules/vite/dist/node/chunks/modulerunnertransport.d.ts","../../node_modules/.pnpm/vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4.2_sass@1.97.3_terser@5.46.0_yaml@2.8.3/node_modules/vite/types/customevent.d.ts","../../node_modules/.pnpm/vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4.2_sass@1.97.3_terser@5.46.0_yaml@2.8.3/node_modules/vite/types/hot.d.ts","../../node_modules/.pnpm/vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4.2_sass@1.97.3_terser@5.46.0_yaml@2.8.3/node_modules/vite/dist/node/module-runner.d.ts","../../node_modules/.pnpm/@vitest+snapshot@4.1.4/node_modules/@vitest/snapshot/dist/environment.d-dojxxzv9.d.ts","../../node_modules/.pnpm/@vitest+snapshot@4.1.4/node_modules/@vitest/snapshot/dist/rawsnapshot.d-d_x3-62x.d.ts","../../node_modules/.pnpm/@vitest+snapshot@4.1.4/node_modules/@vitest/snapshot/dist/index.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/config.d.chuh6-ad.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/environment.d.crsxczp1.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/rpc.d.bfmwpdph.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/worker.d.ccknuvi5.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/browser.d.c0zgu1u9.d.ts","../../node_modules/.pnpm/@vitest+spy@4.1.4/node_modules/@vitest/spy/optional-types.d.ts","../../node_modules/.pnpm/@vitest+spy@4.1.4/node_modules/@vitest/spy/dist/index.d.ts","../../node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.d.ts","../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../../node_modules/.pnpm/@vitest+expect@4.1.4/node_modules/@vitest/expect/dist/index.d.ts","../../node_modules/.pnpm/@vitest+runner@4.1.4/node_modules/@vitest/runner/dist/utils.d.ts","../../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/benchmark.d.daahlpsq.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/global.d.d74z04p1.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/optional-runtime-types.d.ts","../../node_modules/.pnpm/@vitest+mocker@4.1.4_vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4._52529e11fbc5270d800772cd5a3414fe/node_modules/@vitest/mocker/dist/types.d-bji5eawu.d.ts","../../node_modules/.pnpm/@vitest+mocker@4.1.4_vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4._52529e11fbc5270d800772cd5a3414fe/node_modules/@vitest/mocker/dist/index.d-b41z0auw.d.ts","../../node_modules/.pnpm/@vitest+mocker@4.1.4_vite@8.0.13_@types+node@25.6.0_esbuild@0.27.7_jiti@2.6.1_less@4.4._52529e11fbc5270d800772cd5a3414fe/node_modules/@vitest/mocker/dist/index.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/suite.d.udjtyagw.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/chunks/evaluatedmodules.d.bxj5omdx.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/runners.d.ts","../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../../node_modules/.pnpm/vitest@4.1.4_@types+node@25.6.0_@vitest+coverage-istanbul@4.1.4_jsdom@29.0.2_vite@8.0.1_22a3d0f58630d12022c9baef53fd7ab3/node_modules/vitest/dist/index.d.ts","./tests/index.test.ts","./tests/marko.d.ts","./tests/setup.ts","./tests/fixtures/ssr-store.ts","./tests/fixtures/ssr-selector.marko","./tests/fixtures/ssr-atom.marko","./tests/fixtures/ssr-object-antipattern.marko","./tests/ssr.test.ts","../../node_modules/.pnpm/@types+aria-query@5.0.4/node_modules/@types/aria-query/index.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/matches.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/wait-for.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/query-helpers.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/queries.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/get-queries-for-element.d.ts","../../node_modules/.pnpm/pretty-format@27.5.1/node_modules/pretty-format/build/types.d.ts","../../node_modules/.pnpm/pretty-format@27.5.1/node_modules/pretty-format/build/index.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/screen.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/wait-for-element-to-be-removed.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/get-node-text.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/events.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/pretty-dom.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/role-helpers.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/config.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/suggestions.d.ts","../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/types/index.d.ts","./tests/fixtures/selector-host.marko","./tests/fixtures/atom-host.marko","./tests/fixtures/selector-source-swap-host.marko","./tests/fixtures/selector-selector-swap-host.marko","./tests/tags.test.ts","../../node_modules/.pnpm/@marko+language-tools@2.6.0/node_modules/@marko/language-tools/marko.internal.d.ts","../../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../../node_modules/.pnpm/marko@6.1.18/node_modules/marko/tags-html.d.ts","../../node_modules/.pnpm/marko@6.1.18/node_modules/marko/index.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/blob.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/console.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/crypto.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/encoding.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/utility.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/client-stats.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/round-robin-pool.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/h2c-client.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-call-history.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/snapshot-agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/cache-interceptor.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@7.19.2/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/importmeta.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/messaging.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/performance.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/streams.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/timers.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/web-globals/url.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/inspector/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/path/posix.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/path/win32.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/quic.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/test/reporters.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/util/types.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@25.6.0/node_modules/@types/node/index.d.ts"],"fileIdsList":[[159,222,230,234,237,239,240,241,254],[135,159,222,230,234,237,239,240,241,254],[132,133,134,135,136,139,140,141,142,143,144,145,146,159,222,230,234,237,239,240,241,254],[131,159,222,230,234,237,239,240,241,254],[138,159,222,230,234,237,239,240,241,254],[132,133,134,159,222,230,234,237,239,240,241,254],[132,133,159,222,230,234,237,239,240,241,254],[135,136,138,159,222,230,234,237,239,240,241,254],[133,159,222,230,234,237,239,240,241,254],[102,103,159,222,230,234,237,239,240,241,254],[159,219,220,222,230,234,237,239,240,241,254],[159,221,222,230,234,237,239,240,241,254],[222,230,234,237,239,240,241,254],[159,222,230,234,237,239,240,241,254,262],[159,222,223,228,230,233,234,237,239,240,241,243,254,259,271],[159,222,223,224,230,233,234,237,239,240,241,254],[159,222,225,230,234,237,239,240,241,254,272],[159,222,226,227,230,234,237,239,240,241,245,254],[159,222,227,230,234,237,239,240,241,254,259,268],[159,222,228,230,233,234,237,239,240,241,243,254],[159,221,222,229,230,234,237,239,240,241,254],[159,222,230,231,234,237,239,240,241,254],[159,222,230,232,233,234,237,239,240,241,254],[159,221,222,230,233,234,237,239,240,241,254],[159,222,230,233,234,235,237,239,240,241,254,259,271],[159,222,230,233,234,235,237,239,240,241,254,259,262],[159,209,222,230,233,234,236,237,239,240,241,243,254,259,271],[159,222,230,233,234,236,237,239,240,241,243,254,259,268,271],[159,222,230,234,236,237,238,239,240,241,254,259,268,271],[157,158,159,160,161,162,163,164,165,166,167,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278],[159,222,230,233,234,237,239,240,241,254],[159,222,230,234,237,239,241,254],[159,222,230,234,237,239,240,241,242,254,271],[159,222,230,233,234,237,239,240,241,243,254,259],[159,222,230,234,237,239,240,241,245,254],[159,222,230,234,237,239,240,241,246,254],[159,222,230,233,234,237,239,240,241,249,254],[159,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278],[159,222,230,234,237,239,240,241,251,254],[159,222,230,234,237,239,240,241,252,254],[159,222,227,230,234,237,239,240,241,243,254,262],[159,222,230,233,234,237,239,240,241,254,255],[159,222,230,234,237,239,240,241,254,256,272,275],[159,222,230,233,234,237,239,240,241,254,259,261,262],[159,222,230,234,237,239,240,241,254,260,262],[159,222,230,234,237,239,240,241,254,262,272],[159,222,230,234,237,239,240,241,254,263],[159,219,222,230,234,237,239,240,241,254,259,265,271],[159,222,230,234,237,239,240,241,254,259,264],[159,222,230,233,234,237,239,240,241,254,266,267],[159,222,230,234,237,239,240,241,254,266,267],[159,222,227,230,234,237,239,240,241,243,254,259,268],[159,222,230,234,237,239,240,241,254,269],[159,222,230,234,237,239,240,241,243,254,270],[159,222,230,234,236,237,239,240,241,252,254,271],[159,222,230,234,237,239,240,241,254,272,273],[159,222,227,230,234,237,239,240,241,254,273],[159,222,230,234,237,239,240,241,254,259,274],[159,222,230,234,237,239,240,241,242,254,275],[159,222,230,234,237,239,240,241,254,276],[159,222,225,230,234,237,239,240,241,254],[159,222,227,230,234,237,239,240,241,254],[159,222,230,234,237,239,240,241,254,272],[159,209,222,230,234,237,239,240,241,254],[159,222,230,234,237,239,240,241,254,271],[159,222,230,234,237,239,240,241,254,277],[159,222,230,234,237,239,240,241,249,254],[159,222,230,234,237,239,240,241,254,267],[159,209,222,230,233,234,235,237,239,240,241,249,254,259,262,271,274,275,277],[159,222,230,234,237,239,240,241,254,259,278],[75,81,99,100,101,104,159,222,230,234,237,239,240,241,254],[111,159,222,230,234,237,239,240,241,254],[111,112,159,222,230,234,237,239,240,241,254],[79,81,82,159,222,230,234,237,239,240,241,254],[79,81,159,222,230,234,237,239,240,241,254],[79,159,222,230,234,237,239,240,241,254],[74,79,90,91,159,222,230,234,237,239,240,241,254],[74,79,90,159,222,230,234,237,239,240,241,254],[98,159,222,230,234,237,239,240,241,254],[74,80,159,222,230,234,237,239,240,241,254],[74,159,222,230,234,237,239,240,241,254],[76,159,222,230,234,237,239,240,241,254],[74,75,76,77,78,159,222,230,234,237,239,240,241,254],[117,118,159,222,230,234,237,239,240,241,254],[117,118,119,120,159,222,230,234,237,239,240,241,254],[117,119,159,222,230,234,237,239,240,241,254],[117,159,222,230,234,237,239,240,241,254],[124,155,159,222,230,234,237,239,240,241,254],[154,159,222,230,234,237,239,240,241,254],[137,159,222,230,234,237,239,240,241,254],[159,174,177,180,181,222,230,234,237,239,240,241,254,271],[159,177,222,230,234,237,239,240,241,254,259,271],[159,177,181,222,230,234,237,239,240,241,254,271],[159,222,230,234,237,239,240,241,254,259],[159,171,222,230,234,237,239,240,241,254],[159,175,222,230,234,237,239,240,241,254],[159,173,174,177,222,230,234,237,239,240,241,254,271],[159,222,230,234,237,239,240,241,243,254,268],[159,222,230,234,237,239,240,241,254,279],[159,171,222,230,234,237,239,240,241,254,279],[159,173,177,222,230,234,237,239,240,241,243,254,271],[159,168,169,170,172,176,222,230,233,234,237,239,240,241,254,259,271],[159,177,186,194,222,230,234,237,239,240,241,254],[159,169,175,222,230,234,237,239,240,241,254],[159,177,203,204,222,230,234,237,239,240,241,254],[159,169,172,177,222,230,234,237,239,240,241,254,262,271,279],[159,177,222,230,234,237,239,240,241,254],[159,173,177,222,230,234,237,239,240,241,254,271],[159,168,222,230,234,237,239,240,241,254],[159,171,172,173,175,176,177,178,179,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,204,205,206,207,208,222,230,234,237,239,240,241,254],[159,177,196,199,222,230,234,237,239,240,241,254],[159,177,186,187,188,222,230,234,237,239,240,241,254],[159,175,177,187,189,222,230,234,237,239,240,241,254],[159,176,222,230,234,237,239,240,241,254],[159,169,171,177,222,230,234,237,239,240,241,254],[159,177,181,187,189,222,230,234,237,239,240,241,254],[159,181,222,230,234,237,239,240,241,254],[159,175,177,180,222,230,234,237,239,240,241,254,271],[159,169,173,177,186,222,230,234,237,239,240,241,254],[159,177,196,222,230,234,237,239,240,241,254],[159,189,222,230,234,237,239,240,241,254],[159,171,177,203,222,230,234,237,239,240,241,254,262,277,279],[85,159,222,230,234,237,239,240,241,254],[85,86,87,88,159,222,230,234,237,239,240,241,254],[87,159,222,230,234,237,239,240,241,254],[83,106,107,109,159,222,230,234,237,239,240,241,254],[83,84,96,109,159,222,230,234,237,239,240,241,254],[74,81,83,92,109,159,222,230,234,237,239,240,241,254],[89,159,222,230,234,237,239,240,241,254],[74,83,92,95,105,108,109,159,222,230,234,237,239,240,241,254],[83,84,89,92,109,159,222,230,234,237,239,240,241,254],[83,106,107,108,109,159,222,230,234,237,239,240,241,254],[83,89,93,94,95,109,159,222,230,234,237,239,240,241,254],[74,79,81,83,84,89,92,93,94,95,96,97,99,105,106,107,108,109,110,113,114,115,116,121,159,222,230,234,237,239,240,241,254],[74,81,83,84,92,93,106,107,108,109,114,159,222,230,234,237,239,240,241,254],[67,159,222,230,234,237,239,240,241,254],[69,70,159,222,230,234,237,239,240,241,254],[69,70,72,159,222,230,234,237,239,240,241,254],[71,159,222,230,234,237,239,240,241,254],[73,159,222,230,234,237,239,240,241,254],[69,72,73,159,222,230,234,237,239,240,241,254],[71,126,159,222,230,234,237,239,240,241,254],[73,126,159,222,230,234,237,239,240,241,254],[68,159,222,230,234,237,239,240,241,254],[68,122,159,222,230,234,237,239,240,241,254],[122,126,127,128,129,159,222,230,234,237,239,240,241,254],[68,122,147,148,149,150,151,159,222,230,234,237,239,240,241,254],[63,159,222,230,234,237,239,240,241,254],[63,64,65,66,159,222,230,234,237,239,240,241,254],[62,159,222,230,234,237,239,240,241,254]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},"39f13fb4279fe07702c870642a2ec26db019d3afdb5b369523c45c77ed266c65","51aae950c97b61105064619e52f8b4e702ed9d88f6a38d8a6d461389be28dd0b","08a8feab6868367d5112474f9015e5b00c101012a639309e88fb105f94ced534","a15a870f6ab5a26a7eb91ddd8c47ff4e00bc23ece96ab48ff8aaf42450478a50","73390a82cbd5ea87d8bcdf183d66853207a111de00a8512c68ca17b47a11e65d","53755d0e8037d36720dc68e2e8c77512698befd0c0d48ac5d20c41986df91bc2","e746dbf4e43b9e40b9965f1cbe15f029b066423b294c6a69ea7f2f9cd9091758","2e88396eb16a936421ad6de3e2da7a7b","41f7e591762f7ab63f1cae9baad59534","b320bf9f32b091f50800df8894392fd5","10faacc9b67dd33e042f567ac9343c13","28934f4e9d4f4ee2fabd4e20e127c9d5",{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"3b0a56d056d81a011e484b9c05d5e430711aaecd561a788bad1d0498aad782c7","impliedFormat":99},{"version":"9443967db823b66d1682be7fc66392be7c7924e10c3e54900f456341e94591a6","impliedFormat":99},{"version":"424f71d1fae96ac2e878af92345bb87bea1d29f757228fbc190133b305643f2c","impliedFormat":99},{"version":"ac3d263474022e9a14c43f588f485d549641d839b159ecc971978b90f34bdf6b","impliedFormat":99},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"de4a612aa8f1704af486f701e21993c786ba7d8cfed55fffa6684026aea2346e","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"8887e70871f697fa42ad7cdf32168db60ec2d6760c173c97973e35377fe5d83b","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"6bb6d57454370324434bcf355942dee45b0e0d8ab0fa3e98bafe8a30718273b4","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"a86701e56b10a6d1ef9b2ecaeedbab94ed7b957a646cd71fd09d02b323c6d3d7","impliedFormat":99},{"version":"976932e3807786cdae46ed5dfcd02c44f3fa25c157a0e8392f5a2dabb9a14a4e","impliedFormat":99},{"version":"59b7a8ec1781284f6602af48487b68fc3baadf34cb4cbcbb31f213b6712fac34","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"ed9bb55ddcbebd5cb3eee991f57ff21438546ee40ee1c310281bd12a6c7cf65b","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"4c3d12ac5744ff4ba2e1ce97ec307f09d726b4cfcfd5eff3315ccc080d620fb9","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"abdaf8c2f20089a6b23a6287007ed16f9cf76d0045ce2973a5f8508c87286d21","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"8c9917efcdf61e9b9a73ac1e289c612f12db33519ca1445cca41865f7887c737","impliedFormat":99},"dc7de349426eeba24b0424219a61ef400d6fbbd9a75ce1a924964f33066e20a7","59ec10f39bff3eaf54f0ab11a2da8097a235519d4c2bebfff514ea3d83b4e3fa",{"version":"943627b96a61dbb76261f6cdf0192ae32ffd49ad466a87595e8fba1f748db814","affectsGlobalScope":true},"d513ea666385f2c8007e764e582e9ddb7bdcfe686eadf102be053e25ff9eb265","2adc3d8d9e7018f11f8f95f9772804f3","7e82a2d918950e6553231ada223aa21b","0a6ebd564b9cd399aab7fe4b29804fc5",{"version":"6bb962e9bdb839aa19ecb431d8ea9de269968bd2e7883523f68b6ac6e3d14ca9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"3cfb7c0c642b19fb75132154040bb7cd840f0002f9955b14154e69611b9b3f81","impliedFormat":1},{"version":"8387ec1601cf6b8948672537cf8d430431ba0d87b1f9537b4597c1ab8d3ade5b","impliedFormat":1},{"version":"d16f1c460b1ca9158e030fdf3641e1de11135e0c7169d3e8cf17cc4cc35d5e64","impliedFormat":1},{"version":"a934063af84f8117b8ce51851c1af2b76efe960aa4c7b48d0343a1b15c01aedf","impliedFormat":1},{"version":"e3c5ad476eb2fca8505aee5bdfdf9bf11760df5d0f9545db23f12a5c4d72a718","impliedFormat":1},{"version":"462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","impliedFormat":1},{"version":"5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","impliedFormat":1},{"version":"d0570ce419fb38287e7b39c910b468becb5b2278cf33b1000a3d3e82a46ecae2","impliedFormat":1},{"version":"3aca7f4260dad9dcc0a0333654cb3cde6664d34a553ec06c953bce11151764d7","impliedFormat":1},{"version":"a0a6f0095f25f08a7129bc4d7cb8438039ec422dc341218d274e1e5131115988","impliedFormat":1},{"version":"b58f396fe4cfe5a0e4d594996bc8c1bfe25496fbc66cf169d41ac3c139418c77","impliedFormat":1},{"version":"45785e608b3d380c79e21957a6d1467e1206ac0281644e43e8ed6498808ace72","impliedFormat":1},{"version":"bece27602416508ba946868ad34d09997911016dbd6893fb884633017f74e2c5","impliedFormat":1},{"version":"2a90177ebaef25de89351de964c2c601ab54d6e3a157cba60d9cd3eaf5a5ee1a","impliedFormat":1},{"version":"82200e963d3c767976a5a9f41ecf8c65eca14a6b33dcbe00214fcbe959698c46","impliedFormat":1},{"version":"b4966c503c08bbd9e834037a8ab60e5f53c5fd1092e8873c4a1c344806acdab2","impliedFormat":1},"cbff6d86c61506feebebf2e5204c3a2e","77c5d8fa66f03d542472c4a343d84f8e","cc1ca60428e3906aa45dfb1d3b4dba23","0fc1985168c5d611789e82c0701bae48","70db4230f2c1d9974206ad3b904757972593c2fd2bec0d28ee474bc7a44ba6d0",{"version":"c265bff524f49bce83a4b52c16325e5bafbf5ee5b68e4544ceac12d8f1fcd7c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"bf987531ac8c5b5a795bbac840e92daea5b135ecdec6371c143e8d116599079f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b059875943da7c4555bb340cffea782dcc789d9cd633deed4fc1f856356f5784","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4137ebf04166f3a325f056aa56101adc75e9dceb30404a1844eb8604d89770e2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"8caeb65fdc3bfe0d13f86f67324fcb2d858ed1c55f1f0cce892eb1acfb9f3239","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"e3905f6902f0b69e5eefc230daa69fdd4ab707a973ec2d086d65af1b3ea47ef0","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"07e4e61e946a9c15045539ecd5f5d2d02e7aab6fa82567826857e09cf0f37c2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c4714ccc29149efb8777a1da0b04b8d2258f5d13ddbf4cd3c3d361fb531ac86","impliedFormat":1},{"version":"3ff275f84f89f8a7c0543da838f9da9614201abc4ce74c533029825adfb4433d","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"f9713757bcdfa4d58b48c0fb249e752c94a3eee8bf4532b906094246ac49ef88","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"6fe28249ac0c7bc19a79aa9264baf00efbd080e868dbe1d3052033ad1c64f206","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"ce8653341224f8b45ff46d2a06f2cacb96f841f768a886c9d8dd8ec0878b11bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"a74edb3bab7394a9dbde529d60632be590def2f5f01024dbd85441587fbfbbe0","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"00049ccc87f3f37726db03c01ca68fe74fd9c0109b68c29eb9923ebec2c76b13","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"68d3f35108e2608b1f2f28b36d19d7055f31c4465cc5692cbd06c716a9fe7973","impliedFormat":1},{"version":"a6d543044570fbeed13a7f9925a868081cd2b14ef59cdd9da6ae76d41cab03d3","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"eab2f3179607acb3d44b2db2a76dd7d621c5039b145dc160a1ee733963f9d2f5","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"6f5383b3df1cdf4ff1aa7fb0850f77042b5786b5e65ec9a9b6be56ebfe4d9036","impliedFormat":1},{"version":"62fc21ed9ccbd83bd1166de277a4b5daaa8d15b5fa614c75610d20f3b73fba87","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"c77fb31bc17fd241d3922a9f88c59e3361cdf76d1328ba9412fc6bf7310b638d","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"694b812e0ed11285e8822cf8131e3ce7083a500b3b1d185fff9ed1089677bd0a","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1}],"root":[68,71,73,[123,130],[148,153],156],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"allowUnreachableCode":false,"allowUnusedLabels":false,"checkJs":true,"composite":true,"declaration":true,"esModuleInterop":true,"module":99,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[153,1],[101,1],[145,1],[142,1],[141,1],[136,2],[147,3],[132,4],[143,5],[135,6],[134,7],[144,1],[139,8],[146,1],[140,9],[133,1],[131,1],[104,10],[102,1],[219,11],[220,11],[221,12],[159,13],[222,14],[223,15],[224,16],[157,1],[225,17],[226,18],[227,19],[228,20],[229,21],[230,22],[231,22],[232,23],[233,24],[234,25],[235,26],[160,1],[158,1],[236,27],[237,28],[238,29],[279,30],[239,31],[240,32],[241,31],[242,33],[243,34],[245,35],[246,36],[247,36],[248,36],[249,37],[250,38],[251,39],[252,40],[253,41],[254,42],[255,42],[256,43],[257,1],[258,1],[259,44],[260,45],[261,44],[262,46],[263,47],[264,48],[265,49],[266,50],[267,51],[268,52],[269,53],[270,54],[271,55],[272,56],[273,57],[274,58],[275,59],[276,60],[161,31],[162,1],[163,61],[164,62],[165,1],[166,63],[167,1],[210,64],[211,65],[212,66],[213,66],[214,67],[215,1],[216,14],[217,68],[218,65],[277,69],[278,70],[105,71],[112,72],[113,73],[111,1],[74,1],[83,74],[82,75],[106,74],[90,76],[92,77],[91,78],[99,79],[98,1],[81,80],[75,81],[77,82],[79,83],[78,1],[80,81],[76,1],[103,1],[244,1],[154,1],[119,84],[121,85],[120,86],[118,87],[117,1],[156,88],[155,89],[72,1],[69,1],[70,1],[138,90],[137,1],[107,1],[100,1],[60,1],[61,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[58,1],[1,1],[59,1],[186,91],[198,92],[183,93],[199,94],[208,95],[174,96],[175,97],[173,98],[207,99],[202,100],[206,101],[177,102],[195,103],[176,104],[205,105],[171,106],[172,100],[178,107],[179,1],[185,108],[182,107],[169,109],[209,110],[200,111],[189,112],[188,107],[190,113],[193,114],[187,115],[191,116],[203,99],[180,117],[181,118],[194,119],[170,94],[197,120],[196,107],[184,118],[192,121],[201,1],[168,1],[204,122],[86,123],[89,124],[87,123],[85,1],[88,125],[108,126],[97,127],[93,128],[94,76],[115,129],[109,130],[95,131],[114,132],[84,1],[96,133],[122,134],[116,135],[110,1],[68,136],[71,137],[73,138],[149,139],[148,140],[151,141],[150,141],[128,142],[129,137],[127,143],[126,144],[123,145],[124,1],[125,1],[130,146],[152,147],[62,1],[64,148],[67,149],[66,1],[65,148],[63,150]],"affectedFilesPendingEmit":[[68,17],[71,17],[73,17],[149,17],[148,17],[151,17],[150,17],[128,17],[129,17],[127,17],[126,17],[123,17],[125,17],[130,17],[152,17]],"emitSignatures":[68,71,73,123,125,126,127,128,129,130,148,149,150,151,152],"version":"6.0.3"} \ No newline at end of file From 3d003fdde7ae3b0af10b3e23fc4fa9372acc1f9c Mon Sep 17 00:00:00 2001 From: defunkt-dev Date: Fri, 26 Jun 2026 11:06:08 -0600 Subject: [PATCH 04/29] e2e success with knip fails --- .prettierrc | 2 +- knip.json | 8 +- package.json | 1 + packages/marko-store/e2e/README.md | 50 ++++++ packages/marko-store/e2e/playwright.config.ts | 22 +++ packages/marko-store/e2e/server.mjs | 39 ++++ packages/marko-store/e2e/src/index.ts | 42 +++++ packages/marko-store/e2e/src/page.marko | 42 +++++ packages/marko-store/e2e/src/store.js | 8 + .../e2e/store-resume-liveness.spec.ts | 59 ++++++ packages/marko-store/package.json | 2 + .../marko-store/test-results/.last-run.json | 4 + pnpm-lock.yaml | 170 ++++++++++++++++-- 13 files changed, 433 insertions(+), 16 deletions(-) create mode 100644 packages/marko-store/e2e/README.md create mode 100644 packages/marko-store/e2e/playwright.config.ts create mode 100644 packages/marko-store/e2e/server.mjs create mode 100644 packages/marko-store/e2e/src/index.ts create mode 100644 packages/marko-store/e2e/src/page.marko create mode 100644 packages/marko-store/e2e/src/store.js create mode 100644 packages/marko-store/e2e/store-resume-liveness.spec.ts create mode 100644 packages/marko-store/test-results/.last-run.json diff --git a/.prettierrc b/.prettierrc index c4d3dad5..c324b915 100644 --- a/.prettierrc +++ b/.prettierrc @@ -2,6 +2,6 @@ "semi": false, "singleQuote": true, "trailingComma": "all", - "plugins": ["prettier-plugin-svelte"], + "plugins": ["prettier-plugin-svelte", "prettier-plugin-marko"], "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] } diff --git a/knip.json b/knip.json index e1dfef2b..758ef797 100644 --- a/knip.json +++ b/knip.json @@ -2,7 +2,13 @@ "$schema": "https://unpkg.com/knip@5/schema.json", "workspaces": { "packages/marko-store": { - "entry": ["src/index.ts", "src/tags/**/*.marko"], + "entry": [ + "src/index.ts", + "src/tags/**/*.marko", + "e2e/server.mjs", + "e2e/src/index.js", + "e2e/src/store.js" + ], "ignoreDependencies": ["@marko/language-tools", "marko"] }, "packages/vue-store": { diff --git a/package.json b/package.json index b3e0f4b6..61cfa049 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "nx": "22.6.5", "premove": "^4.0.0", "prettier": "^3.8.2", + "prettier-plugin-marko": "^4.0.9", "prettier-plugin-svelte": "^3.5.1", "publint": "^0.3.18", "sherif": "^1.11.1", diff --git a/packages/marko-store/e2e/README.md b/packages/marko-store/e2e/README.md new file mode 100644 index 00000000..eea11381 --- /dev/null +++ b/packages/marko-store/e2e/README.md @@ -0,0 +1,50 @@ +# marko-store e2e (resume liveness) + +A real-browser proof that an SSR'd page using `` and `` resumes and +stays reactive. jsdom can render and serialize but cannot faithfully reproduce Marko 6's client +resume, so this round-trip lives here (Playwright + real Chromium) rather than in the vitest +suite. + +## What it proves + +`store-resume-liveness.spec.ts` loads the SSR'd page and checks, in order: + +1. **The page resumed** -- a store-independent `data-testid="resumed"` marker flips from `no` + (server) to `yes` (client `onMount`). This is the precondition; if it stays `no`, the page + never resumed and any further result is inconclusive. +2. **Seeded values rendered** -- `selector-count` is `5` and `atom-value` is `7`, from the + module-singleton `createStore({ count: 5 })` / `createAtom(7)`. +3. **Selector subscription is live** -- clicking a button that calls `counterStore.setState` + from outside any tag moves `selector-count` to `6`. +4. **Atom write-back is live** -- clicking the atom button (`value++`) flows through the tag's + `valueChange` into `countAtom.set` and moves `atom-value` to `8`. +5. **No serialization crash** -- no `pageerror` / `console.error` during render or resume. + +A `resumed=yes` result with a stale value would mean a tag is inert after resume (the failure +this is designed to catch), distinct from a `resumed=no` setup failure. + +## Architecture + +- `server.mjs` -- Vite (middleware mode) + `@marko/vite`, on port 5188. It `ssrLoadModule`s the + JS entry `src/index.js` (not the `.marko` directly); only the JS-entry path makes `@marko/vite` + inject the client ` + + diff --git a/examples/marko/atoms/package.json b/examples/marko/atoms/package.json new file mode 100644 index 00000000..48953fac --- /dev/null +++ b/examples/marko/atoms/package.json @@ -0,0 +1,20 @@ +{ + "name": "@tanstack/store-example-marko-atoms", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --port=3061", + "build": "vite build", + "preview": "vite preview", + "test:types": "marko-type-check -p tsconfig.json" + }, + "dependencies": { + "@tanstack/marko-store": "^0.11.0", + "marko": "^6" + }, + "devDependencies": { + "@marko/type-check": "^3.1.0", + "@marko/vite": "^6", + "vite": "^8.0.8" + } +} diff --git a/examples/marko/atoms/src/App.marko b/examples/marko/atoms/src/App.marko new file mode 100644 index 00000000..b5cb22ad --- /dev/null +++ b/examples/marko/atoms/src/App.marko @@ -0,0 +1,20 @@ +import { countAtom } from './atom' + +
+

Marko Atoms

+

This example creates a module-level atom and reads and updates it with the tags.

+ + + countAtom)/> +

Total: ${total}

+ +
+ + +
+ + + countAtom)/> +

Editable count: ${count}

+ +
diff --git a/examples/marko/atoms/src/atom.ts b/examples/marko/atoms/src/atom.ts new file mode 100644 index 00000000..79fa57fc --- /dev/null +++ b/examples/marko/atoms/src/atom.ts @@ -0,0 +1,4 @@ +import { createAtom } from '@tanstack/marko-store' + +// You can create atoms outside of components, at module scope. +export const countAtom = createAtom(0) diff --git a/examples/marko/atoms/src/index.ts b/examples/marko/atoms/src/index.ts new file mode 100644 index 00000000..21867a93 --- /dev/null +++ b/examples/marko/atoms/src/index.ts @@ -0,0 +1,4 @@ +import App from './App.marko' + +const el = document.getElementById('app') +if (el) App.mount({}, el) diff --git a/examples/marko/atoms/tsconfig.json b/examples/marko/atoms/tsconfig.json new file mode 100644 index 00000000..9e8192a6 --- /dev/null +++ b/examples/marko/atoms/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "strict": true, + "noEmit": true, + "skipLibCheck": true + }, + "include": ["src/**/*.ts", "src/**/*.marko"] +} diff --git a/examples/marko/atoms/vite.config.ts b/examples/marko/atoms/vite.config.ts new file mode 100644 index 00000000..ac3ced6c --- /dev/null +++ b/examples/marko/atoms/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import marko from '@marko/vite' + +// linked: false => browser-only build (a client-only SPA, mounted in src/index.ts). +export default defineConfig({ + plugins: [marko({ linked: false })], +}) diff --git a/examples/marko/simple/README.md b/examples/marko/simple/README.md new file mode 100644 index 00000000..5dd074e6 --- /dev/null +++ b/examples/marko/simple/README.md @@ -0,0 +1,10 @@ +# Marko Store — simple + +A multi-component counter split across files. `Increment.marko` writes with +`store.setState`; `Display.marko` reads a slice with ``; +`App.marko` composes them around a module-level store in `store.ts`. + +To run this example: + +- `npm install` +- `npm run dev` diff --git a/examples/marko/simple/index.html b/examples/marko/simple/index.html new file mode 100644 index 00000000..0d0ff6ac --- /dev/null +++ b/examples/marko/simple/index.html @@ -0,0 +1,12 @@ + + + + + + Marko Store Example — simple + + +
+ + + diff --git a/examples/marko/simple/package.json b/examples/marko/simple/package.json new file mode 100644 index 00000000..331b7abb --- /dev/null +++ b/examples/marko/simple/package.json @@ -0,0 +1,20 @@ +{ + "name": "@tanstack/store-example-marko-simple", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --port=3060", + "build": "vite build", + "preview": "vite preview", + "test:types": "marko-type-check -p tsconfig.json" + }, + "dependencies": { + "@tanstack/marko-store": "^0.11.0", + "marko": "^6" + }, + "devDependencies": { + "@marko/type-check": "^3.1.0", + "@marko/vite": "^6", + "vite": "^8.0.8" + } +} diff --git a/examples/marko/simple/src/App.marko b/examples/marko/simple/src/App.marko new file mode 100644 index 00000000..50d72bf4 --- /dev/null +++ b/examples/marko/simple/src/App.marko @@ -0,0 +1,11 @@ +import Increment from './Increment.marko' +import Display from './Display.marko' + +
+

How many of your friends like cats or dogs?

+

Press a button to add a counter of how many of your friends like cats or dogs.

+ + + + +
diff --git a/examples/marko/simple/src/Display.marko b/examples/marko/simple/src/Display.marko new file mode 100644 index 00000000..68449c2c --- /dev/null +++ b/examples/marko/simple/src/Display.marko @@ -0,0 +1,9 @@ +import { store } from './store' + +export interface Input { + animal: 'dogs' | 'cats' +} + +// Re-renders only when state[animal] changes; an unrelated change won't re-render it. + store) selector=((s: { dogs: number; cats: number }) => s[input.animal])/> +
${input.animal}: ${count}
diff --git a/examples/marko/simple/src/Increment.marko b/examples/marko/simple/src/Increment.marko new file mode 100644 index 00000000..3d771c5d --- /dev/null +++ b/examples/marko/simple/src/Increment.marko @@ -0,0 +1,11 @@ +import { store } from './store' + +export interface Input { + animal: 'dogs' | 'cats' +} + + diff --git a/examples/marko/simple/src/index.ts b/examples/marko/simple/src/index.ts new file mode 100644 index 00000000..21867a93 --- /dev/null +++ b/examples/marko/simple/src/index.ts @@ -0,0 +1,4 @@ +import App from './App.marko' + +const el = document.getElementById('app') +if (el) App.mount({}, el) diff --git a/examples/marko/simple/src/store.ts b/examples/marko/simple/src/store.ts new file mode 100644 index 00000000..d3cc5d82 --- /dev/null +++ b/examples/marko/simple/src/store.ts @@ -0,0 +1,7 @@ +import { createStore } from '@tanstack/marko-store' + +// You can instantiate a Store outside of components, at module scope. +export const store = createStore({ + dogs: 0, + cats: 0, +}) diff --git a/examples/marko/simple/tsconfig.json b/examples/marko/simple/tsconfig.json new file mode 100644 index 00000000..9e8192a6 --- /dev/null +++ b/examples/marko/simple/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "strict": true, + "noEmit": true, + "skipLibCheck": true + }, + "include": ["src/**/*.ts", "src/**/*.marko"] +} diff --git a/examples/marko/simple/vite.config.ts b/examples/marko/simple/vite.config.ts new file mode 100644 index 00000000..ac3ced6c --- /dev/null +++ b/examples/marko/simple/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import marko from '@marko/vite' + +// linked: false => browser-only build (a client-only SPA, mounted in src/index.ts). +export default defineConfig({ + plugins: [marko({ linked: false })], +}) diff --git a/examples/marko/ssr-per-request-multi/README.md b/examples/marko/ssr-per-request-multi/README.md new file mode 100644 index 00000000..fb643d6a --- /dev/null +++ b/examples/marko/ssr-per-request-multi/README.md @@ -0,0 +1,15 @@ +# Marko Store — ssr-per-request-multi + +Two pages. The home page (`/`) rebuilds a store from per-request DATA passed by +the route: the data crosses in the serialized payload and the store is rebuilt on +each side. The `/multi` page parks a bundle of two stores in one provider, read +independently, with a context write targeting one. + +This is a development demonstration, run with the Marko Vite dev server. It is +NOT a deployable production server — real Marko production uses `@marko/run`. + +To run this example: + +- `npm install` +- `npm run dev` +- open `/` and `/multi` diff --git a/examples/marko/ssr-per-request-multi/package.json b/examples/marko/ssr-per-request-multi/package.json new file mode 100644 index 00000000..8db1c9fa --- /dev/null +++ b/examples/marko/ssr-per-request-multi/package.json @@ -0,0 +1,18 @@ +{ + "name": "@tanstack/store-example-marko-ssr-per-request-multi", + "private": true, + "type": "module", + "scripts": { + "dev": "node server.mjs", + "test:types": "marko-type-check -p tsconfig.json" + }, + "dependencies": { + "@tanstack/marko-store": "^0.11.0", + "marko": "^6" + }, + "devDependencies": { + "@marko/type-check": "^3.1.0", + "@marko/vite": "^6", + "vite": "^8.0.8" + } +} diff --git a/examples/marko/ssr-per-request-multi/server.mjs b/examples/marko/ssr-per-request-multi/server.mjs new file mode 100644 index 00000000..1967cf08 --- /dev/null +++ b/examples/marko/ssr-per-request-multi/server.mjs @@ -0,0 +1,47 @@ +import { createServer as createHttpServer } from 'node:http' +import { createRequire } from 'node:module' +import path from 'node:path' +import url from 'node:url' + +import { createServer as createViteServer } from 'vite' + +const require = createRequire(import.meta.url) +const marko = require('@marko/vite').default +const __dirname = path.dirname(url.fileURLToPath(import.meta.url)) +const PORT = 5201 + +// A small Vite dev server in middleware mode renders the .marko pages and injects the browser +// scripts so the page resumes. NOTE: this is a development demonstration, not a deployable +// production server. Real Marko production uses @marko/run. + +// Create the HTTP server first so Vite can attach its HMR websocket to the same server/port +// (otherwise the browser's HMR client tries to open a socket that isn't there). +const httpServer = createHttpServer() + +const devServer = await createViteServer({ + root: __dirname, + configFile: false, + appType: 'custom', + logLevel: 'warn', + plugins: [marko()], + server: { middlewareMode: true, hmr: { server: httpServer } }, +}) + +devServer.middlewares.use((req, res, next) => { + if (req.url === '/favicon.ico') { res.statusCode = 204; res.end(); return } + next() +}) +devServer.middlewares.use(async (req, res, next) => { + try { + const { handler } = await devServer.ssrLoadModule(path.join(__dirname, './src/index.ts')) + await handler(req, res, next) + } catch (err) { + devServer.ssrFixStacktrace(err) + next(err) + } +}) + +httpServer.on('request', devServer.middlewares) +httpServer.listen(PORT, () => { + console.log('example server on http://localhost:' + PORT) +}) diff --git a/examples/marko/ssr-per-request-multi/src/index.ts b/examples/marko/ssr-per-request-multi/src/index.ts new file mode 100644 index 00000000..f6698a32 --- /dev/null +++ b/examples/marko/ssr-per-request-multi/src/index.ts @@ -0,0 +1,32 @@ +import perreqPage from './perreq-page.marko' +import multiPage from './multi-page.marko' + +// Minimal structural types for the Node req/res the dev server passes in — keeps this small +// example free of an @types/node dependency. The real Node objects satisfy these structurally. +interface Req { url?: string } +interface Res { + statusCode: number + headersSent: boolean + setHeader(name: string, value: string): void + write(chunk: string): void + end(data?: string): void +} + +type ServerTemplate = { render: (input: Record) => AsyncIterable } + +const routes: Record }> = { + '/': { page: perreqPage as unknown as ServerTemplate, input: { initial: { count: 42 } } }, + '/multi': { page: multiPage as unknown as ServerTemplate, input: {} }, +} + +export async function handler(req: Req, res: Res, next?: () => void) { + const url = (req.url ?? '/').split('?')[0] ?? '/' + const route = routes[url] + if (!route) { next?.(); return } + res.statusCode = 200 + res.setHeader('Content-Type', 'text/html; charset=utf-8') + // Fresh $global per request — never share the resume/data box across requests. + const input = { ...route.input, $global: {} } + for await (const chunk of route.page.render(input)) res.write(chunk) + res.end() +} diff --git a/examples/marko/ssr-per-request-multi/src/multi-page.marko b/examples/marko/ssr-per-request-multi/src/multi-page.marko new file mode 100644 index 00000000..9c7ce72d --- /dev/null +++ b/examples/marko/ssr-per-request-multi/src/multi-page.marko @@ -0,0 +1,28 @@ +import { a, b } from './stores' + + + + Multiple stores in one provider + +
+

Multiple stores in one provider

+

One provider parks a bundle of two stores. Each selector picks a different member; a write to one moves only its own selector.

+ + + +

Resumed in browser: ${resumed}

+ + ({ a, b })> + c.a) selector=((s: any) => s.count)/> + c.b) selector=((s: any) => s.count)/> +

A: ${countA}

+

B: ${countB}

+ + +
+ + + +
+ + diff --git a/examples/marko/ssr-per-request-multi/src/perreq-page.marko b/examples/marko/ssr-per-request-multi/src/perreq-page.marko new file mode 100644 index 00000000..1bbc072c --- /dev/null +++ b/examples/marko/ssr-per-request-multi/src/perreq-page.marko @@ -0,0 +1,28 @@ +import { createStore } from '@tanstack/marko-store' +import type { Store } from '@tanstack/marko-store' + +export interface Input { + initial: { count: number } +} + + + + Per-request data + +
+

Per-request data, rebuilt on resume

+

The route passes plain DATA (input.initial); the provider creates the store from it. The data crosses in the serialized payload and the store is rebuilt on the client — a live store is never serialized.

+ + + +

Resumed in browser: ${resumed}

+ + ({ counter: createStore(input.initial) })> + }) => c.counter) selector=((s: { count: number }) => s.count)/> +

Count: ${count}

+ + +
+
+ + diff --git a/examples/marko/ssr-per-request-multi/src/stores.ts b/examples/marko/ssr-per-request-multi/src/stores.ts new file mode 100644 index 00000000..6d55e079 --- /dev/null +++ b/examples/marko/ssr-per-request-multi/src/stores.ts @@ -0,0 +1,5 @@ +import { createStore } from '@tanstack/marko-store' + +// Two isolated module stores for the multi-store page. +export const a = createStore({ count: 5 }) +export const b = createStore({ count: 50 }) diff --git a/examples/marko/ssr-per-request-multi/tsconfig.json b/examples/marko/ssr-per-request-multi/tsconfig.json new file mode 100644 index 00000000..9e8192a6 --- /dev/null +++ b/examples/marko/ssr-per-request-multi/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "strict": true, + "noEmit": true, + "skipLibCheck": true + }, + "include": ["src/**/*.ts", "src/**/*.marko"] +} diff --git a/examples/marko/ssr-resume/README.md b/examples/marko/ssr-resume/README.md new file mode 100644 index 00000000..21178edd --- /dev/null +++ b/examples/marko/ssr-resume/README.md @@ -0,0 +1,14 @@ +# Marko Store — ssr-resume + +A server-rendered page: the server paints the store's value, then the page +resumes and the store stays live (external writes and the atom write work after +load). The store is a module singleton and is rebuilt on each side, so no live +store is ever serialized. + +This is a development demonstration, run with the Marko Vite dev server. It is +NOT a deployable production server — real Marko production uses `@marko/run`. + +To run this example: + +- `npm install` +- `npm run dev` diff --git a/examples/marko/ssr-resume/package.json b/examples/marko/ssr-resume/package.json new file mode 100644 index 00000000..41e80d77 --- /dev/null +++ b/examples/marko/ssr-resume/package.json @@ -0,0 +1,18 @@ +{ + "name": "@tanstack/store-example-marko-ssr-resume", + "private": true, + "type": "module", + "scripts": { + "dev": "node server.mjs", + "test:types": "marko-type-check -p tsconfig.json" + }, + "dependencies": { + "@tanstack/marko-store": "^0.11.0", + "marko": "^6" + }, + "devDependencies": { + "@marko/type-check": "^3.1.0", + "@marko/vite": "^6", + "vite": "^8.0.8" + } +} diff --git a/examples/marko/ssr-resume/server.mjs b/examples/marko/ssr-resume/server.mjs new file mode 100644 index 00000000..cc0fedb0 --- /dev/null +++ b/examples/marko/ssr-resume/server.mjs @@ -0,0 +1,47 @@ +import { createServer as createHttpServer } from 'node:http' +import { createRequire } from 'node:module' +import path from 'node:path' +import url from 'node:url' + +import { createServer as createViteServer } from 'vite' + +const require = createRequire(import.meta.url) +const marko = require('@marko/vite').default +const __dirname = path.dirname(url.fileURLToPath(import.meta.url)) +const PORT = 5200 + +// A small Vite dev server in middleware mode renders the .marko pages and injects the browser +// scripts so the page resumes. NOTE: this is a development demonstration, not a deployable +// production server. Real Marko production uses @marko/run. + +// Create the HTTP server first so Vite can attach its HMR websocket to the same server/port +// (otherwise the browser's HMR client tries to open a socket that isn't there). +const httpServer = createHttpServer() + +const devServer = await createViteServer({ + root: __dirname, + configFile: false, + appType: 'custom', + logLevel: 'warn', + plugins: [marko()], + server: { middlewareMode: true, hmr: { server: httpServer } }, +}) + +devServer.middlewares.use((req, res, next) => { + if (req.url === '/favicon.ico') { res.statusCode = 204; res.end(); return } + next() +}) +devServer.middlewares.use(async (req, res, next) => { + try { + const { handler } = await devServer.ssrLoadModule(path.join(__dirname, './src/index.ts')) + await handler(req, res, next) + } catch (err) { + devServer.ssrFixStacktrace(err) + next(err) + } +}) + +httpServer.on('request', devServer.middlewares) +httpServer.listen(PORT, () => { + console.log('example server on http://localhost:' + PORT) +}) diff --git a/examples/marko/ssr-resume/src/index.ts b/examples/marko/ssr-resume/src/index.ts new file mode 100644 index 00000000..d2e8a280 --- /dev/null +++ b/examples/marko/ssr-resume/src/index.ts @@ -0,0 +1,30 @@ +import page from './page.marko' + +// Minimal structural types for the Node req/res the dev server passes in — keeps this small +// example free of an @types/node dependency. The real Node objects satisfy these structurally. +interface Req { url?: string } +interface Res { + statusCode: number + headersSent: boolean + setHeader(name: string, value: string): void + write(chunk: string): void + end(data?: string): void +} + +type ServerTemplate = { render: (input: Record) => AsyncIterable } + +const routes: Record }> = { + '/': { page: page as unknown as ServerTemplate, input: {} }, +} + +export async function handler(req: Req, res: Res, next?: () => void) { + const url = (req.url ?? '/').split('?')[0] ?? '/' + const route = routes[url] + if (!route) { next?.(); return } + res.statusCode = 200 + res.setHeader('Content-Type', 'text/html; charset=utf-8') + // Fresh $global per request — never share the resume box across requests. + const input = { ...route.input, $global: {} } + for await (const chunk of route.page.render(input)) res.write(chunk) + res.end() +} diff --git a/examples/marko/ssr-resume/src/page.marko b/examples/marko/ssr-resume/src/page.marko new file mode 100644 index 00000000..ff83e21c --- /dev/null +++ b/examples/marko/ssr-resume/src/page.marko @@ -0,0 +1,24 @@ +import { counterStore, countAtom } from './store' + + + + SSR resume + +
+

Server render and resume

+

The server paints the store's values; the page then resumes and the store stays live in the browser.

+ + + +

Resumed in browser: ${resumed}

+ + counterStore) selector=((s: { count: number }) => s.count)/> +

Count: ${count}

+ + + countAtom)/> +

Atom: ${atom}

+ +
+ + diff --git a/examples/marko/ssr-resume/src/store.ts b/examples/marko/ssr-resume/src/store.ts new file mode 100644 index 00000000..77651d15 --- /dev/null +++ b/examples/marko/ssr-resume/src/store.ts @@ -0,0 +1,7 @@ +import { createAtom, createStore } from '@tanstack/marko-store' + +// Module-level store + atom. The page's inline thunks (() => counterStore) close over these +// stable references, which keeps the live store OUT of the serialized resume payload — the +// store is rebuilt on each side, never serialized. +export const counterStore = createStore({ count: 5 }) +export const countAtom = createAtom(7) diff --git a/examples/marko/ssr-resume/tsconfig.json b/examples/marko/ssr-resume/tsconfig.json new file mode 100644 index 00000000..9e8192a6 --- /dev/null +++ b/examples/marko/ssr-resume/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "strict": true, + "noEmit": true, + "skipLibCheck": true + }, + "include": ["src/**/*.ts", "src/**/*.marko"] +} diff --git a/examples/marko/store-actions/README.md b/examples/marko/store-actions/README.md new file mode 100644 index 00000000..48525189 --- /dev/null +++ b/examples/marko/store-actions/README.md @@ -0,0 +1,11 @@ +# Marko Store — store-actions + +A module-level store created with actions. Reads go through ``; +mutations call `store.actions.addCat` / `addDog` / `log`. There is no Marko +equivalent of the experimental `_useStore` tuple, and none is needed — holding +the store directly, `` plus `store.actions` cover the same ground. + +To run this example: + +- `npm install` +- `npm run dev` diff --git a/examples/marko/store-actions/index.html b/examples/marko/store-actions/index.html new file mode 100644 index 00000000..571b8f86 --- /dev/null +++ b/examples/marko/store-actions/index.html @@ -0,0 +1,12 @@ + + + + + + Marko Store Example — store-actions + + +
+ + + diff --git a/examples/marko/store-actions/package.json b/examples/marko/store-actions/package.json new file mode 100644 index 00000000..712fe47a --- /dev/null +++ b/examples/marko/store-actions/package.json @@ -0,0 +1,20 @@ +{ + "name": "@tanstack/store-example-marko-store-actions", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --port=3062", + "build": "vite build", + "preview": "vite preview", + "test:types": "marko-type-check -p tsconfig.json" + }, + "dependencies": { + "@tanstack/marko-store": "^0.11.0", + "marko": "^6" + }, + "devDependencies": { + "@marko/type-check": "^3.1.0", + "@marko/vite": "^6", + "vite": "^8.0.8" + } +} diff --git a/examples/marko/store-actions/src/App.marko b/examples/marko/store-actions/src/App.marko new file mode 100644 index 00000000..2565f11a --- /dev/null +++ b/examples/marko/store-actions/src/App.marko @@ -0,0 +1,23 @@ +import { petStore } from './store' + +
+ +

Marko Store Actions

+

+ This example creates a module-level store with actions. Components read state + with a selector and mutate through store.actions. Marko has no equivalent of + the experimental _useStore tuple, and does not need one: you already hold the + store, so a selector for the read plus store.actions for the write cover it. +

+ + petStore) selector=(s => s.cats)/> +

Cats: ${cats}

+ + + petStore) selector=(s => s.dogs)/> +

Dogs: ${dogs}

+ + + petStore) selector=(s => s.cats + s.dogs)/> +

Total votes: ${total}

+
diff --git a/examples/marko/store-actions/src/index.ts b/examples/marko/store-actions/src/index.ts new file mode 100644 index 00000000..21867a93 --- /dev/null +++ b/examples/marko/store-actions/src/index.ts @@ -0,0 +1,4 @@ +import App from './App.marko' + +const el = document.getElementById('app') +if (el) App.mount({}, el) diff --git a/examples/marko/store-actions/src/store.ts b/examples/marko/store-actions/src/store.ts new file mode 100644 index 00000000..e84b6c5e --- /dev/null +++ b/examples/marko/store-actions/src/store.ts @@ -0,0 +1,11 @@ +import { createStore } from '@tanstack/marko-store' + +// A module-level store created WITH actions (the second argument). +export const petStore = createStore( + { cats: 0, dogs: 0 }, + ({ setState, get }) => ({ + addCat: () => setState((prev) => ({ ...prev, cats: prev.cats + 1 })), + addDog: () => setState((prev) => ({ ...prev, dogs: prev.dogs + 1 })), + log: () => console.log(get()), + }), +) diff --git a/examples/marko/store-actions/tsconfig.json b/examples/marko/store-actions/tsconfig.json new file mode 100644 index 00000000..9e8192a6 --- /dev/null +++ b/examples/marko/store-actions/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "strict": true, + "noEmit": true, + "skipLibCheck": true + }, + "include": ["src/**/*.ts", "src/**/*.marko"] +} diff --git a/examples/marko/store-actions/vite.config.ts b/examples/marko/store-actions/vite.config.ts new file mode 100644 index 00000000..ac3ced6c --- /dev/null +++ b/examples/marko/store-actions/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import marko from '@marko/vite' + +// linked: false => browser-only build (a client-only SPA, mounted in src/index.ts). +export default defineConfig({ + plugins: [marko({ linked: false })], +}) diff --git a/examples/marko/store-context/README.md b/examples/marko/store-context/README.md new file mode 100644 index 00000000..eaaa5ceb --- /dev/null +++ b/examples/marko/store-context/README.md @@ -0,0 +1,12 @@ +# Marko Store — store-context + +The flagship for the adapter's delivery trio. `` parks a bundle +of `{ votesStore, countAtom }`; nested components read the store with +``, read the atom the same way (and with `` +for read/write), and write through ``. Where the other frameworks +lean on their native context, Marko uses provider + context + selector. + +To run this example: + +- `npm install` +- `npm run dev` diff --git a/examples/marko/store-context/index.html b/examples/marko/store-context/index.html new file mode 100644 index 00000000..f50c0d29 --- /dev/null +++ b/examples/marko/store-context/index.html @@ -0,0 +1,12 @@ + + + + + + Marko Store Example — store-context + + +
+ + + diff --git a/examples/marko/store-context/package.json b/examples/marko/store-context/package.json new file mode 100644 index 00000000..9f652277 --- /dev/null +++ b/examples/marko/store-context/package.json @@ -0,0 +1,20 @@ +{ + "name": "@tanstack/store-example-marko-store-context", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --port=3063", + "build": "vite build", + "preview": "vite preview", + "test:types": "marko-type-check -p tsconfig.json" + }, + "dependencies": { + "@tanstack/marko-store": "^0.11.0", + "marko": "^6" + }, + "devDependencies": { + "@marko/type-check": "^3.1.0", + "@marko/vite": "^6", + "vite": "^8.0.8" + } +} diff --git a/examples/marko/store-context/src/App.marko b/examples/marko/store-context/src/App.marko new file mode 100644 index 00000000..4a7a73e9 --- /dev/null +++ b/examples/marko/store-context/src/App.marko @@ -0,0 +1,35 @@ +import { createStore, createAtom } from '@tanstack/marko-store' +import CatCard from './CatCard.marko' +import DogCard from './DogCard.marko' +import TotalCard from './TotalCard.marko' +import StoreButtons from './StoreButtons.marko' +import AtomSummary from './AtomSummary.marko' +import NestedAtomControls from './NestedAtomControls.marko' +import DeepAtomEditor from './DeepAtomEditor.marko' + +// Marko has no native context, so this example uses the adapter's delivery trio: +// parks a bundle, children read it with , +// and writes go through . (A real app would give the bundle a named type; +// the context pickers here use `any` to keep the example focused.) + + + + ({ votesStore, countAtom })> +
+

Marko Store Context

+

+ This example provides both a store and an atom through a single context + bundle, then reads them from nested components. +

+ + + + +
+

Nested Atom Components

+ + + +
+
+
diff --git a/examples/marko/store-context/src/AtomSummary.marko b/examples/marko/store-context/src/AtomSummary.marko new file mode 100644 index 00000000..13842cc8 --- /dev/null +++ b/examples/marko/store-context/src/AtomSummary.marko @@ -0,0 +1,3 @@ + + c.countAtom)/> +

Atom count: ${count}

diff --git a/examples/marko/store-context/src/CatCard.marko b/examples/marko/store-context/src/CatCard.marko new file mode 100644 index 00000000..f2267ecb --- /dev/null +++ b/examples/marko/store-context/src/CatCard.marko @@ -0,0 +1,2 @@ + c.votesStore) selector=((s: any) => s.cats)/> +

Cats: ${cats}

diff --git a/examples/marko/store-context/src/DeepAtomEditor.marko b/examples/marko/store-context/src/DeepAtomEditor.marko new file mode 100644 index 00000000..7f703302 --- /dev/null +++ b/examples/marko/store-context/src/DeepAtomEditor.marko @@ -0,0 +1,7 @@ + + + (ctx() as any).countAtom)/> +
+

Editable atom count: ${count}

+ +
diff --git a/examples/marko/store-context/src/DogCard.marko b/examples/marko/store-context/src/DogCard.marko new file mode 100644 index 00000000..0a1c2dd6 --- /dev/null +++ b/examples/marko/store-context/src/DogCard.marko @@ -0,0 +1,2 @@ + c.votesStore) selector=((s: any) => s.dogs)/> +

Dogs: ${dogs}

diff --git a/examples/marko/store-context/src/NestedAtomControls.marko b/examples/marko/store-context/src/NestedAtomControls.marko new file mode 100644 index 00000000..aacb2a78 --- /dev/null +++ b/examples/marko/store-context/src/NestedAtomControls.marko @@ -0,0 +1,5 @@ + +
+ + +
diff --git a/examples/marko/store-context/src/StoreButtons.marko b/examples/marko/store-context/src/StoreButtons.marko new file mode 100644 index 00000000..52b1de6b --- /dev/null +++ b/examples/marko/store-context/src/StoreButtons.marko @@ -0,0 +1,5 @@ + +
+ + +
diff --git a/examples/marko/store-context/src/TotalCard.marko b/examples/marko/store-context/src/TotalCard.marko new file mode 100644 index 00000000..f143f66b --- /dev/null +++ b/examples/marko/store-context/src/TotalCard.marko @@ -0,0 +1,2 @@ + c.votesStore) selector=((s: any) => s.cats + s.dogs)/> +

Total votes: ${total}

diff --git a/examples/marko/store-context/src/index.ts b/examples/marko/store-context/src/index.ts new file mode 100644 index 00000000..21867a93 --- /dev/null +++ b/examples/marko/store-context/src/index.ts @@ -0,0 +1,4 @@ +import App from './App.marko' + +const el = document.getElementById('app') +if (el) App.mount({}, el) diff --git a/examples/marko/store-context/tsconfig.json b/examples/marko/store-context/tsconfig.json new file mode 100644 index 00000000..9e8192a6 --- /dev/null +++ b/examples/marko/store-context/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "strict": true, + "noEmit": true, + "skipLibCheck": true + }, + "include": ["src/**/*.ts", "src/**/*.marko"] +} diff --git a/examples/marko/store-context/vite.config.ts b/examples/marko/store-context/vite.config.ts new file mode 100644 index 00000000..ac3ced6c --- /dev/null +++ b/examples/marko/store-context/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import marko from '@marko/vite' + +// linked: false => browser-only build (a client-only SPA, mounted in src/index.ts). +export default defineConfig({ + plugins: [marko({ linked: false })], +}) diff --git a/examples/marko/stores/README.md b/examples/marko/stores/README.md new file mode 100644 index 00000000..14dc412e --- /dev/null +++ b/examples/marko/stores/README.md @@ -0,0 +1,12 @@ +# Marko Store Example + +This example demonstrates: + +- `` +- `store.setState` +- module-level `Store` + +To run this example: + +- `npm install` +- `npm run dev` diff --git a/examples/marko/stores/index.html b/examples/marko/stores/index.html new file mode 100644 index 00000000..4f065f59 --- /dev/null +++ b/examples/marko/stores/index.html @@ -0,0 +1,12 @@ + + + + + + Marko Store Example + + +
+ + + diff --git a/examples/marko/stores/package.json b/examples/marko/stores/package.json new file mode 100644 index 00000000..301103f1 --- /dev/null +++ b/examples/marko/stores/package.json @@ -0,0 +1,20 @@ +{ + "name": "@tanstack/store-example-marko-stores", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --port=3070", + "build": "vite build", + "preview": "vite preview", + "test:types": "marko-type-check -p tsconfig.json" + }, + "dependencies": { + "@tanstack/marko-store": "^0.11.0", + "marko": "^6" + }, + "devDependencies": { + "@marko/type-check": "^3.1.0", + "@marko/vite": "^6", + "vite": "^8.0.8" + } +} diff --git a/examples/marko/stores/src/App.marko b/examples/marko/stores/src/App.marko new file mode 100644 index 00000000..3951a137 --- /dev/null +++ b/examples/marko/stores/src/App.marko @@ -0,0 +1,27 @@ +import { petStore } from './store' + +
+

Marko Store

+

+ This example creates a module-level store. Components read state with a + selector and update it directly with store.setState. +

+ + petStore) selector=(s => s.cats)/> +

Cats: ${cats}

+ + petStore) selector=(s => s.dogs)/> +

Dogs: ${dogs}

+ + petStore) selector=(s => s.cats + s.dogs)/> +

Total votes: ${total}

+ +
+ + +
+
diff --git a/examples/marko/stores/src/index.ts b/examples/marko/stores/src/index.ts new file mode 100644 index 00000000..21867a93 --- /dev/null +++ b/examples/marko/stores/src/index.ts @@ -0,0 +1,4 @@ +import App from './App.marko' + +const el = document.getElementById('app') +if (el) App.mount({}, el) diff --git a/examples/marko/stores/src/store.ts b/examples/marko/stores/src/store.ts new file mode 100644 index 00000000..c6fa9f56 --- /dev/null +++ b/examples/marko/stores/src/store.ts @@ -0,0 +1,7 @@ +import { createStore } from '@tanstack/marko-store' + +// You can create stores at module scope and import them wherever you need them. +export const petStore = createStore({ + cats: 0, + dogs: 0, +}) diff --git a/examples/marko/stores/tsconfig.json b/examples/marko/stores/tsconfig.json new file mode 100644 index 00000000..9e8192a6 --- /dev/null +++ b/examples/marko/stores/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "strict": true, + "noEmit": true, + "skipLibCheck": true + }, + "include": ["src/**/*.ts", "src/**/*.marko"] +} diff --git a/examples/marko/stores/vite.config.ts b/examples/marko/stores/vite.config.ts new file mode 100644 index 00000000..52bb3f3a --- /dev/null +++ b/examples/marko/stores/vite.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vite' +import marko from '@marko/vite' + +// linked: false => browser-only build. The .marko is mounted on the client (src/index.ts), +// so there is no server pass. The SSR examples (ssr-resume etc.) use the default linked mode. +export default defineConfig({ + plugins: [marko({ linked: false })], +}) diff --git a/examples/marko/streaming/README.md b/examples/marko/streaming/README.md new file mode 100644 index 00000000..c4c889fe --- /dev/null +++ b/examples/marko/streaming/README.md @@ -0,0 +1,20 @@ +# Marko Store — streaming + +Streaming server-computed per-request data into a live store with +``. The home page (`/`) shows the in-order case: a store +born from a value that arrives inside a late ``, painted server-side with +no flash and live after resume. The `/out-of-order` page wraps each `` in +`` with a `<@placeholder>`, so the fast block paints before the slow one +while each store stays live. + +Note the server gives each request its own fresh `$global`: born-with-data parks +the store on `$global`, so requests must not share it. + +This is a development demonstration, run with the Marko Vite dev server. It is +NOT a deployable production server — real Marko production uses `@marko/run`. + +To run this example: + +- `npm install` +- `npm run dev` +- open `/` and `/out-of-order` diff --git a/examples/marko/streaming/package.json b/examples/marko/streaming/package.json new file mode 100644 index 00000000..293e1e52 --- /dev/null +++ b/examples/marko/streaming/package.json @@ -0,0 +1,18 @@ +{ + "name": "@tanstack/store-example-marko-streaming", + "private": true, + "type": "module", + "scripts": { + "dev": "node server.mjs", + "test:types": "marko-type-check -p tsconfig.json" + }, + "dependencies": { + "@tanstack/marko-store": "^0.11.0", + "marko": "^6" + }, + "devDependencies": { + "@marko/type-check": "^3.1.0", + "@marko/vite": "^6", + "vite": "^8.0.8" + } +} diff --git a/examples/marko/streaming/server.mjs b/examples/marko/streaming/server.mjs new file mode 100644 index 00000000..1d4ad534 --- /dev/null +++ b/examples/marko/streaming/server.mjs @@ -0,0 +1,47 @@ +import { createServer as createHttpServer } from 'node:http' +import { createRequire } from 'node:module' +import path from 'node:path' +import url from 'node:url' + +import { createServer as createViteServer } from 'vite' + +const require = createRequire(import.meta.url) +const marko = require('@marko/vite').default +const __dirname = path.dirname(url.fileURLToPath(import.meta.url)) +const PORT = 5202 + +// A small Vite dev server in middleware mode renders the .marko pages and injects the browser +// scripts so the page resumes. NOTE: this is a development demonstration, not a deployable +// production server. Real Marko production uses @marko/run. + +// Create the HTTP server first so Vite can attach its HMR websocket to the same server/port +// (otherwise the browser's HMR client tries to open a socket that isn't there). +const httpServer = createHttpServer() + +const devServer = await createViteServer({ + root: __dirname, + configFile: false, + appType: 'custom', + logLevel: 'warn', + plugins: [marko()], + server: { middlewareMode: true, hmr: { server: httpServer } }, +}) + +devServer.middlewares.use((req, res, next) => { + if (req.url === '/favicon.ico') { res.statusCode = 204; res.end(); return } + next() +}) +devServer.middlewares.use(async (req, res, next) => { + try { + const { handler } = await devServer.ssrLoadModule(path.join(__dirname, './src/index.ts')) + await handler(req, res, next) + } catch (err) { + devServer.ssrFixStacktrace(err) + next(err) + } +}) + +httpServer.on('request', devServer.middlewares) +httpServer.listen(PORT, () => { + console.log('example server on http://localhost:' + PORT) +}) diff --git a/examples/marko/streaming/src/index.ts b/examples/marko/streaming/src/index.ts new file mode 100644 index 00000000..2f505c9d --- /dev/null +++ b/examples/marko/streaming/src/index.ts @@ -0,0 +1,44 @@ +import inorderPage from './inorder-page.marko' +import outoforderPage from './outoforder-page.marko' + +// Minimal structural types for the Node req/res the dev server passes in — keeps this small +// example free of an @types/node dependency. The real Node objects satisfy these structurally. +interface Req { url?: string } +interface Res { + statusCode: number + headersSent: boolean + setHeader(name: string, value: string): void + write(chunk: string): void + end(data?: string): void +} + +type ServerTemplate = { render: (input: Record) => AsyncIterable } + +const routes: Record }> = { + '/': { page: inorderPage as unknown as ServerTemplate, input: { value: 77 } }, + '/out-of-order': { page: outoforderPage as unknown as ServerTemplate, input: { slow: 33, fast: 44 } }, +} + +export async function handler(req: Req, res: Res, next?: () => void) { + const url = (req.url ?? '/').split('?')[0] ?? '/' + const route = routes[url] + if (!route) { next?.(); return } + res.setHeader('Content-Type', 'text/html; charset=utf-8') + // Fresh $global per request: born-with-data parks the store on $global, so each request MUST + // get its own box or concurrent requests would see each other's stores. + const input = { ...route.input, $global: {} } + try { + res.statusCode = 200 + for await (const chunk of route.page.render(input)) res.write(chunk) + res.end() + } catch (err) { + // A throw before the first byte (e.g. a duplicate key caught outside ) becomes a clean + // 500; once streaming has started the status is already sent, so just end. + if (!res.headersSent) { + res.statusCode = 500 + res.end('SSR error: ' + (err instanceof Error ? err.message : String(err))) + } else { + res.end() + } + } +} diff --git a/examples/marko/streaming/src/inorder-page.marko b/examples/marko/streaming/src/inorder-page.marko new file mode 100644 index 00000000..ca342cc9 --- /dev/null +++ b/examples/marko/streaming/src/inorder-page.marko @@ -0,0 +1,30 @@ +import { createStore } from '@tanstack/marko-store' + +export interface Input { + value: number +} + + + + Streaming (in-order) + +
+

Streaming a store into a late await (in-order)

+

The server computes per-request data inside a late await; the store is born from that value with <stream-store-provider>, renders server-side with no flash, and stays live after resume.

+ + + +

Resumed in browser: ${resumed}

+ + + setTimeout(() => r(input.value), 2000))> + ({ store: createStore({ n: slice }) })> + c.store) selector=((s: any) => s.n)/> +

Streamed value: ${n}

+ + +
+ +
+ + diff --git a/examples/marko/streaming/src/outoforder-page.marko b/examples/marko/streaming/src/outoforder-page.marko new file mode 100644 index 00000000..a288a5bd --- /dev/null +++ b/examples/marko/streaming/src/outoforder-page.marko @@ -0,0 +1,46 @@ +import { createStore } from '@tanstack/marko-store' + +export interface Input { + slow: number + fast: number +} + + + + Streaming (out-of-order) + +
+

Streaming out-of-order with try/placeholder

+

Each awaited block is born with its own store. Wrapping an await in <try> with a <@placeholder> lets the fast block paint before the slow one, while each store stays live. Click either inc button after the block lands to confirm the store is interactive post-resume.

+ + + +

Resumed in browser: ${resumed}

+ + + + setTimeout(() => r(input.slow), 2500))> + ({ store: createStore({ n: ss }) })> + c.store) selector=((s: any) => s.n)/> +

Slow: ${vs}

+ + +
+ + <@placeholder>

loading slow…

+
+ + + setTimeout(() => r(input.fast), 800))> + ({ store: createStore({ n: sf }) })> + c.store) selector=((s: any) => s.n)/> +

Fast: ${vf}

+ + +
+ + <@placeholder>

loading fast…

+
+
+ + diff --git a/examples/marko/streaming/tsconfig.json b/examples/marko/streaming/tsconfig.json new file mode 100644 index 00000000..9e8192a6 --- /dev/null +++ b/examples/marko/streaming/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "strict": true, + "noEmit": true, + "skipLibCheck": true + }, + "include": ["src/**/*.ts", "src/**/*.marko"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ebdb7e9b..bb4f4e24 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -354,6 +354,158 @@ importers: specifier: ^7.2.2 version: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + examples/marko/atoms: + dependencies: + '@tanstack/marko-store': + specifier: ^0.11.0 + version: link:../../../packages/marko-store + marko: + specifier: ^6 + version: 6.1.18 + devDependencies: + '@marko/type-check': + specifier: ^3.1.0 + version: 3.1.0 + '@marko/vite': + specifier: ^6 + version: 6.1.0(@marko/compiler@5.39.66)(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + vite: + specifier: ^8.0.8 + version: 8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + + examples/marko/simple: + dependencies: + '@tanstack/marko-store': + specifier: ^0.11.0 + version: link:../../../packages/marko-store + marko: + specifier: ^6 + version: 6.1.18 + devDependencies: + '@marko/type-check': + specifier: ^3.1.0 + version: 3.1.0 + '@marko/vite': + specifier: ^6 + version: 6.1.0(@marko/compiler@5.39.66)(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + vite: + specifier: ^8.0.8 + version: 8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + + examples/marko/ssr-per-request-multi: + dependencies: + '@tanstack/marko-store': + specifier: ^0.11.0 + version: link:../../../packages/marko-store + marko: + specifier: ^6 + version: 6.1.18 + devDependencies: + '@marko/type-check': + specifier: ^3.1.0 + version: 3.1.0 + '@marko/vite': + specifier: ^6 + version: 6.1.0(@marko/compiler@5.39.66)(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + vite: + specifier: ^8.0.8 + version: 8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + + examples/marko/ssr-resume: + dependencies: + '@tanstack/marko-store': + specifier: ^0.11.0 + version: link:../../../packages/marko-store + marko: + specifier: ^6 + version: 6.1.18 + devDependencies: + '@marko/type-check': + specifier: ^3.1.0 + version: 3.1.0 + '@marko/vite': + specifier: ^6 + version: 6.1.0(@marko/compiler@5.39.66)(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + vite: + specifier: ^8.0.8 + version: 8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + + examples/marko/store-actions: + dependencies: + '@tanstack/marko-store': + specifier: ^0.11.0 + version: link:../../../packages/marko-store + marko: + specifier: ^6 + version: 6.1.18 + devDependencies: + '@marko/type-check': + specifier: ^3.1.0 + version: 3.1.0 + '@marko/vite': + specifier: ^6 + version: 6.1.0(@marko/compiler@5.39.66)(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + vite: + specifier: ^8.0.8 + version: 8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + + examples/marko/store-context: + dependencies: + '@tanstack/marko-store': + specifier: ^0.11.0 + version: link:../../../packages/marko-store + marko: + specifier: ^6 + version: 6.1.18 + devDependencies: + '@marko/type-check': + specifier: ^3.1.0 + version: 3.1.0 + '@marko/vite': + specifier: ^6 + version: 6.1.0(@marko/compiler@5.39.66)(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + vite: + specifier: ^8.0.8 + version: 8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + + examples/marko/stores: + dependencies: + '@tanstack/marko-store': + specifier: ^0.11.0 + version: link:../../../packages/marko-store + marko: + specifier: ^6 + version: 6.1.18 + devDependencies: + '@marko/type-check': + specifier: ^3.1.0 + version: 3.1.0 + '@marko/vite': + specifier: ^6 + version: 6.1.0(@marko/compiler@5.39.66)(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + vite: + specifier: ^8.0.8 + version: 8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + + examples/marko/streaming: + dependencies: + '@tanstack/marko-store': + specifier: ^0.11.0 + version: link:../../../packages/marko-store + marko: + specifier: ^6 + version: 6.1.18 + devDependencies: + '@marko/type-check': + specifier: ^3.1.0 + version: 3.1.0 + '@marko/vite': + specifier: ^6 + version: 6.1.0(@marko/compiler@5.39.66)(vite@8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + vite: + specifier: ^8.0.8 + version: 8.0.13(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + examples/preact/atoms: dependencies: '@tanstack/preact-store': @@ -9548,7 +9700,7 @@ snapshots: typescript: 6.0.2 webpack: 5.105.2(esbuild@0.27.7) webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)) - webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.7)) + webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)) webpack-merge: 6.0.1 webpack-subresource-integrity: 5.1.0(webpack@5.105.2(esbuild@0.27.3)) optionalDependencies: @@ -9633,7 +9785,7 @@ snapshots: tree-kill: 1.2.2 tslib: 2.8.1 typescript: 6.0.3 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.2(esbuild@0.27.7) webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)) webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)) webpack-merge: 6.0.1 @@ -9672,7 +9824,7 @@ snapshots: dependencies: '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) rxjs: 7.8.2 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.2(esbuild@0.27.7) webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)) transitivePeerDependencies: - chokidar @@ -11832,7 +11984,7 @@ snapshots: dependencies: '@angular/compiler-cli': 21.2.8(@angular/compiler@21.2.8)(typescript@6.0.3) typescript: 6.0.3 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.2(esbuild@0.27.7) optional: true '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': @@ -13702,7 +13854,7 @@ snapshots: dependencies: '@babel/core': 7.29.0 find-up: 5.0.0 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.2(esbuild@0.27.7) babel-plugin-jsx-dom-expressions@0.40.6(@babel/core@7.29.0): dependencies: @@ -14095,7 +14247,7 @@ snapshots: schema-utils: 4.3.3 serialize-javascript: 7.0.5 tinyglobby: 0.2.16 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.2(esbuild@0.27.7) core-js-compat@3.49.0: dependencies: @@ -14144,7 +14296,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.7.4 optionalDependencies: - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.2(esbuild@0.27.7) css-select@5.2.2: dependencies: @@ -15875,7 +16027,7 @@ snapshots: dependencies: less: 4.4.2 optionalDependencies: - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.2(esbuild@0.27.7) less@4.4.2: dependencies: @@ -15900,7 +16052,7 @@ snapshots: dependencies: webpack-sources: 3.3.4 optionalDependencies: - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.2(esbuild@0.27.7) lightningcss-android-arm64@1.32.0: optional: true @@ -16194,7 +16346,7 @@ snapshots: dependencies: schema-utils: 4.3.3 tapable: 2.3.2 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.2(esbuild@0.27.7) minimalistic-assert@1.0.1: {} @@ -16842,7 +16994,7 @@ snapshots: postcss: 8.5.6 semver: 7.7.4 optionalDependencies: - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.2(esbuild@0.27.7) transitivePeerDependencies: - typescript optional: true @@ -17332,7 +17484,7 @@ snapshots: neo-async: 2.6.2 optionalDependencies: sass: 1.97.3 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.2(esbuild@0.27.7) sass@1.97.3: dependencies: @@ -17624,7 +17776,7 @@ snapshots: dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.2(esbuild@0.27.7) source-map-support@0.5.21: dependencies: @@ -17886,16 +18038,6 @@ snapshots: term-size@2.2.1: {} - terser-webpack-plugin@5.4.0(esbuild@0.27.3)(webpack@5.105.2(esbuild@0.27.3)): - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - jest-worker: 27.5.1 - schema-utils: 4.3.3 - terser: 5.46.0 - webpack: 5.105.2(esbuild@0.27.3) - optionalDependencies: - esbuild: 0.27.3 - terser-webpack-plugin@5.4.0(esbuild@0.27.7)(webpack@5.105.2(esbuild@0.27.3)): dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -18434,19 +18576,6 @@ snapshots: webidl-conversions@8.0.1: {} webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)): - dependencies: - colorette: 2.0.20 - memfs: 4.57.1(tslib@2.8.1) - mime-types: 3.0.2 - on-finished: 2.4.1 - range-parser: 1.2.1 - schema-utils: 4.3.3 - optionalDependencies: - webpack: 5.105.2(esbuild@0.27.3) - transitivePeerDependencies: - - tslib - - webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.7)): dependencies: colorette: 2.0.20 memfs: 4.57.1(tslib@2.8.1) @@ -18489,45 +18618,6 @@ snapshots: spdy: 4.0.2 webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)) ws: 8.20.0 - optionalDependencies: - webpack: 5.105.2(esbuild@0.27.3) - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - tslib - - utf-8-validate - - webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.7)): - dependencies: - '@types/bonjour': 3.5.13 - '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.25 - '@types/express-serve-static-core': 4.19.8 - '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.10 - '@types/sockjs': 0.3.36 - '@types/ws': 8.18.1 - ansi-html-community: 0.0.8 - bonjour-service: 1.3.0 - chokidar: 3.6.0 - colorette: 2.0.20 - compression: 1.8.1 - connect-history-api-fallback: 2.0.0 - express: 4.22.1 - graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.9(@types/express@4.17.25) - ipaddr.js: 2.3.0 - launch-editor: 2.13.2 - open: 10.2.0 - p-retry: 6.2.1 - schema-utils: 4.3.3 - selfsigned: 5.5.0 - serve-index: 1.9.2 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.7)) - ws: 8.20.0 optionalDependencies: webpack: 5.105.2(esbuild@0.27.7) transitivePeerDependencies: @@ -18548,39 +18638,7 @@ snapshots: webpack-subresource-integrity@5.1.0(webpack@5.105.2(esbuild@0.27.3)): dependencies: typed-assert: 1.0.9 - webpack: 5.105.2(esbuild@0.27.3) - - webpack@5.105.2(esbuild@0.27.3): - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.9 - '@types/json-schema': 7.0.15 - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/wasm-edit': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.2 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.20.1 - es-module-lexer: 2.0.0 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.1 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 4.3.3 - tapable: 2.3.2 - terser-webpack-plugin: 5.4.0(esbuild@0.27.3)(webpack@5.105.2(esbuild@0.27.3)) - watchpack: 2.5.1 - webpack-sources: 3.3.4 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js + webpack: 5.105.2(esbuild@0.27.7) webpack@5.105.2(esbuild@0.27.7): dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index bd664ffb..b46cf665 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -17,6 +17,7 @@ packages: - 'examples/svelte/**' - 'examples/preact/**' - 'examples/lit/**' + - 'examples/marko/**' allowBuilds: # root dependency From c19cbcaa5da8012b5c16753215a274a34966662c Mon Sep 17 00:00:00 2001 From: defunkt-dev Date: Tue, 30 Jun 2026 13:11:55 -0600 Subject: [PATCH 25/29] update examples with lan tools as typecheck fails and add .d files --- examples/marko/atoms/package.json | 1 + examples/marko/atoms/tsconfig.json | 6 ++++- examples/marko/simple/package.json | 1 + examples/marko/simple/tsconfig.json | 6 ++++- .../marko/ssr-per-request-multi/package.json | 1 + .../marko/ssr-per-request-multi/tsconfig.json | 6 ++++- examples/marko/ssr-resume/package.json | 1 + examples/marko/ssr-resume/tsconfig.json | 6 ++++- examples/marko/store-actions/package.json | 1 + examples/marko/store-actions/tsconfig.json | 6 ++++- examples/marko/store-context/package.json | 1 + examples/marko/store-context/tsconfig.json | 6 ++++- examples/marko/stores/package.json | 1 + examples/marko/stores/tsconfig.json | 6 ++++- examples/marko/streaming/package.json | 1 + examples/marko/streaming/tsconfig.json | 6 ++++- .../marko-store/src/tags/store-atom.d.marko | 15 ++++++++++++ .../src/tags/store-context.d.marko | 7 ++++++ .../src/tags/store-provider.d.marko | 7 ++++++ .../src/tags/store-selector.d.marko | 17 +++++++++++++ .../src/tags/stream-store-provider.d.marko | 7 ++++++ packages/marko-store/vitest.config.ts | 2 +- pnpm-lock.yaml | 24 +++++++++++++++++++ 23 files changed, 126 insertions(+), 9 deletions(-) create mode 100644 packages/marko-store/src/tags/store-atom.d.marko create mode 100644 packages/marko-store/src/tags/store-context.d.marko create mode 100644 packages/marko-store/src/tags/store-provider.d.marko create mode 100644 packages/marko-store/src/tags/store-selector.d.marko create mode 100644 packages/marko-store/src/tags/stream-store-provider.d.marko diff --git a/examples/marko/atoms/package.json b/examples/marko/atoms/package.json index 48953fac..fc93ff83 100644 --- a/examples/marko/atoms/package.json +++ b/examples/marko/atoms/package.json @@ -13,6 +13,7 @@ "marko": "^6" }, "devDependencies": { + "@marko/language-tools": "^2.6.0", "@marko/type-check": "^3.1.0", "@marko/vite": "^6", "vite": "^8.0.8" diff --git a/examples/marko/atoms/tsconfig.json b/examples/marko/atoms/tsconfig.json index 9e8192a6..91bb9b96 100644 --- a/examples/marko/atoms/tsconfig.json +++ b/examples/marko/atoms/tsconfig.json @@ -7,5 +7,9 @@ "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.marko"] + "include": [ + "src/**/*.ts", + "src/**/*.marko", + "../../../packages/marko-store/src/tags/*.d.marko" + ] } diff --git a/examples/marko/simple/package.json b/examples/marko/simple/package.json index 331b7abb..ce367547 100644 --- a/examples/marko/simple/package.json +++ b/examples/marko/simple/package.json @@ -13,6 +13,7 @@ "marko": "^6" }, "devDependencies": { + "@marko/language-tools": "^2.6.0", "@marko/type-check": "^3.1.0", "@marko/vite": "^6", "vite": "^8.0.8" diff --git a/examples/marko/simple/tsconfig.json b/examples/marko/simple/tsconfig.json index 9e8192a6..91bb9b96 100644 --- a/examples/marko/simple/tsconfig.json +++ b/examples/marko/simple/tsconfig.json @@ -7,5 +7,9 @@ "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.marko"] + "include": [ + "src/**/*.ts", + "src/**/*.marko", + "../../../packages/marko-store/src/tags/*.d.marko" + ] } diff --git a/examples/marko/ssr-per-request-multi/package.json b/examples/marko/ssr-per-request-multi/package.json index 8db1c9fa..6e22fe54 100644 --- a/examples/marko/ssr-per-request-multi/package.json +++ b/examples/marko/ssr-per-request-multi/package.json @@ -11,6 +11,7 @@ "marko": "^6" }, "devDependencies": { + "@marko/language-tools": "^2.6.0", "@marko/type-check": "^3.1.0", "@marko/vite": "^6", "vite": "^8.0.8" diff --git a/examples/marko/ssr-per-request-multi/tsconfig.json b/examples/marko/ssr-per-request-multi/tsconfig.json index 9e8192a6..91bb9b96 100644 --- a/examples/marko/ssr-per-request-multi/tsconfig.json +++ b/examples/marko/ssr-per-request-multi/tsconfig.json @@ -7,5 +7,9 @@ "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.marko"] + "include": [ + "src/**/*.ts", + "src/**/*.marko", + "../../../packages/marko-store/src/tags/*.d.marko" + ] } diff --git a/examples/marko/ssr-resume/package.json b/examples/marko/ssr-resume/package.json index 41e80d77..255a9889 100644 --- a/examples/marko/ssr-resume/package.json +++ b/examples/marko/ssr-resume/package.json @@ -11,6 +11,7 @@ "marko": "^6" }, "devDependencies": { + "@marko/language-tools": "^2.6.0", "@marko/type-check": "^3.1.0", "@marko/vite": "^6", "vite": "^8.0.8" diff --git a/examples/marko/ssr-resume/tsconfig.json b/examples/marko/ssr-resume/tsconfig.json index 9e8192a6..91bb9b96 100644 --- a/examples/marko/ssr-resume/tsconfig.json +++ b/examples/marko/ssr-resume/tsconfig.json @@ -7,5 +7,9 @@ "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.marko"] + "include": [ + "src/**/*.ts", + "src/**/*.marko", + "../../../packages/marko-store/src/tags/*.d.marko" + ] } diff --git a/examples/marko/store-actions/package.json b/examples/marko/store-actions/package.json index 712fe47a..e0bf4258 100644 --- a/examples/marko/store-actions/package.json +++ b/examples/marko/store-actions/package.json @@ -13,6 +13,7 @@ "marko": "^6" }, "devDependencies": { + "@marko/language-tools": "^2.6.0", "@marko/type-check": "^3.1.0", "@marko/vite": "^6", "vite": "^8.0.8" diff --git a/examples/marko/store-actions/tsconfig.json b/examples/marko/store-actions/tsconfig.json index 9e8192a6..91bb9b96 100644 --- a/examples/marko/store-actions/tsconfig.json +++ b/examples/marko/store-actions/tsconfig.json @@ -7,5 +7,9 @@ "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.marko"] + "include": [ + "src/**/*.ts", + "src/**/*.marko", + "../../../packages/marko-store/src/tags/*.d.marko" + ] } diff --git a/examples/marko/store-context/package.json b/examples/marko/store-context/package.json index 9f652277..be7042b7 100644 --- a/examples/marko/store-context/package.json +++ b/examples/marko/store-context/package.json @@ -13,6 +13,7 @@ "marko": "^6" }, "devDependencies": { + "@marko/language-tools": "^2.6.0", "@marko/type-check": "^3.1.0", "@marko/vite": "^6", "vite": "^8.0.8" diff --git a/examples/marko/store-context/tsconfig.json b/examples/marko/store-context/tsconfig.json index 9e8192a6..91bb9b96 100644 --- a/examples/marko/store-context/tsconfig.json +++ b/examples/marko/store-context/tsconfig.json @@ -7,5 +7,9 @@ "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.marko"] + "include": [ + "src/**/*.ts", + "src/**/*.marko", + "../../../packages/marko-store/src/tags/*.d.marko" + ] } diff --git a/examples/marko/stores/package.json b/examples/marko/stores/package.json index 301103f1..6d82684c 100644 --- a/examples/marko/stores/package.json +++ b/examples/marko/stores/package.json @@ -13,6 +13,7 @@ "marko": "^6" }, "devDependencies": { + "@marko/language-tools": "^2.6.0", "@marko/type-check": "^3.1.0", "@marko/vite": "^6", "vite": "^8.0.8" diff --git a/examples/marko/stores/tsconfig.json b/examples/marko/stores/tsconfig.json index 9e8192a6..91bb9b96 100644 --- a/examples/marko/stores/tsconfig.json +++ b/examples/marko/stores/tsconfig.json @@ -7,5 +7,9 @@ "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.marko"] + "include": [ + "src/**/*.ts", + "src/**/*.marko", + "../../../packages/marko-store/src/tags/*.d.marko" + ] } diff --git a/examples/marko/streaming/package.json b/examples/marko/streaming/package.json index 293e1e52..198b1378 100644 --- a/examples/marko/streaming/package.json +++ b/examples/marko/streaming/package.json @@ -11,6 +11,7 @@ "marko": "^6" }, "devDependencies": { + "@marko/language-tools": "^2.6.0", "@marko/type-check": "^3.1.0", "@marko/vite": "^6", "vite": "^8.0.8" diff --git a/examples/marko/streaming/tsconfig.json b/examples/marko/streaming/tsconfig.json index 9e8192a6..91bb9b96 100644 --- a/examples/marko/streaming/tsconfig.json +++ b/examples/marko/streaming/tsconfig.json @@ -7,5 +7,9 @@ "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.marko"] + "include": [ + "src/**/*.ts", + "src/**/*.marko", + "../../../packages/marko-store/src/tags/*.d.marko" + ] } diff --git a/packages/marko-store/src/tags/store-atom.d.marko b/packages/marko-store/src/tags/store-atom.d.marko new file mode 100644 index 00000000..1f8d5000 --- /dev/null +++ b/packages/marko-store/src/tags/store-atom.d.marko @@ -0,0 +1,15 @@ +/** File for types only, not actual implementation **/ + +// V maps an untyped (any/unknown) source to `any` so reads stay usable, exactly +// like the implementation (value = source.get()); a concrete T is preserved. +export type Value = unknown extends T ? any : T + +export interface Input { + from: () => { + get(): T + set(value: T | ((prev: T) => T)): void + subscribe(listener: (value: T) => void): { unsubscribe(): void } + } +} + +return=(undefined as unknown as Value) valueChange=((next: Value) => input.from().set(next as T)) diff --git a/packages/marko-store/src/tags/store-context.d.marko b/packages/marko-store/src/tags/store-context.d.marko new file mode 100644 index 00000000..3724a0e2 --- /dev/null +++ b/packages/marko-store/src/tags/store-context.d.marko @@ -0,0 +1,7 @@ +/** File for types only, not actual implementation **/ + +export interface Input { + key?: string +} + +return=(() => undefined as unknown) diff --git a/packages/marko-store/src/tags/store-provider.d.marko b/packages/marko-store/src/tags/store-provider.d.marko new file mode 100644 index 00000000..d5ed2209 --- /dev/null +++ b/packages/marko-store/src/tags/store-provider.d.marko @@ -0,0 +1,7 @@ +/** File for types only, not actual implementation **/ + +export interface Input { + value: () => Record + key?: string + content?: Marko.Body +} diff --git a/packages/marko-store/src/tags/store-selector.d.marko b/packages/marko-store/src/tags/store-selector.d.marko new file mode 100644 index 00000000..7c6c06b0 --- /dev/null +++ b/packages/marko-store/src/tags/store-selector.d.marko @@ -0,0 +1,17 @@ +/** File for types only, not actual implementation **/ + +export interface Input { + from?: () => { + get(): TSource + subscribe(listener: (value: TSource) => void): { unsubscribe(): void } + } + context?: (bundle: any) => { + get(): TSource + subscribe(listener: (value: TSource) => void): { unsubscribe(): void } + } + key?: string + selector?: (snapshot: TSource) => TSelected + compare?: (a: TSelected, b: TSelected) => boolean +} + +return=(undefined as unknown as TSelected | undefined) diff --git a/packages/marko-store/src/tags/stream-store-provider.d.marko b/packages/marko-store/src/tags/stream-store-provider.d.marko new file mode 100644 index 00000000..fb755123 --- /dev/null +++ b/packages/marko-store/src/tags/stream-store-provider.d.marko @@ -0,0 +1,7 @@ +/** File for types only, not actual implementation **/ + +export interface Input { + value: () => Record + key: string + content?: Marko.Body +} diff --git a/packages/marko-store/vitest.config.ts b/packages/marko-store/vitest.config.ts index d7e035bc..e7e202ce 100644 --- a/packages/marko-store/vitest.config.ts +++ b/packages/marko-store/vitest.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ watch: false, environment: 'jsdom', setupFiles: ['./tests/setup.ts'], - coverage: { enabled: true, provider: 'istanbul', include: ['src/**/*'] }, + coverage: { enabled: true, provider: 'istanbul', include: ['src//*'], exclude: ['/*.d.marko'] }, typecheck: { enabled: true }, }, }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bb4f4e24..fc79320a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -363,6 +363,9 @@ importers: specifier: ^6 version: 6.1.18 devDependencies: + '@marko/language-tools': + specifier: ^2.6.0 + version: 2.6.0 '@marko/type-check': specifier: ^3.1.0 version: 3.1.0 @@ -382,6 +385,9 @@ importers: specifier: ^6 version: 6.1.18 devDependencies: + '@marko/language-tools': + specifier: ^2.6.0 + version: 2.6.0 '@marko/type-check': specifier: ^3.1.0 version: 3.1.0 @@ -401,6 +407,9 @@ importers: specifier: ^6 version: 6.1.18 devDependencies: + '@marko/language-tools': + specifier: ^2.6.0 + version: 2.6.0 '@marko/type-check': specifier: ^3.1.0 version: 3.1.0 @@ -420,6 +429,9 @@ importers: specifier: ^6 version: 6.1.18 devDependencies: + '@marko/language-tools': + specifier: ^2.6.0 + version: 2.6.0 '@marko/type-check': specifier: ^3.1.0 version: 3.1.0 @@ -439,6 +451,9 @@ importers: specifier: ^6 version: 6.1.18 devDependencies: + '@marko/language-tools': + specifier: ^2.6.0 + version: 2.6.0 '@marko/type-check': specifier: ^3.1.0 version: 3.1.0 @@ -458,6 +473,9 @@ importers: specifier: ^6 version: 6.1.18 devDependencies: + '@marko/language-tools': + specifier: ^2.6.0 + version: 2.6.0 '@marko/type-check': specifier: ^3.1.0 version: 3.1.0 @@ -477,6 +495,9 @@ importers: specifier: ^6 version: 6.1.18 devDependencies: + '@marko/language-tools': + specifier: ^2.6.0 + version: 2.6.0 '@marko/type-check': specifier: ^3.1.0 version: 3.1.0 @@ -496,6 +517,9 @@ importers: specifier: ^6 version: 6.1.18 devDependencies: + '@marko/language-tools': + specifier: ^2.6.0 + version: 2.6.0 '@marko/type-check': specifier: ^3.1.0 version: 3.1.0 From c880a77d357a0b7280f9229c4059739bf4386d9a Mon Sep 17 00:00:00 2001 From: defunkt-dev Date: Tue, 30 Jun 2026 15:14:17 -0600 Subject: [PATCH 26/29] update docs/ --- docs/config.json | 35 ++++++++ docs/framework/marko/quick-start.md | 88 +++++++++++++++++++ docs/framework/marko/reference/index.md | 20 +++++ .../marko/reference/tags/store-atom.md | 29 ++++++ .../marko/reference/tags/store-context.md | 28 ++++++ .../marko/reference/tags/store-provider.md | 28 ++++++ .../marko/reference/tags/store-selector.md | 38 ++++++++ .../reference/tags/stream-store-provider.md | 31 +++++++ 8 files changed, 297 insertions(+) create mode 100644 docs/framework/marko/quick-start.md create mode 100644 docs/framework/marko/reference/index.md create mode 100644 docs/framework/marko/reference/tags/store-atom.md create mode 100644 docs/framework/marko/reference/tags/store-context.md create mode 100644 docs/framework/marko/reference/tags/store-provider.md create mode 100644 docs/framework/marko/reference/tags/store-selector.md create mode 100644 docs/framework/marko/reference/tags/stream-store-provider.md diff --git a/docs/config.json b/docs/config.json index 3a34004f..4297029e 100644 --- a/docs/config.json +++ b/docs/config.json @@ -85,6 +85,15 @@ "to": "framework/lit/quick-start" } ] + }, + { + "label": "marko", + "children": [ + { + "label": "Quick Start - Marko", + "to": "framework/marko/quick-start" + } + ] } ] }, @@ -159,6 +168,12 @@ "to": "framework/lit/reference/index" } ] + }, + { + "label": "marko", + "children": [ + { "label": "Marko Tags", "to": "framework/marko/reference/index" } + ] } ] }, @@ -507,6 +522,16 @@ "to": "framework/lit/reference/interfaces/UseSelectorOptions" } ] + }, + { + "label": "marko", + "children": [ + { "label": "", "to": "framework/marko/reference/tags/store-provider" }, + { "label": "", "to": "framework/marko/reference/tags/store-context" }, + { "label": "", "to": "framework/marko/reference/tags/store-selector" }, + { "label": "", "to": "framework/marko/reference/tags/store-atom" }, + { "label": "", "to": "framework/marko/reference/tags/stream-store-provider" } + ] } ] }, @@ -672,6 +697,16 @@ "to": "framework/lit/examples/simple" } ] + }, + { + "label": "marko", + "children": [ + { "label": "Simple", "to": "framework/marko/examples/simple" }, + { "label": "Atoms", "to": "framework/marko/examples/atoms" }, + { "label": "Stores", "to": "framework/marko/examples/stores" }, + { "label": "Store Actions", "to": "framework/marko/examples/store-actions" }, + { "label": "Store Context", "to": "framework/marko/examples/store-context" } + ] } ] } diff --git a/docs/framework/marko/quick-start.md b/docs/framework/marko/quick-start.md new file mode 100644 index 00000000..6a893b61 --- /dev/null +++ b/docs/framework/marko/quick-start.md @@ -0,0 +1,88 @@ +--- +title: Quick Start +id: quick-start +--- + +The basic Marko app example to get started with TanStack `marko-store`. + +Marko exposes the store through tags rather than hooks. `` reads a slice of a store and keeps it live, re-rendering only when that selected slice changes. State is updated with `store.setState`, exactly as in the other adapters. + +```marko +import { createStore } from '@tanstack/marko-store' + +// You can instantiate a Store outside of Marko templates too! +export const store = createStore({ + dogs: 0, + cats: 0, +}) + +
+

How many of your friends like cats or dogs?

+

+ Press one of the buttons to add a counter of how many of your friends + like cats or dogs. +

+ + + // subscribes only to state.dogs + store selector=(state) => state.dogs/> +
dogs: ${dogs}
+ + + store selector=(state) => state.cats/> +
cats: ${cats}
+
+``` + +`` binds the latest selected value to its tag variable (here `dogs` and `cats`) and only updates when that specific selection changes. + +## A writable value: `` + +For a single writable value, `` gives two-way access to an atom — read its tag variable, and assign to it to write back: + +```marko +import { createAtom } from '@tanstack/marko-store' +export const countAtom = createAtom(0) + + countAtom/> + +``` + +## Sharing stores without imports: `` and `` + +To distribute one or more stores down the tree without importing them everywhere, wrap a subtree in `` with a bundle of stores, read any value below with `` in context mode, and grab the bundle to write with ``: + +```marko +import { createStore } from '@tanstack/marko-store' + + ({ cats: createStore({ count: 0 }) })> + c.cats selector=(s) => s.count/> +
cats: ${catCount}
+ + + +
+``` + +## Server rendering and streaming + +`marko-store` is resumable: a store rendered on the server stays live on the client after resume, with no re-execution. For server-computed, per-request data that arrives mid-render through ``, create the store from the awaited value inside the await using ``. The value then renders on the server with no first-paint flash and the store stays live after resume: + +```marko +import { createStore } from '@tanstack/marko-store' + + + ({ user: createStore(user) })> + c.user selector=(s) => s.name/> +
${name}
+
+
+``` + +Use a plain `` for in-order streaming, or wrap it in `` with a `<@placeholder>` for out-of-order streaming. Each `` needs a distinct `key`. + +For production SSR, use [`@marko/run`](https://github.com/marko-js/run), Marko's official server framework. Standalone `@marko/vite` SSR is intended for development only. diff --git a/docs/framework/marko/reference/index.md b/docs/framework/marko/reference/index.md new file mode 100644 index 00000000..6f0cb204 --- /dev/null +++ b/docs/framework/marko/reference/index.md @@ -0,0 +1,20 @@ +--- +id: "@tanstack/marko-store" +title: "@tanstack/marko-store" +--- + +# @tanstack/marko-store + +The Marko adapter exposes its API as custom tags. Each tag is documented on its own page below. + +## Tags + +- [``](tags/store-provider.md) +- [``](tags/store-context.md) +- [``](tags/store-selector.md) +- [``](tags/store-atom.md) +- [``](tags/stream-store-provider.md) + +## Re-exports + +`@tanstack/marko-store` re-exports the full `@tanstack/store` core, including `createStore`, `createAtom`, `Store`, `Derived`, and `shallow`. These are framework-agnostic; see the Store API Reference for their documentation. diff --git a/docs/framework/marko/reference/tags/store-atom.md b/docs/framework/marko/reference/tags/store-atom.md new file mode 100644 index 00000000..05211a79 --- /dev/null +++ b/docs/framework/marko/reference/tags/store-atom.md @@ -0,0 +1,29 @@ +--- +id: store-atom +title: "" +--- + +# Tag: `` + +Binds a single writable atom from `createAtom()` as a two-way value: it reads the atom's current value and writes back through the atom's `set`. Use it for a standalone writable value; for a `Store` (from `createStore`), read it with `` instead. + +```marko + qtyAtom> +

Quantity: ${qty}

+``` + +## Type parameters + +- **`T`** — the atom's value type. + +## Attributes + +- **`from`** — `() => { get(); set(); subscribe() }` (required). A thunk returning the atom (from `createAtom()`). The atom must have a `set` method; a `Store` does not and will throw. + +## Tag variable + +The atom's current value, typed `T`. The tag exposes a `value`/`valueChange` pair, so it is two-way bindable — bind it to a variable with `value:=` and assignments write back through the atom's `set`. + +## Behavior + +The value is seeded from `from().get()` at render and kept live by a subscription on mount, so it updates whenever the atom changes from anywhere. Writes go through `from().set(next)`. If `from()` returns something without a `set` method (such as a `Store`), the tag throws with guidance to use ``. diff --git a/docs/framework/marko/reference/tags/store-context.md b/docs/framework/marko/reference/tags/store-context.md new file mode 100644 index 00000000..3caa527c --- /dev/null +++ b/docs/framework/marko/reference/tags/store-context.md @@ -0,0 +1,28 @@ +--- +id: store-context +title: "" +--- + +# Tag: `` + +Reads the store bundle provided by the nearest `` with a matching key, so a descendant can use the live stores directly (for example to dispatch actions). Binds a getter. + +```marko + + + +``` + +## Attributes + +- **`key`** — `string` (optional, default `"__tanstack_store_context"`). The context key to read. Must match the key the `` used. + +## Tag variable + +A getter function, `() => bundle`. Call it to read the current bundle parked by the provider. It is a thunk rather than the bundle itself so the read happens at call time, after the provider has parked the bundle. + +## Behavior + +At render the tag checks that a bundle exists on `$global` under the key and throws if none is found — that is, when there is no `` above it. It does not subscribe to anything; use `` when you need a value that re-renders on change. diff --git a/docs/framework/marko/reference/tags/store-provider.md b/docs/framework/marko/reference/tags/store-provider.md new file mode 100644 index 00000000..d2674e82 --- /dev/null +++ b/docs/framework/marko/reference/tags/store-provider.md @@ -0,0 +1,28 @@ +--- +id: store-provider +title: "" +--- + +# Tag: `` + +Creates a bundle of stores for the current request and makes it available to descendant tags by a context key. Wraps the content it is given. + +```marko + ({ cart: createStore({ items: [] }) })> + + +``` + +## Attributes + +- **`value`** — `() => Record` (required). A thunk returning the bundle of named stores or atoms to provide. It is called once on the server at render and again on the client at mount, so each environment gets its own live instances. +- **`key`** — `string` (optional, default `"__tanstack_store_context"`). The context key the bundle is parked under. Use distinct keys to provide more than one bundle on a page. The matching `` and context-mode `` must use the same key. +- **`content`** — `Marko.Body` (optional). The body rendered inside the provider, usually supplied implicitly as the tag's children. + +## Tag variable + +None. `` is a wrapper: it renders its content and binds no tag variable. + +## Behavior + +The bundle is parked on `$global` under the context key at render, and re-created and published on mount so client subscribers attach to live instances. Only one provider may claim a given key: a second `` (or a ``) on the same key throws, to prevent two writers silently clobbering the same box. On destroy the box and its owner marker are cleared. diff --git a/docs/framework/marko/reference/tags/store-selector.md b/docs/framework/marko/reference/tags/store-selector.md new file mode 100644 index 00000000..4655b559 --- /dev/null +++ b/docs/framework/marko/reference/tags/store-selector.md @@ -0,0 +1,38 @@ +--- +id: store-selector +title: "" +--- + +# Tag: `` + +Subscribes to a store or atom, projects a slice of it, and re-renders when that slice changes. Works in two modes: `from` (a store passed directly) or `context` (a member of the provided bundle). Binds the selected value. + +```marko + + cartStore selector=(s) => s.items.length> +

${count} items

+ + + b.cart selector=(s) => s.items.length> +``` + +## Type parameters + +- **`TSource`** — the snapshot type of the source store or atom. +- **`TSelected`** — the projected slice type. Defaults to `TSource` when no `selector` is given. + +## Attributes + +- **`from`** — `() => { get(); subscribe() }` (optional). A thunk returning the source store or atom directly. Mutually exclusive with `context`. +- **`context`** — `(bundle) => { get(); subscribe() }` (optional). Selects the source from the provided bundle. Mutually exclusive with `from`. Annotate the parameter in typed projects, e.g. `context=(b: any) => b.cart`. +- **`key`** — `string` (optional, default `"__tanstack_store_context"`). The context key to read in `context` mode. Must match the provider's key. +- **`selector`** — `(snapshot: TSource) => TSelected` (optional, default identity). Projects the slice to track. +- **`compare`** — `(a: TSelected, b: TSelected) => boolean` (optional, default `===`). Equality check used to drop redundant updates. + +## Tag variable + +The current selected value, typed `TSelected | undefined`. It is `undefined` only at the brief moment on resume before a context-mode provider has parked its bundle; the tag recovers automatically and updates once the bundle is available. + +## Behavior + +Passing both `from` and `context` throws. The value is seeded at render (null-tolerant in context mode), then kept live by a subscription established on mount. In context mode the tag also listens on the internal publish bus, so it attaches to the store the moment the provider parks it during streaming or resume. Changing the source or swapping the `selector` re-projects; `compare` gates only store mutations, never a deliberate selector change. diff --git a/docs/framework/marko/reference/tags/stream-store-provider.md b/docs/framework/marko/reference/tags/stream-store-provider.md new file mode 100644 index 00000000..65ae8c69 --- /dev/null +++ b/docs/framework/marko/reference/tags/stream-store-provider.md @@ -0,0 +1,31 @@ +--- +id: stream-store-provider +title: "" +--- + +# Tag: `` + +A provider for progressive streaming: it creates a per-request store bundle from data that becomes available inside a late ``, and keeps it live across the server-to-client boundary. Place it inside the awaited body so the awaited value is captured into `value`. Wraps its content. + +```marko + + ({ order: createStore(order) })> + b.order selector=(o) => o.total> +

Total: ${total}

+
+
+``` + +## Attributes + +- **`value`** — `() => Record` (required). A thunk returning the bundle of stores or atoms, built from the awaited per-request data. Called on the server at render and again on the client at mount. +- **`key`** — `string` (**required**). The context key the bundle is parked under. Unlike ``, there is no default; each streamed provider needs an explicit, distinct key. +- **`content`** — `Marko.Body` (optional). The body rendered inside the provider. + +## Tag variable + +None. Like ``, it renders its content and binds no tag variable. + +## Behavior + +This is the "born-with-data" transport. The awaited value is captured by `value` and crosses to the client through the await subtree's resume scope; the bundle is built into `$global` under the key on the server, and rebuilt and published on mount so client subscribers attach to live instances. It shares ``'s owner marker, so a `` and a `` on the same key detect each other and throw rather than clobber. For production, a streaming Marko app must run under `@marko/run`; a standalone `@marko/vite` production build does not coordinate resume correctly. From 6333c7b6922a8e4f3f817c7632ddd8f561cd002c Mon Sep 17 00:00:00 2001 From: defunkt-dev Date: Mon, 13 Jul 2026 22:34:53 -0600 Subject: [PATCH 27/29] Type check issue fixes (#1) * push to show the issue * fix examples * fix e2e runs and type checks * fix builds * rm consumer-check pkg * rm consumer-check * lint * fix npmrc --- examples/marko/atoms/marko.json | 1 + examples/marko/atoms/tsconfig.json | 2 +- examples/marko/simple/marko.json | 1 + examples/marko/simple/tsconfig.json | 2 +- .../marko/ssr-per-request-multi/marko.json | 1 + .../marko/ssr-per-request-multi/tsconfig.json | 2 +- examples/marko/ssr-resume/marko.json | 1 + examples/marko/ssr-resume/tsconfig.json | 2 +- examples/marko/store-actions/marko.json | 1 + examples/marko/store-actions/tsconfig.json | 2 +- examples/marko/store-context/marko.json | 1 + examples/marko/store-context/tsconfig.json | 2 +- examples/marko/stores/marko.json | 1 + examples/marko/stores/tsconfig.json | 2 +- examples/marko/streaming/marko.json | 1 + examples/marko/streaming/tsconfig.json | 2 +- packages/marko-store/README.md | 22 ++++++++++++++++++- packages/marko-store/e2e/marko.json | 1 + packages/marko-store/marko.json | 2 +- packages/marko-store/package.json | 6 ++--- .../marko-store/src/tags/store-atom.d.marko | 15 ------------- .../marko-store/src/tags/store-atom.marko | 8 +++++-- .../src/tags/store-context.d.marko | 7 ------ .../src/tags/store-provider.d.marko | 7 ------ .../src/tags/store-selector.d.marko | 17 -------------- .../src/tags/stream-store-provider.d.marko | 7 ------ packages/marko-store/tsconfig.tags.json | 14 ++++++++++++ packages/marko-store/tsdown.config.ts | 9 +++++--- 28 files changed, 67 insertions(+), 72 deletions(-) create mode 100644 examples/marko/atoms/marko.json create mode 100644 examples/marko/simple/marko.json create mode 100644 examples/marko/ssr-per-request-multi/marko.json create mode 100644 examples/marko/ssr-resume/marko.json create mode 100644 examples/marko/store-actions/marko.json create mode 100644 examples/marko/store-context/marko.json create mode 100644 examples/marko/stores/marko.json create mode 100644 examples/marko/streaming/marko.json create mode 100644 packages/marko-store/e2e/marko.json delete mode 100644 packages/marko-store/src/tags/store-atom.d.marko delete mode 100644 packages/marko-store/src/tags/store-context.d.marko delete mode 100644 packages/marko-store/src/tags/store-provider.d.marko delete mode 100644 packages/marko-store/src/tags/store-selector.d.marko delete mode 100644 packages/marko-store/src/tags/stream-store-provider.d.marko create mode 100644 packages/marko-store/tsconfig.tags.json diff --git a/examples/marko/atoms/marko.json b/examples/marko/atoms/marko.json new file mode 100644 index 00000000..8e56a67e --- /dev/null +++ b/examples/marko/atoms/marko.json @@ -0,0 +1 @@ +{ "tags-dir": "../../../packages/marko-store/src/tags" } diff --git a/examples/marko/atoms/tsconfig.json b/examples/marko/atoms/tsconfig.json index 91bb9b96..2c3dfeb0 100644 --- a/examples/marko/atoms/tsconfig.json +++ b/examples/marko/atoms/tsconfig.json @@ -10,6 +10,6 @@ "include": [ "src/**/*.ts", "src/**/*.marko", - "../../../packages/marko-store/src/tags/*.d.marko" + "../../../packages/marko-store/src/tags/**/*" ] } diff --git a/examples/marko/simple/marko.json b/examples/marko/simple/marko.json new file mode 100644 index 00000000..8e56a67e --- /dev/null +++ b/examples/marko/simple/marko.json @@ -0,0 +1 @@ +{ "tags-dir": "../../../packages/marko-store/src/tags" } diff --git a/examples/marko/simple/tsconfig.json b/examples/marko/simple/tsconfig.json index 91bb9b96..2c3dfeb0 100644 --- a/examples/marko/simple/tsconfig.json +++ b/examples/marko/simple/tsconfig.json @@ -10,6 +10,6 @@ "include": [ "src/**/*.ts", "src/**/*.marko", - "../../../packages/marko-store/src/tags/*.d.marko" + "../../../packages/marko-store/src/tags/**/*" ] } diff --git a/examples/marko/ssr-per-request-multi/marko.json b/examples/marko/ssr-per-request-multi/marko.json new file mode 100644 index 00000000..8e56a67e --- /dev/null +++ b/examples/marko/ssr-per-request-multi/marko.json @@ -0,0 +1 @@ +{ "tags-dir": "../../../packages/marko-store/src/tags" } diff --git a/examples/marko/ssr-per-request-multi/tsconfig.json b/examples/marko/ssr-per-request-multi/tsconfig.json index 91bb9b96..2c3dfeb0 100644 --- a/examples/marko/ssr-per-request-multi/tsconfig.json +++ b/examples/marko/ssr-per-request-multi/tsconfig.json @@ -10,6 +10,6 @@ "include": [ "src/**/*.ts", "src/**/*.marko", - "../../../packages/marko-store/src/tags/*.d.marko" + "../../../packages/marko-store/src/tags/**/*" ] } diff --git a/examples/marko/ssr-resume/marko.json b/examples/marko/ssr-resume/marko.json new file mode 100644 index 00000000..8e56a67e --- /dev/null +++ b/examples/marko/ssr-resume/marko.json @@ -0,0 +1 @@ +{ "tags-dir": "../../../packages/marko-store/src/tags" } diff --git a/examples/marko/ssr-resume/tsconfig.json b/examples/marko/ssr-resume/tsconfig.json index 91bb9b96..2c3dfeb0 100644 --- a/examples/marko/ssr-resume/tsconfig.json +++ b/examples/marko/ssr-resume/tsconfig.json @@ -10,6 +10,6 @@ "include": [ "src/**/*.ts", "src/**/*.marko", - "../../../packages/marko-store/src/tags/*.d.marko" + "../../../packages/marko-store/src/tags/**/*" ] } diff --git a/examples/marko/store-actions/marko.json b/examples/marko/store-actions/marko.json new file mode 100644 index 00000000..8e56a67e --- /dev/null +++ b/examples/marko/store-actions/marko.json @@ -0,0 +1 @@ +{ "tags-dir": "../../../packages/marko-store/src/tags" } diff --git a/examples/marko/store-actions/tsconfig.json b/examples/marko/store-actions/tsconfig.json index 91bb9b96..2c3dfeb0 100644 --- a/examples/marko/store-actions/tsconfig.json +++ b/examples/marko/store-actions/tsconfig.json @@ -10,6 +10,6 @@ "include": [ "src/**/*.ts", "src/**/*.marko", - "../../../packages/marko-store/src/tags/*.d.marko" + "../../../packages/marko-store/src/tags/**/*" ] } diff --git a/examples/marko/store-context/marko.json b/examples/marko/store-context/marko.json new file mode 100644 index 00000000..8e56a67e --- /dev/null +++ b/examples/marko/store-context/marko.json @@ -0,0 +1 @@ +{ "tags-dir": "../../../packages/marko-store/src/tags" } diff --git a/examples/marko/store-context/tsconfig.json b/examples/marko/store-context/tsconfig.json index 91bb9b96..2c3dfeb0 100644 --- a/examples/marko/store-context/tsconfig.json +++ b/examples/marko/store-context/tsconfig.json @@ -10,6 +10,6 @@ "include": [ "src/**/*.ts", "src/**/*.marko", - "../../../packages/marko-store/src/tags/*.d.marko" + "../../../packages/marko-store/src/tags/**/*" ] } diff --git a/examples/marko/stores/marko.json b/examples/marko/stores/marko.json new file mode 100644 index 00000000..8e56a67e --- /dev/null +++ b/examples/marko/stores/marko.json @@ -0,0 +1 @@ +{ "tags-dir": "../../../packages/marko-store/src/tags" } diff --git a/examples/marko/stores/tsconfig.json b/examples/marko/stores/tsconfig.json index 91bb9b96..2c3dfeb0 100644 --- a/examples/marko/stores/tsconfig.json +++ b/examples/marko/stores/tsconfig.json @@ -10,6 +10,6 @@ "include": [ "src/**/*.ts", "src/**/*.marko", - "../../../packages/marko-store/src/tags/*.d.marko" + "../../../packages/marko-store/src/tags/**/*" ] } diff --git a/examples/marko/streaming/marko.json b/examples/marko/streaming/marko.json new file mode 100644 index 00000000..8e56a67e --- /dev/null +++ b/examples/marko/streaming/marko.json @@ -0,0 +1 @@ +{ "tags-dir": "../../../packages/marko-store/src/tags" } diff --git a/examples/marko/streaming/tsconfig.json b/examples/marko/streaming/tsconfig.json index 91bb9b96..2c3dfeb0 100644 --- a/examples/marko/streaming/tsconfig.json +++ b/examples/marko/streaming/tsconfig.json @@ -10,6 +10,6 @@ "include": [ "src/**/*.ts", "src/**/*.marko", - "../../../packages/marko-store/src/tags/*.d.marko" + "../../../packages/marko-store/src/tags/**/*" ] } diff --git a/packages/marko-store/README.md b/packages/marko-store/README.md index 7263a585..c82a8b2b 100644 --- a/packages/marko-store/README.md +++ b/packages/marko-store/README.md @@ -562,6 +562,26 @@ functionality one.) store through the tag's `value` thunk — never hold it in a plain variable inside the block, since a live store can't be serialized with the block's state. +## TypeScript configs + +These four `tsconfig` files are about building and type-checking this package +itself — if you're only *using* `@tanstack/marko-store`, you can skip this. Each does +one job: two type-check, two emit, split across the two tools involved (`tsdown` for +the plain-TypeScript index, `marko-type-check` for the `.marko` tags). + +| File | What it does | Why it's needed | +| --- | --- | --- | +| `tsconfig.json` | The base every other config extends. Holds the shared compiler settings and maps `@tanstack/store` to `../store/src`. | One place for the defaults, used by editors and inherited by the rest. The path mapping gives live types from the sibling `store` package with no build step. | +| `tsconfig.build.json` | Used by `tsdown` to compile `src/index.ts` into `dist` (the ESM/CJS core re-export). Blanks the `@tanstack/store` path mapping. | The published index must resolve `@tanstack/store` as the real installed dependency — the way a consumer's build sees it — not as local workspace source. | +| `tsconfig.marko.json` | Used by `marko-type-check` to type-check the whole package, `.marko` files included, writing nothing (`noEmit`). Covers `src`, `tests`, and `e2e`. | Checking `.marko` needs Marko-aware resolution, and the gate should cover tests and e2e too. This is the `test:types:marko` check; a check step should never emit output. | +| `tsconfig.tags.json` | Used by `marko-type-check` to *build* the tags: compiles `src/tags` into `dist/tags` (stripped `.marko` + generated `.d.marko` + the `store-bus` helper). Scoped to `src/tags` only. | Publishing ships built tags, not raw source. It's scoped so it doesn't rebuild the index (`tsdown` owns that), and unlike the check config it emits (`declaration` on, `noEmit` off). | + +Why four rather than one: two things vary and can't share a file — **check vs emit** +(a config has a single `noEmit` and `outDir`) and **which tool/scope** (`tsdown` for +the index vs `marko-type-check` for the tags, with different `include` lists). Two of +them use the same tool for opposite ends — one checks and emits nothing, the other +emits just the tags. + ## License -MIT \ No newline at end of file +MIT diff --git a/packages/marko-store/e2e/marko.json b/packages/marko-store/e2e/marko.json new file mode 100644 index 00000000..31e34666 --- /dev/null +++ b/packages/marko-store/e2e/marko.json @@ -0,0 +1 @@ +{ "tags-dir": "../src/tags" } diff --git a/packages/marko-store/marko.json b/packages/marko-store/marko.json index 82bf8ffd..bc929c34 100644 --- a/packages/marko-store/marko.json +++ b/packages/marko-store/marko.json @@ -1 +1 @@ -{ "tags-dir": "./src/tags", "script-lang": "ts" } +{ "exports": "./dist/tags" } diff --git a/packages/marko-store/package.json b/packages/marko-store/package.json index 92b960ed..c3666bbf 100644 --- a/packages/marko-store/package.json +++ b/packages/marko-store/package.json @@ -32,7 +32,7 @@ "test:lib:dev": "pnpm run test:lib --watch", "test:build": "publint --strict", "test:e2e": "playwright test --config e2e/playwright.config.ts", - "build": "tsdown --tsconfig tsconfig.build.json" + "build": "tsdown --tsconfig tsconfig.build.json && marko-type-check -p tsconfig.tags.json" }, "type": "module", "types": "./dist/index.d.ts", @@ -50,13 +50,11 @@ } }, "./package.json": "./package.json", - "./marko.json": "./marko.json", - "./src/tags/*": "./src/tags/*" + "./marko.json": "./marko.json" }, "sideEffects": false, "files": [ "dist", - "src/tags", "marko.json", "README.md" ], diff --git a/packages/marko-store/src/tags/store-atom.d.marko b/packages/marko-store/src/tags/store-atom.d.marko deleted file mode 100644 index 1f8d5000..00000000 --- a/packages/marko-store/src/tags/store-atom.d.marko +++ /dev/null @@ -1,15 +0,0 @@ -/** File for types only, not actual implementation **/ - -// V maps an untyped (any/unknown) source to `any` so reads stay usable, exactly -// like the implementation (value = source.get()); a concrete T is preserved. -export type Value = unknown extends T ? any : T - -export interface Input { - from: () => { - get(): T - set(value: T | ((prev: T) => T)): void - subscribe(listener: (value: T) => void): { unsubscribe(): void } - } -} - -return=(undefined as unknown as Value) valueChange=((next: Value) => input.from().set(next as T)) diff --git a/packages/marko-store/src/tags/store-atom.marko b/packages/marko-store/src/tags/store-atom.marko index 04d4b367..6a8fe324 100644 --- a/packages/marko-store/src/tags/store-atom.marko +++ b/packages/marko-store/src/tags/store-atom.marko @@ -6,7 +6,11 @@ export interface Input { } } - { +// Maps an untyped (any/unknown) source to `any` so reads stay usable, exactly +// like the implementation (value = source.get()); a concrete T is preserved. +export type Value = unknown extends T ? any : T + + =(() => { const source = input.from() if (typeof (source as { set?: unknown }).set !== 'function') { throw new Error( @@ -31,6 +35,6 @@ export interface Input { diff --git a/packages/marko-store/src/tags/store-context.d.marko b/packages/marko-store/src/tags/store-context.d.marko deleted file mode 100644 index 3724a0e2..00000000 --- a/packages/marko-store/src/tags/store-context.d.marko +++ /dev/null @@ -1,7 +0,0 @@ -/** File for types only, not actual implementation **/ - -export interface Input { - key?: string -} - -return=(() => undefined as unknown) diff --git a/packages/marko-store/src/tags/store-provider.d.marko b/packages/marko-store/src/tags/store-provider.d.marko deleted file mode 100644 index d5ed2209..00000000 --- a/packages/marko-store/src/tags/store-provider.d.marko +++ /dev/null @@ -1,7 +0,0 @@ -/** File for types only, not actual implementation **/ - -export interface Input { - value: () => Record - key?: string - content?: Marko.Body -} diff --git a/packages/marko-store/src/tags/store-selector.d.marko b/packages/marko-store/src/tags/store-selector.d.marko deleted file mode 100644 index 7c6c06b0..00000000 --- a/packages/marko-store/src/tags/store-selector.d.marko +++ /dev/null @@ -1,17 +0,0 @@ -/** File for types only, not actual implementation **/ - -export interface Input { - from?: () => { - get(): TSource - subscribe(listener: (value: TSource) => void): { unsubscribe(): void } - } - context?: (bundle: any) => { - get(): TSource - subscribe(listener: (value: TSource) => void): { unsubscribe(): void } - } - key?: string - selector?: (snapshot: TSource) => TSelected - compare?: (a: TSelected, b: TSelected) => boolean -} - -return=(undefined as unknown as TSelected | undefined) diff --git a/packages/marko-store/src/tags/stream-store-provider.d.marko b/packages/marko-store/src/tags/stream-store-provider.d.marko deleted file mode 100644 index fb755123..00000000 --- a/packages/marko-store/src/tags/stream-store-provider.d.marko +++ /dev/null @@ -1,7 +0,0 @@ -/** File for types only, not actual implementation **/ - -export interface Input { - value: () => Record - key: string - content?: Marko.Body -} diff --git a/packages/marko-store/tsconfig.tags.json b/packages/marko-store/tsconfig.tags.json new file mode 100644 index 00000000..e8a75dca --- /dev/null +++ b/packages/marko-store/tsconfig.tags.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "moduleResolution": "Bundler", + "paths": {}, + "outDir": "dist", + "rootDir": "src", + "noEmit": false, + "declaration": true, + "tsBuildInfoFile": "./dist/tsconfig.tags.tsbuildinfo", + "types": ["node"] + }, + "include": ["src/tags/**/*.marko", "src/tags/**/*.ts"] +} diff --git a/packages/marko-store/tsdown.config.ts b/packages/marko-store/tsdown.config.ts index 918fd624..467b9b74 100644 --- a/packages/marko-store/tsdown.config.ts +++ b/packages/marko-store/tsdown.config.ts @@ -11,8 +11,11 @@ export default defineConfig({ fixedExtension: false, // NOTE: unlike react-store, `exports: true` is intentionally NOT set here. // tsdown's `exports: true` rewrites package.json "exports" from the built - // entries only, which wipes the hand-authored ".marko" tag subpaths - // ("./marko.json", "./src/tags/*") — those ship as source, not built output. - // We maintain "exports" by hand in package.json. publint --strict still runs. + // entries only, which would wipe the hand-authored "./marko.json" subpath. + // The Marko tags are built separately by `marko-type-check` (see the "build" + // script) into dist/tags and are resolved via marko.json's "exports" field, + // not via package.json. We maintain package.json "exports" by hand. + // publint --strict still runs. tsdown's `clean` wipes dist, so `build` runs + // tsdown first (index) and marko-type-check second (tags) — order matters. publint: { strict: true }, }) From 26f6cf3d8ae284b05c442a7d25e6eaa23ea94393 Mon Sep 17 00:00:00 2001 From: defunkt-dev Date: Thu, 16 Jul 2026 01:24:22 -0600 Subject: [PATCH 28/29] major reorg, fix files properly for packaging, examples to use marko/run * major reorg, fix files properly for packaging, examples to use marko/run * update example with more datatypes to denote serialization * resolve conflicts with main --- .changeset/add-marko-store.md | 2 +- docs/framework/marko/reference/index.md | 2 +- .../marko/reference/tags/store-atom.md | 4 +- .../marko/reference/tags/store-selector.md | 4 +- examples/marko/README.md | 36 +- examples/marko/atoms/.marko-run/routes.d.ts | 34 + examples/marko/atoms/README.md | 5 +- examples/marko/atoms/e2e/atoms.spec.ts | 20 + examples/marko/atoms/index.html | 12 - examples/marko/atoms/package.json | 10 +- examples/marko/atoms/playwright.config.ts | 21 + examples/marko/atoms/src/index.ts | 4 - examples/marko/atoms/src/routes/+page.marko | 9 + examples/marko/atoms/tsconfig.json | 5 +- examples/marko/atoms/vite.config.ts | 5 +- examples/marko/simple/.marko-run/routes.d.ts | 34 + examples/marko/simple/README.md | 5 +- examples/marko/simple/e2e/simple.spec.ts | 20 + examples/marko/simple/index.html | 12 - examples/marko/simple/package.json | 10 +- examples/marko/simple/playwright.config.ts | 21 + examples/marko/simple/src/index.ts | 4 - examples/marko/simple/src/routes/+page.marko | 9 + examples/marko/simple/tsconfig.json | 5 +- examples/marko/simple/vite.config.ts | 5 +- .../.marko-run/routes.d.ts | 53 ++ .../marko/ssr-per-request-multi/README.md | 14 +- .../e2e/ssr-per-request-multi.spec.ts | 43 + .../marko/ssr-per-request-multi/package.json | 8 +- .../playwright.config.ts | 21 + .../marko/ssr-per-request-multi/server.mjs | 47 -- .../marko/ssr-per-request-multi/src/index.ts | 32 - .../src/perreq-page.marko | 28 - .../src/routes/+page.marko | 70 ++ .../multi/+page.marko} | 2 +- .../marko/ssr-per-request-multi/tsconfig.json | 5 +- .../ssr-per-request-multi/vite.config.ts | 6 + .../marko/ssr-resume/.marko-run/routes.d.ts | 34 + examples/marko/ssr-resume/README.md | 8 +- .../marko/ssr-resume/e2e/ssr-resume.spec.ts | 21 + examples/marko/ssr-resume/package.json | 8 +- .../marko/ssr-resume/playwright.config.ts | 21 + examples/marko/ssr-resume/server.mjs | 47 -- examples/marko/ssr-resume/src/index.ts | 30 - .../src/{page.marko => routes/+page.marko} | 2 +- examples/marko/ssr-resume/tsconfig.json | 5 +- examples/marko/ssr-resume/vite.config.ts | 6 + .../store-actions/.marko-run/routes.d.ts | 34 + examples/marko/store-actions/README.md | 5 +- .../store-actions/e2e/store-actions.spec.ts | 20 + examples/marko/store-actions/index.html | 12 - examples/marko/store-actions/package.json | 10 +- .../marko/store-actions/playwright.config.ts | 21 + examples/marko/store-actions/src/index.ts | 4 - .../store-actions/src/routes/+page.marko | 9 + examples/marko/store-actions/tsconfig.json | 5 +- examples/marko/store-actions/vite.config.ts | 5 +- .../store-context/.marko-run/routes.d.ts | 34 + examples/marko/store-context/README.md | 5 +- .../store-context/e2e/store-context.spec.ts | 20 + examples/marko/store-context/index.html | 12 - examples/marko/store-context/package.json | 10 +- .../marko/store-context/playwright.config.ts | 21 + examples/marko/store-context/src/App.marko | 9 +- .../store-context/src/DeepAtomEditor.marko | 2 +- examples/marko/store-context/src/index.ts | 4 - .../store-context/src/routes/+page.marko | 9 + examples/marko/store-context/tsconfig.json | 5 +- examples/marko/store-context/vite.config.ts | 5 +- examples/marko/stores/.marko-run/routes.d.ts | 34 + examples/marko/stores/README.md | 5 +- examples/marko/stores/e2e/stores.spec.ts | 22 + examples/marko/stores/index.html | 12 - examples/marko/stores/package.json | 10 +- examples/marko/stores/playwright.config.ts | 21 + examples/marko/stores/src/App.marko | 17 + examples/marko/stores/src/index.ts | 4 - examples/marko/stores/src/routes/+page.marko | 9 + examples/marko/stores/tsconfig.json | 5 +- examples/marko/stores/vite.config.ts | 6 +- .../marko/streaming/.marko-run/routes.d.ts | 53 ++ examples/marko/streaming/README.md | 8 +- .../marko/streaming/e2e/streaming.spec.ts | 35 + examples/marko/streaming/package.json | 8 +- examples/marko/streaming/playwright.config.ts | 21 + examples/marko/streaming/server.mjs | 47 -- examples/marko/streaming/src/index.ts | 44 - .../+page.marko} | 6 +- .../out-of-order/+page.marko} | 9 +- examples/marko/streaming/tsconfig.json | 5 +- examples/marko/streaming/vite.config.ts | 6 + knip.json | 40 +- packages/marko-store/README.md | 81 ++ .../marko-store/e2e/.marko-run/routes.d.ts | 376 +++++++++ packages/marko-store/e2e/README.md | 98 +-- .../e2e/client-only-first-paint.spec.ts | 40 + .../marko-store/e2e/gate-render-only.spec.ts | 35 + packages/marko-store/e2e/package.json | 23 + packages/marko-store/e2e/payload.spec.ts | 41 + packages/marko-store/e2e/playwright.config.ts | 26 +- packages/marko-store/e2e/server.mjs | 38 - packages/marko-store/e2e/src/gate-store.ts | 7 + packages/marko-store/e2e/src/index.ts | 97 --- .../src/{page.marko => routes/+page.marko} | 2 +- .../client-only-first-paint/+page.marko | 44 + .../context-above/+page.marko} | 4 +- .../context-multi/+page.marko} | 2 +- .../context-perreq/+page.marko} | 8 +- .../context/+page.marko} | 2 +- .../dup-try/+page.marko} | 6 +- .../effect-order/+page.marko} | 6 +- .../src/routes/gate-render-only/+page.marko | 32 + .../liveness/+page.marko} | 4 +- .../multi/+page.marko} | 6 +- .../ooo/+page.marko} | 6 +- .../outside/+page.marko} | 4 +- .../e2e/src/routes/payload/+page.marko | 56 ++ .../provider-collision/+page.marko} | 6 +- .../streaming-fill-onmount/+page.marko} | 2 +- .../streaming-fill-render/+page.marko} | 2 +- .../streaming-liveness/+page.marko} | 2 +- .../streaming-out-of-order/+page.marko} | 2 +- .../streaming-helper-context-above.spec.ts | 22 +- packages/marko-store/e2e/tsconfig.json | 23 + packages/marko-store/e2e/vite.config.ts | 6 + packages/marko-store/eslint.config.js | 9 +- packages/marko-store/package.json | 10 +- .../marko-store/src/tags/store-atom.marko | 47 +- .../marko-store/src/tags/store-context.marko | 4 +- .../marko-store/src/tags/store-provider.marko | 6 +- .../marko-store/src/tags/store-selector.marko | 13 +- .../src/tags/stream-store-provider.marko | 6 +- .../fixtures/atom-late-context-host.marko | 17 + .../fixtures/selector-render-count-host.marko | 25 + .../tests/fixtures/ssr-payload-host.marko | 27 + packages/marko-store/tests/ssr.test.ts | 39 + packages/marko-store/tests/tags.test.ts | 123 ++- packages/marko-store/tsconfig.marko.json | 8 +- packages/marko-store/tsdown.config.ts | 14 +- packages/marko-store/vitest.config.ts | 2 +- pnpm-lock.yaml | 767 ++++++++++++++++-- pnpm-workspace.yaml | 8 + 142 files changed, 2901 insertions(+), 830 deletions(-) create mode 100644 examples/marko/atoms/.marko-run/routes.d.ts create mode 100644 examples/marko/atoms/e2e/atoms.spec.ts delete mode 100644 examples/marko/atoms/index.html create mode 100644 examples/marko/atoms/playwright.config.ts delete mode 100644 examples/marko/atoms/src/index.ts create mode 100644 examples/marko/atoms/src/routes/+page.marko create mode 100644 examples/marko/simple/.marko-run/routes.d.ts create mode 100644 examples/marko/simple/e2e/simple.spec.ts delete mode 100644 examples/marko/simple/index.html create mode 100644 examples/marko/simple/playwright.config.ts delete mode 100644 examples/marko/simple/src/index.ts create mode 100644 examples/marko/simple/src/routes/+page.marko create mode 100644 examples/marko/ssr-per-request-multi/.marko-run/routes.d.ts create mode 100644 examples/marko/ssr-per-request-multi/e2e/ssr-per-request-multi.spec.ts create mode 100644 examples/marko/ssr-per-request-multi/playwright.config.ts delete mode 100644 examples/marko/ssr-per-request-multi/server.mjs delete mode 100644 examples/marko/ssr-per-request-multi/src/index.ts delete mode 100644 examples/marko/ssr-per-request-multi/src/perreq-page.marko create mode 100644 examples/marko/ssr-per-request-multi/src/routes/+page.marko rename examples/marko/ssr-per-request-multi/src/{multi-page.marko => routes/multi/+page.marko} (96%) create mode 100644 examples/marko/ssr-per-request-multi/vite.config.ts create mode 100644 examples/marko/ssr-resume/.marko-run/routes.d.ts create mode 100644 examples/marko/ssr-resume/e2e/ssr-resume.spec.ts create mode 100644 examples/marko/ssr-resume/playwright.config.ts delete mode 100644 examples/marko/ssr-resume/server.mjs delete mode 100644 examples/marko/ssr-resume/src/index.ts rename examples/marko/ssr-resume/src/{page.marko => routes/+page.marko} (94%) create mode 100644 examples/marko/ssr-resume/vite.config.ts create mode 100644 examples/marko/store-actions/.marko-run/routes.d.ts create mode 100644 examples/marko/store-actions/e2e/store-actions.spec.ts delete mode 100644 examples/marko/store-actions/index.html create mode 100644 examples/marko/store-actions/playwright.config.ts delete mode 100644 examples/marko/store-actions/src/index.ts create mode 100644 examples/marko/store-actions/src/routes/+page.marko create mode 100644 examples/marko/store-context/.marko-run/routes.d.ts create mode 100644 examples/marko/store-context/e2e/store-context.spec.ts delete mode 100644 examples/marko/store-context/index.html create mode 100644 examples/marko/store-context/playwright.config.ts delete mode 100644 examples/marko/store-context/src/index.ts create mode 100644 examples/marko/store-context/src/routes/+page.marko create mode 100644 examples/marko/stores/.marko-run/routes.d.ts create mode 100644 examples/marko/stores/e2e/stores.spec.ts delete mode 100644 examples/marko/stores/index.html create mode 100644 examples/marko/stores/playwright.config.ts delete mode 100644 examples/marko/stores/src/index.ts create mode 100644 examples/marko/stores/src/routes/+page.marko create mode 100644 examples/marko/streaming/.marko-run/routes.d.ts create mode 100644 examples/marko/streaming/e2e/streaming.spec.ts create mode 100644 examples/marko/streaming/playwright.config.ts delete mode 100644 examples/marko/streaming/server.mjs delete mode 100644 examples/marko/streaming/src/index.ts rename examples/marko/streaming/src/{inorder-page.marko => routes/+page.marko} (88%) rename examples/marko/streaming/src/{outoforder-page.marko => routes/out-of-order/+page.marko} (89%) create mode 100644 examples/marko/streaming/vite.config.ts create mode 100644 packages/marko-store/e2e/.marko-run/routes.d.ts create mode 100644 packages/marko-store/e2e/client-only-first-paint.spec.ts create mode 100644 packages/marko-store/e2e/gate-render-only.spec.ts create mode 100644 packages/marko-store/e2e/package.json create mode 100644 packages/marko-store/e2e/payload.spec.ts delete mode 100644 packages/marko-store/e2e/server.mjs create mode 100644 packages/marko-store/e2e/src/gate-store.ts delete mode 100644 packages/marko-store/e2e/src/index.ts rename packages/marko-store/e2e/src/{page.marko => routes/+page.marko} (97%) create mode 100644 packages/marko-store/e2e/src/routes/client-only-first-paint/+page.marko rename packages/marko-store/e2e/src/{streaming-helper-context-above.marko => routes/context-above/+page.marko} (78%) rename packages/marko-store/e2e/src/{context-page-multi.marko => routes/context-multi/+page.marko} (95%) rename packages/marko-store/e2e/src/{context-page-perreq.marko => routes/context-perreq/+page.marko} (78%) rename packages/marko-store/e2e/src/{context-page.marko => routes/context/+page.marko} (95%) rename packages/marko-store/e2e/src/{streaming-helper-dup-try.marko => routes/dup-try/+page.marko} (83%) rename packages/marko-store/e2e/src/{streaming-helper-effect-order.marko => routes/effect-order/+page.marko} (74%) create mode 100644 packages/marko-store/e2e/src/routes/gate-render-only/+page.marko rename packages/marko-store/e2e/src/{streaming-helper-liveness.marko => routes/liveness/+page.marko} (84%) rename packages/marko-store/e2e/src/{streaming-helper-multi.marko => routes/multi/+page.marko} (85%) rename packages/marko-store/e2e/src/{streaming-helper-ooo.marko => routes/ooo/+page.marko} (84%) rename packages/marko-store/e2e/src/{streaming-helper-outside.marko => routes/outside/+page.marko} (86%) create mode 100644 packages/marko-store/e2e/src/routes/payload/+page.marko rename packages/marko-store/e2e/src/{streaming-helper-provider-collision.marko => routes/provider-collision/+page.marko} (84%) rename packages/marko-store/e2e/src/{streaming-fill-onmount.marko => routes/streaming-fill-onmount/+page.marko} (96%) rename packages/marko-store/e2e/src/{streaming-fill-render.marko => routes/streaming-fill-render/+page.marko} (96%) rename packages/marko-store/e2e/src/{streaming-liveness.marko => routes/streaming-liveness/+page.marko} (96%) rename packages/marko-store/e2e/src/{streaming-out-of-order.marko => routes/streaming-out-of-order/+page.marko} (96%) create mode 100644 packages/marko-store/e2e/tsconfig.json create mode 100644 packages/marko-store/e2e/vite.config.ts create mode 100644 packages/marko-store/tests/fixtures/atom-late-context-host.marko create mode 100644 packages/marko-store/tests/fixtures/selector-render-count-host.marko create mode 100644 packages/marko-store/tests/fixtures/ssr-payload-host.marko diff --git a/.changeset/add-marko-store.md b/.changeset/add-marko-store.md index da19fc7d..33cf4b83 100644 --- a/.changeset/add-marko-store.md +++ b/.changeset/add-marko-store.md @@ -2,4 +2,4 @@ "@tanstack/marko-store": minor --- -Add `@tanstack/marko-store`, a Marko 6 adapter for TanStack Store. It provides the `` and `` tags — the Marko equivalents of the `useSelector` / `useStore` adapters — and re-exports the full `@tanstack/store` core. +Add `@tanstack/marko-store`, a Marko 6 adapter for TanStack Store. It ships five tags — `` (the `useSelector`/`useStore` equivalent, with `selector` and `compare` support), ``, `` / `` (per-request store provision for SSR without cross-request leakage), and `` (stores born from late-awaited server data that render server-side and stay live after resume) — and re-exports the full `@tanstack/store` core. Works client-only and under SSR with Marko's resume, including out-of-order streaming. diff --git a/docs/framework/marko/reference/index.md b/docs/framework/marko/reference/index.md index 6f0cb204..79839fb5 100644 --- a/docs/framework/marko/reference/index.md +++ b/docs/framework/marko/reference/index.md @@ -17,4 +17,4 @@ The Marko adapter exposes its API as custom tags. Each tag is documented on its ## Re-exports -`@tanstack/marko-store` re-exports the full `@tanstack/store` core, including `createStore`, `createAtom`, `Store`, `Derived`, and `shallow`. These are framework-agnostic; see the Store API Reference for their documentation. +`@tanstack/marko-store` re-exports the full `@tanstack/store` core, including `createStore`, `createAtom`, `Store`, `batch`, and `shallow`. Derived state comes from the core too — pass a function to `createStore` or `createAtom` to get a computed, read-only store. These are framework-agnostic; see the Store API Reference for their documentation. diff --git a/docs/framework/marko/reference/tags/store-atom.md b/docs/framework/marko/reference/tags/store-atom.md index 05211a79..226e7818 100644 --- a/docs/framework/marko/reference/tags/store-atom.md +++ b/docs/framework/marko/reference/tags/store-atom.md @@ -18,7 +18,7 @@ Binds a single writable atom from `createAtom()` as a two-way value: it reads th ## Attributes -- **`from`** — `() => { get(); set(); subscribe() }` (required). A thunk returning the atom (from `createAtom()`). The atom must have a `set` method; a `Store` does not and will throw. +- **`from`** — `() => { get(); set(); subscribe() } | null` (required). A thunk returning the atom (from `createAtom()`), or `null` while nothing is available yet — the null-tolerant form matters for getter-fed atoms (`from=(() => ctx()?.countAtom ?? null)`), where the context bundle isn't parked for a beat during resume or a browser-only first paint. A non-null value without a `set` method (such as a `Store`) still throws with guidance to use ``. ## Tag variable @@ -26,4 +26,4 @@ The atom's current value, typed `T`. The tag exposes a `value`/`valueChange` pai ## Behavior -The value is seeded from `from().get()` at render and kept live by a subscription on mount, so it updates whenever the atom changes from anywhere. Writes go through `from().set(next)`. If `from()` returns something without a `set` method (such as a `Store`), the tag throws with guidance to use ``. +The value is seeded from `from().get()` at render and kept live by a subscription on mount, so it updates whenever the atom changes from anywhere. Writes go through `from().set(next)`. If `from()` resolves nothing yet (a getter-fed atom before its provider parks the bundle), the tag renders `undefined` for that beat and listens on the internal publish bus, attaching the moment the bundle lands — the same recovery `` performs. If `from()` returns a non-null value without a `set` method (such as a `Store`), the tag throws with guidance to use ``. diff --git a/docs/framework/marko/reference/tags/store-selector.md b/docs/framework/marko/reference/tags/store-selector.md index 4655b559..b0434150 100644 --- a/docs/framework/marko/reference/tags/store-selector.md +++ b/docs/framework/marko/reference/tags/store-selector.md @@ -27,7 +27,7 @@ Subscribes to a store or atom, projects a slice of it, and re-renders when that - **`context`** — `(bundle) => { get(); subscribe() }` (optional). Selects the source from the provided bundle. Mutually exclusive with `from`. Annotate the parameter in typed projects, e.g. `context=(b: any) => b.cart`. - **`key`** — `string` (optional, default `"__tanstack_store_context"`). The context key to read in `context` mode. Must match the provider's key. - **`selector`** — `(snapshot: TSource) => TSelected` (optional, default identity). Projects the slice to track. -- **`compare`** — `(a: TSelected, b: TSelected) => boolean` (optional, default `===`). Equality check used to drop redundant updates. +- **`compare`** — `(a: TSelected, b: TSelected) => boolean` (optional, default `===`). Equality check used to drop redundant updates. Selectors returning an **object or array** build a fresh reference on every store change, so the default `===` never dedupes them — pass `shallow` (re-exported from the core) to compare contents instead of identity — on server-rendered pages through an inline arrow, `compare=((a, b) => shallow(a, b))`, since a bare imported function can't cross Marko's serialization boundary on resume (inline functions are compiler-registered; plain-JS imports are not). Single-field/primitive slices are fine with the default. ## Tag variable @@ -35,4 +35,4 @@ The current selected value, typed `TSelected | undefined`. It is `undefined` onl ## Behavior -Passing both `from` and `context` throws. The value is seeded at render (null-tolerant in context mode), then kept live by a subscription established on mount. In context mode the tag also listens on the internal publish bus, so it attaches to the store the moment the provider parks it during streaming or resume. Changing the source or swapping the `selector` re-projects; `compare` gates only store mutations, never a deliberate selector change. +Passing both `from` and `context` throws. The value is seeded at render (null-tolerant in context mode), refreshed at mount in case the store changed in between (the refresh is `compare`-gated, so an unchanged slice doesn't force a re-render), then kept live by a subscription established on mount. In context mode the tag also listens on the internal publish bus, so it attaches to the store the moment the provider parks it during streaming or resume. Changing the source or swapping the `selector` re-projects; `compare` gates store mutations and the mount refresh, never a deliberate selector or source change. diff --git a/examples/marko/README.md b/examples/marko/README.md index 0f77e254..f560077f 100644 --- a/examples/marko/README.md +++ b/examples/marko/README.md @@ -1,25 +1,23 @@ # Marko examples for TanStack Store These mirror the sibling adapter examples (react, svelte, …) using -`@tanstack/marko-store`. +`@tanstack/marko-store`. Every example is an [@marko/run](https://github.com/marko-js/run) +app — Marko's SSR meta-framework and the way real Marko apps ship — so each one +server-renders, resumes in the browser, and stays live. The parity examples +(`stores`, `simple`, `atoms`, `store-actions`, `store-context`) demonstrate the +same scenarios the other frameworks ship; `ssr-resume`, `ssr-per-request-multi`, +and `streaming` demonstrate the Marko-specific SSR patterns (resume, per-request +stores, streamed `` data). -Five client-only parity examples — `stores`, `simple`, `atoms`, `store-actions`, -`store-context` — match the scenarios the other frameworks ship. Each is a -browser-only SPA: `vite.config.ts` uses `marko({ linked: false })` (Marko + Vite -is SSR-first, so a client-only build needs `linked: false`), and `src/index.ts` -mounts the app. +Each example runs standalone: -Three Marko-specific SSR examples — `ssr-resume`, `ssr-per-request-multi`, -`streaming` — show server render + resume, per-request data rebuilt on the -client, and streaming a store into a late `` (born-with-data, in-order and -out-of-order). Each runs a small Marko Vite dev server (`node server.mjs`); open -the routes named in its README. +- `npm install` +- `npm run dev` — dev server +- `npm run preview` — production build + serve +- `npm run test:e2e` — a small Playwright smoke (renders, one interaction, no + client errors) +- `npm run test:types` — `marko-type-check` -Those three SSR servers are development demonstrations, not deployable production -servers. Real Marko production uses `@marko/run`; a dedicated `@marko/run` -example will be added separately. - -In this monorepo you do not install per example. Add `examples/marko/**` to -`pnpm-workspace.yaml`, run `pnpm install` once at the root, then start an example -by folder (`cd examples/marko/ && pnpm dev`) or by name -(`pnpm --filter @tanstack/store-example-marko- dev`). +Every example carries a `marko.json` (`tags-dir` → the package's `src/tags`) and a +tsconfig `include` of those tags. This works around a Marko tag-discovery issue +under pnpm's isolated `node_modules`; when the upstream fix ships, both can go. diff --git a/examples/marko/atoms/.marko-run/routes.d.ts b/examples/marko/atoms/.marko-run/routes.d.ts new file mode 100644 index 00000000..4c22b843 --- /dev/null +++ b/examples/marko/atoms/.marko-run/routes.d.ts @@ -0,0 +1,34 @@ +/* + WARNING: This file is automatically generated and any changes made to it will be overwritten without warning. + Do NOT manually edit this file or your changes will be lost. +*/ + +import { NotHandled, NotMatched, GetPaths, PostPaths, GetablePath, GetableHref, PostablePath, PostableHref, Platform } from "@marko/run/namespace"; +import type * as Run from "@marko/run"; + + +declare module "@marko/run" { + interface AppData extends Run.DefineApp<{ + routes: { + "/": { verb: "get"; }; + } + }> {} +} + +declare module "../src/routes/+page.marko" { + namespace MarkoRun { + export { NotHandled, NotMatched, GetPaths, PostPaths, GetablePath, GetableHref, PostablePath, PostableHref, Platform }; + export type Route = Run.Routes["/"]; + export type Context = Run.MultiRouteContext & Marko.Global; + export type Handler = Run.HandlerLike; + export type GET = Run.HandlerLike; + export type HEAD = Run.HandlerLike; + export type POST = Run.HandlerLike; + export type PUT = Run.HandlerLike; + export type DELETE = Run.HandlerLike; + export type PATCH = Run.HandlerLike; + export type OPTIONS = Run.HandlerLike; + /** @deprecated use `((context, next) => { ... }) satisfies MarkoRun.Handler` instead */ + export const route: Run.HandlerTypeFn; + } +} diff --git a/examples/marko/atoms/README.md b/examples/marko/atoms/README.md index 9e4e00b7..fd0d066b 100644 --- a/examples/marko/atoms/README.md +++ b/examples/marko/atoms/README.md @@ -7,4 +7,7 @@ whose binding writes back through `atom.set`. Reset calls `atom.set(0)`. To run this example: - `npm install` -- `npm run dev` +- `npm run dev` (or `npm run preview` for the production build) + +It's an `@marko/run` app: the page is server-rendered, resumes in the browser, +and stays live. `npm run test:e2e` runs its Playwright smoke test. diff --git a/examples/marko/atoms/e2e/atoms.spec.ts b/examples/marko/atoms/e2e/atoms.spec.ts new file mode 100644 index 00000000..8f304fbb --- /dev/null +++ b/examples/marko/atoms/e2e/atoms.spec.ts @@ -0,0 +1,20 @@ +import { expect, test } from '@playwright/test' + +// Example smoke: the page renders, one interaction works, zero client errors. +test('atoms: renders and increments', async ({ page }) => { + // Dev-server noise (HMR websocket handshakes) is not an application error. + const ignore = (t: string) => t.includes('WebSocket') || t.includes('[vite]') + const errors: Array = [] + page.on('pageerror', (e) => { + if (!ignore(e.message)) errors.push('pageerror: ' + e.message) + }) + page.on('console', (m) => { + if (m.type() === 'error' && !ignore(m.text())) errors.push('console.error: ' + m.text()) + }) + + await page.goto('/') + await expect(page.getByText('Total: 0')).toBeVisible() + await page.getByRole('button', { name: 'Increment', exact: true }).click() + await expect(page.getByText('Total: 1')).toBeVisible() + expect(errors).toEqual([]) +}) diff --git a/examples/marko/atoms/index.html b/examples/marko/atoms/index.html deleted file mode 100644 index f3f476c5..00000000 --- a/examples/marko/atoms/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - Marko Store Example — atoms - - -
- - - diff --git a/examples/marko/atoms/package.json b/examples/marko/atoms/package.json index fc93ff83..2988ca49 100644 --- a/examples/marko/atoms/package.json +++ b/examples/marko/atoms/package.json @@ -3,19 +3,21 @@ "private": true, "type": "module", "scripts": { - "dev": "vite --port=3061", - "build": "vite build", - "preview": "vite preview", + "dev": "marko-run dev", + "build": "marko-run build", + "preview": "marko-run preview", + "test:e2e": "playwright test", "test:types": "marko-type-check -p tsconfig.json" }, "dependencies": { + "@marko/run": "^0.10.0", "@tanstack/marko-store": "^0.11.0", "marko": "^6" }, "devDependencies": { "@marko/language-tools": "^2.6.0", "@marko/type-check": "^3.1.0", - "@marko/vite": "^6", + "@playwright/test": "^1.53.1", "vite": "^8.0.8" } } diff --git a/examples/marko/atoms/playwright.config.ts b/examples/marko/atoms/playwright.config.ts new file mode 100644 index 00000000..111d419a --- /dev/null +++ b/examples/marko/atoms/playwright.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from '@playwright/test' + +// Example smoke e2e. Dev-mode webServer on purpose: examples demonstrate, they +// don't gate — the production-mode gate lives in packages/marko-store/e2e. +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + retries: 0, + workers: 1, + use: { + baseURL: 'http://localhost:3061', + }, + webServer: { + command: 'npm run dev -- --port 3061', + url: 'http://localhost:3061', + reuseExistingServer: !process.env.CI, + stdout: 'pipe', + stderr: 'pipe', + timeout: 120_000, + }, +}) diff --git a/examples/marko/atoms/src/index.ts b/examples/marko/atoms/src/index.ts deleted file mode 100644 index 21867a93..00000000 --- a/examples/marko/atoms/src/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import App from './App.marko' - -const el = document.getElementById('app') -if (el) App.mount({}, el) diff --git a/examples/marko/atoms/src/routes/+page.marko b/examples/marko/atoms/src/routes/+page.marko new file mode 100644 index 00000000..54443bcd --- /dev/null +++ b/examples/marko/atoms/src/routes/+page.marko @@ -0,0 +1,9 @@ +import App from '../App.marko' + + + + marko-store: atoms + + + + diff --git a/examples/marko/atoms/tsconfig.json b/examples/marko/atoms/tsconfig.json index 2c3dfeb0..539796e4 100644 --- a/examples/marko/atoms/tsconfig.json +++ b/examples/marko/atoms/tsconfig.json @@ -10,6 +10,9 @@ "include": [ "src/**/*.ts", "src/**/*.marko", - "../../../packages/marko-store/src/tags/**/*" + "../../../packages/marko-store/src/tags/**/*", + "e2e/**/*.ts", + "playwright.config.ts", + "vite.config.ts" ] } diff --git a/examples/marko/atoms/vite.config.ts b/examples/marko/atoms/vite.config.ts index ac3ced6c..d9f966e9 100644 --- a/examples/marko/atoms/vite.config.ts +++ b/examples/marko/atoms/vite.config.ts @@ -1,7 +1,6 @@ import { defineConfig } from 'vite' -import marko from '@marko/vite' +import marko from '@marko/run/vite' -// linked: false => browser-only build (a client-only SPA, mounted in src/index.ts). export default defineConfig({ - plugins: [marko({ linked: false })], + plugins: [marko() as any], }) diff --git a/examples/marko/simple/.marko-run/routes.d.ts b/examples/marko/simple/.marko-run/routes.d.ts new file mode 100644 index 00000000..4c22b843 --- /dev/null +++ b/examples/marko/simple/.marko-run/routes.d.ts @@ -0,0 +1,34 @@ +/* + WARNING: This file is automatically generated and any changes made to it will be overwritten without warning. + Do NOT manually edit this file or your changes will be lost. +*/ + +import { NotHandled, NotMatched, GetPaths, PostPaths, GetablePath, GetableHref, PostablePath, PostableHref, Platform } from "@marko/run/namespace"; +import type * as Run from "@marko/run"; + + +declare module "@marko/run" { + interface AppData extends Run.DefineApp<{ + routes: { + "/": { verb: "get"; }; + } + }> {} +} + +declare module "../src/routes/+page.marko" { + namespace MarkoRun { + export { NotHandled, NotMatched, GetPaths, PostPaths, GetablePath, GetableHref, PostablePath, PostableHref, Platform }; + export type Route = Run.Routes["/"]; + export type Context = Run.MultiRouteContext & Marko.Global; + export type Handler = Run.HandlerLike; + export type GET = Run.HandlerLike; + export type HEAD = Run.HandlerLike; + export type POST = Run.HandlerLike; + export type PUT = Run.HandlerLike; + export type DELETE = Run.HandlerLike; + export type PATCH = Run.HandlerLike; + export type OPTIONS = Run.HandlerLike; + /** @deprecated use `((context, next) => { ... }) satisfies MarkoRun.Handler` instead */ + export const route: Run.HandlerTypeFn; + } +} diff --git a/examples/marko/simple/README.md b/examples/marko/simple/README.md index 5dd074e6..599de715 100644 --- a/examples/marko/simple/README.md +++ b/examples/marko/simple/README.md @@ -7,4 +7,7 @@ A multi-component counter split across files. `Increment.marko` writes with To run this example: - `npm install` -- `npm run dev` +- `npm run dev` (or `npm run preview` for the production build) + +It's an `@marko/run` app: the page is server-rendered, resumes in the browser, +and stays live. `npm run test:e2e` runs its Playwright smoke test. diff --git a/examples/marko/simple/e2e/simple.spec.ts b/examples/marko/simple/e2e/simple.spec.ts new file mode 100644 index 00000000..80077196 --- /dev/null +++ b/examples/marko/simple/e2e/simple.spec.ts @@ -0,0 +1,20 @@ +import { expect, test } from '@playwright/test' + +// Example smoke: the page renders, one interaction works, zero client errors. +test('simple: renders and counts a click', async ({ page }) => { + // Dev-server noise (HMR websocket handshakes) is not an application error. + const ignore = (t: string) => t.includes('WebSocket') || t.includes('[vite]') + const errors: Array = [] + page.on('pageerror', (e) => { + if (!ignore(e.message)) errors.push('pageerror: ' + e.message) + }) + page.on('console', (m) => { + if (m.type() === 'error' && !ignore(m.text())) errors.push('console.error: ' + m.text()) + }) + + await page.goto('/') + await expect(page.getByText('dogs: 0')).toBeVisible() + await page.getByRole('button', { name: 'My Friend Likes dogs' }).click() + await expect(page.getByText('dogs: 1')).toBeVisible() + expect(errors).toEqual([]) +}) diff --git a/examples/marko/simple/index.html b/examples/marko/simple/index.html deleted file mode 100644 index 0d0ff6ac..00000000 --- a/examples/marko/simple/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - Marko Store Example — simple - - -
- - - diff --git a/examples/marko/simple/package.json b/examples/marko/simple/package.json index ce367547..6324b998 100644 --- a/examples/marko/simple/package.json +++ b/examples/marko/simple/package.json @@ -3,19 +3,21 @@ "private": true, "type": "module", "scripts": { - "dev": "vite --port=3060", - "build": "vite build", - "preview": "vite preview", + "dev": "marko-run dev", + "build": "marko-run build", + "preview": "marko-run preview", + "test:e2e": "playwright test", "test:types": "marko-type-check -p tsconfig.json" }, "dependencies": { + "@marko/run": "^0.10.0", "@tanstack/marko-store": "^0.11.0", "marko": "^6" }, "devDependencies": { "@marko/language-tools": "^2.6.0", "@marko/type-check": "^3.1.0", - "@marko/vite": "^6", + "@playwright/test": "^1.53.1", "vite": "^8.0.8" } } diff --git a/examples/marko/simple/playwright.config.ts b/examples/marko/simple/playwright.config.ts new file mode 100644 index 00000000..1b531105 --- /dev/null +++ b/examples/marko/simple/playwright.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from '@playwright/test' + +// Example smoke e2e. Dev-mode webServer on purpose: examples demonstrate, they +// don't gate — the production-mode gate lives in packages/marko-store/e2e. +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + retries: 0, + workers: 1, + use: { + baseURL: 'http://localhost:3060', + }, + webServer: { + command: 'npm run dev -- --port 3060', + url: 'http://localhost:3060', + reuseExistingServer: !process.env.CI, + stdout: 'pipe', + stderr: 'pipe', + timeout: 120_000, + }, +}) diff --git a/examples/marko/simple/src/index.ts b/examples/marko/simple/src/index.ts deleted file mode 100644 index 21867a93..00000000 --- a/examples/marko/simple/src/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import App from './App.marko' - -const el = document.getElementById('app') -if (el) App.mount({}, el) diff --git a/examples/marko/simple/src/routes/+page.marko b/examples/marko/simple/src/routes/+page.marko new file mode 100644 index 00000000..b276278b --- /dev/null +++ b/examples/marko/simple/src/routes/+page.marko @@ -0,0 +1,9 @@ +import App from '../App.marko' + + + + marko-store: simple + + + + diff --git a/examples/marko/simple/tsconfig.json b/examples/marko/simple/tsconfig.json index 2c3dfeb0..539796e4 100644 --- a/examples/marko/simple/tsconfig.json +++ b/examples/marko/simple/tsconfig.json @@ -10,6 +10,9 @@ "include": [ "src/**/*.ts", "src/**/*.marko", - "../../../packages/marko-store/src/tags/**/*" + "../../../packages/marko-store/src/tags/**/*", + "e2e/**/*.ts", + "playwright.config.ts", + "vite.config.ts" ] } diff --git a/examples/marko/simple/vite.config.ts b/examples/marko/simple/vite.config.ts index ac3ced6c..d9f966e9 100644 --- a/examples/marko/simple/vite.config.ts +++ b/examples/marko/simple/vite.config.ts @@ -1,7 +1,6 @@ import { defineConfig } from 'vite' -import marko from '@marko/vite' +import marko from '@marko/run/vite' -// linked: false => browser-only build (a client-only SPA, mounted in src/index.ts). export default defineConfig({ - plugins: [marko({ linked: false })], + plugins: [marko() as any], }) diff --git a/examples/marko/ssr-per-request-multi/.marko-run/routes.d.ts b/examples/marko/ssr-per-request-multi/.marko-run/routes.d.ts new file mode 100644 index 00000000..0e10f713 --- /dev/null +++ b/examples/marko/ssr-per-request-multi/.marko-run/routes.d.ts @@ -0,0 +1,53 @@ +/* + WARNING: This file is automatically generated and any changes made to it will be overwritten without warning. + Do NOT manually edit this file or your changes will be lost. +*/ + +import { NotHandled, NotMatched, GetPaths, PostPaths, GetablePath, GetableHref, PostablePath, PostableHref, Platform } from "@marko/run/namespace"; +import type * as Run from "@marko/run"; + + +declare module "@marko/run" { + interface AppData extends Run.DefineApp<{ + routes: { + "/": { verb: "get"; }; + "/multi": { verb: "get"; }; + } + }> {} +} + +declare module "../src/routes/+page.marko" { + namespace MarkoRun { + export { NotHandled, NotMatched, GetPaths, PostPaths, GetablePath, GetableHref, PostablePath, PostableHref, Platform }; + export type Route = Run.Routes["/"]; + export type Context = Run.MultiRouteContext & Marko.Global; + export type Handler = Run.HandlerLike; + export type GET = Run.HandlerLike; + export type HEAD = Run.HandlerLike; + export type POST = Run.HandlerLike; + export type PUT = Run.HandlerLike; + export type DELETE = Run.HandlerLike; + export type PATCH = Run.HandlerLike; + export type OPTIONS = Run.HandlerLike; + /** @deprecated use `((context, next) => { ... }) satisfies MarkoRun.Handler` instead */ + export const route: Run.HandlerTypeFn; + } +} + +declare module "../src/routes/multi/+page.marko" { + namespace MarkoRun { + export { NotHandled, NotMatched, GetPaths, PostPaths, GetablePath, GetableHref, PostablePath, PostableHref, Platform }; + export type Route = Run.Routes["/multi"]; + export type Context = Run.MultiRouteContext & Marko.Global; + export type Handler = Run.HandlerLike; + export type GET = Run.HandlerLike; + export type HEAD = Run.HandlerLike; + export type POST = Run.HandlerLike; + export type PUT = Run.HandlerLike; + export type DELETE = Run.HandlerLike; + export type PATCH = Run.HandlerLike; + export type OPTIONS = Run.HandlerLike; + /** @deprecated use `((context, next) => { ... }) satisfies MarkoRun.Handler` instead */ + export const route: Run.HandlerTypeFn; + } +} diff --git a/examples/marko/ssr-per-request-multi/README.md b/examples/marko/ssr-per-request-multi/README.md index fb643d6a..e8fddb88 100644 --- a/examples/marko/ssr-per-request-multi/README.md +++ b/examples/marko/ssr-per-request-multi/README.md @@ -1,15 +1,17 @@ # Marko Store — ssr-per-request-multi Two pages. The home page (`/`) rebuilds a store from per-request DATA passed by -the route: the data crosses in the serialized payload and the store is rebuilt on -each side. The `/multi` page parks a bundle of two stores in one provider, read +the route — deliberately richer than a counter: a string, a Date, and a nested +array of objects, with selectors slicing each (the array slice through the +SSR-safe inline `shallow` compare). The data crosses in the serialized payload +and the store is rebuilt on each side. The `/multi` page parks a bundle of two stores in one provider, read independently, with a context write targeting one. -This is a development demonstration, run with the Marko Vite dev server. It is -NOT a deployable production server — real Marko production uses `@marko/run`. - To run this example: - `npm install` -- `npm run dev` +- `npm run dev` (or `npm run preview` for the production build) + +It's an `@marko/run` app: the page is server-rendered, resumes in the browser, +and stays live. `npm run test:e2e` runs its Playwright smoke test. - open `/` and `/multi` diff --git a/examples/marko/ssr-per-request-multi/e2e/ssr-per-request-multi.spec.ts b/examples/marko/ssr-per-request-multi/e2e/ssr-per-request-multi.spec.ts new file mode 100644 index 00000000..af7459a3 --- /dev/null +++ b/examples/marko/ssr-per-request-multi/e2e/ssr-per-request-multi.spec.ts @@ -0,0 +1,43 @@ +import { expect, test } from '@playwright/test' + +// Example smoke: the page renders, one interaction works, zero client errors. +test('per-request page: data rebuilds on resume and a context write lands', async ({ page }) => { + // Dev-server noise (HMR websocket handshakes) is not an application error. + const ignore = (t: string) => t.includes('WebSocket') || t.includes('[vite]') + const errors: Array = [] + page.on('pageerror', (e) => { + if (!ignore(e.message)) errors.push('pageerror: ' + e.message) + }) + page.on('console', (m) => { + if (m.type() === 'error' && !ignore(m.text())) errors.push('console.error: ' + m.text()) + }) + + await page.goto('/') + await expect(page.getByText('Count: 42', { exact: true })).toBeVisible() + // The rich slices: a string, a Date, and a shallow-compared array slice, all + // built from the per-request seed and painted server-side. + await expect(page.getByText('quarterly report (updated 2026-07-14)')).toBeVisible() + await expect(page.getByText('Rows: alpha, beta (2)')).toBeVisible() + await page.getByRole('button', { name: 'inc via context' }).click() + await expect(page.getByText('Count: 43', { exact: true })).toBeVisible() + // A write to the nested array lands live through the shallow-compared slice. + await page.getByRole('button', { name: 'add row' }).click() + await expect(page.getByText('Rows: alpha, beta, gamma (3)')).toBeVisible() + expect(errors).toEqual([]) +}) + +test('multi page renders', async ({ page }) => { + // Dev-server noise (HMR websocket handshakes) is not an application error. + const ignore = (t: string) => t.includes('WebSocket') || t.includes('[vite]') + const errors: Array = [] + page.on('pageerror', (e) => { + if (!ignore(e.message)) errors.push('pageerror: ' + e.message) + }) + page.on('console', (m) => { + if (m.type() === 'error' && !ignore(m.text())) errors.push('console.error: ' + m.text()) + }) + + await page.goto('/multi') + await expect(page.locator('h1')).toBeVisible() + expect(errors).toEqual([]) +}) diff --git a/examples/marko/ssr-per-request-multi/package.json b/examples/marko/ssr-per-request-multi/package.json index 6e22fe54..b1692d24 100644 --- a/examples/marko/ssr-per-request-multi/package.json +++ b/examples/marko/ssr-per-request-multi/package.json @@ -3,17 +3,21 @@ "private": true, "type": "module", "scripts": { - "dev": "node server.mjs", + "dev": "marko-run dev", + "build": "marko-run build", + "preview": "marko-run preview", + "test:e2e": "playwright test", "test:types": "marko-type-check -p tsconfig.json" }, "dependencies": { + "@marko/run": "^0.10.0", "@tanstack/marko-store": "^0.11.0", "marko": "^6" }, "devDependencies": { "@marko/language-tools": "^2.6.0", "@marko/type-check": "^3.1.0", - "@marko/vite": "^6", + "@playwright/test": "^1.53.1", "vite": "^8.0.8" } } diff --git a/examples/marko/ssr-per-request-multi/playwright.config.ts b/examples/marko/ssr-per-request-multi/playwright.config.ts new file mode 100644 index 00000000..9cda1d48 --- /dev/null +++ b/examples/marko/ssr-per-request-multi/playwright.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from '@playwright/test' + +// Example smoke e2e. Dev-mode webServer on purpose: examples demonstrate, they +// don't gate — the production-mode gate lives in packages/marko-store/e2e. +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + retries: 0, + workers: 1, + use: { + baseURL: 'http://localhost:5201', + }, + webServer: { + command: 'npm run dev -- --port 5201', + url: 'http://localhost:5201', + reuseExistingServer: !process.env.CI, + stdout: 'pipe', + stderr: 'pipe', + timeout: 120_000, + }, +}) diff --git a/examples/marko/ssr-per-request-multi/server.mjs b/examples/marko/ssr-per-request-multi/server.mjs deleted file mode 100644 index 1967cf08..00000000 --- a/examples/marko/ssr-per-request-multi/server.mjs +++ /dev/null @@ -1,47 +0,0 @@ -import { createServer as createHttpServer } from 'node:http' -import { createRequire } from 'node:module' -import path from 'node:path' -import url from 'node:url' - -import { createServer as createViteServer } from 'vite' - -const require = createRequire(import.meta.url) -const marko = require('@marko/vite').default -const __dirname = path.dirname(url.fileURLToPath(import.meta.url)) -const PORT = 5201 - -// A small Vite dev server in middleware mode renders the .marko pages and injects the browser -// scripts so the page resumes. NOTE: this is a development demonstration, not a deployable -// production server. Real Marko production uses @marko/run. - -// Create the HTTP server first so Vite can attach its HMR websocket to the same server/port -// (otherwise the browser's HMR client tries to open a socket that isn't there). -const httpServer = createHttpServer() - -const devServer = await createViteServer({ - root: __dirname, - configFile: false, - appType: 'custom', - logLevel: 'warn', - plugins: [marko()], - server: { middlewareMode: true, hmr: { server: httpServer } }, -}) - -devServer.middlewares.use((req, res, next) => { - if (req.url === '/favicon.ico') { res.statusCode = 204; res.end(); return } - next() -}) -devServer.middlewares.use(async (req, res, next) => { - try { - const { handler } = await devServer.ssrLoadModule(path.join(__dirname, './src/index.ts')) - await handler(req, res, next) - } catch (err) { - devServer.ssrFixStacktrace(err) - next(err) - } -}) - -httpServer.on('request', devServer.middlewares) -httpServer.listen(PORT, () => { - console.log('example server on http://localhost:' + PORT) -}) diff --git a/examples/marko/ssr-per-request-multi/src/index.ts b/examples/marko/ssr-per-request-multi/src/index.ts deleted file mode 100644 index f6698a32..00000000 --- a/examples/marko/ssr-per-request-multi/src/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -import perreqPage from './perreq-page.marko' -import multiPage from './multi-page.marko' - -// Minimal structural types for the Node req/res the dev server passes in — keeps this small -// example free of an @types/node dependency. The real Node objects satisfy these structurally. -interface Req { url?: string } -interface Res { - statusCode: number - headersSent: boolean - setHeader(name: string, value: string): void - write(chunk: string): void - end(data?: string): void -} - -type ServerTemplate = { render: (input: Record) => AsyncIterable } - -const routes: Record }> = { - '/': { page: perreqPage as unknown as ServerTemplate, input: { initial: { count: 42 } } }, - '/multi': { page: multiPage as unknown as ServerTemplate, input: {} }, -} - -export async function handler(req: Req, res: Res, next?: () => void) { - const url = (req.url ?? '/').split('?')[0] ?? '/' - const route = routes[url] - if (!route) { next?.(); return } - res.statusCode = 200 - res.setHeader('Content-Type', 'text/html; charset=utf-8') - // Fresh $global per request — never share the resume/data box across requests. - const input = { ...route.input, $global: {} } - for await (const chunk of route.page.render(input)) res.write(chunk) - res.end() -} diff --git a/examples/marko/ssr-per-request-multi/src/perreq-page.marko b/examples/marko/ssr-per-request-multi/src/perreq-page.marko deleted file mode 100644 index 1bbc072c..00000000 --- a/examples/marko/ssr-per-request-multi/src/perreq-page.marko +++ /dev/null @@ -1,28 +0,0 @@ -import { createStore } from '@tanstack/marko-store' -import type { Store } from '@tanstack/marko-store' - -export interface Input { - initial: { count: number } -} - - - - Per-request data - -
-

Per-request data, rebuilt on resume

-

The route passes plain DATA (input.initial); the provider creates the store from it. The data crosses in the serialized payload and the store is rebuilt on the client — a live store is never serialized.

- - - -

Resumed in browser: ${resumed}

- - ({ counter: createStore(input.initial) })> - }) => c.counter) selector=((s: { count: number }) => s.count)/> -

Count: ${count}

- - -
-
- - diff --git a/examples/marko/ssr-per-request-multi/src/routes/+page.marko b/examples/marko/ssr-per-request-multi/src/routes/+page.marko new file mode 100644 index 00000000..a6c10df0 --- /dev/null +++ b/examples/marko/ssr-per-request-multi/src/routes/+page.marko @@ -0,0 +1,70 @@ +import { createStore, shallow } from '@tanstack/marko-store' +import type { Store } from '@tanstack/marko-store' + +// The seed is deliberately RICHER than a counter: real routes pass real data. A +// string, a nested array of objects, and a Date all cross the serialized payload +// (Marko's serializer supports plain data plus built-ins like Date/Map/Set), and +// the store is rebuilt from them per request AND on the client — a live store is +// never serialized. In an app this object would come from the route's handler; +// here it is inlined (the count seed, 42, is from the old dev-server route table). +static interface Report { + count: number + title: string + updatedAt: Date + rows: Array<{ id: number; label: string; tags: Array }> +} +static const seed = (): Report => ({ + count: 42, + title: 'quarterly report', + updatedAt: new Date('2026-07-14T00:00:00.000Z'), + rows: [ + { id: 1, label: 'alpha', tags: ['a', 'b'] }, + { id: 2, label: 'beta', tags: [] }, + ], +}) + + + + Per-request data + +
+

Per-request data, rebuilt on resume

+

The route passes plain DATA (here, the inlined seed); the provider creates the store from it. The data crosses in the serialized payload and the store is rebuilt on the client — a live store is never serialized.

+ + + +

Resumed in browser: ${resumed}

+ + ({ report: createStore(seed()) })> + }) => c.report) selector=((s: Report) => s.count)/> +

Count: ${count}

+ + }) => c.report) selector=((s: Report) => s.title)/> + }) => c.report) selector=((s: Report) => s.updatedAt.toISOString().slice(0, 10))/> +

${title} (updated ${updated})

+ + + }) => c.report) + selector=((s: Report) => s.rows.map((r) => r.label)) + compare=((a, b) => shallow(a, b)) + /> +

Rows: ${(labels ?? []).join(', ')} (${(labels ?? []).length})

+ + + + +
+
+ + diff --git a/examples/marko/ssr-per-request-multi/src/multi-page.marko b/examples/marko/ssr-per-request-multi/src/routes/multi/+page.marko similarity index 96% rename from examples/marko/ssr-per-request-multi/src/multi-page.marko rename to examples/marko/ssr-per-request-multi/src/routes/multi/+page.marko index 9c7ce72d..0fd31b97 100644 --- a/examples/marko/ssr-per-request-multi/src/multi-page.marko +++ b/examples/marko/ssr-per-request-multi/src/routes/multi/+page.marko @@ -1,4 +1,4 @@ -import { a, b } from './stores' +import { a, b } from '../../stores' diff --git a/examples/marko/ssr-per-request-multi/tsconfig.json b/examples/marko/ssr-per-request-multi/tsconfig.json index 2c3dfeb0..539796e4 100644 --- a/examples/marko/ssr-per-request-multi/tsconfig.json +++ b/examples/marko/ssr-per-request-multi/tsconfig.json @@ -10,6 +10,9 @@ "include": [ "src/**/*.ts", "src/**/*.marko", - "../../../packages/marko-store/src/tags/**/*" + "../../../packages/marko-store/src/tags/**/*", + "e2e/**/*.ts", + "playwright.config.ts", + "vite.config.ts" ] } diff --git a/examples/marko/ssr-per-request-multi/vite.config.ts b/examples/marko/ssr-per-request-multi/vite.config.ts new file mode 100644 index 00000000..d9f966e9 --- /dev/null +++ b/examples/marko/ssr-per-request-multi/vite.config.ts @@ -0,0 +1,6 @@ +import { defineConfig } from 'vite' +import marko from '@marko/run/vite' + +export default defineConfig({ + plugins: [marko() as any], +}) diff --git a/examples/marko/ssr-resume/.marko-run/routes.d.ts b/examples/marko/ssr-resume/.marko-run/routes.d.ts new file mode 100644 index 00000000..4c22b843 --- /dev/null +++ b/examples/marko/ssr-resume/.marko-run/routes.d.ts @@ -0,0 +1,34 @@ +/* + WARNING: This file is automatically generated and any changes made to it will be overwritten without warning. + Do NOT manually edit this file or your changes will be lost. +*/ + +import { NotHandled, NotMatched, GetPaths, PostPaths, GetablePath, GetableHref, PostablePath, PostableHref, Platform } from "@marko/run/namespace"; +import type * as Run from "@marko/run"; + + +declare module "@marko/run" { + interface AppData extends Run.DefineApp<{ + routes: { + "/": { verb: "get"; }; + } + }> {} +} + +declare module "../src/routes/+page.marko" { + namespace MarkoRun { + export { NotHandled, NotMatched, GetPaths, PostPaths, GetablePath, GetableHref, PostablePath, PostableHref, Platform }; + export type Route = Run.Routes["/"]; + export type Context = Run.MultiRouteContext & Marko.Global; + export type Handler = Run.HandlerLike; + export type GET = Run.HandlerLike; + export type HEAD = Run.HandlerLike; + export type POST = Run.HandlerLike; + export type PUT = Run.HandlerLike; + export type DELETE = Run.HandlerLike; + export type PATCH = Run.HandlerLike; + export type OPTIONS = Run.HandlerLike; + /** @deprecated use `((context, next) => { ... }) satisfies MarkoRun.Handler` instead */ + export const route: Run.HandlerTypeFn; + } +} diff --git a/examples/marko/ssr-resume/README.md b/examples/marko/ssr-resume/README.md index 21178edd..da4427ee 100644 --- a/examples/marko/ssr-resume/README.md +++ b/examples/marko/ssr-resume/README.md @@ -5,10 +5,10 @@ resumes and the store stays live (external writes and the atom write work after load). The store is a module singleton and is rebuilt on each side, so no live store is ever serialized. -This is a development demonstration, run with the Marko Vite dev server. It is -NOT a deployable production server — real Marko production uses `@marko/run`. - To run this example: - `npm install` -- `npm run dev` +- `npm run dev` (or `npm run preview` for the production build) + +It's an `@marko/run` app: the page is server-rendered, resumes in the browser, +and stays live. `npm run test:e2e` runs its Playwright smoke test. diff --git a/examples/marko/ssr-resume/e2e/ssr-resume.spec.ts b/examples/marko/ssr-resume/e2e/ssr-resume.spec.ts new file mode 100644 index 00000000..1433ef1c --- /dev/null +++ b/examples/marko/ssr-resume/e2e/ssr-resume.spec.ts @@ -0,0 +1,21 @@ +import { expect, test } from '@playwright/test' + +// Example smoke: the page renders, one interaction works, zero client errors. +test('ssr-resume: server paints, page resumes, tags stay live', async ({ page }) => { + // Dev-server noise (HMR websocket handshakes) is not an application error. + const ignore = (t: string) => t.includes('WebSocket') || t.includes('[vite]') + const errors: Array = [] + page.on('pageerror', (e) => { + if (!ignore(e.message)) errors.push('pageerror: ' + e.message) + }) + page.on('console', (m) => { + if (m.type() === 'error' && !ignore(m.text())) errors.push('console.error: ' + m.text()) + }) + + await page.goto('/') + await expect(page.getByText('Resumed in browser: yes')).toBeVisible() + await expect(page.getByText('Atom: 7')).toBeVisible() + await page.getByRole('button', { name: 'Atom inc' }).click() + await expect(page.getByText('Atom: 8')).toBeVisible() + expect(errors).toEqual([]) +}) diff --git a/examples/marko/ssr-resume/package.json b/examples/marko/ssr-resume/package.json index 255a9889..198e3eda 100644 --- a/examples/marko/ssr-resume/package.json +++ b/examples/marko/ssr-resume/package.json @@ -3,17 +3,21 @@ "private": true, "type": "module", "scripts": { - "dev": "node server.mjs", + "dev": "marko-run dev", + "build": "marko-run build", + "preview": "marko-run preview", + "test:e2e": "playwright test", "test:types": "marko-type-check -p tsconfig.json" }, "dependencies": { + "@marko/run": "^0.10.0", "@tanstack/marko-store": "^0.11.0", "marko": "^6" }, "devDependencies": { "@marko/language-tools": "^2.6.0", "@marko/type-check": "^3.1.0", - "@marko/vite": "^6", + "@playwright/test": "^1.53.1", "vite": "^8.0.8" } } diff --git a/examples/marko/ssr-resume/playwright.config.ts b/examples/marko/ssr-resume/playwright.config.ts new file mode 100644 index 00000000..48683080 --- /dev/null +++ b/examples/marko/ssr-resume/playwright.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from '@playwright/test' + +// Example smoke e2e. Dev-mode webServer on purpose: examples demonstrate, they +// don't gate — the production-mode gate lives in packages/marko-store/e2e. +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + retries: 0, + workers: 1, + use: { + baseURL: 'http://localhost:5200', + }, + webServer: { + command: 'npm run dev -- --port 5200', + url: 'http://localhost:5200', + reuseExistingServer: !process.env.CI, + stdout: 'pipe', + stderr: 'pipe', + timeout: 120_000, + }, +}) diff --git a/examples/marko/ssr-resume/server.mjs b/examples/marko/ssr-resume/server.mjs deleted file mode 100644 index cc0fedb0..00000000 --- a/examples/marko/ssr-resume/server.mjs +++ /dev/null @@ -1,47 +0,0 @@ -import { createServer as createHttpServer } from 'node:http' -import { createRequire } from 'node:module' -import path from 'node:path' -import url from 'node:url' - -import { createServer as createViteServer } from 'vite' - -const require = createRequire(import.meta.url) -const marko = require('@marko/vite').default -const __dirname = path.dirname(url.fileURLToPath(import.meta.url)) -const PORT = 5200 - -// A small Vite dev server in middleware mode renders the .marko pages and injects the browser -// scripts so the page resumes. NOTE: this is a development demonstration, not a deployable -// production server. Real Marko production uses @marko/run. - -// Create the HTTP server first so Vite can attach its HMR websocket to the same server/port -// (otherwise the browser's HMR client tries to open a socket that isn't there). -const httpServer = createHttpServer() - -const devServer = await createViteServer({ - root: __dirname, - configFile: false, - appType: 'custom', - logLevel: 'warn', - plugins: [marko()], - server: { middlewareMode: true, hmr: { server: httpServer } }, -}) - -devServer.middlewares.use((req, res, next) => { - if (req.url === '/favicon.ico') { res.statusCode = 204; res.end(); return } - next() -}) -devServer.middlewares.use(async (req, res, next) => { - try { - const { handler } = await devServer.ssrLoadModule(path.join(__dirname, './src/index.ts')) - await handler(req, res, next) - } catch (err) { - devServer.ssrFixStacktrace(err) - next(err) - } -}) - -httpServer.on('request', devServer.middlewares) -httpServer.listen(PORT, () => { - console.log('example server on http://localhost:' + PORT) -}) diff --git a/examples/marko/ssr-resume/src/index.ts b/examples/marko/ssr-resume/src/index.ts deleted file mode 100644 index d2e8a280..00000000 --- a/examples/marko/ssr-resume/src/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -import page from './page.marko' - -// Minimal structural types for the Node req/res the dev server passes in — keeps this small -// example free of an @types/node dependency. The real Node objects satisfy these structurally. -interface Req { url?: string } -interface Res { - statusCode: number - headersSent: boolean - setHeader(name: string, value: string): void - write(chunk: string): void - end(data?: string): void -} - -type ServerTemplate = { render: (input: Record) => AsyncIterable } - -const routes: Record }> = { - '/': { page: page as unknown as ServerTemplate, input: {} }, -} - -export async function handler(req: Req, res: Res, next?: () => void) { - const url = (req.url ?? '/').split('?')[0] ?? '/' - const route = routes[url] - if (!route) { next?.(); return } - res.statusCode = 200 - res.setHeader('Content-Type', 'text/html; charset=utf-8') - // Fresh $global per request — never share the resume box across requests. - const input = { ...route.input, $global: {} } - for await (const chunk of route.page.render(input)) res.write(chunk) - res.end() -} diff --git a/examples/marko/ssr-resume/src/page.marko b/examples/marko/ssr-resume/src/routes/+page.marko similarity index 94% rename from examples/marko/ssr-resume/src/page.marko rename to examples/marko/ssr-resume/src/routes/+page.marko index ff83e21c..e102b7a3 100644 --- a/examples/marko/ssr-resume/src/page.marko +++ b/examples/marko/ssr-resume/src/routes/+page.marko @@ -1,4 +1,4 @@ -import { counterStore, countAtom } from './store' +import { counterStore, countAtom } from '../store' diff --git a/examples/marko/ssr-resume/tsconfig.json b/examples/marko/ssr-resume/tsconfig.json index 2c3dfeb0..539796e4 100644 --- a/examples/marko/ssr-resume/tsconfig.json +++ b/examples/marko/ssr-resume/tsconfig.json @@ -10,6 +10,9 @@ "include": [ "src/**/*.ts", "src/**/*.marko", - "../../../packages/marko-store/src/tags/**/*" + "../../../packages/marko-store/src/tags/**/*", + "e2e/**/*.ts", + "playwright.config.ts", + "vite.config.ts" ] } diff --git a/examples/marko/ssr-resume/vite.config.ts b/examples/marko/ssr-resume/vite.config.ts new file mode 100644 index 00000000..d9f966e9 --- /dev/null +++ b/examples/marko/ssr-resume/vite.config.ts @@ -0,0 +1,6 @@ +import { defineConfig } from 'vite' +import marko from '@marko/run/vite' + +export default defineConfig({ + plugins: [marko() as any], +}) diff --git a/examples/marko/store-actions/.marko-run/routes.d.ts b/examples/marko/store-actions/.marko-run/routes.d.ts new file mode 100644 index 00000000..4c22b843 --- /dev/null +++ b/examples/marko/store-actions/.marko-run/routes.d.ts @@ -0,0 +1,34 @@ +/* + WARNING: This file is automatically generated and any changes made to it will be overwritten without warning. + Do NOT manually edit this file or your changes will be lost. +*/ + +import { NotHandled, NotMatched, GetPaths, PostPaths, GetablePath, GetableHref, PostablePath, PostableHref, Platform } from "@marko/run/namespace"; +import type * as Run from "@marko/run"; + + +declare module "@marko/run" { + interface AppData extends Run.DefineApp<{ + routes: { + "/": { verb: "get"; }; + } + }> {} +} + +declare module "../src/routes/+page.marko" { + namespace MarkoRun { + export { NotHandled, NotMatched, GetPaths, PostPaths, GetablePath, GetableHref, PostablePath, PostableHref, Platform }; + export type Route = Run.Routes["/"]; + export type Context = Run.MultiRouteContext & Marko.Global; + export type Handler = Run.HandlerLike; + export type GET = Run.HandlerLike; + export type HEAD = Run.HandlerLike; + export type POST = Run.HandlerLike; + export type PUT = Run.HandlerLike; + export type DELETE = Run.HandlerLike; + export type PATCH = Run.HandlerLike; + export type OPTIONS = Run.HandlerLike; + /** @deprecated use `((context, next) => { ... }) satisfies MarkoRun.Handler` instead */ + export const route: Run.HandlerTypeFn; + } +} diff --git a/examples/marko/store-actions/README.md b/examples/marko/store-actions/README.md index 48525189..d5ea98c8 100644 --- a/examples/marko/store-actions/README.md +++ b/examples/marko/store-actions/README.md @@ -8,4 +8,7 @@ the store directly, `` plus `store.actions` cover the same groun To run this example: - `npm install` -- `npm run dev` +- `npm run dev` (or `npm run preview` for the production build) + +It's an `@marko/run` app: the page is server-rendered, resumes in the browser, +and stays live. `npm run test:e2e` runs its Playwright smoke test. diff --git a/examples/marko/store-actions/e2e/store-actions.spec.ts b/examples/marko/store-actions/e2e/store-actions.spec.ts new file mode 100644 index 00000000..2ab65b63 --- /dev/null +++ b/examples/marko/store-actions/e2e/store-actions.spec.ts @@ -0,0 +1,20 @@ +import { expect, test } from '@playwright/test' + +// Example smoke: the page renders, one interaction works, zero client errors. +test('store-actions: renders and votes through an action', async ({ page }) => { + // Dev-server noise (HMR websocket handshakes) is not an application error. + const ignore = (t: string) => t.includes('WebSocket') || t.includes('[vite]') + const errors: Array = [] + page.on('pageerror', (e) => { + if (!ignore(e.message)) errors.push('pageerror: ' + e.message) + }) + page.on('console', (m) => { + if (m.type() === 'error' && !ignore(m.text())) errors.push('console.error: ' + m.text()) + }) + + await page.goto('/') + await expect(page.getByText('Cats: 0')).toBeVisible() + await page.getByRole('button', { name: 'Vote for cats' }).click() + await expect(page.getByText('Cats: 1')).toBeVisible() + expect(errors).toEqual([]) +}) diff --git a/examples/marko/store-actions/index.html b/examples/marko/store-actions/index.html deleted file mode 100644 index 571b8f86..00000000 --- a/examples/marko/store-actions/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - Marko Store Example — store-actions - - -
- - - diff --git a/examples/marko/store-actions/package.json b/examples/marko/store-actions/package.json index e0bf4258..c38ba81d 100644 --- a/examples/marko/store-actions/package.json +++ b/examples/marko/store-actions/package.json @@ -3,19 +3,21 @@ "private": true, "type": "module", "scripts": { - "dev": "vite --port=3062", - "build": "vite build", - "preview": "vite preview", + "dev": "marko-run dev", + "build": "marko-run build", + "preview": "marko-run preview", + "test:e2e": "playwright test", "test:types": "marko-type-check -p tsconfig.json" }, "dependencies": { + "@marko/run": "^0.10.0", "@tanstack/marko-store": "^0.11.0", "marko": "^6" }, "devDependencies": { "@marko/language-tools": "^2.6.0", "@marko/type-check": "^3.1.0", - "@marko/vite": "^6", + "@playwright/test": "^1.53.1", "vite": "^8.0.8" } } diff --git a/examples/marko/store-actions/playwright.config.ts b/examples/marko/store-actions/playwright.config.ts new file mode 100644 index 00000000..7ac4de8b --- /dev/null +++ b/examples/marko/store-actions/playwright.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from '@playwright/test' + +// Example smoke e2e. Dev-mode webServer on purpose: examples demonstrate, they +// don't gate — the production-mode gate lives in packages/marko-store/e2e. +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + retries: 0, + workers: 1, + use: { + baseURL: 'http://localhost:3062', + }, + webServer: { + command: 'npm run dev -- --port 3062', + url: 'http://localhost:3062', + reuseExistingServer: !process.env.CI, + stdout: 'pipe', + stderr: 'pipe', + timeout: 120_000, + }, +}) diff --git a/examples/marko/store-actions/src/index.ts b/examples/marko/store-actions/src/index.ts deleted file mode 100644 index 21867a93..00000000 --- a/examples/marko/store-actions/src/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import App from './App.marko' - -const el = document.getElementById('app') -if (el) App.mount({}, el) diff --git a/examples/marko/store-actions/src/routes/+page.marko b/examples/marko/store-actions/src/routes/+page.marko new file mode 100644 index 00000000..ae102b1b --- /dev/null +++ b/examples/marko/store-actions/src/routes/+page.marko @@ -0,0 +1,9 @@ +import App from '../App.marko' + + + + marko-store: store actions + + + + diff --git a/examples/marko/store-actions/tsconfig.json b/examples/marko/store-actions/tsconfig.json index 2c3dfeb0..539796e4 100644 --- a/examples/marko/store-actions/tsconfig.json +++ b/examples/marko/store-actions/tsconfig.json @@ -10,6 +10,9 @@ "include": [ "src/**/*.ts", "src/**/*.marko", - "../../../packages/marko-store/src/tags/**/*" + "../../../packages/marko-store/src/tags/**/*", + "e2e/**/*.ts", + "playwright.config.ts", + "vite.config.ts" ] } diff --git a/examples/marko/store-actions/vite.config.ts b/examples/marko/store-actions/vite.config.ts index ac3ced6c..d9f966e9 100644 --- a/examples/marko/store-actions/vite.config.ts +++ b/examples/marko/store-actions/vite.config.ts @@ -1,7 +1,6 @@ import { defineConfig } from 'vite' -import marko from '@marko/vite' +import marko from '@marko/run/vite' -// linked: false => browser-only build (a client-only SPA, mounted in src/index.ts). export default defineConfig({ - plugins: [marko({ linked: false })], + plugins: [marko() as any], }) diff --git a/examples/marko/store-context/.marko-run/routes.d.ts b/examples/marko/store-context/.marko-run/routes.d.ts new file mode 100644 index 00000000..4c22b843 --- /dev/null +++ b/examples/marko/store-context/.marko-run/routes.d.ts @@ -0,0 +1,34 @@ +/* + WARNING: This file is automatically generated and any changes made to it will be overwritten without warning. + Do NOT manually edit this file or your changes will be lost. +*/ + +import { NotHandled, NotMatched, GetPaths, PostPaths, GetablePath, GetableHref, PostablePath, PostableHref, Platform } from "@marko/run/namespace"; +import type * as Run from "@marko/run"; + + +declare module "@marko/run" { + interface AppData extends Run.DefineApp<{ + routes: { + "/": { verb: "get"; }; + } + }> {} +} + +declare module "../src/routes/+page.marko" { + namespace MarkoRun { + export { NotHandled, NotMatched, GetPaths, PostPaths, GetablePath, GetableHref, PostablePath, PostableHref, Platform }; + export type Route = Run.Routes["/"]; + export type Context = Run.MultiRouteContext & Marko.Global; + export type Handler = Run.HandlerLike; + export type GET = Run.HandlerLike; + export type HEAD = Run.HandlerLike; + export type POST = Run.HandlerLike; + export type PUT = Run.HandlerLike; + export type DELETE = Run.HandlerLike; + export type PATCH = Run.HandlerLike; + export type OPTIONS = Run.HandlerLike; + /** @deprecated use `((context, next) => { ... }) satisfies MarkoRun.Handler` instead */ + export const route: Run.HandlerTypeFn; + } +} diff --git a/examples/marko/store-context/README.md b/examples/marko/store-context/README.md index eaaa5ceb..a59625fd 100644 --- a/examples/marko/store-context/README.md +++ b/examples/marko/store-context/README.md @@ -9,4 +9,7 @@ lean on their native context, Marko uses provider + context + selector. To run this example: - `npm install` -- `npm run dev` +- `npm run dev` (or `npm run preview` for the production build) + +It's an `@marko/run` app: the page is server-rendered, resumes in the browser, +and stays live. `npm run test:e2e` runs its Playwright smoke test. diff --git a/examples/marko/store-context/e2e/store-context.spec.ts b/examples/marko/store-context/e2e/store-context.spec.ts new file mode 100644 index 00000000..6fd1dd59 --- /dev/null +++ b/examples/marko/store-context/e2e/store-context.spec.ts @@ -0,0 +1,20 @@ +import { expect, test } from '@playwright/test' + +// Example smoke: the page renders, one interaction works, zero client errors. +test('store-context: renders and a context write propagates', async ({ page }) => { + // Dev-server noise (HMR websocket handshakes) is not an application error. + const ignore = (t: string) => t.includes('WebSocket') || t.includes('[vite]') + const errors: Array = [] + page.on('pageerror', (e) => { + if (!ignore(e.message)) errors.push('pageerror: ' + e.message) + }) + page.on('console', (m) => { + if (m.type() === 'error' && !ignore(m.text())) errors.push('console.error: ' + m.text()) + }) + + await page.goto('/') + await expect(page.getByText('Total votes: 0')).toBeVisible() + await page.getByRole('button', { name: 'Add cat' }).click() + await expect(page.getByText('Total votes: 1')).toBeVisible() + expect(errors).toEqual([]) +}) diff --git a/examples/marko/store-context/index.html b/examples/marko/store-context/index.html deleted file mode 100644 index f50c0d29..00000000 --- a/examples/marko/store-context/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - Marko Store Example — store-context - - -
- - - diff --git a/examples/marko/store-context/package.json b/examples/marko/store-context/package.json index be7042b7..b61a4b6b 100644 --- a/examples/marko/store-context/package.json +++ b/examples/marko/store-context/package.json @@ -3,19 +3,21 @@ "private": true, "type": "module", "scripts": { - "dev": "vite --port=3063", - "build": "vite build", - "preview": "vite preview", + "dev": "marko-run dev", + "build": "marko-run build", + "preview": "marko-run preview", + "test:e2e": "playwright test", "test:types": "marko-type-check -p tsconfig.json" }, "dependencies": { + "@marko/run": "^0.10.0", "@tanstack/marko-store": "^0.11.0", "marko": "^6" }, "devDependencies": { "@marko/language-tools": "^2.6.0", "@marko/type-check": "^3.1.0", - "@marko/vite": "^6", + "@playwright/test": "^1.53.1", "vite": "^8.0.8" } } diff --git a/examples/marko/store-context/playwright.config.ts b/examples/marko/store-context/playwright.config.ts new file mode 100644 index 00000000..32e699df --- /dev/null +++ b/examples/marko/store-context/playwright.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from '@playwright/test' + +// Example smoke e2e. Dev-mode webServer on purpose: examples demonstrate, they +// don't gate — the production-mode gate lives in packages/marko-store/e2e. +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + retries: 0, + workers: 1, + use: { + baseURL: 'http://localhost:3063', + }, + webServer: { + command: 'npm run dev -- --port 3063', + url: 'http://localhost:3063', + reuseExistingServer: !process.env.CI, + stdout: 'pipe', + stderr: 'pipe', + timeout: 120_000, + }, +}) diff --git a/examples/marko/store-context/src/App.marko b/examples/marko/store-context/src/App.marko index 4a7a73e9..3e8c6647 100644 --- a/examples/marko/store-context/src/App.marko +++ b/examples/marko/store-context/src/App.marko @@ -11,10 +11,11 @@ import DeepAtomEditor from './DeepAtomEditor.marko' // parks a bundle, children read it with , // and writes go through . (A real app would give the bundle a named type; // the context pickers here use `any` to keep the example focused.) - - - - ({ votesStore, countAtom })> +// Build the stores INSIDE the provider's value thunk. Under server rendering a +// component-local const store would be dead after resume (the component body +// never re-runs in the browser); the thunk is rebuilt per request on the server +// and again on the client, which is exactly the per-request pattern. + ({ votesStore: createStore({ cats: 0, dogs: 0 }), countAtom: createAtom(0) })>

Marko Store Context

diff --git a/examples/marko/store-context/src/DeepAtomEditor.marko b/examples/marko/store-context/src/DeepAtomEditor.marko index 7f703302..5e64c20e 100644 --- a/examples/marko/store-context/src/DeepAtomEditor.marko +++ b/examples/marko/store-context/src/DeepAtomEditor.marko @@ -1,6 +1,6 @@ - (ctx() as any).countAtom)/> + (ctx() as any)?.countAtom ?? null)/>

Editable atom count: ${count}

diff --git a/examples/marko/store-context/src/index.ts b/examples/marko/store-context/src/index.ts deleted file mode 100644 index 21867a93..00000000 --- a/examples/marko/store-context/src/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import App from './App.marko' - -const el = document.getElementById('app') -if (el) App.mount({}, el) diff --git a/examples/marko/store-context/src/routes/+page.marko b/examples/marko/store-context/src/routes/+page.marko new file mode 100644 index 00000000..0b904553 --- /dev/null +++ b/examples/marko/store-context/src/routes/+page.marko @@ -0,0 +1,9 @@ +import App from '../App.marko' + + + + marko-store: store context + + + + diff --git a/examples/marko/store-context/tsconfig.json b/examples/marko/store-context/tsconfig.json index 2c3dfeb0..539796e4 100644 --- a/examples/marko/store-context/tsconfig.json +++ b/examples/marko/store-context/tsconfig.json @@ -10,6 +10,9 @@ "include": [ "src/**/*.ts", "src/**/*.marko", - "../../../packages/marko-store/src/tags/**/*" + "../../../packages/marko-store/src/tags/**/*", + "e2e/**/*.ts", + "playwright.config.ts", + "vite.config.ts" ] } diff --git a/examples/marko/store-context/vite.config.ts b/examples/marko/store-context/vite.config.ts index ac3ced6c..d9f966e9 100644 --- a/examples/marko/store-context/vite.config.ts +++ b/examples/marko/store-context/vite.config.ts @@ -1,7 +1,6 @@ import { defineConfig } from 'vite' -import marko from '@marko/vite' +import marko from '@marko/run/vite' -// linked: false => browser-only build (a client-only SPA, mounted in src/index.ts). export default defineConfig({ - plugins: [marko({ linked: false })], + plugins: [marko() as any], }) diff --git a/examples/marko/stores/.marko-run/routes.d.ts b/examples/marko/stores/.marko-run/routes.d.ts new file mode 100644 index 00000000..4c22b843 --- /dev/null +++ b/examples/marko/stores/.marko-run/routes.d.ts @@ -0,0 +1,34 @@ +/* + WARNING: This file is automatically generated and any changes made to it will be overwritten without warning. + Do NOT manually edit this file or your changes will be lost. +*/ + +import { NotHandled, NotMatched, GetPaths, PostPaths, GetablePath, GetableHref, PostablePath, PostableHref, Platform } from "@marko/run/namespace"; +import type * as Run from "@marko/run"; + + +declare module "@marko/run" { + interface AppData extends Run.DefineApp<{ + routes: { + "/": { verb: "get"; }; + } + }> {} +} + +declare module "../src/routes/+page.marko" { + namespace MarkoRun { + export { NotHandled, NotMatched, GetPaths, PostPaths, GetablePath, GetableHref, PostablePath, PostableHref, Platform }; + export type Route = Run.Routes["/"]; + export type Context = Run.MultiRouteContext & Marko.Global; + export type Handler = Run.HandlerLike; + export type GET = Run.HandlerLike; + export type HEAD = Run.HandlerLike; + export type POST = Run.HandlerLike; + export type PUT = Run.HandlerLike; + export type DELETE = Run.HandlerLike; + export type PATCH = Run.HandlerLike; + export type OPTIONS = Run.HandlerLike; + /** @deprecated use `((context, next) => { ... }) satisfies MarkoRun.Handler` instead */ + export const route: Run.HandlerTypeFn; + } +} diff --git a/examples/marko/stores/README.md b/examples/marko/stores/README.md index 14dc412e..0824ae9d 100644 --- a/examples/marko/stores/README.md +++ b/examples/marko/stores/README.md @@ -9,4 +9,7 @@ This example demonstrates: To run this example: - `npm install` -- `npm run dev` +- `npm run dev` (or `npm run preview` for the production build) + +It's an `@marko/run` app: the page is server-rendered, resumes in the browser, +and stays live. `npm run test:e2e` runs its Playwright smoke test. diff --git a/examples/marko/stores/e2e/stores.spec.ts b/examples/marko/stores/e2e/stores.spec.ts new file mode 100644 index 00000000..b84cfa51 --- /dev/null +++ b/examples/marko/stores/e2e/stores.spec.ts @@ -0,0 +1,22 @@ +import { expect, test } from '@playwright/test' + +// Example smoke: the page renders, one interaction works, zero client errors. +test('stores: renders, counts a click, and the shallow pair follows', async ({ page }) => { + // Dev-server noise (HMR websocket handshakes) is not an application error. + const ignore = (t: string) => t.includes('WebSocket') || t.includes('[vite]') + const errors: Array = [] + page.on('pageerror', (e) => { + if (!ignore(e.message)) errors.push('pageerror: ' + e.message) + }) + page.on('console', (m) => { + if (m.type() === 'error' && !ignore(m.text())) errors.push('console.error: ' + m.text()) + }) + + await page.goto('/') + await expect(page.getByText('Cats: 0')).toBeVisible() + await expect(page.getByText('As a pair: 0 cats / 0 dogs')).toBeVisible() + await page.getByRole('button', { name: 'Add cat' }).click() + await expect(page.getByText('Cats: 1')).toBeVisible() + await expect(page.getByText('As a pair: 1 cats / 0 dogs')).toBeVisible() + expect(errors).toEqual([]) +}) diff --git a/examples/marko/stores/index.html b/examples/marko/stores/index.html deleted file mode 100644 index 4f065f59..00000000 --- a/examples/marko/stores/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - Marko Store Example - - -
- - - diff --git a/examples/marko/stores/package.json b/examples/marko/stores/package.json index 6d82684c..5a46d11b 100644 --- a/examples/marko/stores/package.json +++ b/examples/marko/stores/package.json @@ -3,19 +3,21 @@ "private": true, "type": "module", "scripts": { - "dev": "vite --port=3070", - "build": "vite build", - "preview": "vite preview", + "dev": "marko-run dev", + "build": "marko-run build", + "preview": "marko-run preview", + "test:e2e": "playwright test", "test:types": "marko-type-check -p tsconfig.json" }, "dependencies": { + "@marko/run": "^0.10.0", "@tanstack/marko-store": "^0.11.0", "marko": "^6" }, "devDependencies": { "@marko/language-tools": "^2.6.0", "@marko/type-check": "^3.1.0", - "@marko/vite": "^6", + "@playwright/test": "^1.53.1", "vite": "^8.0.8" } } diff --git a/examples/marko/stores/playwright.config.ts b/examples/marko/stores/playwright.config.ts new file mode 100644 index 00000000..94ab5eb3 --- /dev/null +++ b/examples/marko/stores/playwright.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from '@playwright/test' + +// Example smoke e2e. Dev-mode webServer on purpose: examples demonstrate, they +// don't gate — the production-mode gate lives in packages/marko-store/e2e. +export default defineConfig({ + testDir: './e2e', + timeout: 60_000, + retries: 0, + workers: 1, + use: { + baseURL: 'http://localhost:3070', + }, + webServer: { + command: 'npm run dev -- --port 3070', + url: 'http://localhost:3070', + reuseExistingServer: !process.env.CI, + stdout: 'pipe', + stderr: 'pipe', + timeout: 120_000, + }, +}) diff --git a/examples/marko/stores/src/App.marko b/examples/marko/stores/src/App.marko index 3951a137..8343621c 100644 --- a/examples/marko/stores/src/App.marko +++ b/examples/marko/stores/src/App.marko @@ -1,3 +1,4 @@ +import { shallow } from '@tanstack/marko-store' import { petStore } from './store'
@@ -16,6 +17,22 @@ import { petStore } from './store' petStore) selector=(s => s.cats + s.dogs)/>

Total votes: ${total}

+ + petStore) + selector=(s => ({ cats: s.cats, dogs: s.dogs })) + compare=((a, b) => shallow(a, b)) + /> +

As a pair: ${pair?.cats ?? 0} cats / ${pair?.dogs ?? 0} dogs

+