Skip to content

Commit 2c542b3

Browse files
committed
no longer export JSON type, no longer convert JSON type in read, JSOn type is now available at metaType['readJSON']
1 parent 8bb9eb0 commit 2c542b3

File tree

8 files changed

+176
-217
lines changed

8 files changed

+176
-217
lines changed

src/index.ts

-5
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,4 @@ export type {
7474
FirelordRef,
7575
OnSnapshot,
7676
Unsubscribe,
77-
JSONDate,
78-
JSONServerTimestamp,
79-
JSONTimestamp,
80-
JSONGeoPoint,
81-
JSONDocumentReference,
8277
} from './types'

src/types/fieldValues.ts

+1-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { OriFieldValue } from './alias'
22
import { ErrorArrayFieldValueEmpty } from './error'
3-
import { JSONServerTimestamp } from './json'
43

54
declare const serverTimestampSymbol: unique symbol
65
declare const deleteFieldSymbol: unique symbol
@@ -44,8 +43,4 @@ export type ArrayRemoveOrUnionFunction = <Elements extends unknown[]>(
4443

4544
export type UnassignedAbleFieldValue = Increment | ArrayUnionOrRemove<unknown>
4645

47-
export type FieldValues =
48-
| ServerTimestamp
49-
| UnassignedAbleFieldValue
50-
| Delete
51-
| JSONServerTimestamp
46+
export type FieldValues = ServerTimestamp | UnassignedAbleFieldValue | Delete

src/types/json.ts

-8
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,18 @@ import { Timestamp } from './alias'
22
import { MetaType } from './metaTypeCreator'
33
import { StrictPick } from './utils'
44

5-
declare const JSONServerTimestampSymbol: unique symbol
65
declare const JSONTimestampSymbol: unique symbol
7-
declare const JSONDateSymbol: unique symbol
86
declare const JSONGeoPointSymbol: unique symbol
97
declare const JSONDocumentReferenceSymbol: unique symbol
108

11-
type JSONServerTimestampSymbol = typeof JSONServerTimestampSymbol
129
type JSONTimestampSymbol = typeof JSONTimestampSymbol
13-
type JSONDateSymbol = typeof JSONDateSymbol
1410
type JSONGeoPointSymbol = typeof JSONGeoPointSymbol
1511
type JSONDocumentReferenceSymbol = typeof JSONDocumentReferenceSymbol
1612

1713
export declare class JSON<T> {
1814
protected Firelord_JSON: T
1915
}
2016

21-
export interface JSONServerTimestamp extends JSON<JSONServerTimestampSymbol> {}
22-
23-
export interface JSONDate extends JSON<JSONDateSymbol> {}
24-
2517
// TODO need experiment
2618
export interface JSONTimestamp
2719
extends StrictPick<Timestamp, 'nanoseconds' | 'seconds'>,

src/types/metaTypeCreator/compare.ts

+3-24
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,15 @@ import {
1515
import { DeepValue } from '../objectFlatten'
1616
import { DocumentReference } from '../refs'
1717
import { MetaType } from './metaType'
18-
import {
19-
JSONDate,
20-
JSONGeoPoint,
21-
JSONServerTimestamp,
22-
JSONDocumentReference,
23-
JSONTimestamp,
24-
} from '../json'
2518

2619
type CompareConverterArray<T, BannedTypes> = NoDirectNestedArray<
2720
T,
2821
T extends (infer A)[]
2922
? readonly CompareConverterArray<A, BannedTypes>[]
3023
: T extends FieldValues
3124
? ErrorFieldValueInArray
32-
: T extends Date | Timestamp | JSONDate | JSONTimestamp
25+
: T extends Date | Timestamp
3326
? Timestamp | Date
34-
: T extends JSONDocumentReference<infer R>
35-
? DocumentReference<R>
36-
: T extends JSONGeoPoint
37-
? GeoPoint
3827
: T extends DocumentReference<MetaType> | Bytes | GeoPoint
3928
? T
4029
: T extends Record<string, unknown>
@@ -50,19 +39,9 @@ export type CompareConverter<T, BannedTypes> = NoDirectNestedArray<
5039
T,
5140
T extends (infer A)[]
5241
? readonly CompareConverterArray<A, BannedTypes>[]
53-
: T extends
54-
| ServerTimestamp
55-
| Date
56-
| Timestamp
57-
| JSONDate
58-
| JSONTimestamp
59-
| JSONServerTimestamp
42+
: T extends ServerTimestamp | Date | Timestamp
6043
? Timestamp | Date
61-
: T extends JSONGeoPoint
62-
? GeoPoint
63-
: T extends JSONDocumentReference<MetaType>
64-
? DocumentReference<MetaType>
65-
: T extends DocumentReference<MetaType> | Bytes | GeoPoint | JSONGeoPoint
44+
: T extends DocumentReference<MetaType> | Bytes | GeoPoint
6645
? T
6746
: T extends Record<string, unknown>
6847
? {

src/types/metaTypeCreator/metaTypeCreator.test.ts

+25-88
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
import { MetaTypeCreator } from './metaTypeCreator'
22
import { MetaType } from './metaType'
33
import { Timestamp, Bytes, GeoPoint } from '../alias'
4-
import {
5-
ErrorNullBanned,
6-
ErrorDirectNested,
7-
ErrorFieldValueInArray,
8-
} from '../error'
4+
import { ErrorNullBanned, ErrorDirectNested } from '../error'
95
import {
106
ArrayUnionOrRemove,
117
Increment,
@@ -17,14 +13,7 @@ import { DocumentReference } from '../refs'
1713
import { IsTrue, IsSame, IsEqual } from '../utils'
1814
import { Parent, User } from '../../utilForTests'
1915
import { __name__Record } from '../fieldPath'
20-
import {
21-
JSONDate,
22-
JSONGeoPoint,
23-
JSONServerTimestamp,
24-
JSONDocumentReference,
25-
JSONTimestamp,
26-
} from '../json'
27-
import { OmitSymbol } from './read'
16+
import { JSONDocumentReference, JSONTimestamp } from '../json'
2817

2918
describe('test Firelord type', () => {
3019
it('test parents equal', () => {
@@ -71,6 +60,27 @@ describe('test Firelord type', () => {
7160
l: { a: 1 | undefined } | { b: 2 | undefined } | undefined
7261
}
7362

63+
type ExpectedJSON = {
64+
a: 1 | null | undefined
65+
b:
66+
| {
67+
c: 'a' | undefined
68+
d: { e: false | undefined } | undefined
69+
f:
70+
| {
71+
g: JSONTimestamp | null | undefined
72+
h: 2 | undefined
73+
}[]
74+
| undefined
75+
j: JSONTimestamp | null | undefined
76+
k: JSONDocumentReference<MetaType> | null | undefined
77+
}
78+
| undefined
79+
h: string | undefined
80+
i: number | null | undefined
81+
l: { a: 1 | undefined } | { b: 2 | undefined } | undefined
82+
}
83+
7484
type ExpectedWrite = {
7585
a: 1 | null
7686
b: {
@@ -177,11 +187,13 @@ describe('test Firelord type', () => {
177187
type Write = A['write']
178188
type WriteFlatten = A['writeFlatten']
179189
type Compare = A['compare']
190+
type JSON = A['readJSON']
180191

181192
IsTrue<IsSame<ExpectedRead, Read>>()
182193
IsTrue<IsSame<ExpectedWrite, Write>>()
183194
IsTrue<IsEqual<ExpectedWriteFlatten, WriteFlatten>>()
184195
IsTrue<IsEqual<ExpectedCompare, Compare>>()
196+
IsTrue<IsEqual<ExpectedJSON, JSON>>()
185197
})
186198

187199
it('test possibly read undefined', () => {
@@ -805,79 +817,4 @@ describe('test Firelord type', () => {
805817
IsTrue<IsSame<ExpectWriteMerge, Write>>
806818
IsTrue<IsSame<ExpectCompare, Compare>>
807819
})
808-
it('test persistent type', () => {
809-
type A = MetaTypeCreator<
810-
{
811-
a: JSONTimestamp
812-
b: JSONDate
813-
c: JSONServerTimestamp
814-
d: JSONDocumentReference<MetaType>
815-
e: JSONGeoPoint
816-
f: JSONTimestamp[]
817-
g: JSONDate[]
818-
h: JSONServerTimestamp[]
819-
i: JSONDocumentReference<MetaType>[]
820-
j: JSONGeoPoint[]
821-
},
822-
'Persist'
823-
>
824-
825-
type ExpectRead = A['read']
826-
type ExpectWrite = A['write']
827-
type ExpectWriteFlatten = A['writeFlatten']
828-
type ExpectWriteMerge = A['writeMerge']
829-
type ExpectCompare = A['compare']
830-
831-
type Read = {
832-
a: OmitSymbol<JSONTimestamp>
833-
b: OmitSymbol<JSONTimestamp>
834-
c: OmitSymbol<JSONTimestamp>
835-
d: OmitSymbol<JSONDocumentReference<MetaType>>
836-
e: OmitSymbol<JSONGeoPoint>
837-
f: OmitSymbol<JSONTimestamp>[]
838-
g: OmitSymbol<JSONTimestamp>[]
839-
h: ErrorFieldValueInArray[]
840-
i: OmitSymbol<JSONDocumentReference<MetaType>>[]
841-
j: OmitSymbol<JSONGeoPoint>[]
842-
}
843-
844-
type Write = {
845-
a: Timestamp | Date
846-
b: Timestamp | Date
847-
c: ServerTimestamp
848-
d: DocumentReference<MetaType>
849-
e: GeoPoint
850-
f: readonly (Timestamp | Date)[] | ArrayUnionOrRemove<Timestamp | Date>
851-
g: readonly (Timestamp | Date)[] | ArrayUnionOrRemove<Timestamp | Date>
852-
h:
853-
| readonly ErrorFieldValueInArray[]
854-
| ArrayUnionOrRemove<ErrorFieldValueInArray>
855-
i:
856-
| readonly DocumentReference<MetaType>[]
857-
| ArrayUnionOrRemove<DocumentReference<MetaType>>
858-
j: readonly GeoPoint[] | ArrayUnionOrRemove<GeoPoint>
859-
}
860-
861-
// TODO need better tests
862-
type WriteFlatten = Write
863-
type WriteMerge = Write
864-
type Compare = {
865-
a: Timestamp | Date
866-
b: Timestamp | Date
867-
c: Timestamp | Date
868-
d: DocumentReference<MetaType>
869-
e: GeoPoint
870-
f: readonly (Timestamp | Date)[]
871-
g: readonly (Timestamp | Date)[]
872-
h: readonly ErrorFieldValueInArray[]
873-
i: readonly DocumentReference<MetaType>[]
874-
j: readonly GeoPoint[]
875-
} & __name__Record
876-
877-
IsTrue<IsSame<ExpectRead, Read>>
878-
IsTrue<IsSame<ExpectWrite, Write>>
879-
IsTrue<IsSame<ExpectWriteFlatten, WriteFlatten>>
880-
IsTrue<IsSame<ExpectWriteMerge, WriteMerge>>
881-
IsTrue<IsSame<ExpectCompare, Compare>>
882-
})
883820
})

src/types/metaTypeCreator/metaTypeCreator.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { IsValidID } from '../validID'
33
import { ObjectFlatten } from '../objectFlatten'
44
import { __name__Record } from '../fieldPath'
55
import { MetaType } from './metaType'
6-
import { ReadConverter } from './read'
6+
import { ReadConverter, ReadJSONConverter } from './read'
77
import { WriteConverter, WriteUpdateConverter } from './write'
88
import { CompareConverter } from './compare'
99

@@ -29,6 +29,16 @@ export type MetaTypeCreator<
2929
>,
3030
undefined
3131
>
32+
readJSON: Exclude<
33+
ReadJSONConverter<
34+
Base,
35+
Settings['allFieldsPossiblyReadAsUndefined'] extends true
36+
? undefined
37+
: never,
38+
S
39+
>,
40+
undefined
41+
>
3242
write: WriteConverter<Base, S>
3343
writeMerge: WriteUpdateConverter<Base, S>
3444
writeFlatten: WriteUpdateConverter<ObjectFlatten<Base, string>, S>

0 commit comments

Comments
 (0)