{ "hosting": { "target": "nodejs-dev", "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "headers": [ { "source": "**/*", "headers": [ { "key": "cache-control", "value": "public, max-age=0, must-revalidate" } ] }, { "source": "static/**", "headers": [ { "key": "cache-control", "value": "public, max-age=31536000, immutable" } ] }, { "source": "**/*.@(css|js)", "headers": [ { "key": "cache-control", "value": "public, max-age=31536000, immutable" } ] }, { "source": "sw.js", "headers": [ { "key": "cache-control", "value": "public, max-age=0, must-revalidate" } ] }, { "source": "page-data/**", "headers": [ { "key": "cache-control", "value": "public, max-age=0, must-revalidate" } ] } ] }, "redirects": [ { "source": "/governance/", "destination": "/about/governance/", "type": "301" }, { "source": "/working-groups/", "destination": "/about/working-groups/", "type": "301" }, { "source": "/releases/", "destination": "/about/releases/", "type": "301" }, { "source": "/privacy/", "destination": "/about/privacy/", "type": "301" }, { "source": "/security/", "destination": "/about/security/", "type": "301" }, { "source": "/trademark/", "destination": "https://trademark-policy.openjsf.org/", "type": "301" }, { "source": "/about/trademark/", "destination": "https://trademark-policy.openjsf.org/", "type": "301" }, { "source": "/docs/*", "destination": "/api/", "type": "301" }, { "source": "/api/", "destination": "/api/v18/documentation/", "type": "301" }, { "source": "/api/v18/", "destination": "/api/v18/documentation/", "type": "301" }, { "source": "/api/latest/", "destination": "/api/v18/documentation/", "type": "301" } ] }