#!/usr/bin/env node // SSR smoke check: boots the fixture Journal and SEO API and a built Nuxt // server, then checks each line of an expectations file. // // node smoke-ssr.mjs --output <.output dir> --fixtures --expect [--env KEY=VALUE]... // // Expectation grammar, one check per line ('#' starts a comment line): // STATUS PATH [contains=TEXT] [notcontains=TEXT] [count=TEXT:N] [type=PREFIX] // [header=NAME: VALUE] [noheader=NAME] [headings=strict] // [cardlinks=N] // resolves PATH N the fixture SEO API has seen exactly N resolve calls for // PATH so far (PATH * counts every resolve call) // A value runs until the next ` contains=`, ` notcontains=`, ` count=`, // ` type=`, ` header=`, ` noheader=` or the end of the line, so it may // contain spaces. Every option may repeat on a line and every occurrence // applies. count= wants exactly N occurrences of TEXT in the body (N is the // number after the last colon); header= wants the response header NAME to // equal VALUE (both trimmed); noheader= wants it absent. The same grammar // as vue-seo-layer's testing/smoke-ssr.mjs, plus two checks of the // heading and card rules (UI-SPEC L5, L6), both on the markup outside //