kysely 0.14.0 → 0.14.1
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/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/parser/reference-parser.d.ts +2 -2
- package/dist/cjs/parser/select-parser.d.ts +2 -2
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +3 -1
- package/dist/cjs/util/type-utils.d.ts +11 -7
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/parser/reference-parser.d.ts +2 -2
- package/dist/esm/parser/select-parser.d.ts +2 -2
- package/dist/esm/query-builder/on-conflict-builder.d.ts +3 -1
- package/dist/esm/util/type-utils.d.ts +11 -7
- package/package.json +1 -1
package/dist/cjs/index.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export * from './query-builder/function-builder.js';
|
|
|
15
15
|
export * from './query-builder/insert-result.js';
|
|
16
16
|
export * from './query-builder/delete-result.js';
|
|
17
17
|
export * from './query-builder/update-result.js';
|
|
18
|
+
export * from './query-builder/on-conflict-builder.js';
|
|
18
19
|
export * from './raw-builder/raw-builder.js';
|
|
19
20
|
export * from './query-executor/query-executor.js';
|
|
20
21
|
export * from './query-executor/default-query-executor.js';
|
package/dist/cjs/index.js
CHANGED
|
@@ -27,6 +27,7 @@ __exportStar(require("./query-builder/function-builder.js"), exports);
|
|
|
27
27
|
__exportStar(require("./query-builder/insert-result.js"), exports);
|
|
28
28
|
__exportStar(require("./query-builder/delete-result.js"), exports);
|
|
29
29
|
__exportStar(require("./query-builder/update-result.js"), exports);
|
|
30
|
+
__exportStar(require("./query-builder/on-conflict-builder.js"), exports);
|
|
30
31
|
__exportStar(require("./raw-builder/raw-builder.js"), exports);
|
|
31
32
|
__exportStar(require("./query-executor/query-executor.js"), exports);
|
|
32
33
|
__exportStar(require("./query-executor/default-query-executor.js"), exports);
|
|
@@ -3,7 +3,7 @@ import { ColumnNode } from '../operation-node/column-node.js';
|
|
|
3
3
|
import { ReferenceExpressionNode } from '../operation-node/operation-node-utils.js';
|
|
4
4
|
import { ReferenceNode } from '../operation-node/reference-node.js';
|
|
5
5
|
import { PrimitiveValue } from '../util/object-utils.js';
|
|
6
|
-
import { AnyColumn, AnyColumnWithTable,
|
|
6
|
+
import { AnyColumn, AnyColumnWithTable, ExtractColumnType, ValueType } from '../util/type-utils.js';
|
|
7
7
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
8
8
|
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
9
9
|
import { ParseContext } from './parse-context.js';
|
|
@@ -13,7 +13,7 @@ export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReferen
|
|
|
13
13
|
export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
|
|
14
14
|
export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
|
|
15
15
|
export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? ExtractTypeFromStringReference<DB, TB, RE> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => SelectQueryBuilder<any, any, infer O> ? ValueType<O> : PrimitiveValue;
|
|
16
|
-
declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string
|
|
16
|
+
declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string> = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, RE> : PrimitiveValue;
|
|
17
17
|
export declare function parseReferenceExpressionOrList(ctx: ParseContext, arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
|
|
18
18
|
export declare function parseReferenceExpression(ctx: ParseContext, exp: ReferenceExpression<any, any>): ReferenceExpressionNode;
|
|
19
19
|
export declare function parseStringReference(ref: string): ColumnNode | ReferenceNode;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
|
|
2
2
|
import { AliasedQueryBuilder, SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
3
3
|
import { SelectionNode } from '../operation-node/selection-node.js';
|
|
4
|
-
import { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, RowType, ValueType } from '../util/type-utils.js';
|
|
4
|
+
import { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, ExtractColumnType, RowType, ValueType } from '../util/type-utils.js';
|
|
5
5
|
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
6
6
|
import { ParseContext } from './parse-context.js';
|
|
7
7
|
import { AliasedComplexExpression } from './complex-expression-parser.js';
|
|
@@ -22,7 +22,7 @@ export declare type Selection<DB, TB extends keyof DB, SE> = {
|
|
|
22
22
|
declare type ExtractAliasFromSelectExpression<SE> = SE extends string ? ExtractAliasFromStringSelectExpression<SE> : SE extends AliasedRawBuilder<any, infer RA> ? RA : SE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : SE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : SE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : SE extends DynamicReferenceBuilder<infer RA> ? ExtractAliasFromStringSelectExpression<RA> : never;
|
|
23
23
|
declare type ExtractAliasFromStringSelectExpression<SE extends string> = SE extends `${string}.${string}.${string} as ${infer A}` ? A : SE extends `${string}.${string} as ${infer A}` ? A : SE extends `${string} as ${infer A}` ? A : SE extends `${string}.${string}.${infer C}` ? C : SE extends `${string}.${infer C}` ? C : SE;
|
|
24
24
|
declare type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, SE, A extends keyof any> = SE extends string ? ExtractTypeFromStringSelectExpression<DB, TB, SE, A> : SE extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : SE extends (qb: any) => AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : SE extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends DynamicReferenceBuilder<infer RA> ? A extends ExtractAliasFromStringSelectExpression<RA> ? ExtractTypeFromStringSelectExpression<DB, TB, RA, A> | undefined : never : never;
|
|
25
|
-
declare type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, SE extends string, A extends keyof any
|
|
25
|
+
declare type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, SE extends string, A extends keyof any> = SE extends `${infer SC}.${infer T}.${infer C} as ${infer RA}` ? RA extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C} as ${infer RA}` ? RA extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends `${infer C} as ${infer RA}` ? RA extends A ? C extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, C> : never : never : SE extends `${infer SC}.${infer T}.${infer C}` ? C extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C}` ? C extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends A ? SE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, SE> : never : never;
|
|
26
26
|
export declare function parseSelectExpressionOrList(ctx: ParseContext, selection: SelectExpressionOrList<any, any>): SelectionNode[];
|
|
27
27
|
export declare function parseSelectAll(table?: string | string[]): SelectionNode[];
|
|
28
28
|
export {};
|
|
@@ -377,7 +377,9 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
|
|
|
377
377
|
* do update set "first_name" = $3
|
|
378
378
|
* ```
|
|
379
379
|
*/
|
|
380
|
-
doUpdateSet(updates: MutationObject<DB, TB>): OnConflictUpdateBuilder<
|
|
380
|
+
doUpdateSet(updates: MutationObject<DB, TB>): OnConflictUpdateBuilder<{
|
|
381
|
+
[K in keyof DB | 'excluded']: K extends keyof DB ? DB[K] : DB[TB];
|
|
382
|
+
}, TB | 'excluded'>;
|
|
381
383
|
}
|
|
382
384
|
export interface OnConflictBuilderProps {
|
|
383
385
|
readonly onConflictNode: OnConflictNode;
|
|
@@ -39,12 +39,11 @@ export declare type ValueType<T> = T[keyof T];
|
|
|
39
39
|
* // Row == Person & Movie
|
|
40
40
|
* ```
|
|
41
41
|
*/
|
|
42
|
-
export declare type RowType<DB, TB extends keyof DB> =
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
42
|
+
export declare type RowType<DB, TB extends keyof DB> = {
|
|
43
|
+
[C in AnyColumn<DB, TB>]: {
|
|
44
|
+
[T in TB]: C extends keyof DB[T] ? DB[T][C] : never;
|
|
45
|
+
}[TB];
|
|
46
|
+
};
|
|
48
47
|
/**
|
|
49
48
|
* Given a database type and a union of table names in that db, returns
|
|
50
49
|
* a union type with all possible column names.
|
|
@@ -79,6 +78,12 @@ declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) e
|
|
|
79
78
|
export declare type AnyColumn<DB, TB extends keyof DB> = {
|
|
80
79
|
[T in TB]: keyof DB[T];
|
|
81
80
|
}[TB] & string;
|
|
81
|
+
/**
|
|
82
|
+
* Extracts a column type.
|
|
83
|
+
*/
|
|
84
|
+
export declare type ExtractColumnType<DB, TB extends keyof DB, C> = {
|
|
85
|
+
[T in TB]: C extends keyof DB[T] ? DB[T][C] : never;
|
|
86
|
+
}[TB];
|
|
82
87
|
/**
|
|
83
88
|
* Given a database type and a union of table names in that db, returns
|
|
84
89
|
* a union type with all possible `table`.`column` combinations.
|
|
@@ -146,4 +151,3 @@ export declare type UnknownRow = Record<string, unknown>;
|
|
|
146
151
|
export declare type Nullable<T> = {
|
|
147
152
|
[P in keyof T]: T[P] | null;
|
|
148
153
|
};
|
|
149
|
-
export {};
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export * from './query-builder/function-builder.js';
|
|
|
15
15
|
export * from './query-builder/insert-result.js';
|
|
16
16
|
export * from './query-builder/delete-result.js';
|
|
17
17
|
export * from './query-builder/update-result.js';
|
|
18
|
+
export * from './query-builder/on-conflict-builder.js';
|
|
18
19
|
export * from './raw-builder/raw-builder.js';
|
|
19
20
|
export * from './query-executor/query-executor.js';
|
|
20
21
|
export * from './query-executor/default-query-executor.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -15,6 +15,7 @@ export * from './query-builder/function-builder.js';
|
|
|
15
15
|
export * from './query-builder/insert-result.js';
|
|
16
16
|
export * from './query-builder/delete-result.js';
|
|
17
17
|
export * from './query-builder/update-result.js';
|
|
18
|
+
export * from './query-builder/on-conflict-builder.js';
|
|
18
19
|
export * from './raw-builder/raw-builder.js';
|
|
19
20
|
export * from './query-executor/query-executor.js';
|
|
20
21
|
export * from './query-executor/default-query-executor.js';
|
|
@@ -3,7 +3,7 @@ import { ColumnNode } from '../operation-node/column-node.js';
|
|
|
3
3
|
import { ReferenceExpressionNode } from '../operation-node/operation-node-utils.js';
|
|
4
4
|
import { ReferenceNode } from '../operation-node/reference-node.js';
|
|
5
5
|
import { PrimitiveValue } from '../util/object-utils.js';
|
|
6
|
-
import { AnyColumn, AnyColumnWithTable,
|
|
6
|
+
import { AnyColumn, AnyColumnWithTable, ExtractColumnType, ValueType } from '../util/type-utils.js';
|
|
7
7
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
8
8
|
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
9
9
|
import { ParseContext } from './parse-context.js';
|
|
@@ -13,7 +13,7 @@ export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReferen
|
|
|
13
13
|
export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
|
|
14
14
|
export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
|
|
15
15
|
export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? ExtractTypeFromStringReference<DB, TB, RE> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => SelectQueryBuilder<any, any, infer O> ? ValueType<O> : PrimitiveValue;
|
|
16
|
-
declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string
|
|
16
|
+
declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string> = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, RE> : PrimitiveValue;
|
|
17
17
|
export declare function parseReferenceExpressionOrList(ctx: ParseContext, arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
|
|
18
18
|
export declare function parseReferenceExpression(ctx: ParseContext, exp: ReferenceExpression<any, any>): ReferenceExpressionNode;
|
|
19
19
|
export declare function parseStringReference(ref: string): ColumnNode | ReferenceNode;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
|
|
2
2
|
import { AliasedQueryBuilder, SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
3
3
|
import { SelectionNode } from '../operation-node/selection-node.js';
|
|
4
|
-
import { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, RowType, ValueType } from '../util/type-utils.js';
|
|
4
|
+
import { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, ExtractColumnType, RowType, ValueType } from '../util/type-utils.js';
|
|
5
5
|
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
6
6
|
import { ParseContext } from './parse-context.js';
|
|
7
7
|
import { AliasedComplexExpression } from './complex-expression-parser.js';
|
|
@@ -22,7 +22,7 @@ export declare type Selection<DB, TB extends keyof DB, SE> = {
|
|
|
22
22
|
declare type ExtractAliasFromSelectExpression<SE> = SE extends string ? ExtractAliasFromStringSelectExpression<SE> : SE extends AliasedRawBuilder<any, infer RA> ? RA : SE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : SE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : SE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : SE extends DynamicReferenceBuilder<infer RA> ? ExtractAliasFromStringSelectExpression<RA> : never;
|
|
23
23
|
declare type ExtractAliasFromStringSelectExpression<SE extends string> = SE extends `${string}.${string}.${string} as ${infer A}` ? A : SE extends `${string}.${string} as ${infer A}` ? A : SE extends `${string} as ${infer A}` ? A : SE extends `${string}.${string}.${infer C}` ? C : SE extends `${string}.${infer C}` ? C : SE;
|
|
24
24
|
declare type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, SE, A extends keyof any> = SE extends string ? ExtractTypeFromStringSelectExpression<DB, TB, SE, A> : SE extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : SE extends (qb: any) => AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : SE extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends DynamicReferenceBuilder<infer RA> ? A extends ExtractAliasFromStringSelectExpression<RA> ? ExtractTypeFromStringSelectExpression<DB, TB, RA, A> | undefined : never : never;
|
|
25
|
-
declare type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, SE extends string, A extends keyof any
|
|
25
|
+
declare type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, SE extends string, A extends keyof any> = SE extends `${infer SC}.${infer T}.${infer C} as ${infer RA}` ? RA extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C} as ${infer RA}` ? RA extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends `${infer C} as ${infer RA}` ? RA extends A ? C extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, C> : never : never : SE extends `${infer SC}.${infer T}.${infer C}` ? C extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C}` ? C extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends A ? SE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, SE> : never : never;
|
|
26
26
|
export declare function parseSelectExpressionOrList(ctx: ParseContext, selection: SelectExpressionOrList<any, any>): SelectionNode[];
|
|
27
27
|
export declare function parseSelectAll(table?: string | string[]): SelectionNode[];
|
|
28
28
|
export {};
|
|
@@ -377,7 +377,9 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
|
|
|
377
377
|
* do update set "first_name" = $3
|
|
378
378
|
* ```
|
|
379
379
|
*/
|
|
380
|
-
doUpdateSet(updates: MutationObject<DB, TB>): OnConflictUpdateBuilder<
|
|
380
|
+
doUpdateSet(updates: MutationObject<DB, TB>): OnConflictUpdateBuilder<{
|
|
381
|
+
[K in keyof DB | 'excluded']: K extends keyof DB ? DB[K] : DB[TB];
|
|
382
|
+
}, TB | 'excluded'>;
|
|
381
383
|
}
|
|
382
384
|
export interface OnConflictBuilderProps {
|
|
383
385
|
readonly onConflictNode: OnConflictNode;
|
|
@@ -39,12 +39,11 @@ export declare type ValueType<T> = T[keyof T];
|
|
|
39
39
|
* // Row == Person & Movie
|
|
40
40
|
* ```
|
|
41
41
|
*/
|
|
42
|
-
export declare type RowType<DB, TB extends keyof DB> =
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
42
|
+
export declare type RowType<DB, TB extends keyof DB> = {
|
|
43
|
+
[C in AnyColumn<DB, TB>]: {
|
|
44
|
+
[T in TB]: C extends keyof DB[T] ? DB[T][C] : never;
|
|
45
|
+
}[TB];
|
|
46
|
+
};
|
|
48
47
|
/**
|
|
49
48
|
* Given a database type and a union of table names in that db, returns
|
|
50
49
|
* a union type with all possible column names.
|
|
@@ -79,6 +78,12 @@ declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) e
|
|
|
79
78
|
export declare type AnyColumn<DB, TB extends keyof DB> = {
|
|
80
79
|
[T in TB]: keyof DB[T];
|
|
81
80
|
}[TB] & string;
|
|
81
|
+
/**
|
|
82
|
+
* Extracts a column type.
|
|
83
|
+
*/
|
|
84
|
+
export declare type ExtractColumnType<DB, TB extends keyof DB, C> = {
|
|
85
|
+
[T in TB]: C extends keyof DB[T] ? DB[T][C] : never;
|
|
86
|
+
}[TB];
|
|
82
87
|
/**
|
|
83
88
|
* Given a database type and a union of table names in that db, returns
|
|
84
89
|
* a union type with all possible `table`.`column` combinations.
|
|
@@ -146,4 +151,3 @@ export declare type UnknownRow = Record<string, unknown>;
|
|
|
146
151
|
export declare type Nullable<T> = {
|
|
147
152
|
[P in keyof T]: T[P] | null;
|
|
148
153
|
};
|
|
149
|
-
export {};
|