diff --git a/frontend/__snapshots__/scenes-app-sidepanels--side-panel-settings.png b/frontend/__snapshots__/scenes-app-sidepanels--side-panel-settings.png index 569c9c9f33fba..04be7105dfeed 100644 Binary files a/frontend/__snapshots__/scenes-app-sidepanels--side-panel-settings.png and b/frontend/__snapshots__/scenes-app-sidepanels--side-panel-settings.png differ diff --git a/frontend/src/lib/constants.tsx b/frontend/src/lib/constants.tsx index 556535e73ce27..43458d1dde12f 100644 --- a/frontend/src/lib/constants.tsx +++ b/frontend/src/lib/constants.tsx @@ -142,7 +142,7 @@ export const FEATURE_FLAGS = { POSTHOG_3000_NAV: 'posthog-3000-nav', // owner: @Twixes ENABLE_PROMPTS: 'enable-prompts', // owner: @lharries FEEDBACK_SCENE: 'feedback-scene', // owner: @lharries - NOTEBOOKS: 'notebooks', // owner: #team-monitoring + NOTEBOOKS: 'notebooks', // owner: #team-replay EARLY_ACCESS_FEATURE_SITE_BUTTON: 'early-access-feature-site-button', // owner: @neilkakkar HEDGEHOG_MODE_DEBUG: 'hedgehog-mode-debug', // owner: @benjackwhite GENERIC_SIGNUP_BENEFITS: 'generic-signup-benefits', // experiment, owner: @raquelmsmith @@ -160,7 +160,7 @@ export const FEATURE_FLAGS = { PRODUCT_SPECIFIC_ONBOARDING: 'product-specific-onboarding', // owner: @raquelmsmith REDIRECT_SIGNUPS_TO_INSTANCE: 'redirect-signups-to-instance', // owner: @raquelmsmith APPS_AND_EXPORTS_UI: 'apps-and-exports-ui', // owner: @benjackwhite - SESSION_REPLAY_CORS_PROXY: 'session-replay-cors-proxy', // owner: #team-monitoring + SESSION_REPLAY_CORS_PROXY: 'session-replay-cors-proxy', // owner: #team-replay HOGQL_INSIGHTS_LIFECYCLE: 'hogql-insights-lifecycle', // owner: @mariusandra HOGQL_INSIGHTS_TRENDS: 'hogql-insights-trends', // owner: @Gilbert09 HOGQL_INSIGHT_LIVE_COMPARE: 'hogql-insight-live-compare', // owner: @mariusandra @@ -168,17 +168,18 @@ export const FEATURE_FLAGS = { WEBHOOKS_DENYLIST: 'webhooks-denylist', // owner: #team-pipeline SURVEYS_RESULTS_VISUALIZATIONS: 'surveys-results-visualizations', // owner: @jurajmajerik SURVEYS_PAYGATES: 'surveys-paygates', - CONSOLE_RECORDING_SEARCH: 'console-recording-search', // owner: #team-monitoring + CONSOLE_RECORDING_SEARCH: 'console-recording-search', // owner: #team-replay PERSONS_HOGQL_QUERY: 'persons-hogql-query', // owner: @mariusandra PIPELINE_UI: 'pipeline-ui', // owner: #team-pipeline - NOTEBOOK_CANVASES: 'notebook-canvases', // owner: #team-monitoring - SESSION_RECORDING_SAMPLING: 'session-recording-sampling', // owner: #team-monitoring + NOTEBOOK_CANVASES: 'notebook-canvases', // owner: #team-replay + SESSION_RECORDING_SAMPLING: 'session-recording-sampling', // owner: #team-replay PERSON_FEED_CANVAS: 'person-feed-canvas', // owner: #project-canvas MULTI_PROJECT_FEATURE_FLAGS: 'multi-project-feature-flags', // owner: @jurajmajerik #team-feature-success - NETWORK_PAYLOAD_CAPTURE: 'network-payload-capture', // owner: #team-monitoring + NETWORK_PAYLOAD_CAPTURE: 'network-payload-capture', // owner: #team-replay FEATURE_FLAG_COHORT_CREATION: 'feature-flag-cohort-creation', // owner: @neilkakkar #team-feature-success INSIGHT_HORIZONTAL_CONTROLS: 'insight-horizontal-controls', // owner: @benjackwhite ALWAYS_SHOW_SEEKBAR_PREVIEW: 'always-show-seekbar-preview', // owner: @pauldambra + SESSION_REPLAY_MOBILE: 'session-replay-mobile', // owner: #team-replay } as const export type FeatureFlagKey = (typeof FEATURE_FLAGS)[keyof typeof FEATURE_FLAGS] diff --git a/frontend/src/scenes/insights/summarizeInsight.ts b/frontend/src/scenes/insights/summarizeInsight.ts index a0f4aca384486..4fcf69fb0924c 100644 --- a/frontend/src/scenes/insights/summarizeInsight.ts +++ b/frontend/src/scenes/insights/summarizeInsight.ts @@ -1,3 +1,4 @@ +import { useValues } from 'kea' import { RETENTION_FIRST_TIME } from 'lib/constants' import { KEY_MAPPING } from 'lib/taxonomy' import { alphabet, capitalizeFirstLetter } from 'lib/utils' @@ -16,10 +17,12 @@ import { humanizePathsEventTypes, } from 'scenes/insights/utils' import { retentionOptions } from 'scenes/retention/constants' -import { apiValueToMathType, MathCategory, MathDefinition } from 'scenes/trends/mathsLogic' +import { apiValueToMathType, MathCategory, MathDefinition, mathsLogic } from 'scenes/trends/mathsLogic' import { mathsLogicType } from 'scenes/trends/mathsLogicType' +import { cohortsModel } from '~/models/cohortsModel' import { cohortsModelType } from '~/models/cohortsModelType' +import { groupsModel } from '~/models/groupsModel' import { groupsModelType } from '~/models/groupsModelType' import { extractExpressionComment } from '~/queries/nodes/DataTable/utils' import { BreakdownFilter, InsightQueryNode, Node } from '~/queries/schema' @@ -352,3 +355,12 @@ export function summarizeInsight( ? summarizeInsightFilters(filters, context) : '' } + +export function useSummarizeInsight(): (query: Node | undefined | null, filters?: Partial) => string { + const { aggregationLabel } = useValues(groupsModel) + const { cohortsById } = useValues(cohortsModel) + const { mathDefinitions } = useValues(mathsLogic) + + return (query, filters) => + summarizeInsight(query, filters || {}, { aggregationLabel, cohortsById, mathDefinitions }) +} diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeQuery.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeQuery.tsx index e41e86158f806..dd9e194634abc 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeQuery.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeQuery.tsx @@ -14,6 +14,7 @@ import { urls } from 'scenes/urls' import { insightDataLogic } from 'scenes/insights/insightDataLogic' import { insightLogic } from 'scenes/insights/insightLogic' import { JSONContent } from '@tiptap/core' +import { useSummarizeInsight } from 'scenes/insights/summarizeInsight' const DEFAULT_QUERY: QuerySchema = { kind: NodeKind.DataTableNode, @@ -34,6 +35,7 @@ const Component = ({ const nodeLogic = useMountedLogic(notebookNodeLogic) const { expanded } = useValues(nodeLogic) const { setTitlePlaceholder } = useActions(nodeLogic) + const summarizeInsight = useSummarizeInsight() useEffect(() => { let title = 'Query' @@ -46,10 +48,14 @@ const Component = ({ } } if (query.kind === NodeKind.InsightVizNode) { - if (query.source.kind) { - title = query.source.kind.replace('Node', '').replace('Query', '') - } else { - title = 'Insight' + title = summarizeInsight(query) + + if (!title) { + if (query.source.kind) { + title = query.source.kind.replace('Node', '').replace('Query', '') + } else { + title = 'Insight' + } } } if (query.kind === NodeKind.SavedInsightNode) { diff --git a/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.ts b/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.ts index c360a172388c6..0f6b87d473200 100644 --- a/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.ts +++ b/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.ts @@ -4,7 +4,9 @@ import { captureException } from '@sentry/react' import { actions, connect, defaults, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import api from 'lib/api' +import { FEATURE_FLAGS } from 'lib/constants' import { Dayjs, dayjs } from 'lib/dayjs' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { toParams } from 'lib/utils' import { chainToElements } from 'lib/utils/elements-chain' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' @@ -41,9 +43,10 @@ let postHogEEModule: PostHogEE const parseEncodedSnapshots = async ( items: (EncodedRecordingSnapshot | string)[], - sessionId: string + sessionId: string, + withMobileTransformer: boolean ): Promise => { - if (!postHogEEModule) { + if (!postHogEEModule && withMobileTransformer) { postHogEEModule = await posthogEE() } return items.flatMap((l) => { @@ -167,6 +170,7 @@ export const sessionRecordingDataLogic = kea([ key(({ sessionRecordingId }) => sessionRecordingId || 'no-session-recording-id'), connect({ logic: [eventUsageLogic], + values: [featureFlagLogic, ['featureFlags']], }), defaults({ sessionPlayerMetaData: null as SessionRecordingType | null, @@ -342,7 +346,11 @@ export const sessionRecordingDataLogic = kea([ ) data.snapshots = prepareRecordingSnapshots( - await parseEncodedSnapshots(encodedResponse, props.sessionRecordingId), + await parseEncodedSnapshots( + encodedResponse, + props.sessionRecordingId, + !!values.featureFlags[FEATURE_FLAGS.SESSION_REPLAY_MOBILE] + ), values.sessionPlayerSnapshotData?.snapshots ?? [] ) } else { @@ -354,7 +362,11 @@ export const sessionRecordingDataLogic = kea([ const response = await api.recordings.listSnapshots(props.sessionRecordingId, params) if (response.snapshots) { data.snapshots = prepareRecordingSnapshots( - await parseEncodedSnapshots(response.snapshots, props.sessionRecordingId), + await parseEncodedSnapshots( + response.snapshots, + props.sessionRecordingId, + !!values.featureFlags[FEATURE_FLAGS.SESSION_REPLAY_MOBILE] + ), values.sessionPlayerSnapshotData?.snapshots ?? [] ) } diff --git a/package.json b/package.json index 48bf5eeb00972..ad5f847cc1b16 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,7 @@ "monaco-editor": "^0.39.0", "papaparse": "^5.4.1", "pmtiles": "^2.11.0", - "posthog-js": "1.93.1", + "posthog-js": "1.93.5", "posthog-js-lite": "2.0.0-alpha5", "prettier": "^2.8.8", "prop-types": "^15.7.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ecf0f3ef8100..64054b4f22022 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -222,8 +222,8 @@ dependencies: specifier: ^2.11.0 version: 2.11.0 posthog-js: - specifier: 1.93.1 - version: 1.93.1 + specifier: 1.93.5 + version: 1.93.5 posthog-js-lite: specifier: 2.0.0-alpha5 version: 2.0.0-alpha5 @@ -324,7 +324,7 @@ dependencies: optionalDependencies: fsevents: specifier: ^2.3.2 - version: 2.3.2 + version: 2.3.3 devDependencies: '@babel/core': @@ -644,7 +644,7 @@ devDependencies: version: 7.5.1 storybook-addon-pseudo-states: specifier: 2.1.2 - version: 2.1.2(@storybook/components@7.5.1)(@storybook/core-events@7.5.1)(@storybook/manager-api@7.5.3)(@storybook/preview-api@7.5.3)(@storybook/theming@7.5.1)(react-dom@18.2.0)(react@18.2.0) + version: 2.1.2(@storybook/components@7.5.1)(@storybook/core-events@7.5.1)(@storybook/manager-api@7.6.3)(@storybook/preview-api@7.6.3)(@storybook/theming@7.5.1)(react-dom@18.2.0)(react@18.2.0) style-loader: specifier: ^2.0.0 version: 2.0.0(webpack@5.88.2) @@ -1023,6 +1023,14 @@ packages: dependencies: '@babel/types': 7.23.4 + /@babel/parser@7.23.5: + resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.5 + dev: true + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.10): resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} engines: {node: '>=6.9.0'} @@ -2145,6 +2153,15 @@ packages: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + /@babel/types@7.23.5: + resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} dev: true @@ -4728,6 +4745,17 @@ packages: tiny-invariant: 1.3.1 dev: true + /@storybook/channels@7.6.3: + resolution: {integrity: sha512-o9J0TBbFon16tUlU5V6kJgzAlsloJcS1cTHWqh3VWczohbRm+X1PLNUihJ7Q8kBWXAuuJkgBu7RQH7Ib46WyYg==} + dependencies: + '@storybook/client-logger': 7.6.3 + '@storybook/core-events': 7.6.3 + '@storybook/global': 5.0.0 + qs: 6.11.2 + telejson: 7.2.0 + tiny-invariant: 1.3.1 + dev: true + /@storybook/cli@7.5.1: resolution: {integrity: sha512-qKIJs8gqXTy0eSEbt0OW5nsJqiV/2+N1eWoiBiIxoZ+8b0ACXIAUcE/N6AsEDUqIq8AMK7lebqjEfIAt2Sp7Mg==} hasBin: true @@ -4792,6 +4820,12 @@ packages: '@storybook/global': 5.0.0 dev: true + /@storybook/client-logger@7.6.3: + resolution: {integrity: sha512-BpsCnefrBFdxD6ukMjAblm1D6zB4U5HR1I85VWw6LOqZrfzA6l/1uBxItz0XG96HTjngbvAabWf5k7ZFCx5UCg==} + dependencies: + '@storybook/global': 5.0.0 + dev: true + /@storybook/codemod@7.5.1: resolution: {integrity: sha512-PqHGOz/CZnRG9pWgshezCacu524CrXOJrCOwMUP9OMpH0Jk/NhBkHaBZrB8wMjn5hekTj0UmRa/EN8wJm9CCUQ==} dependencies: @@ -4886,6 +4920,12 @@ packages: ts-dedent: 2.2.0 dev: true + /@storybook/core-events@7.6.3: + resolution: {integrity: sha512-Vu3JX1mjtR8AX84lyqWsi2s2lhD997jKRWVznI3wx+UpTk8t7TTMLFk2rGYJRjaornhrqwvLYpnmtxRSxW9BOQ==} + dependencies: + ts-dedent: 2.2.0 + dev: true + /@storybook/core-server@7.5.1: resolution: {integrity: sha512-DD4BXCH91aZJoFuu0cQwG1ZUmE59kG5pazuE3S89zH1GwKS1jWyeAv4EwEfvynT5Ah1ctd8QdCZCSXVzjq0qcw==} dependencies: @@ -4987,6 +5027,12 @@ packages: type-fest: 2.19.0 dev: true + /@storybook/csf@0.1.2: + resolution: {integrity: sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==} + dependencies: + type-fest: 2.19.0 + dev: true + /@storybook/docs-mdx@0.1.0: resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} dev: true @@ -5034,29 +5080,27 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/manager-api@7.5.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-d8mVLr/5BEG4bAS2ZeqYTy/aX4jPEpZHdcLaWoB4mAM+PAL9wcWsirUyApKtDVYLITJf/hd8bb2Dm2ok6E45gA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + /@storybook/manager-api@7.6.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-soDH7GZuukkhYRGzlw4jhCm5EzjfkuIAtb37/DFplqxuVbvlyJEVzkMUM2KQO7kq0/8GlWPiZ5mn56wagYyhKQ==} dependencies: - '@storybook/channels': 7.5.3 - '@storybook/client-logger': 7.5.3 - '@storybook/core-events': 7.5.3 - '@storybook/csf': 0.1.1 + '@storybook/channels': 7.6.3 + '@storybook/client-logger': 7.6.3 + '@storybook/core-events': 7.6.3 + '@storybook/csf': 0.1.2 '@storybook/global': 5.0.0 - '@storybook/router': 7.5.3(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 7.5.3(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.5.3 + '@storybook/router': 7.6.3 + '@storybook/theming': 7.6.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.6.3 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) semver: 7.5.4 store2: 2.14.2 telejson: 7.2.0 ts-dedent: 2.2.0 + transitivePeerDependencies: + - react + - react-dom dev: true /@storybook/manager@7.5.1: @@ -5162,6 +5206,25 @@ packages: util-deprecate: 1.0.2 dev: true + /@storybook/preview-api@7.6.3: + resolution: {integrity: sha512-uPaK7yLE1P++F+IOb/1j9pgdCwfMYZrUPHogF/Mf9r4cfEjDCcIeKgGMcsbU1KnkzNQQGPh8JRzRr/iYnLjswg==} + dependencies: + '@storybook/channels': 7.6.3 + '@storybook/client-logger': 7.6.3 + '@storybook/core-events': 7.6.3 + '@storybook/csf': 0.1.2 + '@storybook/global': 5.0.0 + '@storybook/types': 7.6.3 + '@types/qs': 6.9.10 + dequal: 2.0.3 + lodash: 4.17.21 + memoizerific: 1.11.3 + qs: 6.11.2 + synchronous-promise: 2.0.17 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + dev: true + /@storybook/preview@7.5.1: resolution: {integrity: sha512-nfZC103z9Cy27FrJKUr2IjDuVt8Mvn1Z5gZ0TtJihoK7sfLTv29nd/XU9zzrb/epM3o8UEzc63xZZsMaToDbAw==} dev: true @@ -5286,17 +5349,12 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/router@7.5.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-/iNYCFore7R5n6eFHbBYoB0P2/sybTVpA+uXTNUd3UEt7Ro6CEslTaFTEiH2RVQwOkceBp/NpyWon74xZuXhMg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + /@storybook/router@7.6.3: + resolution: {integrity: sha512-NZfhJqsXYca9mZCL/LGx6FmZDbrxX2S4ImW7Tqdtcc/sSlZ0BpCDkNUTesCA287cmoKMhXZRh/+bU+C2h2a+bw==} dependencies: - '@storybook/client-logger': 7.5.3 + '@storybook/client-logger': 7.6.3 memoizerific: 1.11.3 qs: 6.11.2 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) dev: true /@storybook/source-loader@7.5.1(react-dom@18.2.0)(react@18.2.0): @@ -5387,14 +5445,14 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/theming@7.5.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Cjmthe1MAk0z4RKCZ7m72gAD8YD0zTAH97z5ryM1Qv84QXjiCQ143fGOmYz1xEQdNFpOThPcwW6FEccLHTkVcg==} + /@storybook/theming@7.6.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-9ToNU2LM6a2kVBjOXitXEeEOuMurVLhn+uaZO1dJjv8NGnJVYiLwNPwrLsImiUD8/XXNuil972aanBR6+Aj9jw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) - '@storybook/client-logger': 7.5.3 + '@storybook/client-logger': 7.6.3 '@storybook/global': 5.0.0 memoizerific: 1.11.3 react: 18.2.0 @@ -5419,6 +5477,15 @@ packages: file-system-cache: 2.3.0 dev: true + /@storybook/types@7.6.3: + resolution: {integrity: sha512-vj9Jzg5eR52l8O9512QywbQpNdo67Z6BQWR8QoZRcG+/Bhzt08YI8IZMPQLFMKzcmWDPK0blQ4GfyKDYplMjPA==} + dependencies: + '@storybook/channels': 7.6.3 + '@types/babel__core': 7.20.5 + '@types/express': 4.17.21 + file-system-cache: 2.3.0 + dev: true + /@sucrase/jest-plugin@3.0.0(jest@29.7.0)(sucrase@3.29.0): resolution: {integrity: sha512-VRY6YKYImVWiRg1H3Yu24hwB1UPJDSDR62R/n+lOHR3+yDrfHEIAoddJivblMYN6U3vD+ndfTSrecZ9Jl+iGNw==} peerDependencies: @@ -5969,6 +6036,16 @@ packages: '@types/babel__traverse': 7.20.4 dev: true + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + dependencies: + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 + '@types/babel__generator': 7.6.7 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.4 + dev: true + /@types/babel__generator@7.6.6: resolution: {integrity: sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==} dependencies: @@ -11210,6 +11287,7 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true + dev: true optional: true /fsevents@2.3.3: @@ -15510,8 +15588,8 @@ packages: resolution: {integrity: sha512-tlkBdypJuvK/s00n4EiQjwYVfuuZv6vt8BF3g1ooIQa2Gz9Vz80p8q3qsPLZ0V5ErGRy6i3Q4fWC9TDzR7GNRQ==} dev: false - /posthog-js@1.93.1: - resolution: {integrity: sha512-tbzxNN86zqC/D/HEMi4dJgW4GmiUHmUbBJ+zHFKABXxeS53SVzuJKkQxeNL9GdfpS9304i2D7ALsXoJ8pszAvw==} + /posthog-js@1.93.5: + resolution: {integrity: sha512-XsBzkBWufrhrvqtylg9cZXB2qu6Fhc92H243vCfDfDp+Tp1ij/vDiMNKL1NXaMR/2VV9jYc8d+24SzDskXJejQ==} dependencies: fflate: 0.4.8 dev: false @@ -17713,7 +17791,7 @@ packages: resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} dev: true - /storybook-addon-pseudo-states@2.1.2(@storybook/components@7.5.1)(@storybook/core-events@7.5.1)(@storybook/manager-api@7.5.3)(@storybook/preview-api@7.5.3)(@storybook/theming@7.5.1)(react-dom@18.2.0)(react@18.2.0): + /storybook-addon-pseudo-states@2.1.2(@storybook/components@7.5.1)(@storybook/core-events@7.5.1)(@storybook/manager-api@7.6.3)(@storybook/preview-api@7.6.3)(@storybook/theming@7.5.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-AHv6q1JiQEUnMyZE3729iV6cNmBW7bueeytc4Lga4+8W1En8YNea5VjqAdrDNJhXVU0QEEIGtxkD3EoC9aVWLw==} peerDependencies: '@storybook/components': ^7.4.6 @@ -17731,8 +17809,8 @@ packages: dependencies: '@storybook/components': 7.5.1(@types/react-dom@18.2.14)(@types/react@17.0.52)(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': 7.5.1 - '@storybook/manager-api': 7.5.3(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.5.3 + '@storybook/manager-api': 7.6.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.6.3 '@storybook/theming': 7.5.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) diff --git a/posthog/test/base.py b/posthog/test/base.py index 21a2fc17c68b7..a9c941f50b572 100644 --- a/posthog/test/base.py +++ b/posthog/test/base.py @@ -10,6 +10,10 @@ from unittest.mock import patch import freezegun + +# we have to import pendulum for the side effect of importing it +# freezegun.FakeDateTime and pendulum don't play nicely otherwise +import pendulum # noqa F401 import pytest import sqlparse from django.apps import apps