@qwik.dev/core 2.0.0-beta.2 → 2.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bindings/qwik.darwin-arm64.node +0 -0
- package/bindings/qwik.linux-x64-gnu.node +0 -0
- package/bindings/qwik.win32-x64-msvc.node +0 -0
- package/bindings/qwik_wasm_bg.wasm +0 -0
- package/dist/backpatch/index.d.ts +2 -0
- package/dist/backpatch/index.mjs +5 -0
- package/dist/backpatch/package.json +8 -0
- package/dist/backpatch-executor.debug.js +39 -0
- package/dist/backpatch-executor.js +1 -0
- package/dist/build/package.json +1 -1
- package/dist/cli.mjs +5633 -0
- package/dist/core-internal.d.ts +673 -396
- package/dist/core.min.mjs +2 -1
- package/dist/core.mjs +10168 -8294
- package/dist/core.mjs.map +1 -1
- package/dist/core.prod.mjs +5745 -4592
- package/dist/insights/vite/index.mjs +10 -10
- package/dist/loader/index.mjs +2 -2
- package/dist/loader/package.json +1 -1
- package/dist/optimizer.d.ts +16 -38
- package/dist/optimizer.mjs +2608 -3719
- package/dist/preloader.mjs +8 -11
- package/dist/qwikloader.debug.js +152 -132
- package/dist/qwikloader.js +1 -1
- package/dist/server.d.ts +38 -15
- package/dist/server.mjs +1209 -927
- package/dist/starters/adapters/aws-lambda/adapters/aws-lambda/{vite.config.mts → vite.config.ts} +2 -2
- package/dist/starters/adapters/aws-lambda/package.json +3 -2
- package/dist/starters/adapters/aws-lambda/src/entry_aws-lambda.tsx +2 -6
- package/dist/starters/adapters/azure-swa/adapters/azure-swa/{vite.config.mts → vite.config.ts} +2 -2
- package/dist/starters/adapters/azure-swa/package.json +3 -2
- package/dist/starters/adapters/azure-swa/src/entry.azure-swa.tsx +2 -3
- package/dist/starters/adapters/bun/adapters/bun/{vite.config.mts → vite.config.ts} +3 -3
- package/dist/starters/adapters/bun/package.json +3 -2
- package/dist/starters/adapters/bun/src/entry.bun.ts +0 -2
- package/dist/starters/adapters/cloud-run/adapters/cloud-run/{vite.config.mts → vite.config.ts} +2 -2
- package/dist/starters/adapters/cloud-run/package.json +3 -2
- package/dist/starters/adapters/cloud-run/src/entry.cloud-run.tsx +1 -3
- package/dist/starters/adapters/cloudflare-pages/adapters/cloudflare-pages/{vite.config.mts → vite.config.ts} +2 -2
- package/dist/starters/adapters/cloudflare-pages/package.json +3 -2
- package/dist/starters/adapters/cloudflare-pages/src/entry.cloudflare-pages.tsx +2 -3
- package/dist/starters/adapters/cloudflare-workers/README.md +52 -0
- package/dist/starters/adapters/cloudflare-workers/adapters/cloudflare-workers/vite.config.ts +15 -0
- package/dist/starters/adapters/cloudflare-workers/gitignore +3 -0
- package/dist/starters/adapters/cloudflare-workers/package.json +31 -0
- package/dist/starters/adapters/cloudflare-workers/public/.assetsignore +4 -0
- package/dist/starters/adapters/cloudflare-workers/public/_headers +11 -0
- package/dist/starters/adapters/cloudflare-workers/public/_redirects +1 -0
- package/dist/starters/adapters/cloudflare-workers/src/entry.cloudflare-pages.tsx +23 -0
- package/dist/starters/adapters/cloudflare-workers/worker-configuration.d.ts +5 -0
- package/dist/starters/adapters/cloudflare-workers/wrangler.jsonc +41 -0
- package/dist/starters/adapters/deno/adapters/deno/{vite.config.mts → vite.config.ts} +2 -2
- package/dist/starters/adapters/deno/package.json +3 -2
- package/dist/starters/adapters/deno/src/entry.deno.ts +0 -2
- package/dist/starters/adapters/express/adapters/express/{vite.config.mts → vite.config.ts} +2 -2
- package/dist/starters/adapters/express/package.json +4 -3
- package/dist/starters/adapters/express/src/entry.express.tsx +1 -3
- package/dist/starters/adapters/fastify/adapters/fastify/{vite.config.mts → vite.config.ts} +2 -2
- package/dist/starters/adapters/fastify/package.json +3 -2
- package/dist/starters/adapters/fastify/src/entry.fastify.tsx +1 -1
- package/dist/starters/adapters/fastify/src/plugins/fastify-qwik.ts +1 -2
- package/dist/starters/adapters/firebase/adapters/firebase/{vite.config.mts → vite.config.ts} +2 -2
- package/dist/starters/adapters/firebase/package.json +3 -2
- package/dist/starters/adapters/firebase/src/entry-firebase.tsx +2 -3
- package/dist/starters/adapters/netlify-edge/adapters/netlify-edge/{vite.config.mts → vite.config.ts} +2 -2
- package/dist/starters/adapters/netlify-edge/package.json +3 -2
- package/dist/starters/adapters/netlify-edge/src/entry.netlify-edge.tsx +2 -3
- package/dist/starters/adapters/node-server/adapters/node-server/{vite.config.mts → vite.config.ts} +2 -2
- package/dist/starters/adapters/node-server/package.json +3 -2
- package/dist/starters/adapters/node-server/src/entry.node-server.tsx +0 -2
- package/dist/starters/adapters/{static/adapters/static/vite.config.mts → ssg/adapters/ssg/vite.config.ts} +3 -3
- package/dist/starters/adapters/ssg/package.json +20 -0
- package/dist/starters/adapters/vercel-edge/README.md +2 -2
- package/dist/starters/adapters/vercel-edge/adapters/vercel-edge/{vite.config.mts → vite.config.ts} +2 -2
- package/dist/starters/adapters/vercel-edge/package.json +3 -2
- package/dist/starters/adapters/vercel-edge/src/entry.vercel-edge.tsx +2 -3
- package/dist/starters/adapters/vercel-edge/vercel.json +1 -1
- package/dist/starters/features/auth/package.json +1 -1
- package/dist/starters/features/compiled-i18n/package.json +37 -0
- package/dist/starters/features/compiled-i18n/src/components/locale-selector/locale-selector.tsx +30 -0
- package/dist/starters/features/compiled-i18n/src/entry.ssr.tsx +31 -0
- package/dist/starters/features/compiled-i18n/src/routes/plugin@compiled-i18n.ts +28 -0
- package/dist/starters/features/csr/index.html +23 -0
- package/dist/starters/features/csr/package.json +29 -0
- package/dist/starters/features/csr/src/root.tsx +15 -0
- package/dist/starters/features/csr/vite.config.ts +13 -0
- package/dist/starters/features/cypress/src/actions/example.action.ts +5 -0
- package/dist/starters/features/cypress/src/components/example/example.cy.tsx +50 -8
- package/dist/starters/features/cypress/src/components/example/example.tsx +13 -3
- package/dist/starters/features/cypress/src/loaders/example.loader.ts +5 -0
- package/dist/starters/features/pandacss/package.json +1 -1
- package/dist/starters/features/playwright/playwright-report/index.html +953 -930
- package/dist/starters/features/postcss/postcss.config.js +1 -1
- package/dist/starters/features/storybook/.storybook/tsconfig.json +0 -1
- package/dist/starters/features/styled-vanilla-extract/package.json +2 -1
- package/dist/starters/features/tailwind/package.json +2 -2
- package/dist/starters/features/tailwind/prettier.config.js +10 -0
- package/dist/starters/features/tailwind-v3/package.json +1 -1
- package/dist/starters/features/tailwind-v3/prettier.config.js +10 -0
- package/dist/testing/index.d.ts +775 -6
- package/dist/testing/index.mjs +14298 -10837
- package/dist/testing/package.json +1 -1
- package/handlers.mjs +1 -1
- package/package.json +30 -55
- package/public.d.ts +3 -1
- package/{qwik-cli.cjs → qwik-cli.mjs} +1 -1
- package/server.d.ts +2 -0
- package/bindings/qwik.darwin-x64.node +0 -0
- package/bindings/qwik.wasm.cjs +0 -471
- package/dist/build/index.cjs +0 -35
- package/dist/build/index.cjs.map +0 -7
- package/dist/build/index.dev.cjs +0 -37
- package/dist/build/index.dev.cjs.map +0 -7
- package/dist/build/index.prod.cjs +0 -37
- package/dist/build/index.prod.cjs.map +0 -7
- package/dist/cli.cjs +0 -5545
- package/dist/core.cjs +0 -11754
- package/dist/core.cjs.map +0 -1
- package/dist/core.prod.cjs +0 -5647
- package/dist/insights/index.qwik.cjs +0 -1
- package/dist/insights/vite/index.cjs +0 -1
- package/dist/loader/index.cjs +0 -4
- package/dist/optimizer.cjs +0 -4020
- package/dist/preloader.cjs +0 -269
- package/dist/server.cjs +0 -3027
- package/dist/starters/adapters/static/package.json +0 -19
- package/dist/starters/features/localize/package.json +0 -37
- package/dist/starters/features/localize/src/entry.ssr.tsx +0 -30
- package/dist/starters/features/localize/src/locales/message.en.json +0 -8
- package/dist/starters/features/localize/src/locales/message.it.json +0 -8
- package/dist/starters/features/localize/src/routes/[locale]/i18n-utils.ts +0 -94
- package/dist/starters/features/localize/src/routes/[locale]/index.tsx +0 -52
- package/dist/starters/features/localize/src/routes/[locale]/layout.tsx +0 -12
- package/dist/starters/features/tailwind/.prettierrc.js +0 -3
- package/dist/testing/index.cjs +0 -33287
- /package/dist/starters/adapters/{static → ssg}/README.md +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import fastifyStatic from "@fastify/static";
|
|
2
|
-
import qwikRouterConfig from "@qwik-router-config";
|
|
3
2
|
import { createQwikRouter } from "@qwik.dev/router/middleware/node";
|
|
4
3
|
import type { FastifyPluginAsync } from "fastify";
|
|
5
4
|
import fastifyPlugin from "fastify-plugin";
|
|
@@ -12,7 +11,7 @@ export interface FastifyQwikOptions {
|
|
|
12
11
|
assetsDir: string;
|
|
13
12
|
}
|
|
14
13
|
|
|
15
|
-
const { router, notFound } = createQwikRouter({ render
|
|
14
|
+
const { router, notFound } = createQwikRouter({ render });
|
|
16
15
|
|
|
17
16
|
const qwikPlugin: FastifyPluginAsync<FastifyQwikOptions> = async (
|
|
18
17
|
fastify,
|
package/dist/starters/adapters/firebase/adapters/firebase/{vite.config.mts → vite.config.ts}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { nodeServerAdapter } from "@qwik.dev/router/adapters/node-server/vite";
|
|
2
2
|
import { extendConfig } from "@qwik.dev/router/vite";
|
|
3
3
|
import { builtinModules } from "module";
|
|
4
|
-
import baseConfig from "../../vite.config.
|
|
4
|
+
import baseConfig from "../../vite.config.ts";
|
|
5
5
|
export default extendConfig(baseConfig, () => {
|
|
6
6
|
return {
|
|
7
7
|
ssr: {
|
|
@@ -12,7 +12,7 @@ export default extendConfig(baseConfig, () => {
|
|
|
12
12
|
minify: false,
|
|
13
13
|
ssr: true,
|
|
14
14
|
rollupOptions: {
|
|
15
|
-
input: ["./src/entry-firebase.tsx"
|
|
15
|
+
input: ["./src/entry-firebase.tsx"],
|
|
16
16
|
},
|
|
17
17
|
outDir: "./functions/server",
|
|
18
18
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"description": "Firebase",
|
|
3
3
|
"scripts": {
|
|
4
|
-
"build.server": "vite build -c adapters/firebase/vite.config.
|
|
4
|
+
"build.server": "qwik check-client src dist && vite build -c adapters/firebase/vite.config.ts",
|
|
5
5
|
"serve": "qwik build && firebase emulators:start",
|
|
6
6
|
"deploy": "firebase deploy"
|
|
7
7
|
},
|
|
@@ -20,5 +20,6 @@
|
|
|
20
20
|
"- cd functions && pnpm i"
|
|
21
21
|
]
|
|
22
22
|
}
|
|
23
|
-
}
|
|
23
|
+
},
|
|
24
|
+
"type": "module"
|
|
24
25
|
}
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
* - https://qwik.dev/docs/deployments/firebase/
|
|
8
8
|
*
|
|
9
9
|
*/
|
|
10
|
-
import qwikRouterConfig from "@qwik-router-config";
|
|
11
10
|
import {
|
|
12
11
|
createQwikRouter,
|
|
13
12
|
type PlatformFirebase,
|
|
@@ -15,7 +14,7 @@ import {
|
|
|
15
14
|
import render from "./entry.ssr";
|
|
16
15
|
|
|
17
16
|
declare global {
|
|
18
|
-
|
|
17
|
+
type QwikRouterPlatform = PlatformFirebase;
|
|
19
18
|
}
|
|
20
19
|
|
|
21
|
-
export default createQwikRouter({ render
|
|
20
|
+
export default createQwikRouter({ render });
|
package/dist/starters/adapters/netlify-edge/adapters/netlify-edge/{vite.config.mts → vite.config.ts}
RENAMED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { netlifyEdgeAdapter } from "@qwik.dev/router/adapters/netlify-edge/vite";
|
|
2
2
|
import { extendConfig } from "@qwik.dev/router/vite";
|
|
3
|
-
import baseConfig from "../../vite.config.
|
|
3
|
+
import baseConfig from "../../vite.config.ts";
|
|
4
4
|
|
|
5
5
|
export default extendConfig(baseConfig, () => {
|
|
6
6
|
return {
|
|
7
7
|
build: {
|
|
8
8
|
ssr: true,
|
|
9
9
|
rollupOptions: {
|
|
10
|
-
input: ["src/entry.netlify-edge.tsx"
|
|
10
|
+
input: ["src/entry.netlify-edge.tsx"],
|
|
11
11
|
},
|
|
12
12
|
outDir: ".netlify/edge-functions/entry.netlify-edge",
|
|
13
13
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"description": "Netlify Edge Functions",
|
|
3
3
|
"scripts": {
|
|
4
|
-
"build.server": "vite build -c adapters/netlify-edge/vite.config.
|
|
4
|
+
"build.server": "qwik check-client src dist && vite build -c adapters/netlify-edge/vite.config.ts",
|
|
5
5
|
"deploy": "netlify deploy --build"
|
|
6
6
|
},
|
|
7
7
|
"devDependencies": {
|
|
@@ -25,5 +25,6 @@
|
|
|
25
25
|
"- pnpm run deploy: it will use the netlify CLI to deploy your site"
|
|
26
26
|
]
|
|
27
27
|
}
|
|
28
|
-
}
|
|
28
|
+
},
|
|
29
|
+
"type": "module"
|
|
29
30
|
}
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
* - https://qwik.dev/docs/deployments/netlify-edge/
|
|
8
8
|
*
|
|
9
9
|
*/
|
|
10
|
-
import qwikRouterConfig from "@qwik-router-config";
|
|
11
10
|
import {
|
|
12
11
|
createQwikRouter,
|
|
13
12
|
type PlatformNetlify,
|
|
@@ -15,7 +14,7 @@ import {
|
|
|
15
14
|
import render from "./entry.ssr";
|
|
16
15
|
|
|
17
16
|
declare global {
|
|
18
|
-
|
|
17
|
+
type QwikRouterPlatform = PlatformNetlify;
|
|
19
18
|
}
|
|
20
19
|
|
|
21
|
-
export default createQwikRouter({ render
|
|
20
|
+
export default createQwikRouter({ render });
|
package/dist/starters/adapters/node-server/adapters/node-server/{vite.config.mts → vite.config.ts}
RENAMED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { nodeServerAdapter } from "@qwik.dev/router/adapters/node-server/vite";
|
|
2
2
|
import { extendConfig } from "@qwik.dev/router/vite";
|
|
3
|
-
import baseConfig from "../../vite.config.
|
|
3
|
+
import baseConfig from "../../vite.config.ts";
|
|
4
4
|
|
|
5
5
|
export default extendConfig(baseConfig, () => {
|
|
6
6
|
return {
|
|
7
7
|
build: {
|
|
8
8
|
ssr: true,
|
|
9
9
|
rollupOptions: {
|
|
10
|
-
input: ["src/entry.node-server.tsx"
|
|
10
|
+
input: ["src/entry.node-server.tsx"],
|
|
11
11
|
},
|
|
12
12
|
},
|
|
13
13
|
plugins: [nodeServerAdapter({ name: "node-server" })],
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"description": "Vanilla Node server",
|
|
3
3
|
"scripts": {
|
|
4
|
-
"build.server": "vite build -c adapters/node-server/vite.config.
|
|
4
|
+
"build.server": "qwik check-client src dist && vite build -c adapters/node-server/vite.config.ts",
|
|
5
5
|
"serve": "node server/entry.node-server"
|
|
6
6
|
},
|
|
7
7
|
"__qwik__": {
|
|
@@ -19,5 +19,6 @@
|
|
|
19
19
|
"- pnpm run serve: runs the production server locally"
|
|
20
20
|
]
|
|
21
21
|
}
|
|
22
|
-
}
|
|
22
|
+
},
|
|
23
|
+
"type": "module"
|
|
23
24
|
}
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
* - https://qwik.dev/docs/deployments/node/
|
|
8
8
|
*
|
|
9
9
|
*/
|
|
10
|
-
import qwikRouterConfig from "@qwik-router-config";
|
|
11
10
|
import { createQwikRouter } from "@qwik.dev/router/middleware/node";
|
|
12
11
|
import { createServer } from "node:http";
|
|
13
12
|
import render from "./entry.ssr";
|
|
@@ -18,7 +17,6 @@ const PORT = process.env.PORT ?? 3004;
|
|
|
18
17
|
// Create the Qwik Router express middleware
|
|
19
18
|
const { router, notFound, staticFile } = createQwikRouter({
|
|
20
19
|
render,
|
|
21
|
-
qwikRouterConfig,
|
|
22
20
|
static: {
|
|
23
21
|
cacheControl: "public, max-age=31536000, immutable",
|
|
24
22
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ssgAdapter } from "@qwik.dev/router/adapters/ssg/vite";
|
|
2
2
|
import { extendConfig } from "@qwik.dev/router/vite";
|
|
3
|
-
import baseConfig from "../../vite.config.
|
|
3
|
+
import baseConfig from "../../vite.config.ts";
|
|
4
4
|
|
|
5
5
|
export default extendConfig(baseConfig, () => {
|
|
6
6
|
return {
|
|
@@ -11,7 +11,7 @@ export default extendConfig(baseConfig, () => {
|
|
|
11
11
|
},
|
|
12
12
|
},
|
|
13
13
|
plugins: [
|
|
14
|
-
|
|
14
|
+
ssgAdapter({
|
|
15
15
|
origin: "https://yoursite.qwik.dev",
|
|
16
16
|
}),
|
|
17
17
|
],
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Static Site Generator",
|
|
3
|
+
"scripts": {
|
|
4
|
+
"build.server": "qwik check-client src dist && vite build -c adapters/ssg/vite.config.ts"
|
|
5
|
+
},
|
|
6
|
+
"__qwik__": {
|
|
7
|
+
"priority": 10,
|
|
8
|
+
"displayName": "Adapter: Static Site Generation (.html files)",
|
|
9
|
+
"docs": [
|
|
10
|
+
"https://qwik.dev/docs/guides/static-site-generation/"
|
|
11
|
+
],
|
|
12
|
+
"nextSteps": {
|
|
13
|
+
"lines": [
|
|
14
|
+
"You have to change the 'origin' url under ssgAdapter",
|
|
15
|
+
"inside './adapters/ssg/vite.config.ts'"
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"type": "module"
|
|
20
|
+
}
|
|
@@ -4,12 +4,12 @@ This starter site is configured to deploy to [Vercel Edge Functions](https://ver
|
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
|
-
The adaptor will add a new `vite.config.
|
|
7
|
+
The adaptor will add a new `vite.config.ts` within the `adapters/` directory, and a new entry file will be created, such as:
|
|
8
8
|
|
|
9
9
|
```
|
|
10
10
|
└── adapters/
|
|
11
11
|
└── vercel-edge/
|
|
12
|
-
└── vite.config.
|
|
12
|
+
└── vite.config.ts
|
|
13
13
|
└── src/
|
|
14
14
|
└── entry.vercel-edge.tsx
|
|
15
15
|
```
|
package/dist/starters/adapters/vercel-edge/adapters/vercel-edge/{vite.config.mts → vite.config.ts}
RENAMED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { vercelEdgeAdapter } from "@qwik.dev/router/adapters/vercel-edge/vite";
|
|
2
2
|
import { extendConfig } from "@qwik.dev/router/vite";
|
|
3
|
-
import baseConfig from "../../vite.config.
|
|
3
|
+
import baseConfig from "../../vite.config.ts";
|
|
4
4
|
|
|
5
5
|
export default extendConfig(baseConfig, () => {
|
|
6
6
|
return {
|
|
7
7
|
build: {
|
|
8
8
|
ssr: true,
|
|
9
9
|
rollupOptions: {
|
|
10
|
-
input: ["src/entry.vercel-edge.tsx"
|
|
10
|
+
input: ["src/entry.vercel-edge.tsx"],
|
|
11
11
|
},
|
|
12
12
|
outDir: ".vercel/output/functions/_qwik-router.func",
|
|
13
13
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"description": "Vercel Edge Functions",
|
|
3
3
|
"scripts": {
|
|
4
|
-
"build.server": "vite build -c adapters/vercel-edge/vite.config.
|
|
4
|
+
"build.server": "qwik check-client src dist && vite build -c adapters/vercel-edge/vite.config.ts",
|
|
5
5
|
"deploy": "vercel deploy"
|
|
6
6
|
},
|
|
7
7
|
"devDependencies": {
|
|
@@ -24,5 +24,6 @@
|
|
|
24
24
|
"- pnpm run deploy: it will use the Vercel CLI to deploy your site"
|
|
25
25
|
]
|
|
26
26
|
}
|
|
27
|
-
}
|
|
27
|
+
},
|
|
28
|
+
"type": "module"
|
|
28
29
|
}
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
* - https://qwik.dev/docs/deployments/vercel-edge/
|
|
8
8
|
*
|
|
9
9
|
*/
|
|
10
|
-
import qwikRouterConfig from "@qwik-router-config";
|
|
11
10
|
import {
|
|
12
11
|
createQwikRouter,
|
|
13
12
|
type PlatformVercel,
|
|
@@ -15,7 +14,7 @@ import {
|
|
|
15
14
|
import render from "./entry.ssr";
|
|
16
15
|
|
|
17
16
|
declare global {
|
|
18
|
-
|
|
17
|
+
type QwikRouterPlatform = PlatformVercel;
|
|
19
18
|
}
|
|
20
19
|
|
|
21
|
-
export default createQwikRouter({ render
|
|
20
|
+
export default createQwikRouter({ render });
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Add compiled-i18n to your Qwik app",
|
|
3
|
+
"__qwik__": {
|
|
4
|
+
"displayName": "Integration: compiled-i18n (compile time translations)",
|
|
5
|
+
"priority": -10,
|
|
6
|
+
"viteConfig": {
|
|
7
|
+
"imports": [
|
|
8
|
+
{
|
|
9
|
+
"namedImports": [
|
|
10
|
+
"i18nPlugin"
|
|
11
|
+
],
|
|
12
|
+
"importPath": "compiled-i18n/vite"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"vitePlugins": [
|
|
16
|
+
"i18nPlugin({ locales: ['en'] })"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"docs": [
|
|
20
|
+
"https://qwik.dev/docs/integrations/i18n/#localize",
|
|
21
|
+
"https://github.com/wmertens/compiled-i18n/blob/main/Readme.md"
|
|
22
|
+
],
|
|
23
|
+
"nextSteps": {
|
|
24
|
+
"title": "Next Steps",
|
|
25
|
+
"lines": [
|
|
26
|
+
" - Change the `locales` array in the vite config to add more languages",
|
|
27
|
+
" - Use the `src/components/locale-selector/locale-selector.tsx` component to switch languages",
|
|
28
|
+
"",
|
|
29
|
+
" Check out the compiled-i18n docs:",
|
|
30
|
+
" - https://github.com/wmertens/compiled-i18n/blob/main/Readme.md"
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"compiled-i18n": "latest"
|
|
36
|
+
}
|
|
37
|
+
}
|
package/dist/starters/features/compiled-i18n/src/components/locale-selector/locale-selector.tsx
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { component$, getLocale } from "@builder.io/qwik";
|
|
2
|
+
import { _, locales } from "compiled-i18n";
|
|
3
|
+
|
|
4
|
+
export const LocaleSelector = component$(() => {
|
|
5
|
+
const currentLocale = getLocale();
|
|
6
|
+
return (
|
|
7
|
+
<>
|
|
8
|
+
{locales.map((locale) => {
|
|
9
|
+
const isCurrent = locale === currentLocale;
|
|
10
|
+
return (
|
|
11
|
+
// Note, you must use `<a>` and not `<Link>` so the page reloads
|
|
12
|
+
<a
|
|
13
|
+
key={locale}
|
|
14
|
+
// When using route-based locale selection, build the URL here
|
|
15
|
+
href={`?locale=${locale}`}
|
|
16
|
+
aria-disabled={isCurrent}
|
|
17
|
+
class={
|
|
18
|
+
"btn btn-ghost btn-sm" +
|
|
19
|
+
(isCurrent
|
|
20
|
+
? " bg-neutralContent text-neutral pointer-events-none"
|
|
21
|
+
: " bg-base-100 text-base-content")
|
|
22
|
+
}
|
|
23
|
+
>
|
|
24
|
+
{locale}
|
|
25
|
+
</a>
|
|
26
|
+
);
|
|
27
|
+
})}
|
|
28
|
+
</>
|
|
29
|
+
);
|
|
30
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WHAT IS THIS FILE?
|
|
3
|
+
*
|
|
4
|
+
* SSR renderer function, used by Qwik Router.
|
|
5
|
+
*
|
|
6
|
+
* Note that this is the only place the Qwik renderer is called.
|
|
7
|
+
* On the client, containers resume and do not call render.
|
|
8
|
+
*/
|
|
9
|
+
import { createRenderer } from "@qwik.dev/router";
|
|
10
|
+
import { extractBase, setSsrLocaleGetter } from "compiled-i18n/qwik";
|
|
11
|
+
import Root from "./root";
|
|
12
|
+
|
|
13
|
+
setSsrLocaleGetter();
|
|
14
|
+
|
|
15
|
+
export default createRenderer((opts) => {
|
|
16
|
+
return {
|
|
17
|
+
jsx: <Root />,
|
|
18
|
+
options: {
|
|
19
|
+
...opts,
|
|
20
|
+
|
|
21
|
+
// determine the base URL for the client code
|
|
22
|
+
base: extractBase,
|
|
23
|
+
|
|
24
|
+
// Use container attributes to set attributes on the html tag.
|
|
25
|
+
containerAttributes: {
|
|
26
|
+
lang: opts.serverData?.locale ?? "en-us",
|
|
27
|
+
...opts.containerAttributes,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// ... other imports
|
|
2
|
+
import { guessLocale } from "compiled-i18n";
|
|
3
|
+
import type { RequestHandler } from "@builder.io/qwik-city";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Handle incoming requests to determine and set the appropriate locale.
|
|
7
|
+
* This function checks for a 'locale' query parameter, then a `locale` cookie,
|
|
8
|
+
* and finally falls back to the 'Accept-Language' header.
|
|
9
|
+
*/
|
|
10
|
+
export const onRequest: RequestHandler = async ({
|
|
11
|
+
query,
|
|
12
|
+
cookie,
|
|
13
|
+
headers,
|
|
14
|
+
locale,
|
|
15
|
+
}) => {
|
|
16
|
+
// Allow overriding locale with query param `locale`
|
|
17
|
+
if (query.has("locale")) {
|
|
18
|
+
const newLocale = guessLocale(query.get("locale"));
|
|
19
|
+
cookie.delete("locale");
|
|
20
|
+
cookie.set("locale", newLocale, {});
|
|
21
|
+
locale(newLocale);
|
|
22
|
+
} else {
|
|
23
|
+
// Choose locale based on cookie or accept-language header
|
|
24
|
+
const maybeLocale =
|
|
25
|
+
cookie.get("locale")?.value || headers.get("accept-language");
|
|
26
|
+
locale(guessLocale(maybeLocale));
|
|
27
|
+
}
|
|
28
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>Qwik browser-only starter</title>
|
|
7
|
+
|
|
8
|
+
<script async type="module" src="@qwik.dev/core/qwikloader.js">
|
|
9
|
+
// ^ This is the QwikLoader, it's required for Qwik to work
|
|
10
|
+
</script>
|
|
11
|
+
</head>
|
|
12
|
+
<body>
|
|
13
|
+
<div id="root"></div>
|
|
14
|
+
|
|
15
|
+
<script type="module">
|
|
16
|
+
import { render, jsx } from "@qwik.dev/core";
|
|
17
|
+
import Root from "./src/root";
|
|
18
|
+
|
|
19
|
+
/** This renders your application */
|
|
20
|
+
render(document.querySelector("#root"), jsx(Root));
|
|
21
|
+
</script>
|
|
22
|
+
</body>
|
|
23
|
+
</html>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Use Qwik in browser-only mode",
|
|
3
|
+
"__qwik__": {
|
|
4
|
+
"displayName": "Integration: Qwik in browser-only mode",
|
|
5
|
+
"priority": -10,
|
|
6
|
+
"viteConfig": {},
|
|
7
|
+
"docs": [
|
|
8
|
+
"https://qwik.dev/docs/integrations/client-only/"
|
|
9
|
+
],
|
|
10
|
+
"nextSteps": {
|
|
11
|
+
"title": "Next Steps",
|
|
12
|
+
"lines": [
|
|
13
|
+
" - run `pnpm dev` to start the development server",
|
|
14
|
+
" - run `pnpm preview` to view a production build",
|
|
15
|
+
" - run `pnpm build` to build the application"
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@qwik.dev/core": "workspace:*"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"vite": "7.3.1"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"dev": "vite",
|
|
27
|
+
"build": "vite build"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This is the base config for vite.
|
|
3
|
+
* When building, the adapter config is used which loads this file and extends it.
|
|
4
|
+
*/
|
|
5
|
+
import { qwikVite } from "@qwik.dev/core/optimizer";
|
|
6
|
+
import { defineConfig, type UserConfig } from "vite";
|
|
7
|
+
import tsconfigPaths from "vite-tsconfig-paths";
|
|
8
|
+
|
|
9
|
+
export default defineConfig((): UserConfig => {
|
|
10
|
+
return {
|
|
11
|
+
plugins: [qwikVite({ csr: true }), tsconfigPaths({ root: "." })],
|
|
12
|
+
};
|
|
13
|
+
});
|
|
@@ -1,18 +1,60 @@
|
|
|
1
|
+
import { $, component$ } from "@builder.io/qwik";
|
|
2
|
+
import { QwikCityMockProvider } from "@builder.io/qwik-city";
|
|
3
|
+
|
|
1
4
|
import { ExampleTest } from "./example";
|
|
5
|
+
import { useExampleLoader } from "../../loaders/example.loader";
|
|
6
|
+
import { useExampleAction } from "../../actions/example.action";
|
|
7
|
+
|
|
8
|
+
const Template = component$((props: { flag: boolean }) => {
|
|
9
|
+
const loadersMock = [
|
|
10
|
+
{
|
|
11
|
+
loader: useExampleLoader,
|
|
12
|
+
data: "Loader Data",
|
|
13
|
+
},
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
const actionStub = $(() => cy.stub().as("actionStub"))();
|
|
17
|
+
const actionsMock = [
|
|
18
|
+
{
|
|
19
|
+
action: useExampleAction,
|
|
20
|
+
handler: $(async () => {
|
|
21
|
+
await actionStub.then((_) => _());
|
|
22
|
+
return { status: 200, result: "Action Data" };
|
|
23
|
+
}),
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<QwikCityMockProvider loaders={loadersMock} actions={actionsMock}>
|
|
29
|
+
<ExampleTest flag={props.flag} />
|
|
30
|
+
</QwikCityMockProvider>
|
|
31
|
+
);
|
|
32
|
+
});
|
|
2
33
|
|
|
3
34
|
it("should render ⭐", () => {
|
|
4
|
-
cy.mount(<
|
|
5
|
-
cy.get("
|
|
35
|
+
cy.mount(<Template flag={true} />);
|
|
36
|
+
cy.get("#icon").should("contain.text", "⭐");
|
|
6
37
|
});
|
|
7
38
|
|
|
8
39
|
it("should render 💣", () => {
|
|
9
|
-
cy.mount(<
|
|
10
|
-
cy.get("
|
|
40
|
+
cy.mount(<Template flag={false} />);
|
|
41
|
+
cy.get("#icon").should("contain.text", "💣");
|
|
11
42
|
});
|
|
12
43
|
|
|
13
44
|
it("should count clicks", () => {
|
|
14
|
-
cy.mount(<
|
|
15
|
-
cy.get("
|
|
16
|
-
cy.get("
|
|
17
|
-
cy.get("
|
|
45
|
+
cy.mount(<Template flag={true} />);
|
|
46
|
+
cy.get("#count").should("contain.text", "Count:0");
|
|
47
|
+
cy.get("#btn-counter").click();
|
|
48
|
+
cy.get("#count").should("contain.text", "Count:1");
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("should render loader data", () => {
|
|
52
|
+
cy.mount(<Template flag={true} />);
|
|
53
|
+
cy.get("#loader-data").should("contain.text", "Loader Data");
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("should call action on button click", () => {
|
|
57
|
+
cy.mount(<Template flag={true} />);
|
|
58
|
+
cy.get("#btn-action").click();
|
|
59
|
+
cy.get("@actionStub").should("have.been.called");
|
|
18
60
|
});
|
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
import { component$, useStore } from "@qwik.dev/core";
|
|
2
2
|
|
|
3
|
+
import { useExampleLoader } from "../../loaders/example.loader";
|
|
4
|
+
import { useExampleAction } from "../../actions/example.action";
|
|
5
|
+
|
|
3
6
|
export const ExampleTest = component$((props: { flag: boolean }) => {
|
|
4
7
|
const state = useStore({
|
|
5
8
|
counter: 0,
|
|
6
9
|
});
|
|
7
10
|
|
|
11
|
+
const loaderState = useExampleLoader();
|
|
12
|
+
const action = useExampleAction();
|
|
13
|
+
|
|
8
14
|
return (
|
|
9
15
|
<>
|
|
10
|
-
<span>Count:{state.counter}</span>
|
|
11
|
-
<div
|
|
12
|
-
<button
|
|
16
|
+
<span id="count">Count:{state.counter}</span>
|
|
17
|
+
<div id="icon">Flag: {props.flag ? "⭐" : "💣"}</div>
|
|
18
|
+
<button id="btn-counter" onClick$={() => state.counter++}>
|
|
13
19
|
Increment counter
|
|
14
20
|
</button>
|
|
21
|
+
<span id="loader-data">{loaderState.value}</span>
|
|
22
|
+
<button id="btn-action" onClick$={() => action.submit()}>
|
|
23
|
+
Call action
|
|
24
|
+
</button>
|
|
15
25
|
</>
|
|
16
26
|
);
|
|
17
27
|
});
|