summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/integrations/cloudflare/CHANGELOG.md12
-rw-r--r--packages/integrations/cloudflare/package.json12
-rw-r--r--packages/integrations/cloudflare/src/utils/generate-routes-json.ts41
-rw-r--r--packages/integrations/cloudflare/test/fixtures/astro-dev-platform/package.json2
-rw-r--r--packages/integrations/cloudflare/test/fixtures/astro-env/package.json2
-rw-r--r--packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/env.d.ts2
-rw-r--r--packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/404.astro3
-rw-r--r--packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic1.astro5
-rw-r--r--packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic2.astro5
-rw-r--r--packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic3.astro5
-rw-r--r--packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/index.astro5
-rw-r--r--packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/dynamic.astro5
-rw-r--r--packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/static.astro5
-rw-r--r--packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/subfolder/dynamic.astro5
-rw-r--r--packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/subfolder/static.astro5
-rw-r--r--packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static1.astro5
-rw-r--r--packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static2.astro5
-rw-r--r--packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static3.astro5
-rw-r--r--packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json4
-rw-r--r--packages/integrations/cloudflare/test/routes-json.test.js41
20 files changed, 158 insertions, 16 deletions
diff --git a/packages/integrations/cloudflare/CHANGELOG.md b/packages/integrations/cloudflare/CHANGELOG.md
index 2a481aa86..18bce6fc1 100644
--- a/packages/integrations/cloudflare/CHANGELOG.md
+++ b/packages/integrations/cloudflare/CHANGELOG.md
@@ -48,6 +48,18 @@
- [#392](https://github.com/withastro/adapters/pull/392) [`3a49eb7`](https://github.com/withastro/adapters/commit/3a49eb7802c44212ccfab06034b7dc5f2b060e94) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Updates internal code for Astro 5 changes. No changes is required to your project, apart from using Astro 5
+## 11.1.0
+
+### Minor Changes
+
+- [#394](https://github.com/withastro/adapters/pull/394) [`44dfa99`](https://github.com/withastro/adapters/commit/44dfa9935e22edab16490d625a88aaa0f1942a19) Thanks [@veitbjarsch](https://github.com/veitbjarsch)! - Added functionality to compare include and exclude rules to reduce the amount of cloudflare rules
+
+## 11.0.5
+
+### Patch Changes
+
+- [#387](https://github.com/withastro/adapters/pull/387) [`04e5c38`](https://github.com/withastro/adapters/commit/04e5c389f251efa02fe7b973ed95cdc61fad3389) Thanks [@veitbjarsch](https://github.com/veitbjarsch)! - Fixes a bug which was caused on windows when splitting static file paths
+
## 11.0.4
### Patch Changes
diff --git a/packages/integrations/cloudflare/package.json b/packages/integrations/cloudflare/package.json
index 5c1bd36b5..0cb3e0636 100644
--- a/packages/integrations/cloudflare/package.json
+++ b/packages/integrations/cloudflare/package.json
@@ -30,14 +30,14 @@
"dependencies": {
"@astrojs/internal-helpers": "0.4.1",
"@astrojs/underscore-redirects": "^0.4.0-alpha.0",
- "@cloudflare/workers-types": "^4.20240903.0",
+ "@cloudflare/workers-types": "^4.20240925.0",
"esbuild": "^0.23.1",
"estree-walker": "^3.0.3",
"magic-string": "^0.30.11",
- "miniflare": "^3.20240821.1",
+ "miniflare": "^3.20240925.0",
"tiny-glob": "^0.2.9",
- "wrangler": "^3.75.0",
- "@inox-tools/astro-when": "^0.2.2"
+ "wrangler": "^3.78.12",
+ "@inox-tools/astro-when": "^0.2.3"
},
"peerDependencies": {
"astro": "^5.0.0-alpha.8"
@@ -49,9 +49,9 @@
"cheerio": "1.0.0",
"execa": "^8.0.1",
"fast-glob": "^3.3.2",
- "rollup": "^4.21.2",
+ "rollup": "^4.22.5",
"strip-ansi": "^7.1.0",
- "vite": "^5.4.3"
+ "vite": "^5.4.8"
},
"publishConfig": {
"provenance": true
diff --git a/packages/integrations/cloudflare/src/utils/generate-routes-json.ts b/packages/integrations/cloudflare/src/utils/generate-routes-json.ts
index a87e59308..43adeb675 100644
--- a/packages/integrations/cloudflare/src/utils/generate-routes-json.ts
+++ b/packages/integrations/cloudflare/src/utils/generate-routes-json.ts
@@ -2,7 +2,7 @@ import type { AstroConfig, AstroIntegrationLogger, IntegrationRouteData, RoutePa
import { existsSync } from 'node:fs';
import { writeFile } from 'node:fs/promises';
-import { posix } from 'node:path';
+import path from 'node:path';
import { fileURLToPath } from 'node:url';
import {
prependForwardSlash,
@@ -128,6 +128,31 @@ class PathTrie {
}
}
+ /**
+ * The reduce function is used to remove unnecessary paths from the trie.
+ * It receives a trie node to compare with the current node.
+ */
+ private reduce(compNode: TrieNode, node: TrieNode): void {
+ if (node.hasWildcardChild || compNode.hasWildcardChild) return;
+
+ for (const [segment, childNode] of node.children) {
+ if (childNode.children.size === 0) continue;
+
+ const compChildNode = compNode.children.get(segment);
+ if (compChildNode === undefined) {
+ childNode.hasWildcardChild = true;
+ continue;
+ }
+
+ this.reduce(compChildNode, childNode);
+ }
+ }
+
+ reduceAllPaths(compTrie: PathTrie): this {
+ this.reduce(compTrie.root, this.root);
+ return this;
+ }
+
getAllPaths(): [string[][], boolean] {
const allPaths: string[][] = [];
this.dfs(this.root, [], allPaths);
@@ -186,7 +211,7 @@ export async function createRoutesFile(
const staticPath = staticFile;
const segments = removeLeadingForwardSlash(staticPath)
- .split(posix.sep)
+ .split(path.sep)
.filter(Boolean)
.map((s: string) => {
return getParts(s);
@@ -232,7 +257,7 @@ export async function createRoutesFile(
for (const page of pages) {
if (page.pathname === '404') hasPrerendered404 = true;
const pageSegments = removeLeadingForwardSlash(page.pathname)
- .split(posix.sep)
+ .split(path.posix.sep)
.filter(Boolean)
.map((s) => {
return getParts(s);
@@ -244,7 +269,6 @@ export async function createRoutesFile(
for (const includePath of includePaths) {
includeTrie.insert(includePath);
}
- const [deduplicatedIncludePaths, includedPathsHaveWildcard] = includeTrie.getAllPaths();
const excludeTrie = new PathTrie();
for (const excludePath of excludePaths) {
@@ -256,7 +280,14 @@ export async function createRoutesFile(
if (excludePath[0] === '*') continue;
excludeTrie.insert(excludePath);
}
- const [deduplicatedExcludePaths, _excludedPathsHaveWildcard] = excludeTrie.getAllPaths();
+
+ const [deduplicatedIncludePaths, includedPathsHaveWildcard] = includeTrie
+ .reduceAllPaths(excludeTrie)
+ .getAllPaths();
+
+ const [deduplicatedExcludePaths, _excludedPathsHaveWildcard] = excludeTrie
+ .reduceAllPaths(includeTrie)
+ .getAllPaths();
/**
* Cloudflare allows no more than 100 include/exclude rules combined
diff --git a/packages/integrations/cloudflare/test/fixtures/astro-dev-platform/package.json b/packages/integrations/cloudflare/test/fixtures/astro-dev-platform/package.json
index 1f9b7f249..2392c6172 100644
--- a/packages/integrations/cloudflare/test/fixtures/astro-dev-platform/package.json
+++ b/packages/integrations/cloudflare/test/fixtures/astro-dev-platform/package.json
@@ -7,6 +7,6 @@
"astro": "^5.0.0-alpha.8"
},
"devDependencies": {
- "wrangler": "^3.75.0"
+ "wrangler": "^3.78.12"
}
}
diff --git a/packages/integrations/cloudflare/test/fixtures/astro-env/package.json b/packages/integrations/cloudflare/test/fixtures/astro-env/package.json
index 23028a77c..2598bee1a 100644
--- a/packages/integrations/cloudflare/test/fixtures/astro-env/package.json
+++ b/packages/integrations/cloudflare/test/fixtures/astro-env/package.json
@@ -7,6 +7,6 @@
"astro": "^5.0.0-alpha.8"
},
"devDependencies": {
- "wrangler": "^3.75.0"
+ "wrangler": "^3.78.12"
}
}
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/env.d.ts b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/env.d.ts
new file mode 100644
index 000000000..2da76ba24
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/env.d.ts
@@ -0,0 +1,2 @@
+/// <reference path="../../.astro/types.d.ts" />
+/// <reference types="astro/client" /> \ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/404.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/404.astro
new file mode 100644
index 000000000..42af67a78
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/404.astro
@@ -0,0 +1,3 @@
+---
+export const prerender = true;
+---
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic1.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic1.astro
new file mode 100644
index 000000000..9a2306b86
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic1.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic2.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic2.astro
new file mode 100644
index 000000000..9a2306b86
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic2.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic3.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic3.astro
new file mode 100644
index 000000000..9a2306b86
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic3.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/index.astro
new file mode 100644
index 000000000..9a2306b86
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/index.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/dynamic.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/dynamic.astro
new file mode 100644
index 000000000..9a2306b86
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/dynamic.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/static.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/static.astro
new file mode 100644
index 000000000..d5683c216
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/static.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=true;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/subfolder/dynamic.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/subfolder/dynamic.astro
new file mode 100644
index 000000000..9a2306b86
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/subfolder/dynamic.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/subfolder/static.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/subfolder/static.astro
new file mode 100644
index 000000000..d5683c216
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/subfolder/static.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=true;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static1.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static1.astro
new file mode 100644
index 000000000..d5683c216
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static1.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=true;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static2.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static2.astro
new file mode 100644
index 000000000..d5683c216
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static2.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=true;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static3.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static3.astro
new file mode 100644
index 000000000..d5683c216
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static3.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=true;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json b/packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json
index 9f96b1017..13df3b222 100644
--- a/packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json
+++ b/packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json
@@ -4,8 +4,8 @@
"private": true,
"dependencies": {
"@astrojs/cloudflare": "workspace:*",
- "@astrojs/solid-js": "^4.4.1",
+ "@astrojs/solid-js": "^4.4.2",
"astro": "^5.0.0-alpha.8",
- "solid-js": "^1.8.21"
+ "solid-js": "^1.9.1"
}
}
diff --git a/packages/integrations/cloudflare/test/routes-json.test.js b/packages/integrations/cloudflare/test/routes-json.test.js
index 1442ddfed..95a50c306 100644
--- a/packages/integrations/cloudflare/test/routes-json.test.js
+++ b/packages/integrations/cloudflare/test/routes-json.test.js
@@ -48,7 +48,7 @@ describe('_routes.json generation', () => {
assert.deepEqual(routes, {
version: 1,
include: ['/*'],
- exclude: ['/_astro/*', '/redirectme', '/public.txt', '/a/redirect'],
+ exclude: ['/_astro/*', '/redirectme', '/public.txt', '/a/*'],
});
});
});
@@ -146,4 +146,43 @@ describe('_routes.json generation', () => {
});
});
});
+
+ describe('with nested on demand and prerendered routes', () => {
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: new URL('./fixtures/routes-json/', import.meta.url).toString(),
+ srcDir: './src/reduceComplexity',
+ adapter: cloudflare({}),
+ });
+ await fixture.build();
+ });
+
+ it('reduces the amount of include and exclude entries by applying wildcards wherever possible', async () => {
+ const _routesJson = await fixture.readFile('/_routes.json');
+ const routes = JSON.parse(_routesJson);
+
+ assert.deepEqual(routes, {
+ version: 1,
+ include: [
+ '/',
+ '/dynamicPages/*',
+ '/mixedPages/dynamic',
+ '/mixedPages/subfolder/dynamic',
+ '/_image',
+ ],
+ exclude: [
+ '/_astro/*',
+ '/redirectme',
+ '/public.txt',
+ '/a/*',
+ '/404',
+ '/mixedPages/static',
+ '/mixedPages/subfolder/static',
+ '/staticPages/*',
+ ],
+ });
+ });
+ });
});