Skip to content

Commit d015261

Browse files
authored
fix(analytics): setup analytics worker (#162)
1 parent 712952a commit d015261

File tree

3 files changed

+29
-18
lines changed

3 files changed

+29
-18
lines changed

src/features.ts

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { $fetch } from 'ofetch'
88
import { addDevtoolsCustomTabs } from './utils/devtools'
99

1010
const log = logger.withTag('nuxt:hub')
11+
const { resolve } = createResolver(import.meta.url)
1112

1213
export interface HubConfig {
1314
remote: string | boolean
@@ -34,8 +35,6 @@ export interface HubConfig {
3435
}
3536

3637
export function setupBase(nuxt: Nuxt, hub: HubConfig) {
37-
const { resolve } = createResolver(import.meta.url)
38-
3938
// Add Server scanning
4039
addServerScanDir(resolve('./runtime/base/server'))
4140
addServerImportsDir(resolve('./runtime/base/server/utils'))
@@ -46,9 +45,13 @@ export function setupBase(nuxt: Nuxt, hub: HubConfig) {
4645
}
4746
}
4847

49-
export function setupBlob(_nuxt: Nuxt) {
50-
const { resolve } = createResolver(import.meta.url)
48+
export function setupAnalytics(_nuxt: Nuxt) {
49+
// Add Server scanning
50+
addServerScanDir(resolve('./runtime/analytics/server'))
51+
addServerImportsDir(resolve('./runtime/analytics/server/utils'))
52+
}
5153

54+
export function setupBlob(_nuxt: Nuxt) {
5255
// Add Server scanning
5356
addServerScanDir(resolve('./runtime/blob/server'))
5457
addServerImportsDir(resolve('./runtime/blob/server/utils'))
@@ -58,8 +61,6 @@ export function setupBlob(_nuxt: Nuxt) {
5861
}
5962

6063
export function setupCache(nuxt: Nuxt) {
61-
const { resolve } = createResolver(import.meta.url)
62-
6364
// Add Server caching (Nitro)
6465
nuxt.options.nitro = defu(nuxt.options.nitro, {
6566
storage: {
@@ -82,24 +83,18 @@ export function setupCache(nuxt: Nuxt) {
8283
}
8384

8485
export function setupDatabase(_nuxt: Nuxt) {
85-
const { resolve } = createResolver(import.meta.url)
86-
8786
// Add Server scanning
8887
addServerScanDir(resolve('./runtime/database/server'))
8988
addServerImportsDir(resolve('./runtime/database/server/utils'))
9089
}
9190

9291
export function setupKV(_nuxt: Nuxt) {
93-
const { resolve } = createResolver(import.meta.url)
94-
9592
// Add Server scanning
9693
addServerScanDir(resolve('./runtime/kv/server'))
9794
addServerImportsDir(resolve('./runtime/kv/server/utils'))
9895
}
9996

10097
export function setupOpenAPI(nuxt: Nuxt) {
101-
const { resolve } = createResolver(import.meta.url)
102-
10398
// Fallback to custom placeholder when openAPI is disabled
10499
nuxt.options.alias['#hub/openapi'] = nuxt.options.nitro?.experimental?.openAPI === true
105100
? '#internal/nitro/routes/openapi'

src/module.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { findWorkspaceDir } from 'pkg-types'
77
import { parseArgs } from 'citty'
88
import { version } from '../package.json'
99
import { generateWrangler } from './utils/wrangler'
10-
import { setupCache, setupBlob, setupOpenAPI, setupDatabase, setupKV, setupBase, setupRemote } from './features'
10+
import { setupCache, setupAnalytics, setupBlob, setupOpenAPI, setupDatabase, setupKV, setupBase, setupRemote } from './features'
1111
import type { ModuleOptions } from './types/module'
1212

1313
export * from './types'
@@ -74,6 +74,7 @@ export default defineNuxtModule<ModuleOptions>({
7474

7575
setupBase(nuxt, hub)
7676
setupOpenAPI(nuxt)
77+
hub.analytics && setupAnalytics(nuxt)
7778
hub.blob && setupBlob(nuxt)
7879
hub.cache && setupCache(nuxt)
7980
hub.database && setupDatabase(nuxt)
@@ -91,6 +92,7 @@ export default defineNuxtModule<ModuleOptions>({
9192

9293
// Folowing lines are only executed when remove storage is disabled
9394

95+
// Production mode without remote storage
9496
if (!nuxt.options.dev) {
9597
// Make sure to fallback to cloudflare-pages preset
9698
let preset = nuxt.options.nitro.preset = nuxt.options.nitro.preset || 'cloudflare-pages'

src/runtime/analytics/server/utils/analytics.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,38 @@ import { useRuntimeConfig } from '#imports'
77

88
const _datasets: Record<string, AnalyticsEngineDataset> = {}
99

10-
function getAnalyticsBinding(name: string = 'ANALYTICS') {
10+
function getAnalyticsBinding(name: string = 'ANALYTICS'): AnalyticsEngineDataset | undefined {
1111
// @ts-expect-error globalThis.__env__ is injected by the runtime
1212
return process.env[name] || globalThis.__env__?.[name] || globalThis[name]
1313
}
1414

15-
function _useDataset(name: string = 'ANALYTICS') {
15+
function _useDataset(name: string = 'ANALYTICS'): AnalyticsEngineDataset {
1616
if (_datasets[name]) {
17-
return _datasets[name]
17+
return _datasets[name] as AnalyticsEngineDataset
1818
}
1919

2020
const binding = getAnalyticsBinding()
2121
if (binding) {
22-
_datasets[name] = binding as AnalyticsEngineDataset
23-
return _datasets[name]
22+
_datasets[name] = binding
23+
return _datasets[name] as AnalyticsEngineDataset
2424
}
2525
throw createError(`Missing Cloudflare ${name} binding (Analytics Engine)`)
2626
}
2727

28+
/**
29+
* Access the Workers Analytics Engine
30+
*
31+
* @example ```ts
32+
* const analytics = useAnalytics()
33+
* await analytics.put({
34+
* blobs: ['Seattle', 'USA', 'pro_sensor_9000'],
35+
* doubles: [1.1, 2.2, 3.3],
36+
* indexes: ['a3cd45']
37+
* })
38+
* ```
39+
*
40+
* @see https://developers.cloudflare.com/analytics/analytics-engine/get-started/
41+
*/
2842
export function hubAnalytics() {
2943
requireNuxtHubFeature('analytics')
3044

0 commit comments

Comments
 (0)