Skip to content

Instantly share code, notes, and snippets.

Avatar
🔥
Working on Firebase

David East davideast

🔥
Working on Firebase
View GitHub Profile
@davideast
davideast / index.html
Created Mar 20, 2015
Basic Firebase Chat App
View index.html
<html>
<head>
<title>Firestart</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" media="screen" charset="utf-8">
<script src="https://cdn.firebase.com/js/client/2.2.3/firebase.js"></script>
</head>
<body>
<div class="container">
View fetchpipe.ts
interface IFetchResponse {
text: () => Promise<string>;
json: () => Promise<string>;
}
declare var fetch: (url: string) => Promise<IFetchResponse>;
@Pipe({
name: 'fetch'
})
class FetchJsonPipe {
@davideast
davideast / rules.bolt
Last active Dec 15, 2015
Securing user data - Bolt rules
View rules.bolt
isUser(uid) = auth != null && auth.uid == uid;
type Post {
uid: String;
title: String;
description: String;
timestamp: Number;
}
type User {
@davideast
davideast / incrementViews.js
Last active Jan 7, 2017
Guillermo Views Transaction
View incrementViews.js
/**
* Increases view count by one.
* @param: db {FirebaseDatabase} - Firebase Database instance
* @param: id {String} - id of post
* @return: Promise<{committed: boolean, snapshot: nullable firebase.database.DataSnapshot}>
* @docs: https://firebase.google.com/docs/reference/js/firebase.database.Reference#transaction
*/
const incrementViews = (db, id) => {
const ref = db.ref('views').child(id)
return ref.transaction(currentViews => {
@davideast
davideast / naked-import.js
Created Mar 21, 2017
Firebase ES2015 imports
View naked-import.js
import * as firebase from 'firebase/app'; // Provides firebase-app.js only
import 'firebase/auth'; // Not named, just naked
const app = firebase.initializeApp({ });
console.log(app.auth()); // auth object
console.log(app.database()); // undefined
@davideast
davideast / server.ts
Last active Aug 10, 2017
Angular Universal Express Sample
View server.ts
import { angularUniversal } from 'angular-universal-express';
import * as express from 'express';
const app = express();
/*
I usually copy my Angular CLI "dist" build into my "dist-server" build
and serve them as static files so they aren't treated as dynamic routes.
*/
app.use(express.static(__dirname + '/dist'));
app.get('/*', angularUniversal({
@davideast
davideast / tsconfig.json
Created Aug 10, 2017
Angular Universal Server Build
View tsconfig.json
{
"compilerOptions": {
"outDir": "../dist-server",
"sourceMap": true,
"moduleResolution": "node",
"target": "es5",
"lib": [ "es2017" ]
}
}
@davideast
davideast / build.sh
Last active Aug 10, 2017
Angular Universal + TS server build
View build.sh
# Build the browser bundle
ng build --prod
# Build the universal bundle
ng build --prod --app 1
# Move the browser index.html to generate the SSR version
mv dist/index.html dist-server/
# Treat dist as static within dist-server
mv dist/ dist-server/static
# Transpile TS server code
node_modules/.bin/tsc -p server/tsconfig.json
@davideast
davideast / build.sh
Last active Aug 10, 2017
Angular Universal Build
View build.sh
# Build the browser bundle
ng build --prod
# Build the universal bundle
ng build --prod --app 1
# Move the browser index.html to generate the SSR version
mv dist/index.html dist-server/
# Treat dist as static within dist-server
mv dist/ dist-server/static
@davideast
davideast / index.ts
Last active Aug 10, 2017
Angular Universal Server
View index.ts
import { angularUniversal } from 'angular-universal-express';
import * as express from 'express';
const app = express();
// serving static requests
app.use(express.static(__dirname + '/static'));
// serving dynamic requests
app.get('/*', angularUniversal({
index: __dirname + '/index.html',
main: __dirname + '/main.<your-hash>.bundle',