{"_id":"yamltest","_rev":"25-9e7405e1eadb59613f2eeb0009c07dd8","name":"yamltest","dist-tags":{"latest":"1.5.1"},"versions":{"1.0.0":{"name":"yamltest","version":"1.0.0","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.0.0","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTests":"src/cli.js"},"dist":{"shasum":"3f50b7d4c39bc59755b8c1fc3fe3e9e11219e2cc","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.0.0.tgz","fileCount":6,"integrity":"sha512-rhG0FqNEujFzSgS00b1xas/NlmgEnqj/d3CRPF5udV8LuVsuvKJgSd29/md8CxSBGoVglZg3dUtBqTJdfEhIPw==","signatures":[{"sig":"MEUCIQDyijsVnlypkeQL8Ie1QNLyJEWamYyJHwJe0e9tfc9dYQIgGi/s9amZVhgo0mIvtSUa3oeO9GEuKFFAPfaAJHPCSm8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98736},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"2c69fac053f7251c4dbb55f44e26acda02f18043","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","jsonpath-plus":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.0","@vitest/coverage-v8":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.0.0_1771412092238_0.14566543300474577","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"yamltest","version":"1.0.1","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.0.1","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"72579290331b71b1db0f818620546aa1811acb4e","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.0.1.tgz","fileCount":6,"integrity":"sha512-ZCAnisblfXerUYnZpqlUsp2UfWiLX7A+OHMp0tHdHlp+W/fK14doEvIcDrdtSWZq1YZnXVWItMME42ZaDDTJbw==","signatures":[{"sig":"MEUCIQCcqc17CkLfJVXTWIceI2UUyceTRwRhXqjUnHP9X2IkVgIgOmgpeqFf5ucLdzyO4aiAlLjIQMtoB/7IbO0FBGWsOQg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98753},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"db4c4148d3d0cc067069409a65dc29ce326ebb14","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","jsonpath-plus":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.0","@vitest/coverage-v8":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.0.1_1771412662136_0.25119825461384715","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"yamltest","version":"1.0.2","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.0.2","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"09abec373c7991335ef94b83199f77c20f4b0e20","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.0.2.tgz","fileCount":6,"integrity":"sha512-SP2GYaeE6qB5GcueuKnRuY/N56KYYXy5FfMdXOdcUqzfUjAt4iHwBp9TG8f1vDkic9uNEGEZ0PjDvJx9lYA5dg==","signatures":[{"sig":"MEUCIQDvuIVaOQTOeD0uSoSp500jm7nBJUBr8+nvWJkhi/GwNgIgN6zorRmQhroK7Eo0ZUcZ0L3O7PJHfiQm8Tr1B3hfftY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99539},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"7457d4a5ba7d569593fee10c7b71539455391c84","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","jsonpath-plus":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.0","@vitest/coverage-v8":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.0.2_1771414157854_0.3906121687033277","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"yamltest","version":"1.0.3","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.0.3","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"a6250732d970df99f39b6650c46ed14417ed3939","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.0.3.tgz","fileCount":6,"integrity":"sha512-PKEaj6yRhpGgTvkBZsZ0Qk6kKPWlTQ2SjCdVIzZA6vmr6NUUZb1Xx5Js6aY/bGrxpQW6LDJOHXCtlAAmkf2AWg==","signatures":[{"sig":"MEUCIQCUvWkHrQ1BIX5L1w96+ZsPfOlsAjINEWUR8ExFg1XrgwIgPhEXvkdIkizPBVQancZzVtPMirb7oNdcfG6/NwAKfLI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108778},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"6629ef75f4ed805a1c44fd7491d30f2a143dd3b6","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","jsonpath-plus":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.0","@vitest/coverage-v8":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.0.3_1771507835051_0.3784119011895344","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"yamltest","version":"1.0.4","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.0.4","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"dee5870c25636827ada9dc3b9fa7d11ddb0c91e0","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.0.4.tgz","fileCount":6,"integrity":"sha512-8MwIabxSTpV3EtkrAjZUpgE33XaKxkhfe83EHJw3Z+Eobe6dupF+N1znfAo7HIMv5/SgjUVT0uzd+eyAPaK6qw==","signatures":[{"sig":"MEQCIGcaigfgZiAAa+iQaurdGYaF7Y1Z6nVpuk1U4hbL0h3bAiAGR7lVrRQ7DwSBD2dTmOu+k1U/xx7vXIaho20sBict5w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109610},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"4de01d11d100036d2b57c53d06a07e8ffb5511e4","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","jsonpath-plus":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.0","@vitest/coverage-v8":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.0.4_1772217017316_0.16043488191926025","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"yamltest","version":"1.0.5","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.0.5","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"d88fae289e59b87dbf08485ed4f16a9a86eca84b","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.0.5.tgz","fileCount":6,"integrity":"sha512-NBterFWG90mwkKWhnY0wBycDOJR4GlInyuVuUKK2rtTtDcaZkRJZ1BegEQaz7HYu/siKhedqZIfg77ZkF1kC2A==","signatures":[{"sig":"MEQCIAuANabOmbo1mOLke9qsBdC9iIjQ1a9KWEviKJH19sN/AiAbvHGa1zCHeXg2bol4FXKOkvMUsTlXpEMuQm0SZ5VGUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109632},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"7e8aaac76c4b49b21041ea5a1b52c97bebd91e54","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","jsonpath-plus":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.0","@vitest/coverage-v8":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.0.5_1772635969655_0.8459358174167686","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"yamltest","version":"1.1.0","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.1.0","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"3af1b00887547504d52e8fe9547f1c523611d83f","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.1.0.tgz","fileCount":7,"integrity":"sha512-0GRVuREga3T//flzl8rTZszmPqlrpI+y/akVp0qTZZdffnqs6StKcD5JtBbwdcRnVFpnk/BjYGUTX3vjIOcvMA==","signatures":[{"sig":"MEQCIEwG+I2WObmFlIdcx5/I07f7ob+4NYItW3oCkQtsiW9MAiBhsCrz7ccaZHRP8YV/xu71ZGmXaN5Hy1qZsHmahBVLVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129211},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"adde5fb84815b46b81392fbdcbd0c70bca40d1f9","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.0","@vitest/coverage-v8":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.1.0_1773048865156_0.44955837602326754","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"yamltest","version":"1.1.1","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.1.1","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"e74a4ee744abd8a51e5dbfd4fdbcd8a47282e99f","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.1.1.tgz","fileCount":7,"integrity":"sha512-c8zlrrE4UEbmHtP7VtqWBrDnMXHwYcx8ZsovZRVOburjnA/WnWtvOO6APxPr58sGAokUptVZOiTM3V9OqwduEw==","signatures":[{"sig":"MEYCIQC6z91g47svJqUQkiogIx99+0qFRrNqZaR9Nwg7rrjGWgIhAPDfOYf0KKmINEZfe0T/SG6Q+8ZbPdFmrg61cwNac6PR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129210},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"78f6d65180da7c73658bdf4d81ec705727e56c71","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.0","@vitest/coverage-v8":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.1.1_1773049616127_0.02280964031809285","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"yamltest","version":"1.1.2","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.1.2","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"9e46447b1b2d3c9f4d9e88d8cc82fd0d4131babd","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.1.2.tgz","fileCount":7,"integrity":"sha512-qHf+GauQDi8Fz1foY/Uyl5p6fDHD9GXK47nWaHLwttK4/0Up7DBECuAm/DT6Yu3mbpW4jHQt4duCPv8bDXpyOA==","signatures":[{"sig":"MEQCIAZDKFyFxE7AC9M20z9zIeqGpAm4sd+5Jr2Miw88k9ryAiA38WDqUWu+J/izgwgw7G5i+iOkhfAhe4y8ZDXw9fBYNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129262},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"f2b2815102186499754eb91ed1ca36874ddefb5d","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.0","@vitest/coverage-v8":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.1.2_1773057485998_0.12299259777596738","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"yamltest","version":"1.1.3","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.1.3","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"269498ce3c590dc711b17572547dec8cc76c371a","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.1.3.tgz","fileCount":7,"integrity":"sha512-7UjkpPQLx+ESOMmhZOiD+NssBahcNPRzlqsixA6RdhvHnINlsYKcPARj0t1WenJOF4Y9yzNsraClHQqPdEweGg==","signatures":[{"sig":"MEUCIQCZLQEOYm+G5AblMeFirHAPfoCS6bb+RpaJwctHNIIB9AIgTdZ93anWJ1yOLtW/AAAQjie/4UHDX43LEoGfLj+G3K4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129322},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"cc3614170cb940e0ba9c1d36aa70000ee44afb5f","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.0","@vitest/coverage-v8":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.1.3_1773066232922_0.9131640697193153","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"yamltest","version":"1.1.4","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.1.4","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"ff7b25dd6b7d368b4200330f8d592b45e8c56656","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.1.4.tgz","fileCount":7,"integrity":"sha512-IemixmTMA4/4qI3bba5gakNw2wF0iUa6R0lXBa+2g88s8K2HHRlX2gfSdBNZ8i97YlJ0jFzrZh63f4jbR6/LQg==","signatures":[{"sig":"MEUCIQCRDzD6UmYQ4F1LG2/Kw5RB/6E2Xok/xChbhDBfnKMrBAIgBCAZbWJR1QYWeZEX4UObf2ngFIz4k2Om5+XfilMqbvo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129344},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"a1f00137a7c74da33aafaac40eb8126e65105136","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.0","@vitest/coverage-v8":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.1.4_1773069571681_0.7936655127278909","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"yamltest","version":"1.2.0","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.2.0","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"a89a6e3b6d720f7b37f992b73333089277a3d877","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.2.0.tgz","fileCount":7,"integrity":"sha512-MrWYy/el3zoaqaTTFVpmtSFoaicHEPiM7F8QjqbU5HSKtcLDmwB1ffRQhvHF5O0PT//KyCcCHzcmZaPEVizb5w==","signatures":[{"sig":"MEUCIEzo/GHyWSWDnPrs3/uXmNKdk6JBRiffDfs25L8hVgvCAiEA8iKrhNmFjruK7e0mElI/Xsnj06dn0O91aFW8ular/zU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132691},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"6ee20f4c26d8c9eb5b42f13d4ba584bc8cca8d0b","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.0","@vitest/coverage-v8":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.2.0_1776153118617_0.588746198852441","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"yamltest","version":"1.2.1","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.2.1","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"85d34bfa12ac37fd0ac012a11b09ef2c1f2815a3","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.2.1.tgz","fileCount":7,"integrity":"sha512-U2P5xnH7a7KnE6cHTLObCgE7JWumRHMSbEwHEyyR6FanPEudppMJn+DIfI16kQTmVaU/SLvAFtQWNmcTHQxTMQ==","signatures":[{"sig":"MEQCIExvO03p8obgbU+zR9Ef97oMUb93T+ws95WaXT5ly1SeAiAnobUFDszZ0YF2y6yj1O1wWJKr1pFQVVvmc9lwrKGa4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132696},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"4c39afa571aecc272686fd7273fb6ccf0d13d7b1","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.0","@vitest/coverage-v8":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.2.1_1777380001125_0.43548541600817714","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"yamltest","version":"1.2.2","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.2.2","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"15d4389f4138df250470d87baf67d4aea3fb4979","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.2.2.tgz","fileCount":7,"integrity":"sha512-Bg2sDqTriXCor/57CRi3OZUd3o/w+vkI9MB4k/NWRmwJEr4UxWgHJBJRFMLCRqVlniLLwMQnOkCpy8Rlhvd/MA==","signatures":[{"sig":"MEQCICMRW1LedKSmRRLxNQTNCTTRaV8FT07xUULUm614+afjAiAVgb1q68uu2xS1RaiSoQ4v1/uPcIgoPPNbEMLGkGG/pA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132697},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"636b42a2e14c5a5ca4014f98a2eae54d1813b16b","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.7","@vitest/coverage-v8":"^4.1.7"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.2.2_1779359452551_0.9613221542097947","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"yamltest","version":"1.2.3","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.2.3","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"a01740afdf5ebc1b546e3c7815ffa998022f87a2","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.2.3.tgz","fileCount":7,"integrity":"sha512-28+guHP1+W9nWU+iDbDmNfTd11kXStgpJ1lozAEOBgJWoE+yf/eZOO783S/yn7MXlbRoIkEs46PIVLG8ya6XJw==","signatures":[{"sig":"MEQCIBML41HwGgeshuGvo/FCKgrnNw2soLe9h2LKmyGTMzAqAiBsD1nuKYubso6QApRPQNHu/e7xsZbkaJbvXRLi13+zmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132941},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"a762c54e7614197a93fd7503e7ab96d40205976f","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.7","@vitest/coverage-v8":"^4.1.7"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.2.3_1781688477683_0.4887315227060791","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"yamltest","version":"1.2.4","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.2.4","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"fc937307d3119a8d86b31cfec34bf8f9d5004015","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.2.4.tgz","fileCount":7,"integrity":"sha512-x6SML8nT6zm+diiwoJ3lWZgZj0YUk8FWIYWcBnC9wK4XFkUGb1xCXkRAEP2XJzn6QtwQxRzl6bUx6rjn38lFMQ==","signatures":[{"sig":"MEUCIQDQ9OnNbE4YSjgMmTvd8H4zA6R0AWYqeNERpSxc7lXVVwIgVAZ54t3dbQGBLjTzx/lTN4JhevGls5Mah5zTcf6u/ek=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":133753},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"891938a5c691ec1185153cabe004a5b37b4093c7","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.7","@vitest/coverage-v8":"^4.1.7"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.2.4_1782455937497_0.8099591192855164","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"yamltest","version":"1.3.0","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.3.0","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"06d68e079f075aacecd18db4450d90fa1f506750","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.3.0.tgz","fileCount":7,"integrity":"sha512-EAjobPfkNcgzGtO/5KOHT7/hPmrdcjxCoKcbgg4B4IvV6SmOJo1P4F83UI5J3kv7wsrbM5Px2JvVXw+conM7Cg==","signatures":[{"sig":"MEYCIQChFv2GRtPqWWxXcTmvplSfsX533fJSWV7pFIDNnDl5RAIhAIG8uUAoU/m7C++GdwzVYy3NW7bA4DWGss6PsfsC2ZCh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":143108},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"cb204afba299d8e8a1ee3dd113bc68af38b35b1d","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.7","@vitest/coverage-v8":"^4.1.7"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.3.0_1782469056733_0.016242749663746503","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"yamltest","version":"1.3.1","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.3.1","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"9cbd4bf20972068926fad640ca740f17b0894282","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.3.1.tgz","fileCount":7,"integrity":"sha512-gzC9mKlTk1mRGWq1V8QPBZ/3ifxQPE/doJ2OY1agHgIIFF1TG35o7YV1PsdKT8SBJKLjRirIAgxRcRwTYaA28Q==","signatures":[{"sig":"MEUCIQDFAKThVOFEUWiQqIgNi9Cv3AYjP+JyafNrn5OW+jHfywIgaw2Av2IDOtUO2pKfx5UMEoauplmpGvfatiOeT0gsjWI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144234},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"80d96f4a7946b51aac8c6f5f1ef8493d8ba67928","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.7","@vitest/coverage-v8":"^4.1.7"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.3.1_1782475355683_0.8771252943824253","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"yamltest","version":"1.3.2","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.3.2","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"ad90315368d7fc631e1b4a68a994f9b2c5a584ed","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.3.2.tgz","fileCount":7,"integrity":"sha512-UfD+H1KbFjjsO21vGNZhge7WTji8QmW9W3kKdjEXvKD8P2NcfVeTsJZ5/5yxfsCb3OLu4GZ+y0aZL1ui9eSopg==","signatures":[{"sig":"MEUCIAsto4fXkHHpB+N3+F5SccP8XsRhnbVHZEAUERmzHs2IAiEAyS1+5ZL/h6KHEcxfat1dt+oynW0FoTKMs+JbVpaNKKU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145943},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"251f8a47c1afb4041bde7b8afb765107441aefaa","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.7","@vitest/coverage-v8":"^4.1.7"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.3.2_1782480919026_0.32653604995245034","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"yamltest","version":"1.3.3","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.3.3","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"edf3588376eaf298505b4dd420db1a1a5b7072a3","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.3.3.tgz","fileCount":7,"integrity":"sha512-yWosmzx9qgAwKcObtOWQympslKi6WZf67rzenmY2gR0Ow2ROoesH3F7BHHt/OPmBpGjQXPyVh8pObk8ZQP2b1w==","signatures":[{"sig":"MEYCIQCqmuYZAxIP/gKnwPHyZ2sWrwuQN2vEsXvPsySZ4MNwJgIhAKXx/95xYukeBt4VYH5JbLPXX9IsO6KHrGb7BYdLv2Dp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":146391},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"c25d19c300eb146b1c44e2025648003a20c29977","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.7","@vitest/coverage-v8":"^4.1.7"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.3.3_1784635426919_0.33622362762191305","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"yamltest","version":"1.3.4","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.3.4","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"a4fff220254580c6aae0dd52e1531e0ff9a591e7","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.3.4.tgz","fileCount":7,"integrity":"sha512-ToageYe1bxXvqimRib5ork1/pVysM0abKd3PEp/LqHw1d+zn78YaHWi95A/i7nxZcjcVBgT7ufB0eu36Q6nl+w==","signatures":[{"sig":"MEUCIHVXe5dyFGegLzks2grZns8rU6WOO9Mkwykn+NpjayCaAiEA8P00nXOEx1fYQwD/vJ8b6lHPxWH9xUozbUJ5tZVNZXA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148684},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"46849dc263b5360ed64f86ec6077f794069c9feb","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.7","@vitest/coverage-v8":"^4.1.7"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.3.4_1786346932777_0.7981166494443834","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"yamltest","version":"1.4.0","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.4.0","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"300d85409b877d3162f211a18090dce5b8cc9428","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.4.0.tgz","fileCount":7,"integrity":"sha512-ZXW1COYUBA4bRSsQ6LCW0m8clvrgm3BWt+/N94gZzIOddzIRnsvL+2Y3q+4yYq3DTTxoBXjLVS3GXBPXtvzthg==","signatures":[{"sig":"MEQCIDsiuQnQxofvwNILyTmMOhMJZRAO9L9sTiFKdaXbkBMQAiA8EJgD1g/+VBjxhXHJPsJ5+rU/NdYNXSzjrutW6KTtaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156824},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"daa95d25c2763c09860a3bbd89613987fc405f69","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.7","@vitest/coverage-v8":"^4.1.7"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.4.0_1786347021389_0.6725456361953965","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"yamltest","version":"1.4.1","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.4.1","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"0ace52da2f681dcbefdd2e4d064af5f785488a31","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.4.1.tgz","fileCount":7,"integrity":"sha512-44ORxNEHAq2HifBY3x3J9bgGgzodzGf1t+O3qoz23lEusfY0xbpIKx2nwd6gW9NgQQU+nf7bYfZAnnarsQukOQ==","signatures":[{"sig":"MEUCIQDIn+k+wPqGcJ/2N/6P9EENeyeqBpCRx6sXN1bM+OaAlgIgA18aK0OLnPQzaLcTL0h3D0+GVZUJQHKNEUFPw2BRh4g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":157103},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"11608ad92609fc751344e526e6a1b204450b38d7","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"10.9.2","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.7","@vitest/coverage-v8":"^4.1.7"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.4.1_1787065067845_0.24974930609618906","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"yamltest","version":"1.5.0","keywords":["yaml","test","http","kubernetes","declarative","testing"],"author":"","license":"MIT","_id":"yamltest@1.5.0","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"fc2306044e422bc38692dd9501c18f744b5bce94","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.5.0.tgz","fileCount":7,"integrity":"sha512-mKrt1A/CFs58g4a9CTtD73uC4zPSiA1uNkaPH3awyK7iYxLEUTxGx76yOJcgvFqcBPhHWwUq6gEtQcLDmi9I3w==","signatures":[{"sig":"MEUCIF4vmsNMXqur79TNpvPJh5fnlg2BrkMFN679Hu1Q3h15AiEA1mA/zXIs5b8GoUks4cF89Unm+xQgVyKmqg/uSvjOrlE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":163553},"main":"./src/index.js","engines":{"node":">=18.0.0"},"gitHead":"e3b123fa847210c8cc37446f366c4965d97f602a","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"_npmVersion":"11.19.0","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"_nodeVersion":"26.7.0","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.7","@vitest/coverage-v8":"^4.1.7"},"_npmOperationalInternal":{"tmp":"tmp/yamltest_1.5.0_1789025921151_0.8089234366747864","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"_id":"yamltest@1.5.1","bin":{"YAMLTest":"src/cli.js","yamltest":"src/cli.js"},"dist":{"shasum":"f9ae3290d5e0a1b0d45fa3d266e2d0881bceecb5","tarball":"https://registry.npmjs.org/yamltest/-/yamltest-1.5.1.tgz","fileCount":7,"integrity":"sha512-Keu2WnJKVqqiV0e7tRvnR0NzIraQNUkS4sUo9im5kpMm2Fpza5ztY/iKKRg/N+4U/TzDKY4CWxmwzULymWXOsQ==","signatures":[{"sig":"MEQCIHZXdvcGCIrlD63Niv36u1Ec37tlzyUYBkq9vLV4uZS5AiBsP1qtwb8NfBFnQTuNIKfNTx35MAHnRO3W/inrWiJcvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD4k9TO/dTlSylA8gcj83It6vOQA/48iNN/c3TIJWiH/AIgeazzc9QB/+6x0aKTTrS9VH48i6aOKTTsNetfuXYh03w="}],"unpackedSize":164999},"main":"./src/index.js","name":"yamltest","author":"","engines":{"node":">=18.0.0"},"gitHead":"b2366f0abe21aab10ba057de63ef73d3f7d8024d","license":"MIT","scripts":{"test":"vitest run","test:e2e":"vitest run test/e2e","test:unit":"vitest run test/unit","test:watch":"vitest","test:kubectl":"vitest run test/e2e/kubectl.test.js","test:coverage":"vitest run --coverage","test:integration":"vitest run test/integration"},"version":"1.5.1","_npmUser":{"name":"djannot","email":"djannot@gmail.com"},"keywords":["yaml","test","http","kubernetes","declarative","testing"],"_npmVersion":"11.19.0","description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","directories":{},"maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"_nodeVersion":"26.7.0","dependencies":{"ajv":"^8.18.0","axios":"^1.6.0","js-yaml":"^4.1.0","fs-extra":"^11.2.0","deep-diff":"^1.0.2","ajv-errors":"^3.0.0","jsonpath-plus":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.7","@vitest/coverage-v8":"^4.1.7"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/yamltest_1.5.1_1790186143224_0.40073143723272975"}}},"time":{"created":"2026-02-18T10:54:52.237Z","modified":"2026-09-23T17:55:43.489Z","1.0.0":"2026-02-18T10:54:52.378Z","1.0.1":"2026-02-18T11:04:22.301Z","1.0.2":"2026-02-18T11:29:18.001Z","1.0.3":"2026-02-19T13:30:35.283Z","1.0.4":"2026-02-27T18:30:17.482Z","1.0.5":"2026-03-04T14:52:49.787Z","1.1.0":"2026-03-09T09:34:25.308Z","1.1.1":"2026-03-09T09:46:56.284Z","1.1.2":"2026-03-09T11:58:06.229Z","1.1.3":"2026-03-09T14:23:53.075Z","1.1.4":"2026-03-09T15:19:31.822Z","1.2.0":"2026-04-14T07:51:58.774Z","1.2.1":"2026-04-28T12:40:01.256Z","1.2.2":"2026-05-21T10:30:52.735Z","1.2.3":"2026-06-17T09:27:57.815Z","1.2.4":"2026-06-26T06:38:57.651Z","1.3.0":"2026-06-26T10:17:36.879Z","1.3.1":"2026-06-26T12:02:35.908Z","1.3.2":"2026-06-26T13:35:19.220Z","1.3.3":"2026-07-21T12:03:47.060Z","1.3.4":"2026-08-10T07:28:52.980Z","1.4.0":"2026-08-10T07:30:21.550Z","1.4.1":"2026-08-18T14:57:48.029Z","1.5.0":"2026-09-10T07:38:41.316Z","1.5.1":"2026-09-23T17:55:43.317Z"},"license":"MIT","keywords":["yaml","test","http","kubernetes","declarative","testing"],"description":"Declarative YAML-based HTTP, command, and Kubernetes test runner","maintainers":[{"name":"djannot","email":"djannot@gmail.com"}],"readme":"# YAMLTest\n\nDeclarative YAML-based test runner for HTTP endpoints, shell commands, and Kubernetes resources.\n\nDefine tests in YAML, run them from the CLI or import them programmatically. No test framework boilerplate required.\n\n---\n\n## Installation\n\n**From npm (once published):**\n\n```bash\nnpm install -g yamltest\n```\n\n**From a local clone (before publishing):**\n\n```bash\n# Install globally from the repo directory\nnpm install -g /path/to/YAMLTest\n\n# Or run directly without installing\nnode /path/to/YAMLTest/src/cli.js -f your-tests.yaml\n\n# Or link it for development (makes YAMLTest available system-wide, auto-updates)\ncd /path/to/YAMLTest && npm link\n```\n\n**As a dev dependency in another project:**\n\n```bash\nnpm install --save-dev /path/to/YAMLTest\n```\n\n---\n\n## Quick start\n\n```bash\nYAMLTest -f - <<EOF\n- name: httpbin returns 200\n  http:\n    url: \"https://httpbin.org\"\n    method: GET\n    path: \"/get\"\n  source:\n    type: local\n  expect:\n    statusCode: 200\n    bodyContains: \"httpbin.org\"\nEOF\n```\n\nOutput:\n\n```\n  ✓ httpbin returns 200 312ms\n\n  1 passed | 1 total\n```\n\n---\n\n## CLI\n\n```\nUSAGE\n  YAMLTest -f <file.yaml>\n  YAMLTest -f -              # read from stdin (heredoc)\n\nOPTIONS\n  -f, --file <path|->   YAML file to run, or - for stdin\n  --retries <n>         Force the retry count for every test, overriding the\n                        per-test `retries` and the default. Use --retries 0 to\n                        run once when debugging a failure.\n  --check               Validate YAML structure only; do not run tests\n  -h, --help            Show this help\n\nENVIRONMENT\n  DEBUG_MODE=true       Enable verbose debug logging\n  YAMLTEST_ECHO=true    Echo every local command's output live as it runs\n  NO_COLOR=1            Disable ANSI colour output\n```\n\nWhen a test fails and you want to debug it, run the same file with `--retries 0`\nso it executes exactly once instead of retrying up to the default 120 times:\n\n```bash\nyamltest -f test.yaml --retries 0\n```\n\nExit codes: `0` = all passed, `1` = one or more failed.\n\n---\n\n## Input validation\n\nAll test definitions are validated against a strict schema **before** any test executes. Invalid input produces clear error messages pointing to the exact location of the problem:\n\n```\nValidation failed:\n\n  Test #1 (\"login\") /http/method: must be one of: GET, POST, PUT, DELETE, PATCH\n  Test #3: must define exactly one of: http, command, wait, httpBodyComparison\n  Test #5 (\"check pods\") /source: missing required property \"selector\"\n```\n\nValidation checks include:\n- Exactly one test type per definition (`http`, `command`, `wait`, or `httpBodyComparison`)\n- Required fields per test type (e.g., `command.command`, `wait.target`)\n- Value types and allowed enums (e.g., `source.type` must be `local` or `pod`)\n- Conditional requirements (e.g., `source.type: pod` requires `selector`; `setVars` requires `expect` for HTTP/command tests)\n- Unknown property detection on sub-objects (catches typos like `htpp` instead of `http`)\n\n---\n\n## Programmatic API\n\n```js\nconst { runTests, executeTest, validateTestDefinitions } = require('yamltest');\n\n// Run one or more tests from a YAML string (array or single object)\nconst result = await runTests(yamlString);\nconsole.log(result.passed, result.failed, result.skipped, result.total);\n// result.results → [{name, passed, error, durationMs, attempts}]\n\n// Run a single test (low-level)\nawait executeTest(yamlString); // returns true or throws\n\n// Validate test definitions without executing them\nconst yaml = require('js-yaml');\nconst definitions = Array.isArray(yaml.load(yamlString))\n  ? yaml.load(yamlString)\n  : [yaml.load(yamlString)];\nvalidateTestDefinitions(definitions); // throws on validation errors\n```\n\n---\n\n## Test format\n\nTests are defined as flat YAML objects (or an array of them). All fields except the test type key (`http`, `command`, `wait`, `httpBodyComparison`) are optional.\n\n```yaml\n- name: my-test          # optional display name\n  retries: 3             # retry up to N times on failure (default: 0)\n  http: ...              # ← test type\n  source:\n    type: local          # local | pod\n  expect:\n    statusCode: 200\n```\n\n---\n\n## Test types\n\n### HTTP test\n\nTest any HTTP endpoint locally or from within a Kubernetes pod.\n\n```yaml\n- name: health check\n  http:\n    url: \"https://api.example.com\"   # required (or auto-discovered for Service selectors)\n    method: GET                       # GET (default) | POST | PUT | DELETE | PATCH\n    path: \"/health\"                   # default: /\n    headers:\n      Authorization: \"Bearer ${API_TOKEN}\"\n      Content-Type: application/json\n    params:\n      key: value                      # query parameters\n    body: '{\"foo\":\"bar\"}'             # request body (string or object)\n    skipSslVerification: true         # disable TLS verification\n    maxRedirects: 0                   # redirects to follow (default: 0)\n    cert: /path/to/cert.pem           # mTLS client certificate\n    key:  /path/to/key.pem\n    ca:   /path/to/ca.pem\n  source:\n    type: local\n  expect:\n    statusCode: 200                   # or [200, 201, 202]\n    body: \"exact body match\"\n    bodyContains: \"substring\"         # or array, or {value, negate, matchword}\n    bodyRegex: \"pattern.*\"            # or {value, negate, caseInsensitive}\n    bodyJsonPath:\n      - path: \"$.user.id\"\n        comparator: equals\n        value: 42\n    headers:\n      - name: content-type\n        comparator: contains\n        value: application/json\n```\n\n#### Asserting a connection failure\n\nUse `expect.connectionError` to assert that the request **never completes** — the\nconnection is refused, DNS fails, or the TLS handshake is rejected. This replaces\nthe old workaround of a command test (`curl ... || true` with `equals: \"000\"`).\n\n```yaml\n- name: mTLS is enforced (handshake must fail without a client cert)\n  http:\n    url: \"https://secure.example.com\"\n    path: \"/\"\n  source:\n    type: local\n  expect:\n    connectionError: true\n```\n\n`connectionError: true` passes on any transport-level failure (DNS, TCP, or TLS)\nand is what most tests should use. To assert on a *specific* failure, use the\nobject form — any of `code`, `contains`, or `matches` (all provided constraints\nmust hold):\n\n```yaml\n  expect:\n    connectionError:\n      code: \"ECONNREFUSED\"        # exact error code (see below)\n      contains: \"ECONNREFUSED\"    # substring of the error message\n      matches: \"ECONN(REFUSED|RESET)\" # regex against the error message\n```\n\nThe `code` is matched exactly against Node's error code. Common ones:\n`ECONNREFUSED` (port closed), `ENOTFOUND` (DNS failure), `EPROTO` (TLS spoken to\na plaintext port), `DEPTH_ZERO_SELF_SIGNED_CERT` (untrusted cert). The exact\nstring depends on your Node/OpenSSL version, so the reliable way to find it is to\nrun the test once and read the reported error rather than guessing.\n\nNotes:\n\n- `connectionError` cannot be combined with response-based expectations\n  (`statusCode`, `body`, `bodyContains`, `bodyRegex`, `bodyJsonPath`, `headers`) —\n  a failed connection produces no response to assert on.\n- If the request unexpectedly **succeeds**, the test fails.\n- Configuration errors (such as an unreadable `cert`/`key`/`ca` file) are *not*\n  connection errors and still fail the test loudly.\n- `connectionError` cannot be combined with `setVars` — a failed connection has\n  no response to extract variables from.\n- Reliably supported only for `source.type: local`. With pod-based sources, only\n  `usePortForward` can detect a connection failure, and the reported error code\n  reflects the local port-forward tunnel's failure (typically `ECONNRESET`), not\n  the remote one. The default debug-pod and pod-exec modes wrap every transport\n  error in a generic message, so `connectionError` will **always fail** the test\n  there — even when the connection really did fail.\n\n#### Environment variable substitution\n\nAny `$VAR` or `${VAR}` in the `url`, `path`, `headers`, `body`, or `params` fields is resolved from the environment:\n\n```yaml\nhttp:\n  url: \"${API_BASE_URL}\"\n  path: /v0/agents/my-agent${RUN_SUFFIX}\n  headers:\n    Authorization: \"Bearer ${API_TOKEN}\"\n  body: '{\"id\": \"${REQUEST_ID}\"}'\n  params:\n    apiKey: \"${API_KEY}\"\n```\n\n#### Pod-based HTTP test\n\nExecute the HTTP request from inside a Kubernetes pod (useful for internal service testing):\n\n```yaml\nsource:\n  type: pod\n  selector:\n    kind: Pod\n    metadata:\n      namespace: production\n      labels:\n        app: test-client\n    context: my-cluster          # optional kubectl context\n  container: my-container        # optional\n  usePortForward: true           # use kubectl port-forward instead of debug pod\n  usePodExec: true               # use kubectl exec + curl\n```\n\n#### Auto-discovery for Kubernetes Services\n\nOmit `http.url` when `source.selector.kind` is `Service` and the IP/port are discovered automatically from the LoadBalancer status:\n\n```yaml\n- name: auto-discover service\n  http:\n    method: GET\n    path: /health\n    scheme: https                # optional, defaults to http\n    port: 443                    # optional port name/number/index\n  source:\n    type: local\n    selector:\n      kind: Service\n      metadata:\n        namespace: production\n        name: my-service\n  expect:\n    statusCode: 200\n```\n\n---\n\n### Command test\n\nRun any shell command and validate its output.\n\n```yaml\n- name: check kubectl version\n  command:\n    command: \"kubectl version -short\"\n    parseJson: false              # parse stdout as JSON (default: false)\n    echo: true                    # echo the command's output live (default: false)\n    env:\n      MY_VAR: value               # extra environment variables\n    workingDir: /tmp              # working directory\n  source:\n    type: local                   # or pod (uses kubectl exec)\n  expect:\n    exitCode: 0\n    stdout:\n      contains: \"Client Version\"  # or: equals, matches/regex, negate\n    stderr:\n      contains: \"\"\n```\n\n#### Echoing output for long-running commands\n\nBy default a command's stdout/stderr is captured silently and only shown at the\nend (and only for failing tests). For a long-running command — a browser flow, a\nmulti-minute integration script — that means a blank screen until it finishes. Set\n`echo: true` to tee the command's output to your terminal **as it is produced**,\nwhile still capturing it for the assertions:\n\n```yaml\n- name: long oauth flow\n  command:\n    command: \"./run-oauth-flow.sh\"\n    echo: true\n  source:\n    type: local\n  expect:\n    exitCode: 0\n```\n\nSet it globally instead of per-test with the `YAMLTEST_ECHO=true` environment\nvariable. Echoing applies to `source.type: local` commands. Because the live\noutput interleaves with the `✓`/`✗` summary, it is off by default.\n\nMultiple stdout expectations (all must pass):\n\n```yaml\nexpect:\n  exitCode: 0\n  stdout:\n    - contains: \"Running\"\n    - matches: \"\\\\d+ pods\"\n```\n\nJSON output validation:\n\n```yaml\n- name: cluster info JSON\n  command:\n    command: \"kubectl cluster-info --output=json\"\n    parseJson: true\n  source:\n    type: local\n  expect:\n    exitCode: 0\n    jsonPath:\n      - path: \"$.Kubernetes\"\n        comparator: exists\n```\n\n---\n\n### Wait test\n\nPoll a Kubernetes resource until a condition is met (or timeout).\n\n```yaml\n- name: wait for deployment\n  wait:\n    target:\n      kind: Deployment\n      apiVersion: apps/v1        # optional\n      metadata:\n        namespace: default\n        name: my-app\n      context: my-cluster        # optional\n    jsonPath: \"$.status.readyReplicas\"\n    jsonPathExpectation:\n      comparator: greaterThan\n      value: 0\n    polling:\n      timeoutSeconds: 120        # default: 60\n      intervalSeconds: 5         # default: 2\n      maxRetries: 24             # optional upper bound\n  setVars:                       # optional: capture the extracted value\n    READY_REPLICAS:\n      value: true\n```\n\nTo use the captured value in subsequent tests, see the [setVars](#setvars--variable-passing-between-steps) section below.\n\nSelector by labels:\n\n```yaml\nwait:\n  target:\n    kind: Pod\n    apiVersion: v1               # optional\n    metadata:\n      namespace: production\n      labels:\n        app: web-server\n        version: v1.2.0\n  jsonPath: \"$.status.phase\"\n  jsonPathExpectation:\n    comparator: equals\n    value: Running\n```\n\n#### Asserting several paths\n\n`jsonPath` also accepts an **array** of self-contained assertions — the same\n`{path, comparator, value, negate}` shape that `command` and `http` tests use —\nso one `wait` can check several fields of the same resource instead of falling\nback to a `command` shim or repeating the whole block:\n\n```yaml\n- name: validators are delivered via the config ConfigMap\n  wait:\n    target:\n      kind: ConfigMap\n      metadata:\n        name: agentgateway-config\n        namespace: agentgateway-system\n    jsonPath:\n      - path: \"$.data['token-exchange-validators.yaml']\"\n        comparator: contains\n        value: \"subjectValidators:\"\n      - path: \"$.data['token-exchange-validators.yaml']\"\n        comparator: contains\n        value: \"actorValidators:\"\n      - path: '$.spec.template.spec.containers[0].env[?(@.name==\"LOG_LEVEL\")].value'\n        comparator: equals\n        value: debug\n    polling:\n      timeoutSeconds: 60\n      intervalSeconds: 2\n```\n\nSemantics: **one** `kubectl get ... -o json` per poll attempt, and an attempt\nsucceeds only when **every** entry passes. Any failure — including a path that\nis not present yet — retries until `polling.timeoutSeconds`. This matches how\n`command` and `http` treat their jsonPath arrays, and the run output still shows\none block per test rather than one per entry. On timeout the error names the\nassertion that blocked:\n\n```\nTimed-out (60s) waiting for ConfigMap/agentgateway-system/agentgateway-config\n  → $.a to contains \"x\" AND $.b to equals \"y\"\n  (last failure: JSONPath $.b comparison failed: expected to equals \"y\", found z)\n```\n\nTwo rules keep the forms unambiguous, both enforced by schema validation:\n\n| Combination | Result |\n| --- | --- |\n| `jsonPath` string + `jsonPathExpectation` | supported (the original form) |\n| `jsonPath` array (each entry carries its own comparator) | supported |\n| `jsonPath` array + `jsonPathExpectation` | **rejected** — the per-entry comparator would silently supersede it |\n| `jsonPath` array + `setVars` | **rejected** — with several paths there is no unambiguous value to capture; use the string form |\n\n---\n\n### HTTP body comparison test\n\nCompare the response bodies of two HTTP calls and assert they are identical (useful for canary / shadow traffic validation).\n\n```yaml\n- name: compare two backends\n  httpBodyComparison:\n    request1:\n      http:\n        url: \"http://service-v1\"\n        method: GET\n        path: /api/data\n      source:\n        type: local\n    request2:\n      http:\n        url: \"http://service-v2\"\n        method: GET\n        path: /api/data\n      source:\n        type: local\n    parseAsJson: true            # parse bodies as JSON before comparing\n    delaySeconds: 1              # wait between requests\n    removeJsonPaths:             # ignore dynamic fields\n      - \"$.timestamp\"\n      - \"$.requestId\"\n```\n\n---\n\n## Expectation operators\n\nAll comparators can be negated with `negate: true`.\n\n| Comparator    | Description                          | Types          |\n|---------------|--------------------------------------|----------------|\n| `equals`      | Deep equality                        | any            |\n| `contains`    | Substring / JSON-stringified search  | string, object |\n| `matches`     | Regular expression test              | string         |\n| `exists`      | Value is not null/undefined          | any            |\n| `greaterThan` | Numeric `>`                          | number         |\n| `lessThan`    | Numeric `<`                          | number         |\n\n### Negation example\n\n```yaml\nexpect:\n  bodyContains:\n    value: \"error\"\n    negate: true        # assert the body does NOT contain \"error\"\n```\n\n### Word-boundary match\n\n```yaml\nexpect:\n  bodyContains:\n    value: \"ok\"\n    matchword: true     # uses \\bok\\b regex (whole word only)\n```\n\n---\n\n## Advanced features\n\n### Run control: retries, consecutive, timeout, maxtime\n\nEach test definition accepts four optional run-control knobs. All have defaults\ntuned for waiting on eventually-consistent systems, and all defaults are\noverridable per run via environment variables (so you never have to edit the\ntest to tune them):\n\n| Field | Meaning | Default | Env override |\n|-------|---------|---------|--------------|\n| `retries` | Max retry attempts **after** the first | `120` | `YAMLTEST_RETRIES` |\n| `consecutive` | Successful runs required **per attempt** (all must pass in a row) | `1` | — |\n| `timeout` | Per-attempt cap, in ms (a hung attempt is abandoned and retried) | `10000` | `YAMLTEST_TIMEOUT_MS` |\n| `maxtime` | Wall-clock cap on the **whole** retry loop — the circuit breaker | `max(180000, timeout + 60000)` | `YAMLTEST_MAXTIME_MS` (floor) |\n\n`maxtime` accepts either a number of milliseconds or a duration string\n(`\"500ms\"`, `\"30s\"`, `\"3m\"`, `\"1h\"`). The retry loop stops at whichever comes\nfirst: `retries` exhausted **or** `maxtime` elapsed. The pause between retries\ndefaults to 1000ms (`YAMLTEST_RETRY_INTERVAL_MS`).\n\n```yaml\n- name: flaky service\n  retries: 5            # retry up to 5 times after the first attempt\n  http:\n    url: \"http://flaky-service\"\n    method: GET\n    path: /api\n  source:\n    type: local\n  expect:\n    statusCode: 200\n\n- name: routing is stable, not just lucky\n  consecutive: 3        # must return the expected provider 3 times in a row\n  retries: 10\n  http: { url: \"http://gw\", method: POST, path: /failover }\n  source: { type: local }\n  expect:\n    bodyJsonPath:\n      - path: \"$.model\"\n        comparator: contains\n        value: \"gemini\"\n\n- name: long browser/OAuth flow\n  timeout: 360000       # one attempt may take up to 6 minutes\n  maxtime: \"8m\"         # cap the whole retry loop at 8 minutes\n  command: { command: \"./run-oauth-flow.sh\" }\n  source: { type: local }\n  expect: { exitCode: 0 }\n```\n\nOn failure, the CLI prints the **observed** request/response (or command result)\nfrom the last attempt inline — no need to re-run under `DEBUG_MODE` to see why a\ntest failed. Bodies and outputs are truncated so a large response can't flood the\nlog.\n\n### Multiple tests in one file\n\nTests run **sequentially** and stop at the first failure (fail-fast).\n\n```yaml\n- name: first test\n  http: { url: \"http://svc\", method: GET, path: /ready }\n  source: { type: local }\n  expect: { statusCode: 200 }\n\n- name: second test\n  command: { command: \"kubectl get pods -n default\" }\n  source: { type: local }\n  expect: { exitCode: 0, stdout: { contains: \"Running\" } }\n```\n\n### Environment variables in url, path, headers, body, and params\n\n```yaml\nhttp:\n  url: \"$API_BASE_URL\"          # $VAR or ${VAR}\n  path: /v0/agents/my-agent${RUN_SUFFIX}\n  headers:\n    Authorization: \"Bearer ${API_TOKEN}\"\n  body: '{\"id\": \"${REQUEST_ID}\"}'\n  params:\n    apiKey: \"${API_KEY}\"\n```\n\n### setVars — variable passing between steps\n\nExtract values from a test response and store them for use in subsequent steps via `${VAR_NAME}` syntax. `setVars` requires `expect` to be present on the test — variables are only captured after all assertions pass.\n\n#### HTTP extraction sources\n\n```yaml\n- name: login\n  http:\n    url: \"http://api.example.com\"\n    method: POST\n    path: /login\n    body: '{\"user\":\"admin\",\"pass\":\"secret\"}'\n  source:\n    type: local\n  expect:\n    statusCode: 200\n  setVars:\n    AUTH_TOKEN:\n      jsonPath: \"$.token\"           # extract from JSON body via JSONPath\n    SESSION_ID:\n      header: \"x-session-id\"       # extract a response header (case-insensitive)\n    STATUS_CODE:\n      statusCode: true             # capture the HTTP status code\n    RAW_BODY:\n      body: true                   # capture the full response body\n    CSRF_TOKEN:\n      regex:                       # extract via regex capture group from body\n        pattern: 'name=\"csrf\" value=\"([^\"]+)\"'\n        group: 1                   # capture group index (default: 1)\n```\n\n#### Command extraction sources\n\n```yaml\n- name: read config\n  command:\n    command: \"cat config.json\"\n    parseJson: true                # required for jsonPath extraction\n  source:\n    type: local\n  expect:\n    exitCode: 0\n  setVars:\n    DB_HOST:\n      jsonPath: \"$.database.host\"  # extract from parsed JSON stdout\n    FULL_OUTPUT:\n      stdout: true                 # capture full stdout\n    ERR_OUTPUT:\n      stderr: true                 # capture full stderr\n    EXIT:\n      exitCode: true               # capture exit code\n    PID:\n      regex:                       # extract via regex from stdout or stderr\n        source: stdout             # \"stdout\" (default) or \"stderr\"\n        pattern: \"PID (\\\\d+)\"\n        group: 1\n```\n\n#### Wait extraction source\n\n```yaml\n- name: wait for deployment\n  wait:\n    target:\n      kind: Deployment\n      metadata:\n        namespace: default\n        name: my-app\n    jsonPath: \"$.status.readyReplicas\"\n    jsonPathExpectation:\n      comparator: greaterThan\n      value: 0\n  setVars:\n    READY_REPLICAS:\n      value: true                  # capture the jsonPath-extracted value\n```\n\n`value: true` requires the **string** form of `jsonPath`. The array form asserts\nseveral paths at once, so there is no single value to capture — see\n[Asserting several paths](#asserting-several-paths).\n\n#### Chaining example: login then access protected endpoint\n\n```yaml\n- name: login\n  http:\n    url: \"http://localhost:3000\"\n    method: POST\n    path: /login\n    body: '{\"user\":\"admin\",\"pass\":\"secret\"}'\n  source:\n    type: local\n  expect:\n    statusCode: 200\n  setVars:\n    AUTH_TOKEN:\n      jsonPath: \"$.token\"\n\n- name: access protected endpoint\n  http:\n    url: \"http://localhost:3000\"\n    method: GET\n    path: /protected\n    headers:\n      Authorization: \"Bearer ${AUTH_TOKEN}\"\n  source:\n    type: local\n  expect:\n    statusCode: 200\n```\n\n> **Shell heredoc gotcha:** if you feed YAML via a heredoc (`<<EOF`), the shell expands `$AUTH_TOKEN` in the heredoc body to its value in the *parent* shell (usually empty) before YAMLTest ever sees the text. Use one of these patterns to prevent that:\n>\n> ```bash\n> # 1. Escape the dollar sign\n> YAMLTest -f - <<EOF\n>     command: echo \\$AUTH_TOKEN\n> EOF\n>\n> # 2. Quote the heredoc delimiter (disables all expansion)\n> YAMLTest -f - <<'EOF'\n>     command: echo $AUTH_TOKEN\n> EOF\n>\n> # 3. Use a file — no shell expansion at all (recommended)\n> YAMLTest -f tests.yaml\n> ```\n\n---\n\n## Debug logging\n\n```bash\nDEBUG_MODE=true YAMLTest -f tests.yaml\n```\n\nPrints full request/response details, comparison results, and kubectl commands.\n\n---\n\n## Project structure\n\n```\nsrc/\n  core.js       # Test execution engine (HTTP, command, wait, comparison)\n  runner.js     # Multi-test orchestration (YAML parsing, validation, fail-fast, retry)\n  validate.js   # JSON Schema validation (Ajv)\n  index.js      # Public API\n  cli.js        # YAMLTest binary entry point\ntest/\n  unit/         # Pure function tests (compareValue, filterJson, parseCurl, ...)\n  integration/  # Real HTTP server + real shell command tests\n  e2e/          # CLI binary spawned end-to-end\n```\n\n---\n\n## Running the test suite\n\n```bash\nnpm test                    # all tests\nnpm run test:unit           # unit tests only\nnpm run test:integration    # integration tests only\nnpm run test:e2e            # end-to-end CLI tests only\nnpm run test:coverage       # with coverage report\n```\n\n---\n\n## CI/CD\n\n```yaml\n# .github/workflows/test.yml\nname: Tests\non: [push, pull_request]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: '20'\n      - run: npm install\n      - run: npm test\n```\n\n---\n\n## License\n\nMIT\n","readmeFilename":"README.md"}