@decaf-ts/for-typeorm 0.0.6
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/LICENSE.md +21 -0
- package/README.md +93 -0
- package/dist/for-typeorm.cjs +2553 -0
- package/dist/for-typeorm.esm.cjs +2538 -0
- package/lib/TypeORMAdapter.cjs +1129 -0
- package/lib/TypeORMAdapter.d.ts +221 -0
- package/lib/TypeORMDispatch.cjs +134 -0
- package/lib/TypeORMDispatch.d.ts +87 -0
- package/lib/TypeORMEventSubscriber.cjs +96 -0
- package/lib/TypeORMEventSubscriber.d.ts +56 -0
- package/lib/TypeORMRepository.cjs +209 -0
- package/lib/TypeORMRepository.d.ts +125 -0
- package/lib/constants.cjs +43 -0
- package/lib/constants.d.ts +39 -0
- package/lib/errors.cjs +28 -0
- package/lib/errors.d.ts +21 -0
- package/lib/esm/TypeORMAdapter.d.ts +221 -0
- package/lib/esm/TypeORMAdapter.js +1124 -0
- package/lib/esm/TypeORMDispatch.d.ts +87 -0
- package/lib/esm/TypeORMDispatch.js +130 -0
- package/lib/esm/TypeORMEventSubscriber.d.ts +56 -0
- package/lib/esm/TypeORMEventSubscriber.js +93 -0
- package/lib/esm/TypeORMRepository.d.ts +125 -0
- package/lib/esm/TypeORMRepository.js +206 -0
- package/lib/esm/constants.d.ts +39 -0
- package/lib/esm/constants.js +40 -0
- package/lib/esm/errors.d.ts +21 -0
- package/lib/esm/errors.js +24 -0
- package/lib/esm/index.d.ts +22 -0
- package/lib/esm/index.js +25 -0
- package/lib/esm/indexes/generator.d.ts +50 -0
- package/lib/esm/indexes/generator.js +95 -0
- package/lib/esm/indexes/index.d.ts +1 -0
- package/lib/esm/indexes/index.js +2 -0
- package/lib/esm/overrides/Column.d.ts +74 -0
- package/lib/esm/overrides/Column.js +70 -0
- package/lib/esm/overrides/CreateDateColumn.d.ts +2 -0
- package/lib/esm/overrides/CreateDateColumn.js +9 -0
- package/lib/esm/overrides/Entity.d.ts +11 -0
- package/lib/esm/overrides/Entity.js +28 -0
- package/lib/esm/overrides/PrimaryColumn.d.ts +20 -0
- package/lib/esm/overrides/PrimaryColumn.js +53 -0
- package/lib/esm/overrides/PrimaryGeneratedColumn.d.ts +24 -0
- package/lib/esm/overrides/PrimaryGeneratedColumn.js +51 -0
- package/lib/esm/overrides/UpdateDateColumn.d.ts +2 -0
- package/lib/esm/overrides/UpdateDateColumn.js +9 -0
- package/lib/esm/overrides/utils.d.ts +2 -0
- package/lib/esm/overrides/utils.js +29 -0
- package/lib/esm/query/Paginator.d.ts +86 -0
- package/lib/esm/query/Paginator.js +124 -0
- package/lib/esm/query/Statement.d.ts +131 -0
- package/lib/esm/query/Statement.js +242 -0
- package/lib/esm/query/constants.d.ts +52 -0
- package/lib/esm/query/constants.js +74 -0
- package/lib/esm/query/index.d.ts +4 -0
- package/lib/esm/query/index.js +5 -0
- package/lib/esm/query/translate.d.ts +34 -0
- package/lib/esm/query/translate.js +42 -0
- package/lib/esm/raw/postgres.d.ts +36 -0
- package/lib/esm/raw/postgres.js +2 -0
- package/lib/esm/sequences/Sequence.d.ts +67 -0
- package/lib/esm/sequences/Sequence.js +117 -0
- package/lib/esm/sequences/index.d.ts +1 -0
- package/lib/esm/sequences/index.js +2 -0
- package/lib/esm/types.d.ts +67 -0
- package/lib/esm/types.js +28 -0
- package/lib/esm/utils.d.ts +16 -0
- package/lib/esm/utils.js +29 -0
- package/lib/index.cjs +42 -0
- package/lib/index.d.ts +22 -0
- package/lib/indexes/generator.cjs +98 -0
- package/lib/indexes/generator.d.ts +50 -0
- package/lib/indexes/index.cjs +18 -0
- package/lib/indexes/index.d.ts +1 -0
- package/lib/overrides/Column.cjs +73 -0
- package/lib/overrides/Column.d.ts +74 -0
- package/lib/overrides/CreateDateColumn.cjs +12 -0
- package/lib/overrides/CreateDateColumn.d.ts +2 -0
- package/lib/overrides/Entity.cjs +31 -0
- package/lib/overrides/Entity.d.ts +11 -0
- package/lib/overrides/PrimaryColumn.cjs +56 -0
- package/lib/overrides/PrimaryColumn.d.ts +20 -0
- package/lib/overrides/PrimaryGeneratedColumn.cjs +54 -0
- package/lib/overrides/PrimaryGeneratedColumn.d.ts +24 -0
- package/lib/overrides/UpdateDateColumn.cjs +12 -0
- package/lib/overrides/UpdateDateColumn.d.ts +2 -0
- package/lib/overrides/utils.cjs +32 -0
- package/lib/overrides/utils.d.ts +2 -0
- package/lib/query/Paginator.cjs +128 -0
- package/lib/query/Paginator.d.ts +86 -0
- package/lib/query/Statement.cjs +246 -0
- package/lib/query/Statement.d.ts +131 -0
- package/lib/query/constants.cjs +77 -0
- package/lib/query/constants.d.ts +52 -0
- package/lib/query/index.cjs +21 -0
- package/lib/query/index.d.ts +4 -0
- package/lib/query/translate.cjs +45 -0
- package/lib/query/translate.d.ts +34 -0
- package/lib/raw/postgres.cjs +3 -0
- package/lib/raw/postgres.d.ts +36 -0
- package/lib/sequences/Sequence.cjs +121 -0
- package/lib/sequences/Sequence.d.ts +67 -0
- package/lib/sequences/index.cjs +18 -0
- package/lib/sequences/index.d.ts +1 -0
- package/lib/types.cjs +31 -0
- package/lib/types.d.ts +67 -0
- package/lib/utils.cjs +32 -0
- package/lib/utils.d.ts +16 -0
- package/package.json +128 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ColumnOptions } from "typeorm";
|
|
2
|
+
import { SimpleColumnType, SpatialColumnType, WithLengthColumnType, WithPrecisionColumnType, WithWidthColumnType } from "typeorm/driver/types/ColumnTypes";
|
|
3
|
+
import { ColumnCommonOptions } from "typeorm/decorator/options/ColumnCommonOptions";
|
|
4
|
+
import { SpatialColumnOptions } from "typeorm/decorator/options/SpatialColumnOptions";
|
|
5
|
+
import { ColumnWithLengthOptions } from "typeorm/decorator/options/ColumnWithLengthOptions";
|
|
6
|
+
import { ColumnWithWidthOptions } from "typeorm/decorator/options/ColumnWithWidthOptions";
|
|
7
|
+
import { ColumnNumericOptions } from "typeorm/decorator/options/ColumnNumericOptions";
|
|
8
|
+
import { ColumnEnumOptions } from "typeorm/decorator/options/ColumnEnumOptions";
|
|
9
|
+
import { ColumnHstoreOptions } from "typeorm/decorator/options/ColumnHstoreOptions";
|
|
10
|
+
import { ColumnEmbeddedOptions } from "typeorm/decorator/options/ColumnEmbeddedOptions";
|
|
11
|
+
/**
|
|
12
|
+
* Column decorator is used to mark a specific class property as a table column. Only properties decorated with this
|
|
13
|
+
* decorator will be persisted to the database when entity be saved.
|
|
14
|
+
*/
|
|
15
|
+
export declare function Column(): PropertyDecorator;
|
|
16
|
+
/**
|
|
17
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
18
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
19
|
+
*/
|
|
20
|
+
export declare function Column(options: ColumnOptions): PropertyDecorator;
|
|
21
|
+
/**
|
|
22
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
23
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
24
|
+
*/
|
|
25
|
+
export declare function Column(type: SimpleColumnType, options?: ColumnCommonOptions): PropertyDecorator;
|
|
26
|
+
/**
|
|
27
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
28
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
29
|
+
*/
|
|
30
|
+
export declare function Column(type: SpatialColumnType, options?: ColumnCommonOptions & SpatialColumnOptions): PropertyDecorator;
|
|
31
|
+
/**
|
|
32
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
33
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
34
|
+
*/
|
|
35
|
+
export declare function Column(type: WithLengthColumnType, options?: ColumnCommonOptions & ColumnWithLengthOptions): PropertyDecorator;
|
|
36
|
+
/**
|
|
37
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
38
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
39
|
+
*/
|
|
40
|
+
export declare function Column(type: WithWidthColumnType, options?: ColumnCommonOptions & ColumnWithWidthOptions): PropertyDecorator;
|
|
41
|
+
/**
|
|
42
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
43
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
44
|
+
*/
|
|
45
|
+
export declare function Column(type: WithPrecisionColumnType, options?: ColumnCommonOptions & ColumnNumericOptions): PropertyDecorator;
|
|
46
|
+
/**
|
|
47
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
48
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
49
|
+
*/
|
|
50
|
+
export declare function Column(type: "enum", options?: ColumnCommonOptions & ColumnEnumOptions): PropertyDecorator;
|
|
51
|
+
/**
|
|
52
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
53
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
54
|
+
*/
|
|
55
|
+
export declare function Column(type: "simple-enum", options?: ColumnCommonOptions & ColumnEnumOptions): PropertyDecorator;
|
|
56
|
+
/**
|
|
57
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
58
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
59
|
+
*/
|
|
60
|
+
export declare function Column(type: "set", options?: ColumnCommonOptions & ColumnEnumOptions): PropertyDecorator;
|
|
61
|
+
/**
|
|
62
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
63
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
64
|
+
*/
|
|
65
|
+
export declare function Column(type: "hstore", options?: ColumnCommonOptions & ColumnHstoreOptions): PropertyDecorator;
|
|
66
|
+
/**
|
|
67
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
68
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
69
|
+
*
|
|
70
|
+
* Property in entity can be marked as Embedded, and on persist all columns from the embedded are mapped to the
|
|
71
|
+
* single table of the entity where Embedded is used. And on hydration all columns which supposed to be in the
|
|
72
|
+
* embedded will be mapped to it from the single table.
|
|
73
|
+
*/
|
|
74
|
+
export declare function Column(type: (type?: any) => Function, options?: ColumnEmbeddedOptions): PropertyDecorator;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ColumnTypeUndefinedError, getMetadataArgsStorage, } from "typeorm";
|
|
2
|
+
import { aggregateOrNewColumn } from "./utils.js";
|
|
3
|
+
/**
|
|
4
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
5
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
6
|
+
*/
|
|
7
|
+
export function Column(typeOrOptions, options) {
|
|
8
|
+
return function (object, propertyName) {
|
|
9
|
+
// normalize parameters
|
|
10
|
+
let type;
|
|
11
|
+
if (typeof typeOrOptions === "string" ||
|
|
12
|
+
typeof typeOrOptions === "function") {
|
|
13
|
+
type = typeOrOptions;
|
|
14
|
+
}
|
|
15
|
+
else if (typeOrOptions) {
|
|
16
|
+
options = typeOrOptions;
|
|
17
|
+
type = typeOrOptions.type;
|
|
18
|
+
}
|
|
19
|
+
if (!options)
|
|
20
|
+
options = {};
|
|
21
|
+
// if type is not given explicitly then try to guess it
|
|
22
|
+
const reflectMetadataType = Reflect && Reflect.getMetadata
|
|
23
|
+
? Reflect.getMetadata("design:type", object, propertyName)
|
|
24
|
+
: undefined;
|
|
25
|
+
if (!type && reflectMetadataType)
|
|
26
|
+
// if type is not given explicitly then try to guess it
|
|
27
|
+
type = reflectMetadataType;
|
|
28
|
+
// check if there is no type in column options then set type from first function argument, or guessed one
|
|
29
|
+
if (!options.type && type)
|
|
30
|
+
options.type = type;
|
|
31
|
+
// specify HSTORE type if column is HSTORE
|
|
32
|
+
if (options.type === "hstore" && !options.hstoreType)
|
|
33
|
+
options.hstoreType = reflectMetadataType === Object ? "object" : "string";
|
|
34
|
+
if (typeof typeOrOptions === "function") {
|
|
35
|
+
// register an embedded
|
|
36
|
+
getMetadataArgsStorage().embeddeds.push({
|
|
37
|
+
target: object.constructor,
|
|
38
|
+
propertyName: propertyName,
|
|
39
|
+
isArray: reflectMetadataType === Array || options.array === true,
|
|
40
|
+
prefix: options.prefix !== undefined ? options.prefix : undefined,
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
42
|
+
type: typeOrOptions,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// register a regular column
|
|
47
|
+
// if we still don't have a type then we need to give error to user that type is required
|
|
48
|
+
if (!options.type)
|
|
49
|
+
throw new ColumnTypeUndefinedError(object, propertyName);
|
|
50
|
+
// create unique
|
|
51
|
+
if (options.unique === true)
|
|
52
|
+
getMetadataArgsStorage().uniques.push({
|
|
53
|
+
target: object.constructor,
|
|
54
|
+
columns: [propertyName],
|
|
55
|
+
});
|
|
56
|
+
const columns = getMetadataArgsStorage().columns;
|
|
57
|
+
aggregateOrNewColumn(object.constructor, propertyName, columns, options);
|
|
58
|
+
if (options.generated) {
|
|
59
|
+
getMetadataArgsStorage().generations.push({
|
|
60
|
+
target: object.constructor,
|
|
61
|
+
propertyName: propertyName,
|
|
62
|
+
strategy: typeof options.generated === "string"
|
|
63
|
+
? options.generated
|
|
64
|
+
: "increment",
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL292ZXJyaWRlcy9Db2x1bW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdMLHdCQUF3QixFQUN4QixzQkFBc0IsR0FDdkIsTUFBTSxTQUFTLENBQUM7QUFrQmpCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBZ0I7QUE4Ry9DOzs7R0FHRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQ3BCLGFBRzJDLEVBQzNDLE9BQStDO0lBRS9DLE9BQU8sVUFBVSxNQUFjLEVBQUUsWUFBaUI7UUFDaEQsdUJBQXVCO1FBQ3ZCLElBQUksSUFBNEIsQ0FBQztRQUNqQyxJQUNFLE9BQU8sYUFBYSxLQUFLLFFBQVE7WUFDakMsT0FBTyxhQUFhLEtBQUssVUFBVSxFQUNuQyxDQUFDO1lBQ0QsSUFBSSxHQUFlLGFBQWEsQ0FBQztRQUNuQyxDQUFDO2FBQU0sSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUN6QixPQUFPLEdBQWtCLGFBQWEsQ0FBQztZQUN2QyxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLEdBQUcsRUFBbUIsQ0FBQztRQUU1Qyx1REFBdUQ7UUFDdkQsTUFBTSxtQkFBbUIsR0FDdkIsT0FBTyxJQUFLLE9BQWUsQ0FBQyxXQUFXO1lBQ3JDLENBQUMsQ0FBRSxPQUFlLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDO1lBQ25FLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEIsSUFBSSxDQUFDLElBQUksSUFBSSxtQkFBbUI7WUFDOUIsdURBQXVEO1lBQ3ZELElBQUksR0FBRyxtQkFBbUIsQ0FBQztRQUU3Qix5R0FBeUc7UUFDekcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSTtZQUFFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRS9DLDBDQUEwQztRQUMxQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7WUFDbEQsT0FBTyxDQUFDLFVBQVUsR0FBRyxtQkFBbUIsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBRTVFLElBQUksT0FBTyxhQUFhLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDeEMsdUJBQXVCO1lBQ3ZCLHNCQUFzQixFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDdEMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXO2dCQUMxQixZQUFZLEVBQUUsWUFBWTtnQkFDMUIsT0FBTyxFQUFFLG1CQUFtQixLQUFLLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLElBQUk7Z0JBQ2hFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDakUsc0VBQXNFO2dCQUN0RSxJQUFJLEVBQUUsYUFBeUM7YUFDeEIsQ0FBQyxDQUFDO1FBQzdCLENBQUM7YUFBTSxDQUFDO1lBQ04sNEJBQTRCO1lBRTVCLHlGQUF5RjtZQUN6RixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7Z0JBQ2YsTUFBTSxJQUFJLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztZQUUzRCxnQkFBZ0I7WUFDaEIsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLElBQUk7Z0JBQ3pCLHNCQUFzQixFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDcEMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXO29CQUMxQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQ3hCLENBQUMsQ0FBQztZQUVMLE1BQU0sT0FBTyxHQUFHLHNCQUFzQixFQUFFLENBQUMsT0FBTyxDQUFDO1lBQ2pELG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUV6RSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDdEIsc0JBQXNCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO29CQUN4QyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVc7b0JBQzFCLFlBQVksRUFBRSxZQUFZO29CQUMxQixRQUFRLEVBQ04sT0FBTyxPQUFPLENBQUMsU0FBUyxLQUFLLFFBQVE7d0JBQ25DLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUzt3QkFDbkIsQ0FBQyxDQUFDLFdBQVc7aUJBQ08sQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdlbmVyYXRlZE1ldGFkYXRhQXJncyB9IGZyb20gXCJ0eXBlb3JtL21ldGFkYXRhLWFyZ3MvR2VuZXJhdGVkTWV0YWRhdGFBcmdzXCI7XG5pbXBvcnQge1xuICBDb2x1bW5PcHRpb25zLFxuICBDb2x1bW5UeXBlLFxuICBDb2x1bW5UeXBlVW5kZWZpbmVkRXJyb3IsXG4gIGdldE1ldGFkYXRhQXJnc1N0b3JhZ2UsXG59IGZyb20gXCJ0eXBlb3JtXCI7XG5pbXBvcnQge1xuICBTaW1wbGVDb2x1bW5UeXBlLFxuICBTcGF0aWFsQ29sdW1uVHlwZSxcbiAgV2l0aExlbmd0aENvbHVtblR5cGUsXG4gIFdpdGhQcmVjaXNpb25Db2x1bW5UeXBlLFxuICBXaXRoV2lkdGhDb2x1bW5UeXBlLFxufSBmcm9tIFwidHlwZW9ybS9kcml2ZXIvdHlwZXMvQ29sdW1uVHlwZXNcIjtcbmltcG9ydCB7IENvbHVtbkNvbW1vbk9wdGlvbnMgfSBmcm9tIFwidHlwZW9ybS9kZWNvcmF0b3Ivb3B0aW9ucy9Db2x1bW5Db21tb25PcHRpb25zXCI7XG5pbXBvcnQgeyBTcGF0aWFsQ29sdW1uT3B0aW9ucyB9IGZyb20gXCJ0eXBlb3JtL2RlY29yYXRvci9vcHRpb25zL1NwYXRpYWxDb2x1bW5PcHRpb25zXCI7XG5pbXBvcnQgeyBDb2x1bW5XaXRoTGVuZ3RoT3B0aW9ucyB9IGZyb20gXCJ0eXBlb3JtL2RlY29yYXRvci9vcHRpb25zL0NvbHVtbldpdGhMZW5ndGhPcHRpb25zXCI7XG5pbXBvcnQgeyBDb2x1bW5XaXRoV2lkdGhPcHRpb25zIH0gZnJvbSBcInR5cGVvcm0vZGVjb3JhdG9yL29wdGlvbnMvQ29sdW1uV2l0aFdpZHRoT3B0aW9uc1wiO1xuaW1wb3J0IHsgQ29sdW1uTnVtZXJpY09wdGlvbnMgfSBmcm9tIFwidHlwZW9ybS9kZWNvcmF0b3Ivb3B0aW9ucy9Db2x1bW5OdW1lcmljT3B0aW9uc1wiO1xuaW1wb3J0IHsgQ29sdW1uRW51bU9wdGlvbnMgfSBmcm9tIFwidHlwZW9ybS9kZWNvcmF0b3Ivb3B0aW9ucy9Db2x1bW5FbnVtT3B0aW9uc1wiO1xuaW1wb3J0IHsgQ29sdW1uSHN0b3JlT3B0aW9ucyB9IGZyb20gXCJ0eXBlb3JtL2RlY29yYXRvci9vcHRpb25zL0NvbHVtbkhzdG9yZU9wdGlvbnNcIjtcbmltcG9ydCB7IENvbHVtbkVtYmVkZGVkT3B0aW9ucyB9IGZyb20gXCJ0eXBlb3JtL2RlY29yYXRvci9vcHRpb25zL0NvbHVtbkVtYmVkZGVkT3B0aW9uc1wiO1xuaW1wb3J0IHsgRW1iZWRkZWRNZXRhZGF0YUFyZ3MgfSBmcm9tIFwidHlwZW9ybS9tZXRhZGF0YS1hcmdzL0VtYmVkZGVkTWV0YWRhdGFBcmdzXCI7XG5pbXBvcnQgeyBDb2x1bW5NZXRhZGF0YUFyZ3MgfSBmcm9tIFwidHlwZW9ybS9tZXRhZGF0YS1hcmdzL0NvbHVtbk1ldGFkYXRhQXJnc1wiO1xuaW1wb3J0IHsgYWdncmVnYXRlT3JOZXdDb2x1bW4gfSBmcm9tIFwiLi91dGlsc1wiO1xuXG4vKipcbiAqIENvbHVtbiBkZWNvcmF0b3IgaXMgdXNlZCB0byBtYXJrIGEgc3BlY2lmaWMgY2xhc3MgcHJvcGVydHkgYXMgYSB0YWJsZSBjb2x1bW4uIE9ubHkgcHJvcGVydGllcyBkZWNvcmF0ZWQgd2l0aCB0aGlzXG4gKiBkZWNvcmF0b3Igd2lsbCBiZSBwZXJzaXN0ZWQgdG8gdGhlIGRhdGFiYXNlIHdoZW4gZW50aXR5IGJlIHNhdmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQ29sdW1uKCk6IFByb3BlcnR5RGVjb3JhdG9yO1xuXG4vKipcbiAqIENvbHVtbiBkZWNvcmF0b3IgaXMgdXNlZCB0byBtYXJrIGEgc3BlY2lmaWMgY2xhc3MgcHJvcGVydHkgYXMgYSB0YWJsZSBjb2x1bW4uXG4gKiBPbmx5IHByb3BlcnRpZXMgZGVjb3JhdGVkIHdpdGggdGhpcyBkZWNvcmF0b3Igd2lsbCBiZSBwZXJzaXN0ZWQgdG8gdGhlIGRhdGFiYXNlIHdoZW4gZW50aXR5IGJlIHNhdmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQ29sdW1uKG9wdGlvbnM6IENvbHVtbk9wdGlvbnMpOiBQcm9wZXJ0eURlY29yYXRvcjtcblxuLyoqXG4gKiBDb2x1bW4gZGVjb3JhdG9yIGlzIHVzZWQgdG8gbWFyayBhIHNwZWNpZmljIGNsYXNzIHByb3BlcnR5IGFzIGEgdGFibGUgY29sdW1uLlxuICogT25seSBwcm9wZXJ0aWVzIGRlY29yYXRlZCB3aXRoIHRoaXMgZGVjb3JhdG9yIHdpbGwgYmUgcGVyc2lzdGVkIHRvIHRoZSBkYXRhYmFzZSB3aGVuIGVudGl0eSBiZSBzYXZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENvbHVtbihcbiAgdHlwZTogU2ltcGxlQ29sdW1uVHlwZSxcbiAgb3B0aW9ucz86IENvbHVtbkNvbW1vbk9wdGlvbnNcbik6IFByb3BlcnR5RGVjb3JhdG9yO1xuXG4vKipcbiAqIENvbHVtbiBkZWNvcmF0b3IgaXMgdXNlZCB0byBtYXJrIGEgc3BlY2lmaWMgY2xhc3MgcHJvcGVydHkgYXMgYSB0YWJsZSBjb2x1bW4uXG4gKiBPbmx5IHByb3BlcnRpZXMgZGVjb3JhdGVkIHdpdGggdGhpcyBkZWNvcmF0b3Igd2lsbCBiZSBwZXJzaXN0ZWQgdG8gdGhlIGRhdGFiYXNlIHdoZW4gZW50aXR5IGJlIHNhdmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQ29sdW1uKFxuICB0eXBlOiBTcGF0aWFsQ29sdW1uVHlwZSxcbiAgb3B0aW9ucz86IENvbHVtbkNvbW1vbk9wdGlvbnMgJiBTcGF0aWFsQ29sdW1uT3B0aW9uc1xuKTogUHJvcGVydHlEZWNvcmF0b3I7XG5cbi8qKlxuICogQ29sdW1uIGRlY29yYXRvciBpcyB1c2VkIHRvIG1hcmsgYSBzcGVjaWZpYyBjbGFzcyBwcm9wZXJ0eSBhcyBhIHRhYmxlIGNvbHVtbi5cbiAqIE9ubHkgcHJvcGVydGllcyBkZWNvcmF0ZWQgd2l0aCB0aGlzIGRlY29yYXRvciB3aWxsIGJlIHBlcnNpc3RlZCB0byB0aGUgZGF0YWJhc2Ugd2hlbiBlbnRpdHkgYmUgc2F2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDb2x1bW4oXG4gIHR5cGU6IFdpdGhMZW5ndGhDb2x1bW5UeXBlLFxuICBvcHRpb25zPzogQ29sdW1uQ29tbW9uT3B0aW9ucyAmIENvbHVtbldpdGhMZW5ndGhPcHRpb25zXG4pOiBQcm9wZXJ0eURlY29yYXRvcjtcblxuLyoqXG4gKiBDb2x1bW4gZGVjb3JhdG9yIGlzIHVzZWQgdG8gbWFyayBhIHNwZWNpZmljIGNsYXNzIHByb3BlcnR5IGFzIGEgdGFibGUgY29sdW1uLlxuICogT25seSBwcm9wZXJ0aWVzIGRlY29yYXRlZCB3aXRoIHRoaXMgZGVjb3JhdG9yIHdpbGwgYmUgcGVyc2lzdGVkIHRvIHRoZSBkYXRhYmFzZSB3aGVuIGVudGl0eSBiZSBzYXZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENvbHVtbihcbiAgdHlwZTogV2l0aFdpZHRoQ29sdW1uVHlwZSxcbiAgb3B0aW9ucz86IENvbHVtbkNvbW1vbk9wdGlvbnMgJiBDb2x1bW5XaXRoV2lkdGhPcHRpb25zXG4pOiBQcm9wZXJ0eURlY29yYXRvcjtcblxuLyoqXG4gKiBDb2x1bW4gZGVjb3JhdG9yIGlzIHVzZWQgdG8gbWFyayBhIHNwZWNpZmljIGNsYXNzIHByb3BlcnR5IGFzIGEgdGFibGUgY29sdW1uLlxuICogT25seSBwcm9wZXJ0aWVzIGRlY29yYXRlZCB3aXRoIHRoaXMgZGVjb3JhdG9yIHdpbGwgYmUgcGVyc2lzdGVkIHRvIHRoZSBkYXRhYmFzZSB3aGVuIGVudGl0eSBiZSBzYXZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENvbHVtbihcbiAgdHlwZTogV2l0aFByZWNpc2lvbkNvbHVtblR5cGUsXG4gIG9wdGlvbnM/OiBDb2x1bW5Db21tb25PcHRpb25zICYgQ29sdW1uTnVtZXJpY09wdGlvbnNcbik6IFByb3BlcnR5RGVjb3JhdG9yO1xuXG4vKipcbiAqIENvbHVtbiBkZWNvcmF0b3IgaXMgdXNlZCB0byBtYXJrIGEgc3BlY2lmaWMgY2xhc3MgcHJvcGVydHkgYXMgYSB0YWJsZSBjb2x1bW4uXG4gKiBPbmx5IHByb3BlcnRpZXMgZGVjb3JhdGVkIHdpdGggdGhpcyBkZWNvcmF0b3Igd2lsbCBiZSBwZXJzaXN0ZWQgdG8gdGhlIGRhdGFiYXNlIHdoZW4gZW50aXR5IGJlIHNhdmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQ29sdW1uKFxuICB0eXBlOiBcImVudW1cIixcbiAgb3B0aW9ucz86IENvbHVtbkNvbW1vbk9wdGlvbnMgJiBDb2x1bW5FbnVtT3B0aW9uc1xuKTogUHJvcGVydHlEZWNvcmF0b3I7XG5cbi8qKlxuICogQ29sdW1uIGRlY29yYXRvciBpcyB1c2VkIHRvIG1hcmsgYSBzcGVjaWZpYyBjbGFzcyBwcm9wZXJ0eSBhcyBhIHRhYmxlIGNvbHVtbi5cbiAqIE9ubHkgcHJvcGVydGllcyBkZWNvcmF0ZWQgd2l0aCB0aGlzIGRlY29yYXRvciB3aWxsIGJlIHBlcnNpc3RlZCB0byB0aGUgZGF0YWJhc2Ugd2hlbiBlbnRpdHkgYmUgc2F2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDb2x1bW4oXG4gIHR5cGU6IFwic2ltcGxlLWVudW1cIixcbiAgb3B0aW9ucz86IENvbHVtbkNvbW1vbk9wdGlvbnMgJiBDb2x1bW5FbnVtT3B0aW9uc1xuKTogUHJvcGVydHlEZWNvcmF0b3I7XG5cbi8qKlxuICogQ29sdW1uIGRlY29yYXRvciBpcyB1c2VkIHRvIG1hcmsgYSBzcGVjaWZpYyBjbGFzcyBwcm9wZXJ0eSBhcyBhIHRhYmxlIGNvbHVtbi5cbiAqIE9ubHkgcHJvcGVydGllcyBkZWNvcmF0ZWQgd2l0aCB0aGlzIGRlY29yYXRvciB3aWxsIGJlIHBlcnNpc3RlZCB0byB0aGUgZGF0YWJhc2Ugd2hlbiBlbnRpdHkgYmUgc2F2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDb2x1bW4oXG4gIHR5cGU6IFwic2V0XCIsXG4gIG9wdGlvbnM/OiBDb2x1bW5Db21tb25PcHRpb25zICYgQ29sdW1uRW51bU9wdGlvbnNcbik6IFByb3BlcnR5RGVjb3JhdG9yO1xuXG4vKipcbiAqIENvbHVtbiBkZWNvcmF0b3IgaXMgdXNlZCB0byBtYXJrIGEgc3BlY2lmaWMgY2xhc3MgcHJvcGVydHkgYXMgYSB0YWJsZSBjb2x1bW4uXG4gKiBPbmx5IHByb3BlcnRpZXMgZGVjb3JhdGVkIHdpdGggdGhpcyBkZWNvcmF0b3Igd2lsbCBiZSBwZXJzaXN0ZWQgdG8gdGhlIGRhdGFiYXNlIHdoZW4gZW50aXR5IGJlIHNhdmVkLlxuICovXG4vLyBAdHMtZXhwZWN0LWVycm9yIHNvbWUgdHlwZW9ybSB0aGluZ1xuZXhwb3J0IGZ1bmN0aW9uIENvbHVtbihcbiAgdHlwZTogXCJoc3RvcmVcIixcbiAgb3B0aW9ucz86IENvbHVtbkNvbW1vbk9wdGlvbnMgJiBDb2x1bW5Ic3RvcmVPcHRpb25zXG4pOiBQcm9wZXJ0eURlY29yYXRvcjtcblxuLyoqXG4gKiBDb2x1bW4gZGVjb3JhdG9yIGlzIHVzZWQgdG8gbWFyayBhIHNwZWNpZmljIGNsYXNzIHByb3BlcnR5IGFzIGEgdGFibGUgY29sdW1uLlxuICogT25seSBwcm9wZXJ0aWVzIGRlY29yYXRlZCB3aXRoIHRoaXMgZGVjb3JhdG9yIHdpbGwgYmUgcGVyc2lzdGVkIHRvIHRoZSBkYXRhYmFzZSB3aGVuIGVudGl0eSBiZSBzYXZlZC5cbiAqXG4gKiBQcm9wZXJ0eSBpbiBlbnRpdHkgY2FuIGJlIG1hcmtlZCBhcyBFbWJlZGRlZCwgYW5kIG9uIHBlcnNpc3QgYWxsIGNvbHVtbnMgZnJvbSB0aGUgZW1iZWRkZWQgYXJlIG1hcHBlZCB0byB0aGVcbiAqIHNpbmdsZSB0YWJsZSBvZiB0aGUgZW50aXR5IHdoZXJlIEVtYmVkZGVkIGlzIHVzZWQuIEFuZCBvbiBoeWRyYXRpb24gYWxsIGNvbHVtbnMgd2hpY2ggc3VwcG9zZWQgdG8gYmUgaW4gdGhlXG4gKiBlbWJlZGRlZCB3aWxsIGJlIG1hcHBlZCB0byBpdCBmcm9tIHRoZSBzaW5nbGUgdGFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDb2x1bW4oXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWZ1bmN0aW9uLXR5cGVcbiAgdHlwZTogKHR5cGU/OiBhbnkpID0+IEZ1bmN0aW9uLFxuICBvcHRpb25zPzogQ29sdW1uRW1iZWRkZWRPcHRpb25zXG4pOiBQcm9wZXJ0eURlY29yYXRvcjtcblxuLyoqXG4gKiBDb2x1bW4gZGVjb3JhdG9yIGlzIHVzZWQgdG8gbWFyayBhIHNwZWNpZmljIGNsYXNzIHByb3BlcnR5IGFzIGEgdGFibGUgY29sdW1uLlxuICogT25seSBwcm9wZXJ0aWVzIGRlY29yYXRlZCB3aXRoIHRoaXMgZGVjb3JhdG9yIHdpbGwgYmUgcGVyc2lzdGVkIHRvIHRoZSBkYXRhYmFzZSB3aGVuIGVudGl0eSBiZSBzYXZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENvbHVtbihcbiAgdHlwZU9yT3B0aW9ucz86IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWZ1bmN0aW9uLXR5cGVcbiAgfCAoKHR5cGU/OiBhbnkpID0+IEZ1bmN0aW9uKVxuICAgIHwgQ29sdW1uVHlwZVxuICAgIHwgKENvbHVtbk9wdGlvbnMgJiBDb2x1bW5FbWJlZGRlZE9wdGlvbnMpLFxuICBvcHRpb25zPzogQ29sdW1uT3B0aW9ucyAmIENvbHVtbkVtYmVkZGVkT3B0aW9uc1xuKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuICByZXR1cm4gZnVuY3Rpb24gKG9iamVjdDogb2JqZWN0LCBwcm9wZXJ0eU5hbWU6IGFueSkge1xuICAgIC8vIG5vcm1hbGl6ZSBwYXJhbWV0ZXJzXG4gICAgbGV0IHR5cGU6IENvbHVtblR5cGUgfCB1bmRlZmluZWQ7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHR5cGVPck9wdGlvbnMgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgIHR5cGVvZiB0eXBlT3JPcHRpb25zID09PSBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgIHR5cGUgPSA8Q29sdW1uVHlwZT50eXBlT3JPcHRpb25zO1xuICAgIH0gZWxzZSBpZiAodHlwZU9yT3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IDxDb2x1bW5PcHRpb25zPnR5cGVPck9wdGlvbnM7XG4gICAgICB0eXBlID0gdHlwZU9yT3B0aW9ucy50eXBlO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fSBhcyBDb2x1bW5PcHRpb25zO1xuXG4gICAgLy8gaWYgdHlwZSBpcyBub3QgZ2l2ZW4gZXhwbGljaXRseSB0aGVuIHRyeSB0byBndWVzcyBpdFxuICAgIGNvbnN0IHJlZmxlY3RNZXRhZGF0YVR5cGUgPVxuICAgICAgUmVmbGVjdCAmJiAoUmVmbGVjdCBhcyBhbnkpLmdldE1ldGFkYXRhXG4gICAgICAgID8gKFJlZmxlY3QgYXMgYW55KS5nZXRNZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIG9iamVjdCwgcHJvcGVydHlOYW1lKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBpZiAoIXR5cGUgJiYgcmVmbGVjdE1ldGFkYXRhVHlwZSlcbiAgICAgIC8vIGlmIHR5cGUgaXMgbm90IGdpdmVuIGV4cGxpY2l0bHkgdGhlbiB0cnkgdG8gZ3Vlc3MgaXRcbiAgICAgIHR5cGUgPSByZWZsZWN0TWV0YWRhdGFUeXBlO1xuXG4gICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgbm8gdHlwZSBpbiBjb2x1bW4gb3B0aW9ucyB0aGVuIHNldCB0eXBlIGZyb20gZmlyc3QgZnVuY3Rpb24gYXJndW1lbnQsIG9yIGd1ZXNzZWQgb25lXG4gICAgaWYgKCFvcHRpb25zLnR5cGUgJiYgdHlwZSkgb3B0aW9ucy50eXBlID0gdHlwZTtcblxuICAgIC8vIHNwZWNpZnkgSFNUT1JFIHR5cGUgaWYgY29sdW1uIGlzIEhTVE9SRVxuICAgIGlmIChvcHRpb25zLnR5cGUgPT09IFwiaHN0b3JlXCIgJiYgIW9wdGlvbnMuaHN0b3JlVHlwZSlcbiAgICAgIG9wdGlvbnMuaHN0b3JlVHlwZSA9IHJlZmxlY3RNZXRhZGF0YVR5cGUgPT09IE9iamVjdCA/IFwib2JqZWN0XCIgOiBcInN0cmluZ1wiO1xuXG4gICAgaWYgKHR5cGVvZiB0eXBlT3JPcHRpb25zID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIHJlZ2lzdGVyIGFuIGVtYmVkZGVkXG4gICAgICBnZXRNZXRhZGF0YUFyZ3NTdG9yYWdlKCkuZW1iZWRkZWRzLnB1c2goe1xuICAgICAgICB0YXJnZXQ6IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgICAgIGlzQXJyYXk6IHJlZmxlY3RNZXRhZGF0YVR5cGUgPT09IEFycmF5IHx8IG9wdGlvbnMuYXJyYXkgPT09IHRydWUsXG4gICAgICAgIHByZWZpeDogb3B0aW9ucy5wcmVmaXggIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMucHJlZml4IDogdW5kZWZpbmVkLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1mdW5jdGlvbi10eXBlXG4gICAgICAgIHR5cGU6IHR5cGVPck9wdGlvbnMgYXMgKHR5cGU/OiBhbnkpID0+IEZ1bmN0aW9uLFxuICAgICAgfSBhcyBFbWJlZGRlZE1ldGFkYXRhQXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlZ2lzdGVyIGEgcmVndWxhciBjb2x1bW5cblxuICAgICAgLy8gaWYgd2Ugc3RpbGwgZG9uJ3QgaGF2ZSBhIHR5cGUgdGhlbiB3ZSBuZWVkIHRvIGdpdmUgZXJyb3IgdG8gdXNlciB0aGF0IHR5cGUgaXMgcmVxdWlyZWRcbiAgICAgIGlmICghb3B0aW9ucy50eXBlKVxuICAgICAgICB0aHJvdyBuZXcgQ29sdW1uVHlwZVVuZGVmaW5lZEVycm9yKG9iamVjdCwgcHJvcGVydHlOYW1lKTtcblxuICAgICAgLy8gY3JlYXRlIHVuaXF1ZVxuICAgICAgaWYgKG9wdGlvbnMudW5pcXVlID09PSB0cnVlKVxuICAgICAgICBnZXRNZXRhZGF0YUFyZ3NTdG9yYWdlKCkudW5pcXVlcy5wdXNoKHtcbiAgICAgICAgICB0YXJnZXQ6IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBjb2x1bW5zOiBbcHJvcGVydHlOYW1lXSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnMgPSBnZXRNZXRhZGF0YUFyZ3NTdG9yYWdlKCkuY29sdW1ucztcbiAgICAgIGFnZ3JlZ2F0ZU9yTmV3Q29sdW1uKG9iamVjdC5jb25zdHJ1Y3RvciwgcHJvcGVydHlOYW1lLCBjb2x1bW5zLCBvcHRpb25zKTtcblxuICAgICAgaWYgKG9wdGlvbnMuZ2VuZXJhdGVkKSB7XG4gICAgICAgIGdldE1ldGFkYXRhQXJnc1N0b3JhZ2UoKS5nZW5lcmF0aW9ucy5wdXNoKHtcbiAgICAgICAgICB0YXJnZXQ6IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSxcbiAgICAgICAgICBzdHJhdGVneTpcbiAgICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmdlbmVyYXRlZCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICA/IG9wdGlvbnMuZ2VuZXJhdGVkXG4gICAgICAgICAgICAgIDogXCJpbmNyZW1lbnRcIixcbiAgICAgICAgfSBhcyBHZW5lcmF0ZWRNZXRhZGF0YUFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { getMetadataArgsStorage } from "typeorm";
|
|
2
|
+
import { aggregateOrNewColumn } from "./utils.js";
|
|
3
|
+
export function CreateDateColumn(options) {
|
|
4
|
+
return function (object, propertyName) {
|
|
5
|
+
const columns = getMetadataArgsStorage().columns;
|
|
6
|
+
aggregateOrNewColumn(object.constructor, propertyName, columns, options || {}, "createDate");
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JlYXRlRGF0ZUNvbHVtbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vdmVycmlkZXMvQ3JlYXRlRGF0ZUNvbHVtbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHNCQUFzQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBZ0I7QUFFL0MsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE9BQXVCO0lBQ3RELE9BQU8sVUFBVSxNQUFXLEVBQUUsWUFBaUI7UUFDN0MsTUFBTSxPQUFPLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDakQsb0JBQW9CLENBQ2xCLE1BQU0sQ0FBQyxXQUFXLEVBQ2xCLFlBQVksRUFDWixPQUFPLEVBQ1AsT0FBTyxJQUFJLEVBQUUsRUFDYixZQUFZLENBQ2IsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2x1bW5PcHRpb25zLCBnZXRNZXRhZGF0YUFyZ3NTdG9yYWdlIH0gZnJvbSBcInR5cGVvcm1cIjtcbmltcG9ydCB7IGFnZ3JlZ2F0ZU9yTmV3Q29sdW1uIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIENyZWF0ZURhdGVDb2x1bW4ob3B0aW9ucz86IENvbHVtbk9wdGlvbnMpOiBQcm9wZXJ0eURlY29yYXRvciB7XG4gIHJldHVybiBmdW5jdGlvbiAob2JqZWN0OiBhbnksIHByb3BlcnR5TmFtZTogYW55KSB7XG4gICAgY29uc3QgY29sdW1ucyA9IGdldE1ldGFkYXRhQXJnc1N0b3JhZ2UoKS5jb2x1bW5zO1xuICAgIGFnZ3JlZ2F0ZU9yTmV3Q29sdW1uKFxuICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgY29sdW1ucyxcbiAgICAgIG9wdGlvbnMgfHwge30sXG4gICAgICBcImNyZWF0ZURhdGVcIlxuICAgICk7XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { EntityOptions } from "typeorm";
|
|
2
|
+
/**
|
|
3
|
+
* This decorator is used to mark classes that will be an entity (table or document depend on database type).
|
|
4
|
+
* Database schema will be created for all classes decorated with it, and Repository can be retrieved and used for it.
|
|
5
|
+
*/
|
|
6
|
+
export declare function Entity(options?: EntityOptions): ClassDecorator;
|
|
7
|
+
/**
|
|
8
|
+
* This decorator is used to mark classes that will be an entity (table or document depend on database type).
|
|
9
|
+
* Database schema will be created for all classes decorated with it, and Repository can be retrieved and used for it.
|
|
10
|
+
*/
|
|
11
|
+
export declare function Entity(name?: string, options?: EntityOptions): ClassDecorator;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { getMetadataArgsStorage } from "typeorm";
|
|
2
|
+
import { ObjectUtils } from "typeorm/util/ObjectUtils";
|
|
3
|
+
/**
|
|
4
|
+
* This decorator is used to mark classes that will be an entity (table or document depend on database type).
|
|
5
|
+
* Database schema will be created for all classes decorated with it, and Repository can be retrieved and used for it.
|
|
6
|
+
*/
|
|
7
|
+
export function Entity(nameOrOptions, maybeOptions) {
|
|
8
|
+
const options = (ObjectUtils.isObject(nameOrOptions)
|
|
9
|
+
? nameOrOptions
|
|
10
|
+
: maybeOptions) || {};
|
|
11
|
+
const name = typeof nameOrOptions === "string" ? nameOrOptions : options.name;
|
|
12
|
+
return function (target) {
|
|
13
|
+
const tables = getMetadataArgsStorage().tables;
|
|
14
|
+
tables.push({
|
|
15
|
+
target: target,
|
|
16
|
+
name: name,
|
|
17
|
+
type: "regular",
|
|
18
|
+
orderBy: options.orderBy ? options.orderBy : undefined,
|
|
19
|
+
engine: options.engine ? options.engine : undefined,
|
|
20
|
+
database: options.database ? options.database : undefined,
|
|
21
|
+
schema: options.schema ? options.schema : undefined,
|
|
22
|
+
synchronize: options.synchronize,
|
|
23
|
+
withoutRowid: options.withoutRowid,
|
|
24
|
+
comment: options.comment ? options.comment : undefined,
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL292ZXJyaWRlcy9FbnRpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixzQkFBc0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFldkQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FDcEIsYUFBc0MsRUFDdEMsWUFBNEI7SUFFNUIsTUFBTSxPQUFPLEdBQ1gsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUNsQyxDQUFDLENBQUUsYUFBK0I7UUFDbEMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixNQUFNLElBQUksR0FBRyxPQUFPLGFBQWEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUU5RSxPQUFPLFVBQVUsTUFBTTtRQUNyQixNQUFNLE1BQU0sR0FBRyxzQkFBc0IsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1YsTUFBTSxFQUFFLE1BQU07WUFDZCxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDdEQsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbkQsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDekQsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbkQsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtZQUNsQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNsQyxDQUFDLENBQUM7SUFDMUIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eU9wdGlvbnMsIGdldE1ldGFkYXRhQXJnc1N0b3JhZ2UgfSBmcm9tIFwidHlwZW9ybVwiO1xuaW1wb3J0IHsgT2JqZWN0VXRpbHMgfSBmcm9tIFwidHlwZW9ybS91dGlsL09iamVjdFV0aWxzXCI7XG5pbXBvcnQgeyBUYWJsZU1ldGFkYXRhQXJncyB9IGZyb20gXCJ0eXBlb3JtL21ldGFkYXRhLWFyZ3MvVGFibGVNZXRhZGF0YUFyZ3NcIjtcblxuLyoqXG4gKiBUaGlzIGRlY29yYXRvciBpcyB1c2VkIHRvIG1hcmsgY2xhc3NlcyB0aGF0IHdpbGwgYmUgYW4gZW50aXR5ICh0YWJsZSBvciBkb2N1bWVudCBkZXBlbmQgb24gZGF0YWJhc2UgdHlwZSkuXG4gKiBEYXRhYmFzZSBzY2hlbWEgd2lsbCBiZSBjcmVhdGVkIGZvciBhbGwgY2xhc3NlcyBkZWNvcmF0ZWQgd2l0aCBpdCwgYW5kIFJlcG9zaXRvcnkgY2FuIGJlIHJldHJpZXZlZCBhbmQgdXNlZCBmb3IgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbnRpdHkob3B0aW9ucz86IEVudGl0eU9wdGlvbnMpOiBDbGFzc0RlY29yYXRvcjtcblxuLyoqXG4gKiBUaGlzIGRlY29yYXRvciBpcyB1c2VkIHRvIG1hcmsgY2xhc3NlcyB0aGF0IHdpbGwgYmUgYW4gZW50aXR5ICh0YWJsZSBvciBkb2N1bWVudCBkZXBlbmQgb24gZGF0YWJhc2UgdHlwZSkuXG4gKiBEYXRhYmFzZSBzY2hlbWEgd2lsbCBiZSBjcmVhdGVkIGZvciBhbGwgY2xhc3NlcyBkZWNvcmF0ZWQgd2l0aCBpdCwgYW5kIFJlcG9zaXRvcnkgY2FuIGJlIHJldHJpZXZlZCBhbmQgdXNlZCBmb3IgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbnRpdHkobmFtZT86IHN0cmluZywgb3B0aW9ucz86IEVudGl0eU9wdGlvbnMpOiBDbGFzc0RlY29yYXRvcjtcblxuLyoqXG4gKiBUaGlzIGRlY29yYXRvciBpcyB1c2VkIHRvIG1hcmsgY2xhc3NlcyB0aGF0IHdpbGwgYmUgYW4gZW50aXR5ICh0YWJsZSBvciBkb2N1bWVudCBkZXBlbmQgb24gZGF0YWJhc2UgdHlwZSkuXG4gKiBEYXRhYmFzZSBzY2hlbWEgd2lsbCBiZSBjcmVhdGVkIGZvciBhbGwgY2xhc3NlcyBkZWNvcmF0ZWQgd2l0aCBpdCwgYW5kIFJlcG9zaXRvcnkgY2FuIGJlIHJldHJpZXZlZCBhbmQgdXNlZCBmb3IgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbnRpdHkoXG4gIG5hbWVPck9wdGlvbnM/OiBzdHJpbmcgfCBFbnRpdHlPcHRpb25zLFxuICBtYXliZU9wdGlvbnM/OiBFbnRpdHlPcHRpb25zXG4pOiBDbGFzc0RlY29yYXRvciB7XG4gIGNvbnN0IG9wdGlvbnMgPVxuICAgIChPYmplY3RVdGlscy5pc09iamVjdChuYW1lT3JPcHRpb25zKVxuICAgICAgPyAobmFtZU9yT3B0aW9ucyBhcyBFbnRpdHlPcHRpb25zKVxuICAgICAgOiBtYXliZU9wdGlvbnMpIHx8IHt9O1xuICBjb25zdCBuYW1lID0gdHlwZW9mIG5hbWVPck9wdGlvbnMgPT09IFwic3RyaW5nXCIgPyBuYW1lT3JPcHRpb25zIDogb3B0aW9ucy5uYW1lO1xuXG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgY29uc3QgdGFibGVzID0gZ2V0TWV0YWRhdGFBcmdzU3RvcmFnZSgpLnRhYmxlcztcbiAgICB0YWJsZXMucHVzaCh7XG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB0eXBlOiBcInJlZ3VsYXJcIixcbiAgICAgIG9yZGVyQnk6IG9wdGlvbnMub3JkZXJCeSA/IG9wdGlvbnMub3JkZXJCeSA6IHVuZGVmaW5lZCxcbiAgICAgIGVuZ2luZTogb3B0aW9ucy5lbmdpbmUgPyBvcHRpb25zLmVuZ2luZSA6IHVuZGVmaW5lZCxcbiAgICAgIGRhdGFiYXNlOiBvcHRpb25zLmRhdGFiYXNlID8gb3B0aW9ucy5kYXRhYmFzZSA6IHVuZGVmaW5lZCxcbiAgICAgIHNjaGVtYTogb3B0aW9ucy5zY2hlbWEgPyBvcHRpb25zLnNjaGVtYSA6IHVuZGVmaW5lZCxcbiAgICAgIHN5bmNocm9uaXplOiBvcHRpb25zLnN5bmNocm9uaXplLFxuICAgICAgd2l0aG91dFJvd2lkOiBvcHRpb25zLndpdGhvdXRSb3dpZCxcbiAgICAgIGNvbW1lbnQ6IG9wdGlvbnMuY29tbWVudCA/IG9wdGlvbnMuY29tbWVudCA6IHVuZGVmaW5lZCxcbiAgICB9IGFzIFRhYmxlTWV0YWRhdGFBcmdzKTtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ColumnOptions, ColumnType } from "typeorm";
|
|
2
|
+
/**
|
|
3
|
+
* Describes all primary key column's options.
|
|
4
|
+
* If specified, the nullable field must be set to false.
|
|
5
|
+
*/
|
|
6
|
+
export type PrimaryColumnOptions = ColumnOptions & {
|
|
7
|
+
nullable?: false;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
11
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
12
|
+
* Primary columns also creates a PRIMARY KEY for this column in a db.
|
|
13
|
+
*/
|
|
14
|
+
export declare function PrimaryColumn(options?: PrimaryColumnOptions): PropertyDecorator;
|
|
15
|
+
/**
|
|
16
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
17
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
18
|
+
* Primary columns also creates a PRIMARY KEY for this column in a db.
|
|
19
|
+
*/
|
|
20
|
+
export declare function PrimaryColumn(type?: ColumnType, options?: PrimaryColumnOptions): PropertyDecorator;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ColumnTypeUndefinedError, getMetadataArgsStorage, PrimaryColumnCannotBeNullableError, } from "typeorm";
|
|
2
|
+
import { aggregateOrNewColumn } from "./utils.js";
|
|
3
|
+
/**
|
|
4
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
5
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
6
|
+
* Primary columns also creates a PRIMARY KEY for this column in a db.
|
|
7
|
+
*/
|
|
8
|
+
export function PrimaryColumn(typeOrOptions, options) {
|
|
9
|
+
return function (object, propertyName) {
|
|
10
|
+
// normalize parameters
|
|
11
|
+
let type;
|
|
12
|
+
if (typeof typeOrOptions === "string" ||
|
|
13
|
+
typeOrOptions === String ||
|
|
14
|
+
typeOrOptions === Boolean ||
|
|
15
|
+
typeOrOptions === Number) {
|
|
16
|
+
type = typeOrOptions;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
options = Object.assign({}, typeOrOptions);
|
|
20
|
+
}
|
|
21
|
+
if (!options)
|
|
22
|
+
options = {};
|
|
23
|
+
// if type is not given explicitly then try to guess it
|
|
24
|
+
const reflectMetadataType = Reflect && Reflect.getMetadata
|
|
25
|
+
? Reflect.getMetadata("design:type", object, propertyName)
|
|
26
|
+
: undefined;
|
|
27
|
+
if (!type && reflectMetadataType)
|
|
28
|
+
type = reflectMetadataType;
|
|
29
|
+
// check if there is no type in column options then set type from first function argument, or guessed one
|
|
30
|
+
if (!options.type && type)
|
|
31
|
+
options.type = type;
|
|
32
|
+
// if we still don't have a type then we need to give error to user that type is required
|
|
33
|
+
if (!options.type)
|
|
34
|
+
throw new ColumnTypeUndefinedError(object, propertyName);
|
|
35
|
+
// check if column is not nullable, because we cannot allow a primary key to be nullable
|
|
36
|
+
if (options.nullable)
|
|
37
|
+
throw new PrimaryColumnCannotBeNullableError(object, propertyName);
|
|
38
|
+
// explicitly set a primary to column options
|
|
39
|
+
options.primary = true;
|
|
40
|
+
const columns = getMetadataArgsStorage().columns;
|
|
41
|
+
aggregateOrNewColumn(object.constructor, propertyName, columns, options);
|
|
42
|
+
if (options.generated) {
|
|
43
|
+
getMetadataArgsStorage().generations.push({
|
|
44
|
+
target: object.constructor,
|
|
45
|
+
propertyName: propertyName,
|
|
46
|
+
strategy: typeof options.generated === "string"
|
|
47
|
+
? options.generated
|
|
48
|
+
: "increment",
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJpbWFyeUNvbHVtbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vdmVycmlkZXMvUHJpbWFyeUNvbHVtbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixrQ0FBa0MsR0FDbkMsTUFBTSxTQUFTLENBQUM7QUFHakIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG1CQUFnQjtBQTJCL0M7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQzNCLGFBQWlELEVBQ2pELE9BQThCO0lBRTlCLE9BQU8sVUFBVSxNQUFXLEVBQUUsWUFBaUI7UUFDN0MsdUJBQXVCO1FBQ3ZCLElBQUksSUFBNEIsQ0FBQztRQUNqQyxJQUNFLE9BQU8sYUFBYSxLQUFLLFFBQVE7WUFDakMsYUFBYSxLQUFLLE1BQU07WUFDeEIsYUFBYSxLQUFLLE9BQU87WUFDekIsYUFBYSxLQUFLLE1BQU0sRUFDeEIsQ0FBQztZQUNELElBQUksR0FBRyxhQUEyQixDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUF3QixhQUFhLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLEdBQUcsRUFBMEIsQ0FBQztRQUVuRCx1REFBdUQ7UUFDdkQsTUFBTSxtQkFBbUIsR0FDdkIsT0FBTyxJQUFLLE9BQWUsQ0FBQyxXQUFXO1lBQ3JDLENBQUMsQ0FBRSxPQUFlLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDO1lBQ25FLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEIsSUFBSSxDQUFDLElBQUksSUFBSSxtQkFBbUI7WUFBRSxJQUFJLEdBQUcsbUJBQW1CLENBQUM7UUFFN0QseUdBQXlHO1FBQ3pHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUk7WUFBRSxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUUvQyx5RkFBeUY7UUFDekYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUU1RSx3RkFBd0Y7UUFDeEYsSUFBSSxPQUFPLENBQUMsUUFBUTtZQUNsQixNQUFNLElBQUksa0NBQWtDLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXJFLDZDQUE2QztRQUM3QyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUV2QixNQUFNLE9BQU8sR0FBRyxzQkFBc0IsRUFBRSxDQUFDLE9BQU8sQ0FBQztRQUNqRCxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFekUsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEIsc0JBQXNCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUN4QyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVc7Z0JBQzFCLFlBQVksRUFBRSxZQUFZO2dCQUMxQixRQUFRLEVBQ04sT0FBTyxPQUFPLENBQUMsU0FBUyxLQUFLLFFBQVE7b0JBQ25DLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUztvQkFDbkIsQ0FBQyxDQUFDLFdBQVc7YUFDTyxDQUFDLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb2x1bW5PcHRpb25zLFxuICBDb2x1bW5UeXBlLFxuICBDb2x1bW5UeXBlVW5kZWZpbmVkRXJyb3IsXG4gIGdldE1ldGFkYXRhQXJnc1N0b3JhZ2UsXG4gIFByaW1hcnlDb2x1bW5DYW5ub3RCZU51bGxhYmxlRXJyb3IsXG59IGZyb20gXCJ0eXBlb3JtXCI7XG5pbXBvcnQgeyBDb2x1bW5NZXRhZGF0YUFyZ3MgfSBmcm9tIFwidHlwZW9ybS9tZXRhZGF0YS1hcmdzL0NvbHVtbk1ldGFkYXRhQXJnc1wiO1xuaW1wb3J0IHsgR2VuZXJhdGVkTWV0YWRhdGFBcmdzIH0gZnJvbSBcInR5cGVvcm0vbWV0YWRhdGEtYXJncy9HZW5lcmF0ZWRNZXRhZGF0YUFyZ3NcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0ZU9yTmV3Q29sdW1uIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuLyoqXG4gKiBEZXNjcmliZXMgYWxsIHByaW1hcnkga2V5IGNvbHVtbidzIG9wdGlvbnMuXG4gKiBJZiBzcGVjaWZpZWQsIHRoZSBudWxsYWJsZSBmaWVsZCBtdXN0IGJlIHNldCB0byBmYWxzZS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJpbWFyeUNvbHVtbk9wdGlvbnMgPSBDb2x1bW5PcHRpb25zICYgeyBudWxsYWJsZT86IGZhbHNlIH07XG5cbi8qKlxuICogQ29sdW1uIGRlY29yYXRvciBpcyB1c2VkIHRvIG1hcmsgYSBzcGVjaWZpYyBjbGFzcyBwcm9wZXJ0eSBhcyBhIHRhYmxlIGNvbHVtbi5cbiAqIE9ubHkgcHJvcGVydGllcyBkZWNvcmF0ZWQgd2l0aCB0aGlzIGRlY29yYXRvciB3aWxsIGJlIHBlcnNpc3RlZCB0byB0aGUgZGF0YWJhc2Ugd2hlbiBlbnRpdHkgYmUgc2F2ZWQuXG4gKiBQcmltYXJ5IGNvbHVtbnMgYWxzbyBjcmVhdGVzIGEgUFJJTUFSWSBLRVkgZm9yIHRoaXMgY29sdW1uIGluIGEgZGIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBQcmltYXJ5Q29sdW1uKFxuICBvcHRpb25zPzogUHJpbWFyeUNvbHVtbk9wdGlvbnNcbik6IFByb3BlcnR5RGVjb3JhdG9yO1xuXG4vKipcbiAqIENvbHVtbiBkZWNvcmF0b3IgaXMgdXNlZCB0byBtYXJrIGEgc3BlY2lmaWMgY2xhc3MgcHJvcGVydHkgYXMgYSB0YWJsZSBjb2x1bW4uXG4gKiBPbmx5IHByb3BlcnRpZXMgZGVjb3JhdGVkIHdpdGggdGhpcyBkZWNvcmF0b3Igd2lsbCBiZSBwZXJzaXN0ZWQgdG8gdGhlIGRhdGFiYXNlIHdoZW4gZW50aXR5IGJlIHNhdmVkLlxuICogUHJpbWFyeSBjb2x1bW5zIGFsc28gY3JlYXRlcyBhIFBSSU1BUlkgS0VZIGZvciB0aGlzIGNvbHVtbiBpbiBhIGRiLlxuICovXG5leHBvcnQgZnVuY3Rpb24gUHJpbWFyeUNvbHVtbihcbiAgdHlwZT86IENvbHVtblR5cGUsXG4gIG9wdGlvbnM/OiBQcmltYXJ5Q29sdW1uT3B0aW9uc1xuKTogUHJvcGVydHlEZWNvcmF0b3I7XG5cbi8qKlxuICogQ29sdW1uIGRlY29yYXRvciBpcyB1c2VkIHRvIG1hcmsgYSBzcGVjaWZpYyBjbGFzcyBwcm9wZXJ0eSBhcyBhIHRhYmxlIGNvbHVtbi5cbiAqIE9ubHkgcHJvcGVydGllcyBkZWNvcmF0ZWQgd2l0aCB0aGlzIGRlY29yYXRvciB3aWxsIGJlIHBlcnNpc3RlZCB0byB0aGUgZGF0YWJhc2Ugd2hlbiBlbnRpdHkgYmUgc2F2ZWQuXG4gKiBQcmltYXJ5IGNvbHVtbnMgYWxzbyBjcmVhdGVzIGEgUFJJTUFSWSBLRVkgZm9yIHRoaXMgY29sdW1uIGluIGEgZGIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBQcmltYXJ5Q29sdW1uKFxuICB0eXBlT3JPcHRpb25zPzogQ29sdW1uVHlwZSB8IFByaW1hcnlDb2x1bW5PcHRpb25zLFxuICBvcHRpb25zPzogUHJpbWFyeUNvbHVtbk9wdGlvbnNcbik6IFByb3BlcnR5RGVjb3JhdG9yIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmplY3Q6IGFueSwgcHJvcGVydHlOYW1lOiBhbnkpIHtcbiAgICAvLyBub3JtYWxpemUgcGFyYW1ldGVyc1xuICAgIGxldCB0eXBlOiBDb2x1bW5UeXBlIHwgdW5kZWZpbmVkO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiB0eXBlT3JPcHRpb25zID09PSBcInN0cmluZ1wiIHx8XG4gICAgICB0eXBlT3JPcHRpb25zID09PSBTdHJpbmcgfHxcbiAgICAgIHR5cGVPck9wdGlvbnMgPT09IEJvb2xlYW4gfHxcbiAgICAgIHR5cGVPck9wdGlvbnMgPT09IE51bWJlclxuICAgICkge1xuICAgICAgdHlwZSA9IHR5cGVPck9wdGlvbnMgYXMgQ29sdW1uVHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIDxQcmltYXJ5Q29sdW1uT3B0aW9ucz50eXBlT3JPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge30gYXMgUHJpbWFyeUNvbHVtbk9wdGlvbnM7XG5cbiAgICAvLyBpZiB0eXBlIGlzIG5vdCBnaXZlbiBleHBsaWNpdGx5IHRoZW4gdHJ5IHRvIGd1ZXNzIGl0XG4gICAgY29uc3QgcmVmbGVjdE1ldGFkYXRhVHlwZSA9XG4gICAgICBSZWZsZWN0ICYmIChSZWZsZWN0IGFzIGFueSkuZ2V0TWV0YWRhdGFcbiAgICAgICAgPyAoUmVmbGVjdCBhcyBhbnkpLmdldE1ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGlmICghdHlwZSAmJiByZWZsZWN0TWV0YWRhdGFUeXBlKSB0eXBlID0gcmVmbGVjdE1ldGFkYXRhVHlwZTtcblxuICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIG5vIHR5cGUgaW4gY29sdW1uIG9wdGlvbnMgdGhlbiBzZXQgdHlwZSBmcm9tIGZpcnN0IGZ1bmN0aW9uIGFyZ3VtZW50LCBvciBndWVzc2VkIG9uZVxuICAgIGlmICghb3B0aW9ucy50eXBlICYmIHR5cGUpIG9wdGlvbnMudHlwZSA9IHR5cGU7XG5cbiAgICAvLyBpZiB3ZSBzdGlsbCBkb24ndCBoYXZlIGEgdHlwZSB0aGVuIHdlIG5lZWQgdG8gZ2l2ZSBlcnJvciB0byB1c2VyIHRoYXQgdHlwZSBpcyByZXF1aXJlZFxuICAgIGlmICghb3B0aW9ucy50eXBlKSB0aHJvdyBuZXcgQ29sdW1uVHlwZVVuZGVmaW5lZEVycm9yKG9iamVjdCwgcHJvcGVydHlOYW1lKTtcblxuICAgIC8vIGNoZWNrIGlmIGNvbHVtbiBpcyBub3QgbnVsbGFibGUsIGJlY2F1c2Ugd2UgY2Fubm90IGFsbG93IGEgcHJpbWFyeSBrZXkgdG8gYmUgbnVsbGFibGVcbiAgICBpZiAob3B0aW9ucy5udWxsYWJsZSlcbiAgICAgIHRocm93IG5ldyBQcmltYXJ5Q29sdW1uQ2Fubm90QmVOdWxsYWJsZUVycm9yKG9iamVjdCwgcHJvcGVydHlOYW1lKTtcblxuICAgIC8vIGV4cGxpY2l0bHkgc2V0IGEgcHJpbWFyeSB0byBjb2x1bW4gb3B0aW9uc1xuICAgIG9wdGlvbnMucHJpbWFyeSA9IHRydWU7XG5cbiAgICBjb25zdCBjb2x1bW5zID0gZ2V0TWV0YWRhdGFBcmdzU3RvcmFnZSgpLmNvbHVtbnM7XG4gICAgYWdncmVnYXRlT3JOZXdDb2x1bW4ob2JqZWN0LmNvbnN0cnVjdG9yLCBwcm9wZXJ0eU5hbWUsIGNvbHVtbnMsIG9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnMuZ2VuZXJhdGVkKSB7XG4gICAgICBnZXRNZXRhZGF0YUFyZ3NTdG9yYWdlKCkuZ2VuZXJhdGlvbnMucHVzaCh7XG4gICAgICAgIHRhcmdldDogb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSxcbiAgICAgICAgc3RyYXRlZ3k6XG4gICAgICAgICAgdHlwZW9mIG9wdGlvbnMuZ2VuZXJhdGVkID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICA/IG9wdGlvbnMuZ2VuZXJhdGVkXG4gICAgICAgICAgICA6IFwiaW5jcmVtZW50XCIsXG4gICAgICB9IGFzIEdlbmVyYXRlZE1ldGFkYXRhQXJncyk7XG4gICAgfVxuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { PrimaryGeneratedColumnNumericOptions } from "typeorm/decorator/options/PrimaryGeneratedColumnNumericOptions";
|
|
2
|
+
import { PrimaryGeneratedColumnUUIDOptions } from "typeorm/decorator/options/PrimaryGeneratedColumnUUIDOptions";
|
|
3
|
+
import { PrimaryGeneratedColumnIdentityOptions } from "typeorm/decorator/options/PrimaryGeneratedColumnIdentityOptions";
|
|
4
|
+
/**
|
|
5
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
6
|
+
*/
|
|
7
|
+
export declare function PrimaryGeneratedColumn(): PropertyDecorator;
|
|
8
|
+
/**
|
|
9
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
10
|
+
*/
|
|
11
|
+
export declare function PrimaryGeneratedColumn(options: PrimaryGeneratedColumnNumericOptions): PropertyDecorator;
|
|
12
|
+
/**
|
|
13
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
14
|
+
*/
|
|
15
|
+
export declare function PrimaryGeneratedColumn(strategy: "increment", options?: PrimaryGeneratedColumnNumericOptions): PropertyDecorator;
|
|
16
|
+
/**
|
|
17
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
18
|
+
*/
|
|
19
|
+
export declare function PrimaryGeneratedColumn(strategy: "uuid", options?: PrimaryGeneratedColumnUUIDOptions): PropertyDecorator;
|
|
20
|
+
/**
|
|
21
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
22
|
+
*/
|
|
23
|
+
export declare function PrimaryGeneratedColumn(strategy: "rowid", options?: PrimaryGeneratedColumnUUIDOptions): PropertyDecorator;
|
|
24
|
+
export declare function PrimaryGeneratedColumn(strategy: "identity", options?: PrimaryGeneratedColumnIdentityOptions): PropertyDecorator;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ObjectUtils } from "typeorm/util/ObjectUtils";
|
|
2
|
+
import { getMetadataArgsStorage } from "typeorm";
|
|
3
|
+
import { aggregateOrNewColumn } from "./utils.js";
|
|
4
|
+
/**
|
|
5
|
+
* Column decorator is used to mark a specific class property as a table column.
|
|
6
|
+
* Only properties decorated with this decorator will be persisted to the database when entity be saved.
|
|
7
|
+
* This column creates an integer PRIMARY COLUMN with generated set to true.
|
|
8
|
+
*/
|
|
9
|
+
export function PrimaryGeneratedColumn(strategyOrOptions, maybeOptions) {
|
|
10
|
+
// normalize parameters
|
|
11
|
+
const options = {};
|
|
12
|
+
let strategy;
|
|
13
|
+
if (strategyOrOptions) {
|
|
14
|
+
if (typeof strategyOrOptions === "string")
|
|
15
|
+
strategy = strategyOrOptions;
|
|
16
|
+
if (ObjectUtils.isObject(strategyOrOptions)) {
|
|
17
|
+
strategy = "increment";
|
|
18
|
+
Object.assign(options, strategyOrOptions);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
strategy = "increment";
|
|
23
|
+
}
|
|
24
|
+
if (ObjectUtils.isObject(maybeOptions))
|
|
25
|
+
Object.assign(options, maybeOptions);
|
|
26
|
+
return function (object, propertyName) {
|
|
27
|
+
// if column type is not explicitly set then determine it based on generation strategy
|
|
28
|
+
if (!options.type) {
|
|
29
|
+
if (strategy === "increment" || strategy === "identity") {
|
|
30
|
+
options.type = Number;
|
|
31
|
+
}
|
|
32
|
+
else if (strategy === "uuid") {
|
|
33
|
+
options.type = "uuid";
|
|
34
|
+
}
|
|
35
|
+
else if (strategy === "rowid") {
|
|
36
|
+
options.type = "int";
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// explicitly set a primary and generated to column options
|
|
40
|
+
options.primary = true;
|
|
41
|
+
const columns = getMetadataArgsStorage().columns;
|
|
42
|
+
aggregateOrNewColumn(object.constructor, propertyName, columns, options);
|
|
43
|
+
// register generated metadata args
|
|
44
|
+
getMetadataArgsStorage().generations.push({
|
|
45
|
+
target: object.constructor,
|
|
46
|
+
propertyName: propertyName,
|
|
47
|
+
strategy: strategy,
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJpbWFyeUdlbmVyYXRlZENvbHVtbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vdmVycmlkZXMvUHJpbWFyeUdlbmVyYXRlZENvbHVtbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJdkQsT0FBTyxFQUFpQixzQkFBc0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQWdCO0FBMkMvQzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxpQkFPeUMsRUFDekMsWUFHeUM7SUFFekMsdUJBQXVCO0lBQ3ZCLE1BQU0sT0FBTyxHQUFrQixFQUFFLENBQUM7SUFDbEMsSUFBSSxRQUFxRCxDQUFDO0lBQzFELElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN0QixJQUFJLE9BQU8saUJBQWlCLEtBQUssUUFBUTtZQUN2QyxRQUFRLEdBQUcsaUJBSUcsQ0FBQztRQUVqQixJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQzVDLFFBQVEsR0FBRyxXQUFXLENBQUM7WUFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixRQUFRLEdBQUcsV0FBVyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFN0UsT0FBTyxVQUFVLE1BQVcsRUFBRSxZQUFpQjtRQUM3QyxzRkFBc0Y7UUFDdEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQixJQUFJLFFBQVEsS0FBSyxXQUFXLElBQUksUUFBUSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUN4RCxPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztZQUN4QixDQUFDO2lCQUFNLElBQUksUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUMvQixPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztZQUN4QixDQUFDO2lCQUFNLElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNoQyxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQztRQUVELDJEQUEyRDtRQUMzRCxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUV2QixNQUFNLE9BQU8sR0FBRyxzQkFBc0IsRUFBRSxDQUFDLE9BQU8sQ0FBQztRQUNqRCxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDekUsbUNBQW1DO1FBQ25DLHNCQUFzQixFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUN4QyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVc7WUFDMUIsWUFBWSxFQUFFLFlBQVk7WUFDMUIsUUFBUSxFQUFFLFFBQVE7U0FDTSxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSBcInR5cGVvcm0vdXRpbC9PYmplY3RVdGlsc1wiO1xuaW1wb3J0IHsgUHJpbWFyeUdlbmVyYXRlZENvbHVtbk51bWVyaWNPcHRpb25zIH0gZnJvbSBcInR5cGVvcm0vZGVjb3JhdG9yL29wdGlvbnMvUHJpbWFyeUdlbmVyYXRlZENvbHVtbk51bWVyaWNPcHRpb25zXCI7XG5pbXBvcnQgeyBQcmltYXJ5R2VuZXJhdGVkQ29sdW1uVVVJRE9wdGlvbnMgfSBmcm9tIFwidHlwZW9ybS9kZWNvcmF0b3Ivb3B0aW9ucy9QcmltYXJ5R2VuZXJhdGVkQ29sdW1uVVVJRE9wdGlvbnNcIjtcbmltcG9ydCB7IFByaW1hcnlHZW5lcmF0ZWRDb2x1bW5JZGVudGl0eU9wdGlvbnMgfSBmcm9tIFwidHlwZW9ybS9kZWNvcmF0b3Ivb3B0aW9ucy9QcmltYXJ5R2VuZXJhdGVkQ29sdW1uSWRlbnRpdHlPcHRpb25zXCI7XG5pbXBvcnQgeyBDb2x1bW5PcHRpb25zLCBnZXRNZXRhZGF0YUFyZ3NTdG9yYWdlIH0gZnJvbSBcInR5cGVvcm1cIjtcbmltcG9ydCB7IEdlbmVyYXRlZE1ldGFkYXRhQXJncyB9IGZyb20gXCJ0eXBlb3JtL21ldGFkYXRhLWFyZ3MvR2VuZXJhdGVkTWV0YWRhdGFBcmdzXCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGVPck5ld0NvbHVtbiB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbi8qKlxuICogQ29sdW1uIGRlY29yYXRvciBpcyB1c2VkIHRvIG1hcmsgYSBzcGVjaWZpYyBjbGFzcyBwcm9wZXJ0eSBhcyBhIHRhYmxlIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4oKTogUHJvcGVydHlEZWNvcmF0b3I7XG5cbi8qKlxuICogQ29sdW1uIGRlY29yYXRvciBpcyB1c2VkIHRvIG1hcmsgYSBzcGVjaWZpYyBjbGFzcyBwcm9wZXJ0eSBhcyBhIHRhYmxlIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4oXG4gIG9wdGlvbnM6IFByaW1hcnlHZW5lcmF0ZWRDb2x1bW5OdW1lcmljT3B0aW9uc1xuKTogUHJvcGVydHlEZWNvcmF0b3I7XG5cbi8qKlxuICogQ29sdW1uIGRlY29yYXRvciBpcyB1c2VkIHRvIG1hcmsgYSBzcGVjaWZpYyBjbGFzcyBwcm9wZXJ0eSBhcyBhIHRhYmxlIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4oXG4gIHN0cmF0ZWd5OiBcImluY3JlbWVudFwiLFxuICBvcHRpb25zPzogUHJpbWFyeUdlbmVyYXRlZENvbHVtbk51bWVyaWNPcHRpb25zXG4pOiBQcm9wZXJ0eURlY29yYXRvcjtcblxuLyoqXG4gKiBDb2x1bW4gZGVjb3JhdG9yIGlzIHVzZWQgdG8gbWFyayBhIHNwZWNpZmljIGNsYXNzIHByb3BlcnR5IGFzIGEgdGFibGUgY29sdW1uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gUHJpbWFyeUdlbmVyYXRlZENvbHVtbihcbiAgc3RyYXRlZ3k6IFwidXVpZFwiLFxuICBvcHRpb25zPzogUHJpbWFyeUdlbmVyYXRlZENvbHVtblVVSURPcHRpb25zXG4pOiBQcm9wZXJ0eURlY29yYXRvcjtcblxuLyoqXG4gKiBDb2x1bW4gZGVjb3JhdG9yIGlzIHVzZWQgdG8gbWFyayBhIHNwZWNpZmljIGNsYXNzIHByb3BlcnR5IGFzIGEgdGFibGUgY29sdW1uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gUHJpbWFyeUdlbmVyYXRlZENvbHVtbihcbiAgc3RyYXRlZ3k6IFwicm93aWRcIixcbiAgb3B0aW9ucz86IFByaW1hcnlHZW5lcmF0ZWRDb2x1bW5VVUlET3B0aW9uc1xuKTogUHJvcGVydHlEZWNvcmF0b3I7XG5cbmV4cG9ydCBmdW5jdGlvbiBQcmltYXJ5R2VuZXJhdGVkQ29sdW1uKFxuICBzdHJhdGVneTogXCJpZGVudGl0eVwiLFxuICBvcHRpb25zPzogUHJpbWFyeUdlbmVyYXRlZENvbHVtbklkZW50aXR5T3B0aW9uc1xuKTogUHJvcGVydHlEZWNvcmF0b3I7XG5cbi8qKlxuICogQ29sdW1uIGRlY29yYXRvciBpcyB1c2VkIHRvIG1hcmsgYSBzcGVjaWZpYyBjbGFzcyBwcm9wZXJ0eSBhcyBhIHRhYmxlIGNvbHVtbi5cbiAqIE9ubHkgcHJvcGVydGllcyBkZWNvcmF0ZWQgd2l0aCB0aGlzIGRlY29yYXRvciB3aWxsIGJlIHBlcnNpc3RlZCB0byB0aGUgZGF0YWJhc2Ugd2hlbiBlbnRpdHkgYmUgc2F2ZWQuXG4gKiBUaGlzIGNvbHVtbiBjcmVhdGVzIGFuIGludGVnZXIgUFJJTUFSWSBDT0xVTU4gd2l0aCBnZW5lcmF0ZWQgc2V0IHRvIHRydWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBQcmltYXJ5R2VuZXJhdGVkQ29sdW1uKFxuICBzdHJhdGVneU9yT3B0aW9ucz86XG4gICAgfCBcImluY3JlbWVudFwiXG4gICAgfCBcInV1aWRcIlxuICAgIHwgXCJyb3dpZFwiXG4gICAgfCBcImlkZW50aXR5XCJcbiAgICB8IFByaW1hcnlHZW5lcmF0ZWRDb2x1bW5OdW1lcmljT3B0aW9uc1xuICAgIHwgUHJpbWFyeUdlbmVyYXRlZENvbHVtblVVSURPcHRpb25zXG4gICAgfCBQcmltYXJ5R2VuZXJhdGVkQ29sdW1uSWRlbnRpdHlPcHRpb25zLFxuICBtYXliZU9wdGlvbnM/OlxuICAgIHwgUHJpbWFyeUdlbmVyYXRlZENvbHVtbk51bWVyaWNPcHRpb25zXG4gICAgfCBQcmltYXJ5R2VuZXJhdGVkQ29sdW1uVVVJRE9wdGlvbnNcbiAgICB8IFByaW1hcnlHZW5lcmF0ZWRDb2x1bW5JZGVudGl0eU9wdGlvbnNcbik6IFByb3BlcnR5RGVjb3JhdG9yIHtcbiAgLy8gbm9ybWFsaXplIHBhcmFtZXRlcnNcbiAgY29uc3Qgb3B0aW9uczogQ29sdW1uT3B0aW9ucyA9IHt9O1xuICBsZXQgc3RyYXRlZ3k6IFwiaW5jcmVtZW50XCIgfCBcInV1aWRcIiB8IFwicm93aWRcIiB8IFwiaWRlbnRpdHlcIjtcbiAgaWYgKHN0cmF0ZWd5T3JPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBzdHJhdGVneU9yT3B0aW9ucyA9PT0gXCJzdHJpbmdcIilcbiAgICAgIHN0cmF0ZWd5ID0gc3RyYXRlZ3lPck9wdGlvbnMgYXNcbiAgICAgICAgfCBcImluY3JlbWVudFwiXG4gICAgICAgIHwgXCJ1dWlkXCJcbiAgICAgICAgfCBcInJvd2lkXCJcbiAgICAgICAgfCBcImlkZW50aXR5XCI7XG5cbiAgICBpZiAoT2JqZWN0VXRpbHMuaXNPYmplY3Qoc3RyYXRlZ3lPck9wdGlvbnMpKSB7XG4gICAgICBzdHJhdGVneSA9IFwiaW5jcmVtZW50XCI7XG4gICAgICBPYmplY3QuYXNzaWduKG9wdGlvbnMsIHN0cmF0ZWd5T3JPcHRpb25zKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RyYXRlZ3kgPSBcImluY3JlbWVudFwiO1xuICB9XG4gIGlmIChPYmplY3RVdGlscy5pc09iamVjdChtYXliZU9wdGlvbnMpKSBPYmplY3QuYXNzaWduKG9wdGlvbnMsIG1heWJlT3B0aW9ucyk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmplY3Q6IGFueSwgcHJvcGVydHlOYW1lOiBhbnkpIHtcbiAgICAvLyBpZiBjb2x1bW4gdHlwZSBpcyBub3QgZXhwbGljaXRseSBzZXQgdGhlbiBkZXRlcm1pbmUgaXQgYmFzZWQgb24gZ2VuZXJhdGlvbiBzdHJhdGVneVxuICAgIGlmICghb3B0aW9ucy50eXBlKSB7XG4gICAgICBpZiAoc3RyYXRlZ3kgPT09IFwiaW5jcmVtZW50XCIgfHwgc3RyYXRlZ3kgPT09IFwiaWRlbnRpdHlcIikge1xuICAgICAgICBvcHRpb25zLnR5cGUgPSBOdW1iZXI7XG4gICAgICB9IGVsc2UgaWYgKHN0cmF0ZWd5ID09PSBcInV1aWRcIikge1xuICAgICAgICBvcHRpb25zLnR5cGUgPSBcInV1aWRcIjtcbiAgICAgIH0gZWxzZSBpZiAoc3RyYXRlZ3kgPT09IFwicm93aWRcIikge1xuICAgICAgICBvcHRpb25zLnR5cGUgPSBcImludFwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGV4cGxpY2l0bHkgc2V0IGEgcHJpbWFyeSBhbmQgZ2VuZXJhdGVkIHRvIGNvbHVtbiBvcHRpb25zXG4gICAgb3B0aW9ucy5wcmltYXJ5ID0gdHJ1ZTtcblxuICAgIGNvbnN0IGNvbHVtbnMgPSBnZXRNZXRhZGF0YUFyZ3NTdG9yYWdlKCkuY29sdW1ucztcbiAgICBhZ2dyZWdhdGVPck5ld0NvbHVtbihvYmplY3QuY29uc3RydWN0b3IsIHByb3BlcnR5TmFtZSwgY29sdW1ucywgb3B0aW9ucyk7XG4gICAgLy8gcmVnaXN0ZXIgZ2VuZXJhdGVkIG1ldGFkYXRhIGFyZ3NcbiAgICBnZXRNZXRhZGF0YUFyZ3NTdG9yYWdlKCkuZ2VuZXJhdGlvbnMucHVzaCh7XG4gICAgICB0YXJnZXQ6IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lLFxuICAgICAgc3RyYXRlZ3k6IHN0cmF0ZWd5LFxuICAgIH0gYXMgR2VuZXJhdGVkTWV0YWRhdGFBcmdzKTtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { getMetadataArgsStorage } from "typeorm";
|
|
2
|
+
import { aggregateOrNewColumn } from "./utils.js";
|
|
3
|
+
export function UpdateDateColumn(options) {
|
|
4
|
+
return function (object, propertyName) {
|
|
5
|
+
const columns = getMetadataArgsStorage().columns;
|
|
6
|
+
aggregateOrNewColumn(object.constructor, propertyName, columns, options || {}, "updateDate");
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXBkYXRlRGF0ZUNvbHVtbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vdmVycmlkZXMvVXBkYXRlRGF0ZUNvbHVtbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHNCQUFzQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBZ0I7QUFFL0MsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE9BQXVCO0lBQ3RELE9BQU8sVUFBVSxNQUFXLEVBQUUsWUFBaUI7UUFDN0MsTUFBTSxPQUFPLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDakQsb0JBQW9CLENBQ2xCLE1BQU0sQ0FBQyxXQUFXLEVBQ2xCLFlBQVksRUFDWixPQUFPLEVBQ1AsT0FBTyxJQUFJLEVBQUUsRUFDYixZQUFZLENBQ2IsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2x1bW5PcHRpb25zLCBnZXRNZXRhZGF0YUFyZ3NTdG9yYWdlIH0gZnJvbSBcInR5cGVvcm1cIjtcbmltcG9ydCB7IGFnZ3JlZ2F0ZU9yTmV3Q29sdW1uIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIFVwZGF0ZURhdGVDb2x1bW4ob3B0aW9ucz86IENvbHVtbk9wdGlvbnMpOiBQcm9wZXJ0eURlY29yYXRvciB7XG4gIHJldHVybiBmdW5jdGlvbiAob2JqZWN0OiBhbnksIHByb3BlcnR5TmFtZTogYW55KSB7XG4gICAgY29uc3QgY29sdW1ucyA9IGdldE1ldGFkYXRhQXJnc1N0b3JhZ2UoKS5jb2x1bW5zO1xuICAgIGFnZ3JlZ2F0ZU9yTmV3Q29sdW1uKFxuICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgY29sdW1ucyxcbiAgICAgIG9wdGlvbnMgfHwge30sXG4gICAgICBcInVwZGF0ZURhdGVcIlxuICAgICk7XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export function aggregateOrNewColumn(target, property, columns, options = {}, mode = "regular") {
|
|
2
|
+
const cols = columns.filter((c) => c.target === target && c.propertyName === property);
|
|
3
|
+
if (cols.length > 1)
|
|
4
|
+
throw new Error(`Multiple columns for ${property} found for given target: ${columns.map((c) => c.propertyName).join(", ")}`);
|
|
5
|
+
if (cols.length === 0) {
|
|
6
|
+
columns.push({
|
|
7
|
+
target: target,
|
|
8
|
+
propertyName: property,
|
|
9
|
+
mode: mode,
|
|
10
|
+
options: options,
|
|
11
|
+
});
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const column = cols[0];
|
|
15
|
+
Object.defineProperty(column, "options", {
|
|
16
|
+
value: { ...column.options, ...options },
|
|
17
|
+
writable: true,
|
|
18
|
+
enumerable: true,
|
|
19
|
+
configurable: true,
|
|
20
|
+
});
|
|
21
|
+
if (mode !== "regular")
|
|
22
|
+
Object.defineProperty(column, "mode", {
|
|
23
|
+
value: mode,
|
|
24
|
+
writable: true,
|
|
25
|
+
enumerable: true,
|
|
26
|
+
configurable: true,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3ZlcnJpZGVzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsTUFBVyxFQUNYLFFBQWdCLEVBQ2hCLE9BQTZCLEVBQzdCLFVBQWUsRUFBRSxFQUNqQixPQUFlLFNBQVM7SUFFeEIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FDekIsQ0FBQyxDQUFxQixFQUFFLEVBQUUsQ0FDeEIsQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLFlBQVksS0FBSyxRQUFRLENBQ3JELENBQUM7SUFFRixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUNqQixNQUFNLElBQUksS0FBSyxDQUNiLHdCQUF3QixRQUFRLDRCQUE0QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQzVHLENBQUM7SUFFSixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNYLE1BQU0sRUFBRSxNQUFNO1lBQ2QsWUFBWSxFQUFFLFFBQVE7WUFDdEIsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsT0FBTztTQUNLLENBQUMsQ0FBQztRQUN6QixPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUU7UUFDdkMsS0FBSyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFO1FBQ3hDLFFBQVEsRUFBRSxJQUFJO1FBQ2QsVUFBVSxFQUFFLElBQUk7UUFDaEIsWUFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQyxDQUFDO0lBRUgsSUFBSSxJQUFJLEtBQUssU0FBUztRQUNwQixNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUU7WUFDcEMsS0FBSyxFQUFFLElBQUk7WUFDWCxRQUFRLEVBQUUsSUFBSTtZQUNkLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2x1bW5NZXRhZGF0YUFyZ3MgfSBmcm9tIFwidHlwZW9ybS9tZXRhZGF0YS1hcmdzL0NvbHVtbk1ldGFkYXRhQXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYWdncmVnYXRlT3JOZXdDb2x1bW4oXG4gIHRhcmdldDogYW55LFxuICBwcm9wZXJ0eTogc3RyaW5nLFxuICBjb2x1bW5zOiBDb2x1bW5NZXRhZGF0YUFyZ3NbXSxcbiAgb3B0aW9uczogYW55ID0ge30sXG4gIG1vZGU6IHN0cmluZyA9IFwicmVndWxhclwiXG4pIHtcbiAgY29uc3QgY29scyA9IGNvbHVtbnMuZmlsdGVyKFxuICAgIChjOiBDb2x1bW5NZXRhZGF0YUFyZ3MpID0+XG4gICAgICBjLnRhcmdldCA9PT0gdGFyZ2V0ICYmIGMucHJvcGVydHlOYW1lID09PSBwcm9wZXJ0eVxuICApO1xuXG4gIGlmIChjb2xzLmxlbmd0aCA+IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE11bHRpcGxlIGNvbHVtbnMgZm9yICR7cHJvcGVydHl9IGZvdW5kIGZvciBnaXZlbiB0YXJnZXQ6ICR7Y29sdW1ucy5tYXAoKGMpID0+IGMucHJvcGVydHlOYW1lKS5qb2luKFwiLCBcIil9YFxuICAgICk7XG5cbiAgaWYgKGNvbHMubGVuZ3RoID09PSAwKSB7XG4gICAgY29sdW1ucy5wdXNoKHtcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eSxcbiAgICAgIG1vZGU6IG1vZGUsXG4gICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgIH0gYXMgQ29sdW1uTWV0YWRhdGFBcmdzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb2x1bW4gPSBjb2xzWzBdO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29sdW1uLCBcIm9wdGlvbnNcIiwge1xuICAgIHZhbHVlOiB7IC4uLmNvbHVtbi5vcHRpb25zLCAuLi5vcHRpb25zIH0sXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuXG4gIGlmIChtb2RlICE9PSBcInJlZ3VsYXJcIilcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29sdW1uLCBcIm1vZGVcIiwge1xuICAgICAgdmFsdWU6IG1vZGUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Paginator } from "@decaf-ts/core";
|
|
2
|
+
import { TypeORMQuery } from "../types";
|
|
3
|
+
import { Constructor, Model } from "@decaf-ts/decorator-validation";
|
|
4
|
+
import { TypeORMAdapter } from "../TypeORMAdapter";
|
|
5
|
+
import { Repository as Repo } from "typeorm";
|
|
6
|
+
/**
|
|
7
|
+
* @description Paginator for TypeORM query results.
|
|
8
|
+
* @summary Implements pagination for TypeORM-built queries using take/skip for efficient navigation through result sets.
|
|
9
|
+
* @template M The model type that extends Model.
|
|
10
|
+
* @template R The result type.
|
|
11
|
+
* @param {TypeORMAdapter} adapter The TypeORM adapter.
|
|
12
|
+
* @param {TypeORMQuery} query The query container to paginate.
|
|
13
|
+
* @param {number} size The page size.
|
|
14
|
+
* @param {Constructor<M>} clazz The model constructor.
|
|
15
|
+
* @class TypeORMPaginator
|
|
16
|
+
* @example
|
|
17
|
+
* // Example of using TypeORMPaginator
|
|
18
|
+
* const paginator = new TypeORMPaginator(adapter, { query: qb }, 10, User);
|
|
19
|
+
* const page1 = await paginator.page(1);
|
|
20
|
+
* const page2 = await paginator.page(2);
|
|
21
|
+
*/
|
|
22
|
+
export declare class TypeORMPaginator<M extends Model, R> extends Paginator<M, R, TypeORMQuery> {
|
|
23
|
+
/**
|
|
24
|
+
* @description Gets the total number of pages
|
|
25
|
+
* @summary Returns the total number of pages based on the record count and page size
|
|
26
|
+
* @return {number} The total number of pages
|
|
27
|
+
*/
|
|
28
|
+
get total(): number;
|
|
29
|
+
/**
|
|
30
|
+
* @description Gets the total record count
|
|
31
|
+
* @summary Returns the total number of records matching the query
|
|
32
|
+
* @return {number} The total record count
|
|
33
|
+
*/
|
|
34
|
+
get count(): number;
|
|
35
|
+
private __repo?;
|
|
36
|
+
protected get repo(): Repo<any>;
|
|
37
|
+
/**
|
|
38
|
+
* @description Creates a new TypeORMPaginator instance.
|
|
39
|
+
* @summary Initializes a paginator for TypeORM query results.
|
|
40
|
+
* @param {TypeORMAdapter} adapter The TypeORM adapter.
|
|
41
|
+
* @param {TypeORMQuery} query The TypeORM query container to paginate.
|
|
42
|
+
* @param {number} size The page size.
|
|
43
|
+
* @param {Constructor<M>} clazz The model constructor.
|
|
44
|
+
*/
|
|
45
|
+
constructor(adapter: TypeORMAdapter, query: TypeORMQuery, size: number, clazz: Constructor<M>);
|
|
46
|
+
/**
|
|
47
|
+
* @description Prepares a query for pagination
|
|
48
|
+
* @summary Modifies the raw query to include pagination parameters
|
|
49
|
+
* @param {TypeORMQuery} rawStatement - The original PostgreSQL query
|
|
50
|
+
* @return {TypeORMQuery} The prepared query with pagination parameters
|
|
51
|
+
*/
|
|
52
|
+
protected prepare(rawStatement: TypeORMQuery): TypeORMQuery;
|
|
53
|
+
/**
|
|
54
|
+
* @description Retrieves a specific page of results.
|
|
55
|
+
* @summary Executes the query with pagination and processes the results.
|
|
56
|
+
* @param {number} [page=1] The page number to retrieve.
|
|
57
|
+
* @return {Promise<R[]>} A promise that resolves to an array of results.
|
|
58
|
+
* @throws {PagingError} If trying to access an invalid page or if no class is defined.
|
|
59
|
+
* @mermaid
|
|
60
|
+
* sequenceDiagram
|
|
61
|
+
* participant Client
|
|
62
|
+
* participant Paginator as TypeORMPaginator
|
|
63
|
+
* participant Adapter
|
|
64
|
+
* participant DB as Database
|
|
65
|
+
*
|
|
66
|
+
* Client->>Paginator: page(pageNumber)
|
|
67
|
+
* Note over Paginator: Prepare options (skip/take)
|
|
68
|
+
*
|
|
69
|
+
* alt First time or need count
|
|
70
|
+
* Paginator->>Adapter: Get count
|
|
71
|
+
* Adapter->>DB: Execute COUNT
|
|
72
|
+
* DB-->>Adapter: count
|
|
73
|
+
* Adapter-->>Paginator: count
|
|
74
|
+
* Paginator->>Paginator: Calculate total pages
|
|
75
|
+
* end
|
|
76
|
+
*
|
|
77
|
+
* Paginator->>Adapter: Execute query
|
|
78
|
+
* Adapter->>DB: findAndCount(options)
|
|
79
|
+
* DB-->>Adapter: rows, count
|
|
80
|
+
* Adapter-->>Paginator: rows, count
|
|
81
|
+
*
|
|
82
|
+
* Paginator->>Paginator: Map rows to models
|
|
83
|
+
* Paginator-->>Client: results
|
|
84
|
+
*/
|
|
85
|
+
page(page?: number): Promise<R[]>;
|
|
86
|
+
}
|