Skip to content

Commit c2acbc9

Browse files
authored
chore: remove circular dependencies (#1618)
1 parent 6da785b commit c2acbc9

17 files changed

+136
-127
lines changed

Diff for: src/__tests__/utils.test.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77
* currently not supported in the browser lib).
88
*/
99

10-
import { _copyAndTruncateStrings, isCrossDomainCookie, _base64Encode } from '../utils'
10+
import { _copyAndTruncateStrings, isCrossDomainCookie } from '../utils'
1111
import { Info } from '../utils/event-utils'
1212
import { isLikelyBot, DEFAULT_BLOCKED_UA_STRS, isBlockedUA, NavigatorUAData } from '../utils/blocked-uas'
1313
import { expect } from '@jest/globals'
1414

15+
import { _base64Encode } from '../utils/encode-utils'
16+
1517
function userAgentFor(botString: string) {
1618
const randOne = (Math.random() + 1).toString(36).substring(7)
1719
const randTwo = (Math.random() + 1).toString(36).substring(7)

Diff for: src/autocapture-utils.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import { AutocaptureConfig, Properties } from './types'
2-
import { each, entries, includes, trim } from './utils'
2+
import { each, entries } from './utils'
33

44
import { isArray, isNullish, isString, isUndefined } from './utils/type-utils'
55
import { logger } from './utils/logger'
66
import { window } from './utils/globals'
77
import { isDocumentFragment, isElementNode, isTag, isTextNode } from './utils/element-utils'
8+
import { includes, trim } from './utils/string-utils'
89

910
export function splitClassString(s: string): string[] {
1011
return s ? trim(s).split(/\s+/) : []

Diff for: src/autocapture.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { each, extend, includes, registerEvent } from './utils'
1+
import { each, extend, registerEvent } from './utils'
22
import {
33
autocaptureCompatibleElements,
44
getClassNames,
@@ -24,6 +24,7 @@ import { createLogger } from './utils/logger'
2424
import { document, window } from './utils/globals'
2525
import { convertToURL } from './utils/request-utils'
2626
import { isDocumentFragment, isElementNode, isTag, isTextNode } from './utils/element-utils'
27+
import { includes } from './utils/string-utils'
2728

2829
const logger = createLogger('[AutoCapture]')
2930

Diff for: src/consent.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { PostHog } from './posthog-core'
2-
import { find, includes } from './utils'
2+
import { find } from './utils'
33
import { assignableWindow, navigator } from './utils/globals'
44
import { cookieStore, localStore } from './storage'
55
import { PersistentStore } from './types'
6+
import { includes } from './utils/string-utils'
67

78
const OPT_OUT_PREFIX = '__ph_opt_in_out_'
89

Diff for: src/customizations/before-send.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { clampToRange } from '../utils/number-utils'
22
import { BeforeSendFn, CaptureResult, KnownEventName } from '../types'
3-
import { includes } from '../utils'
43
import { isArray, isUndefined } from '../utils/type-utils'
4+
import { includes } from '../utils/string-utils'
55

66
function appendArray(currentValue: string[] | undefined, sampleType: string | string[]): string[] {
77
return [...(currentValue ? currentValue : []), ...(isArray(sampleType) ? sampleType : [sampleType])]

Diff for: src/customizations/setAllPersonProfilePropertiesAsPersonPropertiesForFlags.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { PostHog } from '../posthog-core'
22
import { CAMPAIGN_PARAMS, EVENT_TO_PERSON_PROPERTIES, Info } from '../utils/event-utils'
3-
import { each, extend, includes } from '../utils'
3+
import { each, extend } from '../utils'
4+
import { includes } from '../utils/string-utils'
45

56
export const setAllPersonProfilePropertiesAsPersonPropertiesForFlags = (posthog: PostHog): void => {
67
const allProperties = extend({}, Info.properties(), Info.campaignParams(), Info.referrerInfo())

Diff for: src/extensions/replay/sessionrecording.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ import { isLocalhost } from '../../utils/request-utils'
4545
import { MutationRateLimiter } from './mutation-rate-limiter'
4646
import { gzipSync, strFromU8, strToU8 } from 'fflate'
4747
import { clampToRange } from '../../utils/number-utils'
48-
import { includes } from '../../utils'
4948
import Config from '../../config'
49+
import { includes } from '../../utils/string-utils'
5050

5151
const LOGGER_PREFIX = '[SessionRecording]'
5252
const logger = createLogger(LOGGER_PREFIX)

Diff for: src/heatmaps.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { includes, registerEvent } from './utils'
1+
import { registerEvent } from './utils'
22
import RageClick from './extensions/rageclick'
33
import { DeadClickCandidate, Properties, RemoteConfig } from './types'
44
import { PostHog } from './posthog-core'
@@ -10,6 +10,7 @@ import { isEmptyObject, isObject, isUndefined } from './utils/type-utils'
1010
import { createLogger } from './utils/logger'
1111
import { isElementInToolbar, isElementNode, isTag } from './utils/element-utils'
1212
import { DeadClicksAutocapture, isDeadClicksEnabledForHeatmaps } from './extensions/dead-clicks-autocapture'
13+
import { includes } from './utils/string-utils'
1314

1415
const DEFAULT_FLUSH_INTERVAL = 5000
1516

Diff for: src/posthog-core.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@ import {
44
each,
55
eachArray,
66
extend,
7-
includes,
87
registerEvent,
98
safewrapClass,
109
isCrossDomainCookie,
11-
isDistinctIdStringLike,
1210
} from './utils'
1311
import { assignableWindow, document, location, navigator, userAgent, window } from './utils/globals'
1412
import { PostHogFeatureFlags } from './posthog-featureflags'
@@ -84,6 +82,7 @@ import { WebExperiments } from './web-experiments'
8482
import { PostHogExceptions } from './posthog-exceptions'
8583
import { SiteApps } from './site-apps'
8684
import { DeadClicksAutocapture, isDeadClicksEnabledForAutocapture } from './extensions/dead-clicks-autocapture'
85+
import { includes, isDistinctIdStringLike } from './utils/string-utils'
8786

8887
/*
8988
SIMPLE STYLE GUIDE:

Diff for: src/posthog-persistence.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* eslint camelcase: "off" */
22

3-
import { each, extend, include, stripEmptyProperties, stripLeadingDollar } from './utils'
3+
import { each, extend, include, stripEmptyProperties } from './utils'
44
import { cookieStore, localPlusCookieStore, localStore, memoryStore, sessionStore } from './storage'
55
import { PersistentStore, PostHogConfig, Properties } from './types'
66
import {
@@ -15,6 +15,7 @@ import {
1515
import { isEmptyObject, isObject, isUndefined } from './utils/type-utils'
1616
import { Info } from './utils/event-utils'
1717
import { logger } from './utils/logger'
18+
import { stripLeadingDollar } from './utils/string-utils'
1819

1920
const CASE_INSENSITIVE_PERSISTENCE_TYPES: readonly Lowercase<PostHogConfig['persistence']>[] = [
2021
'cookie',

Diff for: src/request.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { _base64Encode, each, find } from './utils'
1+
import { each, find } from './utils'
22
import Config from './config'
33
import { Compression, RequestOptions, RequestResponse } from './types'
44
import { formDataToQuery } from './utils/request-utils'
@@ -7,6 +7,8 @@ import { logger } from './utils/logger'
77
import { AbortController, fetch, navigator, XMLHttpRequest } from './utils/globals'
88
import { gzipSync, strToU8 } from 'fflate'
99

10+
import { _base64Encode } from './utils/encode-utils'
11+
1012
// eslint-disable-next-line compat/compat
1113
export const SUPPORTS_REQUEST = !!XMLHttpRequest || !!fetch
1214

Diff for: src/utils/encode-utils.ts

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import { isNull } from './type-utils'
2+
3+
export function _base64Encode(data: null): null
4+
export function _base64Encode(data: undefined): undefined
5+
export function _base64Encode(data: string): string
6+
export function _base64Encode(data: string | null | undefined): string | null | undefined {
7+
const b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
8+
let o1,
9+
o2,
10+
o3,
11+
h1,
12+
h2,
13+
h3,
14+
h4,
15+
bits,
16+
i = 0,
17+
ac = 0,
18+
enc = ''
19+
const tmp_arr: string[] = []
20+
21+
if (!data) {
22+
return data
23+
}
24+
25+
data = utf8Encode(data)
26+
27+
do {
28+
// pack three octets into four hexets
29+
o1 = data.charCodeAt(i++)
30+
o2 = data.charCodeAt(i++)
31+
o3 = data.charCodeAt(i++)
32+
33+
bits = (o1 << 16) | (o2 << 8) | o3
34+
35+
h1 = (bits >> 18) & 0x3f
36+
h2 = (bits >> 12) & 0x3f
37+
h3 = (bits >> 6) & 0x3f
38+
h4 = bits & 0x3f
39+
40+
// use hexets to index into b64, and append result to encoded string
41+
tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4)
42+
} while (i < data.length)
43+
44+
enc = tmp_arr.join('')
45+
46+
switch (data.length % 3) {
47+
case 1:
48+
enc = enc.slice(0, -2) + '=='
49+
break
50+
case 2:
51+
enc = enc.slice(0, -1) + '='
52+
break
53+
}
54+
55+
return enc
56+
}
57+
58+
export const utf8Encode = function (string: string): string {
59+
string = (string + '').replace(/\r\n/g, '\n').replace(/\r/g, '\n')
60+
61+
let utftext = '',
62+
start,
63+
end
64+
let stringl = 0,
65+
n
66+
67+
start = end = 0
68+
stringl = string.length
69+
70+
for (n = 0; n < stringl; n++) {
71+
const c1 = string.charCodeAt(n)
72+
let enc = null
73+
74+
if (c1 < 128) {
75+
end++
76+
} else if (c1 > 127 && c1 < 2048) {
77+
enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128)
78+
} else {
79+
enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128)
80+
}
81+
if (!isNull(enc)) {
82+
if (end > start) {
83+
utftext += string.substring(start, end)
84+
}
85+
utftext += enc
86+
start = end = n + 1
87+
}
88+
}
89+
90+
if (end > start) {
91+
utftext += string.substring(start, string.length)
92+
}
93+
94+
return utftext
95+
}

Diff for: src/utils/event-utils.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ import { getQueryParam, convertToURL } from './request-utils'
22
import { isNull } from './type-utils'
33
import { Properties } from '../types'
44
import Config from '../config'
5-
import { each, extend, stripEmptyProperties, stripLeadingDollar } from './index'
5+
import { each, extend, stripEmptyProperties } from './index'
66
import { document, location, userAgent, window } from './globals'
77
import { detectBrowser, detectBrowserVersion, detectDevice, detectDeviceType, detectOS } from './user-agent-utils'
8+
import { stripLeadingDollar } from './string-utils'
89

910
const URL_REGEX_PREFIX = 'https?://(.*)'
1011

0 commit comments

Comments
 (0)