diff --git a/src/components/micro-frame/__tests__/__snapshots__/csr-custom-fetch/renders.expected/loading.0.html b/src/components/micro-frame/__tests__/__snapshots__/csr-custom-fetch/renders.expected/loading.0.html
new file mode 100644
index 0000000..3c607ad
--- /dev/null
+++ b/src/components/micro-frame/__tests__/__snapshots__/csr-custom-fetch/renders.expected/loading.0.html
@@ -0,0 +1,6 @@
+
+ Host app
+
+
\ No newline at end of file
diff --git a/src/components/micro-frame/__tests__/__snapshots__/csr-custom-fetch/renders.expected/loading.1.html b/src/components/micro-frame/__tests__/__snapshots__/csr-custom-fetch/renders.expected/loading.1.html
new file mode 100644
index 0000000..59471cd
--- /dev/null
+++ b/src/components/micro-frame/__tests__/__snapshots__/csr-custom-fetch/renders.expected/loading.1.html
@@ -0,0 +1,7 @@
+
+ Host app
+
+
+
\ No newline at end of file
diff --git a/src/components/micro-frame/__tests__/__snapshots__/csr-custom-fetch/renders.expected/loading.2.html b/src/components/micro-frame/__tests__/__snapshots__/csr-custom-fetch/renders.expected/loading.2.html
new file mode 100644
index 0000000..b9cc793
--- /dev/null
+++ b/src/components/micro-frame/__tests__/__snapshots__/csr-custom-fetch/renders.expected/loading.2.html
@@ -0,0 +1,9 @@
+
+ Host app
+
+
+ Custom fetch(src: embed) content.
+
+
\ No newline at end of file
diff --git a/src/components/micro-frame/__tests__/__snapshots__/ssr-custom-fetch/renders.expected/loading.0.html b/src/components/micro-frame/__tests__/__snapshots__/ssr-custom-fetch/renders.expected/loading.0.html
new file mode 100644
index 0000000..f2c3112
--- /dev/null
+++ b/src/components/micro-frame/__tests__/__snapshots__/ssr-custom-fetch/renders.expected/loading.0.html
@@ -0,0 +1,9 @@
+
+ Host app
+
+
+ Custom fetch(src: /embed) content.
+
\ No newline at end of file
diff --git a/src/components/micro-frame/__tests__/fixtures/csr-custom-fetch/components/app.marko b/src/components/micro-frame/__tests__/fixtures/csr-custom-fetch/components/app.marko
new file mode 100644
index 0000000..e5dabaf
--- /dev/null
+++ b/src/components/micro-frame/__tests__/fixtures/csr-custom-fetch/components/app.marko
@@ -0,0 +1,23 @@
+class {
+ onCreate() {
+ this.state = { mounted: false };
+ }
+ onMount() {
+ this.state.mounted = true;
+ }
+}
+
+
+ {
+ const stream = new ReadableStream({
+ start(controller) {
+ const encoder = new TextEncoder();
+ controller.enqueue(encoder.encode(`Custom fetch(src: ${src}) content.`));
+ controller.close();
+ }
+ });
+ resolve({ ok: true, body: stream });
+ });
+ } />
+
diff --git a/src/components/micro-frame/__tests__/fixtures/csr-custom-fetch/embed.marko b/src/components/micro-frame/__tests__/fixtures/csr-custom-fetch/embed.marko
new file mode 100644
index 0000000..6ebe406
--- /dev/null
+++ b/src/components/micro-frame/__tests__/fixtures/csr-custom-fetch/embed.marko
@@ -0,0 +1,4 @@
+
+
+ Embedded App.
+
diff --git a/src/components/micro-frame/__tests__/fixtures/csr-custom-fetch/index.marko b/src/components/micro-frame/__tests__/fixtures/csr-custom-fetch/index.marko
new file mode 100644
index 0000000..267d8b1
--- /dev/null
+++ b/src/components/micro-frame/__tests__/fixtures/csr-custom-fetch/index.marko
@@ -0,0 +1,13 @@
+
+
+
+
+
+ Simple Example
+
+
+
+ Host app
+
+
+
diff --git a/src/components/micro-frame/__tests__/fixtures/ssr-custom-fetch/embed.marko b/src/components/micro-frame/__tests__/fixtures/ssr-custom-fetch/embed.marko
new file mode 100644
index 0000000..6ebe406
--- /dev/null
+++ b/src/components/micro-frame/__tests__/fixtures/ssr-custom-fetch/embed.marko
@@ -0,0 +1,4 @@
+
+
+ Embedded App.
+
diff --git a/src/components/micro-frame/__tests__/fixtures/ssr-custom-fetch/index.marko b/src/components/micro-frame/__tests__/fixtures/ssr-custom-fetch/index.marko
new file mode 100644
index 0000000..f876179
--- /dev/null
+++ b/src/components/micro-frame/__tests__/fixtures/ssr-custom-fetch/index.marko
@@ -0,0 +1,20 @@
+
+
+
+
+
+ Simple Example
+
+
+
+ Host app
+ {
+ resolve({ ok: true, body: customFetch() });
+ });
+ } />
+
+
diff --git a/src/components/micro-frame/__tests__/server.test.ts b/src/components/micro-frame/__tests__/server.test.ts
index 0ed65c1..9bd8e3e 100644
--- a/src/components/micro-frame/__tests__/server.test.ts
+++ b/src/components/micro-frame/__tests__/server.test.ts
@@ -119,3 +119,13 @@ describe(
describe("csr 404", fixture(path.join(__dirname, "fixtures/csr-404")));
describe("ssr 404", fixture(path.join(__dirname, "fixtures/ssr-404")));
+
+describe(
+ "csr custom fetch",
+ fixture(path.join(__dirname, "fixtures/csr-custom-fetch"))
+);
+
+describe(
+ "ssr custom fetch",
+ fixture(path.join(__dirname, "fixtures/ssr-custom-fetch"))
+);
diff --git a/src/components/micro-frame/marko-tag.json b/src/components/micro-frame/marko-tag.json
index 54c5c73..e63a4c5 100644
--- a/src/components/micro-frame/marko-tag.json
+++ b/src/components/micro-frame/marko-tag.json
@@ -32,6 +32,15 @@
}
]
},
+ "@fetch": {
+ "type": "function",
+ "required": false,
+ "autocomplete": [
+ {
+ "description": "Customized fetch function"
+ }
+ ]
+ },
"@cache": {
"enum": ["default", "no-store", "reload", "force-cache", "only-if-cached"],
"autocomplete": [