Skip to content

Commit ac79ae1

Browse files
chore(analytics): deprecation warnings for v8 API ahead of future major release
1 parent 10e618f commit ac79ae1

File tree

3 files changed

+169
-11
lines changed

3 files changed

+169
-11
lines changed

packages/analytics/__tests__/analytics.test.ts

+136-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import { describe, expect, it, xit } from '@jest/globals';
1+
import { jest, describe, expect, it, xit, beforeEach } from '@jest/globals';
2+
3+
// @ts-ignore test
4+
import FirebaseModule from '../../app/lib/internal/FirebaseModule';
25

36
import {
47
firebase,
@@ -58,6 +61,11 @@ import {
5861
settings,
5962
} from '../lib';
6063

64+
import {
65+
createCheckV9Deprecation,
66+
CheckV9DeprecationFunction,
67+
} from '../../app/lib/common/unitTestUtils';
68+
6169
describe('Analytics', function () {
6270
describe('namespace', function () {
6371
it('accessible from firebase.app()', function () {
@@ -924,4 +932,131 @@ describe('Analytics', function () {
924932
expect(settings).toBeDefined();
925933
});
926934
});
935+
936+
describe('test `console.warn` is called for RNFB v8 API & not called for v9 API', function () {
937+
let analyticsRefV9Deprecation: CheckV9DeprecationFunction;
938+
939+
beforeEach(function () {
940+
analyticsRefV9Deprecation = createCheckV9Deprecation(['analytics']);
941+
942+
// @ts-ignore test
943+
jest.spyOn(FirebaseModule.prototype, 'native', 'get').mockImplementation(() => {
944+
return new Proxy(
945+
{},
946+
{
947+
get: () =>
948+
jest.fn().mockResolvedValue({
949+
source: 'cache',
950+
changes: [],
951+
documents: [],
952+
metadata: {},
953+
path: 'foo',
954+
} as never),
955+
},
956+
);
957+
});
958+
});
959+
960+
describe('Analytics', function () {
961+
it('analytics.logEvent()', function () {
962+
const analytics = getAnalytics();
963+
analyticsRefV9Deprecation(
964+
() => logEvent(analytics, 'invertase_event'),
965+
() => analytics.logEvent('invertase_event'),
966+
'logEvent',
967+
);
968+
});
969+
970+
it('analytics.setAnalyticsCollectionEnabled()', function () {
971+
const analytics = getAnalytics();
972+
analyticsRefV9Deprecation(
973+
() => setAnalyticsCollectionEnabled(analytics, true),
974+
() => analytics.setAnalyticsCollectionEnabled(true),
975+
'setAnalyticsCollectionEnabled',
976+
);
977+
});
978+
979+
it('analytics.setSessionTimeoutDuration()', function () {
980+
const analytics = getAnalytics();
981+
analyticsRefV9Deprecation(
982+
() => setSessionTimeoutDuration(analytics, 180000),
983+
() => analytics.setSessionTimeoutDuration(180000),
984+
'setSessionTimeoutDuration',
985+
);
986+
});
987+
988+
it('analytics.getAppInstanceId()', function () {
989+
const analytics = getAnalytics();
990+
analyticsRefV9Deprecation(
991+
() => getAppInstanceId(analytics),
992+
() => analytics.getAppInstanceId(),
993+
'getAppInstanceId',
994+
);
995+
});
996+
997+
it('analytics.getSessionId()', function () {
998+
const analytics = getAnalytics();
999+
analyticsRefV9Deprecation(
1000+
() => getSessionId(analytics),
1001+
() => analytics.getSessionId(),
1002+
'getSessionId',
1003+
);
1004+
});
1005+
1006+
it('analytics.setUserId()', function () {
1007+
const analytics = getAnalytics();
1008+
analyticsRefV9Deprecation(
1009+
() => setUserId(analytics, 'id'),
1010+
() => analytics.setUserId('id'),
1011+
'setUserId',
1012+
);
1013+
});
1014+
1015+
it('analytics.setUserProperty()', function () {
1016+
const analytics = getAnalytics();
1017+
analyticsRefV9Deprecation(
1018+
() => setUserProperty(analytics, 'prop', 'value'),
1019+
() => analytics.setUserProperty('prop', 'value'),
1020+
'setUserProperty',
1021+
);
1022+
});
1023+
1024+
it('analytics.setUserProperties()', function () {
1025+
const analytics = getAnalytics();
1026+
analyticsRefV9Deprecation(
1027+
() => setUserProperties(analytics, { prop: 'value' }),
1028+
() => analytics.setUserProperties({ prop: 'value' }),
1029+
'setUserProperties',
1030+
);
1031+
});
1032+
1033+
it('analytics.resetAnalyticsData()', function () {
1034+
const analytics = getAnalytics();
1035+
analyticsRefV9Deprecation(
1036+
() => resetAnalyticsData(analytics),
1037+
() => analytics.resetAnalyticsData(),
1038+
'resetAnalyticsData',
1039+
);
1040+
});
1041+
1042+
it('analytics.setConsent()', function () {
1043+
const analytics = getAnalytics();
1044+
analyticsRefV9Deprecation(
1045+
() => setConsent(analytics, { ad_storage: true }),
1046+
() => analytics.setConsent({ ad_storage: true }),
1047+
'setConsent',
1048+
);
1049+
});
1050+
1051+
it('analytics.logAddPaymentInfo()', function () {
1052+
const analytics = getAnalytics();
1053+
analyticsRefV9Deprecation(
1054+
// no corresponding method
1055+
() => {},
1056+
() => analytics.logAddPaymentInfo({ value: 1 }),
1057+
'logAddPaymentInfo',
1058+
);
1059+
});
1060+
});
1061+
});
9271062
});

packages/analytics/lib/modular/index.js

+17-10
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { firebase } from '..';
2+
import { MODULAR_DEPRECATION_ARG } from '../../../app/lib/common';
23

34
/**
45
* @typedef {import('@firebase/app').FirebaseApp} FirebaseApp
@@ -73,7 +74,7 @@ export function initializeAnalytics(app, options) {
7374
* @returns {Promise<void>}
7475
*/
7576
export function logEvent(analytics, name, params = {}, options = {}) {
76-
return analytics.logEvent(name, params, options);
77+
return analytics.logEvent.call(analytics, name, params, options, MODULAR_DEPRECATION_ARG);
7778
}
7879

7980
/**
@@ -83,7 +84,7 @@ export function logEvent(analytics, name, params = {}, options = {}) {
8384
* @returns {Promise<void>}
8485
*/
8586
export function setAnalyticsCollectionEnabled(analytics, enabled) {
86-
return analytics.setAnalyticsCollectionEnabled(enabled);
87+
return analytics.setAnalyticsCollectionEnabled.call(analytics, enabled, MODULAR_DEPRECATION_ARG);
8788
}
8889

8990
/**
@@ -93,7 +94,8 @@ export function setAnalyticsCollectionEnabled(analytics, enabled) {
9394
* @returns {Promise<void>}
9495
*/
9596
export function setSessionTimeoutDuration(analytics, milliseconds = 1800000) {
96-
return analytics.setSessionTimeoutDuration(milliseconds);
97+
// This doesn't exist on firebase-js-sdk, but probably should keep this for android & iOS
98+
return analytics.setSessionTimeoutDuration.call(analytics, milliseconds, MODULAR_DEPRECATION_ARG);
9799
}
98100

99101
/**
@@ -102,7 +104,8 @@ export function setSessionTimeoutDuration(analytics, milliseconds = 1800000) {
102104
* @returns {Promise<string|null>} Returns the app instance id or null on android if FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE has been set to FirebaseAnalytics.ConsentStatus.DENIED and null on iOS if ConsentType.analyticsStorage has been set to ConsentStatus.denied.
103105
*/
104106
export function getAppInstanceId(analytics) {
105-
return analytics.getAppInstanceId();
107+
// This doesn't exist on firebase-js-sdk, but probably should keep this for android & iOS
108+
return analytics.getAppInstanceId.call(analytics, MODULAR_DEPRECATION_ARG);
106109
}
107110

108111
/**
@@ -112,7 +115,8 @@ export function getAppInstanceId(analytics) {
112115
* @returns {Promise<string|null>} Returns the session id or null if session is expired, null on android if FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE has been set to FirebaseAnalytics.ConsentStatus.DENIED and null on iOS if ConsentType.analyticsStorage has been set to ConsentStatus.denied.
113116
*/
114117
export function getSessionId(analytics) {
115-
return analytics.getSessionId();
118+
// This doesn't exist on firebase-js-sdk, but probably should keep this for android & iOS
119+
return analytics.getSessionId.call(analytics, MODULAR_DEPRECATION_ARG);
116120
}
117121

118122
/**
@@ -122,7 +126,7 @@ export function getSessionId(analytics) {
122126
* @returns {Promise<void>}
123127
*/
124128
export function setUserId(analytics, id) {
125-
return analytics.setUserId(id);
129+
return analytics.setUserId.call(analytics, id, MODULAR_DEPRECATION_ARG);
126130
}
127131

128132
/**
@@ -133,7 +137,8 @@ export function setUserId(analytics, id) {
133137
* @returns {Promise<void>}
134138
*/
135139
export function setUserProperty(analytics, name, value) {
136-
return analytics.setUserProperty(name, value);
140+
// This doesn't exist on firebase-js-sdk, but probably should keep this for android & iOS
141+
return analytics.setUserProperty.call(analytics, name, value, MODULAR_DEPRECATION_ARG);
137142
}
138143

139144
/**
@@ -144,7 +149,7 @@ export function setUserProperty(analytics, name, value) {
144149
* @returns {Promise<void>}
145150
*/
146151
export function setUserProperties(analytics, properties, options = {}) {
147-
return analytics.setUserProperties(properties, options);
152+
return analytics.setUserProperties.call(analytics, properties, options, MODULAR_DEPRECATION_ARG);
148153
}
149154

150155
/**
@@ -153,7 +158,8 @@ export function setUserProperties(analytics, properties, options = {}) {
153158
* @returns {Promise<void>}
154159
*/
155160
export function resetAnalyticsData(analytics) {
156-
return analytics.resetAnalyticsData();
161+
// This doesn't exist on firebase-js-sdk, but probably should keep this for android & iOS
162+
return analytics.resetAnalyticsData.call(analytics, MODULAR_DEPRECATION_ARG);
157163
}
158164

159165
/**
@@ -163,6 +169,7 @@ export function resetAnalyticsData(analytics) {
163169
* @returns {Promise<void>}
164170
*/
165171
export function logAddPaymentInfo(analytics, params) {
172+
// TODO - not sure if this should be deprecated. up to this point.
166173
return analytics.logAddPaymentInfo(params);
167174
}
168175

@@ -586,7 +593,7 @@ export function isSupported() {
586593
* @returns {Promise<void>}
587594
*/
588595
export function setConsent(analytics, consentSettings) {
589-
return analytics.setConsent(consentSettings);
596+
return analytics.setConsent.call(analytics, consentSettings, MODULAR_DEPRECATION_ARG);
590597
}
591598

592599
/**

packages/app/lib/common/index.js

+16
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,22 @@ export function tryJSONStringify(data) {
107107
const NO_REPLACEMENT = true;
108108

109109
const mapOfDeprecationReplacements = {
110+
analytics: {
111+
default: {
112+
logEvent: 'logEvent()',
113+
setAnalyticsCollectionEnabled: 'setAnalyticsCollectionEnabled()',
114+
setSessionTimeoutDuration: 'setSessionTimeoutDuration()',
115+
getAppInstanceId: 'getAppInstanceId()',
116+
getSessionId: 'getSessionId()',
117+
setUserId: 'setUserId()',
118+
setUserProperty: 'setUserProperty()',
119+
setUserProperties: 'setUserProperties()',
120+
resetAnalyticsData: 'resetAnalyticsData()',
121+
setConsent: 'setConsent()',
122+
// TODO are we deprecating all modular methods for each specific event. e.g. `logAddPaymentInfo()`
123+
logAddPaymentInfo: 'logEvent()',
124+
},
125+
},
110126
crashlytics: {
111127
default: {
112128
checkForUnsentReports: 'checkForUnsentReports()',

0 commit comments

Comments
 (0)