{"_id":"@nswds/metadata","_rev":"7-0261cb2f2abfa75f251ac60b5c52de50","name":"@nswds/metadata","dist-tags":{"latest":"1.1.4"},"versions":{"0.0.0":{"name":"@nswds/metadata","version":"0.0.0","keywords":["nextjs","app-router","metadata","open-graph","web-app-manifest","favicon","nswds","nsw-government"],"author":{"name":"NSW Design System"},"license":"MPL-2.0","_id":"@nswds/metadata@0.0.0","maintainers":[{"name":"digital-design-system","email":"digital@customerservice.nsw.gov.au"},{"name":"laurenhitchon","email":"lauren@hitchon.me"}],"homepage":"https://github.com/digitalnsw/nswds-metadata#readme","bugs":{"url":"https://github.com/digitalnsw/nswds-metadata/issues"},"dist":{"shasum":"6ca477829c78c25cae836c97d5c78b77faeb2131","tarball":"https://registry.npmjs.org/@nswds/metadata/-/metadata-0.0.0.tgz","fileCount":5,"integrity":"sha512-GS1NWUSleNPQRUI3BBFGk6lxYm3HXwrH+tff1TNvVYNb85cYLtQEoyYjECc7EVXvDlr0G9QfPw3GXTmBn4ZEfw==","signatures":[{"sig":"MEYCIQDAi3f1v/uG2dRnLmH9fiy29Nmh1EC5jQgUhFFXJaQTeQIhANCWmmzHHEWxP0XMq+MxZAwbSt5c42zIGhf6VSIngebx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64186},"main":"index.mjs","type":"module","types":"./index.d.mts","engines":{"node":"^22.22.2 || >=24.15.0"},"exports":{".":{"types":"./index.d.mts","default":"./index.mjs"},"./package.json":"./package.json"},"gitHead":"e380eed98014739c7d46e096d29ef7fc384f5de4","scripts":{"pr":"scripts/pull-request.sh","lint":"prettier --check .","test":"node --test index.test.mjs manifest.test.mjs","commit":"scripts/git-commit.sh","format":"prettier --write .","prepare":"husky","typecheck":"tsc --noEmit","snyk:check":"bash -lc 'npm exec --yes --package snyk@latest -- snyk test --all-projects --json-file-output=snyk-analysis.json; code=$?; if [ $code -eq 0 ] || [ $code -eq 1 ]; then exit 0; fi; exit $code'","test:build":"node scripts/test-next-build.mjs","format:check":"prettier --check .","snyk:monitor":"npm exec --yes --package snyk@latest -- snyk monitor --all-projects","branch:create":"scripts/create-branch.sh","check:package":"publint --strict && attw --pack . --profile esm-only","branch:suggest":"scripts/suggest-branch-name.sh","semantic-release":"semantic-release","branch:suggest:create":"scripts/suggest-branch-name.sh --create"},"_npmUser":{"name":"digital-design-system","email":"digital@customerservice.nsw.gov.au"},"prettier":"@nswds/prettier-config","repository":{"url":"git+ssh://git@github.com/digitalnsw/nswds-metadata.git","type":"git"},"_npmVersion":"11.16.0","description":"Shared Next.js App Router metadata, viewport and web app manifest for the NSW Design System fleet.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.3.0","husky":"^9.1.7","react":"^19.2.0","publint":"^0.3.21","prettier":"^3.5.3","react-dom":"^19.2.0","typescript":"^5.9.0","@types/node":"^26.2.0","@types/react":"^19.2.18","@commitlint/cli":"^21.0.2","@types/react-dom":"^19.2.0","semantic-release":"^25.0.3","@arethetypeswrong/cli":"^0.18.3","@semantic-release/git":"^11.0.0","@nswds/prettier-config":"^1.0.1","@semantic-release/github":"^12.0.3","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.0.2","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0","conventional-changelog-conventionalcommits":"^9.3.1"},"peerDependencies":{"next":">=15"},"_npmOperationalInternal":{"tmp":"tmp/metadata_0.0.0_1786362705320_0.2515479141554906","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@nswds/metadata","version":"1.0.0","keywords":["nextjs","app-router","metadata","open-graph","web-app-manifest","favicon","nswds","nsw-government"],"author":{"name":"NSW Design System"},"license":"MPL-2.0","_id":"@nswds/metadata@1.0.0","maintainers":[{"name":"digital-design-system","email":"digital@customerservice.nsw.gov.au"},{"name":"laurenhitchon","email":"lauren@hitchon.me"}],"homepage":"https://github.com/digitalnsw/nswds-metadata#readme","bugs":{"url":"https://github.com/digitalnsw/nswds-metadata/issues"},"dist":{"shasum":"6b1f2dbfa275333749f5ba5d0879884e12c4d4f9","tarball":"https://registry.npmjs.org/@nswds/metadata/-/metadata-1.0.0.tgz","fileCount":5,"integrity":"sha512-mOBA4HynEGwtaYmzdElMvZhezc3bvQTavD4/VzUt+szMX7PNGPTfQgV33gF2vauGCdTGJsdBAtTKwD+uXI9yoQ==","signatures":[{"sig":"MEYCIQD/3CG65BWcwWZB3TA3a6iQLOuakEYmwxfw4C3mUt8AVwIhAJkG6yq8w2BARPsVIf8qZv45qxLoP9Ry/8dDrIKwddKF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nswds%2fmetadata@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":64186},"main":"index.mjs","type":"module","types":"./index.d.mts","engines":{"node":"^22.22.2 || >=24.15.0"},"exports":{".":{"types":"./index.d.mts","default":"./index.mjs"},"./package.json":"./package.json"},"gitHead":"733d730e604f52a0d86dc613af8d24323a07ede2","scripts":{"pr":"scripts/pull-request.sh","lint":"prettier --check .","test":"node --test index.test.mjs manifest.test.mjs","commit":"scripts/git-commit.sh","format":"prettier --write .","prepare":"husky","typecheck":"tsc --noEmit","snyk:check":"bash -lc 'npm exec --yes --package snyk@latest -- snyk test --all-projects --json-file-output=snyk-analysis.json; code=$?; if [ $code -eq 0 ] || [ $code -eq 1 ]; then exit 0; fi; exit $code'","test:build":"node scripts/test-next-build.mjs","format:check":"prettier --check .","snyk:monitor":"npm exec --yes --package snyk@latest -- snyk monitor --all-projects","branch:create":"scripts/create-branch.sh","check:package":"publint --strict && attw --pack . --profile esm-only","branch:suggest":"scripts/suggest-branch-name.sh","semantic-release":"semantic-release","branch:suggest:create":"scripts/suggest-branch-name.sh --create"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f7f52836-f01c-4a76-8eaa-2f9f6f0c1a98"}},"prettier":"@nswds/prettier-config","repository":{"url":"git+ssh://git@github.com/digitalnsw/nswds-metadata.git","type":"git"},"_npmVersion":"11.19.0","description":"Shared Next.js App Router metadata, viewport and web app manifest for the NSW Design System fleet.","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.3.0","husky":"^9.1.7","react":"^19.2.0","publint":"^0.3.21","prettier":"^3.5.3","react-dom":"^19.2.0","typescript":"^5.9.0","@types/node":"^26.2.0","@types/react":"^19.2.18","@commitlint/cli":"^21.0.2","@types/react-dom":"^19.2.0","semantic-release":"^25.0.3","@arethetypeswrong/cli":"^0.18.3","@semantic-release/git":"^11.0.0","@nswds/prettier-config":"^1.0.1","@semantic-release/github":"^12.0.3","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.0.2","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0","conventional-changelog-conventionalcommits":"^9.3.1"},"peerDependencies":{"next":">=15"},"_npmOperationalInternal":{"tmp":"tmp/metadata_1.0.0_1786362975713_0.4394447934179111","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@nswds/metadata","version":"1.1.0","keywords":["nextjs","app-router","metadata","open-graph","web-app-manifest","favicon","nswds","nsw-government"],"author":{"name":"NSW Design System"},"license":"MPL-2.0","_id":"@nswds/metadata@1.1.0","maintainers":[{"name":"digital-design-system","email":"digital@customerservice.nsw.gov.au"},{"name":"laurenhitchon","email":"lauren@hitchon.me"}],"homepage":"https://github.com/digitalnsw/nswds-metadata#readme","bugs":{"url":"https://github.com/digitalnsw/nswds-metadata/issues"},"dist":{"shasum":"9c8ae922c81ee84430a5137214c7e4ae086707cf","tarball":"https://registry.npmjs.org/@nswds/metadata/-/metadata-1.1.0.tgz","fileCount":5,"integrity":"sha512-9/u15sPZEgRPQGD7lzGn98gSEMLdiWtQytJIYSr0Mi3+9vQVo9864bbFQJ8s25MK6PUm1Hm7lvDBq7BKPuBsyg==","signatures":[{"sig":"MEQCIAz07kdp2nZol1rd870BVt/cvEIROFkwl6NCXvAT62oyAiB7vBZHFIhdBke4z6ACWMeSeppS2rLiM8EevToplgmS7Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nswds%2fmetadata@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":64473},"main":"index.mjs","type":"module","types":"./index.d.mts","engines":{"node":"^22.22.2 || >=24.15.0"},"exports":{".":{"types":"./index.d.mts","default":"./index.mjs"},"./package.json":"./package.json"},"gitHead":"cc7c39fcff8ddbd53c18d31d5b7de0bc2eb70946","scripts":{"pr":"scripts/pull-request.sh","lint":"prettier --check .","test":"node --test index.test.mjs manifest.test.mjs","commit":"scripts/git-commit.sh","format":"prettier --write .","prepare":"husky","typecheck":"tsc --noEmit","snyk:check":"bash -lc 'npm exec --yes --package snyk@latest -- snyk test --all-projects --json-file-output=snyk-analysis.json; code=$?; if [ $code -eq 0 ] || [ $code -eq 1 ]; then exit 0; fi; exit $code'","test:build":"node scripts/test-next-build.mjs","format:check":"prettier --check .","snyk:monitor":"npm exec --yes --package snyk@latest -- snyk monitor --all-projects","branch:create":"scripts/create-branch.sh","check:package":"publint --strict && attw --pack . --profile esm-only","branch:suggest":"scripts/suggest-branch-name.sh","semantic-release":"semantic-release","branch:suggest:create":"scripts/suggest-branch-name.sh --create"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f7f52836-f01c-4a76-8eaa-2f9f6f0c1a98"}},"prettier":"@nswds/prettier-config","repository":{"url":"git+ssh://git@github.com/digitalnsw/nswds-metadata.git","type":"git"},"_npmVersion":"11.19.0","description":"Shared Next.js App Router metadata, viewport and web app manifest for the NSW Design System fleet.","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.3.0","husky":"^9.1.7","react":"^19.2.0","publint":"^0.3.21","prettier":"^3.5.3","react-dom":"^19.2.0","typescript":"^5.9.0","@types/node":"^26.2.0","@types/react":"^19.2.18","@commitlint/cli":"^21.0.2","@types/react-dom":"^19.2.0","semantic-release":"^25.0.3","@arethetypeswrong/cli":"^0.18.3","@semantic-release/git":"^11.0.0","@nswds/prettier-config":"^1.0.1","@semantic-release/github":"^12.0.3","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.0.2","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0","conventional-changelog-conventionalcommits":"^9.3.1"},"peerDependencies":{"next":">=15"},"_npmOperationalInternal":{"tmp":"tmp/metadata_1.1.0_1786364721220_0.828731426443778","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@nswds/metadata","version":"1.1.1","keywords":["nextjs","app-router","metadata","open-graph","web-app-manifest","favicon","nswds","nsw-government"],"author":{"name":"NSW Design System"},"license":"MPL-2.0","_id":"@nswds/metadata@1.1.1","maintainers":[{"name":"digital-design-system","email":"digital@customerservice.nsw.gov.au"},{"name":"laurenhitchon","email":"lauren@hitchon.me"}],"homepage":"https://github.com/digitalnsw/nswds-metadata#readme","bugs":{"url":"https://github.com/digitalnsw/nswds-metadata/issues"},"dist":{"shasum":"e957a5df2032132961379e9147ab4c28f096084d","tarball":"https://registry.npmjs.org/@nswds/metadata/-/metadata-1.1.1.tgz","fileCount":5,"integrity":"sha512-oGhnqtN4lsfemt5elyDc6v842Ym6NnnPpF/4jeWDD8W9g2Dj7FkYcINq4eNWl007YqZRJx0mRvmbfb21wnLvWQ==","signatures":[{"sig":"MEUCIQCMbYfWnxp9cPQa7V5cwIC6G1b6k6zNRFy4MutJcv+7wwIgDTSqEFcPFpX4O6fDEvkpVZ3i3z5rAggpApmNAsQiSBc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nswds%2fmetadata@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":64705},"main":"index.mjs","type":"module","types":"./index.d.mts","engines":{"node":"^22.22.2 || >=24.15.0"},"exports":{".":{"types":"./index.d.mts","default":"./index.mjs"},"./package.json":"./package.json"},"gitHead":"14dda60464827d7b4d806d90216febd99da32b61","scripts":{"pr":"scripts/pull-request.sh","lint":"prettier --check .","test":"node --test index.test.mjs manifest.test.mjs","commit":"scripts/git-commit.sh","format":"prettier --write .","prepare":"husky","typecheck":"tsc --noEmit","snyk:check":"bash -lc 'npm exec --yes --package snyk@latest -- snyk test --all-projects --json-file-output=snyk-analysis.json; code=$?; if [ $code -eq 0 ] || [ $code -eq 1 ]; then exit 0; fi; exit $code'","test:build":"node scripts/test-next-build.mjs","format:check":"prettier --check .","snyk:monitor":"npm exec --yes --package snyk@latest -- snyk monitor --all-projects","branch:create":"scripts/create-branch.sh","check:package":"publint --strict && attw --pack . --profile esm-only","branch:suggest":"scripts/suggest-branch-name.sh","semantic-release":"semantic-release","branch:suggest:create":"scripts/suggest-branch-name.sh --create"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f7f52836-f01c-4a76-8eaa-2f9f6f0c1a98"}},"prettier":"@nswds/prettier-config","repository":{"url":"git+ssh://git@github.com/digitalnsw/nswds-metadata.git","type":"git"},"_npmVersion":"11.19.0","description":"Shared Next.js App Router metadata, viewport and web app manifest for the NSW Design System fleet.","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.3.0","husky":"^9.1.7","react":"^19.2.0","publint":"^0.3.21","prettier":"^3.5.3","react-dom":"^19.2.0","typescript":"^5.9.0","@types/node":"^26.2.0","@types/react":"^19.2.18","@commitlint/cli":"^21.0.2","@types/react-dom":"^19.2.0","semantic-release":"^25.0.3","@arethetypeswrong/cli":"^0.18.3","@semantic-release/git":"^11.0.0","@nswds/prettier-config":"^1.0.1","@semantic-release/github":"^12.0.3","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.0.2","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0","conventional-changelog-conventionalcommits":"^9.3.1"},"peerDependencies":{"next":">=15"},"_npmOperationalInternal":{"tmp":"tmp/metadata_1.1.1_1786365402393_0.35495888390674835","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@nswds/metadata","version":"1.1.2","keywords":["nextjs","app-router","metadata","open-graph","web-app-manifest","favicon","nswds","nsw-government"],"author":{"name":"NSW Design System"},"license":"MPL-2.0","_id":"@nswds/metadata@1.1.2","maintainers":[{"name":"digital-design-system","email":"digital@customerservice.nsw.gov.au"},{"name":"laurenhitchon","email":"lauren@hitchon.me"}],"homepage":"https://github.com/digitalnsw/nswds-metadata#readme","bugs":{"url":"https://github.com/digitalnsw/nswds-metadata/issues"},"dist":{"shasum":"bc602818668ad5d691e17f8c2fa2224597c6c208","tarball":"https://registry.npmjs.org/@nswds/metadata/-/metadata-1.1.2.tgz","fileCount":5,"integrity":"sha512-f1SOfdD9FfWGSwwV77O5SnAA6ZLqIB1uKv5UvoGRb2Z4F5DXUs/0StoIzrUe0ti5krgAbueO4/DYu5Yjfv1H1w==","signatures":[{"sig":"MEUCIH7lACqVHYlGG7bgcpujykXzfK2IQeFzAuKr6R8z0wvaAiEA2wkGNmDc4enebfvWDZ8GnvknLGFhdg3bvFsD952zcAg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nswds%2fmetadata@1.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":66890},"main":"index.mjs","type":"module","types":"./index.d.mts","engines":{"node":"^22.22.2 || >=24.15.0"},"exports":{".":{"types":"./index.d.mts","default":"./index.mjs"},"./package.json":"./package.json"},"gitHead":"57f0487db2c17a56dbf319e34c761cda45693453","scripts":{"pr":"scripts/pull-request.sh","lint":"prettier --check .","test":"node --test index.test.mjs manifest.test.mjs","commit":"scripts/git-commit.sh","format":"prettier --write .","prepare":"husky","typecheck":"tsc --noEmit","snyk:check":"bash -lc 'npm exec --yes --package snyk@latest -- snyk test --all-projects --json-file-output=snyk-analysis.json; code=$?; if [ $code -eq 0 ] || [ $code -eq 1 ]; then exit 0; fi; exit $code'","test:build":"node scripts/test-next-build.mjs","format:check":"prettier --check .","snyk:monitor":"npm exec --yes --package snyk@latest -- snyk monitor --all-projects","branch:create":"scripts/create-branch.sh","check:package":"publint --strict && attw --pack . --profile esm-only","branch:suggest":"scripts/suggest-branch-name.sh","semantic-release":"semantic-release","branch:suggest:create":"scripts/suggest-branch-name.sh --create"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f7f52836-f01c-4a76-8eaa-2f9f6f0c1a98"}},"prettier":"@nswds/prettier-config","repository":{"url":"git+ssh://git@github.com/digitalnsw/nswds-metadata.git","type":"git"},"_npmVersion":"11.19.0","description":"Shared Next.js App Router metadata, viewport and web app manifest for the NSW Design System fleet.","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.3.0","husky":"^9.1.7","react":"^19.2.0","publint":"^0.3.21","prettier":"^3.5.3","react-dom":"^19.2.0","typescript":"^5.9.0","@types/node":"^26.2.0","@types/react":"^19.2.18","@commitlint/cli":"^21.0.2","@types/react-dom":"^19.2.0","semantic-release":"^25.0.3","@arethetypeswrong/cli":"^0.18.3","@semantic-release/git":"^11.0.0","@nswds/prettier-config":"^1.0.1","@semantic-release/github":"^12.0.3","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.0.2","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0","conventional-changelog-conventionalcommits":"^9.3.1"},"peerDependencies":{"next":">=15"},"_npmOperationalInternal":{"tmp":"tmp/metadata_1.1.2_1786416315946_0.5432018906492491","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@nswds/metadata","version":"1.1.3","keywords":["nextjs","app-router","metadata","open-graph","web-app-manifest","favicon","nswds","nsw-government"],"author":{"name":"NSW Design System"},"license":"MPL-2.0","_id":"@nswds/metadata@1.1.3","maintainers":[{"name":"digital-design-system","email":"digital@customerservice.nsw.gov.au"},{"name":"laurenhitchon","email":"lauren@hitchon.me"}],"homepage":"https://github.com/digitalnsw/nswds-metadata#readme","bugs":{"url":"https://github.com/digitalnsw/nswds-metadata/issues"},"dist":{"shasum":"3ed59875a8ad2a31ae23a87c04cd109378ce795b","tarball":"https://registry.npmjs.org/@nswds/metadata/-/metadata-1.1.3.tgz","fileCount":5,"integrity":"sha512-YOE3iUsrZqGAB6f7F6Lo+HCp6jet4aGQ5VF6Kz7kATE2UexCsnTCY6RyCO84jaZ+pscL3o1y1vxWz86Jg3F/Jg==","signatures":[{"sig":"MEUCIBf3TcOhQyxFdMozD/6WrCASmpnJuTXCerPUkTMuZ28jAiEAgHQ08a66UZG2Lk1CB70Qmr5Dpyvy03MUd38kYZldFkw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAU2f9EFwzY3sx/4i+XhEdzXTSI8Uz7UJbwvigV70jXOAiBhyxci/L0eR69ZMG8sFEcWnbZ1K9pz7qYmaJNkrTW0PA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nswds%2fmetadata@1.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":67188},"main":"index.mjs","type":"module","types":"./index.d.mts","engines":{"node":"^22.22.2 || >=24.15.0"},"exports":{".":{"types":"./index.d.mts","default":"./index.mjs"},"./package.json":"./package.json"},"gitHead":"7cac99f33da61a918f030a6bcdf2cb8c0c22d391","scripts":{"pr":"scripts/pull-request.sh","lint":"prettier --check .","test":"node --test index.test.mjs manifest.test.mjs release-config.test.mjs","commit":"scripts/git-commit.sh","format":"prettier --write .","prepare":"husky","typecheck":"tsc --noEmit","snyk:check":"bash -lc 'npm exec --yes --package snyk@latest -- snyk test --all-projects --json-file-output=snyk-analysis.json; code=$?; if [ $code -eq 0 ] || [ $code -eq 1 ]; then exit 0; fi; exit $code'","test:build":"node scripts/test-next-build.mjs","format:check":"prettier --check .","snyk:monitor":"npm exec --yes --package snyk@latest -- snyk monitor --all-projects","branch:create":"scripts/create-branch.sh","check:package":"publint --strict && attw --pack . --profile esm-only","branch:suggest":"scripts/suggest-branch-name.sh","semantic-release":"semantic-release","branch:suggest:create":"scripts/suggest-branch-name.sh --create"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f7f52836-f01c-4a76-8eaa-2f9f6f0c1a98"}},"prettier":"@nswds/prettier-config","repository":{"url":"git+ssh://git@github.com/digitalnsw/nswds-metadata.git","type":"git"},"_npmVersion":"11.19.1","description":"Shared Next.js App Router metadata, viewport and web app manifest for the NSW Design System fleet.","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.3.0","husky":"^9.1.7","react":"^19.2.0","publint":"^0.3.21","prettier":"^3.5.3","react-dom":"^19.2.0","typescript":"^5.9.0","@types/node":"^26.2.0","@types/react":"^19.2.18","@commitlint/cli":"^21.0.2","@types/react-dom":"^19.2.0","semantic-release":"^25.0.3","@arethetypeswrong/cli":"^0.18.3","@semantic-release/git":"^11.0.0","@nswds/prettier-config":"^1.0.1","@semantic-release/github":"^12.0.3","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.0.2","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0","conventional-changelog-conventionalcommits":"^9.3.1"},"peerDependencies":{"next":">=15"},"_npmOperationalInternal":{"tmp":"tmp/metadata_1.1.3_1789080076667_0.32098958676632505","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"_id":"@nswds/metadata@1.1.4","bugs":{"url":"https://github.com/digitalnsw/nswds-metadata/issues"},"dist":{"shasum":"d4b9a04bf353a75d9963caa0c58926d1d4924cce","tarball":"https://registry.npmjs.org/@nswds/metadata/-/metadata-1.1.4.tgz","fileCount":5,"integrity":"sha512-HawTHsNL8u7kLea3L/31Cf3LNGq9q3mjhtA4COZPXMpeQ1D5CayXkimNNEE3moyOSzNKSdW4qEo9BR8SZrJoNw==","signatures":[{"sig":"MEUCIC4R0ymeRMH6UhdoPw9Hw5a2OsjfkY4fcKAQx6fB1EBrAiEAy+fCVWhIi8i697t2unCw0Vj4gs/r+uH4wUptROFSkm4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD5ygNQk4jgGH5vY089PQBZCKj+kds7rO79/cmVuQ0FRQIhAIUCCDOs1NqZCS/aJsyK+FHuxNy82hrN6IOQJ7mK4Vza"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nswds%2fmetadata@1.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":67188},"main":"index.mjs","name":"@nswds/metadata","type":"module","types":"./index.d.mts","author":{"name":"NSW Design System"},"engines":{"node":"^22.22.2 || >=24.15.0"},"exports":{".":{"types":"./index.d.mts","default":"./index.mjs"},"./package.json":"./package.json"},"gitHead":"1ac405260453b46eea5eda3499e0689872029408","license":"MPL-2.0","scripts":{"pr":"scripts/pull-request.sh","lint":"prettier --check .","test":"node --test index.test.mjs manifest.test.mjs release-config.test.mjs","commit":"scripts/git-commit.sh","format":"prettier --write .","prepare":"husky","typecheck":"tsc --noEmit","snyk:check":"bash -lc 'npm exec --yes --package snyk@latest -- snyk test --all-projects --json-file-output=snyk-analysis.json; code=$?; if [ $code -eq 0 ] || [ $code -eq 1 ]; then exit 0; fi; exit $code'","test:build":"node scripts/test-next-build.mjs","format:check":"prettier --check .","snyk:monitor":"npm exec --yes --package snyk@latest -- snyk monitor --all-projects","branch:create":"scripts/create-branch.sh","check:package":"publint --strict && attw --pack . --profile esm-only","branch:suggest":"scripts/suggest-branch-name.sh","semantic-release":"semantic-release","branch:suggest:create":"scripts/suggest-branch-name.sh --create"},"version":"1.1.4","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f7f52836-f01c-4a76-8eaa-2f9f6f0c1a98"}},"homepage":"https://github.com/digitalnsw/nswds-metadata#readme","keywords":["nextjs","app-router","metadata","open-graph","web-app-manifest","favicon","nswds","nsw-government"],"prettier":"@nswds/prettier-config","repository":{"url":"git+ssh://git@github.com/digitalnsw/nswds-metadata.git","type":"git"},"_npmVersion":"11.19.1","description":"Shared Next.js App Router metadata, viewport and web app manifest for the NSW Design System fleet.","directories":{},"maintainers":[{"name":"digital-design-system","email":"digital@customerservice.nsw.gov.au"},{"name":"laurenhitchon","email":"lauren@hitchon.me"}],"_nodeVersion":"24.16.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.3.0","husky":"^9.1.7","react":"^19.2.0","publint":"^0.3.21","prettier":"^3.5.3","react-dom":"^19.2.0","typescript":"^5.9.0","@types/node":"^26.2.0","@types/react":"^19.2.18","@commitlint/cli":"^21.0.2","@types/react-dom":"^19.2.0","semantic-release":"^25.0.3","@arethetypeswrong/cli":"^0.18.3","@semantic-release/git":"^11.0.0","@nswds/prettier-config":"^1.0.1","@semantic-release/github":"^12.0.3","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.0.2","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0","conventional-changelog-conventionalcommits":"^9.3.1"},"peerDependencies":{"next":">=15"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/metadata_1.1.4_1789086202160_0.18989908402969147"}}},"time":{"created":"2026-08-10T11:51:45.107Z","modified":"2026-09-11T00:23:22.614Z","0.0.0":"2026-08-10T11:51:45.468Z","1.0.0":"2026-08-10T11:56:15.889Z","1.1.0":"2026-08-10T12:25:21.370Z","1.1.1":"2026-08-10T12:36:42.536Z","1.1.2":"2026-08-11T02:45:16.092Z","1.1.3":"2026-09-10T22:41:16.763Z","1.1.4":"2026-09-11T00:23:22.259Z"},"bugs":{"url":"https://github.com/digitalnsw/nswds-metadata/issues"},"author":{"name":"NSW Design System"},"license":"MPL-2.0","homepage":"https://github.com/digitalnsw/nswds-metadata#readme","keywords":["nextjs","app-router","metadata","open-graph","web-app-manifest","favicon","nswds","nsw-government"],"repository":{"url":"git+ssh://git@github.com/digitalnsw/nswds-metadata.git","type":"git"},"description":"Shared Next.js App Router metadata, viewport and web app manifest for the NSW Design System fleet.","maintainers":[{"name":"digital-design-system","email":"digital@customerservice.nsw.gov.au"},{"name":"laurenhitchon","email":"lauren@hitchon.me"}],"readme":"# @nswds/metadata\n\nShared Next.js App Router metadata, viewport and web app manifest for the\ndigitalnsw fleet.\n\nEvery site was hand-rolling its own `metadata` block and they had drifted: most\ncarried no `metadataBase`, none exported a `viewport`, and several were quietly\ntelling search engines that every page on the site was the homepage. The\ndefaults that should be identical across every NSW Government service now live\nin one versioned place; the fields that genuinely differ stay arguments.\n\nEverything here is checked against Next 16.3.0's `dist/`, not its prose docs,\nwhich are wrong in several places that matter — noted inline where relevant.\n\nA consuming repo holds exactly one module that calls `defineSite` — by\nconvention `lib/site.ts`. The root layout takes `metadata` and `viewport` from\nit; `app/manifest.ts` and individual pages take what they need from the same\nobject. See [Use](#use) for the full shape.\n\n## Install\n\n```sh\nnpm install @nswds/metadata\n```\n\n`next` is a required peer (`>=15`). The package imports nothing from it at\nruntime — it is object literals all the way down — but its whole type surface is\nNext's, so a Next-less install fails loudly rather than at first `tsc`.\n\n## Use\n\nOne entry point. Define the site once, in its own module:\n\n```ts\n// lib/site.ts\nimport { defineSite } from '@nswds/metadata'\n\nexport const site = defineSite({\n  title: 'Public Sans (NSW) Download',\n  description: 'Download Public Sans, the official NSW Government typeface.',\n  url: 'https://public-sans.digital.nsw.gov.au/',\n})\n```\n\nThen use it from the three places Next asks for metadata:\n\n```tsx\n// app/layout.tsx\nexport const { metadata, viewport } = site\n```\n\n```ts\n// app/manifest.ts\nexport default site.manifest\n```\n\n```tsx\n// app/guidance/page.tsx\nexport const metadata = site.page({ title: 'Guidance' })\n```\n\nThree options are required — `title`, `description`, `url`. Everything else has\na fleet default: `metadataBase`, the title template, OpenGraph with `en_AU` and\nthe NSW image, a `summary_large_image` Twitter card, `robots` with\n`max-image-preview:large`, a self-resolving canonical, and `appleWebApp`.\n\nDo **not** annotate the exports as `: Metadata`. Next's type plugin does not\ncheck `export const metadata`, so the annotation adds nothing and reintroduces\nthe `import type` line this package exists to delete.\n\n### Why there is no `createMetadata`\n\nBecause a page cannot safely write its own metadata object. Next **replaces**\n`openGraph` and `twitter` wholesale for any segment that sets them — so this,\nwhich looks obviously correct, silently deletes the layout's entire OpenGraph\nblock:\n\n```tsx\n// DON'T\nexport const metadata = { openGraph: { type: 'article' } }\n```\n\n`site.page()` and `site.article()` cannot make that mistake. `page()` emits **no\n`openGraph` key at all**, because `og:title` and `og:description` are inherited\nfrom the page's own title and description for free. `article()` restates the\nwhole block before adding the `article:*` fields, which is the only safe way to\nset them.\n\n```tsx\nexport const metadata = site.article({\n  title: 'New guidance for pharmacists',\n  description: 'What changed and when it takes effect.',\n  published: '2026-08-01',\n  modified: '2026-08-09', // often the most important fact on a government page\n  section: 'Health',\n})\n```\n\n### Titles below the root\n\n`site.page()` returns `{ default, template }` rather than a bare string, and that\nshape is load-bearing. `resolveTitle` returns `template: null` for a string, and\nNext stashes that null — so a plain-string title in an _intermediate_ layout\nwipes the template for **everything below it**, and a route two levels deep\nrenders `Cards` instead of `Cards | Site`.\n\nTwo escape hatches:\n\n```tsx\n// Opts out of the template for this segment; routes below it are unaffected.\nsite.page({ title: { absolute: 'Page not found' } })\n\n// A sub-brand section: its own template, for this segment and everything below.\nsite.page({ title: 'Signature builder', titleTemplate: '%s | NSW Signatures' })\n```\n\n### Escape hatch\n\n`site.metadata` is a plain object, so anything the options do not cover is a\nspread:\n\n```tsx\nexport const metadata = {\n  ...site.metadata,\n  alternates: { canonical: './', languages: { 'en-AU': '/' } },\n}\n```\n\nNote the asymmetry: `openGraph` passed to `defineSite` is shallow-**merged** over\nthe computed defaults, so `openGraph: { type: 'article' }` keeps `locale`,\n`siteName` and `images`. That is true of _our_ argument and untrue of Next's\nsegment merging — see above.\n\n## Icons: leave them to the file conventions\n\n**Three files, in `app/`. Nothing in `public/`. Nothing else, anywhere.**\n\n| File                 | Spec                                                                                    |\n| -------------------- | --------------------------------------------------------------------------------------- |\n| `app/favicon.ico`    | single 32×32 frame, 1–5 KB                                                              |\n| `app/icon.svg`       | square viewBox, dark mode via inline `@media (prefers-color-scheme: dark)`, no `<text>` |\n| `app/apple-icon.png` | **180×180, fully opaque**, no pre-rounded corners                                       |\n\nThat set emits exactly this, content-hashed, with `sizes` and `type` derived\nfrom the files themselves:\n\n```html\n<link rel=\"icon\" href=\"/favicon.ico?<hash>\" sizes=\"32x32\" type=\"image/x-icon\" />\n<link rel=\"icon\" href=\"/icon.svg?<hash>\" sizes=\"any\" type=\"image/svg+xml\" />\n<link rel=\"apple-touch-icon\" href=\"/apple-icon.png?<hash>\" sizes=\"180x180\" type=\"image/png\" />\n```\n\n**`defineSite` emits no `icons` key, and you should almost never set one.**\nSetting `metadata.icons` does not add to the file conventions — it suppresses\nthem:\n\n```js\nif (leafSegmentStaticIcons.icon.length > 0 || …apple.length > 0) {\n  if (!resolvedMetadata.icons) { …unshift the static icons… }\n}\n// next/dist/lib/metadata/resolve-metadata.js:812\n```\n\nThe failure is **partial, which makes it harder to notice**: the favicon is\nunshifted unconditionally at `:660`, so `app/favicon.ico` survives while\n`icon.svg` and `apple-icon.png` emit nothing. Your tab icon still looks right;\nonly the Slack card is wrong. `icons: null` is safe (the guard stays falsy);\n`icons: {}` suppresses everything and emits no tags at all.\n\n`fixtures/next-app` asserts on every build that all three tags survive.\n\n**Why keep `favicon.ico` when every browser reads the SVG?** It is the only icon\nthat answers a bare `/favicon.ico` request — feed readers, link-preview\nscrapers, security scanners and uptime dashboards fetch that path without ever\nparsing your HTML.\n\n**Dark mode belongs inside the SVG**, never in an `icons[].media` descriptor:\n`media` on `<link rel=icon>` was never reliably implemented, browsers resolve\nthe favicon once at parse time, and reaching for it costs you the other two files.\n\n**Dead, do not add:** `mask-icon` (Safari stopped using it in Safari 12),\n`msapplication-*` and `browserconfig.xml` (Windows 8 tiles via retired\nbrowsers), `rel=\"shortcut icon\"`, `apple-touch-icon-precomposed` (Next warns),\nnumbered `icon0…9.png` (the suffix is a single digit — `icon10.png` is a silent\nno-op), and `app/apple-icon.svg` (extension not allowed, silently ignored).\n`shortcut icon` and `mask-icon` are worse than merely dead: both fall outside\nNext's streaming-metadata reinsert selector, so they strand in `<body>`.\n\n## Manifest icons are a separate problem\n\n`site.manifest` carries **no icons by default**. A manifest icon has to be a\nstably-named file, and no file-convention icon can ever be one — every static\nmetadata image gets `?<16-hex-digest>` appended, unconditionally. The\nconventions also cannot express `purpose: 'maskable'`, which Android's launcher\nneeds.\n\nSo a site that wants an install-prompt icon ships real PNGs in `public/` and\nopts in:\n\n```ts\nimport { defineSite, manifestIcons } from '@nswds/metadata'\n\nexport const site = defineSite({\n  title: '…',\n  description: '…',\n  url: '…',\n  manifest: { icons: manifestIcons() },\n})\n```\n\n`manifestIcons()` expects `icon-192.png`, `icon-512.png`,\n`icon-maskable-192.png`, `icon-maskable-512.png` and `icon.svg` in `public/`.\nWithout them, leave it unset: an empty manifest and one full of 404s look\nidentical to the browser, but the empty one is honest.\n\n**Manifest ownership runs the opposite way to icons.** `mergeStaticMetadata`\ndoes a bare `if (manifest) { target.manifest = manifest }`, so `app/manifest.ts`\noverwrites any `metadata.manifest` value. That is why this package sets none —\na default would be dead code where the route exists and a link to a 404 where it\ndoes not.\n\n## What this deliberately does not emit\n\nEach of these is a decision, recorded so nobody re-adds it:\n\n| Field                                                                             | Why not                                                                                                                                    |\n| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| `keywords`                                                                        | Ignored by Google since 2009, a spam signal to Bing. One identical keyword fleet-wide reads as low-quality templating.                     |\n| `applicationName`                                                                 | Legacy Windows pinned tiles. Superseded by the manifest `name`.                                                                            |\n| `robots.notranslate`                                                              | Tells Google not to offer translation. Indefensible for a NSW audience.                                                                    |\n| `viewport.userScalable` / `maximumScale`                                          | `user-scalable=no` and a max scale under 2 fail WCAG 2.2 SC 1.4.4 (F69). **Passing either throws.**                                        |\n| `manifest.orientation`                                                            | Locking an installed app to portrait fails SC 1.3.4, and only manifests in the _installed_ app — so it survives every browser-based audit. |\n| `classification`                                                                  | Reads like the NSW information-classification scheme. A protective marking in the HTML of a public page is a leak.                         |\n| `generator`                                                                       | Publishing the exact stack of a government site. Next does not set it; the omission is deliberate.                                         |\n| `referrer`                                                                        | Real directive, wrong layer — `Referrer-Policy` as an HTTP header covers images, JSON and downloads too.                                   |\n| `creator`, `publisher`, `category`, `abstract`, `archives`, `assets`, `bookmarks` | Unregistered or unconsumed link types and meta names.                                                                                      |\n| `facebook`, `itunes`, `appLinks`                                                  | Bind the page to a third-party app for no rendering benefit.                                                                               |\n| `pinterest`                                                                       | Non-functional in 16.3.0 — Next emits `property=` where the spec wants `name=`.                                                            |\n| `themeColor`, `colorScheme`, `viewport` on `Metadata`                             | Dead. No branch of the emitter reads them; they emit nothing and warn once per render. Use the `viewport` export.                          |\n\nTwo live traps worth knowing even though the package handles them:\n`formatDetection.telephone: false` kills iOS tap-to-call on the very pages that\nexist to generate calls (exposed, never defaulted), and `robots: { noindex: true }`\n— the natural spelling — is typed `never`, emits **no robots tag at all**, and\nleaves the page indexed. Use `noIndex: true`.\n\n## A caveat on theme colour\n\n`viewport.themeColor` and the manifest's `theme_color` are both `#002664`, and\nthe test suite checks them against each other. A manifest theme colour **cannot**\nbe media-dependent, so a site that overrides the viewport with a light/dark array\nwill always disagree with its own installed chrome. Deliberate trade, not an\noversight.\n\n## Why there is no build step\n\nThe published files are `index.mjs` and a hand-written `index.d.mts`, shipped\nas-is — the same shape as `@nswds/eslint-config` and `@nswds/prettier-config`.\n\nThose two ship no types at all, which works because neither is ever\ntype-checked. This package is imported from `app/layout.tsx` in repos that are\nall `strict: true`, where an untyped module is a hard TS7016 error. So types are\nmandatory here, and hand-writing them is what keeps the no-build-step property.\nA generated `.d.ts` committed to the repo is a build step in disguise, and\ndrifts silently.\n\n## Tests\n\n```sh\nnpm test           # node --test — the returned objects\nnpm run typecheck  # tsc --noEmit — the shipped declarations\nnpm run test:build # a real `next build` over fixtures/next-app\n```\n\n`test:build` is the only check that can reach Next's metadata route loader and\nthe resolver's merge behaviour. It asserts on the rendered HTML of two routes,\nbecause the canonical fix is invisible from a single route: at `/` a correct\n`'./'` and a broken `'/'` produce the same string.\n\n**Debugging note:** a plain `curl` reproduces the _browser_ streaming path, where\nmetadata renders into `<body>` and is relocated by an injected script. To see\nwhat Slack or Facebook actually receive, send a bot UA:\n\n```sh\ncurl -sA 'facebookexternalhit/1.1' https://site.nsw.gov.au/ | grep -E 'og:|twitter:|rel=\"icon\"'\n```\n\nAn absent User-Agent takes the streaming path, not the crawler path.\n\n## Releases\n\nsemantic-release, on merge to `main`. Publishing is npm OIDC trusted publishing\n— there is no `NPM_TOKEN` secret in this repo.\n\n## Shared tooling\n\nThis repo is in **group 2c** of the\n[nswds-devops](https://github.com/digitalnsw/nswds-devops) file sync: the shell\nscripts in `scripts/`, the commit-type configs, `.npmrc`, `.nvmrc`,\n`renovate.json` and most of `.github/workflows/` are owned there and overwritten\non sync. Do not edit them here.\n\n`ci.yml`, `release.yml`, `release.config.mjs` and\n`scripts/verify-release-published.mjs` are deliberately repo-owned — group 2c\nexists precisely so the sync does not overwrite them and disable trusted\npublishing.\n","readmeFilename":"README.md"}