Skip to content

Commit 97b31b9

Browse files
committed
Move Nullify to the top level to prevent repetitve calls
1 parent af16117 commit 97b31b9

File tree

3 files changed

+151
-26
lines changed

3 files changed

+151
-26
lines changed

Diff for: src/index.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ export namespace Typesaurus {
118118
* [Learn more on the docs website](https://typesaurus.com/types/typesaurus/#data)
119119
*/
120120
export type Data<Model extends Core.ModelType> = Core.AnyData<
121-
Core.IntersectVariableModelType<Model>
121+
Core.IntersectVariableModelType<Core.NullifyModel<Model>>
122122
>;
123123

124124
/**
@@ -134,10 +134,10 @@ export namespace Typesaurus {
134134
WideModel extends Core.ModelType = Model,
135135
Flags extends Core.DocDefFlags = Core.DocDefFlags,
136136
> = {
137-
Model: Model;
137+
Model: Core.NullifyModel<Model>;
138138
Name: Name;
139139
Id: Id<Path>;
140-
WideModel: WideModel;
140+
WideModel: Core.NullifyModel<WideModel>;
141141
Flags: Flags;
142142
};
143143
}

Diff for: src/types/core.ts

+143-16
Original file line numberDiff line numberDiff line change
@@ -527,20 +527,11 @@ export namespace TypesaurusCore {
527527

528528
/**
529529
* Doc data type. Defines the shape of the document data returned from the
530-
* database. It resolves server dates and nullifies undefineds.
530+
* database. It resolves server dates.
531531
*/
532532
export type Data<
533533
Model extends ModelObjectType,
534534
DateMissing extends ServerDateMissing,
535-
> = DataNullified<Nullify<Model>, DateMissing>;
536-
537-
/**
538-
* Nullifed doc data type, used internally by the data types. It expects
539-
* already nullified data, preventing {@link Nullify} called again.
540-
*/
541-
export type DataNullified<
542-
Model extends ModelObjectType,
543-
DateMissing extends ServerDateMissing,
544535
> = {
545536
[Key in keyof Model]: DataField<Model[Key], DateMissing>;
546537
};
@@ -570,7 +561,7 @@ export namespace TypesaurusCore {
570561
? Array<DataField<ItemType, DateMissing>>
571562
: // Now process objects
572563
Type extends object
573-
? DataNullified<Type, DateMissing>
564+
? Data<Type, DateMissing>
574565
: never; // Nothing shoule be left
575566

576567
/**
@@ -671,7 +662,7 @@ export namespace TypesaurusCore {
671662
export type AssignData<
672663
Model extends ModelObjectType,
673664
Props extends DocProps,
674-
> = WriteData<Nullify<Model>, Props>;
665+
> = WriteData<Model, Props>;
675666

676667
/**
677668
* Write data type, used internally by the write field types.
@@ -1232,12 +1223,12 @@ export namespace TypesaurusCore {
12321223
>
12331224
? NestedCollection<
12341225
{
1235-
Model: Model;
1226+
Model: NullifyModel<Model>;
12361227
Name: CustomName extends string ? CustomName : Name;
12371228
Id: CustomId extends Id<any> | string
12381229
? CustomId
12391230
: Id<Utils.ComposePath<BasePath, Name>>;
1240-
WideModel: Model;
1231+
WideModel: NullifyModel<Model>;
12411232
Flags: DocDefFlags;
12421233
},
12431234
DB<Schema, Utils.ComposePath<BasePath, Name>>
@@ -1248,12 +1239,12 @@ export namespace TypesaurusCore {
12481239
infer CustomName
12491240
>
12501241
? Collection<{
1251-
Model: Model;
1242+
Model: NullifyModel<Model>;
12521243
Name: CustomName extends string ? CustomName : Name;
12531244
Id: CustomId extends Id<any> | string
12541245
? CustomId
12551246
: Id<Utils.ComposePath<BasePath, Name>>;
1256-
WideModel: Model;
1247+
WideModel: NullifyModel<Model>;
12571248
Flags: DocDefFlags;
12581249
}>
12591250
: never
@@ -1682,4 +1673,140 @@ export namespace TypesaurusCore {
16821673
: Nullify<Exclude<Type[Key], undefined>>;
16831674
}
16841675
: never;
1676+
1677+
/**
1678+
* Deeply adds null to shapes of a variable model.
1679+
*/
1680+
export type NullifyModel<Model extends ModelType> =
1681+
Model extends ModelObjectType
1682+
? Nullify<Model>
1683+
: Model extends [
1684+
infer A extends ModelObjectType,
1685+
infer B extends ModelObjectType,
1686+
infer C extends ModelObjectType,
1687+
infer D extends ModelObjectType,
1688+
infer E extends ModelObjectType,
1689+
infer F extends ModelObjectType,
1690+
infer G extends ModelObjectType,
1691+
infer H extends ModelObjectType,
1692+
infer I extends ModelObjectType,
1693+
infer J extends ModelObjectType,
1694+
]
1695+
? [
1696+
Nullify<A>,
1697+
Nullify<B>,
1698+
Nullify<C>,
1699+
Nullify<D>,
1700+
Nullify<E>,
1701+
Nullify<F>,
1702+
Nullify<G>,
1703+
Nullify<H>,
1704+
Nullify<I>,
1705+
Nullify<J>,
1706+
]
1707+
: Model extends [
1708+
infer A extends ModelObjectType,
1709+
infer B extends ModelObjectType,
1710+
infer C extends ModelObjectType,
1711+
infer D extends ModelObjectType,
1712+
infer E extends ModelObjectType,
1713+
infer F extends ModelObjectType,
1714+
infer G extends ModelObjectType,
1715+
infer H extends ModelObjectType,
1716+
infer I extends ModelObjectType,
1717+
]
1718+
? [
1719+
Nullify<A>,
1720+
Nullify<B>,
1721+
Nullify<C>,
1722+
Nullify<D>,
1723+
Nullify<E>,
1724+
Nullify<F>,
1725+
Nullify<G>,
1726+
Nullify<H>,
1727+
Nullify<I>,
1728+
]
1729+
: Model extends [
1730+
infer A extends ModelObjectType,
1731+
infer B extends ModelObjectType,
1732+
infer C extends ModelObjectType,
1733+
infer D extends ModelObjectType,
1734+
infer E extends ModelObjectType,
1735+
infer F extends ModelObjectType,
1736+
infer G extends ModelObjectType,
1737+
infer H extends ModelObjectType,
1738+
]
1739+
? [
1740+
Nullify<A>,
1741+
Nullify<B>,
1742+
Nullify<C>,
1743+
Nullify<D>,
1744+
Nullify<E>,
1745+
Nullify<F>,
1746+
Nullify<G>,
1747+
Nullify<H>,
1748+
]
1749+
: Model extends [
1750+
infer A extends ModelObjectType,
1751+
infer B extends ModelObjectType,
1752+
infer C extends ModelObjectType,
1753+
infer D extends ModelObjectType,
1754+
infer E extends ModelObjectType,
1755+
infer F extends ModelObjectType,
1756+
infer G extends ModelObjectType,
1757+
]
1758+
? [
1759+
Nullify<A>,
1760+
Nullify<B>,
1761+
Nullify<C>,
1762+
Nullify<D>,
1763+
Nullify<E>,
1764+
Nullify<F>,
1765+
Nullify<G>,
1766+
]
1767+
: Model extends [
1768+
infer A extends ModelObjectType,
1769+
infer B extends ModelObjectType,
1770+
infer C extends ModelObjectType,
1771+
infer D extends ModelObjectType,
1772+
infer E extends ModelObjectType,
1773+
infer F extends ModelObjectType,
1774+
]
1775+
? [
1776+
Nullify<A>,
1777+
Nullify<B>,
1778+
Nullify<C>,
1779+
Nullify<D>,
1780+
Nullify<E>,
1781+
Nullify<F>,
1782+
]
1783+
: Model extends [
1784+
infer A extends ModelObjectType,
1785+
infer B extends ModelObjectType,
1786+
infer C extends ModelObjectType,
1787+
infer D extends ModelObjectType,
1788+
infer E extends ModelObjectType,
1789+
]
1790+
? [Nullify<A>, Nullify<B>, Nullify<C>, Nullify<D>, Nullify<E>]
1791+
: Model extends [
1792+
infer A extends ModelObjectType,
1793+
infer B extends ModelObjectType,
1794+
infer C extends ModelObjectType,
1795+
infer D extends ModelObjectType,
1796+
]
1797+
? [Nullify<A>, Nullify<B>, Nullify<C>, Nullify<D>]
1798+
: Model extends [
1799+
infer A extends ModelObjectType,
1800+
infer B extends ModelObjectType,
1801+
infer C extends ModelObjectType,
1802+
]
1803+
? [Nullify<A>, Nullify<B>, Nullify<C>]
1804+
: Model extends [
1805+
infer A extends ModelObjectType,
1806+
infer B extends ModelObjectType,
1807+
]
1808+
? [Nullify<A>, Nullify<B>]
1809+
: Model extends [infer A extends ModelObjectType]
1810+
? [Nullify<A>]
1811+
: never;
16851812
}

Diff for: src/types/update.ts

+5-7
Original file line numberDiff line numberDiff line change
@@ -287,9 +287,9 @@ export namespace TypesaurusUpdate {
287287
export type Data<
288288
Model extends Core.ModelObjectType,
289289
Props extends Core.DocProps,
290-
> = Core.Nullify<{
290+
> = {
291291
[Key in keyof Model]?: Core.WriteField<Model, Key, Model[Key], Props>;
292-
}>;
292+
};
293293

294294
/**
295295
* Update helpers which allow to set specific values, such as server dates,
@@ -298,10 +298,10 @@ export namespace TypesaurusUpdate {
298298
export interface Helpers<
299299
Model extends Core.ModelObjectType,
300300
Props extends Core.DocProps,
301-
> extends CommonHelpers<Core.Nullify<Model>, Props, UpdateField<Model>> {}
301+
> extends CommonHelpers<Model, Props, UpdateField<Model>> {}
302302

303303
export interface Builder<Def extends Core.DocDef, Props extends Core.DocProps>
304-
extends CommonHelpers<Core.Nullify<Core.DocModel<Def>>, Props, void> {
304+
extends CommonHelpers<Core.DocModel<Def>, Props, void> {
305305
run(): Promise<Core.Ref<Def>>;
306306
}
307307

@@ -311,9 +311,7 @@ export namespace TypesaurusUpdate {
311311
Key extends keyof Parent,
312312
SetResult,
313313
> {
314-
set(
315-
value: Core.Nullify<Core.WriteField<Parent, Key, Parent[Key], Props>>,
316-
): SetResult;
314+
set(value: Core.WriteField<Parent, Key, Parent[Key], Props>): SetResult;
317315
}
318316

319317
export interface CommonHelpers<

0 commit comments

Comments
 (0)