Skip to content

⚡️ Remove customer data track for perf and bundle size #3393

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Apr 2, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 15 additions & 36 deletions packages/core/src/domain/context/contextManager.spec.ts
Original file line number Diff line number Diff line change
@@ -1,42 +1,40 @@
import { display } from '../../tools/display'
import { noop } from '../../tools/utils/functionUtils'
import type { PropertiesConfig } from './contextManager'
import { createContextManager } from './contextManager'
import { createCustomerDataTracker } from './customerDataTracker'

function createNoopCustomerDataTracker(propertiesConfig?: PropertiesConfig) {
return createContextManager('test', { customerDataTracker: createCustomerDataTracker(noop), propertiesConfig })
function createContextManagerWithDefaults(propertiesConfig?: PropertiesConfig) {
return createContextManager('test', { propertiesConfig })
}

describe('createContextManager', () => {
it('starts with an empty context', () => {
const manager = createNoopCustomerDataTracker()
const manager = createContextManagerWithDefaults()
expect(manager.getContext()).toEqual({})
})

it('updates the context', () => {
const manager = createNoopCustomerDataTracker()
const manager = createContextManagerWithDefaults()
manager.setContext({ bar: 'foo' })

expect(manager.getContext()).toEqual({ bar: 'foo' })
})

it('completely replaces the context', () => {
const manager = createNoopCustomerDataTracker()
const manager = createContextManagerWithDefaults()
manager.setContext({ a: 'foo' })
expect(manager.getContext()).toEqual({ a: 'foo' })
manager.setContext({ b: 'foo' })
expect(manager.getContext()).toEqual({ b: 'foo' })
})

it('sets a context value', () => {
const manager = createNoopCustomerDataTracker()
const manager = createContextManagerWithDefaults()
manager.setContextProperty('foo', 'bar')
expect(manager.getContext()).toEqual({ foo: 'bar' })
})

it('removes a context value', () => {
const manager = createNoopCustomerDataTracker()
const manager = createContextManagerWithDefaults()
manager.setContext({ a: 'foo', b: 'bar' })
manager.removeContextProperty('a')
expect(manager.getContext()).toEqual({ b: 'bar' })
Expand All @@ -45,40 +43,39 @@ describe('createContextManager', () => {
})

it('should get a clone of the context from getContext', () => {
const manager = createNoopCustomerDataTracker()
const manager = createContextManagerWithDefaults()
expect(manager.getContext()).toEqual(manager.getContext())
expect(manager.getContext()).not.toBe(manager.getContext())
})

it('should set a clone of context via setContext', () => {
const nestedObject = { foo: 'bar' }
const context = { nested: nestedObject }
const manager = createNoopCustomerDataTracker()
const manager = createContextManagerWithDefaults()
manager.setContext(context)
expect(manager.getContext().nested).toEqual(nestedObject)
expect(manager.getContext().nested).not.toBe(nestedObject)
})

it('should set a clone of the property via setContextProperty', () => {
const nestedObject = { foo: 'bar' }
const manager = createNoopCustomerDataTracker()
const manager = createContextManagerWithDefaults()
manager.setContextProperty('nested', nestedObject)
expect(manager.getContext().nested).toEqual(nestedObject)
expect(manager.getContext().nested).not.toBe(nestedObject)
})

it('should clear context object via clearContext', () => {
const context = { foo: 'bar' }
const manager = createNoopCustomerDataTracker()
const manager = createContextManagerWithDefaults()
manager.setContext(context)
expect(manager.getContext()).toEqual(context)
manager.clearContext()
expect(manager.getContext()).toEqual({})
})

it('should prevent setting non object values', () => {
spyOn(display, 'error')
const manager = createNoopCustomerDataTracker()
const manager = createContextManagerWithDefaults()
manager.setContext(null as any)
expect(manager.getContext()).toEqual({})
manager.setContext(undefined as any)
Expand All @@ -88,7 +85,7 @@ describe('createContextManager', () => {
})

it('should enforce specified type on properties', () => {
const manager = createNoopCustomerDataTracker({
const manager = createContextManagerWithDefaults({
id: { type: 'string' },
name: { type: 'string' },
email: { type: 'string' },
Expand All @@ -102,7 +99,7 @@ describe('createContextManager', () => {
it('should warn when required property is missing', () => {
const displaySpy = spyOn(display, 'warn')

const manager = createNoopCustomerDataTracker({
const manager = createContextManagerWithDefaults({
id: { required: true },
})

Expand All @@ -113,28 +110,10 @@ describe('createContextManager', () => {
)
})

it('should notify customer data tracker when the context is updated', () => {
const customerDataTracker = createCustomerDataTracker(noop)
const updateCustomerDataSpy = spyOn(customerDataTracker, 'updateCustomerData')
const resetCustomerDataSpy = spyOn(customerDataTracker, 'resetCustomerData')
const manager = createContextManager('test', { customerDataTracker })

manager.setContextProperty('foo', 'bar')
manager.removeContextProperty('foo')
manager.setContext({ foo: 'bar' })
manager.setContextProperty('foo', 'bar')
manager.removeContextProperty('foo')
manager.setContext({ foo: 'bar' })
manager.clearContext()

expect(updateCustomerDataSpy).toHaveBeenCalledTimes(6)
expect(resetCustomerDataSpy).toHaveBeenCalledTimes(1)
})

describe('changeObservable', () => {
it('should notify on context changes', () => {
const changeSpy = jasmine.createSpy('change')
const manager = createNoopCustomerDataTracker()
const manager = createContextManagerWithDefaults()
manager.changeObservable.subscribe(changeSpy)

manager.getContext()
Expand Down
7 changes: 0 additions & 7 deletions packages/core/src/domain/context/contextManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { sanitize } from '../../tools/serialisation/sanitize'
import type { Context } from '../../tools/serialisation/context'
import { Observable } from '../../tools/observable'
import { display } from '../../tools/display'
import type { CustomerDataTracker } from './customerDataTracker'
import { checkContext } from './contextUtils'

export type ContextManager = ReturnType<typeof createContextManager>
Expand Down Expand Up @@ -39,10 +38,8 @@ function ensureProperties(context: Context, propertiesConfig: PropertiesConfig,
export function createContextManager(
name: string = '',
{
customerDataTracker,
propertiesConfig = {},
}: {
customerDataTracker?: CustomerDataTracker
propertiesConfig?: PropertiesConfig
} = {}
) {
Expand All @@ -55,7 +52,6 @@ export function createContextManager(
setContext: (newContext: unknown) => {
if (checkContext(newContext)) {
context = sanitize(ensureProperties(newContext, propertiesConfig, name))
customerDataTracker?.updateCustomerData(context)
} else {
contextManager.clearContext()
}
Expand All @@ -64,20 +60,17 @@ export function createContextManager(

setContextProperty: (key: string, property: any) => {
context = sanitize(ensureProperties({ ...context, [key]: property }, propertiesConfig, name))
customerDataTracker?.updateCustomerData(context)
changeObservable.notify()
},

removeContextProperty: (key: string) => {
delete context[key]
customerDataTracker?.updateCustomerData(context)
ensureProperties(context, propertiesConfig, name)
changeObservable.notify()
},

clearContext: () => {
context = {}
customerDataTracker?.resetCustomerData()
changeObservable.notify()
},

Expand Down
146 changes: 0 additions & 146 deletions packages/core/src/domain/context/customerDataTracker.spec.ts

This file was deleted.

Loading