firebase_js_interop

Last updated:

0 purchases

firebase_js_interop Image
firebase_js_interop Images
Add to Cart

Description:

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

License:

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.