prostgles-types 4.0.310 → 4.0.312

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.
Files changed (37) hide show
  1. package/dist/JSONBSchemaValidation/getJSONBSchemaTSTypes.d.ts.map +1 -1
  2. package/dist/JSONBSchemaValidation/getJSONBSchemaTSTypes.js +2 -1
  3. package/dist/JSONBSchemaValidation/getJSONBSchemaTSTypes.js.map +1 -1
  4. package/dist/auditTable.d.ts +32 -0
  5. package/dist/auditTable.d.ts.map +1 -0
  6. package/dist/auditTable.js +33 -0
  7. package/dist/auditTable.js.map +1 -0
  8. package/dist/auth.d.ts +8 -0
  9. package/dist/auth.d.ts.map +1 -1
  10. package/dist/fileTable.d.ts +53 -0
  11. package/dist/fileTable.d.ts.map +1 -0
  12. package/dist/fileTable.js +39 -0
  13. package/dist/fileTable.js.map +1 -0
  14. package/dist/index.d.ts +4 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +4 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/index_umd.js +1 -1
  19. package/dist/jobControl.d.ts +2 -1
  20. package/dist/jobControl.d.ts.map +1 -1
  21. package/dist/jobTable.d.ts +149 -0
  22. package/dist/jobTable.d.ts.map +1 -0
  23. package/dist/jobTable.js +70 -0
  24. package/dist/jobTable.js.map +1 -0
  25. package/dist/tableRowFromColumnDefinitions.d.ts +79 -0
  26. package/dist/tableRowFromColumnDefinitions.d.ts.map +1 -0
  27. package/dist/tableRowFromColumnDefinitions.js +3 -0
  28. package/dist/tableRowFromColumnDefinitions.js.map +1 -0
  29. package/lib/JSONBSchemaValidation/getJSONBSchemaTSTypes.ts +2 -1
  30. package/lib/auditTable.ts +38 -0
  31. package/lib/auth.ts +11 -0
  32. package/lib/fileTable.ts +62 -0
  33. package/lib/index.ts +4 -0
  34. package/lib/jobControl.ts +3 -2
  35. package/lib/jobTable.ts +95 -0
  36. package/lib/tableRowFromColumnDefinitions.ts +220 -0
  37. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableRowFromColumnDefinitions.d.ts","sourceRoot":"","sources":["../lib/tableRowFromColumnDefinitions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=tableRowFromColumnDefinitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableRowFromColumnDefinitions.js","sourceRoot":"","sources":["../lib/tableRowFromColumnDefinitions.ts"],"names":[],"mappings":""}
@@ -44,9 +44,10 @@ const getLookupTSType = (tables: TableSchema[], fieldType: JSONB.Lookup): string
44
44
  return `${nullType}${postgresToTsType(udtName ?? "text")}${arrayType}`;
45
45
  }
46
46
 
47
+ /* Row lookups filter by supplied columns; a primary key alone is sufficient. */
47
48
  const rowType =
48
49
  !cols ? "any" : (
49
- `{ ${cols.map((column) => `${JSON.stringify(column.name)}: ${column.is_nullable ? "null | " : ""} ${postgresToTsType(column.udt_name)}; `).join(" ")} }`
50
+ `{ ${cols.map((column) => `${JSON.stringify(column.name)}?: ${column.is_nullable ? "null | " : ""} ${postgresToTsType(column.udt_name)}; `).join(" ")} }`
50
51
  );
51
52
  return `${nullType}${rowType}${arrayType}`;
52
53
  };
@@ -0,0 +1,38 @@
1
+ import type { TableRowFromColumnDefinitions } from "./tableRowFromColumnDefinitions";
2
+
3
+ export const AUDIT_TABLE_COLUMN_DEFINITIONS = {
4
+ id: "BIGSERIAL PRIMARY KEY",
5
+ created_at: "TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp()",
6
+ schema_name: "TEXT NOT NULL",
7
+ table_name: "TEXT NOT NULL",
8
+ operation: { enum: ["INSERT", "UPDATE", "DELETE"] },
9
+ old_id: "JSONB",
10
+ new_id: "JSONB",
11
+ old_row: "JSONB",
12
+ new_row: "JSONB",
13
+ actor: "JSONB",
14
+ db_context: {
15
+ jsonbSchema: {
16
+ type: {
17
+ transaction_id: "string",
18
+ transaction_started_at: "string",
19
+ statement_started_at: "string",
20
+ current_role: "string",
21
+ session_user: "string",
22
+ application_name: "string",
23
+ },
24
+ },
25
+ },
26
+ } as const;
27
+
28
+ export type AuditTableInsertRow = TableRowFromColumnDefinitions<
29
+ typeof AUDIT_TABLE_COLUMN_DEFINITIONS
30
+ >;
31
+ export type AuditTableRow = Required<AuditTableInsertRow>;
32
+ export const AUDIT_TABLE_COLUMN_NAMES = Object.fromEntries(
33
+ Object.keys(AUDIT_TABLE_COLUMN_DEFINITIONS).map((columnName) => [
34
+ columnName,
35
+ columnName,
36
+ ]),
37
+ ) as { [K in keyof AuditTableRow]: K };
38
+ export const AUDIT_TABLE_COLUMNS = Object.values(AUDIT_TABLE_COLUMN_NAMES);
package/lib/auth.ts CHANGED
@@ -55,6 +55,17 @@ export type AuthSocketSchema<U extends UserLike = UserLike> = {
55
55
  /**
56
56
  * Email registration methods enabled on the server
57
57
  */
58
+ signupWithEmail:
59
+ | {
60
+ minPasswordLength: number;
61
+ requirePassword: boolean;
62
+ requireInvitation: boolean;
63
+ url: string;
64
+ emailConfirmationRoute: string;
65
+ }
66
+ | undefined;
67
+
68
+ /** @deprecated Use signupWithEmail and its requireInvitation flag. */
58
69
  signupWithEmailAndPassword:
59
70
  | { minPasswordLength: number; url: string; emailConfirmationRoute: string }
60
71
  | undefined;
@@ -0,0 +1,62 @@
1
+ import type { TableRowFromColumnDefinitions } from "./tableRowFromColumnDefinitions";
2
+ import { omitKeys } from "./util";
3
+
4
+ export const FILE_TABLE_COLUMN_DEFINITIONS = {
5
+ id: `UUID PRIMARY KEY DEFAULT gen_random_uuid()`,
6
+ /* NULL for legacy objects stored under their file ID. */
7
+ storage_key: `UUID UNIQUE`,
8
+ extension: `TEXT NOT NULL DEFAULT ''`,
9
+ content_type: `TEXT NOT NULL DEFAULT ''`,
10
+ content_length: `BIGINT NOT NULL DEFAULT 0`,
11
+ etag: `TEXT NOT NULL DEFAULT ''`,
12
+ original_name: `TEXT NOT NULL`,
13
+ original_last_modified: `TIMESTAMPTZ`,
14
+ description: `TEXT`,
15
+ url: `TEXT NOT NULL DEFAULT ''`,
16
+ cloud_url: `TEXT`,
17
+ local_file_path: `TEXT`,
18
+ signed_url: `TEXT`,
19
+ signed_url_expires: `BIGINT`,
20
+ added: `TIMESTAMP NOT NULL DEFAULT NOW()`,
21
+ updated: `TIMESTAMP NOT NULL DEFAULT NOW()`,
22
+ deleted: `TIMESTAMPTZ`,
23
+ deleted_from_storage: `TIMESTAMPTZ`,
24
+ /* Actual bytes live in storage; this column only holds a placeholder. */
25
+ data: `BYTEA NOT NULL CHECK (data = decode('01', 'hex'))`,
26
+ } as const;
27
+
28
+ export const FILE_TABLE_VERSION_COLUMN_DEFINITIONS = {
29
+ version: `INTEGER NOT NULL DEFAULT 1`,
30
+ } as const;
31
+
32
+ export const FILE_VERSION_TABLE_COLUMN_DEFINITIONS = {
33
+ ...omitKeys(FILE_TABLE_COLUMN_DEFINITIONS, ["data"]),
34
+ storage_key: `UUID NOT NULL`,
35
+ /* The server adds the foreign key constraint. */
36
+ file_id: `UUID NOT NULL`,
37
+ version: `INTEGER NOT NULL`,
38
+ created: `TIMESTAMP NOT NULL DEFAULT NOW()`,
39
+ } as const;
40
+
41
+ export type FileTableInsertRow<Binary = ArrayBuffer | Uint8Array> =
42
+ TableRowFromColumnDefinitions<typeof FILE_TABLE_COLUMN_DEFINITIONS, Binary> &
43
+ Partial<
44
+ TableRowFromColumnDefinitions<
45
+ typeof FILE_TABLE_VERSION_COLUMN_DEFINITIONS
46
+ >
47
+ >;
48
+ export type FileTableRow<Binary = ArrayBuffer | Uint8Array> = Required<
49
+ TableRowFromColumnDefinitions<typeof FILE_TABLE_COLUMN_DEFINITIONS, Binary>
50
+ > &
51
+ Partial<
52
+ Required<
53
+ TableRowFromColumnDefinitions<
54
+ typeof FILE_TABLE_VERSION_COLUMN_DEFINITIONS
55
+ >
56
+ >
57
+ >;
58
+
59
+ export type FileVersionTableInsertRow = TableRowFromColumnDefinitions<
60
+ typeof FILE_VERSION_TABLE_COLUMN_DEFINITIONS
61
+ >;
62
+ export type FileVersionTableRow = Required<FileVersionTableInsertRow>;
package/lib/index.ts CHANGED
@@ -1731,7 +1731,11 @@ export const getPossibleNestedInsert = (
1731
1731
  export * from "./auth";
1732
1732
  export * from "./authContract";
1733
1733
  export * from "./requestResponse";
1734
+ export * from "./auditTable";
1735
+ export * from "./jobTable";
1736
+ export * from "./tableRowFromColumnDefinitions";
1734
1737
  export { CONTENT_TYPE_TO_EXT } from "./files";
1738
+ export * from "./fileTable";
1735
1739
  export type {
1736
1740
  ALLOWED_CONTENT_TYPE,
1737
1741
  ALLOWED_EXTENSION,
package/lib/jobControl.ts CHANGED
@@ -1,5 +1,6 @@
1
- export type JobStatus =
2
- "pending" | "running" | "succeeded" | "failed" | "cancelled";
1
+ import type { JobRecord } from "./jobTable";
2
+
3
+ export type JobStatus = JobRecord["status"];
3
4
 
4
5
  /** Start new work or retry failed/cancelled work; rerun succeeded work; cancel pending/running work. */
5
6
  export type JobControlOperation = "startOrRetry" | "rerun" | "cancel";
@@ -0,0 +1,95 @@
1
+ import type {
2
+ ManagedTableSchema,
3
+ TableInsertRowFromTableConfig,
4
+ TableRowFromTableConfig,
5
+ } from "./tableRowFromColumnDefinitions";
6
+
7
+ const shared = {
8
+ target_table: {},
9
+ user_id: {},
10
+ occurrence: {},
11
+ checkpoint: {},
12
+ progress_message: {},
13
+ progress_numeric: {},
14
+ backoff: { enum: ["fixed", "exponential"] },
15
+ reason: { enum: ["trigger", "rerun"] },
16
+ } as const;
17
+
18
+ export const jobTableSchema = {
19
+ columns: {
20
+ id: "UUID PRIMARY KEY",
21
+ job_name: "TEXT NOT NULL",
22
+ target_table: "TEXT",
23
+ target_row_pkey: "JSONB NOT NULL",
24
+ params: "JSONB NOT NULL",
25
+ user_id: "TEXT",
26
+ /**
27
+ * Scheduled cron time, rounded to a minute (five fields) or second (six fields).
28
+ * Together with job_name, prevents duplicate scheduling across workers and restarts.
29
+ * Null for row-triggered jobs and manual reruns.
30
+ */
31
+ occurrence: "TIMESTAMPTZ",
32
+ reason: "TEXT NOT NULL DEFAULT 'trigger'",
33
+ status: "TEXT NOT NULL DEFAULT 'pending'",
34
+ attempts: "INTEGER NOT NULL DEFAULT 0",
35
+ max_attempts: "INTEGER NOT NULL",
36
+ delay_ms: "DOUBLE PRECISION NOT NULL",
37
+ backoff: "TEXT NOT NULL",
38
+ cancel_requested: "BOOLEAN NOT NULL DEFAULT FALSE",
39
+ checkpoint: "JSONB",
40
+ has_checkpoint: "BOOLEAN NOT NULL DEFAULT FALSE",
41
+ progress_message: "TEXT",
42
+ progress_numeric: {
43
+ nullable: true,
44
+ jsonbSchema: { type: { done: "number", total: "number" } },
45
+ },
46
+ error: "JSONB",
47
+ run_at: "TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp()",
48
+ lease_token: "UUID",
49
+ locked_until: "TIMESTAMPTZ",
50
+ created_at: "TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp()",
51
+ finished_at: "TIMESTAMPTZ",
52
+ },
53
+ check: {
54
+ $or: [
55
+ { ...shared, status: "pending", error: {} },
56
+ {
57
+ ...shared,
58
+ status: "running",
59
+ error: {},
60
+ lease_token: { $ne: null },
61
+ locked_until: { $ne: null },
62
+ },
63
+ { ...shared, status: "succeeded", finished_at: { $ne: null } },
64
+ {
65
+ ...shared,
66
+ status: "failed",
67
+ error: { $ne: null },
68
+ finished_at: { $ne: null },
69
+ },
70
+ { ...shared, status: "cancelled", error: {}, finished_at: { $ne: null } },
71
+ ],
72
+ },
73
+ } as const satisfies ManagedTableSchema;
74
+
75
+ export type JobValue =
76
+ | null
77
+ | string
78
+ | number
79
+ | boolean
80
+ | readonly JobValue[]
81
+ | { readonly [key: string]: JobValue };
82
+ type JobValues = {
83
+ target_row_pkey: Record<string, JobValue>;
84
+ params: Record<string, JobValue>;
85
+ checkpoint: JobValue | null;
86
+ error: JobValue;
87
+ };
88
+ export type JobRecord = TableRowFromTableConfig<
89
+ typeof jobTableSchema,
90
+ JobValues
91
+ >;
92
+ export type JobInsertRecord = TableInsertRowFromTableConfig<
93
+ typeof jobTableSchema,
94
+ JobValues
95
+ >;
@@ -0,0 +1,220 @@
1
+ import type { JSONB } from "./JSONBSchemaValidation/JSONBSchema";
2
+
3
+ export type TableCheckValue = string | number | boolean | null;
4
+ export type TableCheckBranch = Record<
5
+ string,
6
+ | TableCheckValue
7
+ | { enum: readonly TableCheckValue[] }
8
+ | { $ne: null }
9
+ | Record<string, never>
10
+ >;
11
+ export type TableCheck = { $or: readonly TableCheckBranch[] };
12
+
13
+ export type ManagedTableColumnDefinition =
14
+ | string
15
+ | { enum: readonly (string | number)[]; nullable?: boolean }
16
+ | { jsonbSchema: JSONB.JSONBSchema; nullable?: boolean };
17
+
18
+ export type ManagedTableSchema = {
19
+ columns: Record<string, ManagedTableColumnDefinition>;
20
+ check?: TableCheck;
21
+ };
22
+
23
+ /** Row types for the column definitions used by managed tables. */
24
+ export type TableRowFromColumnDefinitions<
25
+ T extends Record<string, ManagedTableColumnDefinition>,
26
+ Binary = ArrayBuffer | Uint8Array,
27
+ > = InsertRow<
28
+ {
29
+ [K in keyof T]: T[K] extends string ? NormalizeSQL<Uppercase<T[K]>> : T[K];
30
+ },
31
+ Binary
32
+ >;
33
+
34
+ /** Selected managed rows, narrowed by the same CHECK branches as the generated schema. */
35
+ export type TableRowFromTableConfig<
36
+ T extends ManagedTableSchema,
37
+ ValueTypes extends Partial<Record<keyof T["columns"], unknown>> = {},
38
+ Binary = ArrayBuffer | Uint8Array,
39
+ > = CheckedRow<
40
+ {
41
+ [K in keyof T["columns"]]: K extends keyof ValueTypes ? ValueTypes[K]
42
+ : TableRowFromColumnDefinitions<T["columns"], Binary> extends infer Row ?
43
+ K extends keyof Row ?
44
+ Required<Row>[K]
45
+ : never
46
+ : never;
47
+ },
48
+ T extends (
49
+ { check: { $or: readonly (infer Branch extends TableCheckBranch)[] } }
50
+ ) ?
51
+ Branch
52
+ : undefined
53
+ >;
54
+
55
+ /** Insert rows may omit nullable columns and columns supplied by database defaults. */
56
+ export type TableInsertRowFromTableConfig<
57
+ T extends ManagedTableSchema,
58
+ ValueTypes extends Partial<Record<keyof T["columns"], unknown>> = {},
59
+ Binary = ArrayBuffer | Uint8Array,
60
+ > = CheckedInsertRow<
61
+ TableRowFromTableConfig<T, ValueTypes, Binary>,
62
+ GeneratedColumnNames<{
63
+ [K in keyof T["columns"]]: T["columns"][K] extends string ?
64
+ NormalizeSQL<Uppercase<T["columns"][K]>>
65
+ : T["columns"][K];
66
+ }>
67
+ >;
68
+
69
+ type CheckedInsertRow<Row, Defaults> =
70
+ Row extends unknown ?
71
+ Omit<Row, OptionalInsertKeys<Row, Defaults>> &
72
+ Partial<Pick<Row, OptionalInsertKeys<Row, Defaults>>>
73
+ : never;
74
+
75
+ type OptionalInsertKeys<Row, Defaults> = {
76
+ [K in keyof Row]: K extends Defaults ? K
77
+ : null extends Row[K] ? K
78
+ : never;
79
+ }[keyof Row];
80
+
81
+ type CheckedRow<Row, Branch> =
82
+ Branch extends TableCheckBranch ?
83
+ {
84
+ [K in keyof Row]: K extends keyof Branch ?
85
+ Branch[K] extends { $ne: null } ? NonNullable<Row[K]>
86
+ : Branch[K] extends { enum: readonly (infer V)[] } ? V
87
+ : Branch[K] extends Record<string, never> ? Row[K]
88
+ : Branch[K]
89
+ : null extends Row[K] ? null
90
+ : Row[K];
91
+ }
92
+ : Row;
93
+
94
+ type InsertRow<
95
+ T extends Record<string, ManagedTableColumnDefinition>,
96
+ Binary,
97
+ > = Omit<TableRow<T, Binary>, GeneratedColumnNames<T>> &
98
+ Partial<Pick<TableRow<T, Binary>, GeneratedColumnNames<T>>>;
99
+
100
+ type TableRow<
101
+ T extends Record<string, ManagedTableColumnDefinition>,
102
+ Binary,
103
+ > = {
104
+ [K in keyof T]: T[K] extends (
105
+ {
106
+ jsonbSchema: infer S extends JSONB.JSONBSchema;
107
+ }
108
+ ) ?
109
+ JSONB.GetType<S> | (T[K] extends { nullable: true } ? null : never)
110
+ : T[K] extends { enum: readonly (infer V)[] } ?
111
+ V | (T[K] extends { nullable: true } ? null : never)
112
+ : | ColumnValue<T[K], Binary>
113
+ | (T[K] extends string ?
114
+ ColumnIsRequired<T[K]> extends true ?
115
+ never
116
+ : null
117
+ : never);
118
+ };
119
+
120
+ type ColumnIsRequired<T extends string> =
121
+ ReadType<T>[0] extends SerialType ? true
122
+ : ` ${Unquoted<T>} ` extends (
123
+
124
+ | `${string} NOT NULL ${string}`
125
+ | `${string} PRIMARY KEY ${string}`
126
+ | `${string} GENERATED ${string} AS IDENTITY ${string}`
127
+ ) ?
128
+ true
129
+ : false;
130
+
131
+ type GeneratedColumnNames<
132
+ T extends Record<string, ManagedTableColumnDefinition>,
133
+ > = {
134
+ [K in keyof T]: T[K] extends string ?
135
+ ReadType<T[K]>[0] extends SerialType ? K
136
+ : ` ${Unquoted<T[K]>} ` extends (
137
+ `${string} DEFAULT ${string}` | `${string} GENERATED ${string}`
138
+ ) ?
139
+ K
140
+ : never
141
+ : never;
142
+ }[keyof T];
143
+
144
+ type SerialType =
145
+ "SMALLSERIAL" | "SERIAL2" | "SERIAL" | "SERIAL4" | "BIGSERIAL" | "SERIAL8";
146
+
147
+ type ColumnValue<T, Binary> =
148
+ T extends string ?
149
+ T extends `DOUBLE PRECISION${infer Rest}` ?
150
+ ColumnValue<`FLOAT8${Rest}`, Binary>
151
+ : ReadType<T> extends (
152
+ [infer Name extends string, infer Rest extends string]
153
+ ) ?
154
+ ArrayValue<ScalarValue<Name, Binary>, Trim<Rest>>
155
+ : never
156
+ : never;
157
+
158
+ type ScalarValue<T, Binary> =
159
+ T extends "BYTEA" ? Binary
160
+ : T extends "JSON" | "JSONB" ? Record<string, unknown>
161
+ : T extends "BOOL" | "BOOLEAN" ? boolean
162
+ : T extends (
163
+
164
+ | "SMALLINT"
165
+ | "INT2"
166
+ | "INT"
167
+ | "INTEGER"
168
+ | "INT4"
169
+ | "SMALLSERIAL"
170
+ | "SERIAL2"
171
+ | "SERIAL"
172
+ | "SERIAL4"
173
+ | "REAL"
174
+ | "FLOAT"
175
+ | "FLOAT4"
176
+ | "FLOAT8"
177
+ ) ?
178
+ number
179
+ : T extends (
180
+ "BIGINT" | "INT8" | "BIGSERIAL" | "SERIAL8" | "NUMERIC" | "DECIMAL" | "DEC"
181
+ ) ?
182
+ string | number
183
+ : string;
184
+
185
+ /** Only consume modifiers/array dimensions immediately following the type. */
186
+ type ArrayValue<Value, Rest extends string> =
187
+ Rest extends `(${string})${infer Tail}` ? ArrayValue<Value, Trim<Tail>>
188
+ : Rest extends `[${string}]${infer Tail}` ?
189
+ ArrayValue<(Value | null)[], Trim<Tail>>
190
+ : Rest extends "ARRAY" | `ARRAY ${string}` | `ARRAY[${string}` ?
191
+ Rest extends `ARRAY${infer Tail}` ?
192
+ Trim<Tail> extends `[${string}` ?
193
+ ArrayValue<Value, Trim<Tail>>
194
+ : (Value | null)[]
195
+ : never
196
+ : Value;
197
+
198
+ type ReadType<T extends string, Name extends string = ""> =
199
+ T extends `${" " | "(" | "["}${string}` ? [Name, T]
200
+ : T extends `${infer Char}${infer Rest}` ? ReadType<Rest, `${Name}${Char}`>
201
+ : [Name, ""];
202
+
203
+ type Trim<T extends string> =
204
+ T extends ` ${infer Rest}` ? Trim<Rest>
205
+ : T extends `${infer Rest} ` ? Trim<Rest>
206
+ : T;
207
+
208
+ type NormalizeSQL<T extends string> =
209
+ T extends `${infer Start}\n${infer End}` ? NormalizeSQL<`${Start} ${End}`>
210
+ : T extends `${infer Start}\r${infer End}` ? NormalizeSQL<`${Start} ${End}`>
211
+ : T extends `${infer Start}\t${infer End}` ? NormalizeSQL<`${Start} ${End}`>
212
+ : T extends `${infer Start} ${infer End}` ? NormalizeSQL<`${Start} ${End}`>
213
+ : Trim<T>;
214
+
215
+ /** Quoted values and identifiers do not declare defaults or constraints. */
216
+ type Unquoted<T extends string> =
217
+ T extends `${infer Start}'${string}'${infer End}` ? Unquoted<`${Start}${End}`>
218
+ : T extends `${infer Start}"${string}"${infer End}` ?
219
+ Unquoted<`${Start}${End}`>
220
+ : T;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-types",
3
- "version": "4.0.310",
3
+ "version": "4.0.312",
4
4
  "description": "",
5
5
  "main": "dist/index_umd.js",
6
6
  "types": "dist/index.d.ts",