Skip to content

feat: add firebase 12 support #199

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,21 @@ pnpm emulator

## Development Tools

### Firebase Multi-Version Support

This monorepo supports multiple Firebase versions simultaneously:
- The React package supports both Firebase 11 and 12
- The Angular package is locked to Firebase 11 (due to @angular/fire compatibility)

To handle type differences between Firebase versions, we use separate Data Connect connectors:
- `connector-v11`: Used for Firebase 11 compatibility
- `connector-v12`: Used for Firebase 12 compatibility

The connectors generate identical functionality but with version-specific types. This approach ensures:
- Type safety at compile time
- No runtime version detection needed
- Clean separation of version-specific code

### Turborepo

This project uses Turborepo for managing the monorepo. Key commands:
Expand Down

Large diffs are not rendered by default.

96 changes: 96 additions & 0 deletions dataconnect-sdk/js/default-connector-v11/esm/index.esm.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import { queryRef, executeQuery, mutationRef, executeMutation, validateArgs } from 'firebase/data-connect';

export const connectorConfig = {
connector: 'default-connector-v11',
service: 'tanstack-query-firebase',
location: 'us-central1'
};

export const createMovieRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
return mutationRef(dcInstance, 'CreateMovie', inputVars);
}
createMovieRef.operationName = 'CreateMovie';

export function createMovie(dcOrVars, vars) {
return executeMutation(createMovieRef(dcOrVars, vars));
}

export const upsertMovieRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
return mutationRef(dcInstance, 'UpsertMovie', inputVars);
}
upsertMovieRef.operationName = 'UpsertMovie';

export function upsertMovie(dcOrVars, vars) {
return executeMutation(upsertMovieRef(dcOrVars, vars));
}

export const deleteMovieRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
return mutationRef(dcInstance, 'DeleteMovie', inputVars);
}
deleteMovieRef.operationName = 'DeleteMovie';

export function deleteMovie(dcOrVars, vars) {
return executeMutation(deleteMovieRef(dcOrVars, vars));
}

export const addMetaRef = (dc) => {
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
dcInstance._useGeneratedSdk();
return mutationRef(dcInstance, 'AddMeta');
}
addMetaRef.operationName = 'AddMeta';

export function addMeta(dc) {
return executeMutation(addMetaRef(dc));
}

export const deleteMetaRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
return mutationRef(dcInstance, 'DeleteMeta', inputVars);
}
deleteMetaRef.operationName = 'DeleteMeta';

export function deleteMeta(dcOrVars, vars) {
return executeMutation(deleteMetaRef(dcOrVars, vars));
}

export const listMoviesRef = (dc) => {
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, 'ListMovies');
}
listMoviesRef.operationName = 'ListMovies';

export function listMovies(dc) {
return executeQuery(listMoviesRef(dc));
}

export const getMovieByIdRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, 'GetMovieById', inputVars);
}
getMovieByIdRef.operationName = 'GetMovieById';

export function getMovieById(dcOrVars, vars) {
return executeQuery(getMovieByIdRef(dcOrVars, vars));
}

export const getMetaRef = (dc) => {
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, 'GetMeta');
}
getMetaRef.operationName = 'GetMeta';

export function getMeta(dc) {
return executeQuery(getMetaRef(dc));
}

1 change: 1 addition & 0 deletions dataconnect-sdk/js/default-connector-v11/esm/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"type":"module"}
Original file line number Diff line number Diff line change
@@ -1,133 +1,102 @@
const {
queryRef,
executeQuery,
mutationRef,
executeMutation,
validateArgs,
} = require("firebase/data-connect");
const { queryRef, executeQuery, mutationRef, executeMutation, validateArgs } = require('firebase/data-connect');

const connectorConfig = {
connector: "default",
service: "tanstack-query-firebase",
location: "us-central1",
connector: 'default-connector-v11',
service: 'tanstack-query-firebase',
location: 'us-central1'
};
exports.connectorConfig = connectorConfig;

const createMovieRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars } = validateArgs(
connectorConfig,
dcOrVars,
vars,
true,
);
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
return mutationRef(dcInstance, "CreateMovie", inputVars);
};
createMovieRef.operationName = "CreateMovie";
return mutationRef(dcInstance, 'CreateMovie', inputVars);
}
createMovieRef.operationName = 'CreateMovie';
exports.createMovieRef = createMovieRef;

exports.createMovie = function createMovie(dcOrVars, vars) {
return executeMutation(createMovieRef(dcOrVars, vars));
};

const upsertMovieRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars } = validateArgs(
connectorConfig,
dcOrVars,
vars,
true,
);
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
return mutationRef(dcInstance, "UpsertMovie", inputVars);
};
upsertMovieRef.operationName = "UpsertMovie";
return mutationRef(dcInstance, 'UpsertMovie', inputVars);
}
upsertMovieRef.operationName = 'UpsertMovie';
exports.upsertMovieRef = upsertMovieRef;

exports.upsertMovie = function upsertMovie(dcOrVars, vars) {
return executeMutation(upsertMovieRef(dcOrVars, vars));
};

const deleteMovieRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars } = validateArgs(
connectorConfig,
dcOrVars,
vars,
true,
);
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
return mutationRef(dcInstance, "DeleteMovie", inputVars);
};
deleteMovieRef.operationName = "DeleteMovie";
return mutationRef(dcInstance, 'DeleteMovie', inputVars);
}
deleteMovieRef.operationName = 'DeleteMovie';
exports.deleteMovieRef = deleteMovieRef;

exports.deleteMovie = function deleteMovie(dcOrVars, vars) {
return executeMutation(deleteMovieRef(dcOrVars, vars));
};

const addMetaRef = (dc) => {
const { dc: dcInstance } = validateArgs(connectorConfig, dc, undefined);
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
dcInstance._useGeneratedSdk();
return mutationRef(dcInstance, "AddMeta");
};
addMetaRef.operationName = "AddMeta";
return mutationRef(dcInstance, 'AddMeta');
}
addMetaRef.operationName = 'AddMeta';
exports.addMetaRef = addMetaRef;

exports.addMeta = function addMeta(dc) {
return executeMutation(addMetaRef(dc));
};

const deleteMetaRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars } = validateArgs(
connectorConfig,
dcOrVars,
vars,
true,
);
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
return mutationRef(dcInstance, "DeleteMeta", inputVars);
};
deleteMetaRef.operationName = "DeleteMeta";
return mutationRef(dcInstance, 'DeleteMeta', inputVars);
}
deleteMetaRef.operationName = 'DeleteMeta';
exports.deleteMetaRef = deleteMetaRef;

exports.deleteMeta = function deleteMeta(dcOrVars, vars) {
return executeMutation(deleteMetaRef(dcOrVars, vars));
};

const listMoviesRef = (dc) => {
const { dc: dcInstance } = validateArgs(connectorConfig, dc, undefined);
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, "ListMovies");
};
listMoviesRef.operationName = "ListMovies";
return queryRef(dcInstance, 'ListMovies');
}
listMoviesRef.operationName = 'ListMovies';
exports.listMoviesRef = listMoviesRef;

exports.listMovies = function listMovies(dc) {
return executeQuery(listMoviesRef(dc));
};

const getMovieByIdRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars } = validateArgs(
connectorConfig,
dcOrVars,
vars,
true,
);
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, "GetMovieById", inputVars);
};
getMovieByIdRef.operationName = "GetMovieById";
return queryRef(dcInstance, 'GetMovieById', inputVars);
}
getMovieByIdRef.operationName = 'GetMovieById';
exports.getMovieByIdRef = getMovieByIdRef;

exports.getMovieById = function getMovieById(dcOrVars, vars) {
return executeQuery(getMovieByIdRef(dcOrVars, vars));
};

const getMetaRef = (dc) => {
const { dc: dcInstance } = validateArgs(connectorConfig, dc, undefined);
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, "GetMeta");
};
getMetaRef.operationName = "GetMeta";
return queryRef(dcInstance, 'GetMeta');
}
getMetaRef.operationName = 'GetMeta';
exports.getMetaRef = getMetaRef;

exports.getMeta = function getMeta(dc) {
Expand Down
Loading
Loading