diff --git a/examples/api-routes/api/hello.ts b/examples/api-routes/api/hello.ts
new file mode 100644
index 0000000000..3cf01ed22a
--- /dev/null
+++ b/examples/api-routes/api/hello.ts
@@ -0,0 +1,3 @@
+import { defineEventHandler } from 'h3'
+
+export default defineEventHandler(() => 'Nitro is amazing!')
diff --git a/playground/api/hello/:name.ts b/examples/api-routes/api/hello/:name.ts
similarity index 100%
rename from playground/api/hello/:name.ts
rename to examples/api-routes/api/hello/:name.ts
diff --git a/examples/api-routes/nitro.config.ts b/examples/api-routes/nitro.config.ts
new file mode 100644
index 0000000000..a61d1d8e09
--- /dev/null
+++ b/examples/api-routes/nitro.config.ts
@@ -0,0 +1,4 @@
+import { defineNitroConfig } from 'nitropack'
+
+export default defineNitroConfig({
+})
diff --git a/examples/api-routes/package.json b/examples/api-routes/package.json
new file mode 100644
index 0000000000..99f13ac46a
--- /dev/null
+++ b/examples/api-routes/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "example-api-routes",
+ "private": true,
+ "scripts": {
+ "dev": "nitro dev",
+ "build": "nitro build"
+ },
+ "devDependencies": {
+ "nitropack": "latest"
+ }
+}
diff --git a/examples/api-routes/public/index.html b/examples/api-routes/public/index.html
new file mode 100644
index 0000000000..ad4ba117e6
--- /dev/null
+++ b/examples/api-routes/public/index.html
@@ -0,0 +1,2 @@
+/api/hello
+/api/hello/world
diff --git a/examples/api-routes/tsconfig.json b/examples/api-routes/tsconfig.json
new file mode 100644
index 0000000000..43008af1c7
--- /dev/null
+++ b/examples/api-routes/tsconfig.json
@@ -0,0 +1,3 @@
+{
+ "extends": "./.nitro/types/tsconfig.json"
+}
diff --git a/examples/cached-handler/api/test.ts b/examples/cached-handler/api/test.ts
new file mode 100644
index 0000000000..95bec952a9
--- /dev/null
+++ b/examples/cached-handler/api/test.ts
@@ -0,0 +1,6 @@
+import { defineCachedEventHandler } from '#nitro'
+
+export default defineCachedEventHandler(async () => {
+ await new Promise(resolve => setTimeout(resolve, 1000))
+ return `Response generated at ${new Date().toISOString()} (took 1 second)`
+})
diff --git a/examples/cached-handler/nitro.config.ts b/examples/cached-handler/nitro.config.ts
new file mode 100644
index 0000000000..a61d1d8e09
--- /dev/null
+++ b/examples/cached-handler/nitro.config.ts
@@ -0,0 +1,4 @@
+import { defineNitroConfig } from 'nitropack'
+
+export default defineNitroConfig({
+})
diff --git a/examples/cached-handler/package.json b/examples/cached-handler/package.json
new file mode 100644
index 0000000000..4c7eb5aa7c
--- /dev/null
+++ b/examples/cached-handler/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "example-cached-handler",
+ "private": true,
+ "scripts": {
+ "dev": "nitro dev",
+ "build": "nitro build"
+ },
+ "devDependencies": {
+ "nitropack": "latest"
+ }
+}
diff --git a/examples/cached-handler/tsconfig.json b/examples/cached-handler/tsconfig.json
new file mode 100644
index 0000000000..43008af1c7
--- /dev/null
+++ b/examples/cached-handler/tsconfig.json
@@ -0,0 +1,3 @@
+{
+ "extends": "./.nitro/types/tsconfig.json"
+}
diff --git a/examples/hello-world/nitro.config.ts b/examples/hello-world/nitro.config.ts
new file mode 100644
index 0000000000..a61d1d8e09
--- /dev/null
+++ b/examples/hello-world/nitro.config.ts
@@ -0,0 +1,4 @@
+import { defineNitroConfig } from 'nitropack'
+
+export default defineNitroConfig({
+})
diff --git a/examples/hello-world/package.json b/examples/hello-world/package.json
index 374076e437..fb3c547d5d 100644
--- a/examples/hello-world/package.json
+++ b/examples/hello-world/package.json
@@ -1,11 +1,11 @@
{
- "name": "nitro-example-hello-world",
+ "name": "example-hello-world",
"private": true,
"scripts": {
"dev": "nitro dev",
"build": "nitro build"
},
"devDependencies": {
- "nitropack-edge": "latest"
+ "nitropack": "latest"
}
}
diff --git a/examples/hello-world/tsconfig.json b/examples/hello-world/tsconfig.json
new file mode 100644
index 0000000000..43008af1c7
--- /dev/null
+++ b/examples/hello-world/tsconfig.json
@@ -0,0 +1,3 @@
+{
+ "extends": "./.nitro/types/tsconfig.json"
+}
diff --git a/playground/middleware/test.ts b/examples/middleware/middleware/test.ts
similarity index 100%
rename from playground/middleware/test.ts
rename to examples/middleware/middleware/test.ts
diff --git a/examples/middleware/nitro.config.ts b/examples/middleware/nitro.config.ts
new file mode 100644
index 0000000000..a61d1d8e09
--- /dev/null
+++ b/examples/middleware/nitro.config.ts
@@ -0,0 +1,4 @@
+import { defineNitroConfig } from 'nitropack'
+
+export default defineNitroConfig({
+})
diff --git a/examples/middleware/package.json b/examples/middleware/package.json
new file mode 100644
index 0000000000..41e367d2e7
--- /dev/null
+++ b/examples/middleware/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "example-middleware",
+ "private": true,
+ "scripts": {
+ "dev": "nitro dev",
+ "build": "nitro build"
+ },
+ "devDependencies": {
+ "nitropack": "latest"
+ }
+}
diff --git a/examples/middleware/tsconfig.json b/examples/middleware/tsconfig.json
new file mode 100644
index 0000000000..43008af1c7
--- /dev/null
+++ b/examples/middleware/tsconfig.json
@@ -0,0 +1,3 @@
+{
+ "extends": "./.nitro/types/tsconfig.json"
+}
diff --git a/examples/plugins/nitro.config.ts b/examples/plugins/nitro.config.ts
new file mode 100644
index 0000000000..5b8e964d56
--- /dev/null
+++ b/examples/plugins/nitro.config.ts
@@ -0,0 +1,7 @@
+import { defineNitroConfig } from 'nitropack'
+
+export default defineNitroConfig({
+ plugins: [
+ '~/plugins/test'
+ ]
+})
diff --git a/examples/plugins/package.json b/examples/plugins/package.json
new file mode 100644
index 0000000000..28a06f9422
--- /dev/null
+++ b/examples/plugins/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "example-plugins",
+ "private": true,
+ "scripts": {
+ "dev": "nitro dev",
+ "build": "nitro build"
+ },
+ "devDependencies": {
+ "nitropack": "latest"
+ }
+}
diff --git a/playground/plugins/test.ts b/examples/plugins/plugins/test.ts
similarity index 100%
rename from playground/plugins/test.ts
rename to examples/plugins/plugins/test.ts
diff --git a/examples/plugins/tsconfig.json b/examples/plugins/tsconfig.json
new file mode 100644
index 0000000000..43008af1c7
--- /dev/null
+++ b/examples/plugins/tsconfig.json
@@ -0,0 +1,3 @@
+{
+ "extends": "./.nitro/types/tsconfig.json"
+}
diff --git a/package.json b/package.json
index 1ea0ecbae6..279c8941e9 100644
--- a/package.json
+++ b/package.json
@@ -4,6 +4,12 @@
"description": "Next Generation Web Tooling",
"license": "MIT",
"type": "module",
+ "workspaces": [
+ "./examples/**"
+ ],
+ "resolutions": {
+ "nitropack": "link:."
+ },
"exports": {
".": "./dist/index.mjs",
"./cli": "./dist/cli.mjs",
@@ -22,6 +28,7 @@
"scripts": {
"build": "unbuild",
"dev": "yarn nitro dev playground",
+ "example": "yarn workspace example-$0 dev",
"dev:build": "yarn nitro build playground",
"dev:start": "node playground/.output/server/index.mjs",
"lint": "eslint --ext .ts,.mjs,.cjs .",
diff --git a/playground/api/error.ts b/playground/api/error.ts
deleted file mode 100644
index 3e6f0e3cee..0000000000
--- a/playground/api/error.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { defineEventHandler } from 'h3'
-
-export default defineEventHandler((_event) => {
- throw new Error('Booo')
-})
diff --git a/playground/api/swr.ts b/playground/api/swr.ts
deleted file mode 100644
index 7e555ed303..0000000000
--- a/playground/api/swr.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { defineEventHandler } from 'h3'
-
-const waitFor = (ms: number) => new Promise(resolve => setTimeout(resolve, ms))
-
-// Cache is handled with route options in nitro.config
-export default defineEventHandler(async () => {
- await waitFor(1000)
- return `Response generated at ${new Date().toISOString()} (took 1 second)`
-})
diff --git a/playground/api/test.ts b/playground/api/test.ts
deleted file mode 100644
index ea30f28a0f..0000000000
--- a/playground/api/test.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { defineEventHandler } from 'h3'
-
-export default defineEventHandler(() => ({ api: 'Works!' }))
diff --git a/playground/app.ts b/playground/app.ts
index 7f7825e6b0..1cc398b615 100644
--- a/playground/app.ts
+++ b/playground/app.ts
@@ -1,26 +1,3 @@
import { eventHandler } from 'h3'
-export default eventHandler(() => {
- const links = [
- '/api/hello/you',
- '/api/test',
- '/api/swr',
- '/api/error'
- ]
- return `
-
-