@dereekb/firebase-server 3.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.
Files changed (138) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +7 -0
  3. package/package.json +34 -0
  4. package/src/index.d.ts +2 -0
  5. package/src/index.js +6 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/auth/auth.nest.d.ts +28 -0
  8. package/src/lib/auth/auth.nest.js +56 -0
  9. package/src/lib/auth/auth.nest.js.map +1 -0
  10. package/src/lib/auth/auth.service.d.ts +161 -0
  11. package/src/lib/auth/auth.service.js +125 -0
  12. package/src/lib/auth/auth.service.js.map +1 -0
  13. package/src/lib/auth/auth.user.d.ts +0 -0
  14. package/src/lib/auth/auth.user.js +2 -0
  15. package/src/lib/auth/auth.user.js.map +1 -0
  16. package/src/lib/auth/index.d.ts +2 -0
  17. package/src/lib/auth/index.js +7 -0
  18. package/src/lib/auth/index.js.map +1 -0
  19. package/src/lib/firebase/firebase.nest.d.ts +7 -0
  20. package/src/lib/firebase/firebase.nest.js +17 -0
  21. package/src/lib/firebase/firebase.nest.js.map +1 -0
  22. package/src/lib/firebase/index.d.ts +1 -0
  23. package/src/lib/firebase/index.js +5 -0
  24. package/src/lib/firebase/index.js.map +1 -0
  25. package/src/lib/firestore/driver.accessor.batch.d.ts +31 -0
  26. package/src/lib/firestore/driver.accessor.batch.js +65 -0
  27. package/src/lib/firestore/driver.accessor.batch.js.map +1 -0
  28. package/src/lib/firestore/driver.accessor.d.ts +11 -0
  29. package/src/lib/firestore/driver.accessor.default.d.ts +15 -0
  30. package/src/lib/firestore/driver.accessor.default.js +45 -0
  31. package/src/lib/firestore/driver.accessor.default.js.map +1 -0
  32. package/src/lib/firestore/driver.accessor.js +53 -0
  33. package/src/lib/firestore/driver.accessor.js.map +1 -0
  34. package/src/lib/firestore/driver.accessor.transaction.d.ts +31 -0
  35. package/src/lib/firestore/driver.accessor.transaction.js +64 -0
  36. package/src/lib/firestore/driver.accessor.transaction.js.map +1 -0
  37. package/src/lib/firestore/driver.d.ts +4 -0
  38. package/src/lib/firestore/driver.js +15 -0
  39. package/src/lib/firestore/driver.js.map +1 -0
  40. package/src/lib/firestore/driver.query.d.ts +6 -0
  41. package/src/lib/firestore/driver.query.js +40 -0
  42. package/src/lib/firestore/driver.query.js.map +1 -0
  43. package/src/lib/firestore/firestore.d.ts +5 -0
  44. package/src/lib/firestore/firestore.js +10 -0
  45. package/src/lib/firestore/firestore.js.map +1 -0
  46. package/src/lib/firestore/firestore.nest.d.ts +44 -0
  47. package/src/lib/firestore/firestore.nest.js +81 -0
  48. package/src/lib/firestore/firestore.nest.js.map +1 -0
  49. package/src/lib/firestore/index.d.ts +5 -0
  50. package/src/lib/firestore/index.js +9 -0
  51. package/src/lib/firestore/index.js.map +1 -0
  52. package/src/lib/function/assert.d.ts +2 -0
  53. package/src/lib/function/assert.js +12 -0
  54. package/src/lib/function/assert.js.map +1 -0
  55. package/src/lib/function/context.d.ts +4 -0
  56. package/src/lib/function/context.js +16 -0
  57. package/src/lib/function/context.js.map +1 -0
  58. package/src/lib/function/error.d.ts +4 -0
  59. package/src/lib/function/error.js +17 -0
  60. package/src/lib/function/error.js.map +1 -0
  61. package/src/lib/function/index.d.ts +4 -0
  62. package/src/lib/function/index.js +8 -0
  63. package/src/lib/function/index.js.map +1 -0
  64. package/src/lib/function/type.d.ts +5 -0
  65. package/src/lib/function/type.js +3 -0
  66. package/src/lib/function/type.js.map +1 -0
  67. package/src/lib/index.d.ts +5 -0
  68. package/src/lib/index.js +9 -0
  69. package/src/lib/index.js.map +1 -0
  70. package/src/lib/nest/app.d.ts +36 -0
  71. package/src/lib/nest/app.js +71 -0
  72. package/src/lib/nest/app.js.map +1 -0
  73. package/src/lib/nest/function/context.d.ts +12 -0
  74. package/src/lib/nest/function/context.js +12 -0
  75. package/src/lib/nest/function/context.js.map +1 -0
  76. package/src/lib/nest/function/index.d.ts +4 -0
  77. package/src/lib/nest/function/index.js +8 -0
  78. package/src/lib/nest/function/index.js.map +1 -0
  79. package/src/lib/nest/function/nest.d.ts +91 -0
  80. package/src/lib/nest/function/nest.js +74 -0
  81. package/src/lib/nest/function/nest.js.map +1 -0
  82. package/src/lib/nest/function/nest.utility.d.ts +10 -0
  83. package/src/lib/nest/function/nest.utility.js +23 -0
  84. package/src/lib/nest/function/nest.utility.js.map +1 -0
  85. package/src/lib/nest/function/transform.d.ts +10 -0
  86. package/src/lib/nest/function/transform.js +27 -0
  87. package/src/lib/nest/function/transform.js.map +1 -0
  88. package/src/lib/nest/index.d.ts +2 -0
  89. package/src/lib/nest/index.js +6 -0
  90. package/src/lib/nest/index.js.map +1 -0
  91. package/src/test/firebase/firebase.admin.auth.d.ts +132 -0
  92. package/src/test/firebase/firebase.admin.auth.js +168 -0
  93. package/src/test/firebase/firebase.admin.auth.js.map +1 -0
  94. package/src/test/firebase/firebase.admin.collection.d.ts +57 -0
  95. package/src/test/firebase/firebase.admin.collection.js +61 -0
  96. package/src/test/firebase/firebase.admin.collection.js.map +1 -0
  97. package/src/test/firebase/firebase.admin.d.ts +73 -0
  98. package/src/test/firebase/firebase.admin.function.d.ts +46 -0
  99. package/src/test/firebase/firebase.admin.function.js +116 -0
  100. package/src/test/firebase/firebase.admin.function.js.map +1 -0
  101. package/src/test/firebase/firebase.admin.js +142 -0
  102. package/src/test/firebase/firebase.admin.js.map +1 -0
  103. package/src/test/firebase/firebase.admin.nest.d.ts +62 -0
  104. package/src/test/firebase/firebase.admin.nest.function.context.d.ts +22 -0
  105. package/src/test/firebase/firebase.admin.nest.function.context.js +35 -0
  106. package/src/test/firebase/firebase.admin.nest.function.context.js.map +1 -0
  107. package/src/test/firebase/firebase.admin.nest.function.d.ts +25 -0
  108. package/src/test/firebase/firebase.admin.nest.function.js +50 -0
  109. package/src/test/firebase/firebase.admin.nest.function.js.map +1 -0
  110. package/src/test/firebase/firebase.admin.nest.js +86 -0
  111. package/src/test/firebase/firebase.admin.nest.js.map +1 -0
  112. package/src/test/firebase/firebase.admin.test.server.d.ts +3 -0
  113. package/src/test/firebase/firebase.admin.test.server.js +39 -0
  114. package/src/test/firebase/firebase.admin.test.server.js.map +1 -0
  115. package/src/test/firebase/firebase.d.ts +30 -0
  116. package/src/test/firebase/firebase.js +76 -0
  117. package/src/test/firebase/firebase.js.map +1 -0
  118. package/src/test/firebase/index.d.ts +8 -0
  119. package/src/test/firebase/index.js +12 -0
  120. package/src/test/firebase/index.js.map +1 -0
  121. package/src/test/firestore/firestore.admin.d.ts +9 -0
  122. package/src/test/firestore/firestore.admin.js +14 -0
  123. package/src/test/firestore/firestore.admin.js.map +1 -0
  124. package/src/test/firestore/firestore.d.ts +22 -0
  125. package/src/test/firestore/firestore.fixture.admin.d.ts +6 -0
  126. package/src/test/firestore/firestore.fixture.admin.js +12 -0
  127. package/src/test/firestore/firestore.fixture.admin.js.map +1 -0
  128. package/src/test/firestore/firestore.js +57 -0
  129. package/src/test/firestore/firestore.js.map +1 -0
  130. package/src/test/firestore/index.d.ts +2 -0
  131. package/src/test/firestore/index.js +7 -0
  132. package/src/test/firestore/index.js.map +1 -0
  133. package/src/test/index.d.ts +2 -0
  134. package/src/test/index.js +6 -0
  135. package/src/test/index.js.map +1 -0
  136. package/test-setup.d.ts +0 -0
  137. package/test-setup.js +6 -0
  138. package/test-setup.js.map +1 -0
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.testFirestoreClaimsFromUserRecord = exports.decodeEncodedCreateCustomTokenResult = exports.createEncodedTestFirestoreTokenForUserRecord = exports.createTestFirestoreTokenForUserRecord = exports.createTestFunctionContextOptions = exports.testUidFactory = exports.authorizedUserContextFactory = exports.authorizedUserContext = exports.AuthorizedUserTestContextInstance = exports.AuthorizedUserTestContextFixture = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const util_1 = require("@dereekb/util");
6
+ const jsonwebtoken_1 = require("jsonwebtoken");
7
+ class AuthorizedUserTestContextFixture extends util_1.AbstractChildJestTestContextFixture {
8
+ // MARK: AuthorizedUserTestContext (Forwarded)
9
+ get uid() {
10
+ return this.instance.uid;
11
+ }
12
+ loadUserRecord() {
13
+ return this.instance.loadUserRecord();
14
+ }
15
+ loadIdToken() {
16
+ return this.instance.loadIdToken();
17
+ }
18
+ loadDecodedIdToken() {
19
+ return this.instance.loadDecodedIdToken();
20
+ }
21
+ makeContextOptions() {
22
+ return this.instance.makeContextOptions();
23
+ }
24
+ callCloudFunction(fn, params) {
25
+ return this.instance.callCloudFunction(fn, params);
26
+ }
27
+ }
28
+ exports.AuthorizedUserTestContextFixture = AuthorizedUserTestContextFixture;
29
+ class AuthorizedUserTestContextInstance {
30
+ constructor(uid, testContext) {
31
+ this.uid = uid;
32
+ this.testContext = testContext;
33
+ }
34
+ loadUserRecord() {
35
+ return this.testContext.auth.getUser(this.uid);
36
+ }
37
+ loadIdToken() {
38
+ return this.loadUserRecord().then((record) => createEncodedTestFirestoreTokenForUserRecord(this.testContext.auth, record));
39
+ }
40
+ loadDecodedIdToken() {
41
+ return this.loadIdToken().then(decodeEncodedCreateCustomTokenResult);
42
+ }
43
+ makeContextOptions() {
44
+ return this.loadUserRecord().then((record) => createTestFunctionContextOptions(this.testContext.auth, record));
45
+ }
46
+ callCloudFunction(fn, params) {
47
+ return this.makeContextOptions().then(options => fn(params, options));
48
+ }
49
+ callEventCloudFunction(fn, params, contextOptions) {
50
+ return this.makeContextOptions().then(options => fn(params, (contextOptions) ? Object.assign(Object.assign({}, contextOptions), options) : options));
51
+ }
52
+ }
53
+ exports.AuthorizedUserTestContextInstance = AuthorizedUserTestContextInstance;
54
+ /**
55
+ * Convenience function for using authorizedUserContextFactory directly and passing buildTests.
56
+ */
57
+ function authorizedUserContext(config, buildTests) {
58
+ authorizedUserContextFactory(config)({ f: config.f }, buildTests);
59
+ }
60
+ exports.authorizedUserContext = authorizedUserContext;
61
+ ;
62
+ /**
63
+ * Creates a new Jest Context that has a random user for authorization for use in firebase server tests.
64
+ */
65
+ function authorizedUserContextFactory(config) {
66
+ const { uid: uidGetter, makeInstance = (uid, testInstance) => new AuthorizedUserTestContextInstance(uid, testInstance), makeFixture = (f) => new AuthorizedUserTestContextFixture(f), makeUserDetails = () => ({}), initUser } = config;
67
+ const makeUid = (uidGetter) ? (0, util_1.asGetter)(uidGetter) : exports.testUidFactory;
68
+ return (params, buildTests) => {
69
+ const { f, user: inputUser } = params;
70
+ return (0, util_1.useJestContextFixture)({
71
+ fixture: makeFixture(f),
72
+ buildTests,
73
+ initInstance: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
74
+ const uid = (inputUser === null || inputUser === void 0 ? void 0 : inputUser.uid) || makeUid();
75
+ const { details, claims } = makeUserDetails(uid, params);
76
+ const auth = f.instance.auth;
77
+ const userRecord = yield auth.createUser(Object.assign(Object.assign({ uid, displayName: 'Test Person' }, details), inputUser));
78
+ if (claims) {
79
+ yield auth.setCustomUserClaims(uid, claims);
80
+ }
81
+ const instance = yield makeInstance(uid, f.instance, params, userRecord);
82
+ if (initUser) {
83
+ yield initUser(instance, params);
84
+ }
85
+ return instance;
86
+ }),
87
+ destroyInstance: (instance) => tslib_1.__awaiter(this, void 0, void 0, function* () {
88
+ const app = instance.testContext.app;
89
+ const uid = instance.uid;
90
+ yield app.auth().deleteUser(uid);
91
+ })
92
+ });
93
+ };
94
+ }
95
+ exports.authorizedUserContextFactory = authorizedUserContextFactory;
96
+ ;
97
+ /**
98
+ * Incrementing number factory for generating test UID values.
99
+ *
100
+ * Has the format 'test-uid-<number>'
101
+ */
102
+ exports.testUidFactory = (0, util_1.mapGetter)((0, util_1.incrementingNumberFactory)(), (i) => `test-uid-${i}`);
103
+ /**
104
+ * Creates a CallableContextOptions with auth attached corresponding to the input UserRecord.
105
+ *
106
+ * @param auth
107
+ * @param userRecord
108
+ * @returns
109
+ */
110
+ function createTestFunctionContextOptions(auth, userRecord) {
111
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
112
+ const contextAuth = yield createTestFirestoreTokenForUserRecord(auth, userRecord);
113
+ const contextOptions = {
114
+ auth: contextAuth
115
+ };
116
+ return contextOptions;
117
+ });
118
+ }
119
+ exports.createTestFunctionContextOptions = createTestFunctionContextOptions;
120
+ /**
121
+ * Creates and decodes a firestore token used for testing.
122
+ *
123
+ * @param auth
124
+ * @param userRecord
125
+ * @returns
126
+ */
127
+ function createTestFirestoreTokenForUserRecord(auth, userRecord) {
128
+ return createEncodedTestFirestoreTokenForUserRecord(auth, userRecord).then(decodeEncodedCreateCustomTokenResult);
129
+ }
130
+ exports.createTestFirestoreTokenForUserRecord = createTestFirestoreTokenForUserRecord;
131
+ /**
132
+ * Creates an encoded firestore token used for testing.
133
+ *
134
+ * @param auth
135
+ * @param userRecord
136
+ * @returns
137
+ */
138
+ function createEncodedTestFirestoreTokenForUserRecord(auth, userRecord) {
139
+ // TODO: Consider replacing createCustomToken, as the custom claims are put into an object called claims in the JWT, instead of spread over.
140
+ return auth.createCustomToken(userRecord.uid, testFirestoreClaimsFromUserRecord(userRecord));
141
+ }
142
+ exports.createEncodedTestFirestoreTokenForUserRecord = createEncodedTestFirestoreTokenForUserRecord;
143
+ function decodeEncodedCreateCustomTokenResult(token) {
144
+ var _a, _b;
145
+ const decoded = (0, jsonwebtoken_1.decode)(token);
146
+ const decodedToken = Object.assign(Object.assign(Object.assign({}, decoded), decoded.claims), { auth_time: decoded.iat, firebase: (_b = (_a = decoded.claims) === null || _a === void 0 ? void 0 : _a.firebase) !== null && _b !== void 0 ? _b : {} });
147
+ delete decodedToken.claims; // remove the "claims" item if it exists.
148
+ return decodedToken;
149
+ }
150
+ exports.decodeEncodedCreateCustomTokenResult = decodeEncodedCreateCustomTokenResult;
151
+ function testFirestoreClaimsFromUserRecord(userRecord) {
152
+ var _a;
153
+ // Copy claims to be similar to DecodedIdToken pieces.
154
+ const baseClaims = {
155
+ "picture": userRecord.photoURL,
156
+ "email": userRecord.email,
157
+ "email_verified": (_a = userRecord.emailVerified) !== null && _a !== void 0 ? _a : false,
158
+ firebase: {
159
+ sign_in_provider: '@dereekb/firebase-server/test',
160
+ identities: []
161
+ }
162
+ };
163
+ const customClaims = userRecord.customClaims;
164
+ const claims = Object.assign(Object.assign({}, customClaims), baseClaims);
165
+ return claims;
166
+ }
167
+ exports.testFirestoreClaimsFromUserRecord = testFirestoreClaimsFromUserRecord;
168
+ //# sourceMappingURL=firebase.admin.auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase.admin.auth.js","sourceRoot":"","sources":["../../../../../../packages/firebase-server/src/test/firebase/firebase.admin.auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { FirestoreCollection, FirestoreDocument, DocumentReference } from '@dereekb/firebase';
2
+ import { JestTestContextFixture, AbstractChildJestTestContextFixture, PromiseOrValue, ModelKey } from "@dereekb/util";
3
+ import { FirebaseAdminTestContext } from "./firebase.admin";
4
+ /**
5
+ * Testing context for a single model.
6
+ */
7
+ export interface ModelTestContext<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> {
8
+ get documentId(): ModelKey;
9
+ get documentRef(): DocumentReference<T>;
10
+ get document(): D;
11
+ }
12
+ export declare class ModelTestContextFixture<T, D extends FirestoreDocument<T> = FirestoreDocument<T>, PI extends FirebaseAdminTestContext = FirebaseAdminTestContext, PF extends JestTestContextFixture<PI> = JestTestContextFixture<PI>, I extends ModelTestContextInstance<T, D, PI> = ModelTestContextInstance<T, D, PI>> extends AbstractChildJestTestContextFixture<I, PF> implements ModelTestContext<T, D> {
13
+ get documentId(): ModelKey;
14
+ get documentRef(): DocumentReference<T>;
15
+ get document(): D;
16
+ }
17
+ export declare class ModelTestContextInstance<T, D extends FirestoreDocument<T> = FirestoreDocument<T>, PI extends FirebaseAdminTestContext = FirebaseAdminTestContext> implements ModelTestContext<T, D> {
18
+ readonly collection: FirestoreCollection<T, D>;
19
+ readonly ref: DocumentReference<T>;
20
+ readonly testContext: PI;
21
+ constructor(collection: FirestoreCollection<T, D>, ref: DocumentReference<T>, testContext: PI);
22
+ get documentId(): ModelKey;
23
+ get documentRef(): DocumentReference<T>;
24
+ get document(): D;
25
+ }
26
+ /**
27
+ * authorizedUserContext/authorizedUserContextFactory parameters.
28
+ */
29
+ export interface ModelTestContextFactoryParams<T, D extends FirestoreDocument<T> = FirestoreDocument<T>, C = any, PI extends FirebaseAdminTestContext = FirebaseAdminTestContext, PF extends JestTestContextFixture<PI> = JestTestContextFixture<PI>, I extends ModelTestContextInstance<T, D, PI> = ModelTestContextInstance<T, D, PI>, F extends ModelTestContextFixture<T, D, PI, PF, I> = ModelTestContextFixture<T, D, PI, PF, I>> {
30
+ /**
31
+ * Creates a ModelTestContextInstanceDelegate from the parent instance.
32
+ */
33
+ getCollection: (parentInstance: PI, config: C) => FirestoreCollection<T, D>;
34
+ /**
35
+ * Creates the custom fixture. If not defined, a ModelTestContextFixture is created.
36
+ */
37
+ makeFixture?: (parent: PF) => F;
38
+ /**
39
+ * Optional function to create a DocumentReference.
40
+ */
41
+ makeRef?: (collection: FirestoreCollection<T, D>, config: C, parentInstance: PI) => Promise<DocumentReference<T>>;
42
+ /**
43
+ * Custom make instance function. If not defined, a ModelTestContextInstance will be generated.
44
+ */
45
+ makeInstance?: (collection: FirestoreCollection<T, D>, ref: DocumentReference<T>, testInstance: PI) => PromiseOrValue<I>;
46
+ /**
47
+ * Optional function to initialize the document for this instance.
48
+ */
49
+ initDocument?: (instance: I, config: C) => Promise<void>;
50
+ }
51
+ export declare type ModelTestContextParams<C = any, PI extends FirebaseAdminTestContext = FirebaseAdminTestContext, PF extends JestTestContextFixture<PI> = JestTestContextFixture<PI>> = {
52
+ f: PF;
53
+ } & C;
54
+ /**
55
+ * Creates a new Jest Context that has a random user for authorization for use in firebase server tests.
56
+ */
57
+ export declare function modelTestContextFactory<T, D extends FirestoreDocument<T> = FirestoreDocument<T>, C = any, PI extends FirebaseAdminTestContext = FirebaseAdminTestContext, PF extends JestTestContextFixture<PI> = JestTestContextFixture<PI>, I extends ModelTestContextInstance<T, D, PI> = ModelTestContextInstance<T, D, PI>, F extends ModelTestContextFixture<T, D, PI, PF, I> = ModelTestContextFixture<T, D, PI, PF, I>>(config: ModelTestContextFactoryParams<T, D, C, PI, PF, I, F>): (params: ModelTestContextParams<C, PI, PF>, buildTests: (u: F) => void) => void;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.modelTestContextFactory = exports.ModelTestContextInstance = exports.ModelTestContextFixture = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const util_1 = require("@dereekb/util");
6
+ class ModelTestContextFixture extends util_1.AbstractChildJestTestContextFixture {
7
+ // MARK: ModelTestContext (Forwarded)
8
+ get documentId() {
9
+ return this.instance.documentId;
10
+ }
11
+ get documentRef() {
12
+ return this.instance.documentRef;
13
+ }
14
+ get document() {
15
+ return this.instance.document;
16
+ }
17
+ }
18
+ exports.ModelTestContextFixture = ModelTestContextFixture;
19
+ class ModelTestContextInstance {
20
+ constructor(collection, ref, testContext) {
21
+ this.collection = collection;
22
+ this.ref = ref;
23
+ this.testContext = testContext;
24
+ }
25
+ get documentId() {
26
+ return this.ref.id;
27
+ }
28
+ get documentRef() {
29
+ return this.ref;
30
+ }
31
+ get document() {
32
+ return this.collection.documentAccessor().loadDocument(this.ref);
33
+ }
34
+ }
35
+ exports.ModelTestContextInstance = ModelTestContextInstance;
36
+ /**
37
+ * Creates a new Jest Context that has a random user for authorization for use in firebase server tests.
38
+ */
39
+ function modelTestContextFactory(config) {
40
+ const { getCollection, makeRef = (collection) => collection.documentAccessor().newDocument().documentRef, makeInstance = (collection, ref, testInstance) => new ModelTestContextInstance(collection, ref, testInstance), makeFixture = (f) => new ModelTestContextFixture(f), initDocument } = config;
41
+ return (params, buildTests) => {
42
+ const { f } = params;
43
+ return (0, util_1.useJestContextFixture)({
44
+ fixture: makeFixture(f),
45
+ buildTests,
46
+ initInstance: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
47
+ const parentInstance = f.instance;
48
+ const collection = getCollection(parentInstance, params);
49
+ const ref = yield makeRef(collection, params, parentInstance);
50
+ const instance = yield makeInstance(collection, ref, parentInstance);
51
+ if (initDocument) {
52
+ yield initDocument(instance, params);
53
+ }
54
+ return instance;
55
+ })
56
+ });
57
+ };
58
+ }
59
+ exports.modelTestContextFactory = modelTestContextFactory;
60
+ ;
61
+ //# sourceMappingURL=firebase.admin.collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase.admin.collection.js","sourceRoot":"","sources":["../../../../../../packages/firebase-server/src/test/firebase/firebase.admin.collection.ts"],"names":[],"mappings":";;;;AACA,wCAAuJ;AAYvJ,MAAa,uBAMX,SAAQ,0CAA0C;IAGlD,qCAAqC;IACrC,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;IAClC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IACnC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAChC,CAAC;CAEF;AAtBD,0DAsBC;AAED,MAAa,wBAAwB;IAKnC,YAAqB,UAAqC,EAAW,GAAyB,EAAW,WAAe;QAAnG,eAAU,GAAV,UAAU,CAA2B;QAAW,QAAG,GAAH,GAAG,CAAsB;QAAW,gBAAW,GAAX,WAAW,CAAI;IAAI,CAAC;IAE7H,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnE,CAAC;CAEF;AAnBD,4DAmBC;AAgDD;;GAEG;AACH,SAAgB,uBAAuB,CAOrC,MAA4D;IAC5D,MAAM,EACJ,aAAa,EACb,OAAO,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,WAAW,EAAE,CAAC,WAAW,EACjF,YAAY,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,CAAC,IAAI,wBAAwB,CAAC,UAAU,EAAE,GAAG,EAAE,YAAY,CAAM,EAClH,WAAW,GAAG,CAAC,CAAK,EAAE,EAAE,CAAC,IAAI,uBAAuB,CAAkB,CAAC,CAAC,EACxE,YAAY,EACb,GAAG,MAAM,CAAC;IAEX,OAAO,CAAC,MAAyC,EAAE,UAA0B,EAAE,EAAE;QAC/E,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC;QACrB,OAAO,IAAA,4BAAqB,EAAO;YACjC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAM;YAC5B,UAAU;YACV,YAAY,EAAE,GAAS,EAAE;gBACvB,MAAM,cAAc,GAAG,CAAC,CAAC,QAAQ,CAAC;gBAClC,MAAM,UAAU,GAAG,aAAa,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;gBACzD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;gBAC9D,MAAM,QAAQ,GAAM,MAAM,YAAY,CAAC,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;gBAExE,IAAI,YAAY,EAAE;oBAChB,MAAM,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;iBACtC;gBAED,OAAO,QAAQ,CAAC;YAClB,CAAC,CAAA;SACF,CAAC,CAAC;IACL,CAAC,CAAA;AACH,CAAC;AAnCD,0DAmCC;AAAA,CAAC"}
@@ -0,0 +1,73 @@
1
+ import * as admin from 'firebase-admin';
2
+ import { Firestore } from '@google-cloud/firestore';
3
+ import { Auth } from 'firebase-admin/lib/auth/auth';
4
+ import { JestTestFirestoreContextFactory, TestFirestoreContext, TestFirestoreContextFixture, TestFirestoreInstance } from '@dereekb/firebase';
5
+ import { AbstractJestTestContextFixture, Getter, JestBuildTestsWithContextFunction, JestTestContextFactory, JestTestContextFixture } from "@dereekb/util";
6
+ import { GoogleCloudTestFirestoreInstance } from '../firestore/firestore';
7
+ import { CloudFunction as CloudFunctionV1 } from 'firebase-functions';
8
+ import { wrap, WrappedFunction, WrappedScheduledFunction } from 'firebase-functions-test/lib/main';
9
+ export interface FirebaseAdminTestConfig {
10
+ }
11
+ export declare type WrapCloudFunction = typeof wrap;
12
+ export declare type WrapCloudFunctionInput<T> = CloudFunctionV1<T>;
13
+ export declare type WrappedCloudFunction<T> = WrappedScheduledFunction | WrappedFunction<T>;
14
+ export interface FirebaseAdminCloudFunctionWrapper {
15
+ /**
16
+ * Wrap function if available. If not in the right context/supported then this will throw an exception.
17
+ */
18
+ get wrapCloudFunction(): WrapCloudFunction;
19
+ }
20
+ export declare function wrapCloudFunctionForTests<I, T extends WrapCloudFunctionInput<I> = WrapCloudFunctionInput<I>>(wrapper: FirebaseAdminCloudFunctionWrapper, getter: Getter<T>): Getter<WrappedCloudFunction<I>>;
21
+ export interface FirebaseAdminTestContext extends FirebaseAdminCloudFunctionWrapper {
22
+ readonly app: admin.app.App;
23
+ readonly auth: Auth;
24
+ readonly firestore: Firestore;
25
+ readonly firestoreInstance: TestFirestoreInstance;
26
+ readonly firestoreContext: TestFirestoreContext;
27
+ }
28
+ export declare class FirebaseAdminTestContextFixture extends AbstractJestTestContextFixture<FirebaseAdminTestContextInstance> implements FirebaseAdminTestContext {
29
+ get app(): admin.app.App;
30
+ get auth(): Auth;
31
+ get firestore(): Firestore;
32
+ get firestoreInstance(): TestFirestoreInstance;
33
+ get firestoreContext(): TestFirestoreContext;
34
+ get wrapCloudFunction(): WrapCloudFunction;
35
+ }
36
+ export declare class FirebaseAdminTestContextInstance implements FirebaseAdminTestContext {
37
+ readonly app: admin.app.App;
38
+ readonly getTestFirestoreInstance: import("@dereekb/util").CachedFactoryWithInput<GoogleCloudTestFirestoreInstance, any>;
39
+ constructor(app: admin.app.App);
40
+ get auth(): Auth;
41
+ get firestore(): Firestore;
42
+ get firestoreInstance(): TestFirestoreInstance;
43
+ get firestoreContext(): TestFirestoreContext;
44
+ get wrapCloudFunction(): WrapCloudFunction;
45
+ }
46
+ export declare abstract class AbstractFirebaseAdminTestContextInstanceChild<F extends FirebaseAdminTestContextInstance = FirebaseAdminTestContextInstance> implements FirebaseAdminTestContext {
47
+ readonly parent: F;
48
+ constructor(parent: F);
49
+ get app(): admin.app.App;
50
+ get auth(): Auth;
51
+ get firestore(): Firestore;
52
+ get firestoreInstance(): TestFirestoreInstance;
53
+ get firestoreContext(): TestFirestoreContext;
54
+ get wrapCloudFunction(): WrapCloudFunction;
55
+ }
56
+ /**
57
+ * A JestTestContextBuilderFunction for building firebase test context factories using firebase-admin.
58
+ *
59
+ * This can be used to easily build a testing context that sets up RulesTestEnvironment for tests that sets itself up and tears itself down.
60
+ */
61
+ export declare const firebaseAdminTestBuilder: import("@dereekb/util").JestTestContextBuilderFunction<FirebaseAdminTestContextInstance, FirebaseAdminTestContextFixture, FirebaseAdminTestConfig>;
62
+ export declare type FirebaseAdminTestContextFactory = JestTestContextFactory<FirebaseAdminTestContextFixture>;
63
+ export declare const firebaseAdminTestContextFactory: FirebaseAdminTestContextFactory;
64
+ /**
65
+ * Convenience function to build a JestTestFirestoreContextFactory from a FirebaseAdminTestContextFactory.
66
+ *
67
+ * This is useful for composing child tests that will benefit from the firestore testing context, but want the full app available.
68
+ *
69
+ * @param factory
70
+ * @returns
71
+ */
72
+ export declare function firebaseAdminFirestoreContextFixture(factory: JestTestContextFactory<JestTestContextFixture<FirebaseAdminTestContextInstance>>): JestTestFirestoreContextFactory;
73
+ export declare function firebaseAdminFirestoreContextWithFixture(f: JestTestContextFixture<FirebaseAdminTestContextInstance>, buildTests: JestBuildTestsWithContextFunction<TestFirestoreContextFixture>): void;
@@ -0,0 +1,46 @@
1
+ import * as admin from 'firebase-admin';
2
+ import { Firestore } from '@google-cloud/firestore';
3
+ import { Auth } from 'firebase-admin/lib/auth/auth';
4
+ import { FeaturesList } from 'firebase-functions-test/lib/features';
5
+ import { TestFirestoreContext, TestFirestoreInstance } from '@dereekb/firebase';
6
+ import { AbstractJestTestContextFixture, JestTestContextFactory, JestTestContextFixture } from "@dereekb/util";
7
+ import { FirebaseAdminTestContext, FirebaseAdminTestContextInstance, WrapCloudFunction } from './firebase.admin';
8
+ export declare function setupFirebaseAdminFunctionTestSingleton(reroll?: boolean): FeaturesList;
9
+ export declare function rerollFirebaseAdminFunctionTestSingleton(): FeaturesList;
10
+ export interface FirebaseAdminFunctionTestConfig {
11
+ /**
12
+ * Whether or not the use the functions singleton. Is true by default. Requires that setupFirebaseAdminFunctionTestSingleton() be called.
13
+ *
14
+ * If false, your tests may need to be run in serial rather than parallel to avoid cross-test contamination.
15
+ *
16
+ * @deprecated Is false by default to allow a new app to be defined each time. Usage of the singleton does not make sense. Remove later, and require that tests be run in serial if jest isn't behaving.
17
+ */
18
+ useFunctionSingletonContext: boolean;
19
+ }
20
+ export interface FirebaseAdminFunctionTestContext extends FirebaseAdminTestContext {
21
+ }
22
+ export interface FullFirebaseAdminFunctionTestContext extends FirebaseAdminFunctionTestContext, JestTestContextFixture<FirebaseAdminFunctionTestContextInstance> {
23
+ }
24
+ export declare class FirebaseAdminFunctionTestContextFixture extends AbstractJestTestContextFixture<FirebaseAdminFunctionTestContextInstance> implements FirebaseAdminFunctionTestContext {
25
+ get app(): admin.app.App;
26
+ get auth(): Auth;
27
+ get firestore(): Firestore;
28
+ get firestoreInstance(): TestFirestoreInstance;
29
+ get firestoreContext(): TestFirestoreContext;
30
+ get wrapCloudFunction(): WrapCloudFunction;
31
+ }
32
+ export declare class FirebaseAdminFunctionTestContextInstance extends FirebaseAdminTestContextInstance implements FirebaseAdminFunctionTestContext {
33
+ readonly instance: FeaturesList;
34
+ constructor(instance: FeaturesList, app: admin.app.App);
35
+ get wrapCloudFunction(): WrapCloudFunction;
36
+ }
37
+ export declare let DEFAULT_FIREBASE_ADMIN_FUNCTION_TEST_USE_FUNCTION_SINGLETON_CONTEXT: boolean;
38
+ export declare function setDefaultFirebaseAdminFunctionTestUseFunctionSingleton(use: boolean): void;
39
+ /**
40
+ * A JestTestContextBuilderFunction for building firebase test context factories using firebase-admin.
41
+ *
42
+ * This can be used to easily build a testing context that sets up RulesTestEnvironment for tests that sets itself up and tears itself down.
43
+ */
44
+ export declare const firebaseAdminFunctionTestBuilder: import("@dereekb/util").JestTestContextBuilderFunction<FirebaseAdminTestContextInstance, FirebaseAdminFunctionTestContextFixture, FirebaseAdminFunctionTestConfig>;
45
+ export declare type FirebaseAdminFunctionTestContextFactory = JestTestContextFactory<FirebaseAdminFunctionTestContextFixture>;
46
+ export declare const firebaseAdminFunctionTestContextFactory: FirebaseAdminFunctionTestContextFactory;
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.firebaseAdminFunctionTestContextFactory = exports.firebaseAdminFunctionTestBuilder = exports.setDefaultFirebaseAdminFunctionTestUseFunctionSingleton = exports.DEFAULT_FIREBASE_ADMIN_FUNCTION_TEST_USE_FUNCTION_SINGLETON_CONTEXT = exports.FirebaseAdminFunctionTestContextInstance = exports.FirebaseAdminFunctionTestContextFixture = exports.rerollFirebaseAdminFunctionTestSingleton = exports.setupFirebaseAdminFunctionTestSingleton = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const admin = require("firebase-admin");
6
+ const functions = require("firebase-functions-test");
7
+ const util_1 = require("@dereekb/util");
8
+ const firebase_1 = require("./firebase");
9
+ const firebase_admin_1 = require("./firebase.admin");
10
+ // MARK: FirebaseAdminFunctionTestBuilder
11
+ let functionsInitialized = false;
12
+ /**
13
+ * firebase-functions-test uses a singleton internally, so we must track the reference to properly tear it down too.
14
+ */
15
+ let firebaseFunctionsTestInstance;
16
+ function setupFirebaseAdminFunctionTestSingleton(reroll = false) {
17
+ if (!(0, firebase_1.isAdminEnvironmentInitialized)()) {
18
+ throw new Error('initFirebaseAdminTestEnvironment() was not called.');
19
+ }
20
+ if (firebaseFunctionsTestInstance) {
21
+ firebaseFunctionsTestInstance.cleanup(); // destroy the old instance if it is up.
22
+ }
23
+ firebaseFunctionsTestInstance = functions();
24
+ if (reroll) {
25
+ (0, firebase_1.rollNewGCloudProjectEnvironmentVariable)();
26
+ }
27
+ else {
28
+ (0, firebase_1.applyFirebaseGCloudTestProjectIdToFirebaseConfigEnv)();
29
+ }
30
+ functionsInitialized = true;
31
+ return firebaseFunctionsTestInstance;
32
+ }
33
+ exports.setupFirebaseAdminFunctionTestSingleton = setupFirebaseAdminFunctionTestSingleton;
34
+ function rerollFirebaseAdminFunctionTestSingleton() {
35
+ return setupFirebaseAdminFunctionTestSingleton(true);
36
+ }
37
+ exports.rerollFirebaseAdminFunctionTestSingleton = rerollFirebaseAdminFunctionTestSingleton;
38
+ class FirebaseAdminFunctionTestContextFixture extends util_1.AbstractJestTestContextFixture {
39
+ // MARK: FirebaseAdminTestContext (Forwarded)
40
+ get app() {
41
+ return this.instance.app;
42
+ }
43
+ get auth() {
44
+ return this.instance.auth;
45
+ }
46
+ get firestore() {
47
+ return this.instance.firestore;
48
+ }
49
+ get firestoreInstance() {
50
+ return this.instance.firestoreInstance;
51
+ }
52
+ get firestoreContext() {
53
+ return this.instance.firestoreContext;
54
+ }
55
+ get wrapCloudFunction() {
56
+ return this.instance.wrapCloudFunction;
57
+ }
58
+ }
59
+ exports.FirebaseAdminFunctionTestContextFixture = FirebaseAdminFunctionTestContextFixture;
60
+ class FirebaseAdminFunctionTestContextInstance extends firebase_admin_1.FirebaseAdminTestContextInstance {
61
+ constructor(instance, app) {
62
+ super(app);
63
+ this.instance = instance;
64
+ }
65
+ get wrapCloudFunction() {
66
+ return this.instance.wrap;
67
+ }
68
+ }
69
+ exports.FirebaseAdminFunctionTestContextInstance = FirebaseAdminFunctionTestContextInstance;
70
+ exports.DEFAULT_FIREBASE_ADMIN_FUNCTION_TEST_USE_FUNCTION_SINGLETON_CONTEXT = false;
71
+ function setDefaultFirebaseAdminFunctionTestUseFunctionSingleton(use) {
72
+ exports.DEFAULT_FIREBASE_ADMIN_FUNCTION_TEST_USE_FUNCTION_SINGLETON_CONTEXT = use;
73
+ }
74
+ exports.setDefaultFirebaseAdminFunctionTestUseFunctionSingleton = setDefaultFirebaseAdminFunctionTestUseFunctionSingleton;
75
+ /**
76
+ * A JestTestContextBuilderFunction for building firebase test context factories using firebase-admin.
77
+ *
78
+ * This can be used to easily build a testing context that sets up RulesTestEnvironment for tests that sets itself up and tears itself down.
79
+ */
80
+ exports.firebaseAdminFunctionTestBuilder = (0, util_1.jestTestContextBuilder)({
81
+ buildConfig: (input) => {
82
+ var _a;
83
+ const config = Object.assign(Object.assign({}, input), { useFunctionSingletonContext: (_a = input === null || input === void 0 ? void 0 : input.useFunctionSingletonContext) !== null && _a !== void 0 ? _a : exports.DEFAULT_FIREBASE_ADMIN_FUNCTION_TEST_USE_FUNCTION_SINGLETON_CONTEXT });
84
+ return config;
85
+ },
86
+ buildFixture: () => new FirebaseAdminFunctionTestContextFixture(),
87
+ setupInstance: (config) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
88
+ if (!(0, firebase_1.isAdminEnvironmentInitialized)()) {
89
+ throw new Error('initFirebaseAdminTestEnvironment() (in @dereekb/firebase-server package) was not called before using adminFirebaseTestBuilder().');
90
+ }
91
+ if (config.useFunctionSingletonContext) {
92
+ if (!functionsInitialized) {
93
+ throw new Error('Call setupFirebaseAdminFunctionTestSingleton() (in @dereekb/firebase-server package) if using functions in a singleton context (useFunctionSingletonContext = true/undefined).');
94
+ }
95
+ }
96
+ else if (config.useFunctionSingletonContext === false) {
97
+ firebaseFunctionsTestInstance = rerollFirebaseAdminFunctionTestSingleton();
98
+ }
99
+ const projectId = (0, firebase_1.getGCloudTestProjectId)();
100
+ const app = admin.initializeApp({ projectId });
101
+ return new FirebaseAdminFunctionTestContextInstance(firebaseFunctionsTestInstance, app);
102
+ }),
103
+ teardownInstance: (instance, config) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
104
+ if (config.useFunctionSingletonContext === false) {
105
+ try {
106
+ yield instance.app.delete(); // will be called in cleanup
107
+ firebaseFunctionsTestInstance.cleanup();
108
+ }
109
+ catch (e) {
110
+ }
111
+ firebaseFunctionsTestInstance = undefined;
112
+ }
113
+ })
114
+ });
115
+ exports.firebaseAdminFunctionTestContextFactory = (0, exports.firebaseAdminFunctionTestBuilder)({});
116
+ //# sourceMappingURL=firebase.admin.function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase.admin.function.js","sourceRoot":"","sources":["../../../../../../packages/firebase-server/src/test/firebase/firebase.admin.function.ts"],"names":[],"mappings":"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"}