Last updated:
0 purchases
firebase js interop
Wrappers and tools for composing Firebase Cloud Functions in the Dart language
Features #
Legend #
🟥
No interop
🟧
Limited interop
🟨
Partial interop
🟩
Full interop
Admin #
Service
Status
Comment
App
🟩
App Check
🟥
App Check enforcement for callable functions is supported
Auth
🟥
Credential
🟥
Database
🟥
Eventarc
🟥
Extensions
🟥
Firestore
🟩
Functions
🟥
Installations
🟥
Messaging
🟧
Only message sending
Project Management
🟥
Remote Config
🟥
Security Rules
🟥
Storage
🟥
Functions #
Service
Status
Alerts
🟥
Database
🟥
Eventarc
🟥
Firestore
🟩
HTTPS
🟩
Identity
🟩
PubSub
🟥
Remote Config
🟥
Scheduler
🟥
Storage
🟥
Tasks
🟥
Test Lab
🟥
Global Options
🟥
onInit
🟥
Future #
Interop with the following packages is planned, but not yet implemented:
rules-unit-testing
firebase-functions-test
Getting started #
Install the firebase tools
Usage #
Project structure #
Create the following dart/flutter packages:
Package
Purpose
{app}
Flutter app
{app}_core
Base core package
{app}_core_flutter
Core package for Flutter app
{app}_core_js_interop
Core package for Cloud Functions
{app}_firebase/functions
Firebase Cloud Functions
The purpose of the three core packages is as follows:
Flutter apps (besides the web platform) cannot import js_interop code
Transpiled dart2js code cannot transitively depend on Flutter
This means the base {app}_core package cannot depend on anything that depends on Flutter. Those dependencies should be used in {app}_core_flutter instead.
Create the Firebase project #
Run firebase init in {app}_firebase. Choose javascript as the language for Cloud Functions.
Set up FCF for Dart #
Make the following modifications to files in {app}_firebase:
firebase.json
Add the following ignores
{
"functions": [
{
"ignore": [
"pubspec.*",
"src",
"tool",
"analysis_options.yaml",
".dart_tool"
]
}
]
}
copied to clipboard
functions/.gitignore
# Compiled JavaScript files
lib/**
# https://dart.dev/guides/libraries/private-files
# Created by `dart pub`
.dart_tool/
copied to clipboard
functions/package.json
{
"scripts": {
"lint": "dart analyze --fatal-infos",
"build": "dart run tool/build.dart"
},
"main": "lib/index.js"
}
copied to clipboard
functions/pubspec.yaml
dependencies:
{app}_core_js_interop:
path: ../../{app}_core_js_interop
firebase_js_interop: latest
copied to clipboard
functions/src/index.dart
This is where the Dart Cloud Functions code lives. See below for an example.
functions/tool/build.dart
This is what compiles index.dart into an index.js file that can run on Cloud Functions
import 'package:firebase_js_interop/build.dart';
void main() async {
await buildCloudFunctions();
}
copied to clipboard
Writing models #
Create the base models in {app}_core, then augment them with json serialization in {app}_core_flutter and {app}_core_js_interop. See the example project for more details on how to use json serialization with both firebase_js_interop and cloud_firestore_odm.
Writing Cloud Functions #
Writing Cloud Functions in Dart is very similar to writing them in TypeScript:
import 'dart:js_interop';
import 'dart:js_interop_unsafe';
import 'package:firebase_js_interop/functions.dart';
import 'package:firebase_js_interop/node.dart';
import 'package:firebase_js_interop/express.dart' as express;
void main() {
exports['helloWorld'] = FirebaseFunctions.https.onRequest(
(Request request, express.Response response) {
return response.send('Hello from Firebase!'.toJS);
}.toJS,
);
}
copied to clipboard
Make sure to return promises for async operations:
import 'dart:js_interop';
import 'dart:js_interop_unsafe';
import 'package:firebase_js_interop/functions.dart';
import 'package:firebase_js_interop/js.dart';
import 'package:firebase_js_interop/node.dart';
import 'package:firebase_js_interop/admin.dart';
void main() {
exports['onMessageCreated'] = FirebaseFunctions.firestore.onDocumentCreated(
'/chats/{chatId}/messages/{messageId}'.toJS,
(FirestoreEvent<DocumentSnapshot> event) {
return promise(() async {
await Future.delayed(const Duration(seconds: 1));
});
}.toJS,
);
}
copied to clipboard
Deploying Cloud Functions #
dart run tool/build.dart
firebase deploy --only functions
The compiled JS will also work in the Firebase emulators
Additional information #
See firebase_rules for writing Firebase security rules in Dart.
Contributing #
There are many unimplemented features. Please feel free to contribute if any necessary components are missing.
See CONTRIBUTING.md for details
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.