Skip to content

Commit 802e2f1

Browse files
committed
feat(react): support firebase v12
1 parent c7ca6b9 commit 802e2f1

File tree

9 files changed

+204
-136
lines changed

9 files changed

+204
-136
lines changed

.changeset/firebase-v12-support.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
"@tanstack-query-firebase/react": minor
3+
---
4+
5+
Add support for Firebase v12
6+
7+
- Updated Firebase peer dependency from v11.3.0 to v12.0.0
8+
- Updated TypeScript target from ES2015 to ES2020 to align with Firebase v12 requirements
9+
- All existing functionality remains compatible with Firebase v12
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
name: Test React Package with Firebase v12
2+
3+
on:
4+
workflow_dispatch:
5+
push:
6+
branches: [main]
7+
pull_request:
8+
branches: [main]
9+
paths:
10+
- 'packages/react/**'
11+
- 'dataconnect-sdk/**'
12+
- '.github/workflows/test-react-firebase-v12.yml'
13+
14+
jobs:
15+
test-react-v12:
16+
name: React Package - Firebase v12
17+
runs-on: ubuntu-latest
18+
19+
steps:
20+
- name: Checkout code
21+
uses: actions/checkout@v4
22+
23+
- name: Setup Node.js
24+
uses: actions/setup-node@v4
25+
with:
26+
node-version: '20'
27+
28+
- name: Enable Corepack
29+
run: corepack enable
30+
31+
- name: Install dependencies
32+
run: pnpm install
33+
34+
- name: Install Java
35+
run: |
36+
sudo apt-get update
37+
sudo apt-get install -y openjdk-17-jdk
38+
java -version
39+
40+
- name: Install Firebase CLI
41+
uses: nick-invision/retry@v3
42+
with:
43+
timeout_minutes: 10
44+
retry_wait_seconds: 60
45+
max_attempts: 3
46+
command: npm i -g firebase-tools@latest
47+
48+
- name: Update to Firebase v12
49+
run: |
50+
# Update root devDependencies to Firebase v12
51+
pnpm add -Dw firebase@^12.1.0
52+
53+
- name: Update Data Connect SDK for Firebase v12
54+
run: |
55+
# Manually update the generated SDK to support Firebase v12
56+
# This is temporary until Firebase CLI officially supports v12
57+
cd dataconnect-sdk/js/default-connector
58+
# Update the peer dependency to include v12
59+
npm pkg set 'peerDependencies.firebase=^12.1.0'
60+
cd ../../..
61+
62+
- name: Reinstall dependencies with v12
63+
run: |
64+
# Install with no-frozen-lockfile to allow dependency changes
65+
pnpm install --no-frozen-lockfile
66+
# Force React package to use Firebase v12
67+
cd packages/react
68+
pnpm add -D firebase@^12.1.0
69+
cd ../..
70+
71+
- name: Verify Firebase v12 is installed
72+
run: |
73+
cd packages/react
74+
pnpm ls firebase | grep -E "firebase.*12\." || (echo "Firebase v12 not found!" && exit 1)
75+
76+
- name: Build React package
77+
run: |
78+
cd packages/react
79+
pnpm build
80+
81+
- name: Run React package tests with emulator
82+
run: |
83+
# Run only React package tests with emulator
84+
firebase emulators:exec --project test-project "cd packages/react && pnpm test:ci"
85+
env:
86+
CI: true
87+

.github/workflows/tests.yaml

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,6 @@ jobs:
2929
- name: Enable Corepack
3030
run: corepack enable
3131

32-
- name: Get pnpm store directory
33-
id: pnpm-cache
34-
shell: bash
35-
run: |
36-
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
37-
38-
- name: Setup pnpm cache
39-
uses: actions/cache@v4
40-
with:
41-
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
42-
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
43-
restore-keys: |
44-
${{ runner.os }}-pnpm-store-
45-
4632
- name: Install dependencies
4733
run: pnpm install
4834

@@ -69,20 +55,6 @@ jobs:
6955
- name: Enable Corepack
7056
run: corepack enable
7157

72-
- name: Get pnpm store directory
73-
id: pnpm-cache
74-
shell: bash
75-
run: |
76-
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
77-
78-
- name: Setup pnpm cache
79-
uses: actions/cache@v4
80-
with:
81-
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
82-
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
83-
restore-keys: |
84-
${{ runner.os }}-pnpm-store-
85-
8658
- name: Install dependencies
8759
run: pnpm install
8860

dataconnect-sdk/js/default-connector/esm/index.esm.js

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6,39 +6,6 @@ export const connectorConfig = {
66
location: 'us-central1'
77
};
88

9-
export const listMoviesRef = (dc) => {
10-
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
11-
dcInstance._useGeneratedSdk();
12-
return queryRef(dcInstance, 'ListMovies');
13-
}
14-
listMoviesRef.operationName = 'ListMovies';
15-
16-
export function listMovies(dc) {
17-
return executeQuery(listMoviesRef(dc));
18-
}
19-
20-
export const getMovieByIdRef = (dcOrVars, vars) => {
21-
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
22-
dcInstance._useGeneratedSdk();
23-
return queryRef(dcInstance, 'GetMovieById', inputVars);
24-
}
25-
getMovieByIdRef.operationName = 'GetMovieById';
26-
27-
export function getMovieById(dcOrVars, vars) {
28-
return executeQuery(getMovieByIdRef(dcOrVars, vars));
29-
}
30-
31-
export const getMetaRef = (dc) => {
32-
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
33-
dcInstance._useGeneratedSdk();
34-
return queryRef(dcInstance, 'GetMeta');
35-
}
36-
getMetaRef.operationName = 'GetMeta';
37-
38-
export function getMeta(dc) {
39-
return executeQuery(getMetaRef(dc));
40-
}
41-
429
export const createMovieRef = (dcOrVars, vars) => {
4310
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
4411
dcInstance._useGeneratedSdk();
@@ -94,3 +61,36 @@ export function deleteMeta(dcOrVars, vars) {
9461
return executeMutation(deleteMetaRef(dcOrVars, vars));
9562
}
9663

64+
export const listMoviesRef = (dc) => {
65+
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
66+
dcInstance._useGeneratedSdk();
67+
return queryRef(dcInstance, 'ListMovies');
68+
}
69+
listMoviesRef.operationName = 'ListMovies';
70+
71+
export function listMovies(dc) {
72+
return executeQuery(listMoviesRef(dc));
73+
}
74+
75+
export const getMovieByIdRef = (dcOrVars, vars) => {
76+
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
77+
dcInstance._useGeneratedSdk();
78+
return queryRef(dcInstance, 'GetMovieById', inputVars);
79+
}
80+
getMovieByIdRef.operationName = 'GetMovieById';
81+
82+
export function getMovieById(dcOrVars, vars) {
83+
return executeQuery(getMovieByIdRef(dcOrVars, vars));
84+
}
85+
86+
export const getMetaRef = (dc) => {
87+
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
88+
dcInstance._useGeneratedSdk();
89+
return queryRef(dcInstance, 'GetMeta');
90+
}
91+
getMetaRef.operationName = 'GetMeta';
92+
93+
export function getMeta(dc) {
94+
return executeQuery(getMetaRef(dc));
95+
}
96+

dataconnect-sdk/js/default-connector/index.cjs.js

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -7,42 +7,6 @@ const connectorConfig = {
77
};
88
exports.connectorConfig = connectorConfig;
99

10-
const listMoviesRef = (dc) => {
11-
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
12-
dcInstance._useGeneratedSdk();
13-
return queryRef(dcInstance, 'ListMovies');
14-
}
15-
listMoviesRef.operationName = 'ListMovies';
16-
exports.listMoviesRef = listMoviesRef;
17-
18-
exports.listMovies = function listMovies(dc) {
19-
return executeQuery(listMoviesRef(dc));
20-
};
21-
22-
const getMovieByIdRef = (dcOrVars, vars) => {
23-
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
24-
dcInstance._useGeneratedSdk();
25-
return queryRef(dcInstance, 'GetMovieById', inputVars);
26-
}
27-
getMovieByIdRef.operationName = 'GetMovieById';
28-
exports.getMovieByIdRef = getMovieByIdRef;
29-
30-
exports.getMovieById = function getMovieById(dcOrVars, vars) {
31-
return executeQuery(getMovieByIdRef(dcOrVars, vars));
32-
};
33-
34-
const getMetaRef = (dc) => {
35-
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
36-
dcInstance._useGeneratedSdk();
37-
return queryRef(dcInstance, 'GetMeta');
38-
}
39-
getMetaRef.operationName = 'GetMeta';
40-
exports.getMetaRef = getMetaRef;
41-
42-
exports.getMeta = function getMeta(dc) {
43-
return executeQuery(getMetaRef(dc));
44-
};
45-
4610
const createMovieRef = (dcOrVars, vars) => {
4711
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
4812
dcInstance._useGeneratedSdk();
@@ -102,3 +66,39 @@ exports.deleteMetaRef = deleteMetaRef;
10266
exports.deleteMeta = function deleteMeta(dcOrVars, vars) {
10367
return executeMutation(deleteMetaRef(dcOrVars, vars));
10468
};
69+
70+
const listMoviesRef = (dc) => {
71+
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
72+
dcInstance._useGeneratedSdk();
73+
return queryRef(dcInstance, 'ListMovies');
74+
}
75+
listMoviesRef.operationName = 'ListMovies';
76+
exports.listMoviesRef = listMoviesRef;
77+
78+
exports.listMovies = function listMovies(dc) {
79+
return executeQuery(listMoviesRef(dc));
80+
};
81+
82+
const getMovieByIdRef = (dcOrVars, vars) => {
83+
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
84+
dcInstance._useGeneratedSdk();
85+
return queryRef(dcInstance, 'GetMovieById', inputVars);
86+
}
87+
getMovieByIdRef.operationName = 'GetMovieById';
88+
exports.getMovieByIdRef = getMovieByIdRef;
89+
90+
exports.getMovieById = function getMovieById(dcOrVars, vars) {
91+
return executeQuery(getMovieByIdRef(dcOrVars, vars));
92+
};
93+
94+
const getMetaRef = (dc) => {
95+
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
96+
dcInstance._useGeneratedSdk();
97+
return queryRef(dcInstance, 'GetMeta');
98+
}
99+
getMetaRef.operationName = 'GetMeta';
100+
exports.getMetaRef = getMetaRef;
101+
102+
exports.getMeta = function getMeta(dc) {
103+
return executeQuery(getMetaRef(dc));
104+
};

dataconnect-sdk/js/default-connector/index.d.ts

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -93,42 +93,6 @@ export interface UpsertMovieVariables {
9393
imageUrl: string;
9494
}
9595

96-
interface ListMoviesRef {
97-
/* Allow users to create refs without passing in DataConnect */
98-
(): QueryRef<ListMoviesData, undefined>;
99-
/* Allow users to pass in custom DataConnect instances */
100-
(dc: DataConnect): QueryRef<ListMoviesData, undefined>;
101-
operationName: string;
102-
}
103-
export const listMoviesRef: ListMoviesRef;
104-
105-
export function listMovies(): QueryPromise<ListMoviesData, undefined>;
106-
export function listMovies(dc: DataConnect): QueryPromise<ListMoviesData, undefined>;
107-
108-
interface GetMovieByIdRef {
109-
/* Allow users to create refs without passing in DataConnect */
110-
(vars: GetMovieByIdVariables): QueryRef<GetMovieByIdData, GetMovieByIdVariables>;
111-
/* Allow users to pass in custom DataConnect instances */
112-
(dc: DataConnect, vars: GetMovieByIdVariables): QueryRef<GetMovieByIdData, GetMovieByIdVariables>;
113-
operationName: string;
114-
}
115-
export const getMovieByIdRef: GetMovieByIdRef;
116-
117-
export function getMovieById(vars: GetMovieByIdVariables): QueryPromise<GetMovieByIdData, GetMovieByIdVariables>;
118-
export function getMovieById(dc: DataConnect, vars: GetMovieByIdVariables): QueryPromise<GetMovieByIdData, GetMovieByIdVariables>;
119-
120-
interface GetMetaRef {
121-
/* Allow users to create refs without passing in DataConnect */
122-
(): QueryRef<GetMetaData, undefined>;
123-
/* Allow users to pass in custom DataConnect instances */
124-
(dc: DataConnect): QueryRef<GetMetaData, undefined>;
125-
operationName: string;
126-
}
127-
export const getMetaRef: GetMetaRef;
128-
129-
export function getMeta(): QueryPromise<GetMetaData, undefined>;
130-
export function getMeta(dc: DataConnect): QueryPromise<GetMetaData, undefined>;
131-
13296
interface CreateMovieRef {
13397
/* Allow users to create refs without passing in DataConnect */
13498
(vars: CreateMovieVariables): MutationRef<CreateMovieData, CreateMovieVariables>;
@@ -189,3 +153,39 @@ export const deleteMetaRef: DeleteMetaRef;
189153
export function deleteMeta(vars: DeleteMetaVariables): MutationPromise<DeleteMetaData, DeleteMetaVariables>;
190154
export function deleteMeta(dc: DataConnect, vars: DeleteMetaVariables): MutationPromise<DeleteMetaData, DeleteMetaVariables>;
191155

156+
interface ListMoviesRef {
157+
/* Allow users to create refs without passing in DataConnect */
158+
(): QueryRef<ListMoviesData, undefined>;
159+
/* Allow users to pass in custom DataConnect instances */
160+
(dc: DataConnect): QueryRef<ListMoviesData, undefined>;
161+
operationName: string;
162+
}
163+
export const listMoviesRef: ListMoviesRef;
164+
165+
export function listMovies(): QueryPromise<ListMoviesData, undefined>;
166+
export function listMovies(dc: DataConnect): QueryPromise<ListMoviesData, undefined>;
167+
168+
interface GetMovieByIdRef {
169+
/* Allow users to create refs without passing in DataConnect */
170+
(vars: GetMovieByIdVariables): QueryRef<GetMovieByIdData, GetMovieByIdVariables>;
171+
/* Allow users to pass in custom DataConnect instances */
172+
(dc: DataConnect, vars: GetMovieByIdVariables): QueryRef<GetMovieByIdData, GetMovieByIdVariables>;
173+
operationName: string;
174+
}
175+
export const getMovieByIdRef: GetMovieByIdRef;
176+
177+
export function getMovieById(vars: GetMovieByIdVariables): QueryPromise<GetMovieByIdData, GetMovieByIdVariables>;
178+
export function getMovieById(dc: DataConnect, vars: GetMovieByIdVariables): QueryPromise<GetMovieByIdData, GetMovieByIdVariables>;
179+
180+
interface GetMetaRef {
181+
/* Allow users to create refs without passing in DataConnect */
182+
(): QueryRef<GetMetaData, undefined>;
183+
/* Allow users to pass in custom DataConnect instances */
184+
(dc: DataConnect): QueryRef<GetMetaData, undefined>;
185+
operationName: string;
186+
}
187+
export const getMetaRef: GetMetaRef;
188+
189+
export function getMeta(): QueryPromise<GetMetaData, undefined>;
190+
export function getMeta(dc: DataConnect): QueryPromise<GetMetaData, undefined>;
191+

packages/react/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,6 @@
4545
},
4646
"peerDependencies": {
4747
"@tanstack/react-query": "^5",
48-
"firebase": "^11.3.0"
48+
"firebase": "^11.3.0 || ^12.0.0"
4949
}
5050
}

packages/react/tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"compilerOptions": {
3-
"target": "es2015",
3+
"target": "es2020",
44
"module": "esnext",
55
"moduleResolution": "node",
66
"declaration": true,

0 commit comments

Comments
 (0)