This commit is contained in:
Aaron
2024-12-29 20:16:13 -06:00
parent b34754b363
commit fdee7c615c
5 changed files with 35 additions and 17 deletions
+1 -1
View File
@@ -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();
+2 -2
View File
@@ -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,
});
+28 -14
View File
@@ -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);
},
});
+4
View File
@@ -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"
},