@spinajs/orm-mssql 1.2.79

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/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # `@spinajs/orm-sql`
2
+
3
+ > TODO: description
4
+
5
+ ## Usage
6
+
7
+ ```
8
+ const ormSql = require('@spinajs/orm-sql');
9
+
10
+ // TODO: DEMONSTRATE API
11
+ ```
@@ -0,0 +1,50 @@
1
+ import { IContainer } from '@spinajs/di';
2
+ import { TableExistsCompiler, TableExistsQueryBuilder, ICompilerOutput, ColumnQueryBuilder, TableAliasCompiler, IQueryBuilder, OnDuplicateQueryBuilder, InsertQueryBuilder } from '@spinajs/orm';
3
+ import { SqlColumnQueryCompiler, SqlDeleteQueryCompiler, SqlInsertQueryCompiler, SqlLimitQueryCompiler, SqlOrderByQueryCompiler, SqlTableQueryCompiler, SqlOnDuplicateQueryCompiler } from '@spinajs/orm-sql';
4
+ export declare class MsSqlOnDuplicateQueryCompiler extends SqlOnDuplicateQueryCompiler {
5
+ protected _builder: OnDuplicateQueryBuilder;
6
+ compile(): {
7
+ bindings: any[];
8
+ expression: string;
9
+ };
10
+ }
11
+ export declare class MsSqlInsertQueryCompiler extends SqlInsertQueryCompiler {
12
+ protected isDuplicate: boolean;
13
+ constructor(container: IContainer, builder: InsertQueryBuilder);
14
+ compile(): {
15
+ bindings: any[];
16
+ expression: string;
17
+ };
18
+ protected into(): string;
19
+ }
20
+ export declare class MsSqlTableExistsCompiler implements TableExistsCompiler {
21
+ protected builder: TableExistsQueryBuilder;
22
+ constructor(builder: TableExistsQueryBuilder);
23
+ compile(): ICompilerOutput;
24
+ }
25
+ export declare class MsSqlLimitCompiler extends SqlLimitQueryCompiler {
26
+ compile(): ICompilerOutput;
27
+ }
28
+ export declare class MsSqlOrderByCompiler extends SqlOrderByQueryCompiler {
29
+ compile(): ICompilerOutput;
30
+ }
31
+ export declare class MsSqlTableQueryCompiler extends SqlTableQueryCompiler {
32
+ compile(): ICompilerOutput;
33
+ protected _columns(): string;
34
+ protected _foreignKeys(): string;
35
+ protected _table(): string;
36
+ }
37
+ export declare class MsSqlColumnQueryCompiler extends SqlColumnQueryCompiler {
38
+ protected builder: ColumnQueryBuilder;
39
+ constructor(builder: ColumnQueryBuilder);
40
+ }
41
+ export declare class MsSqlDeleteQueryCompiler extends SqlDeleteQueryCompiler {
42
+ compile(): {
43
+ bindings: any[];
44
+ expression: string;
45
+ };
46
+ protected from(): string;
47
+ }
48
+ export declare class MsSqlTableAliasCompiler implements TableAliasCompiler {
49
+ compile(builder: IQueryBuilder, tbl?: string): string;
50
+ }
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.MsSqlTableAliasCompiler = exports.MsSqlDeleteQueryCompiler = exports.MsSqlColumnQueryCompiler = exports.MsSqlTableQueryCompiler = exports.MsSqlOrderByCompiler = exports.MsSqlLimitCompiler = exports.MsSqlTableExistsCompiler = exports.MsSqlInsertQueryCompiler = exports.MsSqlOnDuplicateQueryCompiler = void 0;
16
+ const configuration_1 = require("@spinajs/configuration");
17
+ const di_1 = require("@spinajs/di");
18
+ const orm_1 = require("@spinajs/orm");
19
+ const orm_sql_1 = require("@spinajs/orm-sql");
20
+ const lodash_1 = __importDefault(require("lodash"));
21
+ let MsSqlOnDuplicateQueryCompiler = class MsSqlOnDuplicateQueryCompiler extends orm_sql_1.SqlOnDuplicateQueryCompiler {
22
+ compile() {
23
+ const table = this._builder.getParent().Container.resolve(orm_1.TableAliasCompiler).compile(this._builder.getParent());
24
+ const descriptor = (0, orm_1.extractModelDescriptor)(this._builder.getParent().Model);
25
+ if (this._builder.getColumn().length === 0) {
26
+ throw new orm_1.OrmException(`no unique columns defined in table ${this._builder.getParent().Table}`);
27
+ }
28
+ const columns = this._builder
29
+ .getColumnsToUpdate()
30
+ .map((c) => {
31
+ if (lodash_1.default.isString(c)) {
32
+ return `\`${c}\` = ?`;
33
+ }
34
+ else {
35
+ return c.Query;
36
+ }
37
+ })
38
+ .join(',');
39
+ const valueMap = this._builder
40
+ .getParent()
41
+ .getColumns()
42
+ .map((c) => c.Column);
43
+ const bindings = this._builder.getColumnsToUpdate().map((c) => {
44
+ if (lodash_1.default.isString(c)) {
45
+ return this._builder.getParent().Values[0][valueMap.indexOf(c)];
46
+ }
47
+ else {
48
+ return c.Bindings;
49
+ }
50
+ });
51
+ const wBindings = this._builder.getColumn().map((c) => {
52
+ return this._builder.getParent().Values[0][valueMap.indexOf(c)];
53
+ });
54
+ return {
55
+ bindings: wBindings.concat(bindings),
56
+ expression: `MERGE INTO ${table} WITH (HOLDLOCK) AS target
57
+ USING (SELECT * FROM ${table} WHERE ${this._builder.getColumn().map((c) => {
58
+ return `${c} = ?`;
59
+ })}) as source
60
+ ON (target.${descriptor.PrimaryKey} = source.${descriptor.PrimaryKey})
61
+ WHEN MATCHED
62
+ THEN UPDATE
63
+ SET ${columns}
64
+ WHEN NOT MATCHED
65
+ THEN `.replace(/(\r\n|\n|\r)/gm, ''),
66
+ };
67
+ }
68
+ };
69
+ MsSqlOnDuplicateQueryCompiler = __decorate([
70
+ (0, di_1.NewInstance)()
71
+ ], MsSqlOnDuplicateQueryCompiler);
72
+ exports.MsSqlOnDuplicateQueryCompiler = MsSqlOnDuplicateQueryCompiler;
73
+ let MsSqlInsertQueryCompiler = class MsSqlInsertQueryCompiler extends orm_sql_1.SqlInsertQueryCompiler {
74
+ constructor(container, builder) {
75
+ super(container, builder);
76
+ this.isDuplicate = false;
77
+ this.isDuplicate = this._builder.DuplicateQueryBuilder !== null && this._builder.DuplicateQueryBuilder !== undefined;
78
+ }
79
+ compile() {
80
+ if (this._builder.Ignore) {
81
+ throw new orm_1.OrmException(`mssql insert or ignore is not supported`);
82
+ }
83
+ const into = this.into();
84
+ const columns = this.columns();
85
+ const values = this.values();
86
+ const iBindings = values.bindings;
87
+ const iExpression = `${into} ${columns} ${values.data}`;
88
+ const dResult = super.upsort();
89
+ return {
90
+ bindings: dResult.bindings.concat(iBindings),
91
+ expression: dResult.expression + iExpression + '; SELECT SCOPE_IDENTITY() as ID;',
92
+ };
93
+ }
94
+ into() {
95
+ return `INSERT ${this.isDuplicate ? '' : `INTO ${this._container.resolve(orm_1.TableAliasCompiler).compile(this._builder)}`} `;
96
+ }
97
+ };
98
+ MsSqlInsertQueryCompiler = __decorate([
99
+ (0, di_1.NewInstance)(),
100
+ __metadata("design:paramtypes", [Object, orm_1.InsertQueryBuilder])
101
+ ], MsSqlInsertQueryCompiler);
102
+ exports.MsSqlInsertQueryCompiler = MsSqlInsertQueryCompiler;
103
+ let MsSqlTableExistsCompiler = class MsSqlTableExistsCompiler {
104
+ constructor(builder) {
105
+ this.builder = builder;
106
+ if (builder === null) {
107
+ throw new Error('table exists query builder cannot be null');
108
+ }
109
+ }
110
+ compile() {
111
+ const bindings = [this.builder.Table];
112
+ let expression = '';
113
+ if (this.builder.Database) {
114
+ bindings.push(this.builder.Database);
115
+ expression = `SELECT * FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=? AND TABLE_CATALOG=? ORDER BY TABLE_NAME OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY`;
116
+ }
117
+ else {
118
+ expression = `SELECT * FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=? ORDER BY TABLE_NAME OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY`;
119
+ }
120
+ return {
121
+ bindings,
122
+ expression,
123
+ };
124
+ }
125
+ };
126
+ MsSqlTableExistsCompiler = __decorate([
127
+ (0, di_1.NewInstance)(),
128
+ __metadata("design:paramtypes", [orm_1.TableExistsQueryBuilder])
129
+ ], MsSqlTableExistsCompiler);
130
+ exports.MsSqlTableExistsCompiler = MsSqlTableExistsCompiler;
131
+ let MsSqlLimitCompiler = class MsSqlLimitCompiler extends orm_sql_1.SqlLimitQueryCompiler {
132
+ compile() {
133
+ const limits = this._builder.getLimits();
134
+ const bindings = [];
135
+ let stmt = '';
136
+ if (limits.limit > 0) {
137
+ stmt += ` OFFSET ? ROWS`;
138
+ bindings.push(Math.max(limits.offset, 0));
139
+ stmt += ` FETCH NEXT ? ROWS ONLY`;
140
+ bindings.push(limits.limit);
141
+ }
142
+ return {
143
+ bindings,
144
+ expression: stmt,
145
+ };
146
+ }
147
+ };
148
+ MsSqlLimitCompiler = __decorate([
149
+ (0, di_1.NewInstance)()
150
+ ], MsSqlLimitCompiler);
151
+ exports.MsSqlLimitCompiler = MsSqlLimitCompiler;
152
+ let MsSqlOrderByCompiler = class MsSqlOrderByCompiler extends orm_sql_1.SqlOrderByQueryCompiler {
153
+ compile() {
154
+ const sort = this._builder.getSort();
155
+ let stmt = '';
156
+ const bindings = [];
157
+ if (sort) {
158
+ stmt = ` ORDER BY \`${sort.column}\` ${sort.order.toLowerCase() === 'asc' ? 'ASC' : 'DESC'}`;
159
+ }
160
+ return {
161
+ bindings,
162
+ expression: stmt,
163
+ };
164
+ }
165
+ };
166
+ MsSqlOrderByCompiler = __decorate([
167
+ (0, di_1.NewInstance)()
168
+ ], MsSqlOrderByCompiler);
169
+ exports.MsSqlOrderByCompiler = MsSqlOrderByCompiler;
170
+ let MsSqlTableQueryCompiler = class MsSqlTableQueryCompiler extends orm_sql_1.SqlTableQueryCompiler {
171
+ compile() {
172
+ const _table = this._table();
173
+ const _columns = this._columns();
174
+ const _keys = [this._foreignKeys()];
175
+ const _unique = this.builder.Columns.filter((c) => c.Unique).map((c) => c.Name);
176
+ return {
177
+ bindings: [],
178
+ expression: `${_table} (${_columns} ${_unique.length !== 0 ? `UNIQUE(${_unique.join(',')}) ` : ''} ${_keys.filter((k) => k && k !== '').join(',')})`,
179
+ };
180
+ }
181
+ _columns() {
182
+ return this.builder.Columns.map((c) => {
183
+ const expr = this.container.resolve(orm_1.ColumnQueryCompiler, [c]).compile().expression;
184
+ if (c.PrimaryKey) {
185
+ return expr + ' PRIMARY KEY';
186
+ }
187
+ return expr;
188
+ }).join(',');
189
+ }
190
+ _foreignKeys() {
191
+ return this.builder.ForeignKeys.map((f) => {
192
+ return this.container.resolve(orm_1.ForeignKeyQueryCompiler, [f]).compile().expression;
193
+ }).join(',');
194
+ }
195
+ _table() {
196
+ return `CREATE${this.builder.Temporary ? ' TEMPORARY ' : ' '}TABLE ${this.builder.CheckExists ? 'IF NOT EXISTS ' : ''}${this.container.resolve(orm_1.TableAliasCompiler).compile(this.builder)}`;
197
+ }
198
+ };
199
+ MsSqlTableQueryCompiler = __decorate([
200
+ (0, di_1.NewInstance)()
201
+ ], MsSqlTableQueryCompiler);
202
+ exports.MsSqlTableQueryCompiler = MsSqlTableQueryCompiler;
203
+ let MsSqlColumnQueryCompiler = class MsSqlColumnQueryCompiler extends orm_sql_1.SqlColumnQueryCompiler {
204
+ constructor(builder) {
205
+ super(builder);
206
+ this.builder = builder;
207
+ // MSSQL usess this expression for AUTO_INCREMENT
208
+ this._statementsMappings.autoincrement = () => `IDENTITY(1,1)`;
209
+ }
210
+ };
211
+ MsSqlColumnQueryCompiler = __decorate([
212
+ (0, di_1.NewInstance)(),
213
+ __metadata("design:paramtypes", [orm_1.ColumnQueryBuilder])
214
+ ], MsSqlColumnQueryCompiler);
215
+ exports.MsSqlColumnQueryCompiler = MsSqlColumnQueryCompiler;
216
+ let MsSqlDeleteQueryCompiler = class MsSqlDeleteQueryCompiler extends orm_sql_1.SqlDeleteQueryCompiler {
217
+ compile() {
218
+ const _bindings = [];
219
+ const _from = this.from();
220
+ const _where = this.where(this._builder);
221
+ const _expression = _from + (_where.expression ? ` WHERE ${_where.expression}` : '');
222
+ _bindings.push(..._where.bindings);
223
+ return {
224
+ bindings: _bindings,
225
+ expression: _expression.trim(),
226
+ };
227
+ }
228
+ from() {
229
+ const lBuilder = this._builder;
230
+ const limits = lBuilder.getLimits();
231
+ return `DELETE ${limits.limit > 0 ? `TOP ${limits.limit} ` : ''}FROM ${this._container.resolve(orm_1.TableAliasCompiler).compile(this._builder)}`;
232
+ }
233
+ };
234
+ MsSqlDeleteQueryCompiler = __decorate([
235
+ (0, di_1.NewInstance)()
236
+ ], MsSqlDeleteQueryCompiler);
237
+ exports.MsSqlDeleteQueryCompiler = MsSqlDeleteQueryCompiler;
238
+ let MsSqlTableAliasCompiler = class MsSqlTableAliasCompiler {
239
+ compile(builder, tbl) {
240
+ var _a, _b;
241
+ let table = '';
242
+ if (builder.Database) {
243
+ table += `\`${builder.Database}\`.`;
244
+ }
245
+ if ((_a = builder.Driver.Options.Options) === null || _a === void 0 ? void 0 : _a.Schema) {
246
+ table += `\`${(_b = builder.Driver.Options.Options) === null || _b === void 0 ? void 0 : _b.Schema}\`.`;
247
+ }
248
+ table += `\`${tbl ? tbl : builder.Table}\``;
249
+ if (builder.TableAlias) {
250
+ table += ` as \`${builder.TableAlias}\``;
251
+ }
252
+ return table;
253
+ }
254
+ };
255
+ MsSqlTableAliasCompiler = __decorate([
256
+ (0, di_1.Inject)(configuration_1.Configuration)
257
+ ], MsSqlTableAliasCompiler);
258
+ exports.MsSqlTableAliasCompiler = MsSqlTableAliasCompiler;
259
+ //# sourceMappingURL=compilers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compilers.js","sourceRoot":"","sources":["../src/compilers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { DatetimeValueConverter } from '@spinajs/orm';
2
+ import { DateTime } from 'luxon';
3
+ export declare class MsSqlDatetimeValueConverter extends DatetimeValueConverter {
4
+ toDB(value: Date | DateTime): string;
5
+ fromDB(value: Date): DateTime;
6
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MsSqlDatetimeValueConverter = void 0;
4
+ /* eslint-disable prettier/prettier */
5
+ const orm_1 = require("@spinajs/orm");
6
+ const luxon_1 = require("luxon");
7
+ class MsSqlDatetimeValueConverter extends orm_1.DatetimeValueConverter {
8
+ toDB(value) {
9
+ if (value instanceof Date) {
10
+ return value.toISOString();
11
+ }
12
+ if (value instanceof luxon_1.DateTime) {
13
+ return value.toISO({ includeOffset: false });
14
+ }
15
+ return null;
16
+ }
17
+ fromDB(value) {
18
+ if (!value) {
19
+ return null;
20
+ }
21
+ return luxon_1.DateTime.fromJSDate(value);
22
+ }
23
+ }
24
+ exports.MsSqlDatetimeValueConverter = MsSqlDatetimeValueConverter;
25
+ //# sourceMappingURL=converters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converters.js","sourceRoot":"","sources":["../src/converters.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,sCAAsD;AACtD,iCAAiC;AAEjC,MAAa,2BAA4B,SAAQ,4BAAsB;IAC9D,IAAI,CAAC,KAAsB;QAChC,IAAI,KAAK,YAAY,IAAI,EAAE;YACzB,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;SAC5B;QAED,IAAI,KAAK,YAAY,gBAAQ,EAAE;YAC7B,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;SAC9C;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM,CAAC,KAAW;QACvB,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,IAAI,CAAC;SACb;QAED,OAAO,gBAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;CACF;AApBD,kEAoBC"}
@@ -0,0 +1,4 @@
1
+ import { ModelBase, StandardModelDehydrator } from '@spinajs/orm';
2
+ export declare class MssqlModelDehydrator extends StandardModelDehydrator {
3
+ dehydrate(model: ModelBase): {};
4
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MssqlModelDehydrator = void 0;
4
+ const orm_1 = require("@spinajs/orm");
5
+ class MssqlModelDehydrator extends orm_1.StandardModelDehydrator {
6
+ dehydrate(model) {
7
+ const obj = super.dehydrate(model);
8
+ const pColumn = model.ModelDescriptor.Columns.find((c) => c.PrimaryKey);
9
+ // MSSQL do not allow for NULL when inserting with primary key
10
+ if (pColumn && !obj[pColumn.Name]) {
11
+ delete obj[pColumn.Name];
12
+ }
13
+ return obj;
14
+ }
15
+ }
16
+ exports.MssqlModelDehydrator = MssqlModelDehydrator;
17
+ //# sourceMappingURL=dehydrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dehydrator.js","sourceRoot":"","sources":["../src/dehydrator.ts"],"names":[],"mappings":";;;AAAA,sCAAkE;AAElE,MAAa,oBAAqB,SAAQ,6BAAuB;IACxD,SAAS,CAAC,KAAgB;QAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAExE,8DAA8D;QAC9D,IAAI,OAAO,IAAI,CAAE,GAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC1C,OAAQ,GAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACnC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAZD,oDAYC"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ import { QueryContext, OrmDriver, IColumnDescriptor, QueryBuilder, TransactionCallback } from '@spinajs/orm';
2
+ import { SqlDriver } from '@spinajs/orm-sql';
3
+ import { ConnectionPool, Request } from 'mssql';
4
+ export declare class MsSqlOrmDriver extends SqlDriver {
5
+ protected _connectionPool: ConnectionPool;
6
+ protected _executionId: number;
7
+ protected _transactionRequest: Request;
8
+ execute(stmt: string, params: any[], context: QueryContext): Promise<any>;
9
+ ping(): Promise<boolean>;
10
+ connect(): Promise<OrmDriver>;
11
+ resolve(): void;
12
+ disconnect(): Promise<OrmDriver>;
13
+ tableInfo(name: string, schema?: string): Promise<IColumnDescriptor[]>;
14
+ transaction(queryOrCallback?: QueryBuilder[] | TransactionCallback): Promise<void>;
15
+ }
package/lib/index.js ADDED
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MsSqlOrmDriver = void 0;
10
+ const orm_1 = require("@spinajs/orm");
11
+ /* eslint-disable security/detect-object-injection */
12
+ const di_1 = require("@spinajs/di");
13
+ const log_common_1 = require("@spinajs/log-common");
14
+ const orm_sql_1 = require("@spinajs/orm-sql");
15
+ const mssql_1 = require("mssql");
16
+ const compilers_1 = require("./compilers");
17
+ const dehydrator_1 = require("./dehydrator");
18
+ const converters_1 = require("./converters");
19
+ let MsSqlOrmDriver = class MsSqlOrmDriver extends orm_sql_1.SqlDriver {
20
+ constructor() {
21
+ super(...arguments);
22
+ this._connectionPool = null;
23
+ this._executionId = 0;
24
+ this._transactionRequest = null;
25
+ }
26
+ async execute(stmt, params, context) {
27
+ var _a;
28
+ const tName = `query-${this._executionId++}`;
29
+ let finalQuery = stmt.replaceAll('`', '');
30
+ this.Log.timeStart(`query-${tName}`);
31
+ try {
32
+ const req = (_a = this._transactionRequest) !== null && _a !== void 0 ? _a : this._connectionPool.request();
33
+ let idx = 0;
34
+ let i = 0;
35
+ /**
36
+ * Brute force replacement ? for @parameters
37
+ * MSSQL driver requires named parameters in query string
38
+ */
39
+ while ((idx = finalQuery.indexOf('?')) !== -1) {
40
+ finalQuery = finalQuery.substring(0, idx) + `@p${i}` + finalQuery.substring(idx + 1, finalQuery.length);
41
+ req.input(`p${i}`, params[i]);
42
+ i++;
43
+ }
44
+ const result = await req.query(finalQuery);
45
+ const tDiff = this.Log.timeEnd(`query-${tName}`);
46
+ void this.Log.write({
47
+ Level: log_common_1.LogLevel.Trace,
48
+ Variables: {
49
+ error: null,
50
+ message: `Executed: ${finalQuery}, bindings: ${params ? params.join(',') : 'none'}`,
51
+ logger: this.Log.Name,
52
+ level: 'TRACE',
53
+ duration: tDiff,
54
+ },
55
+ });
56
+ switch (context) {
57
+ case orm_1.QueryContext.Update:
58
+ case orm_1.QueryContext.Delete:
59
+ return {
60
+ RowsAffected: result.rowsAffected[0],
61
+ };
62
+ case orm_1.QueryContext.Insert:
63
+ return {
64
+ RowsAffected: result.rowsAffected[0],
65
+ LastInsertId: result.recordset[0].ID,
66
+ };
67
+ default:
68
+ return result.recordset;
69
+ }
70
+ }
71
+ catch (err) {
72
+ const tDiff = this.Log.timeEnd(`query-${tName}`);
73
+ void this.Log.write({
74
+ Level: log_common_1.LogLevel.Error,
75
+ Variables: {
76
+ error: err,
77
+ message: `Failed: ${finalQuery}, bindings: ${params ? params.join(',') : 'none'}`,
78
+ logger: this.Log.Name,
79
+ level: 'Error',
80
+ duration: tDiff,
81
+ },
82
+ });
83
+ throw err;
84
+ }
85
+ }
86
+ async ping() {
87
+ try {
88
+ await this.execute('SELECT 1', [], orm_1.QueryContext.Select);
89
+ return true;
90
+ }
91
+ catch (_a) {
92
+ return false;
93
+ }
94
+ }
95
+ async connect() {
96
+ var _a, _b, _c;
97
+ this._connectionPool = await (0, mssql_1.connect)({
98
+ user: this.Options.User,
99
+ password: this.Options.Password,
100
+ database: this.Options.Database,
101
+ server: this.Options.Host,
102
+ options: {
103
+ trustServerCertificate: (_b = (_a = this.Options.Options) === null || _a === void 0 ? void 0 : _a.TrustServerCertificate) !== null && _b !== void 0 ? _b : true,
104
+ },
105
+ pool: {
106
+ max: (_c = this.Options.PoolLimit) !== null && _c !== void 0 ? _c : 10,
107
+ min: 0,
108
+ idleTimeoutMillis: 3000,
109
+ },
110
+ });
111
+ await this.execute(`USE ${this.Options.Database}`, [], orm_1.QueryContext.Schema);
112
+ return this;
113
+ }
114
+ resolve() {
115
+ super.resolve();
116
+ this.Container.register(compilers_1.MsSqlTableExistsCompiler).as(orm_1.TableExistsCompiler);
117
+ this.Container.register(compilers_1.MsSqlLimitCompiler).as(orm_1.LimitQueryCompiler);
118
+ this.Container.register(compilers_1.MsSqlOrderByCompiler).as(orm_1.OrderByQueryCompiler);
119
+ this.Container.register(compilers_1.MsSqlTableQueryCompiler).as(orm_1.TableQueryCompiler);
120
+ this.Container.register(compilers_1.MsSqlColumnQueryCompiler).as(orm_1.ColumnQueryCompiler);
121
+ this.Container.register(compilers_1.MsSqlInsertQueryCompiler).as(orm_1.InsertQueryCompiler);
122
+ this.Container.register(compilers_1.MsSqlDeleteQueryCompiler).as(orm_1.DeleteQueryCompiler);
123
+ this.Container.register(dehydrator_1.MssqlModelDehydrator).as(orm_1.ModelDehydrator);
124
+ this.Container.register(compilers_1.MsSqlTableAliasCompiler).as(orm_1.TableAliasCompiler);
125
+ this.Container.register(converters_1.MsSqlDatetimeValueConverter).as(orm_1.DatetimeValueConverter);
126
+ this.Container.register(compilers_1.MsSqlOnDuplicateQueryCompiler).as(orm_1.OnDuplicateQueryCompiler);
127
+ }
128
+ async disconnect() {
129
+ await this._connectionPool.close();
130
+ return this;
131
+ }
132
+ async tableInfo(name, schema) {
133
+ const tblInfo = (await this.execute(`SELECT * FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=? ${schema ? 'AND TABLE_CATALOG=?' : ''}`, schema ? [name, schema] : [name], orm_1.QueryContext.Select));
134
+ if (!tblInfo || !Array.isArray(tblInfo) || tblInfo.length === 0) {
135
+ return null;
136
+ }
137
+ const indexList = (await this.execute(`select C.COLUMN_NAME,T.CONSTRAINT_TYPE FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS T JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE C ON C.CONSTRAINT_NAME=T.CONSTRAINT_NAME WHERE C.TABLE_NAME=? ${schema ? ' AND c.TABLE_CATALOG=?' : ''}`, schema ? [name, schema] : [name], orm_1.QueryContext.Select));
138
+ return tblInfo.map((r) => {
139
+ const isPrimary = indexList.find((c) => c.CONSTRAINT_TYPE === 'PRIMARY KEY' && c.COLUMN_NAME === r.COLUMN_NAME) !== undefined;
140
+ const sUnique = indexList.find((c) => c.CONSTRAINT_TYPE === 'UNIQUE' && c.COLUMN_NAME === r.COLUMN_NAME) !== undefined;
141
+ return {
142
+ Type: r.DATA_TYPE,
143
+ MaxLength: -1,
144
+ Comment: '',
145
+ DefaultValue: r.COLUMN_DEFAULT,
146
+ NativeType: r.DATA_TYPE,
147
+ Unsigned: false,
148
+ Nullable: r.IS_NULLABLE,
149
+ PrimaryKey: isPrimary,
150
+ Uuid: false,
151
+ Ignore: false,
152
+ // simply assumpt that integer pkeys are autoincement / auto fill by default
153
+ AutoIncrement: isPrimary && r.DATA_TYPE === 'int',
154
+ Name: r.COLUMN_NAME,
155
+ Converter: null,
156
+ Schema: schema ? schema : this.Options.Database,
157
+ Unique: sUnique,
158
+ };
159
+ });
160
+ }
161
+ async transaction(queryOrCallback) {
162
+ if (!queryOrCallback) {
163
+ return;
164
+ }
165
+ const transaction = this._connectionPool.transaction();
166
+ await transaction.begin();
167
+ this._transactionRequest = transaction.request();
168
+ try {
169
+ if (Array.isArray(queryOrCallback)) {
170
+ for (const q of queryOrCallback) {
171
+ await q;
172
+ }
173
+ }
174
+ else {
175
+ await queryOrCallback(this);
176
+ }
177
+ await transaction.commit();
178
+ }
179
+ catch (err) {
180
+ await transaction.rollback();
181
+ throw err;
182
+ }
183
+ finally {
184
+ this._transactionRequest = null;
185
+ }
186
+ }
187
+ };
188
+ MsSqlOrmDriver = __decorate([
189
+ (0, di_1.Injectable)('orm-driver-mssql')
190
+ ], MsSqlOrmDriver);
191
+ exports.MsSqlOrmDriver = MsSqlOrmDriver;
192
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,sCAAsV;AACtV,qDAAqD;AACrD,oCAAyC;AACzC,oDAA+C;AAE/C,8CAA6C;AAC7C,iCAAyD;AAEzD,2CAAgQ;AAChQ,6CAAoD;AACpD,6CAA2D;AAG3D,IAAa,cAAc,GAA3B,MAAa,cAAe,SAAQ,mBAAS;IAA7C;;QACY,oBAAe,GAAmB,IAAI,CAAC;QACvC,iBAAY,GAAG,CAAC,CAAC;QACjB,wBAAmB,GAAY,IAAI,CAAC;IAsLhD,CAAC;IApLQ,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,MAAa,EAAE,OAAqB;;QACrE,MAAM,KAAK,GAAG,SAAS,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QAC7C,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAE1C,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QAErC,IAAI;YACF,MAAM,GAAG,GAAG,MAAA,IAAI,CAAC,mBAAmB,mCAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;YACvE,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,IAAI,CAAC,GAAG,CAAC,CAAC;YAEV;;;eAGG;YACH,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC7C,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;gBACxG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9B,CAAC,EAAE,CAAC;aACL;YAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBAClB,KAAK,EAAE,qBAAQ,CAAC,KAAK;gBACrB,SAAS,EAAE;oBACT,KAAK,EAAE,IAAI;oBACX,OAAO,EAAE,aAAa,UAAU,eAAe,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;oBACnF,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;oBACrB,KAAK,EAAE,OAAO;oBACd,QAAQ,EAAE,KAAK;iBAChB;aACF,CAAC,CAAC;YAEH,QAAQ,OAAO,EAAE;gBACf,KAAK,kBAAY,CAAC,MAAM,CAAC;gBACzB,KAAK,kBAAY,CAAC,MAAM;oBACtB,OAAO;wBACL,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;qBACrC,CAAC;gBACJ,KAAK,kBAAY,CAAC,MAAM;oBACtB,OAAO;wBACL,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;wBACpC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;qBACrC,CAAC;gBACJ;oBACE,OAAO,MAAM,CAAC,SAAS,CAAC;aAC3B;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;YAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBAClB,KAAK,EAAE,qBAAQ,CAAC,KAAK;gBACrB,SAAS,EAAE;oBACT,KAAK,EAAE,GAAG;oBACV,OAAO,EAAE,WAAW,UAAU,eAAe,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;oBACjF,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;oBACrB,KAAK,EAAE,OAAO;oBACd,QAAQ,EAAE,KAAK;iBAChB;aACF,CAAC,CAAC;YAEH,MAAM,GAAG,CAAC;SACX;IACH,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI;YACF,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,EAAE,kBAAY,CAAC,MAAM,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC;SACb;QAAC,WAAM;YACN,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAEM,KAAK,CAAC,OAAO;;QAClB,IAAI,CAAC,eAAe,GAAG,MAAM,IAAA,eAAO,EAAC;YACnC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YACvB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YACzB,OAAO,EAAE;gBACP,sBAAsB,EAAE,MAAC,MAAA,IAAI,CAAC,OAAO,CAAC,OAAO,0CAAE,sBAAkC,mCAAI,IAAI;aAC1F;YACD,IAAI,EAAE;gBACJ,GAAG,EAAE,MAAA,IAAI,CAAC,OAAO,CAAC,SAAS,mCAAI,EAAE;gBACjC,GAAG,EAAE,CAAC;gBACN,iBAAiB,EAAE,IAAI;aACxB;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,kBAAY,CAAC,MAAM,CAAC,CAAC;QAE5E,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,OAAO;QACZ,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,oCAAwB,CAAC,CAAC,EAAE,CAAC,yBAAmB,CAAC,CAAC;QAC1E,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,8BAAkB,CAAC,CAAC,EAAE,CAAC,wBAAkB,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,gCAAoB,CAAC,CAAC,EAAE,CAAC,0BAAoB,CAAC,CAAC;QACvE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,mCAAuB,CAAC,CAAC,EAAE,CAAC,wBAAkB,CAAC,CAAC;QACxE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,oCAAwB,CAAC,CAAC,EAAE,CAAC,yBAAmB,CAAC,CAAC;QAC1E,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,oCAAwB,CAAC,CAAC,EAAE,CAAC,yBAAmB,CAAC,CAAC;QAC1E,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,oCAAwB,CAAC,CAAC,EAAE,CAAC,yBAAmB,CAAC,CAAC;QAC1E,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,iCAAoB,CAAC,CAAC,EAAE,CAAC,qBAAe,CAAC,CAAC;QAClE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,mCAAuB,CAAC,CAAC,EAAE,CAAC,wBAAkB,CAAC,CAAC;QACxE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,wCAA2B,CAAC,CAAC,EAAE,CAAC,4BAAsB,CAAC,CAAC;QAChF,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,yCAA6B,CAAC,CAAC,EAAE,CAAC,8BAAwB,CAAC,CAAC;IACtF,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,MAAe;QAClD,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,+DAA+D,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,kBAAY,CAAC,MAAM,CAAC,CAAuB,CAAC;QAExN,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/D,OAAO,IAAI,CAAC;SACb;QAED,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,oMAAoM,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,kBAAY,CAAC,MAAM,CAAC,CAAiB,CAAC;QAE5V,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAmB,EAAE,EAAE;YACzC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,aAAa,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC;YAC9H,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC;YACvH,OAAO;gBACL,IAAI,EAAE,CAAC,CAAC,SAAS;gBACjB,SAAS,EAAE,CAAC,CAAC;gBACb,OAAO,EAAE,EAAE;gBACX,YAAY,EAAE,CAAC,CAAC,cAAc;gBAC9B,UAAU,EAAE,CAAC,CAAC,SAAS;gBACvB,QAAQ,EAAE,KAAK;gBACf,QAAQ,EAAE,CAAC,CAAC,WAAW;gBACvB,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,KAAK;gBAEb,6EAA6E;gBAC7E,aAAa,EAAE,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK;gBACjD,IAAI,EAAE,CAAC,CAAC,WAAW;gBACnB,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAC/C,MAAM,EAAE,OAAO;aAChB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,eAAsD;QAC7E,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO;SACR;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;QAEvD,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;QAE1B,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;QAEjD,IAAI;YACF,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;gBAClC,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE;oBAC/B,MAAM,CAAC,CAAC;iBACT;aACF;iBAAM;gBACL,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;aAC7B;YAED,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;SAC5B;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,GAAG,CAAC;SACX;gBAAS;YACR,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;SACjC;IACH,CAAC;CACF,CAAA;AAzLY,cAAc;IAD1B,IAAA,eAAU,EAAC,kBAAkB,CAAC;GAClB,cAAc,CAyL1B;AAzLY,wCAAc"}
package/lib/types.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ export interface ITableColumnInfo {
2
+ TABLE_CATALOG: string;
3
+ TABLE_SCHEMA: string;
4
+ TABLE_NAME: string;
5
+ COLUMN_NAME: string;
6
+ ORDINAL_POSITION: number;
7
+ COLUMN_DEFAULT: any | null;
8
+ IS_NULLABLE: boolean;
9
+ DATA_TYPE: string;
10
+ CHARACTER_MAXIMUM_LENGTH: number;
11
+ }
12
+ export interface IIndexInfo {
13
+ TABLE_SCHEMA: string;
14
+ TABLE_NAME: string;
15
+ COLUMN_NAME: string;
16
+ CONSTRAINT_TYPE: string;
17
+ }
package/lib/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/lib/util.d.ts ADDED
File without changes
package/lib/util.js ADDED
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@spinajs/orm-mssql",
3
+ "version": "1.2.79",
4
+ "description": "orm mssql integration",
5
+ "main": "lib/index.js",
6
+ "private": false,
7
+ "scripts": {
8
+ "build": "npm run clean && npm run compile",
9
+ "compile": "tsc -p tsconfig.build.json",
10
+ "clean": "",
11
+ "test": "ts-mocha -p tsconfig.json test/**/*.test.ts",
12
+ "coverage": "nyc npm run test",
13
+ "build-docs": "rimraf docs && typedoc --options typedoc.json src/",
14
+ "prepare": "npm run build",
15
+ "format": "prettier --write \"src/**/*.ts\"",
16
+ "lint": "eslint -c .eslintrc.js --ext .ts src --fix",
17
+ "prepublishOnly": "npm test && npm run lint",
18
+ "preversion": "npm run lint",
19
+ "version": "npm run format && git add -A src",
20
+ "postversion": "git push && git push --tags"
21
+ },
22
+ "files": [
23
+ "lib/**/*"
24
+ ],
25
+ "types": "lib",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/spinajs/main.git"
29
+ },
30
+ "keywords": [
31
+ "di",
32
+ "container",
33
+ "spinajs",
34
+ "di"
35
+ ],
36
+ "author": "SpinaJS <spinajs@coderush.pl> (https://github.com/spinajs/main)",
37
+ "license": "MIT",
38
+ "bugs": {
39
+ "url": "https://github.com/spinajs/main/issues"
40
+ },
41
+ "homepage": "https://github.com/spinajs/main#readme",
42
+ "devDependencies": {
43
+ "@types/mssql": "^7.1.5",
44
+ "chai": "^4.3.6",
45
+ "chai-as-promised": "^7.1.1"
46
+ },
47
+ "dependencies": {
48
+ "@spinajs/configuration": "^1.2.79",
49
+ "@spinajs/di": "^1.2.79",
50
+ "@spinajs/orm": "^1.2.79",
51
+ "@spinajs/orm-sql": "^1.2.79",
52
+ "mssql": "^8.0.2"
53
+ },
54
+ "gitHead": "ae595f5daffb88372496b6e5bf38973f07e33683"
55
+ }