- Notifications
You must be signed in to change notification settings - Fork7
Cloud Firestore model framework for TypeScript - Google
License
1amageek/pring.ts
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Firebase Cloud Firestore model framework for TypeScript.
npm install pring --save
required
"devDependencies": {"@types/node":"^10.9.2","typescript":"^3.0.3" },
{"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" ]}
constalias=require('pring/webpack-alias')module.exports={// ...resolve:{ alias},}
When using Pring in Vue please include it inmain.ts
.
import*asPringfrom"pring"import{config}from"./config"importfirebasefrom"firebase"import"firebase/firestore"constapp=firebase.initializeApp(config)Pring.initialize(app.firestore())
- 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)}
// 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")
letuser=newUser()user.name="hoge"awaituser.save()
letuser:User=awaitUser.get("USER_ID",User)
letuser:User=awaitUser.get("USER_ID",User)user.name="UPDATE NAME"awaituser.update()
letuser:User=newUser("USER_ID",{})user.name="UPDATE NAME"awaituser.update()
letuser:User=awaitUser.get("USER_ID",User)awaituser.delete()
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 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()}}
https://facebook.github.io/jest/
npm install -g jest
jest
About
Cloud Firestore model framework for TypeScript - Google