Skip to content

Commit

Permalink
Update to typebox 0.32.22
Browse files Browse the repository at this point in the history
sinclairzx81/typebox#825
Co-authored-by: Haydn Paterson (sinclair) <haydn.developer@gmail.com>
  • Loading branch information
Gnuxie and sinclairzx81 committed Apr 22, 2024
1 parent c3e574a commit 1d62917
Show file tree
Hide file tree
Showing 18 changed files with 99 additions and 77 deletions.
4 changes: 2 additions & 2 deletions package.json
Expand Up @@ -26,7 +26,7 @@
},
"devDependencies": {
"@commitlint/config-conventional": "^17.4.4",
"@sinclair/typebox": "~0.31.15",
"@sinclair/typebox": "0.32.22",
"@types/crypto-js": "^4.2.2",
"@types/glob-to-regexp": "^0.4.1",
"@types/jest": "^29.4.0",
Expand Down Expand Up @@ -77,7 +77,7 @@
"ulidx": "^2.1.0"
},
"peerDependencies": {
"@sinclair/typebox": "~0.31.15"
"@sinclair/typebox": "0.32.22"
},
"publishConfig": {
"@gnuxie:registry": "https://registry.npmjs.org"
Expand Down
9 changes: 9 additions & 0 deletions src/Interface/Static.ts
@@ -0,0 +1,9 @@
// Copyright 2024 Haydn Paterson (sinclair) <haydn.developer@gmail.com>
//
// SPDX-License-Identifier: MIT

import { Evaluate, StaticDecode, TSchema } from '@sinclair/typebox';

// Specialized Static - Evaluates Intersections as Object type
// See https://github.com/sinclairzx81/typebox/issues/825#issuecomment-2067795724.
export type EDStatic<T extends TSchema> = Evaluate<StaticDecode<T>>;
7 changes: 5 additions & 2 deletions src/Interface/Value.ts
Expand Up @@ -40,10 +40,13 @@ export class Value {
const entry = this.compiledSchema.get(schema);
if (entry === undefined) {
const compiledCheck = TypeCompiler.Compile(schema);
this.compiledSchema.set(schema, compiledCheck);
this.compiledSchema.set(
schema,
compiledCheck as unknown as TypeCheck<TSchema>
);
return compiledCheck;
}
return entry as TypeCheck<T>;
return entry as unknown as TypeCheck<T>;
}
public static Decode<T extends TSchema, D = StaticDecode<T>>(
schema: T,
Expand Down
31 changes: 17 additions & 14 deletions src/MatrixTypes/Events.ts
Expand Up @@ -7,16 +7,18 @@
// This modified file incorporates work from matrix-spec
// https://github.com/matrix-org/matrix-spec
// </text>
import { Static, StaticDecode, TSchema, Type } from '@sinclair/typebox';
import { TSchema, Type } from '@sinclair/typebox';
import {
StringEventID,
StringRoomID,
StringUserID,
} from './StringlyTypedMatrix';
import { EDStatic } from '../Interface/Static';

export const EmptyContent = Type.Object({}, { additionalProperties: false });
export type EmptyContent = StaticDecode<typeof EmptyContent>;
export type EmptyContent = EDStatic<typeof EmptyContent>;

export type Event<Content extends TSchema = typeof EmptyContent> = Static<
export type Event<Content extends TSchema = typeof EmptyContent> = EDStatic<
ReturnType<typeof Event<Content>>
>;
export const Event = <Content extends TSchema>(Content: Content) =>
Expand All @@ -28,7 +30,7 @@ export const Event = <Content extends TSchema>(Content: Content) =>
}),
});

export type UnsignedData = Static<typeof UnsignedData>;
export type UnsignedData = EDStatic<typeof UnsignedData>;
export const UnsignedData = Type.Object({
age: Type.Optional(
Type.Number({
Expand All @@ -49,9 +51,9 @@ export const UnsignedData = Type.Object({
});

export type SyncRoomEvent<Content extends TSchema = typeof EmptyContent> =
Static<ReturnType<typeof SyncRoomEvent<Content>>>;
EDStatic<ReturnType<typeof SyncRoomEvent<Content>>>;
export const SyncRoomEvent = <Content extends TSchema>(Content: Content) =>
Type.Composite([
Type.Intersect([
Event(Content),
Type.Object({
event_id: StringEventID,
Expand All @@ -65,10 +67,11 @@ export const SyncRoomEvent = <Content extends TSchema>(Content: Content) =>
}),
]);

export type RoomEvent<Content extends TSchema = typeof EmptyContent> =
StaticDecode<ReturnType<typeof RoomEvent<Content>>>;
export type RoomEvent<Content extends TSchema = typeof EmptyContent> = EDStatic<
ReturnType<typeof RoomEvent<Content>>
>;
export const RoomEvent = <Content extends TSchema>(Content: Content) =>
Type.Composite([
Type.Intersect([
SyncRoomEvent(Content),
Type.Object({
room_id: StringRoomID,
Expand All @@ -83,16 +86,16 @@ const StateKey = Type.Object({
});

export type SyncStateEvent<Content extends TSchema = typeof EmptyContent> =
StaticDecode<ReturnType<typeof SyncStateEvent<Content>>>;
EDStatic<ReturnType<typeof SyncStateEvent<Content>>>;
export const SyncStateEvent = <Content extends TSchema>(Content: Content) =>
Type.Composite([SyncRoomEvent(Content), StateKey]);
Type.Intersect([SyncRoomEvent(Content), StateKey]);

export type StateEvent<Content extends TSchema = typeof EmptyContent> =
StaticDecode<ReturnType<typeof StateEvent<Content>>>;
EDStatic<ReturnType<typeof StateEvent<Content>>>;
export const StateEvent = <Content extends TSchema>(Content: Content) =>
Type.Composite([RoomEvent(Content), StateKey]);
Type.Intersect([RoomEvent(Content), StateKey]);

export type StrippedStateEvent = StaticDecode<typeof StrippedStateEvent>;
export type StrippedStateEvent = EDStatic<typeof StrippedStateEvent>;
export const StrippedStateEvent = Type.Object({
content: Type.Unknown(),
state_key: Type.String({ description: 'The `state_key` for the event.' }),
Expand Down
19 changes: 9 additions & 10 deletions src/MatrixTypes/MembershipEvent.ts
Expand Up @@ -9,12 +9,13 @@
// https://github.com/matrix-org/matrix-spec
// </text>

import { Static, StaticDecode, Type } from '@sinclair/typebox';
import { Type } from '@sinclair/typebox';
import { StateEvent, StrippedStateEvent, UnsignedData } from './Events';
import { StringUserID } from './StringlyTypedMatrix';
import { EDStatic } from '../Interface/Static';

export type MembershipEventUnsigned = Static<typeof MembershipEventUnsigned>;
export const MembershipEventUnsigned = Type.Composite([
export type MembershipEventUnsigned = EDStatic<typeof MembershipEventUnsigned>;
export const MembershipEventUnsigned = Type.Intersect([
UnsignedData,
Type.Object({
invite_room_state: Type.Optional(
Expand All @@ -32,9 +33,7 @@ export const MembershipEventUnsigned = Type.Composite([
}),
]);

export type MembershipEventContent = StaticDecode<
typeof MembershipEventContent
>;
export type MembershipEventContent = EDStatic<typeof MembershipEventContent>;
export const MembershipEventContent = Type.Object({
avatar_url: Type.Optional(
Type.String({
Expand Down Expand Up @@ -90,8 +89,8 @@ export const MembershipEventContent = Type.Object({
),
});

export type BaseMembershipEvent = StaticDecode<typeof BaseMembershipEvent>;
export const BaseMembershipEvent = Type.Composite([
export type BaseMembershipEvent = EDStatic<typeof BaseMembershipEvent>;
export const BaseMembershipEvent = Type.Intersect([
Type.Omit(StateEvent(Type.Object({})), ['state_key', 'unsigned', 'type']),
Type.Object({
state_key: StringUserID,
Expand All @@ -100,8 +99,8 @@ export const BaseMembershipEvent = Type.Composite([
}),
]);

export type MembershipEvent = StaticDecode<typeof MembershipEvent>;
export const MembershipEvent = Type.Composite([
export type MembershipEvent = EDStatic<typeof MembershipEvent>;
export const MembershipEvent = Type.Intersect([
Type.Omit(BaseMembershipEvent, ['content']),
Type.Object({
content: MembershipEventContent,
Expand Down
23 changes: 12 additions & 11 deletions src/MatrixTypes/PolicyEvents.ts
Expand Up @@ -8,10 +8,11 @@
// https://github.com/matrix-org/mjolnir
// </text>

import { Static, StaticDecode, Type } from '@sinclair/typebox';
import { Type } from '@sinclair/typebox';
import { EmptyContent, StateEvent } from './Events';
import { Value } from '../Interface/Value';
import { registerDefaultDecoder } from './EventDecoder';
import { EDStatic } from '../Interface/Static';

export enum PolicyRuleType {
/// `entity` is to be parsed as a glob of users IDs
Expand Down Expand Up @@ -104,7 +105,7 @@ export function isPolicyTypeObsolete(
}
}

export type UnredactedPolicyContent = Static<typeof UnredactedPolicyContent>;
export type UnredactedPolicyContent = EDStatic<typeof UnredactedPolicyContent>;
export const UnredactedPolicyContent = Type.Object({
entity: Type.String({
description:
Expand All @@ -119,17 +120,17 @@ export const UnredactedPolicyContent = Type.Object({
}),
});

export type RedactablePolicyContent = Static<typeof RedactablePolicyContent>;
export type RedactablePolicyContent = EDStatic<typeof RedactablePolicyContent>;
export const RedactablePolicyContent = Type.Union([
UnredactedPolicyContent,
EmptyContent,
]);

export type GeneircPolicyRuleEvent = StaticDecode<typeof PolicyRuleEvent>;
export type GeneircPolicyRuleEvent = EDStatic<typeof PolicyRuleEvent>;
export const GeneircPolicyRuleEvent = StateEvent(RedactablePolicyContent);

export type PolicyRuleUser = StaticDecode<typeof PolicyRuleUser>;
export const PolicyRuleUser = Type.Composite([
export type PolicyRuleUser = EDStatic<typeof PolicyRuleUser>;
export const PolicyRuleUser = Type.Intersect([
GeneircPolicyRuleEvent,
Type.Object({
state_key: Type.Optional(
Expand All @@ -141,8 +142,8 @@ export const PolicyRuleUser = Type.Composite([
}),
]);

export type PolicyRuleServer = StaticDecode<typeof PolicyRuleServer>;
export const PolicyRuleServer = Type.Composite([
export type PolicyRuleServer = EDStatic<typeof PolicyRuleServer>;
export const PolicyRuleServer = Type.Intersect([
GeneircPolicyRuleEvent,
Type.Object({
state_key: Type.Optional(
Expand All @@ -154,8 +155,8 @@ export const PolicyRuleServer = Type.Composite([
}),
]);

export type PolicyRuleRoom = StaticDecode<typeof PolicyRuleRoom>;
export const PolicyRuleRoom = Type.Composite([
export type PolicyRuleRoom = EDStatic<typeof PolicyRuleRoom>;
export const PolicyRuleRoom = Type.Intersect([
GeneircPolicyRuleEvent,
Type.Object({
state_key: Type.Optional(
Expand All @@ -167,7 +168,7 @@ export const PolicyRuleRoom = Type.Composite([
}),
]);

export type PolicyRuleEvent = StaticDecode<typeof PolicyRuleEvent>;
export type PolicyRuleEvent = EDStatic<typeof PolicyRuleEvent>;
export const PolicyRuleEvent = Type.Union([
PolicyRuleUser,
PolicyRuleServer,
Expand Down
5 changes: 3 additions & 2 deletions src/MatrixTypes/PowerLevels.ts
Expand Up @@ -13,6 +13,7 @@ import { StaticDecode, Type } from '@sinclair/typebox';
import { StateEvent } from './Events';
import { registerDefaultDecoder } from './EventDecoder';
import { Value } from '../Interface/Value';
import { EDStatic } from '../Interface/Static';

export type PowerLevelsEventContent = StaticDecode<
typeof PowerLevelsEventContent
Expand Down Expand Up @@ -77,8 +78,8 @@ export const PowerLevelsEventContent = Type.Object({
),
});

export type PowerLevelsEvent = StaticDecode<typeof PowerLevelsEvent>;
export const PowerLevelsEvent = Type.Composite([
export type PowerLevelsEvent = EDStatic<typeof PowerLevelsEvent>;
export const PowerLevelsEvent = Type.Intersect([
Type.Omit(StateEvent(PowerLevelsEventContent), ['state_key', 'type']),
Type.Object({
state_key: Type.String({
Expand Down
9 changes: 5 additions & 4 deletions src/MatrixTypes/ReactionEvent.ts
Expand Up @@ -8,13 +8,14 @@
// https://github.com/matrix-org/matrix-spec
// </text>

import { StaticDecode, Type } from '@sinclair/typebox';
import { Type } from '@sinclair/typebox';
import { StringEventID } from './StringlyTypedMatrix';
import { RoomEvent } from './Events';
import { registerDefaultDecoder } from './EventDecoder';
import { Value } from '../Interface/Value';
import { EDStatic } from '../Interface/Static';

export type ReactionContent = StaticDecode<typeof ReactionContent>;
export type ReactionContent = EDStatic<typeof ReactionContent>;
export const ReactionContent = Type.Object({
['m.relates_to']: Type.Optional(
Type.Object({
Expand All @@ -31,8 +32,8 @@ export const ReactionContent = Type.Object({
),
});

export type ReactionEvent = StaticDecode<typeof ReactionEvent>;
export const ReactionEvent = Type.Composite([
export type ReactionEvent = EDStatic<typeof ReactionEvent>;
export const ReactionEvent = Type.Intersect([
Type.Omit(RoomEvent(Type.Unknown()), ['content', 'type']),
Type.Object({
content: Type.Optional(ReactionContent),
Expand Down
9 changes: 5 additions & 4 deletions src/MatrixTypes/Redaction.ts
Expand Up @@ -8,13 +8,14 @@
// https://github.com/matrix-org/matrix-spec
// </text>

import { StaticDecode, Type } from '@sinclair/typebox';
import { Type } from '@sinclair/typebox';
import { RoomEvent } from './Events';
import { StringEventID } from './StringlyTypedMatrix';
import { registerDefaultDecoder } from './EventDecoder';
import { Value } from '../Interface/Value';
import { EDStatic } from '../Interface/Static';

export type RedactionContent = StaticDecode<typeof RedactionContent>;
export type RedactionContent = EDStatic<typeof RedactionContent>;
export const RedactionContent = Type.Object({
redacts: Type.Optional(
Type.Union([StringEventID], {
Expand All @@ -27,8 +28,8 @@ export const RedactionContent = Type.Object({
),
});

export type Redaction = StaticDecode<typeof Redaction>;
export const Redaction = Type.Composite([
export type Redaction = EDStatic<typeof Redaction>;
export const Redaction = Type.Intersect([
Type.Omit(RoomEvent(RedactionContent), ['type']),
Type.Object({
redacts: Type.Optional(
Expand Down

0 comments on commit 1d62917

Please sign in to comment.