Page MenuHomePhorge

D8355.1765342796.diff
No OneTemporary

Size
43 KB
Referenced Files
None
Subscribers
None

D8355.1765342796.diff

diff --git a/keyserver/src/scripts/generate-converter-from-validator.js b/keyserver/src/scripts/generate-converter-from-validator.js
new file mode 100644
--- /dev/null
+++ b/keyserver/src/scripts/generate-converter-from-validator.js
@@ -0,0 +1,234 @@
+// @flow
+
+import t, { type TInterface, type TType } from 'tcomb';
+
+import {
+ nativeMediaSelectionValidator,
+ mediaValidator,
+} from 'lib/types/media-types.js';
+import { threadPermissionInfoValidator } from 'lib/types/thread-permission-types.js';
+import { rawThreadInfoValidator } from 'lib/types/thread-types.js';
+import { keyserverPrefixID, tID } from 'lib/utils/validation-utils.js';
+
+import { main } from './utils.js';
+
+function getDiscriminatorFieldForUnionValidator(validator: TType<mixed>) {
+ if (validator === threadPermissionInfoValidator) {
+ return 'value';
+ }
+ if (validator === nativeMediaSelectionValidator) {
+ return 'step';
+ }
+ return 'type';
+}
+
+function flattenInnerUnionValidators<T>(
+ innerValidators: $ReadOnlyArray<TType<T>>,
+): TInterface<{ +[string]: mixed }>[] {
+ let result = [];
+ for (const innerValidator of innerValidators) {
+ if (innerValidator.meta.kind === 'interface') {
+ // In flow, union refinement only works if every variant has a key
+ // that is a literal. In this case we don't get a refinement of
+ // `innerValidator` because we are checking value of the inner
+ // `meta` object.
+ const recastValidator: TInterface<{ +[string]: mixed }> =
+ (innerValidator: any);
+ result.push(recastValidator);
+ } else if (innerValidator.meta.kind === 'union') {
+ result = [
+ ...result,
+ ...flattenInnerUnionValidators(innerValidator.meta.types),
+ ];
+ } else if ([t.String, t.Number, t.Boolean].includes(innerValidator)) {
+ // We don't need to handle literal types because they can't be
+ // converted
+ } else {
+ throw new Error(
+ `Validator not supported in union: ${innerValidator.displayName}`,
+ );
+ }
+ }
+ return result;
+}
+
+// MediaValidator is special cased because of flow issues
+function getConverterForMediaValidator(inputName: string) {
+ return `(${inputName}.type === 'photo'
+ ? { ...${inputName}, id: '256|' + ${inputName}.id }
+ : ${inputName}.type === 'video'
+ ? {
+ ...${inputName},
+ id: '256|' + ${inputName}.id,
+ thumbnailID: '256|' + ${inputName}.thumbnailID,
+ }
+ : ${inputName}.type === 'encrypted_photo'
+ ? ({ ...${inputName}, id: '256|' + ${inputName}.id }: any)
+ : ${inputName}.type === 'encrypted_video'
+ ? ({
+ ...${inputName},
+ id: '256|' + ${inputName}.id,
+ thumbnailID: '256|' + ${inputName}.thumbnailID,
+ }: any)
+ : ${inputName})`;
+}
+
+// `null` is returned if there is no conversion needed in T or any
+// of it's inner types
+function generateConverterFromValidator<T, C>(
+ validator: TType<T>,
+ inputName: string,
+ validatorToBeConverted: TType<C>,
+ conversionExpressionString: (inputName: string) => string,
+): ?string {
+ if (validator === validatorToBeConverted) {
+ return `(${conversionExpressionString(inputName)})`;
+ } else if (validator === mediaValidator) {
+ return getConverterForMediaValidator(inputName);
+ }
+
+ if (validator.meta.kind === 'maybe') {
+ const inner = generateConverterFromValidator(
+ validator.meta.type,
+ inputName,
+ validatorToBeConverted,
+ conversionExpressionString,
+ );
+ if (!inner) {
+ return null;
+ }
+ return `((${inputName} !== null && ${inputName} !== undefined) ? (${inner}) : (${inputName}))`;
+ }
+ if (validator.meta.kind === 'subtype') {
+ return generateConverterFromValidator(
+ validator.meta.type,
+ inputName,
+ validatorToBeConverted,
+ conversionExpressionString,
+ );
+ }
+ if (validator.meta.kind === 'interface') {
+ // In flow, union refinement only works if every variant has a key
+ // that is a literal. In this case we don't get a refinement of `validator`
+ // because we are checking value of the inner `meta` object.
+ const recastValidator: TInterface<{ +[string]: mixed }> = (validator: any);
+ const fieldConverters = [];
+ for (const key in recastValidator.meta.props) {
+ const inner = generateConverterFromValidator(
+ recastValidator.meta.props[key],
+ `${inputName}.${key}`,
+ validatorToBeConverted,
+ conversionExpressionString,
+ );
+ if (inner) {
+ fieldConverters.push(`${key}:${inner}`);
+ }
+ }
+ if (fieldConverters.length === 0) {
+ return null;
+ }
+
+ return `({...${inputName}, ${fieldConverters.join(',')}})`;
+ }
+ if (validator.meta.kind === 'union') {
+ const innerValidators = flattenInnerUnionValidators(validator.meta.types);
+
+ const variantConverters = [];
+ for (const innerValidator of innerValidators) {
+ const discriminatorField =
+ getDiscriminatorFieldForUnionValidator(validator);
+ const discriminatorValidator =
+ innerValidator.meta.props[discriminatorField];
+
+ if (!discriminatorValidator) {
+ throw new Error(
+ 'Union should have a discriminator ' + validator.displayName,
+ );
+ }
+
+ const discriminatorValue = discriminatorValidator.meta.name;
+
+ const inner = generateConverterFromValidator(
+ innerValidator,
+ inputName,
+ validatorToBeConverted,
+ conversionExpressionString,
+ );
+
+ if (inner) {
+ variantConverters.push(
+ `(${inputName}.${discriminatorField} === ${discriminatorValue}) ? (${inner})`,
+ );
+ }
+ }
+ if (variantConverters.length === 0) {
+ return null;
+ }
+ variantConverters.push(`(${inputName})`);
+ return `(${variantConverters.join(':')})`;
+ }
+ if (validator.meta.kind === 'list') {
+ const inner = generateConverterFromValidator(
+ validator.meta.type,
+ 'elem',
+ validatorToBeConverted,
+ conversionExpressionString,
+ );
+ if (!inner) {
+ return inputName;
+ }
+ return `(${inputName}.map(elem => ${inner}))`;
+ }
+ if (validator.meta.kind === 'dict') {
+ const domainValidator = validator.meta.domain;
+ const codomainValidator = validator.meta.codomain;
+
+ let domainConverter = null;
+ if (domainValidator === validatorToBeConverted) {
+ domainConverter = conversionExpressionString('key');
+ }
+
+ let codomainConverter = generateConverterFromValidator(
+ codomainValidator,
+ 'value',
+ validatorToBeConverted,
+ conversionExpressionString,
+ );
+
+ if (!domainConverter && !codomainConverter) {
+ return null;
+ }
+
+ domainConverter = domainConverter ?? 'key';
+ codomainConverter = codomainConverter ?? 'value';
+
+ return `(Object.fromEntries(
+ entries(${inputName}).map(
+ ([key, value]) => [${domainConverter}, ${codomainConverter}]
+ )
+ ))`;
+ }
+
+ return null;
+}
+
+// Input arguments:
+const validator = rawThreadInfoValidator;
+const typeName = 'RawThreadInfo';
+const validatorToBeConverted = tID;
+const conversionExpressionString = inputName =>
+ `'${keyserverPrefixID}|' + ${inputName}`;
+main([
+ async () => {
+ console.log(
+ `export function convert${typeName}ToNewIDSchema(input: ${typeName}): ${typeName} { return`,
+ generateConverterFromValidator(
+ validator,
+ 'input',
+ validatorToBeConverted,
+ conversionExpressionString,
+ ) ?? 'input',
+ ';}',
+ );
+ },
+]);
diff --git a/lib/_generated/migration-utils.js b/lib/_generated/migration-utils.js
new file mode 100644
--- /dev/null
+++ b/lib/_generated/migration-utils.js
@@ -0,0 +1,914 @@
+// @flow
+
+import type { EntryStore } from '../types/entry-types.js';
+import type { CalendarFilter } from '../types/filter-types.js';
+import type { InviteLinksStore } from '../types/link-types.js';
+import type { MessageStore, RawMessageInfo } from '../types/message-types.js';
+import type { ConnectionInfo } from '../types/socket-types.js';
+import type { RawThreadInfo } from '../types/thread-types.js';
+import { entries } from '../utils/objects.js';
+
+export function convertRawMessageInfoToNewIDSchema(
+ input: RawMessageInfo,
+): RawMessageInfo {
+ return input.type === 0
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ id:
+ input.id !== null && input.id !== undefined
+ ? '256|' + input.id
+ : input.id,
+ }
+ : input.type === 14
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ media: input.media.map(elem => ({ ...elem, id: '256|' + elem.id })),
+ id:
+ input.id !== null && input.id !== undefined
+ ? '256|' + input.id
+ : input.id,
+ }
+ : input.type === 15
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ media: input.media.map(elem =>
+ elem.type === 'photo'
+ ? { ...elem, id: '256|' + elem.id }
+ : elem.type === 'video'
+ ? {
+ ...elem,
+ id: '256|' + elem.id,
+ thumbnailID: '256|' + elem.thumbnailID,
+ }
+ : elem.type === 'encrypted_photo'
+ ? ({ ...elem, id: '256|' + elem.id }: any)
+ : elem.type === 'encrypted_video'
+ ? ({
+ ...elem,
+ id: '256|' + elem.id,
+ thumbnailID: '256|' + elem.thumbnailID,
+ }: any)
+ : elem,
+ ),
+ id:
+ input.id !== null && input.id !== undefined
+ ? '256|' + input.id
+ : input.id,
+ }
+ : input.type === 1
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ initialThreadState: {
+ ...input.initialThreadState,
+ parentThreadID:
+ input.initialThreadState.parentThreadID !== null &&
+ input.initialThreadState.parentThreadID !== undefined
+ ? '256|' + input.initialThreadState.parentThreadID
+ : input.initialThreadState.parentThreadID,
+ memberIDs: input.initialThreadState.memberIDs,
+ },
+ id: '256|' + input.id,
+ }
+ : input.type === 2
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ addedUserIDs: input.addedUserIDs,
+ id: '256|' + input.id,
+ }
+ : input.type === 3
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ childThreadID: '256|' + input.childThreadID,
+ id: '256|' + input.id,
+ }
+ : input.type === 4
+ ? { ...input, threadID: '256|' + input.threadID, id: '256|' + input.id }
+ : input.type === 5
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ removedUserIDs: input.removedUserIDs,
+ id: '256|' + input.id,
+ }
+ : input.type === 6
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ userIDs: input.userIDs,
+ newRole: '256|' + input.newRole,
+ id: '256|' + input.id,
+ }
+ : input.type === 7
+ ? { ...input, threadID: '256|' + input.threadID, id: '256|' + input.id }
+ : input.type === 8
+ ? { ...input, threadID: '256|' + input.threadID, id: '256|' + input.id }
+ : input.type === 9
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ entryID: '256|' + input.entryID,
+ id: '256|' + input.id,
+ }
+ : input.type === 10
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ entryID: '256|' + input.entryID,
+ id: '256|' + input.id,
+ }
+ : input.type === 11
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ entryID: '256|' + input.entryID,
+ id: '256|' + input.id,
+ }
+ : input.type === 12
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ entryID: '256|' + input.entryID,
+ id: '256|' + input.id,
+ }
+ : input.type === 16
+ ? { ...input, threadID: '256|' + input.threadID, id: '256|' + input.id }
+ : input.type === 18
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ initialThreadState: {
+ ...input.initialThreadState,
+ parentThreadID: '256|' + input.initialThreadState.parentThreadID,
+ memberIDs: input.initialThreadState.memberIDs,
+ },
+ id: '256|' + input.id,
+ }
+ : input.type === 13
+ ? { ...input, id: '256|' + input.id, threadID: '256|' + input.threadID }
+ : input.type === 21
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ targetMessageID: '256|' + input.targetMessageID,
+ id: '256|' + input.id,
+ }
+ : input.type === 17
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ sourceMessage:
+ input.sourceMessage !== null && input.sourceMessage !== undefined
+ ? input.sourceMessage.type === 0
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ id:
+ input.sourceMessage.id !== null &&
+ input.sourceMessage.id !== undefined
+ ? '256|' + input.sourceMessage.id
+ : input.sourceMessage.id,
+ }
+ : input.sourceMessage.type === 14
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ id:
+ input.sourceMessage.id !== null &&
+ input.sourceMessage.id !== undefined
+ ? '256|' + input.sourceMessage.id
+ : input.sourceMessage.id,
+ media: input.sourceMessage.media.map(elem => ({
+ ...elem,
+ id: '256|' + elem.id,
+ })),
+ }
+ : input.sourceMessage.type === 15
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ id:
+ input.sourceMessage.id !== null &&
+ input.sourceMessage.id !== undefined
+ ? '256|' + input.sourceMessage.id
+ : input.sourceMessage.id,
+ media: input.sourceMessage.media.map(elem =>
+ elem.type === 'photo'
+ ? { ...elem, id: '256|' + elem.id }
+ : elem.type === 'video'
+ ? {
+ ...elem,
+ id: '256|' + elem.id,
+ thumbnailID: '256|' + elem.thumbnailID,
+ }
+ : elem.type === 'encrypted_photo'
+ ? ({ ...elem, id: '256|' + elem.id }: any)
+ : elem.type === 'encrypted_video'
+ ? ({
+ ...elem,
+ id: '256|' + elem.id,
+ thumbnailID: '256|' + elem.thumbnailID,
+ }: any)
+ : elem,
+ ),
+ }
+ : input.sourceMessage.type === 1
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ initialThreadState: {
+ ...input.sourceMessage.initialThreadState,
+ parentThreadID:
+ input.sourceMessage.initialThreadState.parentThreadID !==
+ null &&
+ input.sourceMessage.initialThreadState.parentThreadID !==
+ undefined
+ ? '256|' +
+ input.sourceMessage.initialThreadState.parentThreadID
+ : input.sourceMessage.initialThreadState.parentThreadID,
+ memberIDs: input.sourceMessage.initialThreadState.memberIDs,
+ },
+ id: '256|' + input.sourceMessage.id,
+ }
+ : input.sourceMessage.type === 2
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ addedUserIDs: input.sourceMessage.addedUserIDs,
+ id: '256|' + input.sourceMessage.id,
+ }
+ : input.sourceMessage.type === 3
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ childThreadID: '256|' + input.sourceMessage.childThreadID,
+ id: '256|' + input.sourceMessage.id,
+ }
+ : input.sourceMessage.type === 4
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ id: '256|' + input.sourceMessage.id,
+ }
+ : input.sourceMessage.type === 5
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ removedUserIDs: input.sourceMessage.removedUserIDs,
+ id: '256|' + input.sourceMessage.id,
+ }
+ : input.sourceMessage.type === 6
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ userIDs: input.sourceMessage.userIDs,
+ newRole: '256|' + input.sourceMessage.newRole,
+ id: '256|' + input.sourceMessage.id,
+ }
+ : input.sourceMessage.type === 7
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ id: '256|' + input.sourceMessage.id,
+ }
+ : input.sourceMessage.type === 8
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ id: '256|' + input.sourceMessage.id,
+ }
+ : input.sourceMessage.type === 9
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ entryID: '256|' + input.sourceMessage.entryID,
+ id: '256|' + input.sourceMessage.id,
+ }
+ : input.sourceMessage.type === 10
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ entryID: '256|' + input.sourceMessage.entryID,
+ id: '256|' + input.sourceMessage.id,
+ }
+ : input.sourceMessage.type === 11
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ entryID: '256|' + input.sourceMessage.entryID,
+ id: '256|' + input.sourceMessage.id,
+ }
+ : input.sourceMessage.type === 12
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ entryID: '256|' + input.sourceMessage.entryID,
+ id: '256|' + input.sourceMessage.id,
+ }
+ : input.sourceMessage.type === 16
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ id: '256|' + input.sourceMessage.id,
+ }
+ : input.sourceMessage.type === 18
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ initialThreadState: {
+ ...input.sourceMessage.initialThreadState,
+ parentThreadID:
+ '256|' +
+ input.sourceMessage.initialThreadState.parentThreadID,
+ memberIDs: input.sourceMessage.initialThreadState.memberIDs,
+ },
+ id: '256|' + input.sourceMessage.id,
+ }
+ : input.sourceMessage.type === 13
+ ? {
+ ...input.sourceMessage,
+ id: '256|' + input.sourceMessage.id,
+ threadID: '256|' + input.sourceMessage.threadID,
+ }
+ : input.sourceMessage.type === 21
+ ? {
+ ...input.sourceMessage,
+ threadID: '256|' + input.sourceMessage.threadID,
+ targetMessageID: '256|' + input.sourceMessage.targetMessageID,
+ id: '256|' + input.sourceMessage.id,
+ }
+ : input.sourceMessage
+ : input.sourceMessage,
+ id: '256|' + input.id,
+ }
+ : input.type === 19
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ targetMessageID: '256|' + input.targetMessageID,
+ id:
+ input.id !== null && input.id !== undefined
+ ? '256|' + input.id
+ : input.id,
+ }
+ : input.type === 20
+ ? {
+ ...input,
+ threadID: '256|' + input.threadID,
+ targetMessageID: '256|' + input.targetMessageID,
+ id: '256|' + input.id,
+ }
+ : input;
+}
+
+export function convertRawThreadInfoToNewIDSchema(
+ input: RawThreadInfo,
+): RawThreadInfo {
+ return {
+ ...input,
+ id: '256|' + input.id,
+ parentThreadID:
+ input.parentThreadID !== null && input.parentThreadID !== undefined
+ ? '256|' + input.parentThreadID
+ : input.parentThreadID,
+ containingThreadID:
+ input.containingThreadID !== null &&
+ input.containingThreadID !== undefined
+ ? '256|' + input.containingThreadID
+ : input.containingThreadID,
+ community:
+ input.community !== null && input.community !== undefined
+ ? '256|' + input.community
+ : input.community,
+ members: input.members.map(elem => ({
+ ...elem,
+ role:
+ elem.role !== null && elem.role !== undefined
+ ? '256|' + elem.role
+ : elem.role,
+ permissions: Object.fromEntries(
+ entries(elem.permissions).map(([key, value]) => [
+ key,
+ value.value === true
+ ? { ...value, source: '256|' + value.source }
+ : value,
+ ]),
+ ),
+ })),
+ roles: Object.fromEntries(
+ entries(input.roles).map(([key, value]) => [
+ '256|' + key,
+ { ...value, id: '256|' + value.id },
+ ]),
+ ),
+ currentUser: {
+ ...input.currentUser,
+ role:
+ input.currentUser.role !== null && input.currentUser.role !== undefined
+ ? '256|' + input.currentUser.role
+ : input.currentUser.role,
+ permissions: Object.fromEntries(
+ entries(input.currentUser.permissions).map(([key, value]) => [
+ key,
+ value.value === true
+ ? { ...value, source: '256|' + value.source }
+ : value,
+ ]),
+ ),
+ },
+ sourceMessageID:
+ input.sourceMessageID !== null && input.sourceMessageID !== undefined
+ ? '256|' + input.sourceMessageID
+ : input.sourceMessageID,
+ };
+}
+
+export function convertMessageStoreToNewIDSchema(
+ input: MessageStore,
+): MessageStore {
+ return {
+ ...input,
+ messages: Object.fromEntries(
+ entries(input.messages).map(([key, value]) => [
+ '256|' + key,
+ value.type === 0
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ id:
+ value.id !== null && value.id !== undefined
+ ? '256|' + value.id
+ : value.id,
+ }
+ : value.type === 14
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ media: value.media.map(elem => ({
+ ...elem,
+ id: '256|' + elem.id,
+ })),
+ id:
+ value.id !== null && value.id !== undefined
+ ? '256|' + value.id
+ : value.id,
+ }
+ : value.type === 15
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ media: value.media.map(elem =>
+ elem.type === 'photo'
+ ? { ...elem, id: '256|' + elem.id }
+ : elem.type === 'video'
+ ? {
+ ...elem,
+ id: '256|' + elem.id,
+ thumbnailID: '256|' + elem.thumbnailID,
+ }
+ : elem.type === 'encrypted_photo'
+ ? ({ ...elem, id: '256|' + elem.id }: any)
+ : elem.type === 'encrypted_video'
+ ? ({
+ ...elem,
+ id: '256|' + elem.id,
+ thumbnailID: '256|' + elem.thumbnailID,
+ }: any)
+ : elem,
+ ),
+ id:
+ value.id !== null && value.id !== undefined
+ ? '256|' + value.id
+ : value.id,
+ }
+ : value.type === 1
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ initialThreadState: {
+ ...value.initialThreadState,
+ parentThreadID:
+ value.initialThreadState.parentThreadID !== null &&
+ value.initialThreadState.parentThreadID !== undefined
+ ? '256|' + value.initialThreadState.parentThreadID
+ : value.initialThreadState.parentThreadID,
+ memberIDs: value.initialThreadState.memberIDs,
+ },
+ id: '256|' + value.id,
+ }
+ : value.type === 2
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ addedUserIDs: value.addedUserIDs,
+ id: '256|' + value.id,
+ }
+ : value.type === 3
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ childThreadID: '256|' + value.childThreadID,
+ id: '256|' + value.id,
+ }
+ : value.type === 4
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ id: '256|' + value.id,
+ }
+ : value.type === 5
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ removedUserIDs: value.removedUserIDs,
+ id: '256|' + value.id,
+ }
+ : value.type === 6
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ userIDs: value.userIDs,
+ newRole: '256|' + value.newRole,
+ id: '256|' + value.id,
+ }
+ : value.type === 7
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ id: '256|' + value.id,
+ }
+ : value.type === 8
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ id: '256|' + value.id,
+ }
+ : value.type === 9
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ entryID: '256|' + value.entryID,
+ id: '256|' + value.id,
+ }
+ : value.type === 10
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ entryID: '256|' + value.entryID,
+ id: '256|' + value.id,
+ }
+ : value.type === 11
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ entryID: '256|' + value.entryID,
+ id: '256|' + value.id,
+ }
+ : value.type === 12
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ entryID: '256|' + value.entryID,
+ id: '256|' + value.id,
+ }
+ : value.type === 16
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ id: '256|' + value.id,
+ }
+ : value.type === 18
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ initialThreadState: {
+ ...value.initialThreadState,
+ parentThreadID:
+ '256|' + value.initialThreadState.parentThreadID,
+ memberIDs: value.initialThreadState.memberIDs,
+ },
+ id: '256|' + value.id,
+ }
+ : value.type === 13
+ ? {
+ ...value,
+ id: '256|' + value.id,
+ threadID: '256|' + value.threadID,
+ }
+ : value.type === 21
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ targetMessageID: '256|' + value.targetMessageID,
+ id: '256|' + value.id,
+ }
+ : value.type === 17
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ sourceMessage:
+ value.sourceMessage !== null &&
+ value.sourceMessage !== undefined
+ ? value.sourceMessage.type === 0
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ id:
+ value.sourceMessage.id !== null &&
+ value.sourceMessage.id !== undefined
+ ? '256|' + value.sourceMessage.id
+ : value.sourceMessage.id,
+ }
+ : value.sourceMessage.type === 14
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ id:
+ value.sourceMessage.id !== null &&
+ value.sourceMessage.id !== undefined
+ ? '256|' + value.sourceMessage.id
+ : value.sourceMessage.id,
+ media: value.sourceMessage.media.map(elem => ({
+ ...elem,
+ id: '256|' + elem.id,
+ })),
+ }
+ : value.sourceMessage.type === 15
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ id:
+ value.sourceMessage.id !== null &&
+ value.sourceMessage.id !== undefined
+ ? '256|' + value.sourceMessage.id
+ : value.sourceMessage.id,
+ media: value.sourceMessage.media.map(elem =>
+ elem.type === 'photo'
+ ? { ...elem, id: '256|' + elem.id }
+ : elem.type === 'video'
+ ? {
+ ...elem,
+ id: '256|' + elem.id,
+ thumbnailID: '256|' + elem.thumbnailID,
+ }
+ : elem.type === 'encrypted_photo'
+ ? ({ ...elem, id: '256|' + elem.id }: any)
+ : elem.type === 'encrypted_video'
+ ? ({
+ ...elem,
+ id: '256|' + elem.id,
+ thumbnailID: '256|' + elem.thumbnailID,
+ }: any)
+ : elem,
+ ),
+ }
+ : value.sourceMessage.type === 1
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ initialThreadState: {
+ ...value.sourceMessage.initialThreadState,
+ parentThreadID:
+ value.sourceMessage.initialThreadState
+ .parentThreadID !== null &&
+ value.sourceMessage.initialThreadState
+ .parentThreadID !== undefined
+ ? '256|' +
+ value.sourceMessage.initialThreadState
+ .parentThreadID
+ : value.sourceMessage.initialThreadState
+ .parentThreadID,
+ memberIDs:
+ value.sourceMessage.initialThreadState.memberIDs,
+ },
+ id: '256|' + value.sourceMessage.id,
+ }
+ : value.sourceMessage.type === 2
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ addedUserIDs: value.sourceMessage.addedUserIDs,
+ id: '256|' + value.sourceMessage.id,
+ }
+ : value.sourceMessage.type === 3
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ childThreadID:
+ '256|' + value.sourceMessage.childThreadID,
+ id: '256|' + value.sourceMessage.id,
+ }
+ : value.sourceMessage.type === 4
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ id: '256|' + value.sourceMessage.id,
+ }
+ : value.sourceMessage.type === 5
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ removedUserIDs: value.sourceMessage.removedUserIDs,
+ id: '256|' + value.sourceMessage.id,
+ }
+ : value.sourceMessage.type === 6
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ userIDs: value.sourceMessage.userIDs,
+ newRole: '256|' + value.sourceMessage.newRole,
+ id: '256|' + value.sourceMessage.id,
+ }
+ : value.sourceMessage.type === 7
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ id: '256|' + value.sourceMessage.id,
+ }
+ : value.sourceMessage.type === 8
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ id: '256|' + value.sourceMessage.id,
+ }
+ : value.sourceMessage.type === 9
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ entryID: '256|' + value.sourceMessage.entryID,
+ id: '256|' + value.sourceMessage.id,
+ }
+ : value.sourceMessage.type === 10
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ entryID: '256|' + value.sourceMessage.entryID,
+ id: '256|' + value.sourceMessage.id,
+ }
+ : value.sourceMessage.type === 11
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ entryID: '256|' + value.sourceMessage.entryID,
+ id: '256|' + value.sourceMessage.id,
+ }
+ : value.sourceMessage.type === 12
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ entryID: '256|' + value.sourceMessage.entryID,
+ id: '256|' + value.sourceMessage.id,
+ }
+ : value.sourceMessage.type === 16
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ id: '256|' + value.sourceMessage.id,
+ }
+ : value.sourceMessage.type === 18
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ initialThreadState: {
+ ...value.sourceMessage.initialThreadState,
+ parentThreadID:
+ '256|' +
+ value.sourceMessage.initialThreadState
+ .parentThreadID,
+ memberIDs:
+ value.sourceMessage.initialThreadState.memberIDs,
+ },
+ id: '256|' + value.sourceMessage.id,
+ }
+ : value.sourceMessage.type === 13
+ ? {
+ ...value.sourceMessage,
+ id: '256|' + value.sourceMessage.id,
+ threadID: '256|' + value.sourceMessage.threadID,
+ }
+ : value.sourceMessage.type === 21
+ ? {
+ ...value.sourceMessage,
+ threadID: '256|' + value.sourceMessage.threadID,
+ targetMessageID:
+ '256|' + value.sourceMessage.targetMessageID,
+ id: '256|' + value.sourceMessage.id,
+ }
+ : value.sourceMessage
+ : value.sourceMessage,
+ id: '256|' + value.id,
+ }
+ : value.type === 19
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ targetMessageID: '256|' + value.targetMessageID,
+ id:
+ value.id !== null && value.id !== undefined
+ ? '256|' + value.id
+ : value.id,
+ }
+ : value.type === 20
+ ? {
+ ...value,
+ threadID: '256|' + value.threadID,
+ targetMessageID: '256|' + value.targetMessageID,
+ id: '256|' + value.id,
+ }
+ : value,
+ ]),
+ ),
+ threads: Object.fromEntries(
+ entries(input.threads).map(([key, value]) => [
+ '256|' + key,
+ { ...value, messageIDs: value.messageIDs.map(elem => '256|' + elem) },
+ ]),
+ ),
+ };
+}
+
+export function convertEntryStoreToNewIDSchema(input: EntryStore): EntryStore {
+ return {
+ ...input,
+ entryInfos: Object.fromEntries(
+ entries(input.entryInfos).map(([key, value]) => [
+ '256|' + key,
+ {
+ ...value,
+ id:
+ value.id !== null && value.id !== undefined
+ ? '256|' + value.id
+ : value.id,
+ threadID: '256|' + value.threadID,
+ },
+ ]),
+ ),
+ daysToEntries: Object.fromEntries(
+ entries(input.daysToEntries).map(([key, value]) => [
+ key,
+ value.map(elem => '256|' + elem),
+ ]),
+ ),
+ };
+}
+
+export function convertInviteLinksStoreToNewIDSchema(
+ input: InviteLinksStore,
+): InviteLinksStore {
+ return {
+ ...input,
+ links: Object.fromEntries(
+ entries(input.links).map(([key, value]) => [
+ '256|' + key,
+ {
+ ...value,
+ primaryLink:
+ value.primaryLink !== null && value.primaryLink !== undefined
+ ? {
+ ...value.primaryLink,
+ role: '256|' + value.primaryLink.role,
+ communityID: '256|' + value.primaryLink.communityID,
+ }
+ : value.primaryLink,
+ },
+ ]),
+ ),
+ };
+}
+
+export function convertCalendarFilterToNewIDSchema(
+ input: CalendarFilter,
+): CalendarFilter {
+ return input.type === 'threads'
+ ? { ...input, threadIDs: input.threadIDs.map(elem => '256|' + elem) }
+ : input;
+}
+
+export function convertConnectionInfoToNewIDSchema(
+ input: ConnectionInfo,
+): ConnectionInfo {
+ return {
+ ...input,
+ queuedActivityUpdates: input.queuedActivityUpdates.map(elem => ({
+ ...elem,
+ threadID: '256|' + elem.threadID,
+ latestMessage:
+ elem.latestMessage !== null && elem.latestMessage !== undefined
+ ? '256|' + elem.latestMessage
+ : elem.latestMessage,
+ })),
+ actualizedCalendarQuery: {
+ ...input.actualizedCalendarQuery,
+ filters: input.actualizedCalendarQuery.filters.map(elem =>
+ elem.type === 'threads'
+ ? { ...elem, threadIDs: elem.threadIDs.map(elem2 => '256|' + elem2) }
+ : elem,
+ ),
+ },
+ };
+}
diff --git a/lib/utils/objects.js b/lib/utils/objects.js
--- a/lib/utils/objects.js
+++ b/lib/utils/objects.js
@@ -50,6 +50,11 @@
return Object.keys(map);
}
+function entries<K: string, T>(map: ObjectMap<K, T>): [K, T][] {
+ // $FlowFixMe - flow treats the values as mixed, but we know that they are T
+ return Object.entries(map);
+}
+
function assignValueWithKey<K, T>(
obj: NestedObjectMap<K, T>,
key: K,
@@ -116,4 +121,11 @@
);
}
-export { findMaximumDepth, values, hash, assertObjectsAreEqual, deepDiff };
+export {
+ findMaximumDepth,
+ values,
+ hash,
+ assertObjectsAreEqual,
+ deepDiff,
+ entries,
+};
diff --git a/lib/utils/validation-utils.js b/lib/utils/validation-utils.js
--- a/lib/utils/validation-utils.js
+++ b/lib/utils/validation-utils.js
@@ -27,15 +27,15 @@
} from '../types/messages/media';
function tBool(value: boolean): TIrreducible<boolean> {
- return t.irreducible('literal bool', x => x === value);
+ return t.irreducible(value.toString(), x => x === value);
}
function tString(value: string): TIrreducible<string> {
- return t.irreducible('literal string', x => x === value);
+ return t.irreducible(`'${value}'`, x => x === value);
}
function tNumber(value: number): TIrreducible<number> {
- return t.irreducible('literal number', x => x === value);
+ return t.irreducible(value.toString(), x => x === value);
}
function tShape<T>(spec: TStructProps<T>): TInterface<T> {

File Metadata

Mime Type
text/plain
Expires
Wed, Dec 10, 4:59 AM (14 h, 56 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5861205
Default Alt Text
D8355.1765342796.diff (43 KB)

Event Timeline