{"_id":"@augeo/assay","_rev":"5-e702db97c9b78f9f77aa762208953505","name":"@augeo/assay","dist-tags":{"latest":"1.3.0"},"versions":{"1.0.1":{"name":"@augeo/assay","version":"1.0.1","author":{"name":"Sean Healy"},"license":"MIT","_id":"@augeo/assay@1.0.1","maintainers":[{"name":"seanhealy","email":"s@xib.ca"}],"homepage":"https://github.com/seanhealy/assay#readme","bugs":{"url":"https://github.com/seanhealy/assay/issues"},"bin":{"assay":"dist/cli.js"},"dist":{"shasum":"73ce8ced679819e80c157055a92e9f6912e727f3","tarball":"https://registry.npmjs.org/@augeo/assay/-/assay-1.0.1.tgz","fileCount":16,"integrity":"sha512-aBfNCH2Ww2PvmgxXHYJPhG8Y6TVeuFfFtZRgq7u7wigbsthj2W1dIPHCwkIJ7f03xWPYcEkr3JtxssW0UnPubg==","signatures":[{"sig":"MEUCIECb1C1LEgD7Ch8ZQALnAfm896JCQVNvr/qjdDotv870AiEA799S6fuPGNXQzY1rheh6kx4GO2dik22oqgegW6DmBNg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70656},"type":"module","volta":{"npm":"11.6.2","node":"24.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./preset":{"types":"./dist/preset.d.ts","import":"./dist/preset.js"}},"gitHead":"41ebe37044e915934ef9f52d2299bbb743125748","scripts":{"lint":"biome check && prettier --check .","test":"vitest run && npm test --prefix example","build":"tsdown","verify":"npm run lint:fix && npm run typecheck","lint:fix":"biome check --write && prettier --write .","prebuild":"tsx scripts/generate-shopify-names.ts","typecheck":"tsc --noEmit","docs:audit":"tsx scripts/audit-shopify-compat.ts","build:watch":"tsdown --watch ./src","docs:update":"git submodule update --remote vendor/theme-liquid-docs","prepublishOnly":"npm run build"},"_npmUser":{"name":"seanhealy","email":"s@xib.ca"},"repository":{"url":"git+https://github.com/seanhealy/assay.git","type":"git"},"_npmVersion":"11.6.2","description":"A minimal, TypeScript-first testing stack for Shopify Liquid Themes.","directories":{},"_nodeVersion":"24.10.0","dependencies":{"liquidjs":"^10.25.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsdown":"^0.21.7","vitest":"^4.1.2","prettier":"^3.8.1","typescript":"^6.0.2","@types/node":"^25.5.2","@biomejs/biome":"^2.4.10","@vitest/browser-playwright":"^4.1.2"},"peerDependencies":{"vitest":">=4.0.0","@vitest/browser-playwright":">=4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/assay_1.0.1_1775596481729_0.0163152899899508","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@augeo/assay","version":"1.0.2","keywords":["shopify","liquid","testing","vitest","theme","browser-testing","web-components","playwright"],"author":{"name":"Sean Healy"},"license":"MIT","_id":"@augeo/assay@1.0.2","maintainers":[{"name":"seanhealy","email":"s@xib.ca"}],"homepage":"https://github.com/seanhealy/assay#readme","bugs":{"url":"https://github.com/seanhealy/assay/issues"},"bin":{"assay":"dist/cli.js"},"dist":{"shasum":"3800cadc81de4b4825df9ba09c634827d4df13ed","tarball":"https://registry.npmjs.org/@augeo/assay/-/assay-1.0.2.tgz","fileCount":16,"integrity":"sha512-BGPxhVnCNnZ+X5CinYqYO703msXS/SKCnfcl4WMVDgrMS3NLESjrLE9mt6qAZKNDLZsebZynE6DSsP9rQwG1vA==","signatures":[{"sig":"MEYCIQCon/MwAt3W/YxBTExMdn5tikE+N9RPJkY2Op1lJi1BPQIhAI4oi4ik4Mck5CadAXfRRtL1U3xDU/Tu7KVq50OJ7pPE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70763},"type":"module","volta":{"npm":"11.6.2","node":"24.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./preset":{"types":"./dist/preset.d.ts","import":"./dist/preset.js"}},"gitHead":"6b359925ac6cfb9e6236889bbb975daf1831f483","scripts":{"lint":"biome check && prettier --check .","test":"vitest run && npm test --prefix example","build":"tsdown","verify":"npm run lint:fix && npm run typecheck","lint:fix":"biome check --write && prettier --write .","prebuild":"tsx scripts/generate-shopify-names.ts","typecheck":"tsc --noEmit","docs:audit":"tsx scripts/audit-shopify-compat.ts","build:watch":"tsdown --watch ./src","docs:update":"git submodule update --remote vendor/theme-liquid-docs","prepublishOnly":"npm run build"},"_npmUser":{"name":"seanhealy","email":"s@xib.ca"},"repository":{"url":"git+https://github.com/seanhealy/assay.git","type":"git"},"_npmVersion":"11.6.2","description":"Test Shopify Liquid Themes with Vitest.","directories":{},"_nodeVersion":"24.10.0","dependencies":{"liquidjs":"^10.25.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsdown":"^0.21.7","vitest":"^4.1.2","prettier":"^3.8.1","typescript":"^6.0.2","@types/node":"^25.5.2","@biomejs/biome":"^2.4.10","@vitest/browser-playwright":"^4.1.2"},"peerDependencies":{"vitest":">=4.0.0","@vitest/browser-playwright":">=4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/assay_1.0.2_1775596696869_0.9775453533013556","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@augeo/assay","version":"1.1.0","keywords":["shopify","liquid","testing","vitest","theme","browser-testing","web-components","playwright"],"author":{"name":"Sean Healy"},"license":"MIT","_id":"@augeo/assay@1.1.0","maintainers":[{"name":"seanhealy","email":"s@xib.ca"}],"homepage":"https://github.com/seanhealy/assay#readme","bugs":{"url":"https://github.com/seanhealy/assay/issues"},"bin":{"assay":"dist/cli.js"},"dist":{"shasum":"b09e43a533055708522e2a957117ec575bd1e5ae","tarball":"https://registry.npmjs.org/@augeo/assay/-/assay-1.1.0.tgz","fileCount":16,"integrity":"sha512-TNJRTlu25WZFYZtNlawVVPucxjQTZ2hA+yc+u2q60uhzd2kOPOPvLoxIHpzmIgGMeAOVCnaGTmhlA1KQyTumIA==","signatures":[{"sig":"MEUCIQCMV2F6me2V10VVAOMe6wDd5EoiOFZXc2tfKXiU5lUpuQIgVC8r1EcM3KFn0BcdNtVyG3TajtQR+ht17BntncJfenU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73734},"type":"module","volta":{"npm":"11.6.2","node":"24.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./preset":{"types":"./dist/preset.d.ts","import":"./dist/preset.js"}},"gitHead":"c0ffae24ec19a6a00ccce8d7970d1eafcd65456f","scripts":{"lint":"biome check && prettier --check .","test":"vitest run && npm test --prefix example","build":"tsdown","verify":"npm run lint:fix && npm run typecheck","lint:fix":"biome check --write && prettier --write .","prebuild":"tsx scripts/generate-shopify-names.ts","typecheck":"tsc --noEmit","docs:audit":"tsx scripts/audit-shopify-compat.ts && prettier --write docs/filters.md docs/tags.md","build:watch":"tsdown --watch ./src","docs:update":"git submodule update --remote vendor/theme-liquid-docs","prepublishOnly":"npm run build"},"_npmUser":{"name":"seanhealy","email":"s@xib.ca"},"repository":{"url":"git+https://github.com/seanhealy/assay.git","type":"git"},"_npmVersion":"11.6.2","description":"Test Shopify Liquid Themes with Vitest.","directories":{},"_nodeVersion":"24.10.0","dependencies":{"liquidjs":"^10.25.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsdown":"^0.21.7","vitest":"^4.1.2","prettier":"^3.8.1","typescript":"^6.0.2","@types/node":"^25.5.2","@biomejs/biome":"^2.4.10","@vitest/browser-playwright":"^4.1.2"},"peerDependencies":{"vitest":">=4.0.0","@vitest/browser-playwright":">=4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/assay_1.1.0_1776303843596_0.9574301256935229","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@augeo/assay","version":"1.2.0","keywords":["shopify","liquid","testing","vitest","theme","browser-testing","web-components","playwright"],"author":{"name":"Sean Healy"},"license":"MIT","_id":"@augeo/assay@1.2.0","maintainers":[{"name":"seanhealy","email":"s@xib.ca"}],"homepage":"https://github.com/seanhealy/assay#readme","bugs":{"url":"https://github.com/seanhealy/assay/issues"},"bin":{"assay":"dist/cli.js"},"dist":{"shasum":"b246b9405d8df4613f71e45b0e0165ea8bd97bd5","tarball":"https://registry.npmjs.org/@augeo/assay/-/assay-1.2.0.tgz","fileCount":16,"integrity":"sha512-4jjx9jdSe7fuh0fOQIBEfuT12Pt6KmAMt+3NhWNGCbLLf0V989xBwP1wAWXmseyp3WIDRaIyaOiCuplLUHVThg==","signatures":[{"sig":"MEQCICKqB+ov+2E8/vGDKwhmVmdbhV04x2oOH27/1Phuov2HAiAfw4yRB1ks5UkeJjF2Ydiu2PwcQzptUtK1WApWqxYOmw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88361},"type":"module","volta":{"npm":"11.6.2","node":"24.10.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./preset":{"types":"./dist/preset.d.ts","import":"./dist/preset.js"}},"gitHead":"f17c63352359ca64ec6dbc015370b56758ebedd1","scripts":{"lint":"biome check && prettier --check .","test":"vitest run","build":"tsdown","verify":"npm run lint:fix && npm run typecheck","lint:fix":"biome check --write && prettier --write .","prebuild":"tsx scripts/generate-shopify-names.ts && tsx scripts/generate-shim-barrels.ts","test:all":"npm test && npm test --prefix example","typecheck":"tsc --noEmit","docs:audit":"tsx scripts/audit-shopify-compat.ts && prettier --write docs/filters.md docs/tags.md","build:watch":"tsdown --watch ./src","docs:lookup":"tsx scripts/lookup-shopify-docs.ts","docs:update":"git submodule update --remote vendor/theme-liquid-docs","prepublishOnly":"npm run build","docs:fetchExample":"tsx scripts/fetch-shopify-examples.ts"},"_npmUser":{"name":"seanhealy","email":"s@xib.ca"},"repository":{"url":"git+https://github.com/seanhealy/assay.git","type":"git"},"_npmVersion":"11.6.2","description":"Test Shopify Liquid Themes with Vitest.","directories":{},"_nodeVersion":"24.10.0","dependencies":{"liquidjs":"^10.25.2","es-toolkit":"^1.46.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsdown":"^0.21.7","vitest":"^4.1.2","prettier":"^3.8.1","typescript":"^6.0.2","@types/node":"^25.5.2","@biomejs/biome":"^2.4.10","@vitest/browser-playwright":"^4.1.2"},"peerDependencies":{"vitest":">=4.0.0","@vitest/browser-playwright":">=4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/assay_1.2.0_1781126347515_0.03514905040363847","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@augeo/assay","version":"1.3.0","description":"Test Shopify Liquid Themes with Vitest.","author":{"name":"Sean Healy"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/seanhealy/assay.git"},"keywords":["shopify","liquid","testing","vitest","theme","browser-testing","web-components","playwright"],"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./preset":{"types":"./dist/preset.d.ts","import":"./dist/preset.js"}},"bin":{"assay":"dist/cli.js"},"scripts":{"prebuild":"tsx scripts/generate-shopify-names.ts && tsx scripts/generate-shim-barrels.ts","build":"tsdown","build:watch":"tsdown --watch ./src","lint":"biome check && prettier --check .","lint:fix":"biome check --write && prettier --write .","typecheck":"tsc --noEmit","verify":"npm run lint:fix && npm run typecheck","test":"vitest run","test:all":"npm test && npm test --prefix example","docs:update":"git submodule update --remote vendor/theme-liquid-docs","docs:audit":"tsx scripts/audit-shopify-compat.ts && prettier --write docs/filters.md docs/tags.md","docs:lookup":"tsx scripts/lookup-shopify-docs.ts","docs:fetchExample":"tsx scripts/fetch-shopify-examples.ts","prepublishOnly":"npm run build"},"volta":{"node":"24.11.0","npm":"11.6.2"},"peerDependencies":{"@vitest/browser-playwright":">=4.0.0","vitest":">=4.0.0"},"dependencies":{"es-toolkit":"^1.46.0","liquidjs":"^10.25.2"},"devDependencies":{"@biomejs/biome":"^2.4.10","@types/node":"^25.5.2","@vitest/browser-playwright":"^4.1.2","prettier":"^3.8.1","tsdown":"^0.21.7","tsx":"^4.21.0","typescript":"^6.0.2","vitest":"^4.1.2"},"gitHead":"ca5a6f436f5a742a28a65f38cb5631dce67704ab","_id":"@augeo/assay@1.3.0","bugs":{"url":"https://github.com/seanhealy/assay/issues"},"homepage":"https://github.com/seanhealy/assay#readme","_nodeVersion":"24.11.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-sxfqd3B9zZo/OnVOhU6HQTgRDx4RvKY8DS9Aex1ESyh7AJP8+ECr7EVKz9m75S0ucJjN47TthHntgzqTcsUVXw==","shasum":"f614d9a0be137e45d4f72d692c6057d1d72a9a27","tarball":"https://registry.npmjs.org/@augeo/assay/-/assay-1.3.0.tgz","fileCount":16,"unpackedSize":97291,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCUk8V/g1DlSfOVUpQ+c1Hoz+X3kbPNDhfSYI+igCgdGwIhAKRuEzjGBWNZdLDrT2XNzo0nXqbpr01FyF9NAn/l6fT4"}]},"_npmUser":{"name":"seanhealy","email":"s@xib.ca"},"directories":{},"maintainers":[{"name":"seanhealy","email":"s@xib.ca"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/assay_1.3.0_1781151719920_0.31202132398330296"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-07T21:14:41.627Z","modified":"2026-06-11T04:22:00.215Z","1.0.1":"2026-04-07T21:14:41.882Z","1.0.2":"2026-04-07T21:18:17.005Z","1.1.0":"2026-04-16T01:44:03.735Z","1.2.0":"2026-06-10T21:19:07.657Z","1.3.0":"2026-06-11T04:22:00.075Z"},"bugs":{"url":"https://github.com/seanhealy/assay/issues"},"author":{"name":"Sean Healy"},"license":"MIT","homepage":"https://github.com/seanhealy/assay#readme","keywords":["shopify","liquid","testing","vitest","theme","browser-testing","web-components","playwright"],"repository":{"type":"git","url":"git+https://github.com/seanhealy/assay.git"},"description":"Test Shopify Liquid Themes with Vitest.","maintainers":[{"name":"seanhealy","email":"s@xib.ca"}],"readme":"# Assay\n\n[![Tests](https://github.com/seanhealy/assay/actions/workflows/test.yml/badge.svg)](https://github.com/seanhealy/assay/actions/workflows/test.yml)\n\nTest Shopify Liquid templates with Vitest. Render snippets, sections, and\nblocks, then query and interact with familiar Testing Library patterns.\n\n## Why\n\n- **Shopify-ready.** Filters like `| money` and `| asset_url` work out of the\n  box. `{% schema %}` tags are handled. More filters shipping regularly.\n- **Simple API.** `render(\"button\", { text: \"Click me\" })` — one function,\n  template name, data. Everything else is handled for you.\n- **Web components.** `<script>` tags execute, custom elements upgrade. Test\n  interactive components the same way they work in production.\n- **Cross-browser.** Tests run in real Chromium, Firefox, or WebKit via Vitest\n  Browser Mode — catch browser-specific issues before your users do.\n\n---\n\n## Contents\n\n- [Example](#example)\n- [Install](#install)\n- [Setup](#setup)\n- [Web Components](#web-components)\n- [Filters & Tags](#filters--tags)\n- [Mocking](#mocking)\n- [Learn More](#learn-more)\n- [Future Plans](#future-plans)\n\n---\n\n## Example\n\n```typescript\nimport { render } from \"@augeo/assay\";\nimport { beforeEach, describe, expect, it } from \"vitest\";\nimport { page, userEvent } from \"vitest/browser\";\n\ndescribe(\"product-card.liquid\", () => {\n\tdescribe(\"with an available product\", () => {\n\t\tbeforeEach(() =>\n\t\t\trender(\"product-card\", {\n\t\t\t\tproduct: { title: \"Classic Tee\", price: 2999, available: true },\n\t\t\t}),\n\t\t);\n\n\t\tit(\"renders the product title\", async () => {\n\t\t\tawait expect.element(page.getByText(\"Classic Tee\")).toBeVisible();\n\t\t});\n\n\t\tit(\"renders the formatted price\", async () => {\n\t\t\tawait expect.element(page.getByText(\"$29.99\")).toBeVisible();\n\t\t});\n\n\t\tit(\"adds to cart when clicked\", async () => {\n\t\t\tawait userEvent.click(page.getByRole(\"button\", { name: \"Add to cart\" }));\n\n\t\t\tawait expect.element(page.getByText(\"Added!\")).toBeVisible();\n\t\t});\n\t});\n});\n```\n\nSee the [📄 `example/`](./example) directory for an example theme with tests.\n\n## Install\n\n```bash\nnpm install -D @augeo/assay vitest @vitest/browser-playwright\n```\n\nThen install Playwright's Chromium browser:\n\n```bash\nnpx playwright install chromium\n```\n\n## Setup\n\n### `vitest.config.ts`\n\n📄 [See example](./example/vitest.config.ts)\n\n```typescript\nimport { assayPreset } from \"@augeo/assay/preset\";\n\nexport default assayPreset({\n\tliquidPaths: [\"./theme/snippets\", \"./theme/sections\"],\n\tassetsPath: \"theme/assets\",\n});\n```\n\n| Option        | Default          | Description                                                 |\n| ------------- | ---------------- | ----------------------------------------------------------- |\n| `liquidPaths` | `['./snippets']` | Directories containing `.liquid` template files             |\n| `assetsPath`  | `'assets'`       | Directory for theme assets (used by the `asset_url` filter) |\n\n## Web Components\n\nWeb components are supported and fully upgrade as expected. See\n[Advanced Usage](./docs/advanced-usage.md#web-components) for `waitForElements`\nand more details.\n\n## Filters & Tags\n\nAssay mocks Shopify-specific Liquid filters and tags that aren't in LiquidJS\ncore. See the full compatibility tables:\n\n- 📄 [Filters](./docs/filters.md) — 59 core, 2 mocked, 85 unsupported\n- 📄 [Tags](./docs/tags.md) — 18 core, 1 mocked, 11 unsupported\n\nAudit your theme to see which filters and tags you use are currently supported:\n\n```bash\nnpx @augeo/assay audit ./path/to/theme\n```\n\nNeed a filter or tag that's not yet supported? See\n[Advanced Usage](./docs/advanced-usage.md) for how to register your own.\n\n## Mocking\n\nMock nested `{% render %}` calls to test a section in isolation:\n\n```typescript\nimport { mock, render } from \"@augeo/assay\";\n\nmock(\"product-card\", \"<div data-testid='mock-card'>{{ product.title }}</div>\");\n```\n\nSee [Advanced Usage](./docs/advanced-usage.md#mocking) for more on mocking.\n\n## Learn More\n\n- [Advanced Usage](./docs/advanced-usage.md): custom filters, tags, preset\n  overrides, web components\n- [Vitest Browser Mode](https://vitest.dev/guide/browser/): how tests run in a\n  real browser\n- [Testing Library Guiding Principles](https://testing-library.com/docs/guiding-principles):\n  the philosophy behind `getByRole`, `getByText`, and user-centric testing\n- [Vitest Locators](https://vitest.dev/api/browser/locators): how to find\n  elements with `page.getByRole`, `page.getByText`, etc.\n- [Vitest Assertions](https://vitest.dev/api/browser/assertions): `toBeVisible`,\n  `toBeChecked`, `toHaveTextContent`, and more\n- [Vitest](https://vitest.dev/guide/): the test runner Assay is built on\n\n## Future Plans\n\n- Auto-generated Shopify Liquid object types from\n  [`Shopify/theme-liquid-docs`](https://github.com/Shopify/theme-liquid-docs)\n  (`data/objects.json`) (MIT license attribution required)\n- Default fixture data (product, cart, shop, etc.) with spread-and-override\n  pattern\n- Translation support (`| t` filter + locale JSON loading)\n- Additional filter and tag mocks (e.g., `{% javascript %}`, `{% stylesheet %}`)\n- Render spies — wrap the `render` tag to record which templates were rendered\n  and with what data, enabling assertions like\n  `expect(spy).toHaveBeenCalledWith({ product })`\n- Automatic custom element detection — scan rendered HTML for non-standard tags\n  and wait for `customElements.whenDefined()` without explicit `waitForElements`\n- Visual regression helpers\n- Shadow DOM query support\n","readmeFilename":"README.md"}