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,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ScalarSubqueryComparison = exports.NotInSubqueryCondition = exports.InSubqueryCondition = exports.NotExistsCondition = exports.ExistsCondition = exports.Subquery = void 0;
|
|
4
|
+
exports.isSubquery = isSubquery;
|
|
5
|
+
exports.exists = exists;
|
|
6
|
+
exports.notExists = notExists;
|
|
7
|
+
exports.inSubquery = inSubquery;
|
|
8
|
+
exports.notInSubquery = notInSubquery;
|
|
9
|
+
exports.eqSubquery = eqSubquery;
|
|
10
|
+
exports.neSubquery = neSubquery;
|
|
11
|
+
exports.gtSubquery = gtSubquery;
|
|
12
|
+
exports.gteSubquery = gteSubquery;
|
|
13
|
+
exports.ltSubquery = ltSubquery;
|
|
14
|
+
exports.lteSubquery = lteSubquery;
|
|
15
|
+
const conditions_1 = require("./conditions");
|
|
16
|
+
/**
|
|
17
|
+
* Represents a subquery that can be used in various contexts
|
|
18
|
+
* TResult: The type of data the subquery returns
|
|
19
|
+
* TMode: 'scalar' | 'array' | 'table' - determines how the subquery can be used
|
|
20
|
+
*/
|
|
21
|
+
class Subquery {
|
|
22
|
+
constructor(sqlBuilder, mode = 'table', selectionMetadata) {
|
|
23
|
+
this.sqlBuilder = sqlBuilder;
|
|
24
|
+
this.__mode = mode;
|
|
25
|
+
this.selectionMetadata = selectionMetadata;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Set an alias for this subquery (used when subquery is a table source)
|
|
29
|
+
*/
|
|
30
|
+
as(alias) {
|
|
31
|
+
const clone = new Subquery(this.sqlBuilder, this.__mode, this.selectionMetadata);
|
|
32
|
+
clone.alias = alias;
|
|
33
|
+
return clone;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build the SQL for this subquery
|
|
37
|
+
*/
|
|
38
|
+
buildSql(context) {
|
|
39
|
+
return this.sqlBuilder(context);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get the alias for this subquery
|
|
43
|
+
*/
|
|
44
|
+
getAlias() {
|
|
45
|
+
return this.alias;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get the selection metadata (preserves SqlFragments with mappers)
|
|
49
|
+
*/
|
|
50
|
+
getSelectionMetadata() {
|
|
51
|
+
return this.selectionMetadata;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if this is a scalar subquery
|
|
55
|
+
*/
|
|
56
|
+
isScalar() {
|
|
57
|
+
return this.__mode === 'scalar';
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if this is an array subquery
|
|
61
|
+
*/
|
|
62
|
+
isArray() {
|
|
63
|
+
return this.__mode === 'array';
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Check if this is a table subquery
|
|
67
|
+
*/
|
|
68
|
+
isTable() {
|
|
69
|
+
return this.__mode === 'table';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.Subquery = Subquery;
|
|
73
|
+
/**
|
|
74
|
+
* Helper to check if something is a Subquery
|
|
75
|
+
*/
|
|
76
|
+
function isSubquery(value) {
|
|
77
|
+
return value instanceof Subquery;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Condition: EXISTS (subquery)
|
|
81
|
+
*/
|
|
82
|
+
class ExistsCondition extends conditions_1.WhereConditionBase {
|
|
83
|
+
constructor(subquery) {
|
|
84
|
+
super();
|
|
85
|
+
this.subquery = subquery;
|
|
86
|
+
}
|
|
87
|
+
buildSql(context) {
|
|
88
|
+
const subquerySql = this.subquery.buildSql(context);
|
|
89
|
+
return `EXISTS (${subquerySql})`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.ExistsCondition = ExistsCondition;
|
|
93
|
+
/**
|
|
94
|
+
* Condition: NOT EXISTS (subquery)
|
|
95
|
+
*/
|
|
96
|
+
class NotExistsCondition extends conditions_1.WhereConditionBase {
|
|
97
|
+
constructor(subquery) {
|
|
98
|
+
super();
|
|
99
|
+
this.subquery = subquery;
|
|
100
|
+
}
|
|
101
|
+
buildSql(context) {
|
|
102
|
+
const subquerySql = this.subquery.buildSql(context);
|
|
103
|
+
return `NOT EXISTS (${subquerySql})`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.NotExistsCondition = NotExistsCondition;
|
|
107
|
+
/**
|
|
108
|
+
* Condition: field IN (subquery)
|
|
109
|
+
* The subquery must return a single column
|
|
110
|
+
*/
|
|
111
|
+
class InSubqueryCondition extends conditions_1.WhereConditionBase {
|
|
112
|
+
constructor(field, subquery) {
|
|
113
|
+
super();
|
|
114
|
+
this.field = field;
|
|
115
|
+
this.subquery = subquery;
|
|
116
|
+
}
|
|
117
|
+
buildSql(context) {
|
|
118
|
+
const fieldName = this.getDbColumnName(this.field);
|
|
119
|
+
const subquerySql = this.subquery.buildSql(context);
|
|
120
|
+
return `${fieldName} IN (${subquerySql})`;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.InSubqueryCondition = InSubqueryCondition;
|
|
124
|
+
/**
|
|
125
|
+
* Condition: field NOT IN (subquery)
|
|
126
|
+
*/
|
|
127
|
+
class NotInSubqueryCondition extends conditions_1.WhereConditionBase {
|
|
128
|
+
constructor(field, subquery) {
|
|
129
|
+
super();
|
|
130
|
+
this.field = field;
|
|
131
|
+
this.subquery = subquery;
|
|
132
|
+
}
|
|
133
|
+
buildSql(context) {
|
|
134
|
+
const fieldName = this.getDbColumnName(this.field);
|
|
135
|
+
const subquerySql = this.subquery.buildSql(context);
|
|
136
|
+
return `${fieldName} NOT IN (${subquerySql})`;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
exports.NotInSubqueryCondition = NotInSubqueryCondition;
|
|
140
|
+
/**
|
|
141
|
+
* Comparison with scalar subquery
|
|
142
|
+
* Example: field = (SELECT ...)
|
|
143
|
+
*/
|
|
144
|
+
class ScalarSubqueryComparison extends conditions_1.WhereConditionBase {
|
|
145
|
+
constructor(field, operator, subquery) {
|
|
146
|
+
super();
|
|
147
|
+
this.field = field;
|
|
148
|
+
this.operator = operator;
|
|
149
|
+
this.subquery = subquery;
|
|
150
|
+
}
|
|
151
|
+
buildSql(context) {
|
|
152
|
+
const fieldName = this.getDbColumnName(this.field);
|
|
153
|
+
const subquerySql = this.subquery.buildSql(context);
|
|
154
|
+
return `${fieldName} ${this.operator} (${subquerySql})`;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
exports.ScalarSubqueryComparison = ScalarSubqueryComparison;
|
|
158
|
+
/**
|
|
159
|
+
* Helper functions to create subquery conditions
|
|
160
|
+
*/
|
|
161
|
+
/**
|
|
162
|
+
* EXISTS condition
|
|
163
|
+
*/
|
|
164
|
+
function exists(subquery) {
|
|
165
|
+
return new ExistsCondition(subquery);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* NOT EXISTS condition
|
|
169
|
+
*/
|
|
170
|
+
function notExists(subquery) {
|
|
171
|
+
return new NotExistsCondition(subquery);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* IN subquery condition
|
|
175
|
+
*/
|
|
176
|
+
function inSubquery(field, subquery) {
|
|
177
|
+
return new InSubqueryCondition(field, subquery);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* NOT IN subquery condition
|
|
181
|
+
*/
|
|
182
|
+
function notInSubquery(field, subquery) {
|
|
183
|
+
return new NotInSubqueryCondition(field, subquery);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Scalar subquery comparison helpers
|
|
187
|
+
*/
|
|
188
|
+
function eqSubquery(field, subquery) {
|
|
189
|
+
return new ScalarSubqueryComparison(field, '=', subquery);
|
|
190
|
+
}
|
|
191
|
+
function neSubquery(field, subquery) {
|
|
192
|
+
return new ScalarSubqueryComparison(field, '!=', subquery);
|
|
193
|
+
}
|
|
194
|
+
function gtSubquery(field, subquery) {
|
|
195
|
+
return new ScalarSubqueryComparison(field, '>', subquery);
|
|
196
|
+
}
|
|
197
|
+
function gteSubquery(field, subquery) {
|
|
198
|
+
return new ScalarSubqueryComparison(field, '>=', subquery);
|
|
199
|
+
}
|
|
200
|
+
function ltSubquery(field, subquery) {
|
|
201
|
+
return new ScalarSubqueryComparison(field, '<', subquery);
|
|
202
|
+
}
|
|
203
|
+
function lteSubquery(field, subquery) {
|
|
204
|
+
return new ScalarSubqueryComparison(field, '<=', subquery);
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=subquery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subquery.js","sourceRoot":"","sources":["../../src/query/subquery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { ColumnType } from '../types/column-types';
|
|
2
|
+
import { TypeMapper } from '../types/type-mapper';
|
|
3
|
+
/**
|
|
4
|
+
* Identity column options
|
|
5
|
+
*/
|
|
6
|
+
export interface IdentityOptions {
|
|
7
|
+
/** Sequence name (defaults to {table}_{column}_seq) */
|
|
8
|
+
name?: string;
|
|
9
|
+
/** Start value for the sequence */
|
|
10
|
+
startWith?: number;
|
|
11
|
+
/** Increment value */
|
|
12
|
+
incrementBy?: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Column configuration
|
|
16
|
+
*/
|
|
17
|
+
export interface ColumnConfig {
|
|
18
|
+
name: string;
|
|
19
|
+
type: ColumnType;
|
|
20
|
+
nullable: boolean;
|
|
21
|
+
primaryKey: boolean;
|
|
22
|
+
autoIncrement: boolean;
|
|
23
|
+
unique: boolean;
|
|
24
|
+
default?: any;
|
|
25
|
+
length?: number;
|
|
26
|
+
precision?: number;
|
|
27
|
+
scale?: number;
|
|
28
|
+
references?: {
|
|
29
|
+
table: string;
|
|
30
|
+
column: string;
|
|
31
|
+
};
|
|
32
|
+
mapper?: TypeMapper<any, any>;
|
|
33
|
+
/** GENERATED ALWAYS AS IDENTITY configuration */
|
|
34
|
+
identity?: IdentityOptions;
|
|
35
|
+
/** PostgreSQL ENUM type name */
|
|
36
|
+
enumTypeName?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Column builder - fluent API for defining columns
|
|
40
|
+
*/
|
|
41
|
+
export declare class ColumnBuilder<TType = any> {
|
|
42
|
+
protected config: Partial<ColumnConfig>;
|
|
43
|
+
constructor(name: string, type: ColumnType);
|
|
44
|
+
/**
|
|
45
|
+
* Mark column as NOT NULL
|
|
46
|
+
*/
|
|
47
|
+
notNull(): this;
|
|
48
|
+
/**
|
|
49
|
+
* Mark column as PRIMARY KEY
|
|
50
|
+
*/
|
|
51
|
+
primaryKey(): this;
|
|
52
|
+
/**
|
|
53
|
+
* Mark column as AUTO INCREMENT
|
|
54
|
+
*/
|
|
55
|
+
autoIncrement(): this;
|
|
56
|
+
/**
|
|
57
|
+
* Mark column as GENERATED ALWAYS AS IDENTITY (modern PostgreSQL identity columns)
|
|
58
|
+
* This is the preferred way over serial/bigserial for auto-incrementing primary keys
|
|
59
|
+
*/
|
|
60
|
+
generatedAlwaysAsIdentity(options?: IdentityOptions): this;
|
|
61
|
+
/**
|
|
62
|
+
* Mark column as UNIQUE
|
|
63
|
+
*/
|
|
64
|
+
unique(): this;
|
|
65
|
+
/**
|
|
66
|
+
* Set default value
|
|
67
|
+
*/
|
|
68
|
+
default(value: any): this;
|
|
69
|
+
/**
|
|
70
|
+
* Set column length (for varchar, char)
|
|
71
|
+
*/
|
|
72
|
+
length(value: number): this;
|
|
73
|
+
/**
|
|
74
|
+
* Set precision and scale (for decimal, numeric)
|
|
75
|
+
*/
|
|
76
|
+
precision(precision: number, scale?: number): this;
|
|
77
|
+
/**
|
|
78
|
+
* Define foreign key reference
|
|
79
|
+
*/
|
|
80
|
+
references(table: string, column?: string): this;
|
|
81
|
+
/**
|
|
82
|
+
* Set custom type mapper for bidirectional transformation
|
|
83
|
+
*/
|
|
84
|
+
mapWith<TData = TType, TDriver = any>(mapper: TypeMapper<TData, TDriver>): ColumnBuilder<TData>;
|
|
85
|
+
/**
|
|
86
|
+
* Get the final column configuration
|
|
87
|
+
*/
|
|
88
|
+
build(): ColumnConfig;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Column factory functions
|
|
92
|
+
*/
|
|
93
|
+
export declare const integer: (name: string) => ColumnBuilder<number>;
|
|
94
|
+
export declare const serial: (name: string) => ColumnBuilder<number>;
|
|
95
|
+
export declare const bigint: (name: string) => ColumnBuilder<bigint>;
|
|
96
|
+
export declare const bigserial: (name: string) => ColumnBuilder<bigint>;
|
|
97
|
+
export declare const smallint: (name: string) => ColumnBuilder<number>;
|
|
98
|
+
export declare const decimal: (name: string, precision?: number, scale?: number) => ColumnBuilder<number>;
|
|
99
|
+
export declare const numeric: (name: string, precision?: number, scale?: number) => ColumnBuilder<number>;
|
|
100
|
+
export declare const real: (name: string) => ColumnBuilder<number>;
|
|
101
|
+
export declare const doublePrecision: (name: string) => ColumnBuilder<number>;
|
|
102
|
+
export declare const varchar: (name: string, length?: number) => ColumnBuilder<string>;
|
|
103
|
+
export declare const char: (name: string, length?: number) => ColumnBuilder<string>;
|
|
104
|
+
export declare const text: (name: string) => ColumnBuilder<string>;
|
|
105
|
+
export declare const boolean: (name: string) => ColumnBuilder<boolean>;
|
|
106
|
+
export declare const timestamp: (name: string) => ColumnBuilder<Date>;
|
|
107
|
+
export declare const timestamptz: (name: string) => ColumnBuilder<Date>;
|
|
108
|
+
export declare const date: (name: string) => ColumnBuilder<Date>;
|
|
109
|
+
export declare const time: (name: string) => ColumnBuilder<string>;
|
|
110
|
+
export declare const uuid: (name: string) => ColumnBuilder<string>;
|
|
111
|
+
export declare const json: (name: string) => ColumnBuilder<any>;
|
|
112
|
+
export declare const jsonb: (name: string) => ColumnBuilder<any>;
|
|
113
|
+
export declare const bytea: (name: string) => ColumnBuilder<Buffer<ArrayBufferLike>>;
|
|
114
|
+
/**
|
|
115
|
+
* Create an ENUM column
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* import { pgEnum, enumColumn } from 'linkgress-orm';
|
|
119
|
+
*
|
|
120
|
+
* const statusEnum = pgEnum('order_status', ['pending', 'processing', 'completed', 'cancelled'] as const);
|
|
121
|
+
* entity.property(e => e.status).hasType(enumColumn('status', statusEnum));
|
|
122
|
+
*/
|
|
123
|
+
export declare function enumColumn<T extends {
|
|
124
|
+
name: string;
|
|
125
|
+
values: readonly string[];
|
|
126
|
+
}>(columnName: string, enumDef: T): ColumnBuilder<T['values'][number]>;
|
|
127
|
+
//# sourceMappingURL=column-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-builder.d.ts","sourceRoot":"","sources":["../../src/schema/column-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bytea = exports.jsonb = exports.json = exports.uuid = exports.time = exports.date = exports.timestamptz = exports.timestamp = exports.boolean = exports.text = exports.char = exports.varchar = exports.doublePrecision = exports.real = exports.numeric = exports.decimal = exports.smallint = exports.bigserial = exports.bigint = exports.serial = exports.integer = exports.ColumnBuilder = void 0;
|
|
4
|
+
exports.enumColumn = enumColumn;
|
|
5
|
+
/**
|
|
6
|
+
* Column builder - fluent API for defining columns
|
|
7
|
+
*/
|
|
8
|
+
class ColumnBuilder {
|
|
9
|
+
constructor(name, type) {
|
|
10
|
+
this.config = {
|
|
11
|
+
name,
|
|
12
|
+
type,
|
|
13
|
+
nullable: true,
|
|
14
|
+
primaryKey: false,
|
|
15
|
+
autoIncrement: false,
|
|
16
|
+
unique: false,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Mark column as NOT NULL
|
|
21
|
+
*/
|
|
22
|
+
notNull() {
|
|
23
|
+
this.config.nullable = false;
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Mark column as PRIMARY KEY
|
|
28
|
+
*/
|
|
29
|
+
primaryKey() {
|
|
30
|
+
this.config.primaryKey = true;
|
|
31
|
+
this.config.nullable = false;
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Mark column as AUTO INCREMENT
|
|
36
|
+
*/
|
|
37
|
+
autoIncrement() {
|
|
38
|
+
this.config.autoIncrement = true;
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Mark column as GENERATED ALWAYS AS IDENTITY (modern PostgreSQL identity columns)
|
|
43
|
+
* This is the preferred way over serial/bigserial for auto-incrementing primary keys
|
|
44
|
+
*/
|
|
45
|
+
generatedAlwaysAsIdentity(options) {
|
|
46
|
+
this.config.autoIncrement = true;
|
|
47
|
+
this.config.identity = options || {};
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Mark column as UNIQUE
|
|
52
|
+
*/
|
|
53
|
+
unique() {
|
|
54
|
+
this.config.unique = true;
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Set default value
|
|
59
|
+
*/
|
|
60
|
+
default(value) {
|
|
61
|
+
this.config.default = value;
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Set column length (for varchar, char)
|
|
66
|
+
*/
|
|
67
|
+
length(value) {
|
|
68
|
+
this.config.length = value;
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Set precision and scale (for decimal, numeric)
|
|
73
|
+
*/
|
|
74
|
+
precision(precision, scale) {
|
|
75
|
+
this.config.precision = precision;
|
|
76
|
+
this.config.scale = scale;
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Define foreign key reference
|
|
81
|
+
*/
|
|
82
|
+
references(table, column = 'id') {
|
|
83
|
+
this.config.references = { table, column };
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Set custom type mapper for bidirectional transformation
|
|
88
|
+
*/
|
|
89
|
+
mapWith(mapper) {
|
|
90
|
+
this.config.mapper = mapper;
|
|
91
|
+
// If mapper provides dataType, update the column type
|
|
92
|
+
if (mapper.dataType) {
|
|
93
|
+
this.config.type = mapper.dataType();
|
|
94
|
+
}
|
|
95
|
+
return this;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get the final column configuration
|
|
99
|
+
*/
|
|
100
|
+
build() {
|
|
101
|
+
return this.config;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.ColumnBuilder = ColumnBuilder;
|
|
105
|
+
/**
|
|
106
|
+
* Column factory functions
|
|
107
|
+
*/
|
|
108
|
+
const integer = (name) => new ColumnBuilder(name, 'integer');
|
|
109
|
+
exports.integer = integer;
|
|
110
|
+
const serial = (name) => new ColumnBuilder(name, 'serial').autoIncrement();
|
|
111
|
+
exports.serial = serial;
|
|
112
|
+
const bigint = (name) => new ColumnBuilder(name, 'bigint');
|
|
113
|
+
exports.bigint = bigint;
|
|
114
|
+
const bigserial = (name) => new ColumnBuilder(name, 'bigserial').autoIncrement();
|
|
115
|
+
exports.bigserial = bigserial;
|
|
116
|
+
const smallint = (name) => new ColumnBuilder(name, 'smallint');
|
|
117
|
+
exports.smallint = smallint;
|
|
118
|
+
const decimal = (name, precision, scale) => {
|
|
119
|
+
const builder = new ColumnBuilder(name, 'decimal');
|
|
120
|
+
if (precision)
|
|
121
|
+
builder.precision(precision, scale);
|
|
122
|
+
return builder;
|
|
123
|
+
};
|
|
124
|
+
exports.decimal = decimal;
|
|
125
|
+
const numeric = (name, precision, scale) => {
|
|
126
|
+
const builder = new ColumnBuilder(name, 'numeric');
|
|
127
|
+
if (precision)
|
|
128
|
+
builder.precision(precision, scale);
|
|
129
|
+
return builder;
|
|
130
|
+
};
|
|
131
|
+
exports.numeric = numeric;
|
|
132
|
+
const real = (name) => new ColumnBuilder(name, 'real');
|
|
133
|
+
exports.real = real;
|
|
134
|
+
const doublePrecision = (name) => new ColumnBuilder(name, 'double precision');
|
|
135
|
+
exports.doublePrecision = doublePrecision;
|
|
136
|
+
const varchar = (name, length) => {
|
|
137
|
+
const builder = new ColumnBuilder(name, 'varchar');
|
|
138
|
+
if (length)
|
|
139
|
+
builder.length(length);
|
|
140
|
+
return builder;
|
|
141
|
+
};
|
|
142
|
+
exports.varchar = varchar;
|
|
143
|
+
const char = (name, length) => {
|
|
144
|
+
const builder = new ColumnBuilder(name, 'char');
|
|
145
|
+
if (length)
|
|
146
|
+
builder.length(length);
|
|
147
|
+
return builder;
|
|
148
|
+
};
|
|
149
|
+
exports.char = char;
|
|
150
|
+
const text = (name) => new ColumnBuilder(name, 'text');
|
|
151
|
+
exports.text = text;
|
|
152
|
+
const boolean = (name) => new ColumnBuilder(name, 'boolean');
|
|
153
|
+
exports.boolean = boolean;
|
|
154
|
+
const timestamp = (name) => new ColumnBuilder(name, 'timestamp');
|
|
155
|
+
exports.timestamp = timestamp;
|
|
156
|
+
const timestamptz = (name) => new ColumnBuilder(name, 'timestamptz');
|
|
157
|
+
exports.timestamptz = timestamptz;
|
|
158
|
+
const date = (name) => new ColumnBuilder(name, 'date');
|
|
159
|
+
exports.date = date;
|
|
160
|
+
const time = (name) => new ColumnBuilder(name, 'time');
|
|
161
|
+
exports.time = time;
|
|
162
|
+
const uuid = (name) => new ColumnBuilder(name, 'uuid');
|
|
163
|
+
exports.uuid = uuid;
|
|
164
|
+
const json = (name) => new ColumnBuilder(name, 'json');
|
|
165
|
+
exports.json = json;
|
|
166
|
+
const jsonb = (name) => new ColumnBuilder(name, 'jsonb');
|
|
167
|
+
exports.jsonb = jsonb;
|
|
168
|
+
const bytea = (name) => new ColumnBuilder(name, 'bytea');
|
|
169
|
+
exports.bytea = bytea;
|
|
170
|
+
/**
|
|
171
|
+
* Create an ENUM column
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* import { pgEnum, enumColumn } from 'linkgress-orm';
|
|
175
|
+
*
|
|
176
|
+
* const statusEnum = pgEnum('order_status', ['pending', 'processing', 'completed', 'cancelled'] as const);
|
|
177
|
+
* entity.property(e => e.status).hasType(enumColumn('status', statusEnum));
|
|
178
|
+
*/
|
|
179
|
+
function enumColumn(columnName, enumDef) {
|
|
180
|
+
const builder = new ColumnBuilder(columnName, enumDef.name);
|
|
181
|
+
builder.config.enumTypeName = enumDef.name;
|
|
182
|
+
return builder;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=column-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-builder.js","sourceRoot":"","sources":["../../src/schema/column-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { TableBuilder, TableSchema, InferColumnType } from './table-builder';
|
|
2
|
+
import { CollectionQueryBuilder } from '../query/query-builder';
|
|
3
|
+
/**
|
|
4
|
+
* Infer the complete row type including columns and navigation properties
|
|
5
|
+
*/
|
|
6
|
+
export type InferRowType<TBuilder extends TableBuilder<any>> = TBuilder extends TableBuilder<infer TColumns> ? InferRowTypeFromSchema<ReturnType<TBuilder['build']>> : never;
|
|
7
|
+
/**
|
|
8
|
+
* Infer row type from built schema
|
|
9
|
+
*/
|
|
10
|
+
type InferRowTypeFromSchema<TSchema extends TableSchema> = {
|
|
11
|
+
readonly [K in keyof TSchema['columns']]: K;
|
|
12
|
+
} & {
|
|
13
|
+
readonly [K in keyof TSchema['relations']]: TSchema['relations'][K]['type'] extends 'many' ? CollectionQueryBuilder<any> : any;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Extract data type from columns
|
|
17
|
+
*/
|
|
18
|
+
export type InferDataType<TBuilder extends TableBuilder<any>> = TBuilder extends TableBuilder<infer TColumns> ? {
|
|
19
|
+
[K in keyof TColumns]: InferColumnType<TColumns[K]>;
|
|
20
|
+
} : never;
|
|
21
|
+
/**
|
|
22
|
+
* Create typed row for a specific table builder
|
|
23
|
+
*/
|
|
24
|
+
export type TypedTableRow<TBuilder extends TableBuilder<any>> = InferRowType<TBuilder>;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=inference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inference.d.ts","sourceRoot":"","sources":["../../src/schema/inference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,QAAQ,SAAS,YAAY,CAAC,GAAG,CAAC,IACzD,QAAQ,SAAS,YAAY,CAAC,MAAM,QAAQ,CAAC,GACzC,sBAAsB,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GACrD,KAAK,CAAC;AAEZ;;GAEG;AACH,KAAK,sBAAsB,CAAC,OAAO,SAAS,WAAW,IAAI;IACzD,QAAQ,EAAE,CAAC,IAAI,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;CAC5C,GAAG;IACF,QAAQ,EAAE,CAAC,IAAI,MAAM,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,MAAM,GACtF,sBAAsB,CAAC,GAAG,CAAC,GAC3B,GAAG;CACR,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,QAAQ,SAAS,YAAY,CAAC,GAAG,CAAC,IAC1D,QAAQ,SAAS,YAAY,CAAC,MAAM,QAAQ,CAAC,GACzC;KACG,CAAC,IAAI,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;CACpD,GACD,KAAK,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,QAAQ,SAAS,YAAY,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inference.js","sourceRoot":"","sources":["../../src/schema/inference.ts"],"names":[],"mappings":""}
|