diff --git a/packages/unplugin-analytics/build.config.ts b/packages/unplugin-analytics/build.config.ts index c9b3bcb..2059cb7 100644 --- a/packages/unplugin-analytics/build.config.ts +++ b/packages/unplugin-analytics/build.config.ts @@ -1,12 +1,10 @@ -import { defineBuildConfig } from 'unbuild' +import { defineBuildConfig } from 'unbuild'; export default defineBuildConfig({ - entries: [ - 'src/index', - ], + entries: ['src/index', 'src/vite', 'src/nuxt'], declaration: true, clean: true, rollup: { - emitCJS: true, - }, -}); \ No newline at end of file + emitCJS: true + } +}); diff --git a/packages/unplugin-analytics/package.json b/packages/unplugin-analytics/package.json index a4c92fb..f21dbcc 100644 --- a/packages/unplugin-analytics/package.json +++ b/packages/unplugin-analytics/package.json @@ -28,6 +28,16 @@ "require": "./dist/index.cjs", "import": "./dist/index.mjs", "types": "./dist/index.d.ts" + }, + "./vite": { + "types": "./dist/vite.d.ts", + "import": "./dist/vite.mjs", + "require": "./dist/vite.cjs" + }, + "./nuxt": { + "types": "./dist/nuxt.d.ts", + "import": "./dist/nuxt.mjs", + "require": "./dist/nuxt.cjs" } }, "main": "dist/index.cjs", @@ -45,6 +55,7 @@ }, "dependencies": { "@unplugin-analytics/core": "workspace:*", + "scule": "^1.3.0", "unplugin": "^1.7.1" }, "peerDependencies": { diff --git a/packages/unplugin-analytics/src/index.ts b/packages/unplugin-analytics/src/index.ts index 5cb4f54..1110b64 100644 --- a/packages/unplugin-analytics/src/index.ts +++ b/packages/unplugin-analytics/src/index.ts @@ -1,3 +1 @@ -export function hello() { - return 'world'; -} \ No newline at end of file +export * from './plugin'; diff --git a/packages/unplugin-analytics/src/nuxt.ts b/packages/unplugin-analytics/src/nuxt.ts new file mode 100644 index 0000000..06f3f90 --- /dev/null +++ b/packages/unplugin-analytics/src/nuxt.ts @@ -0,0 +1,47 @@ +import type { NuxtModule } from '@nuxt/schema'; + +import { defineNuxtModule } from '@nuxt/kit'; + +import { UnpluginAnalytics, type Options } from './plugin'; + +const nuxtModule = defineNuxtModule({ + meta: { + // Usually the npm package name of your module + name: 'unplugin-analytics/nuxt', + // The key in `nuxt.config` that holds your module options + configKey: 'analytics', + // Compatibility constraints + compatibility: { + // Semver version of supported nuxt versions + nuxt: '^3.0.0' + } + }, + // Default configuration options for your module, can also be a function returning those + defaults: {}, + // Shorthand sugar to register Nuxt hooks + hooks: {}, + setup(options: Options = {}, nuxt) { + // // install webpack plugin + // nuxt.hook('webpack:config', async (config: any) => { + // config.plugins = config.plugins || []; + // config.plugins.unshift(UnpluginAnalytics.webpack(options)); + // }); + // // install vite plugin + // nuxt.hook('vite:extendConfig', async (config: any) => { + // config.plugins = config.plugins || []; + // config.plugins.push(UnpluginAnalytics.vite(options)); + // }); + } +}) as NuxtModule; + +export default nuxtModule; + +declare module '@nuxt/schema' { + interface NuxtConfig { + analytics?: Options; + } + + interface NuxtOptions { + analytics?: Options; + } +} diff --git a/packages/unplugin-analytics/src/plugin/index.ts b/packages/unplugin-analytics/src/plugin/index.ts new file mode 100644 index 0000000..e4e4898 --- /dev/null +++ b/packages/unplugin-analytics/src/plugin/index.ts @@ -0,0 +1,30 @@ +import { createUnplugin } from 'unplugin'; + +import { type AnalyticsOptions, generate } from '@unplugin-analytics/core'; + +import { renderScriptTag } from '../../../vite-plugin-analytics/src/render'; + +export interface Options { + /** + * Whether inject scripts during development + */ + dev?: boolean; + + analytics?: AnalyticsOptions; +} + +export const UnpluginAnalytics = createUnplugin((options = {}) => { + const tags = generate(options.analytics ?? []); + + return { + name: 'unplugin-analytics', + vite: { + transformIndexHtml(_html, ctx) { + if (options.dev && ctx.server) { + return; + } + return tags.map(renderScriptTag).filter(Boolean); + } + } + }; +}); diff --git a/packages/unplugin-analytics/src/vite.ts b/packages/unplugin-analytics/src/vite.ts new file mode 100644 index 0000000..2575123 --- /dev/null +++ b/packages/unplugin-analytics/src/vite.ts @@ -0,0 +1,3 @@ +import { UnpluginAnalytics } from './plugin'; + +export default UnpluginAnalytics.vite; diff --git a/packages/vite-plugin-analytics/src/index.ts b/packages/vite-plugin-analytics/src/index.ts index fe123fc..c4286c7 100644 --- a/packages/vite-plugin-analytics/src/index.ts +++ b/packages/vite-plugin-analytics/src/index.ts @@ -4,7 +4,7 @@ import { type AnalyticsOptions, generate } from '@unplugin-analytics/core'; import { renderScriptTag } from './render'; -export interface Options { +interface Options { /** * Whether inject scripts during development */ @@ -27,7 +27,7 @@ export default function Analytics(options: Options = {}): Plugin { if (options.dev && config.command === 'serve') { return; } - return tags.map(renderScriptTag); + return tags.map(renderScriptTag).filter(Boolean); } }; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db573dc..6c5b719 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -79,6 +79,9 @@ importers: rollup: specifier: ^2 || ^3 || ^4 version: 4.12.0 + scule: + specifier: ^1.3.0 + version: 1.3.0 unplugin: specifier: ^1.7.1 version: 1.7.1