@grafana/faro-core 1.14.0 → 1.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle/faro-core.iife.js +1 -1
- package/dist/bundle/types/api/ItemBuffer.d.ts +7 -0
- package/dist/bundle/types/api/apiTestHelpers.d.ts +11 -0
- package/dist/bundle/types/api/const.d.ts +3 -0
- package/dist/bundle/types/api/events/initialize.d.ts +13 -2
- package/dist/bundle/types/api/events/types.d.ts +11 -0
- package/dist/bundle/types/api/exceptions/initialize.d.ts +13 -2
- package/dist/bundle/types/api/exceptions/types.d.ts +2 -0
- package/dist/bundle/types/api/index.d.ts +3 -1
- package/dist/bundle/types/api/initialize.d.ts +3 -1
- package/dist/bundle/types/api/logs/initialize.d.ts +13 -2
- package/dist/bundle/types/api/logs/types.d.ts +3 -1
- package/dist/bundle/types/api/measurements/initialize.d.ts +13 -1
- package/dist/bundle/types/api/measurements/types.d.ts +2 -0
- package/dist/bundle/types/api/meta/initialize.d.ts +14 -2
- package/dist/bundle/types/api/types.d.ts +37 -0
- package/dist/bundle/types/api/userActionLifecycleHandler.d.ts +13 -0
- package/dist/bundle/types/api/utils.d.ts +2 -0
- package/dist/bundle/types/config/types.d.ts +21 -12
- package/dist/bundle/types/index.d.ts +4 -4
- package/dist/bundle/types/testUtils/mockTransport.d.ts +1 -1
- package/dist/bundle/types/transports/initialize.d.ts +2 -4
- package/dist/bundle/types/transports/types.d.ts +0 -1
- package/dist/bundle/types/utils/index.d.ts +2 -0
- package/dist/bundle/types/utils/reactive.d.ts +46 -0
- package/dist/bundle/types/version.d.ts +1 -1
- package/dist/cjs/api/ItemBuffer.js +27 -0
- package/dist/cjs/api/ItemBuffer.js.map +1 -0
- package/dist/cjs/api/apiTestHelpers.js +36 -0
- package/dist/cjs/api/apiTestHelpers.js.map +1 -0
- package/dist/cjs/api/const.js +7 -0
- package/dist/cjs/api/const.js.map +1 -0
- package/dist/cjs/api/events/initialize.js +15 -6
- package/dist/cjs/api/events/initialize.js.map +1 -1
- package/dist/cjs/api/events/types.js.map +1 -1
- package/dist/cjs/api/exceptions/initialize.js +59 -37
- package/dist/cjs/api/exceptions/initialize.js.map +1 -1
- package/dist/cjs/api/exceptions/types.js.map +1 -1
- package/dist/cjs/api/index.js +7 -1
- package/dist/cjs/api/index.js.map +1 -1
- package/dist/cjs/api/initialize.js +16 -2
- package/dist/cjs/api/initialize.js.map +1 -1
- package/dist/cjs/api/logs/initialize.js +15 -6
- package/dist/cjs/api/logs/initialize.js.map +1 -1
- package/dist/cjs/api/logs/types.js.map +1 -1
- package/dist/cjs/api/measurements/initialize.js +12 -3
- package/dist/cjs/api/measurements/initialize.js.map +1 -1
- package/dist/cjs/api/measurements/types.js.map +1 -1
- package/dist/cjs/api/meta/initialize.js +2 -1
- package/dist/cjs/api/meta/initialize.js.map +1 -1
- package/dist/cjs/api/types.js.map +1 -1
- package/dist/cjs/api/userActionLifecycleHandler.js +59 -0
- package/dist/cjs/api/userActionLifecycleHandler.js.map +1 -0
- package/dist/cjs/api/utils.js +11 -0
- package/dist/cjs/api/utils.js.map +1 -0
- package/dist/cjs/config/types.js.map +1 -1
- package/dist/cjs/index.js +8 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/transports/initialize.js +1 -35
- package/dist/cjs/transports/initialize.js.map +1 -1
- package/dist/cjs/transports/registerInitial.js +0 -1
- package/dist/cjs/transports/registerInitial.js.map +1 -1
- package/dist/cjs/transports/types.js.map +1 -1
- package/dist/cjs/utils/index.js +4 -1
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/reactive.js +104 -0
- package/dist/cjs/utils/reactive.js.map +1 -0
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/esm/api/ItemBuffer.js +21 -0
- package/dist/esm/api/ItemBuffer.js.map +1 -0
- package/dist/esm/api/apiTestHelpers.js +33 -0
- package/dist/esm/api/apiTestHelpers.js.map +1 -0
- package/dist/esm/api/const.js +4 -0
- package/dist/esm/api/const.js.map +1 -0
- package/dist/esm/api/events/initialize.js +15 -7
- package/dist/esm/api/events/initialize.js.map +1 -1
- package/dist/esm/api/events/types.js.map +1 -1
- package/dist/esm/api/exceptions/initialize.js +56 -35
- package/dist/esm/api/exceptions/initialize.js.map +1 -1
- package/dist/esm/api/exceptions/types.js.map +1 -1
- package/dist/esm/api/index.js +2 -0
- package/dist/esm/api/index.js.map +1 -1
- package/dist/esm/api/initialize.js +15 -1
- package/dist/esm/api/initialize.js.map +1 -1
- package/dist/esm/api/logs/initialize.js +12 -4
- package/dist/esm/api/logs/initialize.js.map +1 -1
- package/dist/esm/api/logs/types.js.map +1 -1
- package/dist/esm/api/measurements/initialize.js +12 -4
- package/dist/esm/api/measurements/initialize.js.map +1 -1
- package/dist/esm/api/measurements/types.js.map +1 -1
- package/dist/esm/api/meta/initialize.js +1 -1
- package/dist/esm/api/meta/initialize.js.map +1 -1
- package/dist/esm/api/types.js.map +1 -1
- package/dist/esm/api/userActionLifecycleHandler.js +43 -0
- package/dist/esm/api/userActionLifecycleHandler.js.map +1 -0
- package/dist/esm/api/utils.js +7 -0
- package/dist/esm/api/utils.js.map +1 -0
- package/dist/esm/config/types.js.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/transports/initialize.js +0 -28
- package/dist/esm/transports/initialize.js.map +1 -1
- package/dist/esm/transports/registerInitial.js +0 -1
- package/dist/esm/transports/registerInitial.js.map +1 -1
- package/dist/esm/transports/types.js.map +1 -1
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/reactive.js +93 -0
- package/dist/esm/utils/reactive.js.map +1 -0
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/spec/core/src/api/ItemBuffer.js +27 -0
- package/dist/spec/core/src/api/ItemBuffer.js.map +1 -0
- package/dist/spec/core/src/api/apiTestHelpers.js +36 -0
- package/dist/spec/core/src/api/apiTestHelpers.js.map +1 -0
- package/dist/spec/core/src/api/const.js +7 -0
- package/dist/spec/core/src/api/const.js.map +1 -0
- package/dist/spec/core/src/api/events/initialize.js +15 -6
- package/dist/spec/core/src/api/events/initialize.js.map +1 -1
- package/dist/spec/core/src/api/events/initialize.test.js +57 -0
- package/dist/spec/core/src/api/events/initialize.test.js.map +1 -1
- package/dist/spec/core/src/api/events/types.js.map +1 -1
- package/dist/spec/core/src/api/exceptions/initialize.js +59 -37
- package/dist/spec/core/src/api/exceptions/initialize.js.map +1 -1
- package/dist/spec/core/src/api/exceptions/initialize.test.js +83 -3
- package/dist/spec/core/src/api/exceptions/initialize.test.js.map +1 -1
- package/dist/spec/core/src/api/exceptions/types.js.map +1 -1
- package/dist/spec/core/src/api/index.js +7 -1
- package/dist/spec/core/src/api/index.js.map +1 -1
- package/dist/spec/core/src/api/initialize.js +16 -2
- package/dist/spec/core/src/api/initialize.js.map +1 -1
- package/dist/spec/core/src/api/initialize.test.js +73 -0
- package/dist/spec/core/src/api/initialize.test.js.map +1 -0
- package/dist/spec/core/src/api/itemBuffer.test.js +36 -0
- package/dist/spec/core/src/api/itemBuffer.test.js.map +1 -0
- package/dist/spec/core/src/api/logs/initialize.js +15 -6
- package/dist/spec/core/src/api/logs/initialize.js.map +1 -1
- package/dist/spec/core/src/api/logs/initialize.test.js +98 -0
- package/dist/spec/core/src/api/logs/initialize.test.js.map +1 -1
- package/dist/spec/core/src/api/logs/types.js.map +1 -1
- package/dist/spec/core/src/api/measurements/initialize.js +12 -3
- package/dist/spec/core/src/api/measurements/initialize.js.map +1 -1
- package/dist/spec/core/src/api/measurements/initialize.test.js +105 -0
- package/dist/spec/core/src/api/measurements/initialize.test.js.map +1 -1
- package/dist/spec/core/src/api/measurements/types.js.map +1 -1
- package/dist/spec/core/src/api/meta/initialize.js +2 -1
- package/dist/spec/core/src/api/meta/initialize.js.map +1 -1
- package/dist/spec/core/src/api/meta/initilialize.test.js +1 -3
- package/dist/spec/core/src/api/meta/initilialize.test.js.map +1 -1
- package/dist/spec/core/src/api/types.js.map +1 -1
- package/dist/spec/core/src/api/userActionLifecycleHandler.js +59 -0
- package/dist/spec/core/src/api/userActionLifecycleHandler.js.map +1 -0
- package/dist/spec/core/src/api/userActionLifecycleHandler.test.js +152 -0
- package/dist/spec/core/src/api/userActionLifecycleHandler.test.js.map +1 -0
- package/dist/spec/core/src/api/utils.js +11 -0
- package/dist/spec/core/src/api/utils.js.map +1 -0
- package/dist/spec/core/src/api/utils.test.js +20 -0
- package/dist/spec/core/src/api/utils.test.js.map +1 -0
- package/dist/spec/core/src/config/types.js.map +1 -1
- package/dist/spec/core/src/index.js +8 -2
- package/dist/spec/core/src/index.js.map +1 -1
- package/dist/spec/core/src/transports/initialize.js +1 -35
- package/dist/spec/core/src/transports/initialize.js.map +1 -1
- package/dist/spec/core/src/transports/registerInitial.js +0 -1
- package/dist/spec/core/src/transports/registerInitial.js.map +1 -1
- package/dist/spec/core/src/transports/transports.test.js +0 -16
- package/dist/spec/core/src/transports/transports.test.js.map +1 -1
- package/dist/spec/core/src/transports/types.js.map +1 -1
- package/dist/spec/core/src/utils/index.js +4 -1
- package/dist/spec/core/src/utils/index.js.map +1 -1
- package/dist/spec/core/src/utils/reactive.js +104 -0
- package/dist/spec/core/src/utils/reactive.js.map +1 -0
- package/dist/spec/core/src/utils/reactive.test.js +104 -0
- package/dist/spec/core/src/utils/reactive.test.js.map +1 -0
- package/dist/spec/core/src/version.js +1 -1
- package/dist/spec/core/src/version.js.map +1 -1
- package/dist/types/api/ItemBuffer.d.ts +7 -0
- package/dist/types/api/apiTestHelpers.d.ts +11 -0
- package/dist/types/api/const.d.ts +3 -0
- package/dist/types/api/events/initialize.d.ts +13 -2
- package/dist/types/api/events/types.d.ts +11 -0
- package/dist/types/api/exceptions/initialize.d.ts +13 -2
- package/dist/types/api/exceptions/types.d.ts +2 -0
- package/dist/types/api/index.d.ts +3 -1
- package/dist/types/api/initialize.d.ts +3 -1
- package/dist/types/api/logs/initialize.d.ts +13 -2
- package/dist/types/api/logs/types.d.ts +3 -1
- package/dist/types/api/measurements/initialize.d.ts +13 -1
- package/dist/types/api/measurements/types.d.ts +2 -0
- package/dist/types/api/meta/initialize.d.ts +14 -2
- package/dist/types/api/types.d.ts +37 -0
- package/dist/types/api/userActionLifecycleHandler.d.ts +13 -0
- package/dist/types/api/utils.d.ts +2 -0
- package/dist/types/config/types.d.ts +21 -12
- package/dist/types/core/src/api/ItemBuffer.d.ts +7 -0
- package/dist/types/core/src/api/apiTestHelpers.d.ts +11 -0
- package/dist/types/core/src/api/const.d.ts +3 -0
- package/dist/types/core/src/api/events/initialize.d.ts +13 -2
- package/dist/types/core/src/api/events/types.d.ts +11 -0
- package/dist/types/core/src/api/exceptions/initialize.d.ts +13 -2
- package/dist/types/core/src/api/exceptions/types.d.ts +2 -0
- package/dist/types/core/src/api/index.d.ts +3 -1
- package/dist/types/core/src/api/initialize.d.ts +3 -1
- package/dist/types/core/src/api/initialize.test.d.ts +1 -0
- package/dist/types/core/src/api/itemBuffer.test.d.ts +1 -0
- package/dist/types/core/src/api/logs/initialize.d.ts +13 -2
- package/dist/types/core/src/api/logs/types.d.ts +3 -1
- package/dist/types/core/src/api/measurements/initialize.d.ts +13 -1
- package/dist/types/core/src/api/measurements/types.d.ts +2 -0
- package/dist/types/core/src/api/meta/initialize.d.ts +14 -2
- package/dist/types/core/src/api/types.d.ts +37 -0
- package/dist/types/core/src/api/userActionLifecycleHandler.d.ts +13 -0
- package/dist/types/core/src/api/userActionLifecycleHandler.test.d.ts +1 -0
- package/dist/types/core/src/api/utils.d.ts +2 -0
- package/dist/types/core/src/api/utils.test.d.ts +1 -0
- package/dist/types/core/src/config/types.d.ts +21 -12
- package/dist/types/core/src/index.d.ts +4 -4
- package/dist/types/core/src/testUtils/mockTransport.d.ts +1 -1
- package/dist/types/core/src/transports/initialize.d.ts +2 -4
- package/dist/types/core/src/transports/types.d.ts +0 -1
- package/dist/types/core/src/utils/index.d.ts +2 -0
- package/dist/types/core/src/utils/reactive.d.ts +46 -0
- package/dist/types/core/src/utils/reactive.test.d.ts +1 -0
- package/dist/types/core/src/version.d.ts +1 -1
- package/dist/types/index.d.ts +4 -4
- package/dist/types/testUtils/mockTransport.d.ts +1 -1
- package/dist/types/transports/initialize.d.ts +2 -4
- package/dist/types/transports/types.d.ts +0 -1
- package/dist/types/utils/index.d.ts +2 -0
- package/dist/types/utils/reactive.d.ts +46 -0
- package/dist/types/version.d.ts +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initialize.test.js","sourceRoot":"","sources":["../../../../../../src/api/measurements/initialize.test.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MeasurementEvent, PushMeasurementOptions } from '../..';\nimport { initializeFaro } from '../../initialize';\nimport { mockConfig, MockTransport } from '../../testUtils';\nimport type { API } from '../types';\n\ndescribe('api.measurements', () => {\n function createAPI({ dedupe }: { dedupe: boolean } = { dedupe: true }): [API, MockTransport] {\n const transport = new MockTransport();\n const config = mockConfig({\n dedupe,\n transports: [transport],\n });\n\n const { api } = initializeFaro(config);\n\n return [api, transport];\n }\n\n describe('pushMeasurement', () => {\n let api: API;\n let transport: MockTransport;\n\n beforeEach(() => {\n [api, transport] = createAPI();\n });\n\n describe('Filtering', () => {\n it('filters the same measurement', () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n });\n\n it('filters the same measurement with the same context', () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const context = { foo: 'bar' };\n\n api.pushMeasurement(measurement, { context });\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement, { context });\n expect(transport.items).toHaveLength(1);\n });\n\n it(\"doesn't filter events with different context\", () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement, { context: { foo: 'bar' } });\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement, { context: { bar: 'baz' } });\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter measurements with same type and partially same values\", () => {\n const measurement1 = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const measurement2 = {\n ...measurement1,\n values: {\n ...measurement1.values,\n b: 2,\n },\n };\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement2);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter measurements with different type and same values\", () => {\n const measurement1 = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const measurement2 = {\n ...measurement1,\n type: 'web-vitals',\n };\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement2);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"filters a measurement and doesn't filter the next different one\", () => {\n const measurement1 = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const measurement2 = {\n ...measurement1,\n type: 'web-vitals',\n };\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement2);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when dedupe is false\", () => {\n [api, transport] = createAPI({ dedupe: false });\n\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when skipDedupe is true\", () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement, { skipDedupe: true });\n expect(transport.items).toHaveLength(2);\n });\n\n it('uses traceId and spanId from custom context', () => {\n const spanContext: PushMeasurementOptions['spanContext'] = {\n traceId: 'my-trace-id',\n spanId: 'my-span-id',\n };\n\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement, { spanContext });\n expect(transport.items).toHaveLength(1);\n\n expect((transport.items[0]?.payload as MeasurementEvent).trace).toStrictEqual({\n trace_id: 'my-trace-id',\n span_id: 'my-span-id',\n });\n });\n });\n\n it('Sets the timestamp to the provided custom timestamp', () => {\n api.pushMeasurement(\n {\n type: 'custom',\n values: {\n a: 1,\n },\n },\n { timestampOverwriteMs: 123 }\n );\n expect(transport.items).toHaveLength(1);\n expect((transport.items[0]?.payload as MeasurementEvent).timestamp).toBe('1970-01-01T00:00:00.123Z');\n });\n\n it('stringifies all values in the attributes object', () => {\n api.pushEvent('test', {\n // @ts-expect-error\n a: 1,\n b: 'foo',\n // @ts-expect-error\n c: true,\n // @ts-expect-error\n d: { e: 'bar' },\n // @ts-expect-error\n g: null,\n // @ts-expect-error\n h: undefined,\n // @ts-expect-error\n i: [1, 2, 3],\n });\n\n // @ts-expect-error\n expect(transport.items[0]?.payload.attributes).toStrictEqual({\n a: '1',\n b: 'foo',\n c: 'true',\n d: '{\"e\":\"bar\"}',\n g: 'null',\n h: 'undefined',\n i: '[1,2,3]',\n });\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"initialize.test.js","sourceRoot":"","sources":["../../../../../../src/api/measurements/initialize.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n APIEvent,\n ApiMessageBusMessages,\n dateNow,\n type MeasurementEvent,\n type PushMeasurementOptions,\n TransportItem,\n} from '../..';\nimport { initializeFaro } from '../../initialize';\nimport { mockConfig, mockInternalLogger, MockTransport } from '../../testUtils';\nimport { mockMetas, mockTracesApi, mockTransports } from '../apiTestHelpers';\nimport {\n USER_ACTION_CANCEL_MESSAGE_TYPE,\n USER_ACTION_END_MESSAGE_TYPE,\n USER_ACTION_START_MESSAGE_TYPE,\n} from '../const';\nimport { ItemBuffer } from '../ItemBuffer';\nimport type { API } from '../types';\n\nimport { initializeMeasurementsAPI } from './initialize';\n\ndescribe('api.measurements', () => {\n function createAPI({ dedupe }: { dedupe: boolean } = { dedupe: true }): [API, MockTransport] {\n const transport = new MockTransport();\n const config = mockConfig({\n dedupe,\n transports: [transport],\n });\n\n const { api } = initializeFaro(config);\n\n return [api, transport];\n }\n\n describe('pushMeasurement', () => {\n let api: API;\n let transport: MockTransport;\n\n beforeEach(() => {\n [api, transport] = createAPI();\n });\n\n describe('Filtering', () => {\n it('filters the same measurement', () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n });\n\n it('filters the same measurement with the same context', () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const context = { foo: 'bar' };\n\n api.pushMeasurement(measurement, { context });\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement, { context });\n expect(transport.items).toHaveLength(1);\n });\n\n it(\"doesn't filter events with different context\", () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement, { context: { foo: 'bar' } });\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement, { context: { bar: 'baz' } });\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter measurements with same type and partially same values\", () => {\n const measurement1 = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const measurement2 = {\n ...measurement1,\n values: {\n ...measurement1.values,\n b: 2,\n },\n };\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement2);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter measurements with different type and same values\", () => {\n const measurement1 = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const measurement2 = {\n ...measurement1,\n type: 'web-vitals',\n };\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement2);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"filters a measurement and doesn't filter the next different one\", () => {\n const measurement1 = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n const measurement2 = {\n ...measurement1,\n type: 'web-vitals',\n };\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement1);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement2);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when dedupe is false\", () => {\n [api, transport] = createAPI({ dedupe: false });\n\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when skipDedupe is true\", () => {\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement);\n expect(transport.items).toHaveLength(1);\n\n api.pushMeasurement(measurement, { skipDedupe: true });\n expect(transport.items).toHaveLength(2);\n });\n\n it('uses traceId and spanId from custom context', () => {\n const spanContext: PushMeasurementOptions['spanContext'] = {\n traceId: 'my-trace-id',\n spanId: 'my-span-id',\n };\n\n const measurement = {\n type: 'custom',\n values: {\n a: 1,\n },\n };\n\n api.pushMeasurement(measurement, { spanContext });\n expect(transport.items).toHaveLength(1);\n\n expect((transport.items[0]?.payload as MeasurementEvent).trace).toStrictEqual({\n trace_id: 'my-trace-id',\n span_id: 'my-span-id',\n });\n });\n });\n\n it('Sets the timestamp to the provided custom timestamp', () => {\n api.pushMeasurement(\n {\n type: 'custom',\n values: {\n a: 1,\n },\n },\n { timestampOverwriteMs: 123 }\n );\n expect(transport.items).toHaveLength(1);\n expect((transport.items[0]?.payload as MeasurementEvent).timestamp).toBe('1970-01-01T00:00:00.123Z');\n });\n\n it('stringifies all values in the attributes object', () => {\n api.pushEvent('test', {\n // @ts-expect-error\n a: 1,\n b: 'foo',\n // @ts-expect-error\n c: true,\n // @ts-expect-error\n d: { e: 'bar' },\n // @ts-expect-error\n g: null,\n // @ts-expect-error\n h: undefined,\n // @ts-expect-error\n i: [1, 2, 3],\n });\n\n // @ts-expect-error\n expect(transport.items[0]?.payload.attributes).toStrictEqual({\n a: '1',\n b: 'foo',\n c: 'true',\n d: '{\"e\":\"bar\"}',\n g: 'null',\n h: 'undefined',\n i: '[1,2,3]',\n });\n });\n\n it('does not stringify empty context', () => {\n api.pushMeasurement(\n {\n type: 'custom',\n values: {},\n },\n {\n context: {},\n }\n );\n api.pushMeasurement({\n type: 'custom2',\n values: {},\n });\n expect(transport.items).toHaveLength(2);\n expect((transport.items[0] as TransportItem<MeasurementEvent>).payload.context).toBeUndefined();\n expect((transport.items[0] as TransportItem<MeasurementEvent>).payload.context).toBeUndefined();\n });\n });\n\n describe('User action', () => {\n it('buffers the measurement if a user action is in progress', () => {\n const internalLogger = mockInternalLogger;\n const config = mockConfig();\n\n const actionBuffer = new ItemBuffer<TransportItem<APIEvent>>();\n\n let message: ApiMessageBusMessages | undefined;\n\n const getMessage = () => message;\n\n message = { type: 'user-action-start', name: 'testAction', startTime: Date.now(), parentId: 'parent-id' };\n const api = initializeMeasurementsAPI({\n unpatchedConsole: console,\n internalLogger,\n config,\n metas: mockMetas,\n transports: mockTransports,\n tracesApi: mockTracesApi,\n actionBuffer,\n getMessage,\n });\n\n api.pushMeasurement({ type: 'test', values: { a: 1 } });\n expect(actionBuffer.size()).toBe(1);\n\n message = {\n type: 'user-action-end',\n name: 'testAction',\n id: 'parent-id',\n startTime: dateNow(),\n endTime: dateNow(),\n duration: 0,\n eventType: 'click',\n };\n\n api.pushMeasurement({ type: 'test-2', values: { a: 1 } });\n expect(actionBuffer.size()).toBe(1);\n\n message = {\n type: 'user-action-cancel',\n name: 'testAction',\n parentId: 'parent-id',\n };\n\n api.pushMeasurement({ type: 'test-3', values: { a: 1 } });\n expect(actionBuffer.size()).toBe(1);\n });\n });\n\n describe('User action', () => {\n it('buffers the item if a user action is in progress', () => {\n const internalLogger = mockInternalLogger;\n const config = mockConfig();\n\n const actionBuffer = new ItemBuffer<TransportItem<APIEvent>>();\n\n let message: ApiMessageBusMessages | undefined;\n\n const getMessage = () => message;\n\n message = {\n type: USER_ACTION_START_MESSAGE_TYPE,\n name: 'testAction',\n startTime: Date.now(),\n parentId: 'parent-id',\n };\n const api = initializeMeasurementsAPI({\n unpatchedConsole: console,\n internalLogger,\n config,\n metas: mockMetas,\n transports: mockTransports,\n tracesApi: mockTracesApi,\n actionBuffer,\n getMessage,\n });\n\n api.pushMeasurement({ type: 'test', values: { a: 1 } });\n expect(actionBuffer.size()).toBe(1);\n\n message = {\n type: USER_ACTION_END_MESSAGE_TYPE,\n name: 'testAction',\n id: 'parent-id',\n startTime: dateNow(),\n endTime: dateNow(),\n duration: 0,\n eventType: 'click',\n };\n\n api.pushMeasurement({ type: 'test-2', values: { a: 1 } });\n expect(actionBuffer.size()).toBe(1);\n\n message = {\n type: USER_ACTION_CANCEL_MESSAGE_TYPE,\n name: 'testAction',\n parentId: 'parent-id',\n };\n\n api.pushMeasurement({ type: 'test-3', values: { a: 1 } });\n expect(actionBuffer.size()).toBe(1);\n });\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/api/measurements/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { SpanContext } from '@opentelemetry/api';\n\nimport type { TraceContext } from '../traces';\n\nexport type MeasurementContext = Record<string, string>;\n\nexport interface MeasurementEvent<V extends { [label: string]: number } = { [label: string]: number }> {\n type: string;\n values: V;\n\n timestamp: string;\n trace?: TraceContext;\n context?: MeasurementContext;\n}\n\nexport interface PushMeasurementOptions {\n skipDedupe?: boolean;\n context?: MeasurementContext;\n spanContext?: Pick<SpanContext, 'traceId' | 'spanId'>;\n timestampOverwriteMs?: number;\n}\n\nexport interface MeasurementsAPI {\n pushMeasurement: (\n payload: Omit<MeasurementEvent, 'timestamp'> & Partial<Pick<MeasurementEvent, 'timestamp'>>,\n options?: PushMeasurementOptions\n ) => void;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/api/measurements/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { SpanContext } from '@opentelemetry/api';\n\nimport type { TraceContext } from '../traces';\nimport type { UserAction } from '../types';\n\nexport type MeasurementContext = Record<string, string>;\n\nexport interface MeasurementEvent<V extends { [label: string]: number } = { [label: string]: number }> {\n type: string;\n values: V;\n\n timestamp: string;\n trace?: TraceContext;\n context?: MeasurementContext;\n\n action?: UserAction;\n}\n\nexport interface PushMeasurementOptions {\n skipDedupe?: boolean;\n context?: MeasurementContext;\n spanContext?: Pick<SpanContext, 'traceId' | 'spanId'>;\n timestampOverwriteMs?: number;\n}\n\nexport interface MeasurementsAPI {\n pushMeasurement: (\n payload: Omit<MeasurementEvent, 'timestamp'> & Partial<Pick<MeasurementEvent, 'timestamp'>>,\n options?: PushMeasurementOptions\n ) => void;\n}\n"]}
|
|
@@ -13,7 +13,8 @@ var __assign = (this && this.__assign) || function () {
|
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.initializeMetaAPI = void 0;
|
|
15
15
|
var is_1 = require("../../utils/is");
|
|
16
|
-
function initializeMetaAPI(
|
|
16
|
+
function initializeMetaAPI(_a) {
|
|
17
|
+
var internalLogger = _a.internalLogger, metas = _a.metas;
|
|
17
18
|
internalLogger.debug('Initializing meta API');
|
|
18
19
|
var metaSession = undefined;
|
|
19
20
|
var metaUser = undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../../../src/api/meta/initialize.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAKA,qCAAmD;
|
|
1
|
+
{"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../../../src/api/meta/initialize.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Config } from '../../config';\nimport type { InternalLogger } from '../../internalLogger';\nimport type { Meta, Metas } from '../../metas';\nimport type { TransportItem, Transports } from '../../transports';\nimport type { UnpatchedConsole } from '../../unpatchedConsole';\nimport { isEmpty, isString } from '../../utils/is';\nimport type { ItemBuffer } from '../ItemBuffer';\nimport type { TracesAPI } from '../traces';\nimport type { ApiMessageBusMessages } from '../types';\n\nimport type { MetaAPI } from './types';\n\nexport function initializeMetaAPI({\n internalLogger,\n metas,\n}: {\n unpatchedConsole: UnpatchedConsole;\n internalLogger: InternalLogger;\n config: Config;\n metas: Metas;\n transports: Transports;\n tracesApi: TracesAPI;\n actionBuffer: ItemBuffer<TransportItem>;\n getMessage: () => ApiMessageBusMessages | undefined;\n}): MetaAPI {\n internalLogger.debug('Initializing meta API');\n\n let metaSession: Partial<Meta> | undefined = undefined;\n let metaUser: Partial<Meta> | undefined = undefined;\n let metaView: Partial<Meta> | undefined = undefined;\n let metaPage: Partial<Meta> | undefined = undefined;\n\n const setUser: MetaAPI['setUser'] = (user) => {\n if (metaUser) {\n metas.remove(metaUser);\n }\n\n metaUser = {\n user,\n };\n\n metas.add(metaUser);\n };\n\n const setSession: MetaAPI['setSession'] = (session, options) => {\n const newOverrides = options?.overrides;\n const overrides = newOverrides\n ? {\n overrides: {\n ...metaSession?.session?.overrides,\n ...newOverrides,\n },\n }\n : {};\n\n if (metaSession) {\n metas.remove(metaSession);\n }\n\n metaSession = {\n session: {\n // if session is undefined, session manager force creates a new session\n ...(isEmpty(session) ? undefined : session),\n ...overrides,\n },\n };\n\n metas.add(metaSession);\n };\n\n const getSession: MetaAPI['getSession'] = () => metas.value.session;\n\n const setView: MetaAPI['setView'] = (view, options) => {\n if (options?.overrides) {\n setSession(getSession(), { overrides: options.overrides });\n }\n\n if (metaView?.view?.name === view?.name) {\n return;\n }\n\n const previousView = metaView;\n\n metaView = {\n view,\n };\n\n metas.add(metaView);\n\n if (previousView) {\n metas.remove(previousView);\n }\n };\n\n const getView: MetaAPI['getView'] = () => metas.value.view;\n\n const setPage: MetaAPI['setPage'] = (page) => {\n const pageMeta = isString(page)\n ? {\n // metaPage is available once setPage() has been called.\n // This is because page self updating metas like page need to be added as a function\n // Thus we call getPage in case metaPage is empty\n ...(metaPage?.page ?? getPage()),\n id: page,\n }\n : page;\n\n if (metaPage) {\n metas.remove(metaPage);\n }\n\n metaPage = {\n page: pageMeta,\n };\n\n metas.add(metaPage);\n };\n\n const getPage: MetaAPI['getPage'] = () => metas.value.page;\n\n return {\n setUser,\n resetUser: setUser as MetaAPI['resetUser'],\n setSession,\n resetSession: setSession as MetaAPI['resetSession'],\n getSession,\n setView,\n getView,\n setPage,\n getPage,\n };\n}\n"]}
|
|
@@ -80,9 +80,7 @@ describe('Meta API', function () {
|
|
|
80
80
|
sessionTracking: {
|
|
81
81
|
session: initialSession,
|
|
82
82
|
},
|
|
83
|
-
|
|
84
|
-
enabled: false,
|
|
85
|
-
},
|
|
83
|
+
trackGeolocation: false,
|
|
86
84
|
});
|
|
87
85
|
// mockConfig is the result of calling makeCoreConfig in faro-web-sdk package.
|
|
88
86
|
// It it reads the geoLocationTracking properties it adds them to the sessionTracking.session.overrides object.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initilialize.test.js","sourceRoot":"","sources":["../../../../../../src/api/meta/initilialize.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { initializeFaro } from '@grafana/faro-core';\nimport { mockConfig } from '@grafana/faro-core/src/testUtils';\n\nconst originalWindow = window;\n\ndescribe('Meta API', () => {\n const mockUrl = 'http://dummy.com';\n\n beforeEach(() => {\n window = Object.create(window);\n Object.defineProperty(window, 'location', {\n value: {\n href: mockUrl,\n },\n writable: true, // possibility to override\n });\n });\n\n beforeEach(() => {\n jest.resetModules();\n jest.clearAllMocks();\n jest.restoreAllMocks();\n });\n\n afterAll(() => {\n window = originalWindow;\n });\n\n describe('setView', () => {\n it('updates the view meta if the new view meta is different to the previous one', () => {\n const { api } = initializeFaro(mockConfig());\n\n const view = { name: 'my-view' };\n api.setView(view);\n let previousView = api.getView();\n expect(previousView).toEqual(view);\n\n const newView = { name: 'my-new-view' };\n api.setView(newView);\n previousView = api.getView();\n expect(previousView).toEqual(newView);\n });\n\n it('does not update the view meta if the new view meta is identical to the previous one', () => {\n const { api } = initializeFaro(mockConfig());\n\n const view = { name: 'my-view' };\n api.setView(view);\n let previousView = api.getView();\n expect(previousView).toEqual(view);\n\n const newView = { name: 'my-view' };\n api.setView(newView);\n previousView = api.getView();\n expect(previousView).toEqual(view);\n });\n });\n\n describe('setSession', () => {\n it('adds overrides to the session meta if provided via the setView() function call', () => {\n const initialSession = { id: 'my-session' };\n\n const { api } = initializeFaro(mockConfig({ sessionTracking: { enabled: false, session: initialSession } }));\n\n expect(api.getSession()).toEqual(initialSession);\n\n let overrides = { serviceName: 'service-1' };\n\n const newSession = { id: 'my-new-session', attributes: { hello: 'world' } };\n api.setSession(newSession, { overrides });\n expect(api.getSession()).toEqual({ ...newSession, overrides });\n\n overrides = { serviceName: 'service-2' };\n api.setSession({}, { overrides });\n expect(api.getSession()).toEqual({ overrides });\n\n overrides = { serviceName: 'service-3' };\n api.setSession(undefined, { overrides });\n expect(api.getSession()).toEqual({ overrides });\n });\n\n it('merges the new overrides with the existing session meta overrides', () => {\n const initialSession = { id: 'my-session' };\n\n const mc = mockConfig({\n sessionTracking: {\n session: initialSession,\n },\n geoLocationTracking: {\n enabled: false,\n },\n });\n\n // mockConfig is the result of calling makeCoreConfig in faro-web-sdk package.\n // It it reads the geoLocationTracking properties it adds them to the sessionTracking.session.overrides object.\n mc.sessionTracking!.session!.overrides = { geoLocationTrackingEnabled: false };\n\n const { api } = initializeFaro(mc);\n\n expect(api.getSession()?.id).toEqual(initialSession.id);\n expect(api.getSession()?.overrides).toBeDefined();\n expect(api.getSession()?.overrides).toStrictEqual({ geoLocationTrackingEnabled: false });\n\n const overrides = { serviceName: 'service-1' };\n const newSession = { id: 'my-new-session' };\n api.setSession(newSession, { overrides });\n expect(api.getSession()?.id).toEqual(newSession.id);\n expect(api.getSession()?.overrides).toStrictEqual({ ...overrides, geoLocationTrackingEnabled: false });\n\n const newOverrides = { serviceName: 'service-2' };\n api.setSession(newSession, { overrides: newOverrides });\n expect(api.getSession()?.id).toEqual(newSession.id);\n expect(api.getSession()?.overrides).toStrictEqual({ ...newOverrides, geoLocationTrackingEnabled: false });\n });\n });\n\n describe('setPage / getPage', () => {\n it('updates the page meta when setPage(meta) is called', () => {\n const { api } = initializeFaro(mockConfig());\n\n const page = { url: 'http://example.com/my-page', id: 'my-page' };\n api.setPage(page);\n expect(api.getPage()).toEqual(page);\n\n const newPage = { url: 'http://example.com/my-new-page', id: 'my-new-page' };\n api.setPage(newPage);\n expect(api.getPage()).toEqual(newPage);\n });\n\n it('updates the page id if the parameter of setPage is a string', () => {\n const { api } = initializeFaro(mockConfig());\n\n const initialPage = { url: 'http://example.com/my-page', id: 'my-page', attributes: { hello: 'world' } };\n api.setPage(initialPage);\n expect(api.getPage()).toStrictEqual(initialPage);\n\n const newPageId = 'my-new-page-id';\n api.setPage(newPageId);\n expect(api.getPage()?.id).toEqual(newPageId);\n });\n\n it('gets the page meta when getPage(meta) is called', () => {\n const { api } = initializeFaro(mockConfig());\n\n const page = { url: 'http://example.com/my-page', id: 'my-page' };\n api.setPage(page);\n expect(api.getPage()).toEqual(page);\n });\n\n // Note: there's an integration test in the web-sdk that tests the following scenario:\n // >>> it'sets the page meta correctly when setPage() is called and the locally cached meta is not set <<<\n // This is because it needs web-sdk functions to be able to test the integration\n // you can find it in the pageMeta test file: https://github.com/grafana/faro-web-sdk/blob/3c2ba0f8ea8bfdfb39cd79b704d9a6c07bc7834e/packages/web-sdk/src/metas/page/meta.test.ts#L10\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"initilialize.test.js","sourceRoot":"","sources":["../../../../../../src/api/meta/initilialize.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { initializeFaro } from '@grafana/faro-core';\nimport { mockConfig } from '@grafana/faro-core/src/testUtils';\n\nconst originalWindow = window;\n\ndescribe('Meta API', () => {\n const mockUrl = 'http://dummy.com';\n\n beforeEach(() => {\n window = Object.create(window);\n Object.defineProperty(window, 'location', {\n value: {\n href: mockUrl,\n },\n writable: true, // possibility to override\n });\n });\n\n beforeEach(() => {\n jest.resetModules();\n jest.clearAllMocks();\n jest.restoreAllMocks();\n });\n\n afterAll(() => {\n window = originalWindow;\n });\n\n describe('setView', () => {\n it('updates the view meta if the new view meta is different to the previous one', () => {\n const { api } = initializeFaro(mockConfig());\n\n const view = { name: 'my-view' };\n api.setView(view);\n let previousView = api.getView();\n expect(previousView).toEqual(view);\n\n const newView = { name: 'my-new-view' };\n api.setView(newView);\n previousView = api.getView();\n expect(previousView).toEqual(newView);\n });\n\n it('does not update the view meta if the new view meta is identical to the previous one', () => {\n const { api } = initializeFaro(mockConfig());\n\n const view = { name: 'my-view' };\n api.setView(view);\n let previousView = api.getView();\n expect(previousView).toEqual(view);\n\n const newView = { name: 'my-view' };\n api.setView(newView);\n previousView = api.getView();\n expect(previousView).toEqual(view);\n });\n });\n\n describe('setSession', () => {\n it('adds overrides to the session meta if provided via the setView() function call', () => {\n const initialSession = { id: 'my-session' };\n\n const { api } = initializeFaro(mockConfig({ sessionTracking: { enabled: false, session: initialSession } }));\n\n expect(api.getSession()).toEqual(initialSession);\n\n let overrides = { serviceName: 'service-1' };\n\n const newSession = { id: 'my-new-session', attributes: { hello: 'world' } };\n api.setSession(newSession, { overrides });\n expect(api.getSession()).toEqual({ ...newSession, overrides });\n\n overrides = { serviceName: 'service-2' };\n api.setSession({}, { overrides });\n expect(api.getSession()).toEqual({ overrides });\n\n overrides = { serviceName: 'service-3' };\n api.setSession(undefined, { overrides });\n expect(api.getSession()).toEqual({ overrides });\n });\n\n it('merges the new overrides with the existing session meta overrides', () => {\n const initialSession = { id: 'my-session' };\n\n const mc = mockConfig({\n sessionTracking: {\n session: initialSession,\n },\n trackGeolocation: false,\n });\n\n // mockConfig is the result of calling makeCoreConfig in faro-web-sdk package.\n // It it reads the geoLocationTracking properties it adds them to the sessionTracking.session.overrides object.\n mc.sessionTracking!.session!.overrides = { geoLocationTrackingEnabled: false };\n\n const { api } = initializeFaro(mc);\n\n expect(api.getSession()?.id).toEqual(initialSession.id);\n expect(api.getSession()?.overrides).toBeDefined();\n expect(api.getSession()?.overrides).toStrictEqual({ geoLocationTrackingEnabled: false });\n\n const overrides = { serviceName: 'service-1' };\n const newSession = { id: 'my-new-session' };\n api.setSession(newSession, { overrides });\n expect(api.getSession()?.id).toEqual(newSession.id);\n expect(api.getSession()?.overrides).toStrictEqual({ ...overrides, geoLocationTrackingEnabled: false });\n\n const newOverrides = { serviceName: 'service-2' };\n api.setSession(newSession, { overrides: newOverrides });\n expect(api.getSession()?.id).toEqual(newSession.id);\n expect(api.getSession()?.overrides).toStrictEqual({ ...newOverrides, geoLocationTrackingEnabled: false });\n });\n });\n\n describe('setPage / getPage', () => {\n it('updates the page meta when setPage(meta) is called', () => {\n const { api } = initializeFaro(mockConfig());\n\n const page = { url: 'http://example.com/my-page', id: 'my-page' };\n api.setPage(page);\n expect(api.getPage()).toEqual(page);\n\n const newPage = { url: 'http://example.com/my-new-page', id: 'my-new-page' };\n api.setPage(newPage);\n expect(api.getPage()).toEqual(newPage);\n });\n\n it('updates the page id if the parameter of setPage is a string', () => {\n const { api } = initializeFaro(mockConfig());\n\n const initialPage = { url: 'http://example.com/my-page', id: 'my-page', attributes: { hello: 'world' } };\n api.setPage(initialPage);\n expect(api.getPage()).toStrictEqual(initialPage);\n\n const newPageId = 'my-new-page-id';\n api.setPage(newPageId);\n expect(api.getPage()?.id).toEqual(newPageId);\n });\n\n it('gets the page meta when getPage(meta) is called', () => {\n const { api } = initializeFaro(mockConfig());\n\n const page = { url: 'http://example.com/my-page', id: 'my-page' };\n api.setPage(page);\n expect(api.getPage()).toEqual(page);\n });\n\n // Note: there's an integration test in the web-sdk that tests the following scenario:\n // >>> it'sets the page meta correctly when setPage() is called and the locally cached meta is not set <<<\n // This is because it needs web-sdk functions to be able to test the integration\n // you can find it in the pageMeta test file: https://github.com/grafana/faro-web-sdk/blob/3c2ba0f8ea8bfdfb39cd79b704d9a6c07bc7834e/packages/web-sdk/src/metas/page/meta.test.ts#L10\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/api/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { EventEvent, EventsAPI } from './events';\nimport type { ExceptionEvent, ExceptionsAPI } from './exceptions';\nimport type { LogEvent, LogsAPI } from './logs';\nimport type { MeasurementEvent, MeasurementsAPI } from './measurements';\nimport type { MetaAPI } from './meta';\nimport type { TraceEvent, TracesAPI } from './traces';\n\nexport type APIEvent = LogEvent | ExceptionEvent | MeasurementEvent | TraceEvent | EventEvent;\n\nexport type API = LogsAPI & ExceptionsAPI & MeasurementsAPI & TracesAPI & MetaAPI & EventsAPI;\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/api/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n USER_ACTION_CANCEL_MESSAGE_TYPE,\n USER_ACTION_END_MESSAGE_TYPE,\n USER_ACTION_START_MESSAGE_TYPE,\n} from './const';\nimport type { EventEvent, EventsAPI } from './events';\nimport type { ExceptionEvent, ExceptionsAPI } from './exceptions';\nimport type { LogEvent, LogsAPI } from './logs';\nimport type { MeasurementEvent, MeasurementsAPI } from './measurements';\nimport type { MetaAPI } from './meta';\nimport type { TraceEvent, TracesAPI } from './traces';\n\nexport type APIEvent = LogEvent | ExceptionEvent | MeasurementEvent | TraceEvent | EventEvent;\n\nexport type API = LogsAPI & ExceptionsAPI & MeasurementsAPI & TracesAPI & MetaAPI & EventsAPI;\n\nexport type ApiMessageBusMessages = UserActionStartMessage | UserActionEndMessage | UserActionCancelMessage;\n\nexport type UserActionMessageType =\n | typeof USER_ACTION_START_MESSAGE_TYPE\n | typeof USER_ACTION_END_MESSAGE_TYPE\n | typeof USER_ACTION_CANCEL_MESSAGE_TYPE;\n\nexport type UserActionStartMessage = {\n type: typeof USER_ACTION_START_MESSAGE_TYPE;\n name: string;\n startTime: number;\n\n /**\n * Unique identifier of the parent user action to which this action belongs.\n */\n parentId: string;\n};\n\nexport type UserActionEndMessage = {\n type: typeof USER_ACTION_END_MESSAGE_TYPE;\n name: string;\n startTime: number;\n endTime: number;\n duration: number;\n eventType: string;\n\n /**\n * Unique identifier for the user action. Will be undefined for messages related to child actions.\n */\n id: string;\n};\n\nexport type UserActionCancelMessage = {\n type: typeof USER_ACTION_CANCEL_MESSAGE_TYPE;\n name: string;\n\n /**\n * Unique identifier of the parent user action to which this action belongs.\n */\n parentId?: string;\n};\n\nexport type UserAction = {\n name: string;\n id?: string;\n parentId?: string;\n};\n"]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.createUserActionLifecycleHandler = void 0;
|
|
15
|
+
var transports_1 = require("../transports");
|
|
16
|
+
var const_1 = require("./const");
|
|
17
|
+
var ItemBuffer_1 = require("./ItemBuffer");
|
|
18
|
+
function createUserActionLifecycleHandler(_a) {
|
|
19
|
+
var apiMessageBus = _a.apiMessageBus, transports = _a.transports, config = _a.config;
|
|
20
|
+
var actionBuffer = new ItemBuffer_1.ItemBuffer();
|
|
21
|
+
var trackUserActionsExcludeItem = config.trackUserActionsExcludeItem;
|
|
22
|
+
var message;
|
|
23
|
+
apiMessageBus.subscribe(function (msg) {
|
|
24
|
+
if (msg.type === const_1.USER_ACTION_START_MESSAGE_TYPE) {
|
|
25
|
+
message = msg;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (msg.type === const_1.USER_ACTION_END_MESSAGE_TYPE) {
|
|
29
|
+
var id_1 = msg.id, name_1 = msg.name;
|
|
30
|
+
actionBuffer.flushBuffer(function (item) {
|
|
31
|
+
if (isExcludeFromUserAction(item, trackUserActionsExcludeItem)) {
|
|
32
|
+
transports.execute(item);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
var userActionItem = __assign(__assign({}, item), { payload: __assign(__assign({}, item.payload), { action: {
|
|
36
|
+
parentId: id_1,
|
|
37
|
+
name: name_1,
|
|
38
|
+
} }) });
|
|
39
|
+
transports.execute(userActionItem);
|
|
40
|
+
});
|
|
41
|
+
message = undefined;
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (msg.type === const_1.USER_ACTION_CANCEL_MESSAGE_TYPE) {
|
|
45
|
+
message = undefined;
|
|
46
|
+
actionBuffer.flushBuffer(function (item) {
|
|
47
|
+
transports.execute(item);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
var getMessage = function () { return message; };
|
|
52
|
+
return { actionBuffer: actionBuffer, getMessage: getMessage };
|
|
53
|
+
}
|
|
54
|
+
exports.createUserActionLifecycleHandler = createUserActionLifecycleHandler;
|
|
55
|
+
function isExcludeFromUserAction(item, trackUserActionsExcludeItem) {
|
|
56
|
+
return ((trackUserActionsExcludeItem === null || trackUserActionsExcludeItem === void 0 ? void 0 : trackUserActionsExcludeItem(item)) ||
|
|
57
|
+
(item.type === transports_1.TransportItemType.MEASUREMENT && item.payload.type === 'web-vitals'));
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=userActionLifecycleHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userActionLifecycleHandler.js","sourceRoot":"","sources":["../../../../../src/api/userActionLifecycleHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,4CAAuF;AAGvF,iCAAwH;AACxH,2CAA0C;AAI1C,SAAgB,gCAAgC,CAAC,EAQhD;QAPC,aAAa,mBAAA,EACb,UAAU,gBAAA,EACV,MAAM,YAAA;IAMN,IAAM,YAAY,GAAG,IAAI,uBAAU,EAAiB,CAAC;IACrD,IAAM,2BAA2B,GAAG,MAAM,CAAC,2BAA2B,CAAC;IACvE,IAAI,OAA0C,CAAC;IAE/C,aAAa,CAAC,SAAS,CAAC,UAAC,GAAG;QAC1B,IAAI,GAAG,CAAC,IAAI,KAAK,sCAA8B,EAAE;YAC/C,OAAO,GAAG,GAAG,CAAC;YACd,OAAO;SACR;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,oCAA4B,EAAE;YACrC,IAAA,IAAE,GAAW,GAAG,GAAd,EAAE,MAAI,GAAK,GAAG,KAAR,CAAS;YAEzB,YAAY,CAAC,WAAW,CAAC,UAAC,IAAI;gBAC5B,IAAI,uBAAuB,CAAC,IAAI,EAAE,2BAA2B,CAAC,EAAE;oBAC9D,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACzB,OAAO;iBACR;gBAED,IAAM,cAAc,GAAG,sBAClB,IAAI,KACP,OAAO,wBACF,IAAI,CAAC,OAAO,KACf,MAAM,EAAE;4BACN,QAAQ,EAAE,IAAE;4BACZ,IAAI,QAAA;yBACL,MAEa,CAAC;gBAEnB,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YAEH,OAAO,GAAG,SAAS,CAAC;YACpB,OAAO;SACR;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,uCAA+B,EAAE;YAChD,OAAO,GAAG,SAAS,CAAC;YACpB,YAAY,CAAC,WAAW,CAAC,UAAC,IAAI;gBAC5B,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;SACJ;IACH,CAAC,CAAC,CAAC;IAEH,IAAM,UAAU,GAAG,cAAsB,OAAA,OAAO,EAAP,CAAO,CAAC;IACjD,OAAO,EAAE,YAAY,cAAA,EAAE,UAAU,YAAA,EAAE,CAAC;AACtC,CAAC;AAxDD,4EAwDC;AAED,SAAS,uBAAuB,CAC9B,IAA6B,EAC7B,2BAAkE;IAElE,OAAO,CACL,CAAA,2BAA2B,aAA3B,2BAA2B,uBAA3B,2BAA2B,CAAG,IAAI,CAAC;QACnC,CAAC,IAAI,CAAC,IAAI,KAAK,8BAAiB,CAAC,WAAW,IAAK,IAAI,CAAC,OAA4B,CAAC,IAAI,KAAK,YAAY,CAAC,CAC1G,CAAC;AACJ,CAAC","sourcesContent":["import type { Config } from '../config';\nimport { type TransportItem, TransportItemType, type Transports } from '../transports';\nimport type { Observable } from '../utils';\n\nimport { USER_ACTION_CANCEL_MESSAGE_TYPE, USER_ACTION_END_MESSAGE_TYPE, USER_ACTION_START_MESSAGE_TYPE } from './const';\nimport { ItemBuffer } from './ItemBuffer';\nimport type { MeasurementEvent } from './measurements';\nimport type { APIEvent, ApiMessageBusMessages } from './types';\n\nexport function createUserActionLifecycleHandler({\n apiMessageBus,\n transports,\n config,\n}: {\n apiMessageBus: Observable<ApiMessageBusMessages>;\n transports: Transports;\n config: Config;\n}) {\n const actionBuffer = new ItemBuffer<TransportItem>();\n const trackUserActionsExcludeItem = config.trackUserActionsExcludeItem;\n let message: ApiMessageBusMessages | undefined;\n\n apiMessageBus.subscribe((msg) => {\n if (msg.type === USER_ACTION_START_MESSAGE_TYPE) {\n message = msg;\n return;\n }\n\n if (msg.type === USER_ACTION_END_MESSAGE_TYPE) {\n const { id, name } = msg;\n\n actionBuffer.flushBuffer((item) => {\n if (isExcludeFromUserAction(item, trackUserActionsExcludeItem)) {\n transports.execute(item);\n return;\n }\n\n const userActionItem = {\n ...item,\n payload: {\n ...item.payload,\n action: {\n parentId: id,\n name,\n },\n },\n } as TransportItem;\n\n transports.execute(userActionItem);\n });\n\n message = undefined;\n return;\n }\n\n if (msg.type === USER_ACTION_CANCEL_MESSAGE_TYPE) {\n message = undefined;\n actionBuffer.flushBuffer((item) => {\n transports.execute(item);\n });\n }\n });\n\n const getMessage = (): typeof message => message;\n return { actionBuffer, getMessage };\n}\n\nfunction isExcludeFromUserAction(\n item: TransportItem<APIEvent>,\n trackUserActionsExcludeItem: Config['trackUserActionsExcludeItem']\n) {\n return (\n trackUserActionsExcludeItem?.(item) ||\n (item.type === TransportItemType.MEASUREMENT && (item.payload as MeasurementEvent).type === 'web-vitals')\n );\n}\n"]}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
var __1 = require("..");
|
|
15
|
+
var reactive_1 = require("../utils/reactive");
|
|
16
|
+
var apiTestHelpers_1 = require("./apiTestHelpers");
|
|
17
|
+
var const_1 = require("./const");
|
|
18
|
+
var userActionLifecycleHandler_1 = require("./userActionLifecycleHandler");
|
|
19
|
+
describe('userActionLifecycleHandler', function () {
|
|
20
|
+
it('assigns the user-action-start message to the message variable when it receives it', function () {
|
|
21
|
+
var apiMessageBus = new reactive_1.Observable();
|
|
22
|
+
var getMessage = (0, userActionLifecycleHandler_1.createUserActionLifecycleHandler)({
|
|
23
|
+
apiMessageBus: apiMessageBus,
|
|
24
|
+
transports: apiTestHelpers_1.mockTransports,
|
|
25
|
+
config: {},
|
|
26
|
+
}).getMessage;
|
|
27
|
+
var message = {
|
|
28
|
+
type: const_1.USER_ACTION_START_MESSAGE_TYPE,
|
|
29
|
+
name: '',
|
|
30
|
+
startTime: 0,
|
|
31
|
+
parentId: '',
|
|
32
|
+
};
|
|
33
|
+
apiMessageBus.notify(message);
|
|
34
|
+
expect(getMessage()).toEqual(message);
|
|
35
|
+
});
|
|
36
|
+
it('When it receives a user-action-cancel message, it resets the cached message flushes the buffer and sends the items to the transports', function () {
|
|
37
|
+
var apiMessageBus = new reactive_1.Observable();
|
|
38
|
+
var mockExecute = jest.fn();
|
|
39
|
+
var _a = (0, userActionLifecycleHandler_1.createUserActionLifecycleHandler)({
|
|
40
|
+
apiMessageBus: apiMessageBus,
|
|
41
|
+
transports: __assign(__assign({}, apiTestHelpers_1.mockTransports), { execute: mockExecute }),
|
|
42
|
+
config: {},
|
|
43
|
+
}), actionBuffer = _a.actionBuffer, getMessage = _a.getMessage;
|
|
44
|
+
var message = {
|
|
45
|
+
type: const_1.USER_ACTION_START_MESSAGE_TYPE,
|
|
46
|
+
name: '',
|
|
47
|
+
startTime: 0,
|
|
48
|
+
parentId: '',
|
|
49
|
+
};
|
|
50
|
+
apiMessageBus.notify(message);
|
|
51
|
+
var item = { type: __1.TransportItemType.EVENT, payload: {}, meta: {} };
|
|
52
|
+
actionBuffer.addItem(item);
|
|
53
|
+
var cancelMessage = {
|
|
54
|
+
type: const_1.USER_ACTION_CANCEL_MESSAGE_TYPE,
|
|
55
|
+
name: 'pointerdown',
|
|
56
|
+
};
|
|
57
|
+
apiMessageBus.notify(cancelMessage);
|
|
58
|
+
expect(getMessage()).toBeUndefined();
|
|
59
|
+
expect(mockExecute).toHaveBeenCalledTimes(1);
|
|
60
|
+
expect(mockExecute).toHaveBeenCalledWith(item);
|
|
61
|
+
expect(actionBuffer.size()).toEqual(0);
|
|
62
|
+
});
|
|
63
|
+
it('When it receives a user-action-end message, it sends the items to the transports with the action parentId and name', function () {
|
|
64
|
+
var apiMessageBus = new reactive_1.Observable();
|
|
65
|
+
var mockExecute = jest.fn();
|
|
66
|
+
var actionBuffer = (0, userActionLifecycleHandler_1.createUserActionLifecycleHandler)({
|
|
67
|
+
apiMessageBus: apiMessageBus,
|
|
68
|
+
transports: __assign(__assign({}, apiTestHelpers_1.mockTransports), { execute: mockExecute }),
|
|
69
|
+
config: {},
|
|
70
|
+
}).actionBuffer;
|
|
71
|
+
var message = {
|
|
72
|
+
type: const_1.USER_ACTION_START_MESSAGE_TYPE,
|
|
73
|
+
name: 'pointerdown',
|
|
74
|
+
startTime: 0,
|
|
75
|
+
parentId: '123',
|
|
76
|
+
};
|
|
77
|
+
apiMessageBus.notify(message);
|
|
78
|
+
var item = { type: __1.TransportItemType.EVENT, payload: {}, meta: {} };
|
|
79
|
+
actionBuffer.addItem(item);
|
|
80
|
+
var endMessage = {
|
|
81
|
+
type: const_1.USER_ACTION_END_MESSAGE_TYPE,
|
|
82
|
+
id: '123',
|
|
83
|
+
name: 'pointerdown',
|
|
84
|
+
startTime: 100,
|
|
85
|
+
endTime: 120,
|
|
86
|
+
duration: 20,
|
|
87
|
+
eventType: 'keydown',
|
|
88
|
+
};
|
|
89
|
+
apiMessageBus.notify(endMessage);
|
|
90
|
+
expect(mockExecute).toHaveBeenCalledTimes(1);
|
|
91
|
+
expect(mockExecute).toHaveBeenCalledWith(__assign(__assign({}, item), { payload: __assign(__assign({}, item.payload), { action: {
|
|
92
|
+
parentId: '123',
|
|
93
|
+
name: 'pointerdown',
|
|
94
|
+
} }) }));
|
|
95
|
+
});
|
|
96
|
+
it('excludes items defined by the isExcludeFromUserAction function from the user actions', function () {
|
|
97
|
+
var apiMessageBus = new reactive_1.Observable();
|
|
98
|
+
var mockExecute = jest.fn();
|
|
99
|
+
var _a = (0, userActionLifecycleHandler_1.createUserActionLifecycleHandler)({
|
|
100
|
+
apiMessageBus: apiMessageBus,
|
|
101
|
+
transports: __assign(__assign({}, apiTestHelpers_1.mockTransports), { execute: mockExecute }),
|
|
102
|
+
config: {
|
|
103
|
+
trackUserActionsExcludeItem: function (item) {
|
|
104
|
+
return item.type === __1.TransportItemType.EVENT && item.payload.name === 'i-am-excluded';
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
}), actionBuffer = _a.actionBuffer, getMessage = _a.getMessage;
|
|
108
|
+
var message = {
|
|
109
|
+
type: const_1.USER_ACTION_START_MESSAGE_TYPE,
|
|
110
|
+
name: 'pointerdown',
|
|
111
|
+
startTime: 0,
|
|
112
|
+
parentId: '123',
|
|
113
|
+
};
|
|
114
|
+
apiMessageBus.notify(message);
|
|
115
|
+
var itemEvent = { type: __1.TransportItemType.EVENT, payload: {}, meta: {} };
|
|
116
|
+
actionBuffer.addItem(itemEvent);
|
|
117
|
+
var itemMeasurement = {
|
|
118
|
+
type: __1.TransportItemType.MEASUREMENT,
|
|
119
|
+
payload: { type: 'web-vitals', values: {}, timestamp: (0, __1.dateNow)().toString() },
|
|
120
|
+
meta: {},
|
|
121
|
+
};
|
|
122
|
+
actionBuffer.addItem(itemMeasurement);
|
|
123
|
+
var itemEventExcluded = {
|
|
124
|
+
type: __1.TransportItemType.EVENT,
|
|
125
|
+
payload: {
|
|
126
|
+
timestamp: (0, __1.dateNow)().toString(),
|
|
127
|
+
name: 'i-am-excluded',
|
|
128
|
+
},
|
|
129
|
+
meta: {},
|
|
130
|
+
};
|
|
131
|
+
actionBuffer.addItem(itemEventExcluded);
|
|
132
|
+
var endMessage = {
|
|
133
|
+
type: const_1.USER_ACTION_END_MESSAGE_TYPE,
|
|
134
|
+
id: '123',
|
|
135
|
+
name: 'pointerdown',
|
|
136
|
+
startTime: 100,
|
|
137
|
+
endTime: 120,
|
|
138
|
+
duration: 20,
|
|
139
|
+
eventType: 'keydown',
|
|
140
|
+
};
|
|
141
|
+
apiMessageBus.notify(endMessage);
|
|
142
|
+
expect(mockExecute).toHaveBeenCalledTimes(3);
|
|
143
|
+
expect(mockExecute).toHaveBeenNthCalledWith(1, __assign(__assign({}, itemEvent), { payload: __assign(__assign({}, itemEvent.payload), { action: {
|
|
144
|
+
parentId: '123',
|
|
145
|
+
name: 'pointerdown',
|
|
146
|
+
} }) }));
|
|
147
|
+
expect(mockExecute).toHaveBeenNthCalledWith(2, itemMeasurement);
|
|
148
|
+
expect(mockExecute).toHaveBeenNthCalledWith(3, itemEventExcluded);
|
|
149
|
+
expect(getMessage()).toBeUndefined();
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
//# sourceMappingURL=userActionLifecycleHandler.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userActionLifecycleHandler.test.js","sourceRoot":"","sources":["../../../../../src/api/userActionLifecycleHandler.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type APIEvent,\n ApiMessageBusMessages,\n type Config,\n dateNow,\n EventEvent,\n type Meta,\n TransportItem,\n TransportItemType,\n UserActionStartMessage,\n} from '..';\nimport { Observable } from '../utils/reactive';\n\nimport { mockTransports } from './apiTestHelpers';\nimport { USER_ACTION_CANCEL_MESSAGE_TYPE, USER_ACTION_END_MESSAGE_TYPE, USER_ACTION_START_MESSAGE_TYPE } from './const';\nimport { createUserActionLifecycleHandler } from './userActionLifecycleHandler';\n\ndescribe('userActionLifecycleHandler', () => {\n it('assigns the user-action-start message to the message variable when it receives it', () => {\n const apiMessageBus = new Observable<ApiMessageBusMessages>();\n\n const { getMessage } = createUserActionLifecycleHandler({\n apiMessageBus,\n transports: mockTransports,\n config: {} as Config,\n });\n\n const message: UserActionStartMessage = {\n type: USER_ACTION_START_MESSAGE_TYPE,\n name: '',\n startTime: 0,\n parentId: '',\n };\n\n apiMessageBus.notify(message);\n\n expect(getMessage()).toEqual(message);\n });\n\n it('When it receives a user-action-cancel message, it resets the cached message flushes the buffer and sends the items to the transports', () => {\n const apiMessageBus = new Observable<ApiMessageBusMessages>();\n\n const mockExecute = jest.fn();\n const { actionBuffer, getMessage } = createUserActionLifecycleHandler({\n apiMessageBus,\n transports: {\n ...mockTransports,\n execute: mockExecute,\n },\n config: {} as Config,\n });\n\n const message: UserActionStartMessage = {\n type: USER_ACTION_START_MESSAGE_TYPE,\n name: '',\n startTime: 0,\n parentId: '',\n };\n\n apiMessageBus.notify(message);\n\n const item = { type: TransportItemType.EVENT, payload: {}, meta: {} as Meta };\n actionBuffer.addItem(item);\n\n const cancelMessage: ApiMessageBusMessages = {\n type: USER_ACTION_CANCEL_MESSAGE_TYPE,\n name: 'pointerdown',\n };\n\n apiMessageBus.notify(cancelMessage);\n\n expect(getMessage()).toBeUndefined();\n expect(mockExecute).toHaveBeenCalledTimes(1);\n expect(mockExecute).toHaveBeenCalledWith(item);\n expect(actionBuffer.size()).toEqual(0);\n });\n\n it('When it receives a user-action-end message, it sends the items to the transports with the action parentId and name', () => {\n const apiMessageBus = new Observable<ApiMessageBusMessages>();\n\n const mockExecute = jest.fn();\n const { actionBuffer } = createUserActionLifecycleHandler({\n apiMessageBus,\n transports: {\n ...mockTransports,\n execute: mockExecute,\n },\n config: {} as Config,\n });\n\n const message: UserActionStartMessage = {\n type: USER_ACTION_START_MESSAGE_TYPE,\n name: 'pointerdown',\n startTime: 0,\n parentId: '123',\n };\n\n apiMessageBus.notify(message);\n\n const item = { type: TransportItemType.EVENT, payload: {}, meta: {} as Meta };\n actionBuffer.addItem(item);\n\n const endMessage: ApiMessageBusMessages = {\n type: USER_ACTION_END_MESSAGE_TYPE,\n id: '123',\n name: 'pointerdown',\n startTime: 100,\n endTime: 120,\n duration: 20,\n eventType: 'keydown',\n };\n\n apiMessageBus.notify(endMessage);\n\n expect(mockExecute).toHaveBeenCalledTimes(1);\n expect(mockExecute).toHaveBeenCalledWith({\n ...item,\n payload: {\n ...item.payload,\n action: {\n parentId: '123',\n name: 'pointerdown',\n },\n },\n });\n });\n\n it('excludes items defined by the isExcludeFromUserAction function from the user actions', () => {\n const apiMessageBus = new Observable<ApiMessageBusMessages>();\n\n const mockExecute = jest.fn();\n const { actionBuffer, getMessage } = createUserActionLifecycleHandler({\n apiMessageBus,\n transports: {\n ...mockTransports,\n execute: mockExecute,\n },\n config: {\n trackUserActionsExcludeItem(item) {\n return item.type === TransportItemType.EVENT && (item.payload as EventEvent).name === 'i-am-excluded';\n },\n } as Config,\n });\n\n const message: UserActionStartMessage = {\n type: USER_ACTION_START_MESSAGE_TYPE,\n name: 'pointerdown',\n startTime: 0,\n parentId: '123',\n };\n\n apiMessageBus.notify(message);\n\n const itemEvent = { type: TransportItemType.EVENT, payload: {}, meta: {} as Meta };\n actionBuffer.addItem(itemEvent);\n\n const itemMeasurement: TransportItem<APIEvent> = {\n type: TransportItemType.MEASUREMENT,\n payload: { type: 'web-vitals', values: {}, timestamp: dateNow().toString() },\n meta: {} as Meta,\n };\n actionBuffer.addItem(itemMeasurement);\n\n const itemEventExcluded: TransportItem<EventEvent> = {\n type: TransportItemType.EVENT,\n payload: {\n timestamp: dateNow().toString(),\n name: 'i-am-excluded',\n },\n meta: {} as Meta,\n };\n actionBuffer.addItem(itemEventExcluded);\n\n const endMessage: ApiMessageBusMessages = {\n type: USER_ACTION_END_MESSAGE_TYPE,\n id: '123',\n name: 'pointerdown',\n startTime: 100,\n endTime: 120,\n duration: 20,\n eventType: 'keydown',\n };\n\n apiMessageBus.notify(endMessage);\n\n expect(mockExecute).toHaveBeenCalledTimes(3);\n expect(mockExecute).toHaveBeenNthCalledWith(1, {\n ...itemEvent,\n payload: {\n ...itemEvent.payload,\n action: {\n parentId: '123',\n name: 'pointerdown',\n },\n },\n });\n expect(mockExecute).toHaveBeenNthCalledWith(2, itemMeasurement);\n expect(mockExecute).toHaveBeenNthCalledWith(3, itemEventExcluded);\n expect(getMessage()).toBeUndefined();\n });\n});\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shouldIgnoreEvent = void 0;
|
|
4
|
+
var is_1 = require("../utils/is");
|
|
5
|
+
function shouldIgnoreEvent(patterns, msg) {
|
|
6
|
+
return patterns.some(function (pattern) {
|
|
7
|
+
return (0, is_1.isString)(pattern) ? msg.includes(pattern) : !!msg.match(pattern);
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
exports.shouldIgnoreEvent = shouldIgnoreEvent;
|
|
11
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/api/utils.ts"],"names":[],"mappings":";;;AACA,kCAAuC;AAEvC,SAAgB,iBAAiB,CAAC,QAAkB,EAAE,GAAW;IAC/D,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAC,OAAO;QAC3B,OAAO,IAAA,aAAQ,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC;AAJD,8CAIC","sourcesContent":["import type { Patterns } from '../config/types';\nimport { isString } from '../utils/is';\n\nexport function shouldIgnoreEvent(patterns: Patterns, msg: string): boolean {\n return patterns.some((pattern) => {\n return isString(pattern) ? msg.includes(pattern) : !!msg.match(pattern);\n });\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var utils_1 = require("./utils");
|
|
4
|
+
describe('api/utils', function () {
|
|
5
|
+
it('should ignore event', function () {
|
|
6
|
+
var patterns = ['pattern1', 'pattern2'];
|
|
7
|
+
var msg = 'message pattern1';
|
|
8
|
+
var result = (0, utils_1.shouldIgnoreEvent)(patterns, msg);
|
|
9
|
+
expect(result).toBe(true);
|
|
10
|
+
patterns = ['pattern1', /foo/];
|
|
11
|
+
msg = 'This is a foo example';
|
|
12
|
+
result = (0, utils_1.shouldIgnoreEvent)(patterns, msg);
|
|
13
|
+
expect(result).toBe(true);
|
|
14
|
+
patterns = ['pattern1', /foo/];
|
|
15
|
+
msg = "This example doesn't match";
|
|
16
|
+
result = (0, utils_1.shouldIgnoreEvent)(patterns, msg);
|
|
17
|
+
expect(result).toBe(false);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=utils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../../../src/api/utils.test.ts"],"names":[],"mappings":";;AAEA,iCAA4C;AAE5C,QAAQ,CAAC,WAAW,EAAE;IACpB,EAAE,CAAC,qBAAqB,EAAE;QACxB,IAAI,QAAQ,GAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAClD,IAAI,GAAG,GAAG,kBAAkB,CAAC;QAC7B,IAAI,MAAM,GAAG,IAAA,yBAAiB,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1B,QAAQ,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC/B,GAAG,GAAG,uBAAuB,CAAC;QAC9B,MAAM,GAAG,IAAA,yBAAiB,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1B,QAAQ,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC/B,GAAG,GAAG,4BAA4B,CAAC;QACnC,MAAM,GAAG,IAAA,yBAAiB,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import type { Patterns } from '..';\n\nimport { shouldIgnoreEvent } from './utils';\n\ndescribe('api/utils', () => {\n it('should ignore event', () => {\n let patterns: Patterns = ['pattern1', 'pattern2'];\n let msg = 'message pattern1';\n let result = shouldIgnoreEvent(patterns, msg);\n expect(result).toBe(true);\n\n patterns = ['pattern1', /foo/];\n msg = 'This is a foo example';\n result = shouldIgnoreEvent(patterns, msg);\n expect(result).toBe(true);\n\n patterns = ['pattern1', /foo/];\n msg = \"This example doesn't match\";\n result = shouldIgnoreEvent(patterns, msg);\n expect(result).toBe(false);\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/config/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { APIEvent, LogArgsSerializer, StacktraceParser } from '../api';\nimport type { Instrumentation } from '../instrumentations';\nimport type { InternalLoggerLevel } from '../internalLogger';\nimport type { Meta, MetaApp, MetaItem, MetaPage, MetaSession, MetaUser, MetaView } from '../metas';\nimport type { BatchExecutorOptions, BeforeSendHook, Transport } from '../transports';\nimport type { UnpatchedConsole } from '../unpatchedConsole';\nimport type { LogLevel } from '../utils';\n\ntype SamplingContext = {\n metas: Meta;\n};\n\nexport interface Config<P = APIEvent> {\n /**\n * Application metadata\n */\n app: MetaApp;\n\n /**\n * Set max number and max interval for signals to be batched before sending\n */\n batching?: BatchExecutorOptions;\n\n /**\n * A flag for toggling deduplication for signals\n */\n dedupe: boolean;\n\n /**\n * The key (name) to use for the global Faro object (default: 'faro')\n */\n globalObjectKey: string;\n\n /**\n * The (custom) instrumentations to use with Faro\n */\n instrumentations: Instrumentation[];\n\n /**\n * The level of information printed to console for internal messages (default: LogLevel.ERROR)\n */\n internalLoggerLevel: InternalLoggerLevel;\n\n /**\n * Isolate Faro instance from other Faro instances on the same page. (default: false)\n */\n isolate: boolean;\n\n /**\n * Custom function to serialize log arguments\n */\n logArgsSerializer?: LogArgsSerializer;\n\n /**\n * Add custom Metas during Faro initialization\n */\n metas: MetaItem[];\n\n /**\n * Custom function used to parse stack traces\n */\n parseStacktrace: StacktraceParser;\n\n /**\n * Pause sending data (default: false)\n */\n paused: boolean;\n\n /**\n * Prevent Faro from exposing itself to the global object (default: false)\n */\n preventGlobalExposure: boolean;\n\n /**\n * The transports to use for sending beacons\n */\n transports: Transport[];\n\n /**\n * Some instrumentations might override the default console methods but Faro instance provides a\n * way to access the unmodified console methods.\n *\n * faro.unpatchedConsole.log('This is a log');\n * faro.unpatchedConsole.warn('This is a warning');\n */\n unpatchedConsole: UnpatchedConsole;\n\n /**\n * Function which invoked before pushing event to transport. Can be used to modify or filter events\n */\n beforeSend?: BeforeSendHook<P>;\n\n /**\n * Error message patterns for errors that should be ignored\n */\n ignoreErrors?: Patterns;\n\n /**\n * Path patterns for Endpoints that should be ignored form being tracked\n */\n ignoreUrls?: Patterns;\n\n /**\n * Configuration for the built in session tracker\n */\n sessionTracking?: {\n /**\n * Enable session tracking (default: true)\n */\n enabled?: boolean;\n /**\n * Wether to use sticky sessions (default: false)\n */\n persistent?: boolean;\n /**\n * Session metadata object to be used when initializing session tracking\n */\n session?: MetaSession;\n /**\n * How long is a sticky session valid for recurring users (default: 15 minutes)\n */\n maxSessionPersistenceTime?: number;\n /**\n * Called each time a session changes. This can be when a new session is created or when an existing session is updated.\n * @param oldSession\n * @param newSession\n */\n onSessionChange?: (oldSession: MetaSession | null, newSession: MetaSession) => void;\n /**\n * Then sampling rate for the session based sampler (default: 1). If a session is not part of a sample, no signals for this session are tracked.\n */\n samplingRate?: number;\n /**\n * Custom sampler function if custom sampling logic is needed.\n * @param context\n */\n sampler?: (context: SamplingContext) => number;\n /**\n * Custom function to generate session id. If available Faro uses this function instead of the internal one.\n */\n generateSessionId?: () => string;\n };\n\n /**\n * Meta object for user data\n */\n user?: MetaUser;\n\n /**\n * Meta object for view data\n */\n view?: MetaView;\n\n eventDomain?: string;\n\n /**\n * Only resource timings for fetch and xhr requests are tracked by default. Set this to true to track all resources (default: false).\n */\n trackResources?: boolean;\n\n /**\n * Track web vitals attribution data (default: false)\n */\n trackWebVitalsAttribution?: boolean;\n\n /**\n * Configuration for the web vitals instrumentation\n */\n webVitalsInstrumentation?: {\n /**\n * Report all changes for web vitals (default: false)\n *\n * In most cases, you only want the callback function to be called when the metric is ready to be reported.\n * However, it is possible to report every change (e.g. each larger layout shift as it happens)\n * by setting reportAllChanges to true.\n *\n * This can be useful when debugging, but in general using reportAllChanges is not needed (or recommended)\n * for measuring these metrics in production.\n */\n reportAllChanges?: boolean;\n };\n\n /**\n * Configuration for the console instrumentation\n */\n consoleInstrumentation?: {\n /**\n * Configure what console levels should be captured by Faro. By default the following levels\n * are disabled: console.debug, console.trace, console.log\n *\n * If you want to collect all levels set captureConsoleDisabledLevels: [];\n * If you want to disable only some levels set captureConsoleDisabledLevels: [LogLevel.DEBUG, LogLevel.TRACE];\n */\n disabledLevels?: LogLevel[];\n /*\n * By default, Faro sends an error for console.error calls. If you want to send a log instead, set this to true.\n */\n consoleErrorAsLog?: boolean;\n\n /**\n * If true, use the default Faro error serializer for console.error calls. If false, simply call toString() on the error arguments.\n * If enabled, payloads containing serialized errors may become very large. If left disabled, some error details may be lost.\n * (default: false)\n */\n serializeErrors?: boolean;\n\n /**\n * Custom function to serialize Error arguments\n */\n errorSerializer?: LogArgsSerializer;\n };\n\n /**\n * Configuration for the page tracking\n */\n pageTracking?: {\n /**\n * The page meta for initial page settings\n */\n page?: MetaPage;\n\n /**\n * Allows to provide a template for the page id\n */\n generatePageId?: (location: Location) => string;\n };\n\n /**\n *
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/config/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { APIEvent, LogArgsSerializer, StacktraceParser } from '../api';\nimport type { Instrumentation } from '../instrumentations';\nimport type { InternalLoggerLevel } from '../internalLogger';\nimport type { Meta, MetaApp, MetaItem, MetaPage, MetaSession, MetaUser, MetaView } from '../metas';\nimport type { BatchExecutorOptions, BeforeSendHook, Transport, TransportItem } from '../transports';\nimport type { UnpatchedConsole } from '../unpatchedConsole';\nimport type { LogLevel } from '../utils';\n\ntype SamplingContext = {\n metas: Meta;\n};\n\nexport interface Config<P = APIEvent> {\n /**\n * Application metadata\n */\n app: MetaApp;\n\n /**\n * Set max number and max interval for signals to be batched before sending\n */\n batching?: BatchExecutorOptions;\n\n /**\n * A flag for toggling deduplication for signals\n */\n dedupe: boolean;\n\n /**\n * The key (name) to use for the global Faro object (default: 'faro')\n */\n globalObjectKey: string;\n\n /**\n * The (custom) instrumentations to use with Faro\n */\n instrumentations: Instrumentation[];\n\n /**\n * The level of information printed to console for internal messages (default: LogLevel.ERROR)\n */\n internalLoggerLevel: InternalLoggerLevel;\n\n /**\n * Isolate Faro instance from other Faro instances on the same page. (default: false)\n */\n isolate: boolean;\n\n /**\n * Custom function to serialize log arguments\n */\n logArgsSerializer?: LogArgsSerializer;\n\n /**\n * Add custom Metas during Faro initialization\n */\n metas: MetaItem[];\n\n /**\n * Custom function used to parse stack traces\n */\n parseStacktrace: StacktraceParser;\n\n /**\n * Pause sending data (default: false)\n */\n paused: boolean;\n\n /**\n * Prevent Faro from exposing itself to the global object (default: false)\n */\n preventGlobalExposure: boolean;\n\n /**\n * The transports to use for sending beacons\n */\n transports: Transport[];\n\n /**\n * Some instrumentations might override the default console methods but Faro instance provides a\n * way to access the unmodified console methods.\n *\n * faro.unpatchedConsole.log('This is a log');\n * faro.unpatchedConsole.warn('This is a warning');\n */\n unpatchedConsole: UnpatchedConsole;\n\n /**\n * Function which invoked before pushing event to transport. Can be used to modify or filter events\n */\n beforeSend?: BeforeSendHook<P>;\n\n /**\n * Error message patterns for errors that should be ignored\n */\n ignoreErrors?: Patterns;\n\n /**\n * Path patterns for Endpoints that should be ignored form being tracked\n */\n ignoreUrls?: Patterns;\n\n /**\n * Configuration for the built in session tracker\n */\n sessionTracking?: {\n /**\n * Enable session tracking (default: true)\n */\n enabled?: boolean;\n /**\n * Wether to use sticky sessions (default: false)\n */\n persistent?: boolean;\n /**\n * Session metadata object to be used when initializing session tracking\n */\n session?: MetaSession;\n /**\n * How long is a sticky session valid for recurring users (default: 15 minutes)\n */\n maxSessionPersistenceTime?: number;\n /**\n * Called each time a session changes. This can be when a new session is created or when an existing session is updated.\n * @param oldSession\n * @param newSession\n */\n onSessionChange?: (oldSession: MetaSession | null, newSession: MetaSession) => void;\n /**\n * Then sampling rate for the session based sampler (default: 1). If a session is not part of a sample, no signals for this session are tracked.\n */\n samplingRate?: number;\n /**\n * Custom sampler function if custom sampling logic is needed.\n * @param context\n */\n sampler?: (context: SamplingContext) => number;\n /**\n * Custom function to generate session id. If available Faro uses this function instead of the internal one.\n */\n generateSessionId?: () => string;\n };\n\n /**\n * Meta object for user data\n */\n user?: MetaUser;\n\n /**\n * Meta object for view data\n */\n view?: MetaView;\n\n eventDomain?: string;\n\n /**\n * Only resource timings for fetch and xhr requests are tracked by default. Set this to true to track all resources (default: false).\n */\n trackResources?: boolean;\n\n /**\n * Track web vitals attribution data (default: false)\n */\n trackWebVitalsAttribution?: boolean;\n\n /**\n * Configuration for the web vitals instrumentation\n */\n webVitalsInstrumentation?: {\n /**\n * Report all changes for web vitals (default: false)\n *\n * In most cases, you only want the callback function to be called when the metric is ready to be reported.\n * However, it is possible to report every change (e.g. each larger layout shift as it happens)\n * by setting reportAllChanges to true.\n *\n * This can be useful when debugging, but in general using reportAllChanges is not needed (or recommended)\n * for measuring these metrics in production.\n */\n reportAllChanges?: boolean;\n };\n\n /**\n * Configuration for the console instrumentation\n */\n consoleInstrumentation?: {\n /**\n * Configure what console levels should be captured by Faro. By default the following levels\n * are disabled: console.debug, console.trace, console.log\n *\n * If you want to collect all levels set captureConsoleDisabledLevels: [];\n * If you want to disable only some levels set captureConsoleDisabledLevels: [LogLevel.DEBUG, LogLevel.TRACE];\n */\n disabledLevels?: LogLevel[];\n /*\n * By default, Faro sends an error for console.error calls. If you want to send a log instead, set this to true.\n */\n consoleErrorAsLog?: boolean;\n\n /**\n * If true, use the default Faro error serializer for console.error calls. If false, simply call toString() on the error arguments.\n * If enabled, payloads containing serialized errors may become very large. If left disabled, some error details may be lost.\n * (default: false)\n */\n serializeErrors?: boolean;\n\n /**\n * Custom function to serialize Error arguments\n */\n errorSerializer?: LogArgsSerializer;\n };\n\n /**\n * Configuration for the page tracking\n */\n pageTracking?: {\n /**\n * The page meta for initial page settings\n */\n page?: MetaPage;\n\n /**\n * Allows to provide a template for the page id\n */\n generatePageId?: (location: Location) => string;\n };\n\n /**\n * Enable or disable geolocation tracking.\n * Geolocation tracking must be enabled in the Grafana Cloud settings first.\n * It cannot be enabled solely on the client side.\n * This option allows control over tracking on the client side to comply with user\n * privacy requirements.\n */\n trackGeolocation?: boolean;\n\n /**\n * This is a preview feature.\n * We have tested it thoroughly, but it is possible that it might not work as expected in all cases.\n */\n // TODO: remove preview postfix when feature is ga\n trackUserActionsPreview?: boolean;\n\n /**\n * Configure your own attribute name for tracking user actions. Default is 'data-faro-user-action-name'\n */\n trackUserActionsDataAttributeName?: string;\n\n /**\n * Predicate function to exclude items from user actions.\n * If the function returns true, the item will be excluded from user actions.\n */\n trackUserActionsExcludeItem?: (item: TransportItem<APIEvent>) => boolean;\n}\n\nexport type Patterns = Array<string | RegExp>;\n"]}
|
|
@@ -14,12 +14,16 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
18
|
-
exports.unknownString = exports.VERSION = exports.stringifyObjectValues = exports.stringifyExternalJson = exports.getCircularDependencyReplacer = exports.isEmpty = exports.dateNow = exports.noop = exports.LogLevel = exports.isUndefined = exports.isTypeof = exports.isToString = exports.isThenable = exports.isSyntheticEvent = exports.isSymbol = void 0;
|
|
17
|
+
exports.isNumber = exports.isNull = exports.isMapDefined = exports.isMap = exports.isInt = exports.isInstanceOf = exports.isFunction = exports.isEventDefined = exports.isEvent = exports.isErrorEvent = exports.isErrorDefined = exports.isError = exports.isElementDefined = exports.isElement = exports.isDomException = exports.isDomError = exports.isBoolean = exports.isArray = exports.getCurrentTimestamp = exports.genShortID = exports.defaultLogLevel = exports.deepEqual = exports.createPromiseBuffer = exports.allLogLevels = exports.defaultUnpatchedConsole = exports.transportItemTypeToBodyKey = exports.TransportItemType = exports.getTransportBody = exports.BaseTransport = exports.setInternalFaroOnGlobalObject = exports.isInternalFaroOnGlobalObject = exports.internalGlobalObjectKey = exports.getInternalFaroFromGlobalObject = exports.faro = exports.InternalLoggerLevel = exports.defaultInternalLoggerLevel = exports.createInternalLogger = exports.BaseInstrumentation = exports.defaultGlobalObjectKey = exports.defaultBatchingConfig = exports.initializeFaro = exports.globalObject = exports.BaseExtension = exports.USER_ACTION_START_MESSAGE_TYPE = exports.USER_ACTION_END_MESSAGE_TYPE = exports.USER_ACTION_CANCEL_MESSAGE_TYPE = exports.apiMessageBus = exports.defaultErrorArgsSerializer = exports.defaultLogArgsSerializer = exports.defaultExceptionType = void 0;
|
|
18
|
+
exports.unknownString = exports.VERSION = exports.merge = exports.Observable = exports.stringifyObjectValues = exports.stringifyExternalJson = exports.getCircularDependencyReplacer = exports.isEmpty = exports.dateNow = exports.noop = exports.LogLevel = exports.isUndefined = exports.isTypeof = exports.isToString = exports.isThenable = exports.isSyntheticEvent = exports.isSymbol = exports.isString = exports.isRegExp = exports.isPrimitive = exports.isObject = void 0;
|
|
19
19
|
var api_1 = require("./api");
|
|
20
20
|
Object.defineProperty(exports, "defaultExceptionType", { enumerable: true, get: function () { return api_1.defaultExceptionType; } });
|
|
21
21
|
Object.defineProperty(exports, "defaultLogArgsSerializer", { enumerable: true, get: function () { return api_1.defaultLogArgsSerializer; } });
|
|
22
22
|
Object.defineProperty(exports, "defaultErrorArgsSerializer", { enumerable: true, get: function () { return api_1.defaultErrorArgsSerializer; } });
|
|
23
|
+
Object.defineProperty(exports, "apiMessageBus", { enumerable: true, get: function () { return api_1.apiMessageBus; } });
|
|
24
|
+
Object.defineProperty(exports, "USER_ACTION_CANCEL_MESSAGE_TYPE", { enumerable: true, get: function () { return api_1.USER_ACTION_CANCEL_MESSAGE_TYPE; } });
|
|
25
|
+
Object.defineProperty(exports, "USER_ACTION_END_MESSAGE_TYPE", { enumerable: true, get: function () { return api_1.USER_ACTION_END_MESSAGE_TYPE; } });
|
|
26
|
+
Object.defineProperty(exports, "USER_ACTION_START_MESSAGE_TYPE", { enumerable: true, get: function () { return api_1.USER_ACTION_START_MESSAGE_TYPE; } });
|
|
23
27
|
var extensions_1 = require("./extensions");
|
|
24
28
|
Object.defineProperty(exports, "BaseExtension", { enumerable: true, get: function () { return extensions_1.BaseExtension; } });
|
|
25
29
|
var globalObject_1 = require("./globalObject");
|
|
@@ -91,6 +95,8 @@ Object.defineProperty(exports, "isEmpty", { enumerable: true, get: function () {
|
|
|
91
95
|
Object.defineProperty(exports, "getCircularDependencyReplacer", { enumerable: true, get: function () { return utils_1.getCircularDependencyReplacer; } });
|
|
92
96
|
Object.defineProperty(exports, "stringifyExternalJson", { enumerable: true, get: function () { return utils_1.stringifyExternalJson; } });
|
|
93
97
|
Object.defineProperty(exports, "stringifyObjectValues", { enumerable: true, get: function () { return utils_1.stringifyObjectValues; } });
|
|
98
|
+
Object.defineProperty(exports, "Observable", { enumerable: true, get: function () { return utils_1.Observable; } });
|
|
99
|
+
Object.defineProperty(exports, "merge", { enumerable: true, get: function () { return utils_1.merge; } });
|
|
94
100
|
var version_1 = require("./version");
|
|
95
101
|
Object.defineProperty(exports, "VERSION", { enumerable: true, get: function () { return version_1.VERSION; } });
|
|
96
102
|
var consts_1 = require("./consts");
|