Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Cloud Firestore model framework for TypeScript - Google

License

NotificationsYou must be signed in to change notification settings

1amageek/pring.ts

Repository files navigation

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

constalias=require('pring/webpack-alias')module.exports={// ...resolve:{    alias},}

Initialize

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

For Web

import*asPringfrom"pring"import{config}from"./config"importfirebasefrom"firebase"import"firebase/firestore"constapp=firebase.initializeApp(config)Pring.initialize(app.firestore())

Scheme

  • Please add@property for property declaration.
  • SubCollection can not be optional. Please initialize here.
import*asPringfrom"pring"constproperty=Pring.propertyclassGroupextendsPring.Base{    @propertyname:string    @propertyusers:NestedCollection<User>=NestedCollection(this)}classUserextendsPring.Base{    @propertyname:string    @propertygroups:ReferenceCollection<Group>=ReferenceCollection(this)}

Manage data

Initialize

// auto generate IDletuser=newUser()// any IDletuser=newUser("YOUR_ID")// any ID, Handle already saved usersletuser=newUser("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

letuser=newUser()user.name="hoge"awaituser.save()

Get

letuser:User=awaitUser.get("USER_ID",User)

Update

letuser:User=awaitUser.get("USER_ID",User)user.name="UPDATE NAME"awaituser.update()
letuser:User=newUser("USER_ID",{})user.name="UPDATE NAME"awaituser.update()

Delete

letuser:User=awaitUser.get("USER_ID",User)awaituser.delete()

SubCollection

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

letuser=newUser()letgroup=newGroup()user.groups.insert(group)awaituser.save()

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

letuser=newUser()awaituser.save()letgroup0=newGroup()letgroup1=newGroup()try{awaituser.groups.insert(group0)awaituser.groups.insert(group1)}catch(error){console.log(error)}

DataSource

DataSource is a class that controls Collection of Firestore.

exportdefaultclassHomeextendsVue{publicasyncaddUser(){constuser:User=newUser()user.name="@1amageek"awaituser.save()}publiccreated(){constdataSource=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

[8]ページ先頭

©2009-2025 Movatter.jp