Skip to content

Commit d20f173

Browse files
committed
fix: fix runtime module version resolution
Signed-off-by: Frederik Bußmann <frederik@bussmann.io>
1 parent 860dc55 commit d20f173

5 files changed

Lines changed: 47 additions & 13 deletions

File tree

build.config.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
import { stat, writeFile } from 'node:fs/promises'
2+
import { resolve } from 'node:path'
13
import { defineBuildConfig } from 'unbuild'
24

5+
import { version } from './package.json'
6+
37
export default defineBuildConfig({
48
declaration: true,
59

@@ -17,4 +21,20 @@ export default defineBuildConfig({
1721
externals: [
1822
'@shopify/hydrogen',
1923
],
24+
25+
hooks: {
26+
'build:done': async (ctx) => {
27+
if (ctx.options.stub) return
28+
29+
const file = resolve(ctx.options.outDir, 'runtime/utils/version.js')
30+
31+
const exists = await stat(file).then(() => true).catch(() => false)
32+
33+
if (!exists) return
34+
35+
const content = `export const MODULE_VERSION = ${JSON.stringify(version)};\n`
36+
37+
await writeFile(file, content, 'utf8')
38+
},
39+
},
2040
})

src/cli.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import { defineCommand, runMain } from 'citty'
44

5+
import { MODULE_VERSION } from './runtime/utils/version'
6+
57
const main = defineCommand({
68
meta: {
79
name: 'Nuxt Shopify',
8-
version: '1.0.0',
10+
version: MODULE_VERSION,
911
description: 'Nuxt Shopify CLI',
1012
},
1113

src/runtime/utils/analytics/subscriber.ts

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import type { ShopifyAnalytics, ShopifyAnalyticsProduct } from '@shopify/hydrogen-react'
1+
import type {
2+
ShopifyAddToCartPayload,
3+
ShopifyAnalytics,
4+
ShopifyAnalyticsProduct,
5+
ShopifyPageViewPayload,
6+
} from '@shopify/hydrogen-react'
27
import type {
38
AnalyticsConsentFlags,
49
AnalyticsEmitter,
@@ -17,7 +22,11 @@ import {
1722

1823
import { createLogger } from '../log'
1924
import { persistTrackingTokens } from './cookies'
20-
import { version } from '../../../../package.json'
25+
import { MODULE_VERSION } from '../version'
26+
27+
type PrivacyFields = { ccpaEnforced?: boolean, gdprEnforced?: boolean }
28+
29+
type AnalyticsPayload = (ShopifyPageViewPayload | ShopifyAddToCartPayload) & PrivacyFields
2130

2231
const MAX_QUEUED_EVENTS = 20
2332

@@ -96,12 +105,12 @@ function lineToProduct(line: ShopifyAnalyticsCartLine): AnalyticsProductInput {
96105
}
97106
}
98107

99-
function send(eventName: string, payload: Record<string, unknown>, domain?: string) {
108+
function send(eventName: string, payload: AnalyticsPayload, domain?: string) {
100109
const logger = createLogger()
101110

102111
logger.debug(`Sending analytics event \`${eventName}\``)
103112

104-
sendShopifyAnalytics({ eventName, payload } as unknown as ShopifyAnalytics, domain)
113+
sendShopifyAnalytics({ eventName, payload } as ShopifyAnalytics, domain)
105114
.catch(error => logger.debug(`Failed to send analytics event \`${eventName}\`:`, error))
106115
}
107116

@@ -115,7 +124,7 @@ export function createShopifySubscriber(emitter: AnalyticsEmitter, options: {
115124
}) {
116125
const { shop, domain, cookieDomain, canTrack, getConsent, whenReady } = options
117126

118-
const basePayload = (): Record<string, unknown> | null => {
127+
const basePayload = (): (ShopifyPageViewPayload & PrivacyFields) | null => {
119128
const resolved = shop()
120129

121130
if (!validateShop(resolved)) return null
@@ -124,10 +133,10 @@ export function createShopifySubscriber(emitter: AnalyticsEmitter, options: {
124133

125134
return {
126135
shopifySalesChannel: ShopifySalesChannel.headless,
127-
assetVersionId: version,
136+
assetVersionId: MODULE_VERSION,
128137
shopId: resolved.shopId,
129-
currency: resolved.currency,
130-
acceptedLanguage: resolved.acceptedLanguage,
138+
currency: resolved.currency as ShopifyPageViewPayload['currency'],
139+
acceptedLanguage: resolved.acceptedLanguage as ShopifyPageViewPayload['acceptedLanguage'],
131140
hydrogenSubchannelId: resolved.hydrogenSubchannelId,
132141
hasUserConsent: canTrack(),
133142
...(getConsent?.() ?? {
@@ -155,7 +164,7 @@ export function createShopifySubscriber(emitter: AnalyticsEmitter, options: {
155164
document.addEventListener('visitorConsentCollected', flush)
156165
}
157166

158-
const track = (build: (payload: Record<string, unknown>) => void) => {
167+
const track = (build: (payload: ShopifyPageViewPayload & PrivacyFields) => void) => {
159168
const run = () => {
160169
const payload = basePayload()
161170

@@ -169,7 +178,7 @@ export function createShopifySubscriber(emitter: AnalyticsEmitter, options: {
169178
})
170179
}
171180

172-
let viewPayload: Record<string, unknown> = {}
181+
let viewPayload: Partial<ShopifyPageViewPayload> = {}
173182

174183
emitter.on('page_viewed', (data) => {
175184
track((payload) => {

src/runtime/utils/clients/transport.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { createGraphQLClient } from '@shopify/graphql-client'
1313
import { joinURL } from 'ufo'
1414
import { createConsola } from 'consola'
1515

16-
import pkg from '../../../../package.json'
16+
import { MODULE_VERSION } from '../version'
1717

1818
export const PROXY_API_VERSION_HEADER = 'X-Shopify-Proxy-Api-Version'
1919

@@ -57,7 +57,7 @@ export const createTransport = <Operations extends AllOperations = AllOperations
5757
'Content-Type': 'application/json',
5858
'Accept': 'application/json',
5959
'X-SDK-Variant': 'nuxt-shopify',
60-
'X-SDK-Version': pkg?.version ?? 'unknown',
60+
'X-SDK-Version': MODULE_VERSION,
6161
...headers,
6262
},
6363
} satisfies ShopifyApiClientConfig

src/runtime/utils/version.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import pkg from '../../../package.json' with { type: 'json' }
2+
3+
export const MODULE_VERSION = pkg.version

0 commit comments

Comments
 (0)