@pluv/types 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.eslintrc.js ADDED
@@ -0,0 +1,4 @@
1
+ module.exports = {
2
+ root: true,
3
+ extends: ["pluv"],
4
+ };
@@ -0,0 +1,17 @@
1
+
2
+ > @pluv/types@0.0.0 build /home/runner/work/pluv/pluv/packages/types
3
+ > tsup src/index.ts --format esm,cjs --dts
4
+
5
+ CLI Building entry: src/index.ts
6
+ CLI Using tsconfig: tsconfig.json
7
+ CLI tsup v6.5.0
8
+ CLI Target: es6
9
+ ESM Build start
10
+ CJS Build start
11
+ ESM dist/index.mjs 0 B
12
+ ESM ⚡️ Build success in 30ms
13
+ CJS dist/index.js 754.00 B
14
+ CJS ⚡️ Build success in 32ms
15
+ DTS Build start
16
+ DTS ⚡️ Build success in 754ms
17
+ DTS dist/index.d.ts 6.15 KB
@@ -0,0 +1,140 @@
1
+ type Constructable = {
2
+ new (...args: any[]): any;
3
+ };
4
+ type Maybe<T> = T | null | undefined;
5
+ type MaybePromise<T> = Promise<T> | T;
6
+ type MaybeReadonlyArray<T> = T[] | readonly T[];
7
+ type OptionalPropertyNames<T> = {
8
+ [K in keyof T]-?: {} extends {
9
+ [P in K]: T[K];
10
+ } ? K : never;
11
+ }[keyof T];
12
+ type SpreadProperties<L, R, K extends keyof L & keyof R> = {
13
+ [P in K]: L[P] | Exclude<R[P], undefined>;
14
+ };
15
+ type Id<T> = T extends infer U ? U extends Constructable ? U : {
16
+ [K in keyof U]: U[K];
17
+ } : never;
18
+ type SpreadTwo<L, R> = Id<Pick<L, Exclude<keyof L, keyof R>> & Pick<R, Exclude<keyof R, OptionalPropertyNames<R>>> & Pick<R, Exclude<OptionalPropertyNames<R>, keyof L>> & SpreadProperties<L, R, OptionalPropertyNames<R> & keyof L>>;
19
+ type Spread<A extends readonly [...any]> = A extends [
20
+ infer L,
21
+ ...infer R
22
+ ] ? SpreadTwo<L, Spread<R>> : unknown;
23
+ type DeepPartial<T> = {
24
+ [P in keyof T]?: T[P] extends Array<infer U> ? Array<DeepPartial<U>> : T[P] extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : DeepPartial<T[P]>;
25
+ };
26
+ type DeepWriteable<T> = {
27
+ -readonly [P in keyof T]: DeepWriteable<T[P]>;
28
+ };
29
+ type OptionalProps<T extends Record<string, any>, K extends keyof T = keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
30
+ type NonNilProps<T extends Record<string, any>, K extends keyof T = keyof T> = Omit<T, K> & {
31
+ [P in K]-?: NonNullable<T[P]>;
32
+ };
33
+ type JsonPrimitive = string | number | boolean | null;
34
+ type Json = JsonPrimitive | Json[] | readonly Json[] | {
35
+ [key: string]: Json;
36
+ };
37
+ type JsonObject = Record<string, Json>;
38
+
39
+ type BaseUser = {
40
+ id: string;
41
+ };
42
+ interface BaseClientEventRecord {
43
+ $GET_OTHERS: {};
44
+ $PING: {};
45
+ $UPDATE_PRESENCE: {
46
+ presence: JsonObject;
47
+ };
48
+ $UPDATE_STORAGE: {
49
+ origin: string | null;
50
+ update: string;
51
+ };
52
+ }
53
+ type BaseClientMessage = InferEventMessage<BaseClientEventRecord>;
54
+ interface BaseIOAuthorize {
55
+ required: false;
56
+ secret: string;
57
+ user: InputZodLike<BaseUser>;
58
+ }
59
+ interface BaseIOAuthorizeEventRecord<TAuthorize extends IOAuthorize<any, any>> {
60
+ $OTHERS_RECEIVED: {
61
+ others: {
62
+ [connectionId: string]: {
63
+ connectionId: string;
64
+ presence: JsonObject | null;
65
+ room: string | null;
66
+ user: InferIOAuthorizeUser<TAuthorize>;
67
+ };
68
+ };
69
+ };
70
+ $USER_JOINED: {
71
+ connectionId: string;
72
+ user: NonNullable<InferIOAuthorizeUser<TAuthorize>>;
73
+ };
74
+ }
75
+ type BaseIOEventRecord<TAuthorize extends IOAuthorize<any, any>> = BaseIOAuthorizeEventRecord<TAuthorize> & {
76
+ $ERROR: {
77
+ message: string;
78
+ stack?: string | null;
79
+ };
80
+ $EXIT: {
81
+ sessionId: string;
82
+ };
83
+ $PONG: {};
84
+ $PRESENCE_UPDATED: {
85
+ presence: JsonObject;
86
+ };
87
+ $REGISTERED: {
88
+ sessionId: string;
89
+ };
90
+ $STORAGE_RECEIVED: {
91
+ state: string;
92
+ };
93
+ $STORAGE_UPDATED: {
94
+ state: string;
95
+ };
96
+ };
97
+ interface EventMessage<TEvent extends string, TData extends JsonObject = {}> {
98
+ data: TData;
99
+ type: TEvent;
100
+ }
101
+ type EventRecord<TEvent extends string, TData extends JsonObject> = {
102
+ [key in `${TEvent}`]: TData;
103
+ };
104
+ type GetEventMessage<T extends EventRecord<string, any>, TEvent extends keyof T> = TEvent extends string ? EventMessage<TEvent, T[TEvent]> : never;
105
+ type InferEventMessage<TEvents extends EventRecord<string, any> = EventRecord<string, any>, TEvent extends keyof TEvents = keyof TEvents> = {
106
+ [P in TEvent]: P extends string ? Id<EventMessage<P, TEvents[P]>> : never;
107
+ }[TEvent];
108
+ type InferIOAuthorize<TIO extends IOLike> = TIO extends IOLike<infer IAuthorize> ? IAuthorize : never;
109
+ type InferIOAuthorizeRequired<TAuthorize extends IOAuthorize<any, any>> = TAuthorize extends IOAuthorize<any, infer IRequired> ? IRequired : never;
110
+ type InferIOAuthorizeUser<TAuthorize extends IOAuthorize<any, any>> = TAuthorize extends IOAuthorize<infer IUser, infer IRequired> ? IRequired extends true ? IUser : IUser | null : never;
111
+ type InferIOInput<TIO extends IOLike> = TIO extends IOLike<any, infer IInput> ? IInput : never;
112
+ type InferIOOutput<TIO extends IOLike> = TIO extends IOLike<any, any, infer IOutput> ? IOutput : never;
113
+ type InputZodLike<TData extends JsonObject> = {
114
+ _input: TData;
115
+ parse: (data: unknown) => TData;
116
+ };
117
+ interface IOAuthorize<TUser extends BaseUser = any, TRequired extends boolean = false> {
118
+ required: TRequired;
119
+ secret: string;
120
+ user: InputZodLike<TUser>;
121
+ }
122
+ type IOAuthorizeEventMessage<TIO extends IOLike> = InferIOAuthorizeRequired<InferIOAuthorize<TIO>> extends false ? IOAuthorizeOptionalEventMessage<TIO> : IOAuthorizeRequiredEventMessage<TIO>;
123
+ interface IOAuthorizeOptionalEventMessage<TIO extends IOLike> {
124
+ connectionId: string | null;
125
+ user: InferIOAuthorizeUser<InferIOAuthorize<TIO>> | null;
126
+ }
127
+ type IOAuthorizeRequiredEventMessage<TIO extends IOLike> = NonNilProps<IOAuthorizeOptionalEventMessage<TIO>, "connectionId" | "user">;
128
+ type IOEventMessage<TIO extends IOLike, TEvent extends keyof InferIOOutput<TIO> = keyof InferIOOutput<TIO>> = Id<{
129
+ room: string;
130
+ } & InferEventMessage<InferIOOutput<TIO>, TEvent> & (InferEventMessage<InferIOOutput<TIO>, TEvent>["type"] extends "$ERROR" ? IOAuthorizeOptionalEventMessage<TIO> : IOAuthorizeEventMessage<TIO>)>;
131
+ interface IOLike<TAuthorize extends IOAuthorize<any, any> = IOAuthorize<any, any>, TInput extends EventRecord<string, any> = {}, TOutput extends EventRecord<string, any> = {}> {
132
+ _authorize: TAuthorize | null;
133
+ _events: {
134
+ [P in keyof TInput]: P extends string ? {
135
+ resolver: (data: TInput[P], ...args: any[]) => MaybePromise<TOutput | void>;
136
+ } : never;
137
+ };
138
+ }
139
+
140
+ export { BaseClientEventRecord, BaseClientMessage, BaseIOAuthorize, BaseIOAuthorizeEventRecord, BaseIOEventRecord, BaseUser, Constructable, DeepPartial, DeepWriteable, EventMessage, EventRecord, GetEventMessage, IOAuthorize, IOAuthorizeEventMessage, IOAuthorizeOptionalEventMessage, IOAuthorizeRequiredEventMessage, IOEventMessage, IOLike, Id, InferEventMessage, InferIOAuthorize, InferIOAuthorizeRequired, InferIOAuthorizeUser, InferIOInput, InferIOOutput, InputZodLike, Json, JsonObject, JsonPrimitive, Maybe, MaybePromise, MaybeReadonlyArray, NonNilProps, OptionalProps, Spread, SpreadProperties };
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+
16
+ // src/index.ts
17
+ var src_exports = {};
18
+ module.exports = __toCommonJS(src_exports);
package/dist/index.mjs ADDED
File without changes
package/package.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "@pluv/types",
3
+ "version": "0.0.0",
4
+ "main": "./dist/index.js",
5
+ "types": "./dist/index.d.ts",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "devDependencies": {
10
+ "@pluv/tsconfig": "^0.0.0",
11
+ "eslint-config-pluv": "^0.0.0",
12
+ "tsup": "^6.5.0",
13
+ "typescript": "^4.9.4"
14
+ },
15
+ "scripts": {
16
+ "build": "tsup src/index.ts --format esm,cjs --dts",
17
+ "dev": "tsup src/index.ts --format esm,cjs --watch --dts",
18
+ "lint": "eslint src/**/*.ts* --fix",
19
+ "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist"
20
+ }
21
+ }
package/src/general.ts ADDED
@@ -0,0 +1,71 @@
1
+ export type Constructable = { new (...args: any[]): any };
2
+
3
+ export type Maybe<T> = T | null | undefined;
4
+ export type MaybePromise<T> = Promise<T> | T;
5
+ export type MaybeReadonlyArray<T> = T[] | readonly T[];
6
+
7
+ type OptionalPropertyNames<T> = {
8
+ [K in keyof T]-?: {} extends { [P in K]: T[K] } ? K : never;
9
+ }[keyof T];
10
+
11
+ export type SpreadProperties<L, R, K extends keyof L & keyof R> = {
12
+ [P in K]: L[P] | Exclude<R[P], undefined>;
13
+ };
14
+
15
+ export type Id<T> = T extends infer U
16
+ ? U extends Constructable
17
+ ? U
18
+ : { [K in keyof U]: U[K] }
19
+ : never;
20
+
21
+ type SpreadTwo<L, R> = Id<
22
+ Pick<L, Exclude<keyof L, keyof R>> &
23
+ Pick<R, Exclude<keyof R, OptionalPropertyNames<R>>> &
24
+ Pick<R, Exclude<OptionalPropertyNames<R>, keyof L>> &
25
+ SpreadProperties<L, R, OptionalPropertyNames<R> & keyof L>
26
+ >;
27
+
28
+ export type Spread<A extends readonly [...any]> = A extends [
29
+ infer L,
30
+ ...infer R
31
+ ]
32
+ ? SpreadTwo<L, Spread<R>>
33
+ : unknown;
34
+
35
+ export type DeepPartial<T> = {
36
+ [P in keyof T]?: T[P] extends Array<infer U>
37
+ ? Array<DeepPartial<U>>
38
+ : T[P] extends ReadonlyArray<infer U>
39
+ ? ReadonlyArray<DeepPartial<U>>
40
+ : DeepPartial<T[P]>;
41
+ };
42
+
43
+ export type DeepWriteable<T> = {
44
+ -readonly [P in keyof T]: DeepWriteable<T[P]>;
45
+ };
46
+
47
+ export type OptionalProps<
48
+ T extends Record<string, any>,
49
+ K extends keyof T = keyof T
50
+ > = Omit<T, K> & Partial<Pick<T, K>>;
51
+
52
+ export type NonNilProps<
53
+ T extends Record<string, any>,
54
+ K extends keyof T = keyof T
55
+ > = Omit<T, K> & { [P in K]-?: NonNullable<T[P]> };
56
+
57
+ export type JsonPrimitive = string | number | boolean | null;
58
+
59
+ export type Json =
60
+ | JsonPrimitive
61
+ | Json[]
62
+ | readonly Json[]
63
+ | { [key: string]: Json };
64
+
65
+ export type JsonObject = Record<string, Json>;
66
+
67
+ export type StringLiteral<T> = T extends string
68
+ ? string extends T
69
+ ? never
70
+ : T
71
+ : never;
package/src/index.ts ADDED
@@ -0,0 +1,40 @@
1
+ export type {
2
+ Constructable,
3
+ DeepPartial,
4
+ DeepWriteable,
5
+ Id,
6
+ Json,
7
+ JsonObject,
8
+ JsonPrimitive,
9
+ Maybe,
10
+ MaybePromise,
11
+ MaybeReadonlyArray,
12
+ NonNilProps,
13
+ OptionalProps,
14
+ Spread,
15
+ SpreadProperties,
16
+ } from "./general";
17
+ export type {
18
+ BaseUser,
19
+ BaseClientEventRecord,
20
+ BaseClientMessage,
21
+ BaseIOAuthorize,
22
+ BaseIOAuthorizeEventRecord,
23
+ BaseIOEventRecord,
24
+ EventMessage,
25
+ EventRecord,
26
+ GetEventMessage,
27
+ InferEventMessage,
28
+ InferIOAuthorize,
29
+ InferIOAuthorizeRequired,
30
+ InferIOAuthorizeUser,
31
+ InferIOInput,
32
+ InferIOOutput,
33
+ InputZodLike,
34
+ IOEventMessage,
35
+ IOAuthorize,
36
+ IOAuthorizeEventMessage,
37
+ IOAuthorizeOptionalEventMessage,
38
+ IOAuthorizeRequiredEventMessage,
39
+ IOLike,
40
+ } from "./pluv";
package/src/pluv.ts ADDED
@@ -0,0 +1,180 @@
1
+ import { Id, JsonObject, MaybePromise, NonNilProps } from "./general";
2
+
3
+ export type BaseUser = {
4
+ id: string;
5
+ };
6
+
7
+ export interface BaseClientEventRecord {
8
+ $GET_OTHERS: {};
9
+ $PING: {};
10
+ $UPDATE_PRESENCE: {
11
+ presence: JsonObject;
12
+ };
13
+ $UPDATE_STORAGE: {
14
+ origin: string | null;
15
+ update: string;
16
+ };
17
+ }
18
+
19
+ export type BaseClientMessage = InferEventMessage<BaseClientEventRecord>;
20
+
21
+ export interface BaseIOAuthorize {
22
+ required: false;
23
+ secret: string;
24
+ user: InputZodLike<BaseUser>;
25
+ }
26
+
27
+ export interface BaseIOAuthorizeEventRecord<
28
+ TAuthorize extends IOAuthorize<any, any>
29
+ > {
30
+ $OTHERS_RECEIVED: {
31
+ others: {
32
+ [connectionId: string]: {
33
+ connectionId: string;
34
+ presence: JsonObject | null;
35
+ room: string | null;
36
+ user: InferIOAuthorizeUser<TAuthorize>;
37
+ };
38
+ };
39
+ };
40
+ $USER_JOINED: {
41
+ connectionId: string;
42
+ user: NonNullable<InferIOAuthorizeUser<TAuthorize>>;
43
+ };
44
+ }
45
+
46
+ export type BaseIOEventRecord<TAuthorize extends IOAuthorize<any, any>> =
47
+ BaseIOAuthorizeEventRecord<TAuthorize> & {
48
+ $ERROR: {
49
+ message: string;
50
+ stack?: string | null;
51
+ };
52
+ $EXIT: {
53
+ sessionId: string;
54
+ };
55
+ $PONG: {};
56
+ $PRESENCE_UPDATED: {
57
+ presence: JsonObject;
58
+ };
59
+ $REGISTERED: {
60
+ sessionId: string;
61
+ };
62
+ $STORAGE_RECEIVED: {
63
+ state: string;
64
+ };
65
+ $STORAGE_UPDATED: {
66
+ state: string;
67
+ };
68
+ };
69
+
70
+ export interface EventMessage<
71
+ TEvent extends string,
72
+ TData extends JsonObject = {}
73
+ > {
74
+ data: TData;
75
+ type: TEvent;
76
+ }
77
+
78
+ export type EventRecord<TEvent extends string, TData extends JsonObject> = {
79
+ [key in `${TEvent}`]: TData;
80
+ };
81
+
82
+ export type GetEventMessage<
83
+ T extends EventRecord<string, any>,
84
+ TEvent extends keyof T
85
+ > = TEvent extends string ? EventMessage<TEvent, T[TEvent]> : never;
86
+
87
+ export type InferEventMessage<
88
+ TEvents extends EventRecord<string, any> = EventRecord<string, any>,
89
+ TEvent extends keyof TEvents = keyof TEvents
90
+ > = {
91
+ [P in TEvent]: P extends string ? Id<EventMessage<P, TEvents[P]>> : never;
92
+ }[TEvent];
93
+
94
+ export type InferIOAuthorize<TIO extends IOLike> = TIO extends IOLike<
95
+ infer IAuthorize
96
+ >
97
+ ? IAuthorize
98
+ : never;
99
+
100
+ export type InferIOAuthorizeRequired<TAuthorize extends IOAuthorize<any, any>> =
101
+ TAuthorize extends IOAuthorize<any, infer IRequired> ? IRequired : never;
102
+
103
+ export type InferIOAuthorizeUser<TAuthorize extends IOAuthorize<any, any>> =
104
+ TAuthorize extends IOAuthorize<infer IUser, infer IRequired>
105
+ ? IRequired extends true
106
+ ? IUser
107
+ : IUser | null
108
+ : never;
109
+
110
+ export type InferIOInput<TIO extends IOLike> = TIO extends IOLike<
111
+ any,
112
+ infer IInput
113
+ >
114
+ ? IInput
115
+ : never;
116
+
117
+ export type InferIOOutput<TIO extends IOLike> = TIO extends IOLike<
118
+ any,
119
+ any,
120
+ infer IOutput
121
+ >
122
+ ? IOutput
123
+ : never;
124
+
125
+ export type InputZodLike<TData extends JsonObject> = {
126
+ _input: TData;
127
+ parse: (data: unknown) => TData;
128
+ };
129
+
130
+ export interface IOAuthorize<
131
+ TUser extends BaseUser = any,
132
+ TRequired extends boolean = false
133
+ > {
134
+ required: TRequired;
135
+ secret: string;
136
+ user: InputZodLike<TUser>;
137
+ }
138
+
139
+ export type IOAuthorizeEventMessage<TIO extends IOLike> =
140
+ InferIOAuthorizeRequired<InferIOAuthorize<TIO>> extends false
141
+ ? IOAuthorizeOptionalEventMessage<TIO>
142
+ : IOAuthorizeRequiredEventMessage<TIO>;
143
+
144
+ export interface IOAuthorizeOptionalEventMessage<TIO extends IOLike> {
145
+ connectionId: string | null;
146
+ user: InferIOAuthorizeUser<InferIOAuthorize<TIO>> | null;
147
+ }
148
+
149
+ export type IOAuthorizeRequiredEventMessage<TIO extends IOLike> = NonNilProps<
150
+ IOAuthorizeOptionalEventMessage<TIO>,
151
+ "connectionId" | "user"
152
+ >;
153
+
154
+ export type IOEventMessage<
155
+ TIO extends IOLike,
156
+ TEvent extends keyof InferIOOutput<TIO> = keyof InferIOOutput<TIO>
157
+ > = Id<
158
+ { room: string } & InferEventMessage<InferIOOutput<TIO>, TEvent> &
159
+ (InferEventMessage<InferIOOutput<TIO>, TEvent>["type"] extends "$ERROR"
160
+ ? IOAuthorizeOptionalEventMessage<TIO>
161
+ : IOAuthorizeEventMessage<TIO>)
162
+ >;
163
+
164
+ export interface IOLike<
165
+ TAuthorize extends IOAuthorize<any, any> = IOAuthorize<any, any>,
166
+ TInput extends EventRecord<string, any> = {},
167
+ TOutput extends EventRecord<string, any> = {}
168
+ > {
169
+ _authorize: TAuthorize | null;
170
+ _events: {
171
+ [P in keyof TInput]: P extends string
172
+ ? {
173
+ resolver: (
174
+ data: TInput[P],
175
+ ...args: any[]
176
+ ) => MaybePromise<TOutput | void>;
177
+ }
178
+ : never;
179
+ };
180
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": "@pluv/tsconfig/library.json",
3
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
4
+ "exclude": ["node_modules"]
5
+ }