All Projects → 1amageek → Pring.ts

1amageek / Pring.ts

Licence: mit
Cloud Firestore model framework for TypeScript - Google

Programming Languages

typescript
32286 projects

Projects that are alternatives of or similar to Pring.ts

Fireway
A schema migration tool for firestore
Stars: ✭ 100 (-2.91%)
Mutual labels:  firebase, firestore
Firebase Course
Firebase & AngularFire In Depth
Stars: ✭ 96 (-6.8%)
Mutual labels:  firebase, firestore
Instadart Flutter Instagram Clone
Instagram Clone App Using - Dart, Flutter, Firebase
Stars: ✭ 66 (-35.92%)
Mutual labels:  firebase, firestore
Angular 4 Material Pos
POS written in Angular 4 with Angular Material UI
Stars: ✭ 54 (-47.57%)
Mutual labels:  firebase, firestore
Firebase dart sdk
Unofficial Firebase Flutter SDK. Maintainer: @long1eu
Stars: ✭ 80 (-22.33%)
Mutual labels:  firebase, firestore
Firetable
Excel/Google Sheets like UI for Firebase/Firestore. No more admin portals!
Stars: ✭ 1,115 (+982.52%)
Mutual labels:  firebase, firestore
Integrify
🤝 Enforce referential and data integrity in Cloud Firestore using triggers
Stars: ✭ 74 (-28.16%)
Mutual labels:  firebase, firestore
Paginate firestore
A flutter package to simplify pagination with firestore data 🗃
Stars: ✭ 40 (-61.17%)
Mutual labels:  firebase, firestore
Gatsby Theme Firebase
🔥 A Gatsby Theme for adding Firebase to your application.
Stars: ✭ 96 (-6.8%)
Mutual labels:  firebase, firestore
Firegraph
GraphQL Superpowers for Google Cloud Firestore
Stars: ✭ 80 (-22.33%)
Mutual labels:  firebase, firestore
Tiledesk Dashboard
The Tiledesk dashboard. Tiledesk is an Open Source Live Chat platform written in NodeJs, firebase and Angular.
Stars: ✭ 53 (-48.54%)
Mutual labels:  firebase, firestore
React Native Firebase
🔥 A well-tested feature-rich modular Firebase implementation for React Native. Supports both iOS & Android platforms for all Firebase services.
Stars: ✭ 9,674 (+9292.23%)
Mutual labels:  firebase, firestore
Ember Cloud Firestore Adapter
Unofficial Ember Data Adapter and Serializer for Cloud Firestore
Stars: ✭ 51 (-50.49%)
Mutual labels:  firebase, firestore
Tiledesk Server
Tiledesk server. Tiledesk is an Open Source Live Chat platform written in NodeJs and MongoDB
Stars: ✭ 94 (-8.74%)
Mutual labels:  firebase, firestore
Firestorerecycleradaptersample
Sample Android project using FirestoreRecyclerAdapter
Stars: ✭ 43 (-58.25%)
Mutual labels:  firebase, firestore
Mock Cloud Firestore
Mock library for Cloud Firestore
Stars: ✭ 69 (-33.01%)
Mutual labels:  firebase, firestore
Social Note
Social Note - Note-taking, sharing, time & location reminder
Stars: ✭ 38 (-63.11%)
Mutual labels:  firebase, firestore
Nativescript Plugin Firebase
🔥 NativeScript plugin for Firebase
Stars: ✭ 990 (+861.17%)
Mutual labels:  firebase, firestore
Jotify
Sticky notes reimagined - written in Swift
Stars: ✭ 79 (-23.3%)
Mutual labels:  firebase, firestore
The Road To React With Firebase
📓The Road to React with Firebase: Your journey to build business applications with React and Firebase.
Stars: ✭ 82 (-20.39%)
Mutual labels:  firebase, firestore

pring.ts

Firebase Cloud Firestore model framework for TypeScript.

Installation ⚙

npm install pring --save

Usage

TypeScript

required

  "devDependencies": {
    "@types/node": "^10.9.2",
    "typescript": "^3.0.3"
  },

tsconfig.json

{
  "compilerOptions": {
    "target": "es6",
    "module": "esnext",
    "strict": true,
    "jsx": "preserve",
    "importHelpers": true,
    "moduleResolution": "node",
    "experimentalDecorators": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "sourceMap": true,
    "baseUrl": ".",
    "types": [
      "node"
    ],
    "paths": {
      "@/*": [
        "src/*"
      ]
    },
    "lib": [
      "esnext",
      "dom",
      "dom.iterable",
      "scripthost"
    ]
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "tests/**/*.ts",
    "tests/**/*.tsx"
  ],
  "exclude": [
    "node_modules"
  ]
}

webpack.config.js

const alias = require('pring/webpack-alias')

module.exports = {
  // ...
  resolve: {
    alias
  },
}

Initialize

When using Pring in Vue please include it in main.ts.

For Web

import * as Pring from "pring"
import { config } from "./config"
import firebase from "firebase"
import "firebase/firestore"

const app = firebase.initializeApp(config)
Pring.initialize(app.firestore())

Scheme

  • Please add @property for property declaration.
  • SubCollection can not be optional. Please initialize here.
import * as Pring from "pring"
const property = Pring.property

class Group extends Pring.Base {
    @property name: string
    @property users: NestedCollection<User> = NestedCollection(this)
}

class User extends Pring.Base {
    @property name: string
    @property groups: ReferenceCollection<Group> = ReferenceCollection(this)
}

Manage data

Initialize

// auto generate ID
let user = new User()

// any ID
let user = new User("YOUR_ID")

// any ID, Handle already saved users
let user = new User("YOUR_ID", {})

memo

The developer is responsible for managing the Document being saved. In Pring it is prohibited to save the already saved Document again.

Please use explicitly by the initialization method. new User("YOUR_ID", {}) let user = new User("YOUR_ID")

Save

let user = new User()
user.name = "hoge"
await user.save()

Get

let user: User = await User.get("USER_ID", User)

Update

let user: User = await User.get("USER_ID", User)
user.name = "UPDATE NAME"
await user.update()
let user: User = new User("USER_ID", {})
user.name = "UPDATE NAME"
await user.update()

Delete

let user: User = await User.get("USER_ID", User)
await user.delete()

SubCollection

You can use ReferenceCollection and NestedCollection. The inserted Object is saved simultaneously with the save of the parent.

let user = new User()
let group = new Group()
user.groups.insert(group)
await user.save()

If you insert the parent after it is saved, you need to use await to guarantee the count of SubCollection.

let user = new User()
await user.save()

let group0 = new Group()
let group1 = new Group()
try {
  await user.groups.insert(group0)
  await user.groups.insert(group1)
} catch(error) {
  console.log(error)
}

DataSource

DataSource is a class that controls Collection of Firestore.

export default class Home extends Vue {

  public async addUser() {
    const user: User = new User()
    user.name = "@1amageek"
    await user.save()
  }

  public created() {
    const dataSource = User.query().dataSource(User)
    dataSource.on((snapshot, changes) => {

      switch (changes.type) {
        case "initial": {
          console.log(dataSource.documents)
          break
        }
        case "update": {
          console.log("insert", changes.insertions)
          console.log("change", changes.modifications)
          console.log("delete", changes.deletions)
          break
        }
        case "error": {
          break
        }
      }
    }).listen()
  }
}

Test

https://facebook.github.io/jest/

npm install -g jest
jest
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].