diff --git a/.changeset/every-suns-flow.md b/.changeset/every-suns-flow.md new file mode 100644 index 00000000..3d6a68c6 --- /dev/null +++ b/.changeset/every-suns-flow.md @@ -0,0 +1,5 @@ +--- +"@qwik.dev/astro": patch +--- + +Simplifies internals diff --git a/apps/website/src/content/docs/contributing.mdx b/apps/website/src/content/docs/contributing.mdx index 5b096c46..5f59b65c 100644 --- a/apps/website/src/content/docs/contributing.mdx +++ b/apps/website/src/content/docs/contributing.mdx @@ -62,7 +62,7 @@ There are two major files to be aware of: `index.ts` and `server.ts`. ## index.ts -The integration entrypoint, built with `astro-integration-kit`'s `defineIntegration`. It registers Qwik as an Astro renderer and configures the Vite plugins. +The integration entrypoint. It registers Qwik as an Astro renderer and configures the Vite plugins. ### Astro hooks diff --git a/libs/qwikdev-astro/package.json b/libs/qwikdev-astro/package.json index 409a1a1d..0aada19e 100644 --- a/libs/qwikdev-astro/package.json +++ b/libs/qwikdev-astro/package.json @@ -55,15 +55,11 @@ }, "homepage": "https://qwik.dev/astro", "bugs": "https://github.com/QwikDev/astro/issues", - "dependencies": { - "astro-integration-kit": "^0.20.0" - }, "devDependencies": { - "@qwik.dev/core": "2.0.0-beta.30", - "astro": "6.0.6", "vite": "^7.3.1" }, "peerDependencies": { - "@qwik.dev/core": ">=2.0.0-beta.30 <3.0.0" + "@qwik.dev/core": ">=2.0.0-beta.30 <3.0.0", + "astro": "^6.0.0" } } diff --git a/libs/qwikdev-astro/src/constants.ts b/libs/qwikdev-astro/src/constants.ts index 36a051fa..e9018ad6 100644 --- a/libs/qwikdev-astro/src/constants.ts +++ b/libs/qwikdev-astro/src/constants.ts @@ -1,6 +1,3 @@ -import type { RenderOptions } from "@qwik.dev/core/server"; -import { z } from "astro/zod"; - export const INTEGRATION_NAME = "@qwik.dev/astro"; export const SERVER_ENTRYPOINT = "@qwik.dev/astro/server"; @@ -18,33 +15,3 @@ export const SCAN_EXTENSIONS = ["*.tsx", "*.jsx", "*.ts", "*.js"] as const; export const QWIK_ENTRYPOINT_PATTERN = /@builder\.io\/qwik|qwik\.dev\/core|qwik\.dev\/react|\.qwik\./; - -export const FilterPatternSchema = z.union([ - z.string(), - z.instanceof(RegExp), - z.array(z.union([z.string(), z.instanceof(RegExp)])).readonly(), - z.null() -]); - -export const optionsSchema = z - .object({ - /** Tell Qwik which files to process. */ - include: FilterPatternSchema.optional(), - - /** Tell Qwik which files to ignore. */ - exclude: FilterPatternSchema.optional(), - - /** Enable debug mode with the qwikVite plugin. */ - debug: z.boolean().optional(), - - /** Options passed into each Qwik component's `renderToStream` call. */ - renderOpts: z - .custom((data) => { - return typeof data === "object" && data !== null; - }) - .optional(), - - /** Enable SPA-style navigation support with Astro's ClientRouter. */ - clientRouter: z.boolean().optional() - }) - .optional(); diff --git a/libs/qwikdev-astro/src/index.ts b/libs/qwikdev-astro/src/index.ts index ec5b8121..946ab579 100644 --- a/libs/qwikdev-astro/src/index.ts +++ b/libs/qwikdev-astro/src/index.ts @@ -1,17 +1,14 @@ -import { dirname } from "node:path"; -import { fileURLToPath } from "node:url"; +import type { RenderOptions } from "@qwik.dev/core"; import { qwikVite } from "@qwik.dev/core/optimizer"; import type { QwikManifest, QwikVitePluginOptions } from "@qwik.dev/core/optimizer"; import type { AstroConfig, AstroIntegration } from "astro"; -import { defineIntegration, watchDirectory } from "astro-integration-kit"; -import type { Plugin } from "vite"; +import type { FilterPattern, Plugin } from "vite"; import { type ViteBuilder, createFilter } from "vite"; import { INTEGRATION_NAME, ROOT_ENTRYPOINT, SERVER_ENTRYPOINT, VIRTUAL_MODULE_NAME, - optionsSchema } from "./constants"; import { createAstroQwikPostPlugin, @@ -80,34 +77,41 @@ export const clientRouter = ${JSON.stringify(clientRouter)};`; }; } -/** - * This project uses Astro Integration Kit. - * @see https://astro-integration-kit.netlify.app/ - */ -export default defineIntegration({ - name: INTEGRATION_NAME, - optionsSchema, +type Options = { + /** Tell Qwik which files to process. */ + include?: FilterPattern + + /** Tell Qwik which files to ignore. */ + exclude?: FilterPattern + + /** Enable debug mode with the qwikVite plugin. */ + debug?: boolean + + /** Options passed into each Qwik component's `renderToStream` call. */ + renderOpts?: RenderOptions + + /** Enable SPA-style navigation support with Astro's ClientRouter. */ + clientRouter?: boolean +} - setup({ options }) { - let srcDir = ""; - let serverDir = ""; - let finalDir = ""; +export default function qwik(options?: Options): AstroIntegration { + let srcDir = ""; + let serverDir = ""; + let finalDir = ""; - let qwikManifest: QwikManifest | null = null; + let qwikManifest: QwikManifest | null = null; - let astroConfig: AstroConfig | null = null; - const packageDir = dirname(fileURLToPath(import.meta.url)); - const filter = createFilter(options?.include, options?.exclude); + let astroConfig: AstroConfig | null = null; + const filter = createFilter(options?.include, options?.exclude); - const lifecycleHooks: AstroIntegration["hooks"] = { + return { + name: INTEGRATION_NAME, + hooks: { "astro:config:setup": async (setupProps) => { const { addRenderer, updateConfig, config, command } = setupProps; astroConfig = config; const isDev = command === "dev"; - // integration HMR support - watchDirectory(setupProps, packageDir); - addRenderer({ name: INTEGRATION_NAME, serverEntrypoint: SERVER_ENTRYPOINT @@ -199,11 +203,6 @@ export default defineIntegration({ await originalBuildApp(b); }; } - }; - - return { - name: INTEGRATION_NAME, - hooks: lifecycleHooks - }; - } -}); + } + }; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 421ead17..6a56b686 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -208,16 +208,13 @@ importers: libs/qwikdev-astro: dependencies: - astro-integration-kit: - specifier: ^0.20.0 - version: 0.20.0(astro@6.0.6(@netlify/blobs@10.7.4)(@types/node@25.5.0)(@vercel/functions@3.4.3)(jiti@2.6.1)(rollup@4.60.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) - devDependencies: '@qwik.dev/core': - specifier: 2.0.0-beta.30 + specifier: '>=2.0.0-beta.30 <3.0.0' version: 2.0.0-beta.30(prettier@3.8.1)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@22.19.15)(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))) astro: - specifier: 6.0.6 + specifier: ^6.0.0 version: 6.0.6(@netlify/blobs@10.7.4)(@types/node@25.5.0)(@vercel/functions@3.4.3)(jiti@2.6.1)(rollup@4.60.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + devDependencies: vite: specifier: ^7.3.1 version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) @@ -2573,11 +2570,6 @@ packages: astro-icon@1.1.5: resolution: {integrity: sha512-CJYS5nWOw9jz4RpGWmzNQY7D0y2ZZacH7atL2K9DeJXJVaz7/5WrxeyIxO8KASk1jCM96Q4LjRx/F3R+InjJrw==} - astro-integration-kit@0.20.0: - resolution: {integrity: sha512-VQQs7hS9M3XrJtxSLHVDhvHzgqwZuhot3sMoYImBJSvL7fMnleSVgkZhoEeRJd1+Qh96eb469nRnn5mdjIJJMQ==} - peerDependencies: - astro: ^4.14.0 || ^5.0.0 || ^6.0.0 - astro@6.0.6: resolution: {integrity: sha512-Fg25tok0RF+ToCcfdfNdtkv7MutTfbE0Lc4UhZpQyoc8/iiTdAaNw1nHPxPD6Nfa/ql3lGAp9uOWaTTnnFY2Zg==} engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'} @@ -8282,7 +8274,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 25.5.0 + '@types/node': 24.12.0 optional: true '@typescript-eslint/project-service@8.57.2(typescript@5.9.3)': @@ -8667,11 +8659,6 @@ snapshots: transitivePeerDependencies: - supports-color - astro-integration-kit@0.20.0(astro@6.0.6(@netlify/blobs@10.7.4)(@types/node@25.5.0)(@vercel/functions@3.4.3)(jiti@2.6.1)(rollup@4.60.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)): - dependencies: - astro: 6.0.6(@netlify/blobs@10.7.4)(@types/node@25.5.0)(@vercel/functions@3.4.3)(jiti@2.6.1)(rollup@4.60.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) - pathe: 2.0.3 - astro@6.0.6(@netlify/blobs@10.7.4)(@types/node@22.19.15)(@vercel/functions@3.4.3)(jiti@2.6.1)(rollup@4.60.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3): dependencies: '@astrojs/compiler': 3.0.1