diff --git a/packages/analytics/README.md b/packages/analytics/README.md index 3dcf50c0..f3c7b953 100644 --- a/packages/analytics/README.md +++ b/packages/analytics/README.md @@ -73,7 +73,7 @@ Report analytics events from your web extension extension. 4. Then use your `analytics` instance to report events: ```ts - import { analytics } from '#analytics'; + import { analytics } from './utils/analytics'; await analytics.track('some-event'); await analytics.page(); diff --git a/packages/analytics/build.config.ts b/packages/analytics/build.config.ts index 2b3fa224..7aecfeb1 100644 --- a/packages/analytics/build.config.ts +++ b/packages/analytics/build.config.ts @@ -8,14 +8,14 @@ export default defineBuildConfig({ entries: [ { input: 'index.ts', name: 'module' }, { input: 'client.ts', name: 'index' }, - { input: 'plugin.ts', name: 'wxt-plugin' }, + 'background-plugin.ts', 'types.ts', 'providers/google-analytics-4.ts', 'providers/umami.ts', ], externals: ['#analytics'], replace: { - 'ipmort.meta.env.NPM': 'true', + 'import.meta.env.NPM': 'true', }, declaration: true, }); diff --git a/packages/analytics/modules/analytics/plugin.ts b/packages/analytics/modules/analytics/background-plugin.ts similarity index 100% rename from packages/analytics/modules/analytics/plugin.ts rename to packages/analytics/modules/analytics/background-plugin.ts diff --git a/packages/analytics/modules/analytics/index.ts b/packages/analytics/modules/analytics/index.ts index 2d8fd892..4291c219 100644 --- a/packages/analytics/modules/analytics/index.ts +++ b/packages/analytics/modules/analytics/index.ts @@ -1,7 +1,7 @@ import 'wxt'; import 'wxt/sandbox'; import { addAlias, addWxtPlugin, defineWxtModule } from 'wxt/modules'; -import { resolve } from 'node:path'; +import { relative, resolve } from 'node:path'; import type { AnalyticsConfig } from './types'; declare module 'wxt/sandbox' { @@ -14,6 +14,16 @@ export default defineWxtModule({ name: 'analytics', imports: [{ name: 'analytics', from: '#analytics' }], setup(wxt) { + // Paths + const wxtAnalyticsFolder = resolve(wxt.config.wxtDir, 'analytics'); + const wxtAnalyticsIndex = resolve(wxtAnalyticsFolder, 'index.ts'); + const clientModuleId = import.meta.env.NPM + ? '@wxt-dev/analytics' + : resolve(wxt.config.modulesDir, 'analytics/client'); + const pluginModuleId = import.meta.env.NPM + ? '@wxt-dev/analytics/background-plugin' + : resolve(wxt.config.modulesDir, 'analytics/background-plugin'); + // Add required permissions wxt.hook('build:manifestGenerated', (_, manifest) => { manifest.permissions ??= []; @@ -23,23 +33,27 @@ export default defineWxtModule({ }); // Generate #analytics module - const analyticsModulePath = resolve( - wxt.config.wxtDir, - 'analytics/index.ts', - ); - const analyticsModuleCode = `import { createAnalytics } from '@wxt-dev/analytics'; -import { useAppConfig } from 'wxt/client'; - -export const analytics = createAnalytics(useAppConfig().analytics); -`; - addAlias(wxt, '#analytics', analyticsModulePath); + const wxtAnalyticsCode = [ + `import { createAnalytics } from '${ + import.meta.env.NPM + ? clientModuleId + : relative(wxtAnalyticsFolder, clientModuleId) + }';`, + `import { useAppConfig } from 'wxt/client';`, + ``, + `export const analytics = createAnalytics(useAppConfig().analytics);`, + ``, + ].join('\n'); + addAlias(wxt, '#analytics', wxtAnalyticsIndex); wxt.hook('prepare:types', async (_, entries) => { entries.push({ - path: analyticsModulePath, - text: analyticsModuleCode, + path: wxtAnalyticsIndex, + text: wxtAnalyticsCode, }); }); - addWxtPlugin(wxt, '@wxt-dev/analytics/wxt-plugin'); + // Ensure analytics is initialized in every context, mainly the background. + // TODO: Once there's a way to filter which entrypoints a plugin is applied to, only apply this to the background + addWxtPlugin(wxt, pluginModuleId); }, }); diff --git a/packages/analytics/package.json b/packages/analytics/package.json index 15572391..f0b8ca9b 100644 --- a/packages/analytics/package.json +++ b/packages/analytics/package.json @@ -18,6 +18,10 @@ "types": "./dist/module.d.mts", "default": "./dist/module.mjs" }, + "./plugin": { + "types": "./dist/plugin.d.mts", + "default": "./dist/plugin.mjs" + }, "./types": { "types": "./dist/types.d.mts" },