diff options
author | Tyler Schicke <tyler_schicke@brown.edu> | 2019-05-24 00:56:32 -0400 |
---|---|---|
committer | Tyler Schicke <tyler_schicke@brown.edu> | 2019-05-24 00:56:32 -0400 |
commit | dcfc5d77779117616503c31fc03f36841e25a3f9 (patch) | |
tree | fc31bed4ec807f147cbaf51c81d584377b370024 /src/new_fields/Doc.ts | |
parent | 34b38c7382a40fb2a117d3c7418a81b34fa7ed7f (diff) |
Added basic repl page
Diffstat (limited to 'src/new_fields/Doc.ts')
-rw-r--r-- | src/new_fields/Doc.ts | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/new_fields/Doc.ts b/src/new_fields/Doc.ts index 793a83750..0c74b8f65 100644 --- a/src/new_fields/Doc.ts +++ b/src/new_fields/Doc.ts @@ -62,6 +62,7 @@ export class Doc extends RefField { const doc = new Proxy<this>(this, { set: setter, get: getter, + // getPrototypeOf: (target) => Cast(target[SelfProxy].proto, Doc) || null, // TODO this might be able to replace the proto logic in getter has: (target, key) => key in target.__fields, ownKeys: target => Object.keys(target.__fields), getOwnPropertyDescriptor: (target, prop) => { @@ -69,6 +70,7 @@ export class Doc extends RefField { return { configurable: true,//TODO Should configurable be true? enumerable: true, + value: target.__fields[prop] }; } return Reflect.getOwnPropertyDescriptor(target, prop); @@ -197,6 +199,18 @@ export namespace Doc { return Doc.GetT(doc, "isPrototype", "boolean", true) ? doc : doc.proto!; } + export function allKeys(doc: Doc): string[] { + const results: Set<string> = new Set; + + let proto: Doc | undefined = doc; + while (proto) { + Object.keys(proto).forEach(key => results.add(key)); + proto = proto.proto; + } + + return Array.from(results); + } + export function MakeAlias(doc: Doc) { const proto = Object.getOwnPropertyNames(doc).indexOf("isPrototype") === -1 ? doc.proto : undefined; @@ -246,5 +260,4 @@ export namespace Doc { delegate.proto = doc; return delegate; } - export const Prototype = Symbol("Prototype"); }
\ No newline at end of file |