{"_id":"@axepress/plugin-infra","_rev":"4-4b6dbb35d662e6a25b6d949df4062255","name":"@axepress/plugin-infra","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@axepress/plugin-infra","version":"0.1.0","license":"GPL-2.0-or-later","_id":"@axepress/plugin-infra@0.1.0","maintainers":[{"name":"justlevine","email":"david@axepress.dev"}],"homepage":"https://github.com/AxeWP/plugin-infra#readme","bugs":{"url":"https://github.com/AxeWP/plugin-infra/issues"},"dist":{"shasum":"7de50c8d106fef826bc1f0e006f9d1b2ad73af28","tarball":"https://registry.npmjs.org/@axepress/plugin-infra/-/plugin-infra-0.1.0.tgz","fileCount":9,"integrity":"sha512-6zKxBS6XqAB1LCTRM4SWQ1CBopxhM2//u0KSkhaFbjKxN5McJHSEDTXsZt32bGk0mP/2KMmx1IAmrJzZMsUCAA==","signatures":[{"sig":"MEYCIQCx3XncACNAEpQvYqXMxTtPEe8BgECz0MwkjRk3pgqKugIhAMm3CAsqcioo62NGzipXWul7yWE0swlz4h+at6BhNqaK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axepress%2fplugin-infra@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":28987},"type":"module","engines":{"npm":">=11.0.0","node":">=24.0.0"},"exports":{"./eslint":"./configs/eslint.mjs","./prettier":"./configs/prettier.mjs","./tsconfig":"./configs/tsconfig.json","./package.json":"./package.json"},"gitHead":"c1201b2a13344c68c0b0c651a8dfc6b6265f22b7","scripts":{"format":"prettier --write ."},"_npmUser":{"name":"justlevine","email":"david@axepress.dev"},"repository":{"url":"git+https://github.com/AxeWP/plugin-infra.git","type":"git"},"_npmVersion":"11.16.0","description":"Shareable base configs for AxeWP WordPress plugins.","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"core-js@3.49.0":true,"lefthook@2.1.10":true,"unrs-resolver@1.12.2":true},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"lefthook":"^2.1.10","prettier":"npm:wp-prettier@^3","lint-staged":"^17.1.0","string-argv":"^0.3.2","eslint-plugin-jest":"^29.15.5","@wordpress/eslint-plugin":"^25.7.0","@wordpress/prettier-config":"^4.51.0"},"peerDependencies":{"eslint":">=9.0.0","prettier":">=3.0.0","typescript":">=5.0.0","eslint-plugin-jest":">=29.0.0","@wordpress/eslint-plugin":">=25.0.0","@wordpress/prettier-config":">=4.0.0"},"peerDependenciesMeta":{"eslint":{"optional":true},"prettier":{"optional":true},"typescript":{"optional":true},"eslint-plugin-jest":{"optional":true},"@wordpress/eslint-plugin":{"optional":true},"@wordpress/prettier-config":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/plugin-infra_0.1.0_1784672831102_0.6558633627831345","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@axepress/plugin-infra","version":"0.2.0","license":"GPL-2.0-or-later","_id":"@axepress/plugin-infra@0.2.0","maintainers":[{"name":"justlevine","email":"david@axepress.dev"}],"homepage":"https://github.com/AxeWP/plugin-infra#readme","bugs":{"url":"https://github.com/AxeWP/plugin-infra/issues"},"dist":{"shasum":"97714c80f8dc77bcd677f1191f6fdde819f5a7ec","tarball":"https://registry.npmjs.org/@axepress/plugin-infra/-/plugin-infra-0.2.0.tgz","fileCount":9,"integrity":"sha512-kRgLg4Yw235LvHQ4JcZZ5YnHnsGTcP3BYkvlaMuJjkXJlUZ1JUqOu/fXus4MzzKLSxUY8cQKdDxxZSOadfXP+A==","signatures":[{"sig":"MEUCIQC2pjFDpyUIWlvfQRlsuW17ytxF53qus3+uRFYF2ejH7gIgIjAzo7LFG/ncMyu2dRhPJdeImw0j8+f/9u0X2v1J6aI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axepress%2fplugin-infra@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":28944},"type":"module","engines":{"npm":">=11.0.0","node":">=24.0.0"},"exports":{"./eslint":"./configs/eslint.mjs","./prettier":"./configs/prettier.mjs","./tsconfig":"./configs/tsconfig.json","./package.json":"./package.json"},"gitHead":"db72c1778c8449060070992dc79b4932d54a37d4","scripts":{"format":"prettier --write ."},"_npmUser":{"name":"justlevine","email":"david@axepress.dev"},"repository":{"url":"git+https://github.com/AxeWP/plugin-infra.git","type":"git"},"_npmVersion":"11.16.0","description":"Shareable base configs for AxeWP WordPress plugins.","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"core-js@3.49.0":true,"lefthook@2.1.10":true,"unrs-resolver@1.12.2":true},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"lefthook":"^2.1.10","prettier":"npm:wp-prettier@^3","lint-staged":"^17.3.0","string-argv":"^0.3.2","eslint-plugin-jest":"^29.16.0","@wordpress/eslint-plugin":"^25.8.0","@wordpress/prettier-config":"^4.51.0"},"peerDependencies":{"eslint":">=9.0.0","prettier":">=3.0.0","typescript":">=5.0.0","eslint-plugin-jest":">=29.0.0","@wordpress/eslint-plugin":">=25.0.0","@wordpress/prettier-config":">=4.0.0"},"peerDependenciesMeta":{"eslint":{"optional":true},"prettier":{"optional":true},"typescript":{"optional":true},"eslint-plugin-jest":{"optional":true},"@wordpress/eslint-plugin":{"optional":true},"@wordpress/prettier-config":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/plugin-infra_0.2.0_1786336671842_0.48592105359326543","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@axepress/plugin-infra","version":"0.2.1","license":"GPL-2.0-or-later","_id":"@axepress/plugin-infra@0.2.1","maintainers":[{"name":"justlevine","email":"david@axepress.dev"}],"homepage":"https://github.com/AxeWP/plugin-infra#readme","bugs":{"url":"https://github.com/AxeWP/plugin-infra/issues"},"dist":{"shasum":"4ee4780851e2018a478d59ca5c1ef26edbecc774","tarball":"https://registry.npmjs.org/@axepress/plugin-infra/-/plugin-infra-0.2.1.tgz","fileCount":9,"integrity":"sha512-8ZNL1fjRll0Sy+lLbXrh8D/+Y/bJF6Wus1ValU1xee78IBP0zkng6ISFQH0axV4CJMk5UqgdA5dVoFIHtny01Q==","signatures":[{"sig":"MEYCIQC2xK75wkN9yelCymM1VeaScjMvJTIztm7MTFjetbuSngIhAMljwKhs16Lt/XxBFRGgL46lURCNWe5UgPcF00U7LEBe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGk5JAaqdplQDgrK++O0G22KeESlpLnlcb7Qt+8V4bAJAiEAhsYhR0DospeohHxM7giLjxOhFc7r2O8tppU4DisKiRo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axepress%2fplugin-infra@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":28918},"type":"module","engines":{"npm":">=11.0.0","node":">=24.0.0"},"exports":{"./eslint":"./configs/eslint.mjs","./prettier":"./configs/prettier.mjs","./tsconfig":"./configs/tsconfig.json","./package.json":"./package.json"},"gitHead":"0b076a5c8e1ef155eb49bbba7faed7a936ef6768","scripts":{"format":"prettier --write ."},"_npmUser":{"name":"justlevine","email":"david@axepress.dev"},"repository":{"url":"git+https://github.com/AxeWP/plugin-infra.git","type":"git"},"_npmVersion":"11.19.0","description":"Shareable base configs for AxeWP WordPress plugins.","directories":{},"_nodeVersion":"24.21.0","allowScripts":{"lefthook@2.1.14":true,"unrs-resolver@1.12.2":true},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"lefthook":"^2.1.14","prettier":"npm:wp-prettier@^3","lint-staged":"^17.6.0","string-argv":"^0.3.2","eslint-plugin-jest":"^29.16.6","@wordpress/eslint-plugin":"^27.0.0","@wordpress/prettier-config":"^4.56.0"},"peerDependencies":{"eslint":">=9.0.0","prettier":">=3.0.0","typescript":">=5.0.0","eslint-plugin-jest":">=29.0.0","@wordpress/eslint-plugin":">=25.0.0","@wordpress/prettier-config":">=4.0.0"},"peerDependenciesMeta":{"eslint":{"optional":true},"prettier":{"optional":true},"typescript":{"optional":true},"eslint-plugin-jest":{"optional":true},"@wordpress/eslint-plugin":{"optional":true},"@wordpress/prettier-config":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/plugin-infra_0.2.1_1790499715016_0.17385947595046525","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"_id":"@axepress/plugin-infra@0.3.0","bugs":{"url":"https://github.com/AxeWP/plugin-infra/issues"},"dist":{"shasum":"3e07c2e38e40397331c880b540a144eebc9af4d5","tarball":"https://registry.npmjs.org/@axepress/plugin-infra/-/plugin-infra-0.3.0.tgz","fileCount":9,"integrity":"sha512-uq0RPaDeou7qKElzMTjC0zd5UJf2fdnjkWq13WSFKbLK5Xs+Lu8BfKC96wowFTao2oO0O4d0ZvBP8LMRRGOQmQ==","signatures":[{"sig":"MEYCIQDs8pHhGEcgG3d7LRo8XbTGVV3fmr9FZWaTwwOD2fcyugIhAL3FxB2SHk804PRZQK/VZZAUhqyz1wtqer+N8pwOBzlT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDZo/Bp5RpB97godNYxpf/IGx3eCaJzTWJGZ99mVGYEdgIhAJdbeX0FPCOvpUQvhkIg5+TJCUf/u+DVxLaGYksEvmKN"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axepress%2fplugin-infra@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":28993},"name":"@axepress/plugin-infra","type":"module","engines":{"npm":">=11.0.0","node":">=24.0.0"},"exports":{"./eslint":"./configs/eslint.mjs","./prettier":"./configs/prettier.mjs","./tsconfig":"./configs/tsconfig.json","./package.json":"./package.json"},"gitHead":"183e7e20198f78ef8d1ebca6cbe66c1824f12b1f","license":"GPL-2.0-or-later","scripts":{"lint":"eslint .","format":"prettier --write .","lint:fix":"eslint . --fix"},"version":"0.3.0","_npmUser":{"name":"justlevine","email":"david@axepress.dev"},"homepage":"https://github.com/AxeWP/plugin-infra#readme","overrides":{"react":"^18.3.1","prettier":"npm:wp-prettier@>=3","react-dom":"^18.3.1"},"repository":{"url":"git+https://github.com/AxeWP/plugin-infra.git","type":"git"},"_npmVersion":"11.19.0","description":"Shareable base configs for AxeWP WordPress plugins.","directories":{},"maintainers":[{"name":"justlevine","email":"david@axepress.dev"}],"_nodeVersion":"24.21.0","allowScripts":{"lefthook@2.1.14":true,"unrs-resolver@1.12.2":true},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.5","lefthook":"^2.1.14","prettier":"npm:wp-prettier@>=3","lint-staged":"^17.6.0","string-argv":"^0.3.2","@eslint/json":"^2.1.0","@wordpress/eslint-plugin":"^27.0.0","@wordpress/prettier-config":"^4.56.0"},"peerDependencies":{"eslint":">=9.0.0","prettier":"npm:wp-prettier@>=3","typescript":">=5.0.0","@wordpress/eslint-plugin":">=27.0.0","@wordpress/prettier-config":">=4.0.0"},"peerDependenciesMeta":{"eslint":{"optional":true},"prettier":{"optional":true},"typescript":{"optional":true},"@wordpress/eslint-plugin":{"optional":true},"@wordpress/prettier-config":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/plugin-infra_0.3.0_1790590630673_0.35652949567471626"}}},"time":{"created":"2026-07-21T22:27:10.918Z","modified":"2026-09-28T10:17:11.172Z","0.1.0":"2026-07-21T22:27:11.310Z","0.2.0":"2026-08-10T04:37:51.980Z","0.2.1":"2026-09-27T09:01:55.101Z","0.3.0":"2026-09-28T10:17:10.751Z"},"bugs":{"url":"https://github.com/AxeWP/plugin-infra/issues"},"license":"GPL-2.0-or-later","homepage":"https://github.com/AxeWP/plugin-infra#readme","repository":{"url":"git+https://github.com/AxeWP/plugin-infra.git","type":"git"},"description":"Shareable base configs for AxeWP WordPress plugins.","maintainers":[{"name":"justlevine","email":"david@axepress.dev"}],"readme":"# AxeWP Plugin Infrastructure\n\n> Reusable dev infrastructure for AxeWP WordPress plugins.\n\n`axewp/plugin-infra` is a GitHub repository providing reusable GitHub Workflows and shared configurations for AxePress public plugins.\n\n## What's Included\n\n### Reusable GitHub Actions Workflows\n\nReusable workflows under `.github/workflows/` for PHPUnit, Codeception, PHPStan, PHPCS, E2E (Playwright), JS unit tests, CSS/JS linting, plugin builds, workflow linting, and GraphQL schema linting.\n\nSee [`.github/workflows/README.md`](.github/workflows/README.md) for full documentation, inputs, and copy-paste usage examples.\n\n### Shareable Configs\n\nThree configs carry enough shared rules to be worth versioning, so they are published to npm as `@axepress/plugin-infra`:\n\n```bash\nnpm install --save-dev @axepress/plugin-infra\n```\n\nEach config file documents its own usage. Open the one you want:\n\n| Tool          | Package                           | Config                                           | Example                                                    |\n| ------------- | --------------------------------- | ------------------------------------------------ | ---------------------------------------------------------- |\n| Prettier      | `@axepress/plugin-infra/prettier` | [`configs/prettier.mjs`](configs/prettier.mjs)   | [`examples/.prettierrc.mjs`](examples/.prettierrc.mjs)     |\n| TypeScript    | `@axepress/plugin-infra/tsconfig` | [`configs/tsconfig.json`](configs/tsconfig.json) | [`examples/tsconfig.json`](examples/tsconfig.json)         |\n| ESLint (flat) | `@axepress/plugin-infra/eslint`   | [`configs/eslint.mjs`](configs/eslint.mjs)       | [`examples/eslint.config.mjs`](examples/eslint.config.mjs) |\n\n## Prior art\n\nInspired by https://github.com/johnbillion/plugin-infrastructure\n","readmeFilename":"README.md"}