aboutsummaryrefslogtreecommitdiff
path: root/src/new_fields/Schema.ts
diff options
context:
space:
mode:
authorTyler Schicke <tyler_schicke@brown.edu>2019-04-21 01:46:02 -0400
committerTyler Schicke <tyler_schicke@brown.edu>2019-04-21 01:46:02 -0400
commitab8b4ffd7f3b89600a71d3167490c40a59be433e (patch)
tree18e2eb2d96c751fabc7e7cc9680e5c4ca939e686 /src/new_fields/Schema.ts
parent3556aae6d063d8b654509330e70bc67606f16613 (diff)
More changes/fixes
Diffstat (limited to 'src/new_fields/Schema.ts')
-rw-r--r--src/new_fields/Schema.ts15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/new_fields/Schema.ts b/src/new_fields/Schema.ts
index 1d1f56844..6022716be 100644
--- a/src/new_fields/Schema.ts
+++ b/src/new_fields/Schema.ts
@@ -1,9 +1,10 @@
import { Interface, ToInterface, Cast, FieldCtor, ToConstructor, HasTail, Head, Tail } from "./Types";
-import { Doc } from "./Doc";
+import { Doc, Field, ObjectField } from "./Doc";
+import { URLField } from "./URLField";
-type All<T extends any[], U extends Doc> = {
- 1: makeInterface<Head<T>, U> & All<Tail<T>, U>,
- 0: makeInterface<Head<T>, U>
+type All<T extends Interface[], U extends Doc> = {
+ 1: makeInterface<[Head<T>], U> & All<Tail<T>, U>,
+ 0: makeInterface<[Head<T>], U>
}[HasTail<T> extends true ? 1 : 0];
type AllToInterface<T extends any[]> = {
@@ -11,10 +12,14 @@ type AllToInterface<T extends any[]> = {
0: ToInterface<Head<T>>
}[HasTail<T> extends true ? 1 : 0];
+export const emptySchema = createSchema({});
+export const Document = makeInterface(emptySchema);
+export type Document = makeInterface<[typeof emptySchema]>;
+
export type makeInterface<T extends Interface[], U extends Doc = Doc> = Partial<AllToInterface<T>> & U;
// export function makeInterface<T extends Interface[], U extends Doc>(schemas: T): (doc: U) => All<T, U>;
// export function makeInterface<T extends Interface, U extends Doc>(schema: T): (doc: U) => makeInterface<T, U>;
-export function makeInterface<T extends Interface[], U extends Doc>(schemas: T): (doc: U) => All<T, U> {
+export function makeInterface<T extends Interface[], U extends Doc>(...schemas: T): (doc: U) => makeInterface<T, U> {
let schema: Interface = {};
for (const s of schemas) {
for (const key in s) {