@entropic-bond/firebase-admin 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/lib/firebase-admin-helper.d.ts +11 -0
- package/lib/firebase-admin-helper.js +26 -0
- package/lib/firebase-admin-helper.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +20 -0
- package/lib/index.js.map +1 -0
- package/lib/mocks/mock-data.json +108 -0
- package/lib/mocks/test-user.d.ts +46 -0
- package/lib/mocks/test-user.js +123 -0
- package/lib/mocks/test-user.js.map +1 -0
- package/lib/store/firebase-admin-datasource.d.ts +12 -0
- package/lib/store/firebase-admin-datasource.js +77 -0
- package/lib/store/firebase-admin-datasource.js.map +1 -0
- package/lib/store/firebase-admin-datasource.spec.d.ts +1 -0
- package/lib/store/firebase-admin-datasource.spec.js +347 -0
- package/lib/store/firebase-admin-datasource.spec.js.map +1 -0
- package/package.json +69 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# entropic-bond-firebase-admin
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import admin from 'firebase-admin';
|
|
2
|
+
import { AppOptions } from 'firebase-admin/app';
|
|
3
|
+
export declare class FirebaseAdminHelper {
|
|
4
|
+
static setFirebaseConfig(config?: AppOptions): void;
|
|
5
|
+
private constructor();
|
|
6
|
+
static get instance(): FirebaseAdminHelper;
|
|
7
|
+
firestore(): admin.firestore.Firestore;
|
|
8
|
+
auth(): import("firebase-admin/lib/auth/auth").Auth;
|
|
9
|
+
private static _instance;
|
|
10
|
+
private static _firebaseConfig;
|
|
11
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.FirebaseAdminHelper = void 0;
|
|
7
|
+
const firebase_admin_1 = __importDefault(require("firebase-admin"));
|
|
8
|
+
class FirebaseAdminHelper {
|
|
9
|
+
constructor() {
|
|
10
|
+
firebase_admin_1.default.initializeApp(FirebaseAdminHelper._firebaseConfig);
|
|
11
|
+
}
|
|
12
|
+
static setFirebaseConfig(config) {
|
|
13
|
+
FirebaseAdminHelper._firebaseConfig = config;
|
|
14
|
+
}
|
|
15
|
+
static get instance() {
|
|
16
|
+
return this._instance || (this._instance = new FirebaseAdminHelper());
|
|
17
|
+
}
|
|
18
|
+
firestore() {
|
|
19
|
+
return firebase_admin_1.default.firestore();
|
|
20
|
+
}
|
|
21
|
+
auth() {
|
|
22
|
+
return firebase_admin_1.default.auth();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.FirebaseAdminHelper = FirebaseAdminHelper;
|
|
26
|
+
//# sourceMappingURL=firebase-admin-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firebase-admin-helper.js","sourceRoot":"","sources":["../src/firebase-admin-helper.ts"],"names":[],"mappings":";;;;;;AAAA,oEAAkC;AAGlC,MAAa,mBAAmB;IAM/B;QACC,wBAAK,CAAC,aAAa,CAAE,mBAAmB,CAAC,eAAe,CAAE,CAAA;IAC3D,CAAC;IAND,MAAM,CAAC,iBAAiB,CAAE,MAAmB;QAC5C,mBAAmB,CAAC,eAAe,GAAG,MAAM,CAAA;IAC7C,CAAC;IAMD,MAAM,KAAK,QAAQ;QAClB,OAAO,IAAI,CAAC,SAAS,IAAI,CAAE,IAAI,CAAC,SAAS,GAAG,IAAI,mBAAmB,EAAE,CAAE,CAAA;IACxE,CAAC;IAED,SAAS;QACR,OAAO,wBAAK,CAAC,SAAS,EAAE,CAAA;IACzB,CAAC;IAED,IAAI;QACH,OAAO,wBAAK,CAAC,IAAI,EAAE,CAAA;IACpB,CAAC;CAID;AAxBD,kDAwBC"}
|
package/lib/index.d.ts
ADDED
package/lib/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./store/firebase-admin-datasource"), exports);
|
|
18
|
+
__exportStar(require("./firebase-admin-helper"), exports);
|
|
19
|
+
// export * from './auth/firebase-admin-auth'
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oEAAiD;AACjD,0DAAuC;AACvC,6CAA6C"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
{
|
|
2
|
+
"TestUser": {
|
|
3
|
+
"user1": {
|
|
4
|
+
"__className": "TestUser",
|
|
5
|
+
"id": "user1",
|
|
6
|
+
"name": {
|
|
7
|
+
"firstName": "userFirstName1",
|
|
8
|
+
"lastName": "userLastName1"
|
|
9
|
+
},
|
|
10
|
+
"age": 23,
|
|
11
|
+
"admin": true,
|
|
12
|
+
"skills": ["skill1", "skill2", "skill3"]
|
|
13
|
+
},
|
|
14
|
+
"user2": {
|
|
15
|
+
"__className": "TestUser",
|
|
16
|
+
"id": "user2",
|
|
17
|
+
"name": {
|
|
18
|
+
"firstName": "userFirstName2",
|
|
19
|
+
"lastName": "userLastName2",
|
|
20
|
+
"ancestorName": {
|
|
21
|
+
"father": "user2Father"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"age": 21,
|
|
25
|
+
"admin": false,
|
|
26
|
+
"skills": ["skill1", "skill2", "skill3"]
|
|
27
|
+
},
|
|
28
|
+
"user3": {
|
|
29
|
+
"__className": "TestUser",
|
|
30
|
+
"id": "user3",
|
|
31
|
+
"name": {
|
|
32
|
+
"firstName": "userFirstName3",
|
|
33
|
+
"lastName": "userLastName3",
|
|
34
|
+
"ancestorName": {
|
|
35
|
+
"father": "user3Father"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"age": 56,
|
|
39
|
+
"admin": true,
|
|
40
|
+
"skills": ["skill21", "skill22", "skill23"]
|
|
41
|
+
},
|
|
42
|
+
"user4": {
|
|
43
|
+
"__className": "DerivedUser",
|
|
44
|
+
"id": "user4",
|
|
45
|
+
"name": {
|
|
46
|
+
"firstName": "userFirstName4",
|
|
47
|
+
"lastName": "userLastName4"
|
|
48
|
+
},
|
|
49
|
+
"age": 35,
|
|
50
|
+
"admin": false,
|
|
51
|
+
"skills": ["skill41", "skill42", "skill43"],
|
|
52
|
+
"salary": 2800
|
|
53
|
+
},
|
|
54
|
+
"user5": {
|
|
55
|
+
"__className": "TestUser",
|
|
56
|
+
"id": "user5",
|
|
57
|
+
"name": {
|
|
58
|
+
"firstName": "userFirstName5",
|
|
59
|
+
"lastName": "userLastName5",
|
|
60
|
+
"ancestorName": {
|
|
61
|
+
"father": "user5Father"
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"age": 41,
|
|
65
|
+
"skills": ["skill21", "skill22", "skill23"],
|
|
66
|
+
"derived": {
|
|
67
|
+
"id": "user3",
|
|
68
|
+
"__className": "DerivedUser",
|
|
69
|
+
"__documentReference": {
|
|
70
|
+
"storedInCollection": "DerivedUser"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"user6": {
|
|
75
|
+
"__className": "TestUser",
|
|
76
|
+
"id": "user6",
|
|
77
|
+
"name": {
|
|
78
|
+
"firstName": "userFirstName6",
|
|
79
|
+
"lastName": "userLastName6",
|
|
80
|
+
"ancestorName": {
|
|
81
|
+
"father": "user6Father"
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"age": 40,
|
|
85
|
+
"skills": ["skill21", "skill22", "skill23"],
|
|
86
|
+
"derived": {
|
|
87
|
+
"id": "user4",
|
|
88
|
+
"__className": "DerivedUser",
|
|
89
|
+
"__documentReference": {
|
|
90
|
+
"storedInCollection": "TestUser"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
"DerivedUser": {
|
|
96
|
+
"user4": {
|
|
97
|
+
"__className": "DerivedUser",
|
|
98
|
+
"id": "user5",
|
|
99
|
+
"name": {
|
|
100
|
+
"firstName": "userFirstName5",
|
|
101
|
+
"lastName": "userLastName5"
|
|
102
|
+
},
|
|
103
|
+
"age": 35,
|
|
104
|
+
"admin": false,
|
|
105
|
+
"salary": 2300
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Persistent } from 'entropic-bond';
|
|
2
|
+
interface Name {
|
|
3
|
+
firstName: string;
|
|
4
|
+
lastName: string;
|
|
5
|
+
ancestorName?: {
|
|
6
|
+
father?: string;
|
|
7
|
+
mother?: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export declare class SubClass extends Persistent {
|
|
11
|
+
set year(value: number);
|
|
12
|
+
get year(): number;
|
|
13
|
+
private _year;
|
|
14
|
+
}
|
|
15
|
+
export declare class TestUser extends Persistent {
|
|
16
|
+
set name(value: Name);
|
|
17
|
+
get name(): Name;
|
|
18
|
+
set age(value: number);
|
|
19
|
+
get age(): number;
|
|
20
|
+
set admin(value: boolean);
|
|
21
|
+
get admin(): boolean;
|
|
22
|
+
set skills(value: string[]);
|
|
23
|
+
get skills(): string[];
|
|
24
|
+
set documentRef(value: SubClass);
|
|
25
|
+
get documentRef(): SubClass;
|
|
26
|
+
set manyRefs(value: SubClass[]);
|
|
27
|
+
get manyRefs(): SubClass[];
|
|
28
|
+
set derived(value: DerivedUser);
|
|
29
|
+
get derived(): DerivedUser;
|
|
30
|
+
set manyDerived(value: DerivedUser[]);
|
|
31
|
+
get manyDerived(): DerivedUser[];
|
|
32
|
+
private _name;
|
|
33
|
+
private _age;
|
|
34
|
+
private _admin;
|
|
35
|
+
private _skills;
|
|
36
|
+
private _documentRef;
|
|
37
|
+
private _manyRefs;
|
|
38
|
+
private _derived;
|
|
39
|
+
private _manyDerived;
|
|
40
|
+
}
|
|
41
|
+
export declare class DerivedUser extends TestUser {
|
|
42
|
+
set salary(value: number);
|
|
43
|
+
get salary(): number;
|
|
44
|
+
private _salary;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DerivedUser = exports.TestUser = exports.SubClass = void 0;
|
|
10
|
+
const entropic_bond_1 = require("entropic-bond");
|
|
11
|
+
let SubClass = class SubClass extends entropic_bond_1.Persistent {
|
|
12
|
+
set year(value) {
|
|
13
|
+
this._year = value;
|
|
14
|
+
}
|
|
15
|
+
get year() {
|
|
16
|
+
return this._year;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
__decorate([
|
|
20
|
+
entropic_bond_1.persistent
|
|
21
|
+
], SubClass.prototype, "_year", void 0);
|
|
22
|
+
SubClass = __decorate([
|
|
23
|
+
(0, entropic_bond_1.registerPersistentClass)('SubClass')
|
|
24
|
+
], SubClass);
|
|
25
|
+
exports.SubClass = SubClass;
|
|
26
|
+
let TestUser = class TestUser extends entropic_bond_1.Persistent {
|
|
27
|
+
constructor() {
|
|
28
|
+
super(...arguments);
|
|
29
|
+
this._manyRefs = [];
|
|
30
|
+
}
|
|
31
|
+
set name(value) {
|
|
32
|
+
this._name = value;
|
|
33
|
+
}
|
|
34
|
+
get name() {
|
|
35
|
+
return this._name;
|
|
36
|
+
}
|
|
37
|
+
set age(value) {
|
|
38
|
+
this._age = value;
|
|
39
|
+
}
|
|
40
|
+
get age() {
|
|
41
|
+
return this._age;
|
|
42
|
+
}
|
|
43
|
+
set admin(value) {
|
|
44
|
+
this._admin = value;
|
|
45
|
+
}
|
|
46
|
+
get admin() {
|
|
47
|
+
return this._admin;
|
|
48
|
+
}
|
|
49
|
+
set skills(value) {
|
|
50
|
+
this._skills = value;
|
|
51
|
+
}
|
|
52
|
+
get skills() {
|
|
53
|
+
return this._skills;
|
|
54
|
+
}
|
|
55
|
+
set documentRef(value) {
|
|
56
|
+
this._documentRef = value;
|
|
57
|
+
}
|
|
58
|
+
get documentRef() {
|
|
59
|
+
return this._documentRef;
|
|
60
|
+
}
|
|
61
|
+
set manyRefs(value) {
|
|
62
|
+
this._manyRefs = value;
|
|
63
|
+
}
|
|
64
|
+
get manyRefs() {
|
|
65
|
+
return this._manyRefs;
|
|
66
|
+
}
|
|
67
|
+
set derived(value) {
|
|
68
|
+
this._derived = value;
|
|
69
|
+
}
|
|
70
|
+
get derived() {
|
|
71
|
+
return this._derived;
|
|
72
|
+
}
|
|
73
|
+
set manyDerived(value) {
|
|
74
|
+
this._manyDerived = value;
|
|
75
|
+
}
|
|
76
|
+
get manyDerived() {
|
|
77
|
+
return this._manyDerived;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
__decorate([
|
|
81
|
+
entropic_bond_1.persistent
|
|
82
|
+
], TestUser.prototype, "_name", void 0);
|
|
83
|
+
__decorate([
|
|
84
|
+
entropic_bond_1.persistent
|
|
85
|
+
], TestUser.prototype, "_age", void 0);
|
|
86
|
+
__decorate([
|
|
87
|
+
entropic_bond_1.persistent
|
|
88
|
+
], TestUser.prototype, "_admin", void 0);
|
|
89
|
+
__decorate([
|
|
90
|
+
entropic_bond_1.persistent
|
|
91
|
+
], TestUser.prototype, "_skills", void 0);
|
|
92
|
+
__decorate([
|
|
93
|
+
entropic_bond_1.persistentReference
|
|
94
|
+
], TestUser.prototype, "_documentRef", void 0);
|
|
95
|
+
__decorate([
|
|
96
|
+
entropic_bond_1.persistentReference
|
|
97
|
+
], TestUser.prototype, "_manyRefs", void 0);
|
|
98
|
+
__decorate([
|
|
99
|
+
(0, entropic_bond_1.persistentReferenceAt)('TestUser')
|
|
100
|
+
], TestUser.prototype, "_derived", void 0);
|
|
101
|
+
__decorate([
|
|
102
|
+
(0, entropic_bond_1.persistentReferenceAt)('TestUser')
|
|
103
|
+
], TestUser.prototype, "_manyDerived", void 0);
|
|
104
|
+
TestUser = __decorate([
|
|
105
|
+
(0, entropic_bond_1.registerPersistentClass)('TestUser')
|
|
106
|
+
], TestUser);
|
|
107
|
+
exports.TestUser = TestUser;
|
|
108
|
+
let DerivedUser = class DerivedUser extends TestUser {
|
|
109
|
+
set salary(value) {
|
|
110
|
+
this._salary = value;
|
|
111
|
+
}
|
|
112
|
+
get salary() {
|
|
113
|
+
return this._salary;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
__decorate([
|
|
117
|
+
entropic_bond_1.persistent
|
|
118
|
+
], DerivedUser.prototype, "_salary", void 0);
|
|
119
|
+
DerivedUser = __decorate([
|
|
120
|
+
(0, entropic_bond_1.registerPersistentClass)('DerivedUser')
|
|
121
|
+
], DerivedUser);
|
|
122
|
+
exports.DerivedUser = DerivedUser;
|
|
123
|
+
//# sourceMappingURL=test-user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-user.js","sourceRoot":"","sources":["../../src/mocks/test-user.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Collections, DataSource, DocumentObject, QueryObject } from 'entropic-bond';
|
|
2
|
+
export declare class FirebaseAdminDatasource extends DataSource {
|
|
3
|
+
findById(id: string, collectionName: string): Promise<DocumentObject>;
|
|
4
|
+
save(collections: Collections): Promise<void>;
|
|
5
|
+
find(queryObject: QueryObject<DocumentObject>, collectionName: string): Promise<DocumentObject[]>;
|
|
6
|
+
delete(id: string, collectionName: string): Promise<void>;
|
|
7
|
+
next(maxDocs?: number): Promise<DocumentObject[]>;
|
|
8
|
+
private getFromQuery;
|
|
9
|
+
private _lastQuery;
|
|
10
|
+
private _lastLimit;
|
|
11
|
+
private _lastDocRetrieved;
|
|
12
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.FirebaseAdminDatasource = void 0;
|
|
13
|
+
const entropic_bond_1 = require("entropic-bond");
|
|
14
|
+
const firebase_admin_helper_1 = require("../firebase-admin-helper");
|
|
15
|
+
class FirebaseAdminDatasource extends entropic_bond_1.DataSource {
|
|
16
|
+
findById(id, collectionName) {
|
|
17
|
+
const db = firebase_admin_helper_1.FirebaseAdminHelper.instance.firestore();
|
|
18
|
+
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
19
|
+
try {
|
|
20
|
+
const docSnap = db.doc(`${collectionName}/${id}`);
|
|
21
|
+
const retrievedObj = yield docSnap.get();
|
|
22
|
+
resolve(retrievedObj.data());
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.log(error);
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
save(collections) {
|
|
31
|
+
const db = firebase_admin_helper_1.FirebaseAdminHelper.instance.firestore();
|
|
32
|
+
const batch = db.batch();
|
|
33
|
+
Object.entries(collections).forEach(([collectionName, collection]) => {
|
|
34
|
+
collection.forEach(document => {
|
|
35
|
+
const ref = db.doc(`${collectionName}/${document.id}`);
|
|
36
|
+
batch.set(ref, document);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
return batch.commit();
|
|
40
|
+
}
|
|
41
|
+
find(queryObject, collectionName) {
|
|
42
|
+
const db = firebase_admin_helper_1.FirebaseAdminHelper.instance.firestore();
|
|
43
|
+
let query = entropic_bond_1.DataSource.toPropertyPathOperations(queryObject.operations).reduce((query, operation) => query.where(operation.property, operation.operator, operation.value), db.collection(collectionName).offset(0));
|
|
44
|
+
if (queryObject.sort) {
|
|
45
|
+
query = query.orderBy(queryObject.sort.propertyName, queryObject.sort.order);
|
|
46
|
+
}
|
|
47
|
+
if (queryObject.limit) {
|
|
48
|
+
this._lastLimit = queryObject.limit;
|
|
49
|
+
query = query.limit(queryObject.limit);
|
|
50
|
+
}
|
|
51
|
+
this._lastQuery = query;
|
|
52
|
+
return this.getFromQuery(query);
|
|
53
|
+
}
|
|
54
|
+
delete(id, collectionName) {
|
|
55
|
+
const db = firebase_admin_helper_1.FirebaseAdminHelper.instance.firestore();
|
|
56
|
+
return db.recursiveDelete(db.doc(`${collectionName}/${id}`));
|
|
57
|
+
}
|
|
58
|
+
next(maxDocs) {
|
|
59
|
+
if (!this._lastQuery)
|
|
60
|
+
throw new Error('You should perform a query prior to using method next');
|
|
61
|
+
this._lastLimit = maxDocs || this._lastLimit;
|
|
62
|
+
const query = this._lastQuery.limit(this._lastLimit).startAfter(this._lastDocRetrieved);
|
|
63
|
+
return this.getFromQuery(query);
|
|
64
|
+
}
|
|
65
|
+
// prev should be used with next in reverse order
|
|
66
|
+
// prev( limit?: number ): Promise< DocumentObject[] > {
|
|
67
|
+
// }
|
|
68
|
+
getFromQuery(query) {
|
|
69
|
+
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
70
|
+
const doc = yield query.get();
|
|
71
|
+
this._lastDocRetrieved = doc.docs[doc.docs.length - 1];
|
|
72
|
+
resolve(doc.docs.map(doc => doc.data()));
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.FirebaseAdminDatasource = FirebaseAdminDatasource;
|
|
77
|
+
//# sourceMappingURL=firebase-admin-datasource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firebase-admin-datasource.js","sourceRoot":"","sources":["../../src/store/firebase-admin-datasource.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
16
|
+
const entropic_bond_1 = require("entropic-bond");
|
|
17
|
+
const firebase_admin_datasource_1 = require("./firebase-admin-datasource");
|
|
18
|
+
const firebase_admin_helper_1 = require("../firebase-admin-helper");
|
|
19
|
+
const test_user_1 = require("../mocks/test-user");
|
|
20
|
+
const mock_data_json_1 = __importDefault(require("../mocks/mock-data.json"));
|
|
21
|
+
process.env['FIRESTORE_EMULATOR_HOST'] = 'localhost:9080';
|
|
22
|
+
function loadTestData(model) {
|
|
23
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
+
const users = mock_data_json_1.default.TestUser;
|
|
25
|
+
const promises = [];
|
|
26
|
+
for (const key in users) {
|
|
27
|
+
const user = entropic_bond_1.Persistent.createInstance(users[key]);
|
|
28
|
+
promises.push(model.save(user));
|
|
29
|
+
}
|
|
30
|
+
yield Promise.all(promises);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
describe('Firestore Model', () => {
|
|
34
|
+
let model;
|
|
35
|
+
let testUser;
|
|
36
|
+
firebase_admin_helper_1.FirebaseAdminHelper.setFirebaseConfig({
|
|
37
|
+
projectId: "demo-test",
|
|
38
|
+
});
|
|
39
|
+
beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
40
|
+
entropic_bond_1.Store.useDataSource(new firebase_admin_datasource_1.FirebaseAdminDatasource());
|
|
41
|
+
testUser = new test_user_1.TestUser();
|
|
42
|
+
testUser.name = {
|
|
43
|
+
firstName: 'testUserFirstName',
|
|
44
|
+
lastName: 'testUserLastName'
|
|
45
|
+
};
|
|
46
|
+
testUser.age = 35;
|
|
47
|
+
testUser.skills = ['lazy', 'dirty'];
|
|
48
|
+
model = entropic_bond_1.Store.getModel('TestUser');
|
|
49
|
+
yield loadTestData(model);
|
|
50
|
+
}));
|
|
51
|
+
afterEach(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
52
|
+
yield (0, node_fetch_1.default)('http://localhost:9080/emulator/v1/projects/demo-test/databases/(default)/documents', {
|
|
53
|
+
method: 'DELETE'
|
|
54
|
+
});
|
|
55
|
+
}));
|
|
56
|
+
it('should find document by id', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
57
|
+
yield model.save(testUser);
|
|
58
|
+
const user = yield model.findById(testUser.id);
|
|
59
|
+
expect(user).toBeInstanceOf(test_user_1.TestUser);
|
|
60
|
+
expect(user.id).toEqual(testUser.id);
|
|
61
|
+
expect(user.name.firstName).toEqual('testUserFirstName');
|
|
62
|
+
}));
|
|
63
|
+
it('should write a document', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
64
|
+
yield model.save(testUser);
|
|
65
|
+
const newUser = yield model.findById(testUser.id);
|
|
66
|
+
expect(newUser.name).toEqual({
|
|
67
|
+
firstName: 'testUserFirstName',
|
|
68
|
+
lastName: 'testUserLastName'
|
|
69
|
+
});
|
|
70
|
+
}));
|
|
71
|
+
it('should delete a document by id', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
72
|
+
yield model.save(testUser);
|
|
73
|
+
const newUser = yield model.findById(testUser.id);
|
|
74
|
+
expect(newUser.age).toBe(35);
|
|
75
|
+
yield model.delete(testUser.id);
|
|
76
|
+
const deletedUser = yield model.findById(testUser.id);
|
|
77
|
+
expect(deletedUser).toBeUndefined();
|
|
78
|
+
}));
|
|
79
|
+
it('should not throw if a document id doesn\'t exists', (done) => {
|
|
80
|
+
expect(() => {
|
|
81
|
+
model.findById('nonExistingId')
|
|
82
|
+
.then(done)
|
|
83
|
+
.catch(done);
|
|
84
|
+
}).not.toThrow();
|
|
85
|
+
});
|
|
86
|
+
it('should return undefined if a document id doesn\'t exists', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
87
|
+
expect(yield model.findById('nonExistingId')).toBeUndefined();
|
|
88
|
+
}));
|
|
89
|
+
it('should retrieve array fields', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
90
|
+
yield model.save(testUser);
|
|
91
|
+
const newUser = yield model.findById(testUser.id);
|
|
92
|
+
expect(Array.isArray(newUser.skills)).toBeTruthy();
|
|
93
|
+
expect(newUser.skills).toEqual(expect.arrayContaining(['lazy', 'dirty']));
|
|
94
|
+
}));
|
|
95
|
+
it('should retrieve object fields', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
96
|
+
yield model.save(testUser);
|
|
97
|
+
const newUser = yield model.findById(testUser.id);
|
|
98
|
+
expect(newUser.name).toEqual({
|
|
99
|
+
firstName: 'testUserFirstName',
|
|
100
|
+
lastName: 'testUserLastName'
|
|
101
|
+
});
|
|
102
|
+
}));
|
|
103
|
+
describe('Generic find', () => {
|
|
104
|
+
it('should query all admins with query object', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
105
|
+
testUser.admin = true;
|
|
106
|
+
yield model.save(testUser);
|
|
107
|
+
const admins = yield model.query({
|
|
108
|
+
operations: [{
|
|
109
|
+
property: 'admin',
|
|
110
|
+
operator: '==',
|
|
111
|
+
value: true
|
|
112
|
+
}]
|
|
113
|
+
});
|
|
114
|
+
expect(admins.length).toBeGreaterThanOrEqual(1);
|
|
115
|
+
expect(admins[0]).toBeInstanceOf(test_user_1.TestUser);
|
|
116
|
+
}));
|
|
117
|
+
it('should find all admins with where methods', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
118
|
+
const admins = yield model.find().where('admin', '==', true).get();
|
|
119
|
+
expect(admins.length).toBeGreaterThanOrEqual(1);
|
|
120
|
+
expect(admins[0]).toBeInstanceOf(test_user_1.TestUser);
|
|
121
|
+
}));
|
|
122
|
+
it('should find admins with age less than 56', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
123
|
+
const admins = yield model.find()
|
|
124
|
+
.where('admin', '==', true)
|
|
125
|
+
.where('age', '<', 50)
|
|
126
|
+
.get();
|
|
127
|
+
expect(admins.length).toBeGreaterThanOrEqual(1);
|
|
128
|
+
expect(admins[0].age).toBeLessThan(50);
|
|
129
|
+
}));
|
|
130
|
+
it('should query by subproperties', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
131
|
+
const users = yield model.query({
|
|
132
|
+
operations: [
|
|
133
|
+
{
|
|
134
|
+
property: 'name',
|
|
135
|
+
operator: '==',
|
|
136
|
+
value: { firstName: 'userFirstName3' }
|
|
137
|
+
},
|
|
138
|
+
{ property: 'age', operator: '!=', value: 134 }
|
|
139
|
+
]
|
|
140
|
+
});
|
|
141
|
+
expect(users[0].id).toBe('user3');
|
|
142
|
+
}));
|
|
143
|
+
it('should find by subproperties', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
144
|
+
const users = yield model.find()
|
|
145
|
+
.where('name', '==', { firstName: 'userFirstName3' })
|
|
146
|
+
.get();
|
|
147
|
+
expect(users[0].id).toBe('user3');
|
|
148
|
+
}));
|
|
149
|
+
it('should find by property path', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
150
|
+
const users = yield model.find()
|
|
151
|
+
.whereDeepProp('name.firstName', '==', 'userFirstName3')
|
|
152
|
+
.get();
|
|
153
|
+
expect(users[0].id).toBe('user3');
|
|
154
|
+
}));
|
|
155
|
+
it('should find by superdeep property path', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
156
|
+
const users = yield model.find()
|
|
157
|
+
.whereDeepProp('name.ancestorName.father', '==', 'user3Father')
|
|
158
|
+
.get();
|
|
159
|
+
expect(users[0].id).toEqual('user3');
|
|
160
|
+
}));
|
|
161
|
+
it('should find by swallow property path', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
162
|
+
const users = yield model.find()
|
|
163
|
+
.whereDeepProp('age', '==', 21)
|
|
164
|
+
.get();
|
|
165
|
+
expect(users[0].id).toEqual('user2');
|
|
166
|
+
}));
|
|
167
|
+
});
|
|
168
|
+
describe('Derived classes should fit on parent collection', () => {
|
|
169
|
+
it('should save derived object in parent collection', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
170
|
+
const derived = new test_user_1.DerivedUser();
|
|
171
|
+
derived.name = { firstName: 'Fulanito', lastName: 'Derived' };
|
|
172
|
+
derived.salary = 3900;
|
|
173
|
+
yield model.save(derived);
|
|
174
|
+
const newUser = yield model.findById(derived.id);
|
|
175
|
+
expect(newUser).toBeInstanceOf(test_user_1.DerivedUser);
|
|
176
|
+
expect(newUser.salary).toBe(3900);
|
|
177
|
+
expect(newUser.className).toEqual('DerivedUser');
|
|
178
|
+
}));
|
|
179
|
+
});
|
|
180
|
+
describe('References to documents', () => {
|
|
181
|
+
let ref1, ref2;
|
|
182
|
+
beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
183
|
+
testUser.documentRef = new test_user_1.SubClass();
|
|
184
|
+
testUser.documentRef.year = 2045;
|
|
185
|
+
ref1 = new test_user_1.SubClass();
|
|
186
|
+
ref1.year = 2081;
|
|
187
|
+
ref2 = new test_user_1.SubClass();
|
|
188
|
+
ref2.year = 2082;
|
|
189
|
+
testUser.manyRefs.push(ref1);
|
|
190
|
+
testUser.manyRefs.push(ref2);
|
|
191
|
+
testUser.derived = new test_user_1.DerivedUser();
|
|
192
|
+
testUser.derived.salary = 1350;
|
|
193
|
+
testUser.manyDerived = [new test_user_1.DerivedUser(), new test_user_1.DerivedUser()];
|
|
194
|
+
testUser.manyDerived[0].salary = 990;
|
|
195
|
+
testUser.manyDerived[1].salary = 1990;
|
|
196
|
+
yield model.save(testUser);
|
|
197
|
+
}));
|
|
198
|
+
it('should save a document as a reference', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
199
|
+
const subClassModel = entropic_bond_1.Store.getModel('SubClass');
|
|
200
|
+
expect(subClassModel).toBeDefined();
|
|
201
|
+
const newDocument = yield subClassModel.findById(testUser.documentRef.id);
|
|
202
|
+
expect(newDocument).toBeInstanceOf(test_user_1.SubClass);
|
|
203
|
+
expect(newDocument.year).toBe(2045);
|
|
204
|
+
}));
|
|
205
|
+
it('should read a swallow document reference', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
206
|
+
const loadedUser = yield model.findById(testUser.id);
|
|
207
|
+
expect(loadedUser.documentRef).toBeInstanceOf(test_user_1.SubClass);
|
|
208
|
+
expect(loadedUser.documentRef.id).toBeDefined();
|
|
209
|
+
expect(loadedUser.documentRef.year).toBeUndefined();
|
|
210
|
+
}));
|
|
211
|
+
it('should fill data of swallow document reference', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
212
|
+
const loadedUser = yield model.findById(testUser.id);
|
|
213
|
+
yield entropic_bond_1.Store.populate(loadedUser.documentRef);
|
|
214
|
+
expect(loadedUser.documentRef.id).toBeDefined();
|
|
215
|
+
expect(loadedUser.documentRef.year).toBe(2045);
|
|
216
|
+
}));
|
|
217
|
+
it('should save and array of references', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
218
|
+
const subClassModel = entropic_bond_1.Store.getModel('SubClass');
|
|
219
|
+
const newDocument = yield subClassModel.findById(testUser.documentRef.id);
|
|
220
|
+
expect(newDocument).toBeInstanceOf(test_user_1.SubClass);
|
|
221
|
+
expect(newDocument.year).toBe(2045);
|
|
222
|
+
}));
|
|
223
|
+
it('should read an array of references', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
224
|
+
const loadedUser = yield model.findById(testUser.id);
|
|
225
|
+
expect(loadedUser.manyRefs).toHaveLength(2);
|
|
226
|
+
expect(loadedUser.manyRefs[0]).toBeInstanceOf(test_user_1.SubClass);
|
|
227
|
+
expect(loadedUser.manyRefs[0].id).toEqual(testUser.manyRefs[0].id);
|
|
228
|
+
expect(loadedUser.manyRefs[0].year).toBeUndefined();
|
|
229
|
+
expect(loadedUser.manyRefs[1]).toBeInstanceOf(test_user_1.SubClass);
|
|
230
|
+
expect(loadedUser.manyRefs[1].id).toEqual(testUser.manyRefs[1].id);
|
|
231
|
+
expect(loadedUser.manyRefs[1].year).toBeUndefined();
|
|
232
|
+
}));
|
|
233
|
+
it('should fill array of refs', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
234
|
+
const loadedUser = yield model.findById(testUser.id);
|
|
235
|
+
yield entropic_bond_1.Store.populate(loadedUser.manyRefs);
|
|
236
|
+
expect(loadedUser.manyRefs[0].year).toBe(2081);
|
|
237
|
+
expect(loadedUser.manyRefs[1].year).toBe(2082);
|
|
238
|
+
}));
|
|
239
|
+
it('should save a reference when declared @persistentAt', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
240
|
+
const loadedUser = yield model.findById(testUser.id);
|
|
241
|
+
expect(loadedUser.derived.id).toEqual(testUser.derived.id);
|
|
242
|
+
expect(loadedUser.derived.salary).toBeUndefined();
|
|
243
|
+
yield entropic_bond_1.Store.populate(loadedUser.derived);
|
|
244
|
+
expect(loadedUser.derived.salary).toBe(1350);
|
|
245
|
+
expect(loadedUser.derived.id).toBe(testUser.derived.id);
|
|
246
|
+
}));
|
|
247
|
+
it('should populate from special collection when declared with @persistentRefAt', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
248
|
+
const loadedUser = yield model.findById('user6');
|
|
249
|
+
yield entropic_bond_1.Store.populate(loadedUser.derived);
|
|
250
|
+
expect(loadedUser.derived.salary).toBe(2800);
|
|
251
|
+
expect(loadedUser.derived.id).toBe('user4');
|
|
252
|
+
}));
|
|
253
|
+
it('should save a reference when declared @persistentAt as array', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
254
|
+
const loadedUser = yield model.findById(testUser.id);
|
|
255
|
+
expect(loadedUser.manyDerived[0].id).toEqual(testUser.manyDerived[0].id);
|
|
256
|
+
expect(loadedUser.manyDerived[0].salary).toBeUndefined();
|
|
257
|
+
expect(loadedUser.manyDerived[1].salary).toBeUndefined();
|
|
258
|
+
yield entropic_bond_1.Store.populate(loadedUser.manyDerived);
|
|
259
|
+
expect(loadedUser.manyDerived[0].salary).toBe(990);
|
|
260
|
+
expect(loadedUser.manyDerived[0].id).toBe(testUser.manyDerived[0].id);
|
|
261
|
+
expect(loadedUser.manyDerived[1].salary).toBe(1990);
|
|
262
|
+
expect(loadedUser.manyDerived[1].id).toBe(testUser.manyDerived[1].id);
|
|
263
|
+
}));
|
|
264
|
+
it('should not overwrite not filled ref in collection', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
265
|
+
const loadedUser = yield model.findById('user6');
|
|
266
|
+
yield model.save(loadedUser);
|
|
267
|
+
const refInCollection = yield model.findById('user4');
|
|
268
|
+
expect(refInCollection.salary).toBe(2800);
|
|
269
|
+
}));
|
|
270
|
+
it('should save loaded ref with assigned new instance', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
271
|
+
const loadedUser = yield model.findById('user6');
|
|
272
|
+
loadedUser.derived = new test_user_1.DerivedUser();
|
|
273
|
+
loadedUser.derived.salary = 345;
|
|
274
|
+
yield model.save(loadedUser);
|
|
275
|
+
const refInCollection = yield model.findById(loadedUser.derived.id);
|
|
276
|
+
expect(refInCollection.salary).toBe(345);
|
|
277
|
+
}));
|
|
278
|
+
it('should save loaded ref with modified ref data', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
279
|
+
const loadedUser = yield model.findById('user6');
|
|
280
|
+
yield entropic_bond_1.Store.populate(loadedUser.derived);
|
|
281
|
+
loadedUser.derived.salary = 1623;
|
|
282
|
+
yield model.save(loadedUser);
|
|
283
|
+
const refInCollection = yield model.findById('user4');
|
|
284
|
+
expect(refInCollection.salary).toBe(1623);
|
|
285
|
+
}));
|
|
286
|
+
});
|
|
287
|
+
describe('Operations on queries', () => {
|
|
288
|
+
it('should limit the result set', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
289
|
+
const unlimited = yield model.find().get();
|
|
290
|
+
const limited = yield model.find().limit(2).get();
|
|
291
|
+
expect(unlimited.length).not.toBe(limited.length);
|
|
292
|
+
expect(limited).toHaveLength(2);
|
|
293
|
+
}));
|
|
294
|
+
it('should sort ascending the result set', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
295
|
+
const docs = yield model.find().orderBy('age').get();
|
|
296
|
+
expect(docs[0].id).toEqual('user2');
|
|
297
|
+
expect(docs[1].id).toEqual('user1');
|
|
298
|
+
}));
|
|
299
|
+
it('should sort descending the result set', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
300
|
+
const docs = yield model.find().orderBy('age', 'desc').get();
|
|
301
|
+
expect(docs[0].id).toEqual('user3');
|
|
302
|
+
expect(docs[1].id).toEqual('user5');
|
|
303
|
+
}));
|
|
304
|
+
it('should sort by deep property path', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
305
|
+
const docs = yield model.find().orderByDeepProp('name.firstName', 'desc').get();
|
|
306
|
+
expect(docs[0].id).toEqual('user6');
|
|
307
|
+
expect(docs[1].id).toEqual('user5');
|
|
308
|
+
}));
|
|
309
|
+
it('should sort by swallow property path', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
310
|
+
const docs = yield model.find().orderByDeepProp('age').get();
|
|
311
|
+
expect(docs[0].id).toEqual('user2');
|
|
312
|
+
expect(docs[1].id).toEqual('user1');
|
|
313
|
+
}));
|
|
314
|
+
describe('Data Cursors', () => {
|
|
315
|
+
beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
316
|
+
yield model.find().get(2);
|
|
317
|
+
}));
|
|
318
|
+
it('should get next result set', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
319
|
+
const docs = yield model.next();
|
|
320
|
+
const mockDataArr = Object.values(mock_data_json_1.default.TestUser);
|
|
321
|
+
expect(docs).toHaveLength(2);
|
|
322
|
+
expect(docs[0].id).toEqual(mockDataArr[2].id);
|
|
323
|
+
expect(docs[0].id).toEqual('user3');
|
|
324
|
+
}));
|
|
325
|
+
it('should not go beyond the end of result set', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
326
|
+
yield model.next();
|
|
327
|
+
yield model.next();
|
|
328
|
+
const docs = yield model.next();
|
|
329
|
+
expect(docs).toHaveLength(0);
|
|
330
|
+
}));
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
describe('SubCollections', () => {
|
|
334
|
+
let model;
|
|
335
|
+
beforeEach(() => {
|
|
336
|
+
model = entropic_bond_1.Store.getModelForSubCollection(testUser, 'SubClass');
|
|
337
|
+
});
|
|
338
|
+
it('should retrieve from subcollection', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
339
|
+
const subClass = new test_user_1.SubClass();
|
|
340
|
+
subClass.year = 3452;
|
|
341
|
+
yield model.save(subClass);
|
|
342
|
+
const loaded = yield model.findById(subClass.id);
|
|
343
|
+
expect(loaded.year).toBe(3452);
|
|
344
|
+
}));
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
//# sourceMappingURL=firebase-admin-datasource.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firebase-admin-datasource.spec.js","sourceRoot":"","sources":["../../src/store/firebase-admin-datasource.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@entropic-bond/firebase-admin",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"access": "public",
|
|
6
|
+
"branches": [
|
|
7
|
+
"master"
|
|
8
|
+
]
|
|
9
|
+
},
|
|
10
|
+
"release": {
|
|
11
|
+
"plugins": [
|
|
12
|
+
"@semantic-release/release-notes-generator",
|
|
13
|
+
"@semantic-release/changelog",
|
|
14
|
+
"@semantic-release/npm",
|
|
15
|
+
"@semantic-release/git",
|
|
16
|
+
"@semantic-release/github"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"description": "Firebase Admin plugins for Entropic Bond",
|
|
20
|
+
"main": "lib/index.js",
|
|
21
|
+
"types": "lib/index.d.ts",
|
|
22
|
+
"files": [
|
|
23
|
+
"lib"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"test": "firebase emulators:exec --project demo-test 'jest --forceExit'",
|
|
27
|
+
"build": "npm run build-cjs",
|
|
28
|
+
"prepare": "npm run build",
|
|
29
|
+
"build-ts": "cp -r ./src/ ./lib",
|
|
30
|
+
"build-cjs": "tsc -p tsconfig-cjs.json",
|
|
31
|
+
"emulators": "firebase emulators:start --project demo-test"
|
|
32
|
+
},
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/entropic-bond/entropic-bond-firebase-admin.git"
|
|
36
|
+
},
|
|
37
|
+
"keywords": [
|
|
38
|
+
"firebase",
|
|
39
|
+
"entropic bond"
|
|
40
|
+
],
|
|
41
|
+
"author": "Josep Seto",
|
|
42
|
+
"license": "ISC",
|
|
43
|
+
"bugs": {
|
|
44
|
+
"url": "https://github.com/entropic-bond/entropic-bond-firebase-admin/issues"
|
|
45
|
+
},
|
|
46
|
+
"homepage": "https://github.com/entropic-bond/entropic-bond-firebase-admin#readme",
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@semantic-release/changelog": "^6.0.1",
|
|
49
|
+
"@semantic-release/git": "^10.0.1",
|
|
50
|
+
"@types/jest": "^28.1.7",
|
|
51
|
+
"@types/node-fetch": "^3.0.3",
|
|
52
|
+
"git-branch-is": "^4.0.0",
|
|
53
|
+
"husky": "^8.0.1",
|
|
54
|
+
"jest": "^28.1.3",
|
|
55
|
+
"node-fetch": "^2.6.1",
|
|
56
|
+
"semantic-release": "^19.0.3",
|
|
57
|
+
"ts-jest": "^28.0.8",
|
|
58
|
+
"typescript": "^4.7.4"
|
|
59
|
+
},
|
|
60
|
+
"dependencies": {
|
|
61
|
+
"entropic-bond": "^1.29.1",
|
|
62
|
+
"firebase-admin": "^11.0.1"
|
|
63
|
+
},
|
|
64
|
+
"husky": {
|
|
65
|
+
"hooks": {
|
|
66
|
+
"pre-push": "if git-branch-is master; then npm test; fi"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|