Skip to content

Commit a355689

Browse files
feat: add CDN bundle
Self-contained IIFE (4.0 KB gzipped). window.ImmutableWebSDK global. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 77bc4f1 commit a355689

2 files changed

Lines changed: 56 additions & 0 deletions

File tree

packages/audience/web/src/cdn.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* Audience web SDK CDN entry point — self-contained IIFE bundle.
3+
* Assigns exports to window globals for script-tag usage:
4+
* window.ImmutableWebSDK
5+
* window.AudienceEvent
6+
* window.IdentityProvider
7+
*/
8+
import { ImmutableWebSDK, AudienceEvent, IdentityProvider } from './index';
9+
10+
if (typeof window !== 'undefined') {
11+
(window as any).ImmutableWebSDK = ImmutableWebSDK;
12+
(window as any).AudienceEvent = AudienceEvent;
13+
(window as any).IdentityProvider = IdentityProvider;
14+
}
15+
16+
export { ImmutableWebSDK, AudienceEvent, IdentityProvider };
17+
export type {
18+
EventParamMap,
19+
Identity,
20+
WebSDKConfig,
21+
ConsentLevel,
22+
UserTraits,
23+
Environment,
24+
} from './index';

packages/audience/web/tsup.cdn.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// @ts-check
2+
import { defineConfig } from 'tsup';
3+
import { replace } from 'esbuild-plugin-replace';
4+
import pkg from './package.json' assert { type: 'json' };
5+
6+
/**
7+
* Audience web SDK CDN bundle — self-contained IIFE exposing window.ImmutableWebSDK.
8+
* All dependencies (including @imtbl/audience) are inlined.
9+
*
10+
* Output: dist/cdn/imtbl-web.js
11+
* Usage: <script src="https://cdn.immutable.com/web-sdk/v1/imtbl-web.js"></script>
12+
* <script>
13+
* var sdk = window.ImmutableWebSDK.init({ ... });
14+
* sdk.track(window.AudienceEvent.Purchase, { currency: 'USD', value: 9.99 });
15+
* </script>
16+
*/
17+
export default defineConfig({
18+
entry: { 'imtbl-web': 'src/cdn.ts' },
19+
outDir: 'dist/cdn',
20+
format: 'iife',
21+
platform: 'browser',
22+
target: 'es2020',
23+
minify: true,
24+
bundle: true,
25+
treeshake: true,
26+
noExternal: [/.*/],
27+
esbuildPlugins: [
28+
replace({
29+
'__SDK_VERSION__': pkg.version === '0.0.0' ? '0.1.0' : pkg.version,
30+
}),
31+
],
32+
});

0 commit comments

Comments
 (0)