linkgress-orm 0.0.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/LICENSE +21 -0
- package/README.md +196 -0
- package/dist/database/database-client.interface.d.ts +45 -0
- package/dist/database/database-client.interface.d.ts.map +1 -0
- package/dist/database/database-client.interface.js +20 -0
- package/dist/database/database-client.interface.js.map +1 -0
- package/dist/database/index.d.ts +5 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +10 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/pg-client.d.ts +30 -0
- package/dist/database/pg-client.d.ts.map +1 -0
- package/dist/database/pg-client.js +76 -0
- package/dist/database/pg-client.js.map +1 -0
- package/dist/database/postgres-client.d.ts +44 -0
- package/dist/database/postgres-client.d.ts.map +1 -0
- package/dist/database/postgres-client.js +111 -0
- package/dist/database/postgres-client.js.map +1 -0
- package/dist/database/types.d.ts +200 -0
- package/dist/database/types.d.ts.map +1 -0
- package/dist/database/types.js +8 -0
- package/dist/database/types.js.map +1 -0
- package/dist/entity/base-entity.d.ts +21 -0
- package/dist/entity/base-entity.d.ts.map +1 -0
- package/dist/entity/base-entity.js +27 -0
- package/dist/entity/base-entity.js.map +1 -0
- package/dist/entity/db-column.d.ts +61 -0
- package/dist/entity/db-column.d.ts.map +1 -0
- package/dist/entity/db-column.js +35 -0
- package/dist/entity/db-column.js.map +1 -0
- package/dist/entity/db-context.d.ts +665 -0
- package/dist/entity/db-context.d.ts.map +1 -0
- package/dist/entity/db-context.js +1463 -0
- package/dist/entity/db-context.js.map +1 -0
- package/dist/entity/entity-base.d.ts +76 -0
- package/dist/entity/entity-base.d.ts.map +1 -0
- package/dist/entity/entity-base.js +42 -0
- package/dist/entity/entity-base.js.map +1 -0
- package/dist/entity/entity-builder.d.ts +171 -0
- package/dist/entity/entity-builder.d.ts.map +1 -0
- package/dist/entity/entity-builder.js +376 -0
- package/dist/entity/entity-builder.js.map +1 -0
- package/dist/entity/model-config.d.ts +18 -0
- package/dist/entity/model-config.d.ts.map +1 -0
- package/dist/entity/model-config.js +157 -0
- package/dist/entity/model-config.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +142 -0
- package/dist/index.js.map +1 -0
- package/dist/migration/db-schema-manager.d.ts +228 -0
- package/dist/migration/db-schema-manager.d.ts.map +1 -0
- package/dist/migration/db-schema-manager.js +1055 -0
- package/dist/migration/db-schema-manager.js.map +1 -0
- package/dist/migration/enum-migrator.d.ts +29 -0
- package/dist/migration/enum-migrator.d.ts.map +1 -0
- package/dist/migration/enum-migrator.js +137 -0
- package/dist/migration/enum-migrator.js.map +1 -0
- package/dist/query/collection-strategy.factory.d.ts +16 -0
- package/dist/query/collection-strategy.factory.d.ts.map +1 -0
- package/dist/query/collection-strategy.factory.js +37 -0
- package/dist/query/collection-strategy.factory.js.map +1 -0
- package/dist/query/collection-strategy.interface.d.ts +146 -0
- package/dist/query/collection-strategy.interface.d.ts.map +1 -0
- package/dist/query/collection-strategy.interface.js +3 -0
- package/dist/query/collection-strategy.interface.js.map +1 -0
- package/dist/query/conditions.d.ts +222 -0
- package/dist/query/conditions.d.ts.map +1 -0
- package/dist/query/conditions.js +446 -0
- package/dist/query/conditions.js.map +1 -0
- package/dist/query/cte-builder.d.ts +95 -0
- package/dist/query/cte-builder.d.ts.map +1 -0
- package/dist/query/cte-builder.js +172 -0
- package/dist/query/cte-builder.js.map +1 -0
- package/dist/query/grouped-query.d.ts +186 -0
- package/dist/query/grouped-query.d.ts.map +1 -0
- package/dist/query/grouped-query.js +588 -0
- package/dist/query/grouped-query.js.map +1 -0
- package/dist/query/join-builder.d.ts +106 -0
- package/dist/query/join-builder.d.ts.map +1 -0
- package/dist/query/join-builder.js +275 -0
- package/dist/query/join-builder.js.map +1 -0
- package/dist/query/query-builder.d.ts +543 -0
- package/dist/query/query-builder.d.ts.map +1 -0
- package/dist/query/query-builder.js +2649 -0
- package/dist/query/query-builder.js.map +1 -0
- package/dist/query/strategies/jsonb-collection-strategy.d.ts +51 -0
- package/dist/query/strategies/jsonb-collection-strategy.d.ts.map +1 -0
- package/dist/query/strategies/jsonb-collection-strategy.js +210 -0
- package/dist/query/strategies/jsonb-collection-strategy.js.map +1 -0
- package/dist/query/strategies/temptable-collection-strategy.d.ts +95 -0
- package/dist/query/strategies/temptable-collection-strategy.d.ts.map +1 -0
- package/dist/query/strategies/temptable-collection-strategy.js +456 -0
- package/dist/query/strategies/temptable-collection-strategy.js.map +1 -0
- package/dist/query/subquery.d.ts +152 -0
- package/dist/query/subquery.d.ts.map +1 -0
- package/dist/query/subquery.js +206 -0
- package/dist/query/subquery.js.map +1 -0
- package/dist/schema/column-builder.d.ts +127 -0
- package/dist/schema/column-builder.d.ts.map +1 -0
- package/dist/schema/column-builder.js +184 -0
- package/dist/schema/column-builder.js.map +1 -0
- package/dist/schema/inference.d.ts +26 -0
- package/dist/schema/inference.d.ts.map +1 -0
- package/dist/schema/inference.js +3 -0
- package/dist/schema/inference.js.map +1 -0
- package/dist/schema/navigation.d.ts +215 -0
- package/dist/schema/navigation.d.ts.map +1 -0
- package/dist/schema/navigation.js +233 -0
- package/dist/schema/navigation.js.map +1 -0
- package/dist/schema/row-type.d.ts +26 -0
- package/dist/schema/row-type.d.ts.map +1 -0
- package/dist/schema/row-type.js +3 -0
- package/dist/schema/row-type.js.map +1 -0
- package/dist/schema/sequence-builder.d.ts +87 -0
- package/dist/schema/sequence-builder.d.ts.map +1 -0
- package/dist/schema/sequence-builder.js +123 -0
- package/dist/schema/sequence-builder.js.map +1 -0
- package/dist/schema/table-builder.d.ts +122 -0
- package/dist/schema/table-builder.d.ts.map +1 -0
- package/dist/schema/table-builder.js +132 -0
- package/dist/schema/table-builder.js.map +1 -0
- package/dist/schema/typed-schema.d.ts +22 -0
- package/dist/schema/typed-schema.d.ts.map +1 -0
- package/dist/schema/typed-schema.js +28 -0
- package/dist/schema/typed-schema.js.map +1 -0
- package/dist/types/column-types.d.ts +20 -0
- package/dist/types/column-types.d.ts.map +1 -0
- package/dist/types/column-types.js +14 -0
- package/dist/types/column-types.js.map +1 -0
- package/dist/types/custom-types.d.ts +85 -0
- package/dist/types/custom-types.d.ts.map +1 -0
- package/dist/types/custom-types.js +132 -0
- package/dist/types/custom-types.js.map +1 -0
- package/dist/types/enum-builder.d.ts +31 -0
- package/dist/types/enum-builder.d.ts.map +1 -0
- package/dist/types/enum-builder.js +46 -0
- package/dist/types/enum-builder.js.map +1 -0
- package/dist/types/metadata.d.ts +67 -0
- package/dist/types/metadata.d.ts.map +1 -0
- package/dist/types/metadata.js +57 -0
- package/dist/types/metadata.js.map +1 -0
- package/dist/types/type-mapper.d.ts +49 -0
- package/dist/types/type-mapper.d.ts.map +1 -0
- package/dist/types/type-mapper.js +49 -0
- package/dist/types/type-mapper.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SequenceBuilder = exports.DbSequence = void 0;
|
|
4
|
+
exports.sequence = sequence;
|
|
5
|
+
/**
|
|
6
|
+
* Sequence instance for interacting with PostgreSQL sequences
|
|
7
|
+
*/
|
|
8
|
+
class DbSequence {
|
|
9
|
+
constructor(client, config) {
|
|
10
|
+
this.client = client;
|
|
11
|
+
this.config = config;
|
|
12
|
+
this.qualifiedName = config.schema
|
|
13
|
+
? `"${config.schema}"."${config.name}"`
|
|
14
|
+
: `"${config.name}"`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get the next value from the sequence
|
|
18
|
+
*/
|
|
19
|
+
async nextValue() {
|
|
20
|
+
const result = await this.client.query(`SELECT nextval($1::regclass) as value`, [this.qualifiedName]);
|
|
21
|
+
return Number(result.rows[0].value);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get the current value of the sequence (without incrementing)
|
|
25
|
+
*/
|
|
26
|
+
async currentValue() {
|
|
27
|
+
const result = await this.client.query(`SELECT currval($1::regclass) as value`, [this.qualifiedName]);
|
|
28
|
+
return Number(result.rows[0].value);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Set the sequence to a specific value
|
|
32
|
+
*/
|
|
33
|
+
async resync(value) {
|
|
34
|
+
await this.client.query(`SELECT setval($1::regclass, $2, true)`, [this.qualifiedName, value]);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get the sequence configuration
|
|
38
|
+
*/
|
|
39
|
+
getConfig() {
|
|
40
|
+
return { ...this.config };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get the qualified sequence name (with schema if applicable)
|
|
44
|
+
*/
|
|
45
|
+
getQualifiedName() {
|
|
46
|
+
return this.qualifiedName;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.DbSequence = DbSequence;
|
|
50
|
+
/**
|
|
51
|
+
* Builder for creating sequence configurations
|
|
52
|
+
*/
|
|
53
|
+
class SequenceBuilder {
|
|
54
|
+
constructor(name) {
|
|
55
|
+
this.config = {
|
|
56
|
+
name,
|
|
57
|
+
incrementBy: 1,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Set the schema for this sequence
|
|
62
|
+
*/
|
|
63
|
+
inSchema(schema) {
|
|
64
|
+
this.config.schema = schema;
|
|
65
|
+
return this;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Set the starting value
|
|
69
|
+
*/
|
|
70
|
+
startWith(value) {
|
|
71
|
+
this.config.startWith = value;
|
|
72
|
+
return this;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Set the increment value
|
|
76
|
+
*/
|
|
77
|
+
incrementBy(value) {
|
|
78
|
+
this.config.incrementBy = value;
|
|
79
|
+
return this;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Set minimum value
|
|
83
|
+
*/
|
|
84
|
+
minValue(value) {
|
|
85
|
+
this.config.minValue = value;
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Set maximum value
|
|
90
|
+
*/
|
|
91
|
+
maxValue(value) {
|
|
92
|
+
this.config.maxValue = value;
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Set cache size
|
|
97
|
+
*/
|
|
98
|
+
cache(value) {
|
|
99
|
+
this.config.cache = value;
|
|
100
|
+
return this;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Enable cycling (restart when reaching max/min value)
|
|
104
|
+
*/
|
|
105
|
+
cycle() {
|
|
106
|
+
this.config.cycle = true;
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Build the sequence configuration
|
|
111
|
+
*/
|
|
112
|
+
build() {
|
|
113
|
+
return { ...this.config };
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.SequenceBuilder = SequenceBuilder;
|
|
117
|
+
/**
|
|
118
|
+
* Helper function to create a sequence builder
|
|
119
|
+
*/
|
|
120
|
+
function sequence(name) {
|
|
121
|
+
return new SequenceBuilder(name);
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=sequence-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequence-builder.js","sourceRoot":"","sources":["../../src/schema/sequence-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { ColumnBuilder } from './column-builder';
|
|
2
|
+
import { DbCollection, DbReference, DbNavigationCollection, DbNavigation } from './navigation';
|
|
3
|
+
/**
|
|
4
|
+
* Relation types
|
|
5
|
+
*/
|
|
6
|
+
export type RelationType = 'one' | 'many';
|
|
7
|
+
/**
|
|
8
|
+
* Relation configuration
|
|
9
|
+
*/
|
|
10
|
+
export interface RelationConfig {
|
|
11
|
+
type: RelationType;
|
|
12
|
+
targetTable: string;
|
|
13
|
+
targetTableBuilder?: TableBuilder<any>;
|
|
14
|
+
foreignKey?: string;
|
|
15
|
+
foreignKeys?: string[];
|
|
16
|
+
matches?: string[];
|
|
17
|
+
references?: string;
|
|
18
|
+
isMandatory?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Index definition
|
|
22
|
+
*/
|
|
23
|
+
export interface IndexDefinition {
|
|
24
|
+
name: string;
|
|
25
|
+
columns: string[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Foreign key action type
|
|
29
|
+
*/
|
|
30
|
+
export type ForeignKeyAction = 'cascade' | 'restrict' | 'no action' | 'set null' | 'set default';
|
|
31
|
+
/**
|
|
32
|
+
* Foreign key constraint definition
|
|
33
|
+
*/
|
|
34
|
+
export interface ForeignKeyConstraint {
|
|
35
|
+
name: string;
|
|
36
|
+
columns: string[];
|
|
37
|
+
referencedTable: string;
|
|
38
|
+
referencedColumns: string[];
|
|
39
|
+
onDelete?: ForeignKeyAction;
|
|
40
|
+
onUpdate?: ForeignKeyAction;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Table schema definition
|
|
44
|
+
*/
|
|
45
|
+
export interface TableSchema<TColumns extends Record<string, ColumnBuilder> = any> {
|
|
46
|
+
name: string;
|
|
47
|
+
schema?: string;
|
|
48
|
+
columns: TColumns;
|
|
49
|
+
relations: Record<string, RelationConfig>;
|
|
50
|
+
indexes: IndexDefinition[];
|
|
51
|
+
foreignKeys: ForeignKeyConstraint[];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Extract TypeScript type from column builders
|
|
55
|
+
*/
|
|
56
|
+
export type InferColumnType<T> = T extends ColumnBuilder<infer U> ? U : never;
|
|
57
|
+
/**
|
|
58
|
+
* Infer table row type from schema
|
|
59
|
+
*/
|
|
60
|
+
export type InferTableType<T extends TableSchema> = {
|
|
61
|
+
[K in keyof T['columns']]: InferColumnType<T['columns'][K]>;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Schema definition can include both columns and navigation properties
|
|
65
|
+
*/
|
|
66
|
+
export type SchemaDefinition = Record<string, ColumnBuilder | DbCollection<any> | DbReference<any> | DbNavigationCollection<any> | DbNavigation<any>>;
|
|
67
|
+
/**
|
|
68
|
+
* Extract only column builders from schema definition
|
|
69
|
+
*/
|
|
70
|
+
export type ExtractColumns<T extends SchemaDefinition> = {
|
|
71
|
+
[K in keyof T as T[K] extends ColumnBuilder ? K : never]: T[K];
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Extract only navigation properties from schema definition
|
|
75
|
+
*/
|
|
76
|
+
export type ExtractNavigations<T extends SchemaDefinition> = {
|
|
77
|
+
[K in keyof T as T[K] extends DbCollection<any> | DbReference<any> | DbNavigationCollection<any> | DbNavigation<any> ? K : never]: T[K];
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Table builder - fluent API for defining tables with columns and navigation properties
|
|
81
|
+
*/
|
|
82
|
+
export declare class TableBuilder<TSchema extends SchemaDefinition = any> {
|
|
83
|
+
private tableName;
|
|
84
|
+
private schemaName?;
|
|
85
|
+
private schemaDef;
|
|
86
|
+
private columnDefs;
|
|
87
|
+
private relationDefs;
|
|
88
|
+
private indexDefs;
|
|
89
|
+
private foreignKeyDefs;
|
|
90
|
+
constructor(name: string, schema: TSchema, indexes?: IndexDefinition[], foreignKeys?: ForeignKeyConstraint[], schemaName?: string);
|
|
91
|
+
/**
|
|
92
|
+
* Build the final table schema
|
|
93
|
+
*/
|
|
94
|
+
build(): TableSchema<any>;
|
|
95
|
+
/**
|
|
96
|
+
* Get table name
|
|
97
|
+
*/
|
|
98
|
+
getName(): string;
|
|
99
|
+
/**
|
|
100
|
+
* Get columns
|
|
101
|
+
*/
|
|
102
|
+
getColumns(): Record<string, ColumnBuilder>;
|
|
103
|
+
/**
|
|
104
|
+
* Get relations
|
|
105
|
+
*/
|
|
106
|
+
getRelations(): Record<string, RelationConfig>;
|
|
107
|
+
/**
|
|
108
|
+
* Get full schema definition (columns + navigations)
|
|
109
|
+
*/
|
|
110
|
+
getSchema(): TSchema;
|
|
111
|
+
/**
|
|
112
|
+
* Get a typed field reference for a column (for use in navigation definitions)
|
|
113
|
+
* @example table.field('id') returns FieldRef<'id', number>
|
|
114
|
+
*/
|
|
115
|
+
field<K extends keyof ExtractColumns<TSchema>>(columnName: K): any;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Table factory function
|
|
119
|
+
* Supports both columns and navigation properties
|
|
120
|
+
*/
|
|
121
|
+
export declare function table<TSchema extends SchemaDefinition>(name: string, schema: TSchema): TableBuilder<TSchema>;
|
|
122
|
+
//# sourceMappingURL=table-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-builder.d.ts","sourceRoot":"","sources":["../../src/schema/table-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgB,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EACL,YAAY,EACZ,WAAW,EACX,sBAAsB,EACtB,YAAY,EAMb,MAAM,cAAc,CAAC;AAEtB;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,CAAC;AAEjG;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,GAAG;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,QAAQ,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE9E;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,WAAW,IAAI;KACjD,CAAC,IAAI,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5D,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AAEtJ;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,gBAAgB,IAAI;KACtD,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,aAAa,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;CAC/D,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,gBAAgB,IAAI;KAC1D,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,YAAY,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;CACxI,CAAC;AAEF;;GAEG;AACH,qBAAa,YAAY,CAAC,OAAO,SAAS,gBAAgB,GAAG,GAAG;IAC9D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,cAAc,CAA8B;gBAExC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,EAAE,EAAE,WAAW,CAAC,EAAE,oBAAoB,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM;IAsDjI;;OAEG;IACH,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC;IAWzB;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAI3C;;OAEG;IACH,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;IAI9C;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;;OAGG;IACH,KAAK,CAAC,CAAC,SAAS,MAAM,cAAc,CAAC,OAAO,CAAC,EAC3C,UAAU,EAAE,CAAC,GACZ,GAAG;CAWP;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,OAAO,SAAS,gBAAgB,EACpD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,GACd,YAAY,CAAC,OAAO,CAAC,CAEvB"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TableBuilder = void 0;
|
|
4
|
+
exports.table = table;
|
|
5
|
+
const column_builder_1 = require("./column-builder");
|
|
6
|
+
const navigation_1 = require("./navigation");
|
|
7
|
+
/**
|
|
8
|
+
* Table builder - fluent API for defining tables with columns and navigation properties
|
|
9
|
+
*/
|
|
10
|
+
class TableBuilder {
|
|
11
|
+
constructor(name, schema, indexes, foreignKeys, schemaName) {
|
|
12
|
+
this.columnDefs = {};
|
|
13
|
+
this.relationDefs = {};
|
|
14
|
+
this.indexDefs = [];
|
|
15
|
+
this.foreignKeyDefs = [];
|
|
16
|
+
this.tableName = name;
|
|
17
|
+
this.schemaName = schemaName;
|
|
18
|
+
this.schemaDef = schema;
|
|
19
|
+
this.indexDefs = indexes || [];
|
|
20
|
+
this.foreignKeyDefs = foreignKeys || [];
|
|
21
|
+
// Separate columns from navigation properties
|
|
22
|
+
for (const [key, value] of Object.entries(schema)) {
|
|
23
|
+
if ((0, navigation_1.isNavigationProperty)(value)) {
|
|
24
|
+
// Navigation property
|
|
25
|
+
if ((0, navigation_1.isNavigationCollection)(value)) {
|
|
26
|
+
// New navigation collection API
|
|
27
|
+
this.relationDefs[key] = {
|
|
28
|
+
type: 'many',
|
|
29
|
+
targetTable: value.targetTable,
|
|
30
|
+
targetTableBuilder: value.targetTableBuilder,
|
|
31
|
+
foreignKeys: value.foreignKeyColumns,
|
|
32
|
+
matches: value.matchColumns,
|
|
33
|
+
isMandatory: value.isMandatory,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
else if ((0, navigation_1.isNavigation)(value)) {
|
|
37
|
+
// New single navigation API
|
|
38
|
+
this.relationDefs[key] = {
|
|
39
|
+
type: 'one',
|
|
40
|
+
targetTable: value.getTargetTable(),
|
|
41
|
+
targetTableBuilder: value.targetTableBuilder,
|
|
42
|
+
foreignKeys: value.getForeignKeyColumns(),
|
|
43
|
+
matches: value.getMatchColumns(),
|
|
44
|
+
isMandatory: value.getIsMandatory(),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
else if (value instanceof navigation_1.DbCollection) {
|
|
48
|
+
// Old collection API (backward compatibility)
|
|
49
|
+
this.relationDefs[key] = {
|
|
50
|
+
type: 'many',
|
|
51
|
+
targetTable: value.targetTable,
|
|
52
|
+
foreignKey: value.foreignKey,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
else if (value instanceof navigation_1.DbReference) {
|
|
56
|
+
// Old reference API (backward compatibility)
|
|
57
|
+
this.relationDefs[key] = {
|
|
58
|
+
type: 'one',
|
|
59
|
+
targetTable: value.targetTable,
|
|
60
|
+
foreignKey: value.foreignKey,
|
|
61
|
+
references: value.references,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Regular column
|
|
67
|
+
this.columnDefs[key] = value;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Build the final table schema
|
|
73
|
+
*/
|
|
74
|
+
build() {
|
|
75
|
+
return {
|
|
76
|
+
name: this.tableName,
|
|
77
|
+
schema: this.schemaName,
|
|
78
|
+
columns: this.columnDefs,
|
|
79
|
+
relations: this.relationDefs,
|
|
80
|
+
indexes: this.indexDefs,
|
|
81
|
+
foreignKeys: this.foreignKeyDefs,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get table name
|
|
86
|
+
*/
|
|
87
|
+
getName() {
|
|
88
|
+
return this.tableName;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get columns
|
|
92
|
+
*/
|
|
93
|
+
getColumns() {
|
|
94
|
+
return this.columnDefs;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get relations
|
|
98
|
+
*/
|
|
99
|
+
getRelations() {
|
|
100
|
+
return this.relationDefs;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get full schema definition (columns + navigations)
|
|
104
|
+
*/
|
|
105
|
+
getSchema() {
|
|
106
|
+
return this.schemaDef;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get a typed field reference for a column (for use in navigation definitions)
|
|
110
|
+
* @example table.field('id') returns FieldRef<'id', number>
|
|
111
|
+
*/
|
|
112
|
+
field(columnName) {
|
|
113
|
+
const column = this.schemaDef[columnName];
|
|
114
|
+
if (column instanceof column_builder_1.ColumnBuilder || column.build) {
|
|
115
|
+
const dbColumnName = column.build().name;
|
|
116
|
+
return {
|
|
117
|
+
__fieldName: columnName,
|
|
118
|
+
__dbColumnName: dbColumnName,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
throw new Error(`Column ${String(columnName)} not found`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
exports.TableBuilder = TableBuilder;
|
|
125
|
+
/**
|
|
126
|
+
* Table factory function
|
|
127
|
+
* Supports both columns and navigation properties
|
|
128
|
+
*/
|
|
129
|
+
function table(name, schema) {
|
|
130
|
+
return new TableBuilder(name, schema);
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=table-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-builder.js","sourceRoot":"","sources":["../../src/schema/table-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { InferTableType, TableSchema } from './table-builder';
|
|
2
|
+
import { CollectionQueryBuilder } from '../query/query-builder';
|
|
3
|
+
/**
|
|
4
|
+
* Create a typed row proxy for queries
|
|
5
|
+
* This allows strong typing without 'as any'
|
|
6
|
+
*/
|
|
7
|
+
export type TypedRow<T extends TableSchema> = {
|
|
8
|
+
[K in keyof T['columns']]: K;
|
|
9
|
+
} & {
|
|
10
|
+
[K in keyof T['relations']]: T['relations'][K]['type'] extends 'many' ? CollectionQueryBuilder<any> : any;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Helper to create typed row accessor
|
|
14
|
+
*/
|
|
15
|
+
export declare function createTypedRow<T extends TableSchema>(schema: T): TypedRow<T>;
|
|
16
|
+
/**
|
|
17
|
+
* Infer the full type including columns and relations
|
|
18
|
+
*/
|
|
19
|
+
export type InferSchemaType<T extends TableSchema> = InferTableType<T> & {
|
|
20
|
+
[K in keyof T['relations']]: T['relations'][K]['type'] extends 'many' ? CollectionQueryBuilder<any> : any;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=typed-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-schema.d.ts","sourceRoot":"","sources":["../../src/schema/typed-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,WAAW,IAAI;KAC3C,CAAC,IAAI,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;CAC7B,GAAG;KACD,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,MAAM,GACjE,sBAAsB,CAAC,GAAG,CAAC,GAC3B,GAAG;CACR,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,WAAW,EAAE,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CA4B5E;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,WAAW,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG;KACtE,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,MAAM,GACjE,sBAAsB,CAAC,GAAG,CAAC,GAC3B,GAAG;CACR,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTypedRow = createTypedRow;
|
|
4
|
+
const query_builder_1 = require("../query/query-builder");
|
|
5
|
+
/**
|
|
6
|
+
* Helper to create typed row accessor
|
|
7
|
+
*/
|
|
8
|
+
function createTypedRow(schema) {
|
|
9
|
+
const row = {};
|
|
10
|
+
// Add column accessors
|
|
11
|
+
for (const colName of Object.keys(schema.columns)) {
|
|
12
|
+
Object.defineProperty(row, colName, {
|
|
13
|
+
get: () => colName,
|
|
14
|
+
enumerable: true,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
// Add relation accessors
|
|
18
|
+
for (const [relName, relConfig] of Object.entries(schema.relations)) {
|
|
19
|
+
if (relConfig.type === 'many') {
|
|
20
|
+
Object.defineProperty(row, relName, {
|
|
21
|
+
get: () => new query_builder_1.CollectionQueryBuilder(relName, relConfig.targetTable, relConfig.foreignKey, schema.name),
|
|
22
|
+
enumerable: true,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return row;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=typed-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-schema.js","sourceRoot":"","sources":["../../src/schema/typed-schema.ts"],"names":[],"mappings":";;AAkBA,wCA4BC;AA7CD,0DAAgE;AAchE;;GAEG;AACH,SAAgB,cAAc,CAAwB,MAAS;IAC7D,MAAM,GAAG,GAAQ,EAAE,CAAC;IAEpB,uBAAuB;IACvB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE;YAClC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO;YAClB,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB;IACzB,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACpE,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC9B,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE;gBAClC,GAAG,EAAE,GAAG,EAAE,CACR,IAAI,sCAAsB,CACxB,OAAO,EACP,SAAS,CAAC,WAAW,EACrB,SAAS,CAAC,UAAW,EACrB,MAAM,CAAC,IAAI,CACZ;gBACH,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,GAAkB,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostgreSQL column types supported by the ORM
|
|
3
|
+
*/
|
|
4
|
+
export type ColumnType = 'smallint' | 'integer' | 'bigint' | 'decimal' | 'numeric' | 'real' | 'double precision' | 'smallserial' | 'serial' | 'bigserial' | 'money' | 'varchar' | 'char' | 'text' | 'bytea' | 'timestamp' | 'timestamptz' | 'date' | 'time' | 'timetz' | 'interval' | 'boolean' | 'uuid' | 'json' | 'jsonb' | 'inet' | 'cidr' | 'macaddr' | 'macaddr8' | 'point' | 'line' | 'lseg' | 'box' | 'path' | 'polygon' | 'circle' | 'array' | string;
|
|
5
|
+
/**
|
|
6
|
+
* TypeScript type mapping for PostgreSQL types
|
|
7
|
+
*/
|
|
8
|
+
export type TypeScriptType<T extends ColumnType> = T extends 'smallint' | 'integer' | 'bigint' | 'serial' | 'smallserial' | 'bigserial' ? number : T extends 'decimal' | 'numeric' | 'real' | 'double precision' | 'money' ? number : T extends 'varchar' | 'char' | 'text' ? string : T extends 'bytea' ? Buffer : T extends 'timestamp' | 'timestamptz' | 'date' | 'time' | 'timetz' ? Date : T extends 'interval' ? string : T extends 'boolean' ? boolean : T extends 'uuid' ? string : T extends 'json' | 'jsonb' ? any : T extends 'inet' | 'cidr' | 'macaddr' | 'macaddr8' ? string : T extends 'point' | 'line' | 'lseg' | 'box' | 'path' | 'polygon' | 'circle' ? any : T extends 'array' ? any[] : any;
|
|
9
|
+
/**
|
|
10
|
+
* Simplified type names for common PostgreSQL types
|
|
11
|
+
*/
|
|
12
|
+
export declare const TypeAliases: {
|
|
13
|
+
int: "integer";
|
|
14
|
+
float: "double precision";
|
|
15
|
+
datetime: "timestamp";
|
|
16
|
+
string: "text";
|
|
17
|
+
bool: "boolean";
|
|
18
|
+
};
|
|
19
|
+
export type TypeAlias = keyof typeof TypeAliases;
|
|
20
|
+
//# sourceMappingURL=column-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-types.d.ts","sourceRoot":"","sources":["../../src/types/column-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,UAAU,GAElB,UAAU,GAAG,SAAS,GAAG,QAAQ,GACjC,SAAS,GAAG,SAAS,GACrB,MAAM,GAAG,kBAAkB,GAC3B,aAAa,GAAG,QAAQ,GAAG,WAAW,GAEtC,OAAO,GAEP,SAAS,GAAG,MAAM,GAAG,MAAM,GAE3B,OAAO,GAEP,WAAW,GAAG,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAErE,SAAS,GAET,MAAM,GAEN,MAAM,GAAG,OAAO,GAEhB,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAExC,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAEjE,OAAO,GAEP,MAAM,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,UAAU,IAC7C,CAAC,SAAS,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,WAAW,GAAG,MAAM,GAC7F,CAAC,SAAS,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,kBAAkB,GAAG,OAAO,GAAG,MAAM,GAChF,CAAC,SAAS,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAC9C,CAAC,SAAS,OAAO,GAAG,MAAM,GAC1B,CAAC,SAAS,WAAW,GAAG,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,IAAI,GACzE,CAAC,SAAS,UAAU,GAAG,MAAM,GAC7B,CAAC,SAAS,SAAS,GAAG,OAAO,GAC7B,CAAC,SAAS,MAAM,GAAG,MAAM,GACzB,CAAC,SAAS,MAAM,GAAG,OAAO,GAAG,GAAG,GAChC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAC3D,CAAC,SAAS,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,GAAG,GACjF,CAAC,SAAS,OAAO,GAAG,GAAG,EAAE,GACzB,GAAG,CAAC;AAEN;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;CAMvB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,WAAW,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TypeAliases = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Simplified type names for common PostgreSQL types
|
|
6
|
+
*/
|
|
7
|
+
exports.TypeAliases = {
|
|
8
|
+
int: 'integer',
|
|
9
|
+
float: 'double precision',
|
|
10
|
+
datetime: 'timestamp',
|
|
11
|
+
string: 'text',
|
|
12
|
+
bool: 'boolean',
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=column-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-types.js","sourceRoot":"","sources":["../../src/types/column-types.ts"],"names":[],"mappings":";;;AAkDA;;GAEG;AACU,QAAA,WAAW,GAAG;IACzB,GAAG,EAAE,SAAkB;IACvB,KAAK,EAAE,kBAA2B;IAClC,QAAQ,EAAE,WAAoB;IAC9B,MAAM,EAAE,MAAe;IACvB,IAAI,EAAE,SAAkB;CACzB,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom type definition
|
|
3
|
+
* Allows defining custom PostgreSQL types with TypeScript mapping
|
|
4
|
+
*/
|
|
5
|
+
export interface CustomType<TData = any, TDriver = any> {
|
|
6
|
+
/**
|
|
7
|
+
* PostgreSQL type name
|
|
8
|
+
*/
|
|
9
|
+
dataType: string;
|
|
10
|
+
/**
|
|
11
|
+
* Convert TypeScript value to database value
|
|
12
|
+
*/
|
|
13
|
+
toDriver(value: TData): TDriver;
|
|
14
|
+
/**
|
|
15
|
+
* Convert database value to TypeScript value
|
|
16
|
+
*/
|
|
17
|
+
fromDriver(value: TDriver): TData;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Custom type builder
|
|
21
|
+
*/
|
|
22
|
+
export declare class CustomTypeBuilder<TData = any, TDriver = any> {
|
|
23
|
+
private config;
|
|
24
|
+
constructor(config: {
|
|
25
|
+
dataType: string;
|
|
26
|
+
toDriver: (value: TData) => TDriver;
|
|
27
|
+
fromDriver: (value: TDriver) => TData;
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* Gets the custom type definition
|
|
31
|
+
*/
|
|
32
|
+
getType(): CustomType<TData, TDriver>;
|
|
33
|
+
/**
|
|
34
|
+
* Gets the PostgreSQL type name
|
|
35
|
+
*/
|
|
36
|
+
get dataType(): string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Creates a custom type
|
|
40
|
+
*/
|
|
41
|
+
export declare function customType<TData = any, TDriver = any>(config: {
|
|
42
|
+
dataType: string;
|
|
43
|
+
toDriver: (value: TData) => TDriver;
|
|
44
|
+
fromDriver: (value: TDriver) => TData;
|
|
45
|
+
}): CustomTypeBuilder<TData, TDriver>;
|
|
46
|
+
/**
|
|
47
|
+
* Common custom types
|
|
48
|
+
*/
|
|
49
|
+
/**
|
|
50
|
+
* JSON type with automatic serialization
|
|
51
|
+
*/
|
|
52
|
+
export declare const json: <T = any>() => CustomTypeBuilder<T, string>;
|
|
53
|
+
/**
|
|
54
|
+
* Array type
|
|
55
|
+
*/
|
|
56
|
+
export declare const array: <T = any>(itemType: string) => CustomTypeBuilder<T[], string>;
|
|
57
|
+
/**
|
|
58
|
+
* Enum type
|
|
59
|
+
*/
|
|
60
|
+
export declare const enumType: <T extends string>(enumName: string, values: readonly T[]) => CustomTypeBuilder<T, string>;
|
|
61
|
+
/**
|
|
62
|
+
* Point type (geometric)
|
|
63
|
+
*/
|
|
64
|
+
export interface Point {
|
|
65
|
+
x: number;
|
|
66
|
+
y: number;
|
|
67
|
+
}
|
|
68
|
+
export declare const point: () => CustomTypeBuilder<Point, string>;
|
|
69
|
+
/**
|
|
70
|
+
* Vector type (for pgvector extension)
|
|
71
|
+
*/
|
|
72
|
+
export declare const vector: (dimensions: number) => CustomTypeBuilder<number[], string>;
|
|
73
|
+
/**
|
|
74
|
+
* Interval type
|
|
75
|
+
*/
|
|
76
|
+
export interface Interval {
|
|
77
|
+
years?: number;
|
|
78
|
+
months?: number;
|
|
79
|
+
days?: number;
|
|
80
|
+
hours?: number;
|
|
81
|
+
minutes?: number;
|
|
82
|
+
seconds?: number;
|
|
83
|
+
}
|
|
84
|
+
export declare const interval: () => CustomTypeBuilder<Interval, string>;
|
|
85
|
+
//# sourceMappingURL=custom-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-types.d.ts","sourceRoot":"","sources":["../../src/types/custom-types.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,WAAW,UAAU,CAAC,KAAK,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG;IACpD;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IAEhC;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC;CACnC;AAED;;GAEG;AACH,qBAAa,iBAAiB,CAAC,KAAK,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG;IAErD,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;QACpC,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,CAAC;KACvC;IAGH;;OAEG;IACH,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC;IAQrC;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;CACF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG,EAAE,MAAM,EAAE;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IACpC,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,CAAC;CACvC,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAEpC;AAED;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,GAAG,GAAG,mCAKxB,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,GAAG,GAAG,EAAE,UAAU,MAAM,mCAK3C,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,EACvC,UAAU,MAAM,EAChB,QAAQ,SAAS,CAAC,EAAE,iCAMlB,CAAC;AAEL;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,eAAO,MAAM,KAAK,wCASd,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,YAAY,MAAM,wCASrC,CAAC;AAEL;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,QAAQ,2CA4BjB,CAAC"}
|