{"id":"88185cfc-02a4-4839-a89b-11ba77ef2de8","shortId":"xSkZpF","kind":"skill","title":"typescript-build-tools","tagline":"TypeScript project tooling with Bun, tsgo, Vitest, Biome, and Turborepo. Use when setting up package.json scripts, running builds, typechecking, configuring tests, linting, formatting, or orchestrating monorepo development.","description":"# TypeScript Build Tools\n\nModern TypeScript build tooling stack: Bun for package management and task running, tsgo for typechecking, Vitest for testing, Biome for linting/formatting, and Turborepo for monorepo orchestration.\n\n## Additional References\n\n- [references/bun.md](./references/bun.md) - Bun package manager and task runner\n- [references/vitest.md](./references/vitest.md) - Advanced Vitest configuration patterns\n- [references/biome.md](./references/biome.md) - Biome rules and customization\n- [references/turborepo.md](./references/turborepo.md) - Turborepo monorepo orchestration\n\n## Quick Start\n\n```bash\n# Install dependencies\nbun add -D vitest @vitest/coverage-v8 @biomejs/biome\n\n# For monorepos\nbun add -D turbo\n```\n\n## Package.json Scripts\n\n### Single Package\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"bun run --watch src/index.ts\",\n    \"build\": \"bun build ./src/index.ts --outdir ./dist --target bun\",\n    \"typecheck\": \"tsgo --noEmit\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"test:coverage\": \"vitest run --coverage\",\n    \"lint\": \"biome check .\",\n    \"lint:fix\": \"biome check --write .\",\n    \"format\": \"biome format --write .\",\n    \"check\": \"bun run typecheck && bun run lint && bun run test\"\n  }\n}\n```\n\n### Monorepo Root\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"turbo dev\",\n    \"build\": \"turbo build\",\n    \"typecheck\": \"turbo typecheck\",\n    \"test\": \"turbo test\",\n    \"lint\": \"turbo lint\",\n    \"check\": \"turbo typecheck lint test\"\n  }\n}\n```\n\n## Bun\n\n### Package Manager\n\n```bash\n# Install dependencies\nbun install\n\n# Add dependencies\nbun add fastify drizzle-orm\nbun add -D vitest @biomejs/biome\n\n# Remove dependency\nbun remove package-name\n\n# Update dependencies\nbun update\n```\n\n### Task Runner\n\n**Important:** Use `bun run test` (not `bun test`) on Node projects. `bun test` invokes Bun's native test runner, not your package.json test script.\n\n```bash\n# Run script from package.json\nbun run dev\nbun run test\nbun run build\n\n# Run TypeScript directly (no build step)\nbun run src/index.ts\n\n# Watch mode\nbun run --watch src/index.ts\n\n# With environment variables\nbun run --env-file .env src/index.ts\n```\n\n### Build Command\n\n```bash\n# Basic build for Bun runtime\nbun build ./src/index.ts --outdir ./dist --target bun\n\n# For Node.js runtime\nbun build ./src/index.ts --outdir ./dist --target node\n\n# With minification\nbun build ./src/index.ts --outdir ./dist --target bun --minify\n\n# Multiple entry points\nbun build ./src/index.ts ./src/worker.ts --outdir ./dist --target bun\n```\n\nSee [references/bun.md](./references/bun.md) for bunfig.toml configuration and advanced patterns.\n\n## tsgo Typechecking\n\ntsgo is a fast TypeScript typechecker. Use it instead of `tsc` for faster CI builds.\n\n```bash\n# Typecheck without emitting\ntsgo --noEmit\n\n# Typecheck specific files\ntsgo --noEmit src/**/*.ts\n\n# With project reference\ntsgo --noEmit -p tsconfig.json\n```\n\n### tsconfig.json\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"ESNext\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"esModuleInterop\": true,\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"verbatimModuleSyntax\": true,\n    \"lib\": [\"ESNext\"],\n    \"types\": [\"bun-types\"]\n  },\n  \"include\": [\"src/**/*.ts\"],\n  \"exclude\": [\"node_modules\", \"dist\"]\n}\n```\n\n## Vitest\n\n### Basic Configuration\n\n```typescript\n// vitest.config.ts\nimport { defineConfig } from 'vitest/config'\n\nexport default defineConfig({\n  test: {\n    globals: true,\n    environment: 'node',\n    include: ['src/**/*.test.ts', 'test/**/*.test.ts'],\n    coverage: {\n      provider: 'v8',\n      reporter: ['text', 'json', 'html'],\n      include: ['src/**/*.ts'],\n      exclude: ['src/**/*.test.ts', 'src/types/**'],\n    },\n  },\n})\n```\n\n### With Path Aliases\n\n```typescript\n// vitest.config.ts\nimport { defineConfig } from 'vitest/config'\nimport tsconfigPaths from 'vite-tsconfig-paths'\n\nexport default defineConfig({\n  plugins: [tsconfigPaths()],\n  test: {\n    globals: true,\n  },\n})\n```\n\n### Global Setup (Database Migrations)\n\n```typescript\n// vitest.config.ts\nimport { defineConfig } from 'vitest/config'\n\nexport default defineConfig({\n  test: {\n    globals: true,\n    globalSetup: './test/global-setup.ts',\n    setupFiles: ['./test/setup.ts'],\n  },\n})\n```\n\n```typescript\n// test/global-setup.ts\nimport { execSync } from 'node:child_process'\n\nexport async function setup() {\n  console.log('Running database migrations...')\n  execSync('drizzle-kit migrate', { stdio: 'inherit' })\n}\n\nexport async function teardown() {\n  console.log('Test teardown complete')\n}\n```\n\nSee [references/vitest.md](./references/vitest.md) for workspace configs, benchmarks, and Cloudflare Workers pool.\n\n## Biome\n\n### Basic biome.json\n\n```json\n{\n  \"$schema\": \"https://biomejs.dev/schemas/2.0.0/schema.json\",\n  \"vcs\": {\n    \"enabled\": true,\n    \"clientKind\": \"git\",\n    \"useIgnoreFile\": true\n  },\n  \"files\": {\n    \"ignoreUnknown\": true,\n    \"ignore\": [\"dist\", \"node_modules\", \"*.gen.ts\"]\n  },\n  \"formatter\": {\n    \"enabled\": true,\n    \"indentStyle\": \"tab\",\n    \"lineWidth\": 100\n  },\n  \"javascript\": {\n    \"formatter\": {\n      \"quoteStyle\": \"double\",\n      \"trailingCommas\": \"es5\"\n    }\n  },\n  \"linter\": {\n    \"enabled\": true,\n    \"rules\": {\n      \"recommended\": true\n    }\n  },\n  \"organizeImports\": {\n    \"enabled\": true\n  }\n}\n```\n\n### Strict Rules (Production)\n\n```json\n{\n  \"linter\": {\n    \"enabled\": true,\n    \"rules\": {\n      \"recommended\": true,\n      \"complexity\": {\n        \"noForEach\": \"error\"\n      },\n      \"performance\": {\n        \"noDelete\": \"error\"\n      },\n      \"style\": {\n        \"useNodejsImportProtocol\": \"error\"\n      }\n    }\n  }\n}\n```\n\nSee [references/biome.md](./references/biome.md) for rule explanations, shareable configs, and CLI commands.\n\n## Turborepo (Monorepo)\n\n### turbo.json\n\n```json\n{\n  \"$schema\": \"https://turbo.build/schema.json\",\n  \"tasks\": {\n    \"build\": {\n      \"dependsOn\": [\"^build\"],\n      \"outputs\": [\"dist/**\"]\n    },\n    \"typecheck\": {\n      \"dependsOn\": [\"^typecheck\"]\n    },\n    \"lint\": {},\n    \"test\": {\n      \"dependsOn\": [\"^build\"],\n      \"env\": [\"DATABASE_URL\"]\n    },\n    \"dev\": {\n      \"cache\": false,\n      \"persistent\": true\n    }\n  }\n}\n```\n\n### Workspace Structure\n\n```\nmy-monorepo/\n├── package.json          # Root with turbo scripts\n├── turbo.json            # Turbo configuration\n├── biome.json            # Shared Biome config\n├── packages/\n│   ├── config-biome/     # Shareable Biome package\n│   └── shared/           # Shared utilities\n├── apps/\n│   ├── api/              # Fastify API\n│   └── web/              # React app\n└── bun.lock\n```\n\nSee [references/turborepo.md](./references/turborepo.md) for caching strategies, filtering, and CI setup.\n\n## Cloudflare Workers\n\n### Vite + Cloudflare Plugin\n\n```typescript\n// vite.config.ts\nimport { cloudflare } from '@cloudflare/vite-plugin'\nimport { reactRouter } from '@react-router/dev/vite'\nimport tailwindcss from '@tailwindcss/vite'\nimport tsconfigPaths from 'vite-tsconfig-paths'\nimport { defineConfig } from 'vite'\n\nexport default defineConfig({\n  plugins: [\n    cloudflare({ viteEnvironment: { name: 'ssr' } }),\n    tailwindcss(),\n    reactRouter(),\n    tsconfigPaths(),\n  ],\n})\n```\n\n### Vitest with Cloudflare Workers Pool\n\n```typescript\n// vitest.config.ts\nimport { defineWorkersConfig } from '@cloudflare/vitest-pool-workers/config'\n\nexport default defineWorkersConfig({\n  test: {\n    globals: true,\n    pool: '@cloudflare/vitest-pool-workers',\n    poolOptions: {\n      workers: {\n        wrangler: { configPath: './wrangler.jsonc' },\n      },\n    },\n  },\n})\n```\n\n## CI Pipeline\n\n### GitHub Actions\n\n```yaml\nname: typescript-build-tools\n\non:\n  push:\n    branches: [main]\n  pull_request:\n\njobs:\n  check:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n\n      - uses: oven-sh/setup-bun@v2\n        with:\n          bun-version: latest\n\n      - run: bun install --frozen-lockfile\n\n      - run: bun run typecheck\n      - run: bun run lint\n      - run: bun run test\n```\n\n### Monorepo CI with Turbo\n\n```yaml\nname: typescript-build-tools\n\non:\n  push:\n    branches: [main]\n  pull_request:\n\njobs:\n  check:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n\n      - uses: oven-sh/setup-bun@v2\n\n      - run: bun install --frozen-lockfile\n\n      - run: bun run check  # turbo typecheck lint test\n        env:\n          TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}\n          TURBO_TEAM: ${{ vars.TURBO_TEAM }}\n```\n\n## Guidelines\n\n1. **Use Bun** as package manager (`bun install`) and task runner (`bun run`)\n2. **Use `bun run test`** (not `bun test`) - `bun test` runs Bun's native test runner\n3. **Use tsgo** for typechecking - faster than `tsc` for CI\n4. **Use Vitest** for testing - fast, ESM-native, great DX\n5. **Use Biome** for linting and formatting - single tool, fast\n6. **Use Turborepo** for monorepos - caching, parallel execution\n7. **Enable V8 coverage** in Vitest for accurate coverage reports\n8. **Configure global setup** for database migrations in tests\n9. **Use workspace configs** in Vitest for different test pools\n10. **Share Biome config** via workspace package in monorepos\n11. **Run checks in order**: typecheck, lint, test (fail fast)\n12. **Use `--frozen-lockfile`** in CI for reproducible builds\n13. **Configure Turbo caching** for faster CI with remote cache","tags":["typescript","build","tools","atelier","martinffx","agent-skills","agentic-coding","anthropic","claude-code","claude-skills","code-review","codex"],"capabilities":["skill","source-martinffx","skill-typescript-build-tools","topic-agent-skills","topic-agentic-coding","topic-anthropic","topic-claude-code","topic-claude-skills","topic-code-review","topic-codex","topic-codex-skill","topic-opencode","topic-prompt-engineering","topic-sdd","topic-spec-driven-development"],"categories":["atelier"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/martinffx/atelier/typescript-build-tools","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add martinffx/atelier","source_repo":"https://github.com/martinffx/atelier","install_from":"skills.sh"}},"qualityScore":"0.461","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 23 github stars · SKILL.md body (9,343 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:05:24.799Z","embedding":null,"createdAt":"2026-05-10T07:03:13.320Z","updatedAt":"2026-05-18T19:05:24.799Z","lastSeenAt":"2026-05-18T19:05:24.799Z","tsv":"'/dev/vite':697 '/dist':121,293,303,312,324 '/references/biome.md':78,597 '/references/bun.md':64,329 '/references/turborepo.md':84,672 '/references/vitest.md':72,522 '/schema.json':613 '/schemas/2.0.0/schema.json':538 '/setup-bun':780,837 '/src/index.ts':119,291,301,310,321 '/src/worker.ts':322 '/test/global-setup.ts':486 '/test/setup.ts':488 '/wrangler.jsonc':747 '1':863 '10':960 '100':560 '11':969 '12':979 '13':989 '2':876 '3':892 '4':902 '5':913 '6':923 '7':931 '8':941 '9':950 'accur':938 'action':751 'actions/checkout':774,831 'add':94,102,192,195,201 'addit':61 'advanc':73,334 'alias':447 'api':663,665 'app':662,668 'async':498,513 'bash':90,187,242,283,353 'basic':284,410,532 'benchmark':526 'biom':12,53,79,139,143,147,531,650,655,657,915,962 'biome.json':533,648 'biomejs.dev':537 'biomejs.dev/schemas/2.0.0/schema.json':536 'biomejs/biome':98,204 'branch':760,817 'build':3,22,33,37,116,118,167,169,255,260,281,285,290,300,309,320,352,615,617,626,756,813,988 'bun':9,40,65,93,101,112,117,123,151,154,157,184,190,194,200,207,214,220,224,229,232,247,250,253,262,267,274,287,289,295,299,308,314,319,326,400,784,788,794,798,802,840,846,865,869,874,878,882,884,887 'bun-typ':399 'bun-vers':783 'bun.lock':669 'bundler':381 'bunfig.toml':331 'cach':631,674,928,992,998 'check':140,144,150,179,765,822,848,971 'child':495 'ci':351,678,748,806,901,985,995 'cli':604 'clientkind':542 'cloudflar':528,680,683,688,717,726 'cloudflare/vite-plugin':690 'cloudflare/vitest-pool-workers':742 'cloudflare/vitest-pool-workers/config':734 'command':282,605 'compileropt':375 'complet':519 'complex':586 'config':525,602,651,654,953,963 'config-biom':653 'configpath':746 'configur':24,75,332,411,647,942,990 'console.log':501,516 'coverag':134,137,431,934,939 'custom':82 'd':95,103,202 'databas':471,503,628,946 'default':419,462,480,714,736 'defineconfig':415,420,451,463,476,481,710,715 'defineworkersconfig':732,737 'depend':92,189,193,206,213 'dependson':616,621,625 'dev':111,164,166,249,630 'develop':31 'differ':957 'direct':258 'dist':408,550,619 'doubl':564 'drizzl':198,507 'drizzle-kit':506 'drizzle-orm':197 'dx':912 'emit':356 'enabl':540,555,568,574,581,932 'entri':317 'env':277,279,627,853 'env-fil':276 'environ':272,424 'error':588,591,594 'es5':566 'esm':909 'esm-nat':908 'esmoduleinterop':388 'esnext':377,379,397 'exclud':405,441 'execsync':492,505 'execut':930 'explan':600 'export':418,461,479,497,512,713,735 'fail':977 'fals':632 'fast':341,907,922,978 'faster':350,897,994 'fastifi':196,664 'file':278,361,546 'filter':676 'fix':142 'format':27,146,148,919 'formatt':554,562 'frozen':791,843,982 'frozen-lockfil':790,842,981 'function':499,514 'gen.ts':553 'git':543 'github':750 'global':422,467,469,483,739,943 'globalsetup':485 'great':911 'guidelin':862 'html':437 'ignor':549 'ignoreunknown':547 'import':218,414,450,454,475,491,687,691,698,702,709,731 'includ':402,426,438 'indentstyl':557 'inherit':511 'instal':91,188,191,789,841,870 'instead':346 'invok':231 'isolatedmodul':392 'javascript':561 'job':764,821 'json':109,162,374,436,534,579,609 'kit':508 'latest':771,786,828 'lib':396 'linewidth':559 'lint':26,138,141,156,176,178,182,623,800,851,917,975 'linter':567,580 'linting/formatting':55 'lockfil':792,844,983 'main':761,818 'manag':43,67,186,868 'migrat':472,504,509,947 'minif':307 'minifi':315 'mode':266 'modern':35 'modul':378,407,552 'moduleresolut':380 'monorepo':30,59,86,100,160,607,639,805,927,968 'multipl':316 'my-monorepo':637 'name':211,719,753,810 'nativ':234,889,910 'node':227,305,406,425,494,551 'node.js':297 'nodelet':590 'noemit':126,358,363,370,386 'noforeach':587 'orchestr':29,60,87 'order':973 'organizeimport':573 'orm':199 'outdir':120,292,302,311,323 'output':618 'oven':778,835 'oven-sh':777,834 'p':371 'packag':42,66,108,185,210,652,658,867,966 'package-nam':209 'package.json':19,105,239,246,640 'parallel':929 'path':446,460,708 'pattern':76,335 'perform':589 'persist':633 'pipelin':749 'plugin':464,684,716 'point':318 'pool':530,728,741,959 'poolopt':743 'process':496 'product':578 'project':6,228,367 'provid':432 'pull':762,819 'push':759,816 'quick':88 'quotestyl':563 'react':667,695 'react-rout':694 'reactrout':692,722 'recommend':571,584 'refer':62,368 'references/biome.md':77,596 'references/bun.md':63,328 'references/turborepo.md':83,671 'references/vitest.md':71,521 'remot':997 'remov':205,208 'report':434,940 'reproduc':987 'request':763,820 'resolvejsonmodul':390 'root':161,641 'router':696 'rule':80,570,577,583,599 'run':21,46,113,129,136,152,155,158,221,243,248,251,254,256,263,268,275,502,767,787,793,795,797,799,801,803,824,839,845,847,875,879,886,970 'runner':70,217,236,873,891 'runs-on':766,823 'runtim':288,298 'schema':535,610 'script':20,106,110,163,241,244,644 'secrets.turbo':856 'see':327,520,595,670 'set':17 'setup':470,500,679,944 'setupfil':487 'sh':779,836 'share':649,659,660,961 'shareabl':601,656 'singl':107,920 'skill' 'skill-typescript-build-tools' 'skiplibcheck':384 'source-martinffx' 'specif':360 'src':364,403,427,439,442 'src/index.ts':115,264,270,280 'src/types':444 'ssr':720 'stack':39 'start':89 'stdio':510 'step':261,772,829 'strategi':675 'strict':382,576 'structur':636 'style':592 'tab':558 'tailwindcss':699,721 'tailwindcss/vite':701 'target':122,294,304,313,325,376 'task':45,69,216,614,872 'team':859,861 'teardown':515,518 'test':25,52,127,130,133,159,173,175,183,222,225,230,235,240,252,421,429,466,482,517,624,738,804,852,880,883,885,890,906,949,958,976 'test.ts':428,430,443 'test/global-setup.ts':490 'text':435 'token':855,857 'tool':4,7,34,38,757,814,921 'topic-agent-skills' 'topic-agentic-coding' 'topic-anthropic' 'topic-claude-code' 'topic-claude-skills' 'topic-code-review' 'topic-codex' 'topic-codex-skill' 'topic-opencode' 'topic-prompt-engineering' 'topic-sdd' 'topic-spec-driven-development' 'trailingcomma':565 'true':383,385,387,389,391,393,395,423,468,484,541,545,548,556,569,572,575,582,585,634,740 'ts':365,404,440 'tsc':348,899 'tsconfig':459,707 'tsconfig.json':372,373 'tsconfigpath':455,465,703,723 'tsgo':10,47,125,336,338,357,362,369,894 'turbo':104,165,168,171,174,177,180,643,646,808,849,854,858,991 'turbo.build':612 'turbo.build/schema.json':611 'turbo.json':608,645 'turborepo':14,57,85,606,925 'type':398,401 'typecheck':23,49,124,153,170,172,181,337,343,354,359,620,622,796,850,896,974 'typescript':2,5,32,36,257,342,412,448,473,489,685,729,755,812 'typescript-build-tool':1,754,811 'ubuntu':770,827 'ubuntu-latest':769,826 'updat':212,215 'url':629 'use':15,219,344,773,776,830,833,864,877,893,903,914,924,951,980 'useignorefil':544 'usenodejsimportprotocol':593 'util':661 'v2':781,838 'v4':775,832 'v8':433,933 'variabl':273 'vars.turbo':860 'vcs':539 'verbatimmodulesyntax':394 'version':785 'via':964 'vite':458,682,706,712 'vite-tsconfig-path':457,705 'vite.config.ts':686 'viteenviron':718 'vitest':11,50,74,96,128,132,135,203,409,724,904,936,955 'vitest.config.ts':413,449,474,730 'vitest/config':417,453,478 'vitest/coverage-v8':97 'watch':114,131,265,269 'web':666 'without':355 'worker':529,681,727,744 'workspac':524,635,952,965 'wrangler':745 'write':145,149 'yaml':752,809","prices":[{"id":"1380b9ae-1c89-4179-a375-ec216568b1bf","listingId":"88185cfc-02a4-4839-a89b-11ba77ef2de8","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"martinffx","category":"atelier","install_from":"skills.sh"},"createdAt":"2026-05-10T07:03:13.320Z"}],"sources":[{"listingId":"88185cfc-02a4-4839-a89b-11ba77ef2de8","source":"github","sourceId":"martinffx/atelier/typescript-build-tools","sourceUrl":"https://github.com/martinffx/atelier/tree/main/skills/typescript-build-tools","isPrimary":false,"firstSeenAt":"2026-05-10T07:03:13.320Z","lastSeenAt":"2026-05-18T19:05:24.799Z"}],"details":{"listingId":"88185cfc-02a4-4839-a89b-11ba77ef2de8","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"martinffx","slug":"typescript-build-tools","github":{"repo":"martinffx/atelier","stars":23,"topics":["agent-skills","agentic-coding","anthropic","claude-code","claude-skills","code-review","codex","codex-skill","opencode","prompt-engineering","sdd","spec-driven-development"],"license":"mit","html_url":"https://github.com/martinffx/atelier","pushed_at":"2026-05-18T06:56:45Z","description":"An atelier for Opencode, Claude Code, and other coding agents: spec-driven workflows, deep thinking, and code quality.","skill_md_sha":"c606ac824cf08356675be2e9d3b86d7ff52698e3","skill_md_path":"skills/typescript-build-tools/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/martinffx/atelier/tree/main/skills/typescript-build-tools"},"layout":"multi","source":"github","category":"atelier","frontmatter":{"name":"typescript-build-tools","description":"TypeScript project tooling with Bun, tsgo, Vitest, Biome, and Turborepo. Use when setting up package.json scripts, running builds, typechecking, configuring tests, linting, formatting, or orchestrating monorepo development."},"skills_sh_url":"https://skills.sh/martinffx/atelier/typescript-build-tools"},"updatedAt":"2026-05-18T19:05:24.799Z"}}