diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ac94083a2a1482d..56e4d01cba48925 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -22,9 +22,6 @@ /src/content/docs/workers-ai/ @rita3ko @craigsdennis @markdembo @mchenco @daisyfaithauma @cloudflare/pcx-technical-writing /src/content/docs/vectorize/ @elithrar @vy-ton @sejoker @mchenco @cloudflare/pcx-technical-writing /src/content/partials/vectorize/ @elithrar @mchenco @sejoker @cloudflare/pcx-technical-writing -/src/content/changelogs/workers-ai.yaml @kathayl @G4brym @mchenco @daisyfaithauma @cloudflare/pcx-technical-writing -/src/content/changelogs/ai-gateway.yaml @kathayl @G4brym @mchenco @daisyfaithauma @cloudflare/pcx-technical-writing -/src/content/changelogs/vectorize.yaml @elithrar @mchenco @sejoker @cloudflare/pcx-technical-writing # Analytics & Logs @@ -45,8 +42,8 @@ # Changelogs -/src/content/changelogs-next/ @cloudflare/pm-changelogs -/src/assets/images/changelog-next/ @cloudflare/pm-changelogs +/src/content/changelog/ @cloudflare/pm-changelogs +/src/assets/images/changelog/ @cloudflare/pm-changelogs # Cloudflare One @@ -62,8 +59,6 @@ /src/content/docs/cloudflare-one/policies/data-loss-prevention/ @maxvp @cloudflare/pcx-technical-writing /src/content/docs/cloudflare-one/insights/dex/ @deadlypants1973 @cloudflare/pcx-technical-writing /src/content/docs/email-security/ @Maddy-Cloudflare @cloudflare/pcx-technical-writing -/src/content/changelogs/access.yaml @ranbel @kennyj42 @cloudflare/pcx-technical-writing -/src/content/changelogs/warp.yaml @kokolocomotion1 @ranbel @cloudflare/pcx-technical-writing # Consumer products @@ -92,42 +87,30 @@ /src/assets/images/calls/ @cloudflare/pcx-technical-writing @cloudflare/calls /public/calls/ @cloudflare/pcx-technical-writing @cloudflare/calls /src/content/docs/d1/ @elithrar @rozenmd @vy-ton @joshthoward @oxyjun @cloudflare/pcx-technical-writing -/src/content/changelogs/d1.yaml @elithrar @rozenmd @vy-ton @joshthoward @oxyjun @cloudflare/pcx-technical-writing /src/content/partials/d1/ @elithrar @rozenmd @vy-ton @joshthoward @oxyjun @cloudflare/pcx-technical-writing /src/content/docs/durable-objects/ @elithrar @vy-ton @joshthoward @oxyjun @cloudflare/pcx-technical-writing -/src/content/changelogs/durable-objects.yaml @elithrar @rozenmd @vy-ton @joshthoward @oxyjun @cloudflare/pcx-technical-writing /src/content/docs/email-routing/ @cloudflare/pcx-technical-writing /src/content/docs/hyperdrive/ @elithrar @thomasgauvin @sejoker @oxyjun @cloudflare/pcx-technical-writing -/src/content/changelogs/hyperdrive.yaml @elithrar @thomasgauvin @sejoker @oxyjun @cloudflare/pcx-technical-writing /src/content/partials/hyperdrive/ @elithrar @thomasgauvin @sejoker @oxyjun @cloudflare/pcx-technical-writing -/src/content/changelogs/durable-objects.yaml @elithrar @vy-ton @joshthoward @oxyjun @cloudflare/pcx-technical-writing /src/content/docs/images/ @dcpena @cloudflare/pcx-technical-writing @renandincer @third774 /src/content/docs/pages/ @cloudflare/workers-docs @GregBrimble @WalshyDev @aninibread @irvinebroque @cloudflare/pcx-technical-writing @ToriLindsay /src/assets/images/pages/ @cloudflare/workers-docs @GregBrimble @WalshyDev @aninibread @cloudflare/pcx-technical-writing @ToriLindsay -/src/content/changelogs/pages.yaml @cloudflare/workers-docs @GregBrimble @WalshyDev @aninibread @cloudflare/pcx-technical-writing /src/content/docs/kv/ @elithrar @thomasgauvin @rts-rob @oxyjun @cloudflare/pcx-technical-writing -/src/content/changelogs/kv.yaml @elithrar @thomasgauvin @rts-rob @oxyjun @cloudflare/pcx-technical-writing /src/content/partials/kv/ @elithrar @thomasgauvin @rts-rob @oxyjun @cloudflare/pcx-technical-writing /src/content/docs/pub-sub/ @elithrar @dcpena @cloudflare/pcx-technical-writing /src/content/docs/queues/ @elithrar @toddmantell @maheshwarip @cloudflare/pcx-technical-writing -/src/content/changelogs/queues.yaml @elithrar @toddmantell @maheshwarip @cloudflare/pcx-technical-writing /src/content/docs/r2/ @oxyjun @elithrar @jonesphillip @cloudflare/workers-docs @cloudflare/pcx-technical-writing -/src/content/changelogs/r2.yaml @oxyjun @elithrar @cloudflare/workers-docs @cloudflare/pcx-technical-writing /src/content/docs/stream/ @tsmith512 @dcpena @cloudflare/pcx-technical-writing @renandincer @third774 -/src/content/changelogs/stream.yaml @tsmith512 @dcpena @cloudflare/pcx-technical-writing /src/content/docs/workers/ @cloudflare/workers-docs @GregBrimble @irvinebroque @mikenomitch @WalshyDev @cloudflare/deploy-config @cloudflare/pcx-technical-writing @ToriLindsay /src/content/partials/workers/ @cloudflare/workers-docs @GregBrimble @irvinebroque @mikenomitch @WalshyDev @cloudflare/deploy-config @cloudflare/pcx-technical-writing @ToriLindsay /src/assets/images/workers/ @cloudflare/workers-docs @GregBrimble @irvinebroque @WalshyDev @cloudflare/deploy-config @cloudflare/pcx-technical-writing @ToriLindsay -/src/content/changelogs/workers.yaml @cloudflare/workers-docs @GregBrimble @WalshyDev @aninibread @cloudflare/deploy-config @cloudflare/pcx-technical-writing @irvinebroque @mikenomitch /src/content/docs/zaraz/ @bjesus @jonnyparris @simonabadoiu @cloudflare/pcx-technical-writing -/src/content/changelogs/zaraz.yaml @bjesus @jonnyparris @simonabadoiu @cloudflare/pcx-technical-writing /src/content/docs/workers/ci-cd/ @irvinebroque @aninibread @GregBrimble @ToriLindsay @cloudflare/pcx-technical-writing /src/content/docs/workers/runtime-apis/ @irvinebroque @jasnell @mikenomitch @GregBrimble @ToriLindsay @cloudflare/pcx-technical-writing /src/content/docs/workers/runtime-apis/bindings/ @irvinebroque @mikenomitch @GregBrimble @ToriLindsay @cloudflare/pcx-technical-writing /src/content/docs/workers/platform/ @irvinebroque @GregBrimble @cloudflare/deploy-config @cloudflare/pcx-technical-writing /src/content/docs/workers/configuration/compatibility-dates.mdx @irvinebroque @mikenomitch @GregBrimble @ToriLindsay @cloudflare/deploy-config @cloudflare/pcx-technical-writing /src/content/docs/workers/configuration/compatibility-flags.mdx @irvinebroque @mikenomitch @GregBrimble @ToriLindsay @cloudflare/deploy-config @cloudflare/pcx-technical-writing - /src/content/docs/workers/reference/migrate-to-module-workers.mdx @irvinebroque @GregBrimble @ToriLindsay @cloudflare/deploy-config @cloudflare/pcx-technical-writing /src/content/docs/workers/reference/security-model.mdx @irvinebroque @GregBrimble @ToriLindsay @cloudflare/pcx-technical-writing /src/content/compatibility-flags/ @irvinebroque @mikenomitch @GregBrimble @cloudflare/pcx-technical-writing @@ -144,8 +127,6 @@ /src/content/docs/ddos-protection/ @patriciasantaana @cloudflare/pcx-technical-writing /src/content/docs/ddos-protection/change-log/ @antoinecordelle @patriciasantaana @cloudflare/pcx-technical-writing -/src/content/changelogs/ddos-http.yaml @antoinecordelle @patriciasantaana @cloudflare/pcx-technical-writing -/src/content/changelogs/ddos-network.yaml @antoinecordelle @patriciasantaana @cloudflare/pcx-technical-writing # Docs team areas @@ -184,7 +165,6 @@ # Radar /src/content/docs/radar/ @meddulla @G4brym @tiagoad @andre-j3sus @cloudflare/pcx-technical-writing -/src/content/changelogs/radar.yaml @meddulla @G4brym @tiagoad @andre-j3sus @cloudflare/pcx-technical-writing # Reference architecture @@ -202,7 +182,6 @@ /src/content/docs/ssl/ @RebeccaTamachiro @cloudflare/pcx-technical-writing /src/content/docs/waf/ @pedrosousa @cloudflare/firewall @cloudflare/pcx-technical-writing /src/content/docs/waf/change-log/ @pedrosousa @cloudflare/firewall @vs-mg @cloudflare/pcx-technical-writing -/src/content/changelogs/waf.yaml @pedrosousa @cloudflare/firewall @vs-mg @cloudflare/pcx-technical-writing # Support @@ -216,7 +195,6 @@ # Waiting Room /src/content/docs/waiting-room/ @angelampcosta @cloudflare/pcx-technical-writing -/src/content/changelogs/waiting-room.yaml @angelampcosta @cloudflare/pcx-technical-writing # Web Analytics diff --git a/package-lock.json b/package-lock.json index c3a9238ffad04dd..306d5f48a860310 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "@types/react-dom": "19.0.3", "@typescript-eslint/parser": "8.24.0", "algoliasearch": "5.20.1", - "astro": "5.2.1", + "astro": "5.2.5", "astro-breadcrumbs": "3.3.1", "astro-icon": "1.1.5", "astro-live-code": "0.0.5", @@ -70,9 +70,12 @@ "rehype-autolink-headings": "7.1.0", "rehype-external-links": "3.0.0", "rehype-parse": "9.0.1", + "rehype-remark": "10.0.0", "rehype-stringify": "10.0.1", "rehype-title-figure": "0.1.2", "remark": "15.0.1", + "remark-gfm": "4.0.1", + "remark-stringify": "11.0.0", "sharp": "0.33.5", "solarflare-theme": "0.0.2", "starlight-image-zoom": "0.10.1", @@ -488,9 +491,9 @@ "license": "MIT" }, "node_modules/@astrojs/internal-helpers": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.5.0.tgz", - "integrity": "sha512-CgB5ZaZO1PFG+rbjF3HnA7G6gIBjJ070xb7bUjeu5Gqqufma+t6fpuRWMXnK2iEO3zVyX7e/xplPlqtFKy/lvw==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.5.1.tgz", + "integrity": "sha512-M7rAge1n2+aOSxNvKUFa0u/KFn0W+sZy7EW91KOSERotm2Ti8qs+1K0xx3zbOxtAVrmJb5/J98eohVvvEqtNkw==", "dev": true, "license": "MIT" }, @@ -3448,67 +3451,67 @@ ] }, "node_modules/@shikijs/core": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.29.1.tgz", - "integrity": "sha512-Mo1gGGkuOYjDu5H8YwzmOuly9vNr8KDVkqj9xiKhhhFS8jisAtDSEWB9hzqRHLVQgFdA310e8XRJcW4tYhRB2A==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.29.2.tgz", + "integrity": "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/engine-javascript": "1.29.1", - "@shikijs/engine-oniguruma": "1.29.1", - "@shikijs/types": "1.29.1", + "@shikijs/engine-javascript": "1.29.2", + "@shikijs/engine-oniguruma": "1.29.2", + "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.4" } }, "node_modules/@shikijs/engine-javascript": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.29.1.tgz", - "integrity": "sha512-Hpi8k9x77rCQ7F/7zxIOUruNkNidMyBnP5qAGbLFqg4kRrg1HZhkB8btib5EXbQWTtLb5gBHOdBwshk20njD7Q==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.29.2.tgz", + "integrity": "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "1.29.1", + "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "oniguruma-to-es": "^2.2.0" } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.1.tgz", - "integrity": "sha512-gSt2WhLNgEeLstcweQOSp+C+MhOpTsgdNXRqr3zP6M+BUBZ8Md9OU2BYwUYsALBxHza7hwaIWtFHjQ/aOOychw==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.2.tgz", + "integrity": "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "1.29.1", + "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1" } }, "node_modules/@shikijs/langs": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-1.29.1.tgz", - "integrity": "sha512-iERn4HlyuT044/FgrvLOaZgKVKf3PozjKjyV/RZ5GnlyYEAZFcgwHGkYboeBv2IybQG1KVS/e7VGgiAU4JY2Gw==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-1.29.2.tgz", + "integrity": "sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "1.29.1" + "@shikijs/types": "1.29.2" } }, "node_modules/@shikijs/themes": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-1.29.1.tgz", - "integrity": "sha512-lb11zf72Vc9uxkl+aec2oW1HVTHJ2LtgZgumb4Rr6By3y/96VmlU44bkxEb8WBWH3RUtbqAJEN0jljD9cF7H7g==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-1.29.2.tgz", + "integrity": "sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "1.29.1" + "@shikijs/types": "1.29.2" } }, "node_modules/@shikijs/types": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.29.1.tgz", - "integrity": "sha512-aBqAuhYRp5vSir3Pc9+QPu9WESBOjUo03ao0IHLC4TyTioSsp/SkbAZSrIH4ghYYC1T1KTEpRSBa83bas4RnPA==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.29.2.tgz", + "integrity": "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==", "dev": true, "license": "MIT", "dependencies": { @@ -5167,14 +5170,14 @@ } }, "node_modules/astro": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/astro/-/astro-5.2.1.tgz", - "integrity": "sha512-OYR2kUo9EqX6OYZ1OmM14xP8mjFwgrk1FzIr+3K3tS0gCCKJsXtfboCUhX3lODZFIsmY/on7NPZd+2PURA0R2Q==", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.2.5.tgz", + "integrity": "sha512-AYXyYkc+c5xbKTm48FyQA91y81nXyNPAaoyafR0LUugE4lAwuvIUcXDBfMzmbuP1lGRvsE33G2oypv6gbGaPFg==", "dev": true, "license": "MIT", "dependencies": { "@astrojs/compiler": "^2.10.3", - "@astrojs/internal-helpers": "0.5.0", + "@astrojs/internal-helpers": "0.5.1", "@astrojs/markdown-remark": "6.1.0", "@astrojs/telemetry": "3.2.0", "@oslojs/encoding": "^1.1.0", @@ -5201,7 +5204,7 @@ "fast-glob": "^3.3.3", "flattie": "^1.1.1", "github-slugger": "^2.0.0", - "html-escaper": "^3.0.3", + "html-escaper": "3.0.3", "http-cache-semantics": "^4.1.1", "js-yaml": "^4.1.0", "kleur": "^4.1.5", @@ -5211,12 +5214,12 @@ "mrmime": "^2.0.0", "neotraverse": "^0.6.18", "p-limit": "^6.2.0", - "p-queue": "^8.0.1", - "preferred-pm": "^4.0.0", + "p-queue": "^8.1.0", + "preferred-pm": "^4.1.1", "prompts": "^2.4.2", "rehype": "^13.0.2", - "semver": "^7.6.3", - "shiki": "^1.29.1", + "semver": "^7.7.1", + "shiki": "^1.29.2", "tinyexec": "^0.3.2", "tsconfck": "^3.1.4", "ultrahtml": "^1.5.3", @@ -5225,10 +5228,10 @@ "vfile": "^6.0.3", "vite": "^6.0.11", "vitefu": "^1.0.5", - "which-pm": "^3.0.0", + "which-pm": "^3.0.1", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", - "yocto-spinner": "^0.1.2", + "yocto-spinner": "^0.2.0", "zod": "^3.24.1", "zod-to-json-schema": "^3.24.1", "zod-to-ts": "^1.2.0" @@ -10157,6 +10160,33 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-to-mdast": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/hast-util-to-mdast/-/hast-util-to-mdast-10.1.2.tgz", + "integrity": "sha512-FiCRI7NmOvM4y+f5w32jPRzcxDIz+PUqDwEqn1A+1q2cdp3B8Gx7aVrXORdOKjMNDQsD1ogOr896+0jJHW1EFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-phrasing": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "hast-util-to-text": "^4.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "mdast-util-to-string": "^4.0.0", + "rehype-minify-whitespace": "^6.0.0", + "trim-trailing-lines": "^2.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-to-parse5": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", @@ -11644,13 +11674,6 @@ "node": ">=6" } }, - "node_modules/load-yaml-file/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/local-pkg": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", @@ -13640,9 +13663,9 @@ } }, "node_modules/p-queue": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.0.1.tgz", - "integrity": "sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.0.tgz", + "integrity": "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==", "dev": true, "license": "MIT", "dependencies": { @@ -14278,15 +14301,15 @@ } }, "node_modules/preferred-pm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-4.0.0.tgz", - "integrity": "sha512-gYBeFTZLu055D8Vv3cSPox/0iTPtkzxpLroSYYA7WXgRi31WCJ51Uyl8ZiPeUUjyvs2MBzK+S8v9JVUgHU/Sqw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-4.1.1.tgz", + "integrity": "sha512-rU+ZAv1Ur9jAUZtGPebQVQPzdGhNzaEiQ7VL9+cjsAWPHFYOccNXPNiev1CCDSOg/2j7UujM7ojNhpkuILEVNQ==", "dev": true, "license": "MIT", "dependencies": { "find-up-simple": "^1.0.0", "find-yarn-workspace-root2": "1.2.16", - "which-pm": "^3.0.0" + "which-pm": "^3.0.1" }, "engines": { "node": ">=18.12" @@ -14824,6 +14847,21 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/rehype-minify-whitespace": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-6.0.2.tgz", + "integrity": "sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-minify-whitespace": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/rehype-parse": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", @@ -14872,6 +14910,24 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/rehype-remark": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rehype-remark/-/rehype-remark-10.0.0.tgz", + "integrity": "sha512-+aDXY/icqMFOafJQomVjxe3BAP7aR3lIsQ3GV6VIwpbCD2nvNFOXjGvotMe5p0Ny+Gt6L13DhEf/FjOOpTuUbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "hast-util-to-mdast": "^10.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/rehype-stringify": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", @@ -15058,9 +15114,9 @@ } }, "node_modules/remark-gfm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", - "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", "dev": true, "license": "MIT", "dependencies": { @@ -15550,9 +15606,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "license": "ISC", "bin": { @@ -15675,18 +15731,18 @@ } }, "node_modules/shiki": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.29.1.tgz", - "integrity": "sha512-TghWKV9pJTd/N+IgAIVJtr0qZkB7FfFCUrrEJc0aRmZupo3D1OCVRknQWVRVA7AX/M0Ld7QfoAruPzr3CnUJuw==", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.29.2.tgz", + "integrity": "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "1.29.1", - "@shikijs/engine-javascript": "1.29.1", - "@shikijs/engine-oniguruma": "1.29.1", - "@shikijs/langs": "1.29.1", - "@shikijs/themes": "1.29.1", - "@shikijs/types": "1.29.1", + "@shikijs/core": "1.29.2", + "@shikijs/engine-javascript": "1.29.2", + "@shikijs/engine-oniguruma": "1.29.2", + "@shikijs/langs": "1.29.2", + "@shikijs/themes": "1.29.2", + "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } @@ -15910,6 +15966,13 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", @@ -16716,6 +16779,17 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/trim-trailing-lines": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-2.1.0.tgz", + "integrity": "sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/trough": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", @@ -18913,9 +18987,9 @@ } }, "node_modules/which-pm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-3.0.0.tgz", - "integrity": "sha512-ysVYmw6+ZBhx3+ZkcPwRuJi38ZOTLJJ33PSHaitLxSKUMsh0LkKd0nC69zZCwt5D+AYUcMK2hhw4yWny20vSGg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-3.0.1.tgz", + "integrity": "sha512-v2JrMq0waAI4ju1xU5x3blsxBBMgdgZve580iYMN5frDaLGjbA24fok7wKCsya8KLVO19Ju4XDc5+zTZCJkQfg==", "dev": true, "license": "MIT", "dependencies": { @@ -19460,9 +19534,9 @@ } }, "node_modules/yocto-spinner": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.1.2.tgz", - "integrity": "sha512-VfmLIh/ZSZOJnVRQZc/dvpPP90lWL4G0bmxQMP0+U/2vKBA8GSpcBuWv17y7F+CZItRuO97HN1wdbb4p10uhOg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.0.tgz", + "integrity": "sha512-Qu6WAqNLGleB687CCGcmgHIo8l+J19MX/32UrSMfbf/4L8gLoxjpOYoiHT1asiWyqvjRZbgvOhLlvne6E5Tbdw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index aede6cc92b7d684..97450da9ba03692 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@types/react-dom": "19.0.3", "@typescript-eslint/parser": "8.24.0", "algoliasearch": "5.20.1", - "astro": "5.2.1", + "astro": "5.2.5", "astro-breadcrumbs": "3.3.1", "astro-icon": "1.1.5", "astro-live-code": "0.0.5", @@ -87,9 +87,12 @@ "rehype-autolink-headings": "7.1.0", "rehype-external-links": "3.0.0", "rehype-parse": "9.0.1", + "rehype-remark": "10.0.0", "rehype-stringify": "10.0.1", "rehype-title-figure": "0.1.2", "remark": "15.0.1", + "remark-gfm": "4.0.1", + "remark-stringify": "11.0.0", "sharp": "0.33.5", "solarflare-theme": "0.0.2", "starlight-image-zoom": "0.10.1", diff --git a/public/_redirects b/public/_redirects index c908414ac18ed37..3d7ae0560ac2ec3 100644 --- a/public/_redirects +++ b/public/_redirects @@ -4,9 +4,186 @@ /dashboard-landing/ / 301 /tutorials/ /search/?content_type%5B0%5D=Tutorial 301 /sitemap.xml /sitemap-index.xml -/changelog/index.xml /release-notes/index.xml 301 /deprecations/ /fundamentals/api/reference/deprecations/ 301 +# changelogs + +## legacy +/release-notes/ /changelog/ 301 +/release-notes/index.xml /changelog/rss/index.xml 301 + +## rss +/changelog/index.xml /changelog/rss/index.xml 301 +/changelog/rss.xml /changelog/rss/index.xml 301 + +### areas +/cloudflare-one/changelog/index.xml /changelog/rss/cloudflare-one.xml 301 +/fundamentals/reference/changelog/performance/index.xml /changelog/rss/application-performance.xml 301 +/fundamentals/reference/changelog/platform/index.xml /changelog/rss/core-platform.xml 301 +/fundamentals/reference/changelog/security/index.xml /changelog/rss/application-security.xml 301 +/workers/platform/changelog/platform/index.xml /changelog/rss/developer-platform.xml 301 + +### products +/cloudflare-one/changelog/access/index.xml /changelog/rss/access.xml 301 +/ai-gateway/changelog/index.xml /changelog/rss/ai-gateway.xml 301 +/fundamentals/api/reference/deprecations/index.xml /changelog/rss/api-deprecations.xml 301 +/api-shield/changelog/index.xml /changelog/rss/api-shield.xml 301 +/web-analytics/changelog/index.xml /changelog/rss/beacon-min-js.xml 301 +/bots/changelog/index.xml /changelog/rss/bots.xml 301 +/cloudflare-one/changelog/browser-isolation/index.xml /changelog/rss/browser-isolation.xml 301 +/browser-rendering/changelog/index.xml /changelog/rss/browser-rendering.xml 301 +/byoip/changelog/index.xml /changelog/rss/byoip.xml 301 +/cache/changelog/index.xml /changelog/rss/cache.xml 301 +/calls/changelog/index.xml /changelog/rss/calls.xml 301 +/cloudflare-one/changelog/casb/index.xml /changelog/rss/casb.xml 301 +/d1/platform/changelog/index.xml /changelog/rss/d1.xml 301 + +/workers/platform/changelog/wrangler/ https://github.com/cloudflare/workers-sdk/releases 301 +/workers/platform/changelog/wrangler/index.xml https://github.com/cloudflare/workers-sdk/releases.atom 301 + +# todo + +# ddos-http.yaml +# "/ddos-protection/change-log/http/" + +# ddos-network.yaml +# "/ddos-protection/change-log/network/" + +# ddos.yaml +# "/ddos-protection/change-log/general-updates/" + +# dex.yaml +# "/cloudflare-one/changelog/dex/" + +# dlp.yaml +# "/cloudflare-one/changelog/dlp/" + +# dns.yaml +# "/dns/changelog/" + +# durable-objects.yaml +# "/durable-objects/changelog/" + +# email-security.yaml +# "/cloudflare-one/changelog/email-security/" + +# fundamentals.yaml +# "/fundamentals/changelog/" + +# gateway.yaml +# "/cloudflare-one/changelog/gateway/" + +# hyperdrive.yaml +# "/hyperdrive/platform/changelog/" + +# images.yaml +# "/images/platform/changelog/" + +# kv.yaml +# "/kv/platform/changelog/" + +# load-balancing.yaml +# "/load-balancing/changelog/" + +# logs.yaml +# "/logs/changelog/" + +# magic-cloud-networking.yaml +# "/magic-cloud-networking/changelog/" + +# magic-firewall.yaml +# "/magic-firewall/changelog/" + +# magic-network-monitoring.yaml +# "/magic-network-monitoring/changelog/" + +# magic-transit.yaml +# "/magic-transit/changelog/" + +# magic-wan.yaml +# "/magic-wan/changelog/" + +# network-interconnect.yaml +# "/network-interconnect/changelog/" + +# notifications.yaml +# "/notifications/changelog/" + +# pages.yaml +# "/pages/platform/changelog/" + +# queues.yaml +# "/queues/platform/changelog/" + +# r2.yaml +# "/r2/platform/changelog/" + +# radar.yaml +# "/radar/changelog/" + +# risk-score.yaml +# "/cloudflare-one/changelog/risk-score/" + +# rules.yaml +# "/rules/changelog/" + +# security-center.yaml +# "/security-center/changelog/" + +# spectrum.yaml +# "/spectrum/changelog/" + +# ssl.yaml +# "/ssl/changelog/" + +# stream.yaml +# "/stream/changelog/" + +# tenant.yaml +# "/tenant/changelog/" + +# trace.yaml +# "/fundamentals/security/trace-request/changelog/" + +# tunnel.yaml +# "/cloudflare-one/changelog/tunnel/" + +# turnstile.yaml +# "/turnstile/changelog/" + +# vectorize.yaml +# "/vectorize/platform/changelog/" + +# version-management.yaml +# "/version-management/changelog/" + +# waf-general.yaml +# "/waf/change-log/general-updates/" + +# waf.yaml +# "/waf/change-log/" + +# waiting-room.yaml +# "/waiting-room/changelog/" + +# warp.yaml +# "/cloudflare-one/changelog/warp/" + +# workers-ai.yaml +# "/workers-ai/changelog/" + +# workers-for-platforms.yaml +# "/cloudflare-for-platforms/workers-for-platforms/platform/changelog/" + +# workers.yaml +# "/workers/platform/changelog/" + +# workflows.yaml +# "/workflows/reference/changelog/" + +# zaraz.yaml +# "/zaraz/changelog/" + # 1dot1_redirect /1.1.1.1/1.1.1.1-for-families/ /1.1.1.1/setup/ 301 /1.1.1.1/1.1.1.1-for-families/android/ /1.1.1.1/setup/android/ 301 diff --git a/src/assets/images/changelog-next/2024-02-03-terraform-v5-screenshot.png b/src/assets/images/changelog/2024-02-03-terraform-v5-screenshot.png similarity index 100% rename from src/assets/images/changelog-next/2024-02-03-terraform-v5-screenshot.png rename to src/assets/images/changelog/2024-02-03-terraform-v5-screenshot.png diff --git a/src/assets/images/changelog-next/hero.svg b/src/assets/images/changelog/hero.svg similarity index 100% rename from src/assets/images/changelog-next/hero.svg rename to src/assets/images/changelog/hero.svg diff --git a/src/components/ProductChangelog.astro b/src/components/ProductChangelog.astro index 2c2274400ea3e91..fde22ac51842cd0 100644 --- a/src/components/ProductChangelog.astro +++ b/src/components/ProductChangelog.astro @@ -1,133 +1,40 @@ --- -import { getEntry, type CollectionEntry } from "astro:content"; -import { marked } from "marked"; -import { getChangelogs } from "~/util/changelogs"; -import AnchorHeading from "~/components/AnchorHeading.astro"; -import { entryToString } from "~/util/container"; +import { getChangelogs, type GetChangelogsOptions } from "~/util/changelog"; +import { reference } from "astro:content"; +import { z } from "astro:schema"; +import { getCollection } from "astro:content"; -const page = await getEntry("docs", Astro.params.slug!); +const props = z.object({ + products: z.array(reference("products")), +}).or(z.object({ + area: z.string() +})); -if (!page) { - throw new Error( - `[ProductChangelog] Failed to find entry for ${Astro.params.slug}.`, - ); -} - -if (!page.data.changelog_file_name && !page.data.changelog_product_area_name) { - throw new Error( - `[ProductChangelog] ${Astro.params.slug} does not have a 'changelog_file_name' or 'changaelog_product_area_name' frontmatter property.`, - ); -} - -if (page.data.changelog_file_name && page.data.changelog_file_name.length > 1) { - throw new Error( - `[ProductChangelog] This component cannot be used on files that have more than 1 entry in their 'changelog_file_name' frontmatter property.`, - ); -} +const input = await props.parseAsync(Astro.props); -const name = - page.data.changelog_product_area_name ?? page.data.changelog_file_name?.[0]; +let filter: GetChangelogsOptions["filter"]; -let changelogs; - -if (page.data.changelog_product_area_name) { - const opts = { - filter: (entry: CollectionEntry<"changelogs">) => { - return entry.data.productArea === name; - }, - }; - ({ changelogs } = await getChangelogs(opts)); +if ("products" in input) { + filter = (e) => { + return e.data.products.some((x) => input.products.some((y) => x.id === y.id)) + } } else { - if (name === "wrangler") { - const opts = { - wranglerOnly: true, - }; - ({ changelogs } = await getChangelogs(opts)); - } else if (name === "api-deprecations") { - const opts = { - deprecationsOnly: true, - }; - ({ changelogs } = await getChangelogs(opts)); - } else { - const opts = { - filter: (entry: CollectionEntry<"changelogs">) => { - return entry.id === name; - }, - }; - ({ changelogs } = await getChangelogs(opts)); + const products = await getCollection("products", (e) => { + return e.data.product.group === input.area; + }); + + filter = (e) => { + return e.data.products.some((x) => products.some((y) => x.id === y.id)) } } -if (!changelogs) { - throw new Error( - `[ProductChangelog] Failed to find changelog called ${name}.`, - ); -} +const changelogs = await getChangelogs({ filter }); --- { - page.data.pcx_content_type === "changelog" && ( -

- - Subscribe to RSS - -

- ) -} -{ - changelogs.map(([date, entries]) => ( -
- {(entries ?? []).map(async (entry) => { - let description; - if (entry.individual_page) { - const link = entry.individual_page; - - if (!link) - throw new Error( - `Changelog entry points to individual page but no link is provided`, - ); - - const page = await getEntry("docs", link.slice(1, -1)); - - if (!page) - throw new Error( - `Changelog entry points to ${link.slice(1, -1)} but unable to find entry with that slug`, - ); - - description = (await entryToString(page, Astro.locals)) ?? page.body; - - return ( -
- - - -

{entry.date}

- {page.data.changelog_product_area_name && ( -

- {entry.product} -

- )} - {} -
- ); - } else { - description = marked.parse(entry.description as string); - return ( - <> - -
- {page.data.changelog_product_area_name && ( -

- {entry.product} -

- )} - {entry.title && {entry.title}} - {} -
- - ); - } - })} -
+ changelogs.map((entry) => ( +

{entry.data.date.toISOString().slice(0, 10)}

+

{entry.data.description}

+

For more information, refer to the dedicated changelog post.

)) -} +} \ No newline at end of file diff --git a/src/components/changelog-next/Header.astro b/src/components/changelog/Header.astro similarity index 89% rename from src/components/changelog-next/Header.astro rename to src/components/changelog/Header.astro index 1083309fd6d8e83..8886a3ef34bd54f 100644 --- a/src/components/changelog-next/Header.astro +++ b/src/components/changelog/Header.astro @@ -4,7 +4,7 @@ import { z } from "astro:schema"; import { getEntry, type CollectionEntry } from "astro:content"; import { StarlightIcon } from ".."; -import HeroImage from "~/assets/images/changelog-next/hero.svg"; +import HeroImage from "~/assets/images/changelog/hero.svg"; type Props = z.input; @@ -14,9 +14,7 @@ const props = z.object({ const { notes } = props.parse(Astro.props); -async function uniqueProducts( - notes: Array>, -) { +async function uniqueProducts(notes: Array>) { const unique = [ ...new Set(notes.flatMap((e) => e.data.products.map((p) => p.id))), ]; @@ -49,7 +47,7 @@ const products = await uniqueProducts(notes); { products.length > 0 && (
- {products .sort((a, b) => a.id.localeCompare(b.id)) diff --git a/src/components/changelog-next/ProductPills.astro b/src/components/changelog/ProductPills.astro similarity index 100% rename from src/components/changelog-next/ProductPills.astro rename to src/components/changelog/ProductPills.astro diff --git a/src/content.config.ts b/src/content.config.ts index 5f8f1f01d0f4bb2..52fa8335cb01db8 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -7,7 +7,7 @@ import { glob } from "astro/loaders"; import { appsSchema, - changelogsSchema, + changelogSchema, baseSchema, notificationsSchema, pagesBuildEnvironmentSchema, @@ -18,7 +18,6 @@ import { videosSchema, workersAiModelsSchema, warpReleasesSchema, - changelogsNextSchema, fieldsSchema, } from "~/schemas"; @@ -51,9 +50,9 @@ export const collections = { loader: i18nLoader(), schema: i18nSchema(), }), - changelogs: defineCollection({ - loader: dataLoader("changelogs"), - schema: changelogsSchema, + changelog: defineCollection({ + loader: contentLoader("changelog"), + schema: changelogSchema, }), "compatibility-flags": defineCollection({ loader: contentLoader("compatibility-flags"), @@ -106,10 +105,6 @@ export const collections = { loader: dataLoader("warp-releases"), schema: warpReleasesSchema, }), - "changelogs-next": defineCollection({ - loader: contentLoader("changelogs-next"), - schema: changelogsNextSchema, - }), fields: defineCollection({ loader: dataLoader("fields"), schema: fieldsSchema, diff --git a/src/content/changelogs-next/2024-10-24-workflows-beta.mdx b/src/content/changelog/2024-10-24-workflows-beta.mdx similarity index 100% rename from src/content/changelogs-next/2024-10-24-workflows-beta.mdx rename to src/content/changelog/2024-10-24-workflows-beta.mdx diff --git a/src/content/changelogs-next/2024-11-11-cache-no-store.mdx b/src/content/changelog/2024-11-11-cache-no-store.mdx similarity index 100% rename from src/content/changelogs-next/2024-11-11-cache-no-store.mdx rename to src/content/changelog/2024-11-11-cache-no-store.mdx diff --git a/src/content/changelogs-next/2024-12-11-hyperdrive-caching-at-edge.mdx b/src/content/changelog/2024-12-11-hyperdrive-caching-at-edge.mdx similarity index 100% rename from src/content/changelogs-next/2024-12-11-hyperdrive-caching-at-edge.mdx rename to src/content/changelog/2024-12-11-hyperdrive-caching-at-edge.mdx diff --git a/src/content/changelogs-next/2024-12-29-faster-builds.mdx b/src/content/changelog/2024-12-29-faster-builds.mdx similarity index 100% rename from src/content/changelogs-next/2024-12-29-faster-builds.mdx rename to src/content/changelog/2024-12-29-faster-builds.mdx diff --git a/src/content/changelogs-next/2025-01-07-aig-provider-deepseek.mdx b/src/content/changelog/2025-01-07-aig-provider-deepseek.mdx similarity index 100% rename from src/content/changelogs-next/2025-01-07-aig-provider-deepseek.mdx rename to src/content/changelog/2025-01-07-aig-provider-deepseek.mdx diff --git a/src/content/changelogs-next/2025-01-07-d1-faster-query.mdx b/src/content/changelog/2025-01-07-d1-faster-query.mdx similarity index 100% rename from src/content/changelogs-next/2025-01-07-d1-faster-query.mdx rename to src/content/changelog/2025-01-07-d1-faster-query.mdx diff --git a/src/content/changelogs-next/2025-01-15-workflows-more-steps.mdx b/src/content/changelog/2025-01-15-workflows-more-steps.mdx similarity index 100% rename from src/content/changelogs-next/2025-01-15-workflows-more-steps.mdx rename to src/content/changelog/2025-01-15-workflows-more-steps.mdx diff --git a/src/content/changelogs-next/2025-01-26-worker-binding-methods.mdx b/src/content/changelog/2025-01-26-worker-binding-methods.mdx similarity index 100% rename from src/content/changelogs-next/2025-01-26-worker-binding-methods.mdx rename to src/content/changelog/2025-01-26-worker-binding-methods.mdx diff --git a/src/content/changelogs-next/2025-01-27-kv-increased-namespaces-limits.mdx b/src/content/changelog/2025-01-27-kv-increased-namespaces-limits.mdx similarity index 100% rename from src/content/changelogs-next/2025-01-27-kv-increased-namespaces-limits.mdx rename to src/content/changelog/2025-01-27-kv-increased-namespaces-limits.mdx diff --git a/src/content/changelogs-next/2025-01-28-hyperdrive-automated-private-database-configuration.mdx b/src/content/changelog/2025-01-28-hyperdrive-automated-private-database-configuration.mdx similarity index 100% rename from src/content/changelogs-next/2025-01-28-hyperdrive-automated-private-database-configuration.mdx rename to src/content/changelog/2025-01-28-hyperdrive-automated-private-database-configuration.mdx diff --git a/src/content/changelogs-next/2025-01-28-nodejs-compat-improvements.mdx b/src/content/changelog/2025-01-28-nodejs-compat-improvements.mdx similarity index 100% rename from src/content/changelogs-next/2025-01-28-nodejs-compat-improvements.mdx rename to src/content/changelog/2025-01-28-nodejs-compat-improvements.mdx diff --git a/src/content/changelogs-next/2025-01-30-browser-rendering-more-instances.mdx b/src/content/changelog/2025-01-30-browser-rendering-more-instances.mdx similarity index 100% rename from src/content/changelogs-next/2025-01-30-browser-rendering-more-instances.mdx rename to src/content/changelog/2025-01-30-browser-rendering-more-instances.mdx diff --git a/src/content/changelogs-next/2025-01-30-stream-generated-captions-new-languages.mdx b/src/content/changelog/2025-01-30-stream-generated-captions-new-languages.mdx similarity index 100% rename from src/content/changelogs-next/2025-01-30-stream-generated-captions-new-languages.mdx rename to src/content/changelog/2025-01-30-stream-generated-captions-new-languages.mdx diff --git a/src/content/changelogs-next/2025-01-31-html-rewriter-streaming.mdx b/src/content/changelog/2025-01-31-html-rewriter-streaming.mdx similarity index 100% rename from src/content/changelogs-next/2025-01-31-html-rewriter-streaming.mdx rename to src/content/changelog/2025-01-31-html-rewriter-streaming.mdx diff --git a/src/content/changelogs-next/2025-01-31-workers-platforms-static-assets.mdx b/src/content/changelog/2025-01-31-workers-platforms-static-assets.mdx similarity index 100% rename from src/content/changelogs-next/2025-01-31-workers-platforms-static-assets.mdx rename to src/content/changelog/2025-01-31-workers-platforms-static-assets.mdx diff --git a/src/content/changelogs-next/2025-02-03-terraform-v5-provider.mdx b/src/content/changelog/2025-02-03-terraform-v5-provider.mdx similarity index 97% rename from src/content/changelogs-next/2025-02-03-terraform-v5-provider.mdx rename to src/content/changelog/2025-02-03-terraform-v5-provider.mdx index 55e7e4533ce0cd7..b626f32d65fe71b 100644 --- a/src/content/changelogs-next/2025-02-03-terraform-v5-provider.mdx +++ b/src/content/changelog/2025-02-03-terraform-v5-provider.mdx @@ -5,7 +5,7 @@ products: - fundamentals date: 2025-02-03 --- -![Screenshot of Terraform defining a Zone](~/assets/images/changelog-next/2024-02-03-terraform-v5-screenshot.png) +![Screenshot of Terraform defining a Zone](~/assets/images/changelog/2024-02-03-terraform-v5-screenshot.png) Cloudflare's v5 Terraform Provider is now generally available. With this release, Terraform resources are now automatically generated based on OpenAPI Schemas. This change brings alignment across our SDKs, API documentation, and now Terraform Provider. The new provider boosts coverage by increasing support for API properties to 100%, adding 25% more resources, and more than 200 additional data sources. Going forward, this will also reduce the barriers to bringing more resources into Terraform across the broader Cloudflare API. This is a small, but important step to making more of our platform manageable through GitOps, making it easier for you to manage Cloudflare just like you do your other infrastructure. diff --git a/src/content/changelogs-next/2025-02-03-workers-metrics-revamp.mdx b/src/content/changelog/2025-02-03-workers-metrics-revamp.mdx similarity index 100% rename from src/content/changelogs-next/2025-02-03-workers-metrics-revamp.mdx rename to src/content/changelog/2025-02-03-workers-metrics-revamp.mdx diff --git a/src/content/changelogs-next/2025-02-04-aig-provider-cartesia-eleven-cerebras.mdx b/src/content/changelog/2025-02-04-aig-provider-cartesia-eleven-cerebras.mdx similarity index 100% rename from src/content/changelogs-next/2025-02-04-aig-provider-cartesia-eleven-cerebras.mdx rename to src/content/changelog/2025-02-04-aig-provider-cartesia-eleven-cerebras.mdx diff --git a/src/content/changelogs-next/2025-02-04-radar-ai-insights.mdx b/src/content/changelog/2025-02-04-radar-ai-insights.mdx similarity index 100% rename from src/content/changelogs-next/2025-02-04-radar-ai-insights.mdx rename to src/content/changelog/2025-02-04-radar-ai-insights.mdx diff --git a/src/content/changelogs-next/2025-02-05-aig-request-handling.mdx b/src/content/changelog/2025-02-05-aig-request-handling.mdx similarity index 100% rename from src/content/changelogs-next/2025-02-05-aig-request-handling.mdx rename to src/content/changelog/2025-02-05-aig-request-handling.mdx diff --git a/src/content/changelogs-next/2025-02-07-new-ways-to-get-started-on-workers.mdx b/src/content/changelog/2025-02-07-new-ways-to-get-started-on-workers.mdx similarity index 100% rename from src/content/changelogs-next/2025-02-07-new-ways-to-get-started-on-workers.mdx rename to src/content/changelog/2025-02-07-new-ways-to-get-started-on-workers.mdx diff --git a/src/content/changelogs/access.yaml b/src/content/changelogs-old/access.yaml similarity index 100% rename from src/content/changelogs/access.yaml rename to src/content/changelogs-old/access.yaml diff --git a/src/content/changelogs/ai-gateway.yaml b/src/content/changelogs-old/ai-gateway.yaml similarity index 100% rename from src/content/changelogs/ai-gateway.yaml rename to src/content/changelogs-old/ai-gateway.yaml diff --git a/src/content/changelogs/api-deprecations.yaml b/src/content/changelogs-old/api-deprecations.yaml similarity index 100% rename from src/content/changelogs/api-deprecations.yaml rename to src/content/changelogs-old/api-deprecations.yaml diff --git a/src/content/changelogs/api-shield.yaml b/src/content/changelogs-old/api-shield.yaml similarity index 100% rename from src/content/changelogs/api-shield.yaml rename to src/content/changelogs-old/api-shield.yaml diff --git a/src/content/changelogs/beacon-min-js.yaml b/src/content/changelogs-old/beacon-min-js.yaml similarity index 100% rename from src/content/changelogs/beacon-min-js.yaml rename to src/content/changelogs-old/beacon-min-js.yaml diff --git a/src/content/changelogs/bots.yaml b/src/content/changelogs-old/bots.yaml similarity index 100% rename from src/content/changelogs/bots.yaml rename to src/content/changelogs-old/bots.yaml diff --git a/src/content/changelogs/browser-isolation.yaml b/src/content/changelogs-old/browser-isolation.yaml similarity index 100% rename from src/content/changelogs/browser-isolation.yaml rename to src/content/changelogs-old/browser-isolation.yaml diff --git a/src/content/changelogs/browser-rendering.yaml b/src/content/changelogs-old/browser-rendering.yaml similarity index 100% rename from src/content/changelogs/browser-rendering.yaml rename to src/content/changelogs-old/browser-rendering.yaml diff --git a/src/content/changelogs/byoip.yaml b/src/content/changelogs-old/byoip.yaml similarity index 100% rename from src/content/changelogs/byoip.yaml rename to src/content/changelogs-old/byoip.yaml diff --git a/src/content/changelogs/cache.yaml b/src/content/changelogs-old/cache.yaml similarity index 100% rename from src/content/changelogs/cache.yaml rename to src/content/changelogs-old/cache.yaml diff --git a/src/content/changelogs/calls.yaml b/src/content/changelogs-old/calls.yaml similarity index 100% rename from src/content/changelogs/calls.yaml rename to src/content/changelogs-old/calls.yaml diff --git a/src/content/changelogs/casb.yaml b/src/content/changelogs-old/casb.yaml similarity index 100% rename from src/content/changelogs/casb.yaml rename to src/content/changelogs-old/casb.yaml diff --git a/src/content/changelogs/d1.yaml b/src/content/changelogs-old/d1.yaml similarity index 100% rename from src/content/changelogs/d1.yaml rename to src/content/changelogs-old/d1.yaml diff --git a/src/content/changelogs/data-localization.yaml b/src/content/changelogs-old/data-localization.yaml similarity index 100% rename from src/content/changelogs/data-localization.yaml rename to src/content/changelogs-old/data-localization.yaml diff --git a/src/content/changelogs/ddos-http.yaml b/src/content/changelogs-old/ddos-http.yaml similarity index 100% rename from src/content/changelogs/ddos-http.yaml rename to src/content/changelogs-old/ddos-http.yaml diff --git a/src/content/changelogs/ddos-network.yaml b/src/content/changelogs-old/ddos-network.yaml similarity index 100% rename from src/content/changelogs/ddos-network.yaml rename to src/content/changelogs-old/ddos-network.yaml diff --git a/src/content/changelogs/ddos.yaml b/src/content/changelogs-old/ddos.yaml similarity index 100% rename from src/content/changelogs/ddos.yaml rename to src/content/changelogs-old/ddos.yaml diff --git a/src/content/changelogs/dex.yaml b/src/content/changelogs-old/dex.yaml similarity index 100% rename from src/content/changelogs/dex.yaml rename to src/content/changelogs-old/dex.yaml diff --git a/src/content/changelogs/dlp.yaml b/src/content/changelogs-old/dlp.yaml similarity index 100% rename from src/content/changelogs/dlp.yaml rename to src/content/changelogs-old/dlp.yaml diff --git a/src/content/changelogs/dns.yaml b/src/content/changelogs-old/dns.yaml similarity index 100% rename from src/content/changelogs/dns.yaml rename to src/content/changelogs-old/dns.yaml diff --git a/src/content/changelogs/durable-objects.yaml b/src/content/changelogs-old/durable-objects.yaml similarity index 100% rename from src/content/changelogs/durable-objects.yaml rename to src/content/changelogs-old/durable-objects.yaml diff --git a/src/content/changelogs/email-security.yaml b/src/content/changelogs-old/email-security.yaml similarity index 100% rename from src/content/changelogs/email-security.yaml rename to src/content/changelogs-old/email-security.yaml diff --git a/src/content/changelogs/fundamentals.yaml b/src/content/changelogs-old/fundamentals.yaml similarity index 100% rename from src/content/changelogs/fundamentals.yaml rename to src/content/changelogs-old/fundamentals.yaml diff --git a/src/content/changelogs/gateway.yaml b/src/content/changelogs-old/gateway.yaml similarity index 100% rename from src/content/changelogs/gateway.yaml rename to src/content/changelogs-old/gateway.yaml diff --git a/src/content/changelogs/hyperdrive.yaml b/src/content/changelogs-old/hyperdrive.yaml similarity index 100% rename from src/content/changelogs/hyperdrive.yaml rename to src/content/changelogs-old/hyperdrive.yaml diff --git a/src/content/changelogs/images.yaml b/src/content/changelogs-old/images.yaml similarity index 100% rename from src/content/changelogs/images.yaml rename to src/content/changelogs-old/images.yaml diff --git a/src/content/changelogs/kv.yaml b/src/content/changelogs-old/kv.yaml similarity index 100% rename from src/content/changelogs/kv.yaml rename to src/content/changelogs-old/kv.yaml diff --git a/src/content/changelogs/load-balancing.yaml b/src/content/changelogs-old/load-balancing.yaml similarity index 100% rename from src/content/changelogs/load-balancing.yaml rename to src/content/changelogs-old/load-balancing.yaml diff --git a/src/content/changelogs/logs.yaml b/src/content/changelogs-old/logs.yaml similarity index 100% rename from src/content/changelogs/logs.yaml rename to src/content/changelogs-old/logs.yaml diff --git a/src/content/changelogs/magic-cloud-networking.yaml b/src/content/changelogs-old/magic-cloud-networking.yaml similarity index 100% rename from src/content/changelogs/magic-cloud-networking.yaml rename to src/content/changelogs-old/magic-cloud-networking.yaml diff --git a/src/content/changelogs/magic-firewall.yaml b/src/content/changelogs-old/magic-firewall.yaml similarity index 100% rename from src/content/changelogs/magic-firewall.yaml rename to src/content/changelogs-old/magic-firewall.yaml diff --git a/src/content/changelogs/magic-network-monitoring.yaml b/src/content/changelogs-old/magic-network-monitoring.yaml similarity index 100% rename from src/content/changelogs/magic-network-monitoring.yaml rename to src/content/changelogs-old/magic-network-monitoring.yaml diff --git a/src/content/changelogs/magic-transit.yaml b/src/content/changelogs-old/magic-transit.yaml similarity index 100% rename from src/content/changelogs/magic-transit.yaml rename to src/content/changelogs-old/magic-transit.yaml diff --git a/src/content/changelogs/magic-wan.yaml b/src/content/changelogs-old/magic-wan.yaml similarity index 100% rename from src/content/changelogs/magic-wan.yaml rename to src/content/changelogs-old/magic-wan.yaml diff --git a/src/content/changelogs/network-interconnect.yaml b/src/content/changelogs-old/network-interconnect.yaml similarity index 100% rename from src/content/changelogs/network-interconnect.yaml rename to src/content/changelogs-old/network-interconnect.yaml diff --git a/src/content/changelogs/notifications.yaml b/src/content/changelogs-old/notifications.yaml similarity index 100% rename from src/content/changelogs/notifications.yaml rename to src/content/changelogs-old/notifications.yaml diff --git a/src/content/changelogs/page-shield.yaml b/src/content/changelogs-old/page-shield.yaml similarity index 100% rename from src/content/changelogs/page-shield.yaml rename to src/content/changelogs-old/page-shield.yaml diff --git a/src/content/changelogs/pages.yaml b/src/content/changelogs-old/pages.yaml similarity index 100% rename from src/content/changelogs/pages.yaml rename to src/content/changelogs-old/pages.yaml diff --git a/src/content/changelogs/queues.yaml b/src/content/changelogs-old/queues.yaml similarity index 100% rename from src/content/changelogs/queues.yaml rename to src/content/changelogs-old/queues.yaml diff --git a/src/content/changelogs/r2.yaml b/src/content/changelogs-old/r2.yaml similarity index 100% rename from src/content/changelogs/r2.yaml rename to src/content/changelogs-old/r2.yaml diff --git a/src/content/changelogs/radar.yaml b/src/content/changelogs-old/radar.yaml similarity index 100% rename from src/content/changelogs/radar.yaml rename to src/content/changelogs-old/radar.yaml diff --git a/src/content/changelogs/risk-score.yaml b/src/content/changelogs-old/risk-score.yaml similarity index 100% rename from src/content/changelogs/risk-score.yaml rename to src/content/changelogs-old/risk-score.yaml diff --git a/src/content/changelogs/rules.yaml b/src/content/changelogs-old/rules.yaml similarity index 100% rename from src/content/changelogs/rules.yaml rename to src/content/changelogs-old/rules.yaml diff --git a/src/content/changelogs/security-center.yaml b/src/content/changelogs-old/security-center.yaml similarity index 100% rename from src/content/changelogs/security-center.yaml rename to src/content/changelogs-old/security-center.yaml diff --git a/src/content/changelogs/spectrum.yaml b/src/content/changelogs-old/spectrum.yaml similarity index 100% rename from src/content/changelogs/spectrum.yaml rename to src/content/changelogs-old/spectrum.yaml diff --git a/src/content/changelogs/ssl.yaml b/src/content/changelogs-old/ssl.yaml similarity index 100% rename from src/content/changelogs/ssl.yaml rename to src/content/changelogs-old/ssl.yaml diff --git a/src/content/changelogs/stream.yaml b/src/content/changelogs-old/stream.yaml similarity index 100% rename from src/content/changelogs/stream.yaml rename to src/content/changelogs-old/stream.yaml diff --git a/src/content/changelogs/tenant.yaml b/src/content/changelogs-old/tenant.yaml similarity index 100% rename from src/content/changelogs/tenant.yaml rename to src/content/changelogs-old/tenant.yaml diff --git a/src/content/changelogs/trace.yaml b/src/content/changelogs-old/trace.yaml similarity index 100% rename from src/content/changelogs/trace.yaml rename to src/content/changelogs-old/trace.yaml diff --git a/src/content/changelogs/tunnel.yaml b/src/content/changelogs-old/tunnel.yaml similarity index 100% rename from src/content/changelogs/tunnel.yaml rename to src/content/changelogs-old/tunnel.yaml diff --git a/src/content/changelogs/turnstile.yaml b/src/content/changelogs-old/turnstile.yaml similarity index 100% rename from src/content/changelogs/turnstile.yaml rename to src/content/changelogs-old/turnstile.yaml diff --git a/src/content/changelogs/vectorize.yaml b/src/content/changelogs-old/vectorize.yaml similarity index 100% rename from src/content/changelogs/vectorize.yaml rename to src/content/changelogs-old/vectorize.yaml diff --git a/src/content/changelogs/version-management.yaml b/src/content/changelogs-old/version-management.yaml similarity index 100% rename from src/content/changelogs/version-management.yaml rename to src/content/changelogs-old/version-management.yaml diff --git a/src/content/changelogs/waf-general.yaml b/src/content/changelogs-old/waf-general.yaml similarity index 100% rename from src/content/changelogs/waf-general.yaml rename to src/content/changelogs-old/waf-general.yaml diff --git a/src/content/changelogs/waf.yaml b/src/content/changelogs-old/waf.yaml similarity index 100% rename from src/content/changelogs/waf.yaml rename to src/content/changelogs-old/waf.yaml diff --git a/src/content/changelogs/waiting-room.yaml b/src/content/changelogs-old/waiting-room.yaml similarity index 100% rename from src/content/changelogs/waiting-room.yaml rename to src/content/changelogs-old/waiting-room.yaml diff --git a/src/content/changelogs/warp.yaml b/src/content/changelogs-old/warp.yaml similarity index 100% rename from src/content/changelogs/warp.yaml rename to src/content/changelogs-old/warp.yaml diff --git a/src/content/changelogs/workers-ai.yaml b/src/content/changelogs-old/workers-ai.yaml similarity index 100% rename from src/content/changelogs/workers-ai.yaml rename to src/content/changelogs-old/workers-ai.yaml diff --git a/src/content/changelogs/workers-for-platforms.yaml b/src/content/changelogs-old/workers-for-platforms.yaml similarity index 100% rename from src/content/changelogs/workers-for-platforms.yaml rename to src/content/changelogs-old/workers-for-platforms.yaml diff --git a/src/content/changelogs/workers.yaml b/src/content/changelogs-old/workers.yaml similarity index 100% rename from src/content/changelogs/workers.yaml rename to src/content/changelogs-old/workers.yaml diff --git a/src/content/changelogs/workflows.yaml b/src/content/changelogs-old/workflows.yaml similarity index 100% rename from src/content/changelogs/workflows.yaml rename to src/content/changelogs-old/workflows.yaml diff --git a/src/content/changelogs/zaraz.yaml b/src/content/changelogs-old/zaraz.yaml similarity index 100% rename from src/content/changelogs/zaraz.yaml rename to src/content/changelogs-old/zaraz.yaml diff --git a/src/content/docs/ai-gateway/changelog.mdx b/src/content/docs/ai-gateway/changelog.mdx index b2bcb4da785a074..77a4abdbddd599c 100644 --- a/src/content/docs/ai-gateway/changelog.mdx +++ b/src/content/docs/ai-gateway/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - ai-gateway sidebar: order: 9 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/api-shield/changelog.mdx b/src/content/docs/api-shield/changelog.mdx index 6ef6a203349ae4f..54f0817d0cedee0 100644 --- a/src/content/docs/api-shield/changelog.mdx +++ b/src/content/docs/api-shield/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - api-shield sidebar: order: 10 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/bots/changelog.mdx b/src/content/docs/bots/changelog.mdx index a0eaa23fb38cd85..8563298c0848fc3 100644 --- a/src/content/docs/bots/changelog.mdx +++ b/src/content/docs/bots/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - bots sidebar: order: 13 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/browser-rendering/changelog.mdx b/src/content/docs/browser-rendering/changelog.mdx index f614e3025e4f749..7e5facb0b4c2977 100644 --- a/src/content/docs/browser-rendering/changelog.mdx +++ b/src/content/docs/browser-rendering/changelog.mdx @@ -1,16 +1,11 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - browser-rendering sidebar: order: 9 -head: [] description: Review recent changes to Worker Browser Rendering. --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/byoip/changelog.mdx b/src/content/docs/byoip/changelog.mdx index 3459aa7dcc5845f..6c80feb31100c17 100644 --- a/src/content/docs/byoip/changelog.mdx +++ b/src/content/docs/byoip/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - byoip sidebar: order: 15 --- import { ProductChangelog } from "~/components"; -{/* */} - - \ No newline at end of file + \ No newline at end of file diff --git a/src/content/docs/cache/changelog.mdx b/src/content/docs/cache/changelog.mdx index 5e8884e069b7c87..d12c9090e9af9be 100644 --- a/src/content/docs/cache/changelog.mdx +++ b/src/content/docs/cache/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - cache sidebar: order: 12 --- import { ProductChangelog } from "~/components"; -{/* */} - - \ No newline at end of file + \ No newline at end of file diff --git a/src/content/docs/calls/changelog.mdx b/src/content/docs/calls/changelog.mdx index cedae5bc1e110e5..8eea2a427956a7e 100644 --- a/src/content/docs/calls/changelog.mdx +++ b/src/content/docs/calls/changelog.mdx @@ -1,12 +1,8 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - calls --- import { ProductChangelog } from "~/components"; -{/* */} - - \ No newline at end of file + \ No newline at end of file diff --git a/src/content/docs/cloudflare-for-platforms/workers-for-platforms/platform/changelog.mdx b/src/content/docs/cloudflare-for-platforms/workers-for-platforms/platform/changelog.mdx index 2d5f80eac92f9a2..6e026256a0691fc 100644 --- a/src/content/docs/cloudflare-for-platforms/workers-for-platforms/platform/changelog.mdx +++ b/src/content/docs/cloudflare-for-platforms/workers-for-platforms/platform/changelog.mdx @@ -9,6 +9,4 @@ import { ProductChangelog } from "~/components"; Workers for Platforms users might also be interested in [the Workers changelog](/workers/platform/changelog/) which has detailed changes to the Workers runtime and the various configuration options available to your dispatch and user Workers. -{/* */} - - \ No newline at end of file + \ No newline at end of file diff --git a/src/content/docs/cloudflare-one/changelog/access.mdx b/src/content/docs/cloudflare-one/changelog/access.mdx index 34b46d7bf9daf39..f9c10deba99aa36 100644 --- a/src/content/docs/cloudflare-one/changelog/access.mdx +++ b/src/content/docs/cloudflare-one/changelog/access.mdx @@ -1,8 +1,6 @@ --- pcx_content_type: changelog title: Access -changelog_file_name: - - access head: - tag: title content: Access Changelog @@ -12,6 +10,4 @@ description: Review recent changes to Cloudflare Access. import { ProductChangelog } from "~/components" -{/* */} - - + \ No newline at end of file diff --git a/src/content/docs/cloudflare-one/changelog/browser-isolation.mdx b/src/content/docs/cloudflare-one/changelog/browser-isolation.mdx index cf080589278dbef..4069555fe1d39ee 100644 --- a/src/content/docs/cloudflare-one/changelog/browser-isolation.mdx +++ b/src/content/docs/cloudflare-one/changelog/browser-isolation.mdx @@ -1,8 +1,6 @@ --- pcx_content_type: changelog title: Browser Isolation -changelog_file_name: - - browser-isolation head: - tag: title content: Browser Isolation Changelog @@ -12,6 +10,4 @@ description: Review recent changes to Cloudflare Browser Isolation. import { ProductChangelog } from "~/components" -{/* */} - - + diff --git a/src/content/docs/cloudflare-one/changelog/casb.mdx b/src/content/docs/cloudflare-one/changelog/casb.mdx index 51c43c5eb74bd48..64d510db2e701fd 100644 --- a/src/content/docs/cloudflare-one/changelog/casb.mdx +++ b/src/content/docs/cloudflare-one/changelog/casb.mdx @@ -12,6 +12,4 @@ description: Review recent changes to Cloudflare CASB. import { ProductChangelog } from "~/components" -{/* */} - - + diff --git a/src/content/docs/cloudflare-one/changelog/dex.mdx b/src/content/docs/cloudflare-one/changelog/dex.mdx index 3fec8379e36e5f2..bf720185a507263 100644 --- a/src/content/docs/cloudflare-one/changelog/dex.mdx +++ b/src/content/docs/cloudflare-one/changelog/dex.mdx @@ -1,17 +1,12 @@ --- pcx_content_type: changelog title: Digital Experience Monitoring -changelog_file_name: - - dex head: - tag: title content: Digital Experience Monitoring Changelog description: Review recent changes to Digital Experience Monitoring. - --- import { ProductChangelog } from "~/components" -{/* */} - - + \ No newline at end of file diff --git a/src/content/docs/cloudflare-one/changelog/dlp.mdx b/src/content/docs/cloudflare-one/changelog/dlp.mdx index a58281c9d636cfb..7621f27966b9811 100644 --- a/src/content/docs/cloudflare-one/changelog/dlp.mdx +++ b/src/content/docs/cloudflare-one/changelog/dlp.mdx @@ -1,8 +1,6 @@ --- pcx_content_type: changelog title: Data Loss Prevention -changelog_file_name: - - dlp head: - tag: title content: DLP Changelog @@ -12,6 +10,4 @@ description: Review recent changes to Cloudflare DLP. import { ProductChangelog } from "~/components" -{/* */} - - + diff --git a/src/content/docs/cloudflare-one/changelog/email-security.mdx b/src/content/docs/cloudflare-one/changelog/email-security.mdx index e873250b1ac578c..9b09259db673acd 100644 --- a/src/content/docs/cloudflare-one/changelog/email-security.mdx +++ b/src/content/docs/cloudflare-one/changelog/email-security.mdx @@ -1,13 +1,8 @@ --- pcx_content_type: changelog title: Email Security -changelog_file_name: - - email-security - --- import { ProductChangelog } from "~/components" -{/* */} - - \ No newline at end of file + \ No newline at end of file diff --git a/src/content/docs/cloudflare-one/changelog/gateway.mdx b/src/content/docs/cloudflare-one/changelog/gateway.mdx index ac38a6fb6fab4c9..378c336f807f284 100644 --- a/src/content/docs/cloudflare-one/changelog/gateway.mdx +++ b/src/content/docs/cloudflare-one/changelog/gateway.mdx @@ -1,8 +1,6 @@ --- pcx_content_type: changelog title: Gateway -changelog_file_name: - - gateway head: - tag: title content: Gateway Changelog @@ -12,6 +10,4 @@ description: Review recent changes to Cloudflare Gateway. import { ProductChangelog } from "~/components" -{/* */} - - + diff --git a/src/content/docs/cloudflare-one/changelog/index.mdx b/src/content/docs/cloudflare-one/changelog/index.mdx index e8c6e5ac9c54861..d45a5e27bcb997c 100644 --- a/src/content/docs/cloudflare-one/changelog/index.mdx +++ b/src/content/docs/cloudflare-one/changelog/index.mdx @@ -1,17 +1,11 @@ --- pcx_content_type: changelog title: Changelog -changelog_name: Cloudflare One -changelog_product_area_name: Cloudflare One sidebar: order: 15 -head: [] description: Review recent changes to Cloudflare One. - --- import { ProductChangelog } from "~/components" -{/* */} - - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-one/changelog/risk-score.mdx b/src/content/docs/cloudflare-one/changelog/risk-score.mdx index a20b567ea78c9b4..9684590767b6321 100644 --- a/src/content/docs/cloudflare-one/changelog/risk-score.mdx +++ b/src/content/docs/cloudflare-one/changelog/risk-score.mdx @@ -1,8 +1,6 @@ --- pcx_content_type: changelog title: Risk score -changelog_file_name: - - risk-score head: - tag: title content: Risk score Changelog @@ -12,6 +10,4 @@ description: Review recent changes to Cloudflare Zero Trust user risk scoring. import { ProductChangelog } from "~/components" -{/* */} - - + diff --git a/src/content/docs/cloudflare-one/changelog/tunnel.mdx b/src/content/docs/cloudflare-one/changelog/tunnel.mdx index 077ace2e0c5211a..c641a2f67302aa7 100644 --- a/src/content/docs/cloudflare-one/changelog/tunnel.mdx +++ b/src/content/docs/cloudflare-one/changelog/tunnel.mdx @@ -1,8 +1,6 @@ --- pcx_content_type: changelog title: Cloudflare Tunnel -changelog_file_name: - - tunnel head: - tag: title content: Cloudflare Tunnel Changelog @@ -12,6 +10,4 @@ description: Review recent changes to Cloudflare Tunnel. import { ProductChangelog } from "~/components" -{/* */} - - + diff --git a/src/content/docs/cloudflare-one/changelog/warp.mdx b/src/content/docs/cloudflare-one/changelog/warp.mdx index 4fcb4def0a3078b..a054076c241e301 100644 --- a/src/content/docs/cloudflare-one/changelog/warp.mdx +++ b/src/content/docs/cloudflare-one/changelog/warp.mdx @@ -1,8 +1,6 @@ --- pcx_content_type: changelog title: Zero Trust WARP Client -changelog_file_name: - - warp head: - tag: title content: Zero Trust WARP Client Changelog @@ -12,6 +10,4 @@ description: Review recent changes to the Zero Trust WARP client. import { ProductChangelog } from "~/components" -{/* */} - - + diff --git a/src/content/docs/d1/platform/changelog.mdx b/src/content/docs/d1/platform/changelog.mdx index f06c985f05db595..ac824c52c559198 100644 --- a/src/content/docs/d1/platform/changelog.mdx +++ b/src/content/docs/d1/platform/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - d1 sidebar: order: 4 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/data-localization/changelog.mdx b/src/content/docs/data-localization/changelog.mdx index f606f5be05eea7b..f7f89ae90b0b7f0 100644 --- a/src/content/docs/data-localization/changelog.mdx +++ b/src/content/docs/data-localization/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - data-localization sidebar: order: 11 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/ddos-protection/change-log/general-updates.mdx b/src/content/docs/ddos-protection/change-log/general-updates.mdx index 6e054d044f5a286..bf9f2c2739c2167 100644 --- a/src/content/docs/ddos-protection/change-log/general-updates.mdx +++ b/src/content/docs/ddos-protection/change-log/general-updates.mdx @@ -1,8 +1,6 @@ --- title: "General updates" pcx_content_type: concept -changelog_file_name: - - ddos changelog_name: DDoS protection sidebar: order: 5 @@ -13,6 +11,4 @@ head: import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/dns/changelog.mdx b/src/content/docs/dns/changelog.mdx index c3cf530d634c705..346ad64ffe58806 100644 --- a/src/content/docs/dns/changelog.mdx +++ b/src/content/docs/dns/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - dns sidebar: order: 25 --- import { ProductChangelog } from "~/components"; -{/* */} - - \ No newline at end of file + \ No newline at end of file diff --git a/src/content/docs/durable-objects/changelog.mdx b/src/content/docs/durable-objects/changelog.mdx index 21f060a49073f9a..78f636f6ebcaf54 100644 --- a/src/content/docs/durable-objects/changelog.mdx +++ b/src/content/docs/durable-objects/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - durable-objects sidebar: order: 15 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/fundamentals/api/reference/deprecations.mdx b/src/content/docs/fundamentals/api/reference/deprecations.mdx index ba9e3ab04a191fa..591a3ba10c6b52d 100644 --- a/src/content/docs/fundamentals/api/reference/deprecations.mdx +++ b/src/content/docs/fundamentals/api/reference/deprecations.mdx @@ -9,12 +9,10 @@ sidebar: import { ProductChangelog } from "~/components"; -{/* */} - Cloudflare occasionally makes updates to our APIs that result in behavior changes or deprecations. When this happens, we will communicate when the API will no longer be available and whether there will be a replacement. :::note -Subscribe to all API deprecation posts via [RSS](/release-notes/index.xml). +Subscribe to all API deprecation posts via [RSS](/changelog/rss/api-deprecations.xml). ::: - + diff --git a/src/content/docs/fundamentals/changelog.mdx b/src/content/docs/fundamentals/changelog.mdx index e91b4cb0c45460e..e033c93ac5a2d13 100644 --- a/src/content/docs/fundamentals/changelog.mdx +++ b/src/content/docs/fundamentals/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - fundamentals sidebar: order: 9 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/fundamentals/reference/changelog/performance.mdx b/src/content/docs/fundamentals/reference/changelog/performance.mdx deleted file mode 100644 index a7cd180a30bbf23..000000000000000 --- a/src/content/docs/fundamentals/reference/changelog/performance.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -pcx_content_type: changelog -title: Changelog -changelog_name: Application performance -changelog_product_area_name: Application performance -sidebar: - order: 4 - hidden: true -head: [] -description: Review recent changes to Cloudflare's Application Performance products. ---- - -{/* */} diff --git a/src/content/docs/fundamentals/reference/changelog/platform.mdx b/src/content/docs/fundamentals/reference/changelog/platform.mdx deleted file mode 100644 index 0fcce2d88d19fdb..000000000000000 --- a/src/content/docs/fundamentals/reference/changelog/platform.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -pcx_content_type: changelog -title: Changelog -changelog_name: Core platform -changelog_product_area_name: Core platform -sidebar: - order: 4 - hidden: true -head: [] -description: Review recent changes to Cloudflare's core platform. ---- - -{/* */} diff --git a/src/content/docs/fundamentals/reference/changelog/security.mdx b/src/content/docs/fundamentals/reference/changelog/security.mdx deleted file mode 100644 index ae756378358e79a..000000000000000 --- a/src/content/docs/fundamentals/reference/changelog/security.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -pcx_content_type: changelog -title: Changelog -changelog_name: Application security -changelog_product_area_name: Application security -sidebar: - order: 4 - hidden: true -head: [] -description: Review recent changes to Cloudflare's Application Security products. ---- - -{/* */} diff --git a/src/content/docs/fundamentals/security/trace-request/changelog.mdx b/src/content/docs/fundamentals/security/trace-request/changelog.mdx index ff8402d166c59fb..2b10a5963344028 100644 --- a/src/content/docs/fundamentals/security/trace-request/changelog.mdx +++ b/src/content/docs/fundamentals/security/trace-request/changelog.mdx @@ -1,8 +1,6 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - trace sidebar: order: 4 head: @@ -12,6 +10,4 @@ head: import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/hyperdrive/platform/changelog.mdx b/src/content/docs/hyperdrive/platform/changelog.mdx index 32a31e0372d2de8..89a9008e5a95eb7 100644 --- a/src/content/docs/hyperdrive/platform/changelog.mdx +++ b/src/content/docs/hyperdrive/platform/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - hyperdrive sidebar: order: 4 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/images/platform/changelog.mdx b/src/content/docs/images/platform/changelog.mdx index 5efd69f78d1128f..e9b545e7a5c6b7a 100644 --- a/src/content/docs/images/platform/changelog.mdx +++ b/src/content/docs/images/platform/changelog.mdx @@ -1,12 +1,8 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - images --- import { ProductChangelog } from "~/components"; -{/* */} - - \ No newline at end of file + \ No newline at end of file diff --git a/src/content/docs/kv/platform/changelog.mdx b/src/content/docs/kv/platform/changelog.mdx index 95d9c8582500172..dc8e2bae2f2702b 100644 --- a/src/content/docs/kv/platform/changelog.mdx +++ b/src/content/docs/kv/platform/changelog.mdx @@ -3,12 +3,8 @@ pcx_content_type: changelog title: Changelog sidebar: order: 8 -changelog_file_name: - - kv --- import { ProductChangelog } from "~/components"; -{/* Actual content lives in /src/content/changelogs/kv.yaml. Update the file there for new entries to appear here. For more details, refer to https://developers.cloudflare.com/style-guide/documentation-content-strategy/content-types/changelog/#yaml-file */} - - + diff --git a/src/content/docs/load-balancing/changelog.mdx b/src/content/docs/load-balancing/changelog.mdx index ac95272db2c937b..437204bc21692f4 100644 --- a/src/content/docs/load-balancing/changelog.mdx +++ b/src/content/docs/load-balancing/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - load-balancing sidebar: order: 153 --- import { ProductChangelog } from "~/components"; -{/* */} - - \ No newline at end of file + \ No newline at end of file diff --git a/src/content/docs/logs/changelog.mdx b/src/content/docs/logs/changelog.mdx index 3c538098dcdb122..167c89dee1c7998 100644 --- a/src/content/docs/logs/changelog.mdx +++ b/src/content/docs/logs/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - logs sidebar: order: 140 --- import { ProductChangelog } from "~/components"; -{/* */} - - \ No newline at end of file + \ No newline at end of file diff --git a/src/content/docs/magic-cloud-networking/changelog.mdx b/src/content/docs/magic-cloud-networking/changelog.mdx index 2be52840515a206..82cdce489ef817d 100644 --- a/src/content/docs/magic-cloud-networking/changelog.mdx +++ b/src/content/docs/magic-cloud-networking/changelog.mdx @@ -1,16 +1,11 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - magic-cloud-networking sidebar: order: 6 -head: [] description: Review recent changes to Magic Cloud Networking. --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/magic-firewall/changelog.mdx b/src/content/docs/magic-firewall/changelog.mdx index bcf89f96d7e7457..5022b729238778e 100644 --- a/src/content/docs/magic-firewall/changelog.mdx +++ b/src/content/docs/magic-firewall/changelog.mdx @@ -1,12 +1,8 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - magic-firewall --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/magic-network-monitoring/changelog.mdx b/src/content/docs/magic-network-monitoring/changelog.mdx index 78e5c887eeb03dc..bae71a785015e0f 100644 --- a/src/content/docs/magic-network-monitoring/changelog.mdx +++ b/src/content/docs/magic-network-monitoring/changelog.mdx @@ -1,16 +1,11 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - magic-network-monitoring sidebar: order: 12 -head: [] description: Review recent changes to Magic Network Monitoring. --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/magic-transit/changelog.mdx b/src/content/docs/magic-transit/changelog.mdx index 90c8aa2ac6d5579..103df48254b358f 100644 --- a/src/content/docs/magic-transit/changelog.mdx +++ b/src/content/docs/magic-transit/changelog.mdx @@ -1,16 +1,11 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - magic-transit sidebar: order: 14 -head: [] description: Review recent changes to Magic Transit. --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/magic-wan/changelog.mdx b/src/content/docs/magic-wan/changelog.mdx index f51424a51583d2b..3c77f9a2b566c5b 100644 --- a/src/content/docs/magic-wan/changelog.mdx +++ b/src/content/docs/magic-wan/changelog.mdx @@ -1,16 +1,11 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - magic-wan sidebar: order: 13 -head: [] description: Review recent changes to Magic WAN. --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/network-interconnect/changelog.mdx b/src/content/docs/network-interconnect/changelog.mdx index 73260c6c759f4d8..907f5eae2dd4092 100644 --- a/src/content/docs/network-interconnect/changelog.mdx +++ b/src/content/docs/network-interconnect/changelog.mdx @@ -1,16 +1,11 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - network-interconnect sidebar: order: 6 -head: [] description: Review recent changes to Cloudflare Network Interconnect. --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/notifications/changelog.mdx b/src/content/docs/notifications/changelog.mdx index f2bd6280739121b..14597588f1c9fab 100644 --- a/src/content/docs/notifications/changelog.mdx +++ b/src/content/docs/notifications/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - notifications sidebar: order: 7 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/page-shield/changelog.mdx b/src/content/docs/page-shield/changelog.mdx index 36d38b5c7eb6b1f..c3c0c87b943233b 100644 --- a/src/content/docs/page-shield/changelog.mdx +++ b/src/content/docs/page-shield/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - page-shield sidebar: order: 11 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/pages/platform/changelog.mdx b/src/content/docs/pages/platform/changelog.mdx index b861a128d6da489..98d9330c40f6793 100644 --- a/src/content/docs/pages/platform/changelog.mdx +++ b/src/content/docs/pages/platform/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - pages sidebar: order: 3 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/queues/platform/changelog.mdx b/src/content/docs/queues/platform/changelog.mdx index b15a05806f96bdc..9c84bb414676522 100644 --- a/src/content/docs/queues/platform/changelog.mdx +++ b/src/content/docs/queues/platform/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - queues sidebar: order: 4 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/r2/platform/changelog.mdx b/src/content/docs/r2/platform/changelog.mdx index ae9828b86c9d07e..874dd8f103da178 100644 --- a/src/content/docs/r2/platform/changelog.mdx +++ b/src/content/docs/r2/platform/changelog.mdx @@ -1,12 +1,8 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - r2 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/radar/changelog.mdx b/src/content/docs/radar/changelog.mdx index 1b78d6d66b7e1af..f81a2df339af432 100644 --- a/src/content/docs/radar/changelog.mdx +++ b/src/content/docs/radar/changelog.mdx @@ -1,16 +1,11 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - radar sidebar: order: 8 -head: [] description: Review recent changes to Cloudflare Radar. --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/rules/changelog.mdx b/src/content/docs/rules/changelog.mdx index 2ea604896ebddb0..287889acc5e50a0 100644 --- a/src/content/docs/rules/changelog.mdx +++ b/src/content/docs/rules/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - rules sidebar: order: 25 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/security-center/changelog.mdx b/src/content/docs/security-center/changelog.mdx index b830a8aa3c13381..47e8ab2f3191e38 100644 --- a/src/content/docs/security-center/changelog.mdx +++ b/src/content/docs/security-center/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - security-center sidebar: order: 13 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/spectrum/changelog.mdx b/src/content/docs/spectrum/changelog.mdx index 8da1cccc3168c90..f71193c49bc7850 100644 --- a/src/content/docs/spectrum/changelog.mdx +++ b/src/content/docs/spectrum/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - spectrum sidebar: order: 11 --- import { ProductChangelog } from "~/components"; -{/* */} - - \ No newline at end of file + \ No newline at end of file diff --git a/src/content/docs/ssl/changelog.mdx b/src/content/docs/ssl/changelog.mdx index fad2d01842c5a1c..6f5febe6507266f 100644 --- a/src/content/docs/ssl/changelog.mdx +++ b/src/content/docs/ssl/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - ssl sidebar: order: 24 --- import { ProductChangelog } from "~/components"; -{/* */} - - \ No newline at end of file + \ No newline at end of file diff --git a/src/content/docs/stream/changelog.mdx b/src/content/docs/stream/changelog.mdx index 0922c682c816376..2779d2fcf4d4349 100644 --- a/src/content/docs/stream/changelog.mdx +++ b/src/content/docs/stream/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - stream sidebar: order: 12 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/style-guide/components/product-changelog.mdx b/src/content/docs/style-guide/components/product-changelog.mdx new file mode 100644 index 000000000000000..457f646f206a59d --- /dev/null +++ b/src/content/docs/style-guide/components/product-changelog.mdx @@ -0,0 +1,27 @@ +--- +title: Product changelog +--- + +import { Type, MetaInfo } from "~/components"; + +## Component + +```mdx live +import { ProductChangelog } from "~/components"; + + +``` + +### Inputs + +The `products` and `area` options are mutually exclusive. + +- `products` + + An array of product names, matching the filename without the extension suffix from the [`products` collection](https://github.com/cloudflare/cloudflare-docs/tree/production/src/content/products). + +- `area` + + A product area, controlled by the `product.group` value inside the aforementioned `products` collection files. \ No newline at end of file diff --git a/src/content/docs/tenant/changelog.mdx b/src/content/docs/tenant/changelog.mdx index 57088293c8a41c5..2fe6777774204d4 100644 --- a/src/content/docs/tenant/changelog.mdx +++ b/src/content/docs/tenant/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - tenant sidebar: order: 11 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/turnstile/changelog.mdx b/src/content/docs/turnstile/changelog.mdx index 5d14a99118cf4a9..06709369da9c90c 100644 --- a/src/content/docs/turnstile/changelog.mdx +++ b/src/content/docs/turnstile/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - turnstile sidebar: order: 13 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/vectorize/platform/changelog.mdx b/src/content/docs/vectorize/platform/changelog.mdx index 2010b62f141637f..dfb85d4ae82d604 100644 --- a/src/content/docs/vectorize/platform/changelog.mdx +++ b/src/content/docs/vectorize/platform/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - vectorize sidebar: order: 4 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/version-management/changelog.mdx b/src/content/docs/version-management/changelog.mdx index 7aeffa3437d5814..e17ebb449d23603 100644 --- a/src/content/docs/version-management/changelog.mdx +++ b/src/content/docs/version-management/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - version-management sidebar: order: 6 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/waf/change-log/general-updates.mdx b/src/content/docs/waf/change-log/general-updates.mdx index 6e50c7ae2eb9082..8de1d1eee2ad607 100644 --- a/src/content/docs/waf/change-log/general-updates.mdx +++ b/src/content/docs/waf/change-log/general-updates.mdx @@ -1,9 +1,6 @@ --- title: "General updates" pcx_content_type: concept -changelog_file_name: - - waf-general -changelog_name: WAF sidebar: order: 1 head: @@ -13,6 +10,4 @@ head: import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/waf/change-log/managed-rulesets.mdx b/src/content/docs/waf/change-log/managed-rulesets.mdx deleted file mode 100644 index cb046c2d82080ab..000000000000000 --- a/src/content/docs/waf/change-log/managed-rulesets.mdx +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Changelog for managed rulesets only" -pcx_content_type: concept -changelog_file_name: - - waf -changelog_name: WAF -sidebar: - order: 15000 - hidden: true -head: - - tag: title - content: Changelog for WAF managed rulesets only ---- - -{/* */} diff --git a/src/content/docs/waiting-room/changelog.mdx b/src/content/docs/waiting-room/changelog.mdx index cd26975c55905fe..e3b133a414169a2 100644 --- a/src/content/docs/waiting-room/changelog.mdx +++ b/src/content/docs/waiting-room/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - waiting-room sidebar: order: 11 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/web-analytics/changelog.mdx b/src/content/docs/web-analytics/changelog.mdx index dcdca480a4e8626..4dc953acd629a03 100644 --- a/src/content/docs/web-analytics/changelog.mdx +++ b/src/content/docs/web-analytics/changelog.mdx @@ -1,8 +1,6 @@ --- title: Changelog pcx_content_type: changelog -changelog_file_name: - - beacon-min-js sidebar: order: 8 head: @@ -14,6 +12,4 @@ import { ProductChangelog } from "~/components"; Cloudflare occasionally updates the `beacon.min.js` file to improve Web Analytics functionality. The table below includes a log of what changed in the `beacon.min.js` file and when. -{/* */} - - + diff --git a/src/content/docs/workers-ai/changelog.mdx b/src/content/docs/workers-ai/changelog.mdx index 09ff17666355d97..146731b5268a4b5 100644 --- a/src/content/docs/workers-ai/changelog.mdx +++ b/src/content/docs/workers-ai/changelog.mdx @@ -1,16 +1,11 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - workers-ai sidebar: order: 8 -head: [] description: Review recent changes to Cloudflare Workers AI. --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/content/docs/workers/platform/changelog/index.mdx b/src/content/docs/workers/platform/changelog/index.mdx index 9fa3d86b6fb3220..5703faa63d3c9c0 100644 --- a/src/content/docs/workers/platform/changelog/index.mdx +++ b/src/content/docs/workers/platform/changelog/index.mdx @@ -1,8 +1,6 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - workers sidebar: order: 2 head: @@ -17,6 +15,4 @@ This changelog details meaningful changes made to Workers across the Cloudflare This is *different* from [compatibility dates](/workers/configuration/compatibility-dates/) and [compatibility flags](/workers/configuration/compatibility-flags/), which let you explicitly opt-in to or opt-out of specific changes to the Workers Runtime. -{/* */} - - + diff --git a/src/content/docs/workers/platform/changelog/platform.mdx b/src/content/docs/workers/platform/changelog/platform.mdx deleted file mode 100644 index 8b66c1e41441bb5..000000000000000 --- a/src/content/docs/workers/platform/changelog/platform.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -pcx_content_type: changelog -title: Changelog -changelog_name: Developer Platform -changelog_product_area_name: Developer platform -sidebar: - order: 4 - hidden: true -head: [] -description: Review recent changes to the Cloudflare Developer Platform. ---- - -{/* */} diff --git a/src/content/docs/workers/platform/changelog/wrangler.mdx b/src/content/docs/workers/platform/changelog/wrangler.mdx deleted file mode 100644 index fe2d0584410ab39..000000000000000 --- a/src/content/docs/workers/platform/changelog/wrangler.mdx +++ /dev/null @@ -1,16 +0,0 @@ ---- -pcx_content_type: changelog -title: Wrangler -changelog_file_name: - - wrangler -head: - - tag: title - content: Wrangler Changelog -description: Review recent changes to Cloudflare Wrangler. ---- - -import { ProductChangelog } from "~/components"; - -{/* */} - - diff --git a/src/content/docs/workflows/reference/changelog.mdx b/src/content/docs/workflows/reference/changelog.mdx index 1e63decb2fa0897..b92916ad07da1f0 100644 --- a/src/content/docs/workflows/reference/changelog.mdx +++ b/src/content/docs/workflows/reference/changelog.mdx @@ -1,15 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - workflows sidebar: order: 99 - --- import { ProductChangelog } from "~/components" -{/* */} - - + diff --git a/src/content/docs/zaraz/changelog.mdx b/src/content/docs/zaraz/changelog.mdx index 5e555fde494712e..1f089d22ce57cae 100644 --- a/src/content/docs/zaraz/changelog.mdx +++ b/src/content/docs/zaraz/changelog.mdx @@ -1,14 +1,10 @@ --- pcx_content_type: changelog title: Changelog -changelog_file_name: - - zaraz sidebar: order: 11 --- import { ProductChangelog } from "~/components"; -{/* */} - - + diff --git a/src/pages/[...changelog].xml.ts b/src/pages/[...changelog].xml.ts deleted file mode 100644 index 531a2888c7eeed3..000000000000000 --- a/src/pages/[...changelog].xml.ts +++ /dev/null @@ -1,143 +0,0 @@ -import rss from "@astrojs/rss"; -import { getCollection, getEntry } from "astro:content"; -import type { APIRoute } from "astro"; -import { marked, type Token } from "marked"; -import { getWranglerChangelog } from "~/util/changelogs"; -import { slug } from "github-slugger"; -import { entryToString } from "~/util/container"; - -export async function getStaticPaths() { - const changelogs = await getCollection("docs", (entry) => { - return ( - (entry.data.pcx_content_type === "changelog" && - entry.data.changelog_file_name) || - entry.data.changelog_product_area_name - ); - }); - - return changelogs.map((entry) => { - return { - params: { - changelog: entry.id + `/index`, - }, - props: { - entry, - }, - }; - }); -} - -export const GET: APIRoute = async (context) => { - function walkTokens(token: Token) { - if (token.type === "image" || token.type === "link") { - if (token.href.startsWith("/")) { - token.href = context.site + token.href.slice(1); - } - } - } - - marked.use({ walkTokens }); - - const entry = context.props.entry; - - if ( - !entry.data.changelog_file_name && - !entry.data.changelog_product_area_name - ) { - throw new Error( - `One of changelog_file_name or changelog_product_area_name is required on ${entry.id}, to generate RSS feeds.`, - ); - } - - const changelogs = await getCollection("changelogs", (changelog) => { - return ( - entry.data.changelog_file_name?.includes(changelog.id) || - changelog.data.productArea === entry.data.changelog_product_area_name - ); - }); - - if (entry.data.changelog_file_name?.includes("wrangler")) { - changelogs.push(await getWranglerChangelog()); - } - - const mapped = await Promise.all( - changelogs.flatMap((product) => { - return product.data.entries.map(async (entry) => { - let description; - if (entry.individual_page) { - const link = entry.link; - - if (!link) - throw new Error( - `Changelog entry points to individual page but no link is provided`, - ); - - const page = await getEntry("docs", link.slice(1, -1)); - - if (!page) - throw new Error( - `Changelog entry points to ${link.slice(1, -1)} but unable to find entry with that slug`, - ); - - description = - (await entryToString(page, context.locals)) ?? page.body; - } else { - description = entry.description; - } - - let link; - if (entry.link) { - link = entry.link; - } else { - const anchor = slug(entry.title ?? entry.publish_date); - link = product.data.link.concat(`#${anchor}`); - } - - let title; - if (entry.scheduled) { - title = `Scheduled for ${entry.scheduled_date}`; - } else { - title = entry.title; - } - - return { - product: product.data.productName, - link, - date: entry.publish_date, - description, - title, - }; - }); - }), - ); - - const entries = mapped.sort((a, b) => { - return a.date < b.date ? 1 : a.date > b.date ? -1 : 0; - }); - - const rssName = - entry.data.changelog_product_area_name || changelogs[0].data.productName; - - const site = new URL(context.site ?? ""); - site.pathname = entry.id.concat("/"); - - const isArea = Boolean(entry.data.changelog_product_area_name); - - return rss({ - title: `Changelog | ${rssName}`, - description: `Updates to ${rssName}`, - site, - trailingSlash: false, - items: entries.map((entry) => { - return { - title: `${entry.product} - ${entry.title ?? entry.date}`, - description: marked.parse(entry.description ?? "", { - async: false, - }) as string, - pubDate: new Date(entry.date), - link: entry.link, - customData: isArea ? `${entry.product}` : undefined, - }; - }), - }); -}; diff --git a/src/pages/changelog/[...slug].astro b/src/pages/changelog/[...slug].astro index 73eec29116bd499..7a4829bfdfc045d 100644 --- a/src/pages/changelog/[...slug].astro +++ b/src/pages/changelog/[...slug].astro @@ -4,12 +4,12 @@ import StarlightPage, { } from "@astrojs/starlight/components/StarlightPage.astro"; import type { GetStaticPaths } from "astro"; import { getCollection, render } from "astro:content"; -import Header from "~/components/changelog-next/Header.astro"; -import ProductPills from "~/components/changelog-next/ProductPills.astro"; +import Header from "~/components/changelog/Header.astro"; +import ProductPills from "~/components/changelog/ProductPills.astro"; import { format } from "date-fns"; export const getStaticPaths = (async () => { - const notes = await getCollection("changelogs-next"); + const notes = await getCollection("changelog"); return notes.map((note) => { return { diff --git a/src/pages/changelog/index.astro b/src/pages/changelog/index.astro index 3e6c77a8ceb1024..e59b454aa50c632 100644 --- a/src/pages/changelog/index.astro +++ b/src/pages/changelog/index.astro @@ -2,17 +2,16 @@ import StarlightPage, { type StarlightPageProps, } from "@astrojs/starlight/components/StarlightPage.astro"; -import { getCollection, render } from "astro:content"; +import { render } from "astro:content"; +import { getChangelogs } from "~/util/changelog"; -import Header from "~/components/changelog-next/Header.astro"; -import ProductPills from "~/components/changelog-next/ProductPills.astro"; +import Header from "~/components/changelog/Header.astro"; +import ProductPills from "~/components/changelog/ProductPills.astro"; import { Steps } from "~/components"; import { format } from "date-fns"; -const notes = await getCollection("changelogs-next"); - -notes.sort((a, b) => b.data.date.getTime() - a.data.date.getTime()); +const notes = await getChangelogs({}); const props = { frontmatter: { @@ -27,68 +26,93 @@ const props = {
- { - notes.map(async (entry) => { - const date = format(entry.data.date, "MMM dd, yyyy"); - - const productIds = JSON.stringify( - entry.data.products.map((product) => product.id), - ); - - const { Content } = await render(entry); - - return ( -
-
+ ); + }) + } +
+
+ +
diff --git a/src/pages/release-notes/index.xml.ts b/src/pages/release-notes/index.xml.ts deleted file mode 100644 index e463d5fb7b660e4..000000000000000 --- a/src/pages/release-notes/index.xml.ts +++ /dev/null @@ -1,96 +0,0 @@ -import rss from "@astrojs/rss"; -import { getCollection, getEntry } from "astro:content"; -import type { APIRoute } from "astro"; -import { marked, type Token } from "marked"; -import { getWranglerChangelog } from "~/util/changelogs"; -import { slug } from "github-slugger"; -import { entryToString } from "~/util/container"; - -export const GET: APIRoute = async (context) => { - function walkTokens(token: Token) { - if (token.type === "image" || token.type === "link") { - if (token.href.startsWith("/")) { - token.href = context.site + token.href.slice(1); - } - } - } - - marked.use({ walkTokens }); - - const changelogs = await getCollection("changelogs"); - - changelogs.push(await getWranglerChangelog()); - - const mapped = await Promise.all( - changelogs.flatMap((product) => { - return product.data.entries.map(async (entry) => { - let description; - if (entry.individual_page) { - const link = entry.link; - - if (!link) - throw new Error( - `Changelog entry points to individual page but no link is provided`, - ); - - const page = await getEntry("docs", link.slice(1, -1)); - - if (!page) - throw new Error( - `Changelog entry points to ${link.slice(1, -1)} but unable to find entry with that slug`, - ); - - description = - (await entryToString(page, context.locals)) ?? page.body; - } else { - description = entry.description; - } - - let link; - if (entry.link) { - link = entry.link; - } else { - const anchor = slug(entry.title ?? entry.publish_date); - link = product.data.link.concat(`#${anchor}`); - } - - let title; - if (entry.scheduled) { - title = `Scheduled for ${entry.scheduled_date}`; - } else { - title = entry.title; - } - - return { - product: product.data.productName, - link, - date: entry.publish_date, - description, - title, - }; - }); - }), - ); - - const entries = mapped.sort((a, b) => { - return a.date < b.date ? 1 : a.date > b.date ? -1 : 0; - }); - - return rss({ - title: `Cloudflare release notes`, - description: `Updates to various Cloudflare products.`, - site: "https://developers.cloudflare.com/release-notes/", - trailingSlash: false, - items: entries.map((entry) => { - return { - title: `${entry.product} - ${entry.title ?? entry.date}`, - description: marked.parse(entry.description ?? "", { - async: false, - }) as string, - pubDate: new Date(entry.date), - link: entry.link, - customData: `${entry.product}`, - }; - }), - }); -}; diff --git a/src/plugins/rehype/base-url.ts b/src/plugins/rehype/base-url.ts new file mode 100644 index 000000000000000..a7f26e45f259529 --- /dev/null +++ b/src/plugins/rehype/base-url.ts @@ -0,0 +1,20 @@ +import { visit } from "unist-util-visit"; +import type { Root } from "hast"; + +export default function () { + return function (tree: Root) { + visit(tree, "element", function (element) { + if (element.tagName === "a") { + const href = element.properties.href as string | undefined; + + if (href) { + if (href.startsWith("/")) { + const url = new URL(href, "https://developers.cloudflare.com/"); + + element.properties.href = url.href; + } + } + } + }); + }; +} diff --git a/src/plugins/rehype/filter-elements.ts b/src/plugins/rehype/filter-elements.ts new file mode 100644 index 000000000000000..251db3eb0933e06 --- /dev/null +++ b/src/plugins/rehype/filter-elements.ts @@ -0,0 +1,142 @@ +import { SKIP, visit, type VisitorResult } from "unist-util-visit"; +import type { Root, Element, Parents } from "hast"; + +const remove = (index: number, parent: Parents): VisitorResult => { + parent.children.splice(index, 1); + return [SKIP, index]; +}; + +const unwrap = ( + index: number, + parent: Parents, + element: Element, +): VisitorResult => { + parent.children.splice(index, 1, ...element.children); + return [SKIP, index]; +}; + +const ALLOWED_ELEMENTS = [ + // Content sectioning + "address", + "article", + "aside", + "footer", + "header", + "h1", + "h2", + "h3", + "h4", + "h5", + "h6", + "hgroup", + "main", + "nav", + "section", + // Text content + "blockquote", + "dd", + "div", + "dl", + "dt", + "figcaption", + "figure", + "hr", + "li", + "menu", + "ol", + "p", + "pre", + "ul", + // Inline text semantics + "a", + "abbr", + "b", + "bdi", + "bdo", + "br", + "cite", + "code", + "data", + "dfn", + "em", + "i", + "kbd", + "mark", + "q", + "rb", + "rp", + "rt", + "rtc", + "ruby", + "s", + "samp", + "small", + "span", + "strong", + "sub", + "sup", + "time", + "u", + "var", + "wbr", + // Table content + "caption", + "col", + "colgroup", + "table", + "tbody", + "td", + "tfoot", + "th", + "thead", + "tr", + // Custom elements + "rule-id", +]; + +const ALLOWED_ATTRIBUTES: Record = { + a: ["href", "id", "target"], + "rule-id": ["id"], +}; + +const UNWRAP_CLASS_NAMES = ["heading-wrapper"]; + +const DISALLOWED_CLASS_NAMES = ["external-link", "anchor-link"]; + +export default function () { + return function (tree: Root) { + visit(tree, "element", function (element, index, parent) { + if (typeof index === "number" && parent) { + const tag = element.tagName; + const classNames = (element.properties.className as string[]) ?? []; + + if (!ALLOWED_ELEMENTS.includes(tag)) { + return remove(index, parent); + } + + if (DISALLOWED_CLASS_NAMES.some((v) => classNames.includes(v))) { + return remove(index, parent); + } + + if (UNWRAP_CLASS_NAMES.some((v) => classNames.includes(v))) { + return unwrap(index, parent, element); + } + + for (const key of Object.keys(element.properties)) { + if (!ALLOWED_ATTRIBUTES[tag]?.includes(key)) { + delete element.properties[key]; + } + } + + if (tag === "rule-id") { + return unwrap(index, parent, { + ...element, + children: [ + { type: "text", value: element.properties.id as string }, + ], + }); + } + } + }); + }; +} diff --git a/src/schemas/base.ts b/src/schemas/base.ts index 03d5f4a5fb4e035..66b66cbce14ee69 100644 --- a/src/schemas/base.ts +++ b/src/schemas/base.ts @@ -66,8 +66,6 @@ export const baseSchema = z.object({ "This is used to automatically add the LastReviewed component to a page. Refer to https://developers.cloudflare.com/style-guide/components/last-reviewed/.", ), spotlight: spotlightAuthorDetails, - changelog_file_name: z.string().array().optional(), - changelog_product_area_name: z.string().optional(), products: z.string().array().optional(), languages: z.string().array().optional(), summary: z.string().optional(), diff --git a/src/schemas/changelogs-next.ts b/src/schemas/changelog.ts similarity index 51% rename from src/schemas/changelogs-next.ts rename to src/schemas/changelog.ts index f1ef260920bb4da..57a0efd7e47d461 100644 --- a/src/schemas/changelogs-next.ts +++ b/src/schemas/changelog.ts @@ -1,9 +1,15 @@ import { reference } from "astro:content"; import { z } from "astro:schema"; -export const changelogsNextSchema = z.object({ +export const changelogSchema = z.object({ title: z.string(), description: z.string(), date: z.coerce.date(), products: z.array(reference("products")), + link: z + .string() + .optional() + .describe( + 'Please do not use the "link" property in changelog entry frontmatter, it is reserved.', + ), }); diff --git a/src/schemas/changelogs.ts b/src/schemas/changelogs.ts deleted file mode 100644 index a637d8ecd70e976..000000000000000 --- a/src/schemas/changelogs.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { z } from "astro:schema"; - -export const changelogsSchema = z.object({ - link: z.string(), - productName: z.string(), - productLink: z.string(), - productArea: z.string(), - productAreaLink: z.string(), - entries: z - .object({ - publish_date: z.string(), - title: z.string().optional(), - description: z.string().optional(), - individual_page: z.boolean().optional(), - link: z.string().optional(), - scheduled: z.boolean().optional(), - scheduled_date: z.string().optional(), - }) - .array(), -}); diff --git a/src/schemas/index.ts b/src/schemas/index.ts index 1e47fcdc05af01b..a85e9a1574c59c4 100644 --- a/src/schemas/index.ts +++ b/src/schemas/index.ts @@ -1,7 +1,6 @@ export * from "./apps"; export * from "./base"; -export * from "./changelogs-next"; -export * from "./changelogs"; +export * from "./changelog"; export * from "./compatibility-flags"; export * from "./fields"; export * from "./glossary"; diff --git a/src/util/changelog.ts b/src/util/changelog.ts new file mode 100644 index 000000000000000..b69b1019a1761ec --- /dev/null +++ b/src/util/changelog.ts @@ -0,0 +1,215 @@ +import type { RSSFeedItem } from "@astrojs/rss"; +import { getCollection, getEntries, type CollectionEntry } from "astro:content"; +import { entryToString } from "~/util/container"; + +import { unified, type PluggableList } from "unified"; + +import rehypeParse from "rehype-parse"; +import rehypeStringify from "rehype-stringify"; +import rehypeBaseUrl from "~/plugins/rehype/base-url"; +import rehypeFilterElements from "~/plugins/rehype/filter-elements"; + +import rehypeRemark from "rehype-remark"; +import remarkGfm from "remark-gfm"; +import remarkStringify from "remark-stringify"; + +// TODO +// function toISODate(date: Date) { +// return date.toISOString().slice(0, 10); +// } + +// type DocsToChangelogOptions = { +// /** +// * An optional title to be prefixed before the date. +// * This is only necessary if you require an extra product name. +// * +// * @example +// * `HTTP DDoS managed ruleset` +// */ +// name?: string; +// /** +// * Name of a product which must match a filename in the +// * src/content/products/ collection, without the +// * file extension. +// * +// * @example +// * `ddos-protection` +// */ +// product: string; +// /** +// * A changelog entry from the `getChangelogs({})` function. +// * @see {@link getChangelogs} +// */ +// entry: CollectionEntry<"docs">; +// }; + +// function docsToChangelog({ +// name, +// product, +// entry, +// }: DocsToChangelogOptions): CollectionEntry<"changelog"> { +// const { data } = entry; + +// // `data.changelog` will exist as the existence of this +// // property is part of the `getChangelogs` filter. +// const date = data.changelog!.date; +// const scheduled = data.changelog!.scheduled; + +// const iso8601 = toISODate(date); + +// let title; +// if (scheduled) { +// title = `Scheduled for ${toISODate(scheduled)}`; +// } else { +// title = iso8601; +// } + +// if (name) { +// title = `${name} - ${title}`; +// } + +// return { +// ...entry, +// collection: "changelog", +// data: { +// title, +// description: `${name} - ${toISODate(date)}`, +// date, +// products: [{ collection: "products", id: product }], +// link: `/${entry.id}/`, +// }, +// }; +// } + +export type GetChangelogsOptions = { + filter?: (entry: CollectionEntry<"changelog">) => boolean; +}; + +export async function getChangelogs({ + filter, +}: GetChangelogsOptions): Promise>> { + let entries = await getCollection("changelog"); + + entries = entries.map((e) => { + e.data.link = `/changelog/${e.id}/`; + + return e; + }); + + // TODO + // const ddosHttp = await getCollection("docs", (e) => { + // return ( + // e.id.startsWith("ddos-protection/change-log/http/") && e.data.changelog + // ); + // }); + + // ddosHttp + // .map((e) => + // docsToChangelog({ + // name: "HTTP DDoS managed ruleset", + // product: "ddos-protection", + // entry: e, + // }), + // ) + // .forEach((e) => entries.push(e)); + + // const ddosNetwork = await getCollection("docs", (e) => { + // return ( + // e.id.startsWith("ddos-protection/change-log/network/") && e.data.changelog + // ); + // }); + + // ddosNetwork + // .map((e) => + // docsToChangelog({ + // name: "Network-layer DDoS managed ruleset", + // product: "ddos-protection", + // entry: e, + // }), + // ) + // .forEach((e) => entries.push(e)); + + // const waf = await getCollection("docs", (e) => { + // return e.id.startsWith("waf/change-log/") && e.data.changelog; + // }); + + // waf + // .map((e) => + // docsToChangelog({ + // product: "waf", + // entry: e, + // }), + // ) + // .forEach((e) => entries.push(e)); + + if (filter) { + entries = entries.filter((e) => filter(e)); + } + + return entries.sort((a, b) => b.data.date.getTime() - a.data.date.getTime()); +} + +type GetRSSItemsOptions = { + /** + * An array of changelog entries from the `getChangelogs({})` function. + * @see {@link getChangelogs} + */ + notes: Array>; + /** + * `locals`, either from `Astro.locals` in custom pages or + * `context.locals` in endpoints. + * @see {@link https://docs.astro.build/en/reference/api-reference/#locals} + */ + locals: App.Locals; + /** + * Returns Markdown in the `` field instead of HTML. + */ + markdown?: boolean; +}; + +export async function getRSSItems({ + notes, + locals, + markdown, +}: GetRSSItemsOptions): Promise> { + return await Promise.all( + notes.map(async (note) => { + const { title, date, products, link } = note.data; + + const productEntries = await getEntries(products); + const productTitles = productEntries.map((p) => p.data.name as string); + + const html = await entryToString(note, locals); + + const plugins: PluggableList = [ + rehypeParse, + rehypeBaseUrl, + rehypeFilterElements, + ]; + + if (markdown) { + plugins.push(...[rehypeRemark, remarkGfm, remarkStringify]); + } else { + plugins.push(...[rehypeStringify]); + } + + const file = await unified() + .data("settings", { + fragment: true, + }) + .use(plugins) + .process(html); + + const content = String(file).trim(); + + return { + title: `${productTitles.join(", ")} - ${title}`, + description: content, + pubDate: date, + categories: productTitles, + link, + customData: `${productTitles.at(0)}`, + }; + }), + ); +} diff --git a/src/util/changelogs.ts b/src/util/changelogs.ts deleted file mode 100644 index 21cc14bf00c63fb..000000000000000 --- a/src/util/changelogs.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { z } from "astro:schema"; -import { getCollection } from "astro:content"; -import { type CollectionEntry } from "astro:content"; - -export async function getChangelogs(opts?: { - filter?: Parameters>[1]; - wranglerOnly?: boolean; - deprecationsOnly?: boolean; -}) { - let changelogs; - - if (opts?.wranglerOnly) { - changelogs = [await getWranglerChangelog()]; - } else if (opts?.filter) { - changelogs = await getCollection("changelogs", opts.filter); - } else { - changelogs = await getCollection("changelogs"); - } - - if (!changelogs) { - throw new Error( - `[getChangelogs] Unable to find any changelogs with ${JSON.stringify(opts)}`, - ); - } - - if (opts?.deprecationsOnly) { - changelogs = changelogs.filter((x) => x.id === "api-deprecations"); - } else { - changelogs = changelogs.filter((x) => x.id !== "api-deprecations"); - } - - const products = [...new Set(changelogs.flatMap((x) => x.data.productName))]; - const productAreas = [ - ...new Set(changelogs.flatMap((x) => x.data.productArea)), - ]; - - const mapped = changelogs.flatMap((product) => { - return product.data.entries.map((entry) => { - return { - product: product.data.productName, - link: product.data.link, - date: entry.publish_date, - description: entry.description, - title: entry.title, - scheduled: entry.scheduled, - productLink: product.data.productLink, - productAreaName: product.data.productArea, - productAreaLink: product.data.productAreaLink, - individual_page: entry.individual_page && entry.link, - }; - }); - }); - - const grouped = Object.entries(Object.groupBy(mapped, (entry) => entry.date)); - const entries = grouped.sort().reverse(); - - return { products, productAreas, changelogs: entries }; -} - -export async function getWranglerChangelog(): Promise< - CollectionEntry<"changelogs"> -> { - const response = await fetch( - "https://api.github.com/repos/cloudflare/workers-sdk/releases?per_page=100", - ); - - if (!response.ok) { - throw new Error( - `[GetWranglerChangelog] Received ${response.status} response from GitHub API.`, - ); - } - - const json = await response.json(); - - let releases = z - .object({ - published_at: z.coerce.date(), - name: z.string(), - body: z.string(), - }) - .array() - .parse(json); - - releases = releases.filter((x) => x.name.startsWith("wrangler@")); - - return { - id: "wrangler", - collection: "changelogs", - data: { - link: "/workers/platform/changelog/wrangler/", - productName: "wrangler", - productLink: "/workers/wrangler/", - productArea: "Developer platform", - productAreaLink: "/workers/platform/changelog/platform/", - entries: releases.map((release) => { - return { - publish_date: release.published_at.toISOString().substring(0, 10), - title: release.name.split("@")[1], - link: `https://github.com/cloudflare/workers-sdk/releases/tag/wrangler%40${release.name.split("@")[1]}`, - description: release.body, - }; - }), - }, - }; -} diff --git a/src/util/container.ts b/src/util/container.ts index e4424e5ba228952..df2d0d3cb48483b 100644 --- a/src/util/container.ts +++ b/src/util/container.ts @@ -4,7 +4,7 @@ import { loadRenderers } from "astro:container"; import { render, type CollectionEntry } from "astro:content"; export async function entryToString( - entry: CollectionEntry<"docs">, + entry: CollectionEntry<"docs" | "changelog">, locals: any, ) { if (entry.rendered?.html) {