diff options
Diffstat (limited to 'src/server/index.ts')
-rw-r--r-- | src/server/index.ts | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/server/index.ts b/src/server/index.ts index 93e4cafbf..7a548607f 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -318,6 +318,9 @@ const suffixMap: { [type: string]: (string | [string, string | ((json: any) => a }; function ToSearchTerm(val: any): { suffix: string, value: any } | undefined { + if (val === null || val === undefined) { + return; + } const type = val.__type || typeof val; let suffix = suffixMap[type]; if (!suffix) { @@ -334,7 +337,11 @@ function ToSearchTerm(val: any): { suffix: string, value: any } | undefined { suffix = suffix[0]; } - return { suffix, value: val } + return { suffix, value: val }; +} + +function getSuffix(value: string | [string, any]): string { + return typeof value === "string" ? value : value[0]; } function UpdateField(socket: Socket, diff: Diff) { @@ -348,14 +355,14 @@ function UpdateField(socket: Socket, diff: Diff) { let dynfield = false; for (let key in docfield) { if (!key.startsWith("fields.")) continue; + dynfield = true; + Object.values(suffixMap).forEach(suf => update[key + getSuffix(suf)] = null); let val = docfield[key]; let term = ToSearchTerm(val); if (term !== undefined) { let { suffix, value } = term; key = key.substring(7); - Object.values(suffixMap).forEach(suf => update[key + suf] = null); update[key + suffix] = { set: value }; - dynfield = true; } } if (dynfield) { |