@dereekb/firebase-server 9.10.3 → 9.10.4

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/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [9.10.4](https://github.com/dereekb/dbx-components/compare/v9.10.3-dev...v9.10.4) (2022-10-07)
6
+
7
+
8
+
5
9
  ## [9.10.3](https://github.com/dereekb/dbx-components/compare/v9.10.2-dev...v9.10.3) (2022-10-07)
6
10
 
7
11
 
@@ -1,33 +1,33 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server/mailgun",
3
- "version": "9.10.3",
3
+ "version": "9.10.4",
4
4
  "type": "commonjs",
5
5
  "main": "./src/index.js",
6
6
  "typings": "./src/index.d.ts",
7
7
  "dependencies": {},
8
8
  "peerDependencies": {
9
- "@dereekb/nestjs/mailgun": "9.10.3",
9
+ "@dereekb/nestjs/mailgun": "9.10.4",
10
10
  "@nestjs/common": "^9.0.0",
11
11
  "mailgun.js": "^8.0.0",
12
12
  "form-data": "4.0.0",
13
- "@dereekb/util": "9.10.3",
13
+ "@dereekb/util": "9.10.4",
14
14
  "lodash.isequal": "^4.5.0",
15
15
  "make-error": "^1.3.0",
16
16
  "class-validator": "^0.13.2",
17
17
  "ts-essentials": "^9.1.2",
18
18
  "extra-set": "^2.2.11",
19
- "@dereekb/nestjs": "9.10.3",
19
+ "@dereekb/nestjs": "9.10.4",
20
20
  "@nestjs/config": "^2.0.1",
21
- "@dereekb/firebase-server": "9.10.3",
21
+ "@dereekb/firebase-server": "9.10.4",
22
22
  "jsonwebtoken": "^8.0.0",
23
- "@dereekb/firebase": "9.10.3",
23
+ "@dereekb/firebase": "9.10.4",
24
24
  "rxjs": "^7.5.0",
25
25
  "firebase": "^9.9.2",
26
26
  "class-transformer": "^0.5.1",
27
- "@dereekb/rxjs": "9.10.3",
27
+ "@dereekb/rxjs": "9.10.4",
28
28
  "ms": "^3.0.0-canary.1",
29
- "@dereekb/model": "9.10.3",
30
- "@dereekb/date": "9.10.3",
29
+ "@dereekb/model": "9.10.4",
30
+ "@dereekb/date": "9.10.4",
31
31
  "date-fns": "^2.29.0",
32
32
  "date-fns-tz": "^1.3.0",
33
33
  "rrule": "git+https://git@github.com/dereekb/rrule#2b13b1ea881059ba2ecfec380e12ef244ef54570",
package/package.json CHANGED
@@ -1,25 +1,25 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server",
3
- "version": "9.10.3",
3
+ "version": "9.10.4",
4
4
  "devDependencies": {
5
5
  "firebase-functions-test": "2.0.2"
6
6
  },
7
7
  "peerDependencies": {
8
8
  "jsonwebtoken": "^8.0.0",
9
- "@dereekb/firebase": "9.10.3",
9
+ "@dereekb/firebase": "9.10.4",
10
10
  "rxjs": "^7.5.0",
11
11
  "firebase": "^9.9.2",
12
- "@dereekb/util": "9.10.3",
12
+ "@dereekb/util": "9.10.4",
13
13
  "lodash.isequal": "^4.5.0",
14
14
  "make-error": "^1.3.0",
15
15
  "class-validator": "^0.13.2",
16
16
  "ts-essentials": "^9.1.2",
17
17
  "extra-set": "^2.2.11",
18
18
  "class-transformer": "^0.5.1",
19
- "@dereekb/rxjs": "9.10.3",
19
+ "@dereekb/rxjs": "9.10.4",
20
20
  "ms": "^3.0.0-canary.1",
21
- "@dereekb/model": "9.10.3",
22
- "@dereekb/date": "9.10.3",
21
+ "@dereekb/model": "9.10.4",
22
+ "@dereekb/date": "9.10.4",
23
23
  "date-fns": "^2.29.0",
24
24
  "date-fns-tz": "^1.3.0",
25
25
  "rrule": "git+https://git@github.com/dereekb/rrule#2b13b1ea881059ba2ecfec380e12ef244ef54570",
@@ -30,7 +30,7 @@
30
30
  "@nestjs/common": "^9.0.0",
31
31
  "@nestjs/core": "^9.0.0",
32
32
  "@nestjs/platform-express": "^9.0.0",
33
- "@dereekb/nestjs": "9.10.3",
33
+ "@dereekb/nestjs": "9.10.4",
34
34
  "@nestjs/config": "^2.0.1",
35
35
  "node-schedule": "^2.1.0",
36
36
  "tslib": "^2.0.0"
package/test/package.json CHANGED
@@ -1,40 +1,40 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server/test",
3
- "version": "9.10.3",
3
+ "version": "9.10.4",
4
4
  "type": "commonjs",
5
5
  "main": "./src/index.js",
6
6
  "typings": "./src/index.d.ts",
7
7
  "dependencies": {},
8
8
  "peerDependencies": {
9
- "@dereekb/firebase": "9.10.3",
9
+ "@dereekb/firebase": "9.10.4",
10
10
  "rxjs": "^7.5.0",
11
11
  "firebase": "^9.9.2",
12
- "@dereekb/util": "9.10.3",
12
+ "@dereekb/util": "9.10.4",
13
13
  "lodash.isequal": "^4.5.0",
14
14
  "make-error": "^1.3.0",
15
15
  "class-validator": "^0.13.2",
16
16
  "ts-essentials": "^9.1.2",
17
17
  "extra-set": "^2.2.11",
18
18
  "class-transformer": "^0.5.1",
19
- "@dereekb/rxjs": "9.10.3",
19
+ "@dereekb/rxjs": "9.10.4",
20
20
  "ms": "^3.0.0-canary.1",
21
- "@dereekb/model": "9.10.3",
22
- "@dereekb/date": "9.10.3",
21
+ "@dereekb/model": "9.10.4",
22
+ "@dereekb/date": "9.10.4",
23
23
  "date-fns": "^2.29.0",
24
24
  "date-fns-tz": "^1.3.0",
25
25
  "rrule": "git+https://git@github.com/dereekb/rrule#2b13b1ea881059ba2ecfec380e12ef244ef54570",
26
26
  "@vvo/tzdb": "^6.56.0",
27
- "@dereekb/util/test": "9.10.3",
27
+ "@dereekb/util/test": "9.10.4",
28
28
  "firebase-admin": "^11.0.0",
29
29
  "jsonwebtoken": "^8.0.0",
30
30
  "firebase-functions": "^3.24.0",
31
31
  "@nestjs/common": "^9.0.0",
32
32
  "@google-cloud/firestore": "^5.0.2",
33
- "@dereekb/firebase/test": "9.10.3",
34
- "@dereekb/firebase-server": "9.10.3",
33
+ "@dereekb/firebase/test": "9.10.4",
34
+ "@dereekb/firebase-server": "9.10.4",
35
35
  "@nestjs/core": "^9.0.0",
36
36
  "@nestjs/platform-express": "^9.0.0",
37
- "@dereekb/nestjs": "9.10.3",
37
+ "@dereekb/nestjs": "9.10.4",
38
38
  "@nestjs/config": "^2.0.1",
39
39
  "node-schedule": "^2.1.0",
40
40
  "tslib": "^2.0.0"
@@ -1,5 +1,5 @@
1
- import { FirestoreCollection, FirestoreDocument, DocumentReference, FirestoreModelId, FirestoreModelKey } from '@dereekb/firebase';
2
- import { Maybe, PromiseOrValue } from '@dereekb/util';
1
+ import { FirestoreDocument, DocumentReference, FirestoreModelId, FirestoreModelKey, FirestoreCollectionLike } from '@dereekb/firebase';
2
+ import { AsyncGetterOrValue, PromiseOrValue } from '@dereekb/util';
3
3
  import { JestTestContextFixture, AbstractChildJestTestContextFixture } from '@dereekb/util/test';
4
4
  import { FirebaseAdminTestContext } from './firebase.admin';
5
5
  /**
@@ -18,10 +18,10 @@ export declare class ModelTestContextFixture<T, D extends FirestoreDocument<T> =
18
18
  get document(): D;
19
19
  }
20
20
  export declare class ModelTestContextInstance<T, D extends FirestoreDocument<T> = FirestoreDocument<T>, PI extends FirebaseAdminTestContext = FirebaseAdminTestContext> implements ModelTestContext<T, D> {
21
- readonly collection: FirestoreCollection<T, D>;
21
+ readonly collection: FirestoreCollectionLike<T, D>;
22
22
  readonly ref: DocumentReference<T>;
23
23
  readonly testContext: PI;
24
- constructor(collection: FirestoreCollection<T, D>, ref: DocumentReference<T>, testContext: PI);
24
+ constructor(collection: FirestoreCollectionLike<T, D>, ref: DocumentReference<T>, testContext: PI);
25
25
  get documentId(): FirestoreModelId;
26
26
  get documentKey(): FirestoreModelKey;
27
27
  get documentRef(): DocumentReference<T>;
@@ -30,7 +30,7 @@ export declare class ModelTestContextInstance<T, D extends FirestoreDocument<T>
30
30
  /**
31
31
  * authorizedUserContext/authorizedUserContextFactory parameters.
32
32
  */
33
- 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>, CL extends FirestoreCollection<T, D> = FirestoreCollection<T, D>> {
33
+ 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>, CL extends FirestoreCollectionLike<T, D> = FirestoreCollectionLike<T, D>> {
34
34
  /**
35
35
  * Creates a ModelTestContextInstanceDelegate from the parent instance.
36
36
  */
@@ -39,12 +39,10 @@ export interface ModelTestContextFactoryParams<T, D extends FirestoreDocument<T>
39
39
  * Creates the custom fixture. If not defined, a ModelTestContextFixture is created.
40
40
  */
41
41
  makeFixture?: (parent: PF) => F;
42
- /**
43
- * Optional function to try and get an existing reference from the input config. This model will be considered to be fully initialized.
44
- */
45
- useRef?: (config: C, parentInstance: PI) => Promise<Maybe<DocumentReference<T>>>;
46
42
  /**
47
43
  * Optional function to create a DocumentReference.
44
+ *
45
+ * If not provided, expects the input CL type to be a full FirestoreCollection, instead of a FirestoreCollectionLike.
48
46
  */
49
47
  makeRef?: (collection: CL, config: C, parentInstance: PI) => Promise<DocumentReference<T>>;
50
48
  /**
@@ -55,12 +53,23 @@ export interface ModelTestContextFactoryParams<T, D extends FirestoreDocument<T>
55
53
  * Optional function to initialize the document for this instance.
56
54
  */
57
55
  initDocument?: (instance: I, config: C) => Promise<void>;
56
+ /**
57
+ * Optional function to retrieve a collection given the input document.
58
+ *
59
+ * Required if using ModelTestContextDocumentRefParam as input.
60
+ */
61
+ collectionForDocument?: (document: D) => CL;
62
+ }
63
+ export interface ModelTestContextDocumentRefParams<D extends FirestoreDocument<any> = FirestoreDocument<any>> {
64
+ /**
65
+ * Custom document to use that is already initialized.
66
+ */
67
+ readonly doc: AsyncGetterOrValue<D>;
58
68
  }
59
69
  export declare type ModelTestContextParams<C = any, PI extends FirebaseAdminTestContext = FirebaseAdminTestContext, PF extends JestTestContextFixture<PI> = JestTestContextFixture<PI>> = {
60
70
  f: PF;
61
- ref?: Maybe<DocumentReference<any>>;
62
- } & C;
71
+ } & (C | ModelTestContextDocumentRefParams);
63
72
  /**
64
73
  * Creates a new Jest Context that has a random user for authorization for use in firebase server tests.
65
74
  */
66
- 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>, CL extends FirestoreCollection<T, D> = FirestoreCollection<T, D>>(config: ModelTestContextFactoryParams<T, D, C, PI, PF, I, F, CL>): (params: ModelTestContextParams<C, PI, PF>, buildTests: (u: F) => void) => void;
75
+ 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>, CL extends FirestoreCollectionLike<T, D> = FirestoreCollectionLike<T, D>>(config: ModelTestContextFactoryParams<T, D, C, PI, PF, I, F, CL>): (params: ModelTestContextParams<C, PI, PF>, buildTests: (u: F) => void) => void;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.modelTestContextFactory = exports.ModelTestContextInstance = exports.ModelTestContextFixture = void 0;
4
4
  const tslib_1 = require("tslib");
5
+ const util_1 = require("@dereekb/util");
5
6
  const test_1 = require("@dereekb/util/test");
6
7
  class ModelTestContextFixture extends test_1.AbstractChildJestTestContextFixture {
7
8
  // MARK: ModelTestContext (Forwarded)
@@ -43,7 +44,13 @@ exports.ModelTestContextInstance = ModelTestContextInstance;
43
44
  * Creates a new Jest Context that has a random user for authorization for use in firebase server tests.
44
45
  */
45
46
  function modelTestContextFactory(config) {
46
- const { getCollection, useRef: loadRef, makeRef = (collection) => collection.documentAccessor().newDocument().documentRef, makeInstance = (collection, ref, testInstance) => new ModelTestContextInstance(collection, ref, testInstance), makeFixture = (f) => new ModelTestContextFixture(f), initDocument } = config;
47
+ const { getCollection, collectionForDocument, makeRef = (collection) => {
48
+ const accessor = collection.documentAccessor();
49
+ if (accessor.newDocument == null) {
50
+ throw new Error('collection passed to makeRef() was not a full FirestoreCollection. Either supply a custom makeRef() function or a FirestoreCollection that has newDocument() available on the documentAccessor.');
51
+ }
52
+ return accessor.newDocument().documentRef;
53
+ }, makeInstance = (collection, ref, testInstance) => new ModelTestContextInstance(collection, ref, testInstance), makeFixture = (f) => new ModelTestContextFixture(f), initDocument } = config;
47
54
  return (params, buildTests) => {
48
55
  const { f } = params;
49
56
  return (0, test_1.useJestContextFixture)({
@@ -51,15 +58,26 @@ function modelTestContextFactory(config) {
51
58
  buildTests,
52
59
  initInstance: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
53
60
  const parentInstance = f.instance;
54
- const collection = getCollection(parentInstance, params);
55
- let ref = params.ref;
56
- let init = ref == null;
57
- if (ref != null && loadRef != null) {
58
- ref = yield loadRef(params, parentInstance);
61
+ let ref;
62
+ let collection;
63
+ let init;
64
+ if (params.doc) {
65
+ const doc = yield (0, util_1.getValueFromGetter)(params.doc);
66
+ if (!collectionForDocument) {
67
+ throw new Error('collectionForDocument() is required when using ModelTestContextDocumentRefParams values as input.');
68
+ }
69
+ collection = collectionForDocument(doc);
70
+ const expectedCollectionName = collection.documentAccessor().modelIdentity.collectionName;
71
+ if (expectedCollectionName !== doc.modelIdentity.collectionName) {
72
+ throw new Error(`Input doc is in a different collection (${doc.modelIdentity.collectionName}) than expected (${expectedCollectionName}).`);
73
+ }
74
+ ref = doc.documentRef;
59
75
  init = false;
60
76
  }
61
- if (!ref) {
77
+ else {
78
+ collection = getCollection(parentInstance, params);
62
79
  ref = yield makeRef(collection, params, parentInstance);
80
+ init = true;
63
81
  }
64
82
  const instance = yield makeInstance(collection, ref, parentInstance);
65
83
  if (init && initDocument) {
@@ -1 +1 @@
1
- {"version":3,"file":"firebase.admin.collection.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/test/src/lib/firebase/firebase.admin.collection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"firebase.admin.collection.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/test/src/lib/firebase/firebase.admin.collection.ts"],"names":[],"mappings":"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"}