@venizia/ignis-connectors 0.2.0 → 0.2.1-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/common/internal/echo.d.ts +5 -0
- package/dist/cjs/common/internal/echo.d.ts.map +1 -0
- package/dist/cjs/common/internal/echo.js +22 -0
- package/dist/cjs/common/internal/echo.js.map +1 -0
- package/dist/cjs/common/internal/index.d.ts +2 -0
- package/dist/cjs/common/internal/index.d.ts.map +1 -0
- package/dist/cjs/common/internal/index.js +18 -0
- package/dist/cjs/common/internal/index.js.map +1 -0
- package/dist/cjs/relational/core/datasources/base.d.ts.map +1 -1
- package/dist/cjs/relational/core/datasources/base.js +32 -36
- package/dist/cjs/relational/core/datasources/base.js.map +1 -1
- package/dist/cjs/relational/core/datasources/transaction-lifecycle.d.ts +48 -0
- package/dist/cjs/relational/core/datasources/transaction-lifecycle.d.ts.map +1 -0
- package/dist/cjs/relational/core/datasources/transaction-lifecycle.js +85 -0
- package/dist/cjs/relational/core/datasources/transaction-lifecycle.js.map +1 -0
- package/dist/cjs/relational/core/datasources/transaction-state.d.ts +5 -0
- package/dist/cjs/relational/core/datasources/transaction-state.d.ts.map +1 -0
- package/dist/cjs/relational/core/datasources/transaction-state.js +12 -0
- package/dist/cjs/relational/core/datasources/transaction-state.js.map +1 -0
- package/dist/cjs/relational/core/repositories/common/types.d.ts +3 -1
- package/dist/cjs/relational/core/repositories/common/types.d.ts.map +1 -1
- package/dist/cjs/relational/core/repositories/core/base.d.ts +17 -0
- package/dist/cjs/relational/core/repositories/core/base.d.ts.map +1 -1
- package/dist/cjs/relational/core/repositories/core/base.js +69 -0
- package/dist/cjs/relational/core/repositories/core/base.js.map +1 -1
- package/dist/cjs/relational/core/repositories/dialect/filter.d.ts +14 -7
- package/dist/cjs/relational/core/repositories/dialect/filter.d.ts.map +1 -1
- package/dist/cjs/relational/core/repositories/dialect/filter.js +61 -48
- package/dist/cjs/relational/core/repositories/dialect/filter.js.map +1 -1
- package/dist/cjs/relational/core/repositories/dialect/internal/index.d.ts +1 -0
- package/dist/cjs/relational/core/repositories/dialect/internal/index.d.ts.map +1 -1
- package/dist/cjs/relational/core/repositories/dialect/internal/index.js +1 -0
- package/dist/cjs/relational/core/repositories/dialect/internal/index.js.map +1 -1
- package/dist/cjs/relational/core/repositories/dialect/internal/json-utils.d.ts.map +1 -1
- package/dist/cjs/relational/core/repositories/dialect/internal/json-utils.js +2 -1
- package/dist/cjs/relational/core/repositories/dialect/internal/json-utils.js.map +1 -1
- package/dist/cjs/relational/core/repositories/dialect/internal/subquery.d.ts +13 -0
- package/dist/cjs/relational/core/repositories/dialect/internal/subquery.d.ts.map +1 -0
- package/dist/cjs/relational/core/repositories/dialect/internal/subquery.js +22 -0
- package/dist/cjs/relational/core/repositories/dialect/internal/subquery.js.map +1 -0
- package/dist/cjs/relational/core/repositories/dialect/update.d.ts.map +1 -1
- package/dist/cjs/relational/core/repositories/dialect/update.js +8 -7
- package/dist/cjs/relational/core/repositories/dialect/update.js.map +1 -1
- package/dist/cjs/relational/postgres/repositories/dialect/filter.d.ts +4 -1
- package/dist/cjs/relational/postgres/repositories/dialect/filter.d.ts.map +1 -1
- package/dist/cjs/relational/postgres/repositories/dialect/filter.js +36 -9
- package/dist/cjs/relational/postgres/repositories/dialect/filter.js.map +1 -1
- package/dist/cjs/relational/postgres/repositories/dialect/internal/index.d.ts +2 -0
- package/dist/cjs/relational/postgres/repositories/dialect/internal/index.d.ts.map +1 -0
- package/dist/cjs/relational/postgres/repositories/dialect/internal/index.js +18 -0
- package/dist/cjs/relational/postgres/repositories/dialect/internal/index.js.map +1 -0
- package/dist/cjs/relational/postgres/repositories/dialect/internal/json-path.d.ts +9 -0
- package/dist/cjs/relational/postgres/repositories/dialect/internal/json-path.d.ts.map +1 -0
- package/dist/cjs/relational/postgres/repositories/dialect/internal/json-path.js +14 -0
- package/dist/cjs/relational/postgres/repositories/dialect/internal/json-path.js.map +1 -0
- package/dist/cjs/relational/postgres/repositories/dialect/query.d.ts +2 -0
- package/dist/cjs/relational/postgres/repositories/dialect/query.d.ts.map +1 -1
- package/dist/cjs/relational/postgres/repositories/dialect/query.js +3 -0
- package/dist/cjs/relational/postgres/repositories/dialect/query.js.map +1 -1
- package/dist/cjs/relational/postgres/repositories/dialect/update.d.ts.map +1 -1
- package/dist/cjs/relational/postgres/repositories/dialect/update.js +2 -1
- package/dist/cjs/relational/postgres/repositories/dialect/update.js.map +1 -1
- package/dist/cjs/relational/sqlite/repositories/dialect/filter.d.ts +2 -1
- package/dist/cjs/relational/sqlite/repositories/dialect/filter.d.ts.map +1 -1
- package/dist/cjs/relational/sqlite/repositories/dialect/filter.js +10 -4
- package/dist/cjs/relational/sqlite/repositories/dialect/filter.js.map +1 -1
- package/dist/cjs/relational/sqlite/repositories/dialect/internal/json-path.d.ts +9 -6
- package/dist/cjs/relational/sqlite/repositories/dialect/internal/json-path.d.ts.map +1 -1
- package/dist/cjs/relational/sqlite/repositories/dialect/internal/json-path.js +21 -9
- package/dist/cjs/relational/sqlite/repositories/dialect/internal/json-path.js.map +1 -1
- package/dist/cjs/relational/sqlite/repositories/dialect/query.d.ts +2 -0
- package/dist/cjs/relational/sqlite/repositories/dialect/query.d.ts.map +1 -1
- package/dist/cjs/relational/sqlite/repositories/dialect/query.js +3 -0
- package/dist/cjs/relational/sqlite/repositories/dialect/query.js.map +1 -1
- package/dist/cjs/search/core/repositories/common/dialect-helpers.d.ts.map +1 -1
- package/dist/cjs/search/core/repositories/common/dialect-helpers.js +2 -1
- package/dist/cjs/search/core/repositories/common/dialect-helpers.js.map +1 -1
- package/dist/cjs/search/meilisearch/repositories/dialect/query-dialect.d.ts.map +1 -1
- package/dist/cjs/search/meilisearch/repositories/dialect/query-dialect.js +5 -8
- package/dist/cjs/search/meilisearch/repositories/dialect/query-dialect.js.map +1 -1
- package/dist/cjs/search/typesense/repositories/dialect/query-dialect.d.ts.map +1 -1
- package/dist/cjs/search/typesense/repositories/dialect/query-dialect.js +5 -8
- package/dist/cjs/search/typesense/repositories/dialect/query-dialect.js.map +1 -1
- package/dist/cjs/testing/index.d.ts +5 -0
- package/dist/cjs/testing/index.d.ts.map +1 -0
- package/dist/cjs/testing/index.js +22 -0
- package/dist/cjs/testing/index.js.map +1 -0
- package/dist/cjs/testing/transaction-double.d.ts +44 -0
- package/dist/cjs/testing/transaction-double.d.ts.map +1 -0
- package/dist/cjs/testing/transaction-double.js +68 -0
- package/dist/cjs/testing/transaction-double.js.map +1 -0
- package/dist/esm/common/internal/echo.d.ts +5 -0
- package/dist/esm/common/internal/echo.d.ts.map +1 -0
- package/dist/esm/common/internal/echo.js +18 -0
- package/dist/esm/common/internal/echo.js.map +1 -0
- package/dist/esm/common/internal/index.d.ts +2 -0
- package/dist/esm/common/internal/index.d.ts.map +1 -0
- package/dist/esm/common/internal/index.js +2 -0
- package/dist/esm/common/internal/index.js.map +1 -0
- package/dist/esm/relational/core/datasources/base.d.ts.map +1 -1
- package/dist/esm/relational/core/datasources/base.js +32 -36
- package/dist/esm/relational/core/datasources/base.js.map +1 -1
- package/dist/esm/relational/core/datasources/transaction-lifecycle.d.ts +48 -0
- package/dist/esm/relational/core/datasources/transaction-lifecycle.d.ts.map +1 -0
- package/dist/esm/relational/core/datasources/transaction-lifecycle.js +80 -0
- package/dist/esm/relational/core/datasources/transaction-lifecycle.js.map +1 -0
- package/dist/esm/relational/core/datasources/transaction-state.d.ts +5 -0
- package/dist/esm/relational/core/datasources/transaction-state.d.ts.map +1 -0
- package/dist/esm/relational/core/datasources/transaction-state.js +8 -0
- package/dist/esm/relational/core/datasources/transaction-state.js.map +1 -0
- package/dist/esm/relational/core/repositories/common/types.d.ts +3 -1
- package/dist/esm/relational/core/repositories/common/types.d.ts.map +1 -1
- package/dist/esm/relational/core/repositories/core/base.d.ts +17 -0
- package/dist/esm/relational/core/repositories/core/base.d.ts.map +1 -1
- package/dist/esm/relational/core/repositories/core/base.js +69 -0
- package/dist/esm/relational/core/repositories/core/base.js.map +1 -1
- package/dist/esm/relational/core/repositories/dialect/filter.d.ts +14 -7
- package/dist/esm/relational/core/repositories/dialect/filter.d.ts.map +1 -1
- package/dist/esm/relational/core/repositories/dialect/filter.js +56 -43
- package/dist/esm/relational/core/repositories/dialect/filter.js.map +1 -1
- package/dist/esm/relational/core/repositories/dialect/internal/index.d.ts +1 -0
- package/dist/esm/relational/core/repositories/dialect/internal/index.d.ts.map +1 -1
- package/dist/esm/relational/core/repositories/dialect/internal/index.js +1 -0
- package/dist/esm/relational/core/repositories/dialect/internal/index.js.map +1 -1
- package/dist/esm/relational/core/repositories/dialect/internal/json-utils.d.ts.map +1 -1
- package/dist/esm/relational/core/repositories/dialect/internal/json-utils.js +2 -1
- package/dist/esm/relational/core/repositories/dialect/internal/json-utils.js.map +1 -1
- package/dist/esm/relational/core/repositories/dialect/internal/subquery.d.ts +13 -0
- package/dist/esm/relational/core/repositories/dialect/internal/subquery.d.ts.map +1 -0
- package/dist/esm/relational/core/repositories/dialect/internal/subquery.js +18 -0
- package/dist/esm/relational/core/repositories/dialect/internal/subquery.js.map +1 -0
- package/dist/esm/relational/core/repositories/dialect/update.d.ts.map +1 -1
- package/dist/esm/relational/core/repositories/dialect/update.js +3 -2
- package/dist/esm/relational/core/repositories/dialect/update.js.map +1 -1
- package/dist/esm/relational/postgres/repositories/dialect/filter.d.ts +4 -1
- package/dist/esm/relational/postgres/repositories/dialect/filter.d.ts.map +1 -1
- package/dist/esm/relational/postgres/repositories/dialect/filter.js +37 -10
- package/dist/esm/relational/postgres/repositories/dialect/filter.js.map +1 -1
- package/dist/esm/relational/postgres/repositories/dialect/internal/index.d.ts +2 -0
- package/dist/esm/relational/postgres/repositories/dialect/internal/index.d.ts.map +1 -0
- package/dist/esm/relational/postgres/repositories/dialect/internal/index.js +2 -0
- package/dist/esm/relational/postgres/repositories/dialect/internal/index.js.map +1 -0
- package/dist/esm/relational/postgres/repositories/dialect/internal/json-path.d.ts +9 -0
- package/dist/esm/relational/postgres/repositories/dialect/internal/json-path.d.ts.map +1 -0
- package/dist/esm/relational/postgres/repositories/dialect/internal/json-path.js +10 -0
- package/dist/esm/relational/postgres/repositories/dialect/internal/json-path.js.map +1 -0
- package/dist/esm/relational/postgres/repositories/dialect/query.d.ts +2 -0
- package/dist/esm/relational/postgres/repositories/dialect/query.d.ts.map +1 -1
- package/dist/esm/relational/postgres/repositories/dialect/query.js +3 -0
- package/dist/esm/relational/postgres/repositories/dialect/query.js.map +1 -1
- package/dist/esm/relational/postgres/repositories/dialect/update.d.ts.map +1 -1
- package/dist/esm/relational/postgres/repositories/dialect/update.js +2 -1
- package/dist/esm/relational/postgres/repositories/dialect/update.js.map +1 -1
- package/dist/esm/relational/sqlite/repositories/dialect/filter.d.ts +2 -1
- package/dist/esm/relational/sqlite/repositories/dialect/filter.d.ts.map +1 -1
- package/dist/esm/relational/sqlite/repositories/dialect/filter.js +12 -6
- package/dist/esm/relational/sqlite/repositories/dialect/filter.js.map +1 -1
- package/dist/esm/relational/sqlite/repositories/dialect/internal/json-path.d.ts +9 -6
- package/dist/esm/relational/sqlite/repositories/dialect/internal/json-path.d.ts.map +1 -1
- package/dist/esm/relational/sqlite/repositories/dialect/internal/json-path.js +19 -7
- package/dist/esm/relational/sqlite/repositories/dialect/internal/json-path.js.map +1 -1
- package/dist/esm/relational/sqlite/repositories/dialect/query.d.ts +2 -0
- package/dist/esm/relational/sqlite/repositories/dialect/query.d.ts.map +1 -1
- package/dist/esm/relational/sqlite/repositories/dialect/query.js +3 -0
- package/dist/esm/relational/sqlite/repositories/dialect/query.js.map +1 -1
- package/dist/esm/search/core/repositories/common/dialect-helpers.d.ts.map +1 -1
- package/dist/esm/search/core/repositories/common/dialect-helpers.js +2 -1
- package/dist/esm/search/core/repositories/common/dialect-helpers.js.map +1 -1
- package/dist/esm/search/meilisearch/repositories/dialect/query-dialect.d.ts.map +1 -1
- package/dist/esm/search/meilisearch/repositories/dialect/query-dialect.js +6 -9
- package/dist/esm/search/meilisearch/repositories/dialect/query-dialect.js.map +1 -1
- package/dist/esm/search/typesense/repositories/dialect/query-dialect.d.ts.map +1 -1
- package/dist/esm/search/typesense/repositories/dialect/query-dialect.js +6 -9
- package/dist/esm/search/typesense/repositories/dialect/query-dialect.js.map +1 -1
- package/dist/esm/testing/index.d.ts +5 -0
- package/dist/esm/testing/index.d.ts.map +1 -0
- package/dist/esm/testing/index.js +4 -0
- package/dist/esm/testing/index.js.map +1 -0
- package/dist/esm/testing/transaction-double.d.ts +44 -0
- package/dist/esm/testing/transaction-double.d.ts.map +1 -0
- package/dist/esm/testing/transaction-double.js +62 -0
- package/dist/esm/testing/transaction-double.js.map +1 -0
- package/package.json +10 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"echo.d.ts","sourceRoot":"","sources":["../../../../src/common/internal/echo.ts"],"names":[],"mappings":"AAIA,gHAAgH;AAChH,eAAO,MAAM,UAAU,GAAI,MAAM;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,KAAG,MAgBpD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toSafeEcho = void 0;
|
|
4
|
+
/** C0 controls, DEL, C1 controls and the two Unicode line terminators - anything that can break a log line. */
|
|
5
|
+
const isUnsafeEchoCode = (code) => code < 0x20 || (code >= 0x7f && code <= 0x9f) || code === 0x2028 || code === 0x2029;
|
|
6
|
+
/** A caller-supplied value made safe to quote in an error message: one line, every unsafe character escaped. */
|
|
7
|
+
const toSafeEcho = (opts) => {
|
|
8
|
+
const { value } = opts;
|
|
9
|
+
let safe = '';
|
|
10
|
+
let copiedUpTo = 0;
|
|
11
|
+
for (let index = 0; index < value.length; index++) {
|
|
12
|
+
const code = value.charCodeAt(index);
|
|
13
|
+
if (!isUnsafeEchoCode(code)) {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
safe += `${value.slice(copiedUpTo, index)}\\u${code.toString(16).padStart(4, '0')}`;
|
|
17
|
+
copiedUpTo = index + 1;
|
|
18
|
+
}
|
|
19
|
+
return copiedUpTo === 0 ? value : safe + value.slice(copiedUpTo);
|
|
20
|
+
};
|
|
21
|
+
exports.toSafeEcho = toSafeEcho;
|
|
22
|
+
//# sourceMappingURL=echo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"echo.js","sourceRoot":"","sources":["../../../../src/common/internal/echo.ts"],"names":[],"mappings":";;;AAAA,+GAA+G;AAC/G,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAW,EAAE,CACjD,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,CAAC;AAEtF,gHAAgH;AACzG,MAAM,UAAU,GAAG,CAAC,IAAuB,EAAU,EAAE;IAC5D,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACvB,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,SAAS;QACX,CAAC;QAED,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QACpF,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACnE,CAAC,CAAC;AAhBW,QAAA,UAAU,cAgBrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/common/internal/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./echo"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/common/internal/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/relational/core/datasources/base.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/relational/core/datasources/base.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAe,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAQ/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AAmDtF,+EAA+E;AAC/E,8BAAsB,wBAAwB,CAC5C,QAAQ,SAAS,MAAM,GAAG,EAAE,EAC5B,MAAM,SAAS,oBAAoB,GAAG,oBAAoB,EAC1D,mBAAmB,SAAS,MAAM,GAAG,EAAE,EACvC,MAAM,GAAG,OAAO,EAChB,UAAU,GAAG,OAAO,CACpB,SAAQ,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,UAAU,CAAC;gBACnF,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,QAAQ,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAWrE,wEAAwE;IAC/D,SAAS,IAAI,MAAM;IAK5B,SAAS,CAAC,cAAc,IAAI,MAAM;IAgDlC,qBAAqB,IAAI,OAAO;IAKvB,eAAe;;;IAIT,gBAAgB,CAC7B,IAAI,CAAC,EAAE,6BAA6B,GACnC,OAAO,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAiB9C,2LAA2L;IAC3L,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,6BAA6B,GAAG,MAAM;CACrF"}
|
|
@@ -12,6 +12,37 @@ const core_1 = require("@venizia/ignis-helpers/core");
|
|
|
12
12
|
const create_1 = require("../repositories/dialect/relations/create");
|
|
13
13
|
const abstract_1 = require("./abstract");
|
|
14
14
|
const relation_pairing_1 = require("./relation-pairing");
|
|
15
|
+
const transaction_lifecycle_1 = require("./transaction-lifecycle");
|
|
16
|
+
/** The handle `beginTransaction()` returns: the shared end rules over one acquired connection. On a failed end the connection is discarded rather than pooled - the next borrower would inherit an open transaction - and the error rethrown: a caller must never believe a failed COMMIT succeeded. */
|
|
17
|
+
class ConnectionTransaction extends transaction_lifecycle_1.TransactionLifecycle {
|
|
18
|
+
// ES-private so a logged, spread or serialised handle never reaches the datasource settings. The datasource, not its logger: the logger is read only when an end fails or is a no-op.
|
|
19
|
+
#dataSource;
|
|
20
|
+
#connection;
|
|
21
|
+
constructor(opts) {
|
|
22
|
+
super();
|
|
23
|
+
this.#dataSource = opts.dataSource;
|
|
24
|
+
this.#connection = opts.connection;
|
|
25
|
+
this.connector = opts.connection.connector;
|
|
26
|
+
}
|
|
27
|
+
executeEnd(opts) {
|
|
28
|
+
return this.#connection.execute({ statement: opts.end.statement });
|
|
29
|
+
}
|
|
30
|
+
onEnded() {
|
|
31
|
+
this.#connection.release();
|
|
32
|
+
}
|
|
33
|
+
onEndFailed(opts) {
|
|
34
|
+
const { end, error } = opts;
|
|
35
|
+
this.#dataSource.logger
|
|
36
|
+
.for(end.verb)
|
|
37
|
+
.error('Failed to %s transaction | Error: %s', end.statement, error);
|
|
38
|
+
this.#connection.release({ destroy: true });
|
|
39
|
+
}
|
|
40
|
+
onRollbackAfterFailure() {
|
|
41
|
+
this.#dataSource.logger
|
|
42
|
+
.for('rollback')
|
|
43
|
+
.debug('Rollback after a failure-ended transaction - no-op, already torn down');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
15
46
|
/** Base DataSource with schema auto-discovery from registered repositories. */
|
|
16
47
|
class BaseRelationalDataSource extends abstract_1.AbstractRelationalDataSource {
|
|
17
48
|
constructor(opts) {
|
|
@@ -81,42 +112,7 @@ class BaseRelationalDataSource extends abstract_1.AbstractRelationalDataSource {
|
|
|
81
112
|
connection.release({ destroy: true });
|
|
82
113
|
throw error;
|
|
83
114
|
}
|
|
84
|
-
|
|
85
|
-
let isEndedByFailure = false;
|
|
86
|
-
/** On failure the connection is discarded rather than pooled - the next borrower would inherit an open transaction - and the error rethrown: a caller must never believe a failed COMMIT succeeded. */
|
|
87
|
-
const finish = async (finishOpts) => {
|
|
88
|
-
const { statement, verb } = finishOpts;
|
|
89
|
-
if (!isActive) {
|
|
90
|
-
// After a FAILED commit/rollback the transaction is already torn down, so rollback is satisfied by construction - throwing here would replace the caller's original error in `catch { await tx.rollback(); throw error; }`.
|
|
91
|
-
if (isEndedByFailure && verb === 'rollback') {
|
|
92
|
-
this.logger
|
|
93
|
-
.for(verb)
|
|
94
|
-
.debug('Rollback after a failure-ended transaction - no-op, already torn down');
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
throw (0, core_1.getError)({ message: `[Transaction][${verb}] Transaction already ended` });
|
|
98
|
-
}
|
|
99
|
-
// Flipped BEFORE the await: commit racing rollback would otherwise both pass the guard, issue two control statements, and double-release the same physical connection.
|
|
100
|
-
isActive = false;
|
|
101
|
-
try {
|
|
102
|
-
await connection.execute({ statement });
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
this.logger.for(verb).error('Failed to %s transaction | Error: %s', statement, error);
|
|
106
|
-
isEndedByFailure = true;
|
|
107
|
-
connection.release({ destroy: true });
|
|
108
|
-
throw error;
|
|
109
|
-
}
|
|
110
|
-
connection.release();
|
|
111
|
-
};
|
|
112
|
-
return {
|
|
113
|
-
connector: connection.connector,
|
|
114
|
-
get isActive() {
|
|
115
|
-
return isActive;
|
|
116
|
-
},
|
|
117
|
-
commit: () => finish({ statement: 'COMMIT', verb: 'commit' }),
|
|
118
|
-
rollback: () => finish({ statement: 'ROLLBACK', verb: 'rollback' }),
|
|
119
|
-
};
|
|
115
|
+
return new ConnectionTransaction({ dataSource: this, connection });
|
|
120
116
|
}
|
|
121
117
|
}
|
|
122
118
|
exports.BaseRelationalDataSource = BaseRelationalDataSource;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../../src/relational/core/datasources/base.ts"],"names":[],"mappings":";;;AAAA,wDAAyD;AACzD,wDAAuF;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../../src/relational/core/datasources/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { TConstValue } from '@venizia/ignis-helpers/common';
|
|
2
|
+
import type { ITransaction } from '@venizia/ignis-kernel';
|
|
3
|
+
export declare class TransactionStates {
|
|
4
|
+
static readonly ACTIVE = "ACTIVE";
|
|
5
|
+
static readonly COMMITTED = "COMMITTED";
|
|
6
|
+
static readonly ROLLED_BACK = "ROLLED_BACK";
|
|
7
|
+
static readonly FAILED = "FAILED";
|
|
8
|
+
static readonly SCHEME_SET: Set<string>;
|
|
9
|
+
static isValid(value: string): boolean;
|
|
10
|
+
}
|
|
11
|
+
export type TTransactionState = TConstValue<typeof TransactionStates>;
|
|
12
|
+
/** Registry symbol, not a module-private one: the CommonJS and ESM builds each load their own copy of this class, and a handle from one must still be read by the other. */
|
|
13
|
+
export declare const TRANSACTION_STATE_KEY: unique symbol;
|
|
14
|
+
export interface ITransactionEnd {
|
|
15
|
+
verb: string;
|
|
16
|
+
statement: string;
|
|
17
|
+
endedState: TTransactionState;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The end-of-transaction rules every handle shares, the real one and the test double alike: the
|
|
21
|
+
* first commit() or rollback() wins, a second end throws, and rollback() after a failed end is a
|
|
22
|
+
* no-op. A subclass supplies only the statement and what happens around it.
|
|
23
|
+
*/
|
|
24
|
+
export declare abstract class TransactionLifecycle implements ITransaction {
|
|
25
|
+
#private;
|
|
26
|
+
private static readonly COMMIT;
|
|
27
|
+
private static readonly ROLLBACK;
|
|
28
|
+
/** Symbol-keyed so the state stays off the handle's string-keyed surface. */
|
|
29
|
+
get [TRANSACTION_STATE_KEY](): TTransactionState;
|
|
30
|
+
get isActive(): boolean;
|
|
31
|
+
protected get lifecycleState(): TTransactionState;
|
|
32
|
+
readonly commit: () => Promise<void>;
|
|
33
|
+
readonly rollback: () => Promise<void>;
|
|
34
|
+
/** Runs the end statement. Called at most once per transaction, after the state has left ACTIVE. */
|
|
35
|
+
protected abstract executeEnd(opts: {
|
|
36
|
+
end: ITransactionEnd;
|
|
37
|
+
}): Promise<unknown>;
|
|
38
|
+
protected onEnded(_opts: {
|
|
39
|
+
end: ITransactionEnd;
|
|
40
|
+
}): void;
|
|
41
|
+
protected onEndFailed(_opts: {
|
|
42
|
+
end: ITransactionEnd;
|
|
43
|
+
error: unknown;
|
|
44
|
+
}): void;
|
|
45
|
+
protected onRollbackAfterFailure(): void;
|
|
46
|
+
private end;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=transaction-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-lifecycle.d.ts","sourceRoot":"","sources":["../../../../../src/relational/core/datasources/transaction-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAClC,MAAM,CAAC,QAAQ,CAAC,SAAS,eAAe;IACxC,MAAM,CAAC,QAAQ,CAAC,WAAW,iBAAiB;IAC5C,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAElC,MAAM,CAAC,QAAQ,CAAC,UAAU,cAKvB;IAEH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGvC;AAED,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEtE,4KAA4K;AAC5K,eAAO,MAAM,qBAAqB,EAAE,OAAO,MAE1C,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,iBAAiB,CAAC;CAC/B;AAED;;;;GAIG;AACH,8BAAsB,oBAAqB,YAAW,YAAY;;IAChE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAI5B;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAI9B;IAKF,6EAA6E;IAC7E,IAAI,CAAC,qBAAqB,CAAC,IAAI,iBAAiB,CAE/C;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,SAAS,KAAK,cAAc,IAAI,iBAAiB,CAEhD;IAGD,QAAQ,CAAC,MAAM,QAAO,OAAO,CAAC,IAAI,CAAC,CAAmD;IACtF,QAAQ,CAAC,QAAQ,QAAO,OAAO,CAAC,IAAI,CAAC,CAAqD;IAE1F,oGAAoG;IACpG,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,eAAe,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAE/E,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,eAAe,CAAA;KAAE,GAAG,IAAI;IAExD,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,eAAe,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAE5E,SAAS,CAAC,sBAAsB,IAAI,IAAI;YAE1B,GAAG;CA0BlB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransactionLifecycle = exports.TRANSACTION_STATE_KEY = exports.TransactionStates = void 0;
|
|
4
|
+
const core_1 = require("@venizia/ignis-helpers/core");
|
|
5
|
+
class TransactionStates {
|
|
6
|
+
static { this.ACTIVE = 'ACTIVE'; }
|
|
7
|
+
static { this.COMMITTED = 'COMMITTED'; }
|
|
8
|
+
static { this.ROLLED_BACK = 'ROLLED_BACK'; }
|
|
9
|
+
static { this.FAILED = 'FAILED'; }
|
|
10
|
+
static { this.SCHEME_SET = new Set([
|
|
11
|
+
this.ACTIVE,
|
|
12
|
+
this.COMMITTED,
|
|
13
|
+
this.ROLLED_BACK,
|
|
14
|
+
this.FAILED,
|
|
15
|
+
]); }
|
|
16
|
+
static isValid(value) {
|
|
17
|
+
return this.SCHEME_SET.has(value);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.TransactionStates = TransactionStates;
|
|
21
|
+
/** Registry symbol, not a module-private one: the CommonJS and ESM builds each load their own copy of this class, and a handle from one must still be read by the other. */
|
|
22
|
+
exports.TRANSACTION_STATE_KEY = Symbol.for('@venizia/ignis-connectors/transaction-state');
|
|
23
|
+
/**
|
|
24
|
+
* The end-of-transaction rules every handle shares, the real one and the test double alike: the
|
|
25
|
+
* first commit() or rollback() wins, a second end throws, and rollback() after a failed end is a
|
|
26
|
+
* no-op. A subclass supplies only the statement and what happens around it.
|
|
27
|
+
*/
|
|
28
|
+
class TransactionLifecycle {
|
|
29
|
+
constructor() {
|
|
30
|
+
// ES-private, not TS-private: a handle that is logged, spread or serialised must not carry its internals.
|
|
31
|
+
this.#state = TransactionStates.ACTIVE;
|
|
32
|
+
// Own properties, not prototype methods, so a detached `transaction.commit` still works.
|
|
33
|
+
this.commit = () => this.end({ end: TransactionLifecycle.COMMIT });
|
|
34
|
+
this.rollback = () => this.end({ end: TransactionLifecycle.ROLLBACK });
|
|
35
|
+
}
|
|
36
|
+
static { this.COMMIT = {
|
|
37
|
+
verb: 'commit',
|
|
38
|
+
statement: 'COMMIT',
|
|
39
|
+
endedState: TransactionStates.COMMITTED,
|
|
40
|
+
}; }
|
|
41
|
+
static { this.ROLLBACK = {
|
|
42
|
+
verb: 'rollback',
|
|
43
|
+
statement: 'ROLLBACK',
|
|
44
|
+
endedState: TransactionStates.ROLLED_BACK,
|
|
45
|
+
}; }
|
|
46
|
+
// ES-private, not TS-private: a handle that is logged, spread or serialised must not carry its internals.
|
|
47
|
+
#state;
|
|
48
|
+
/** Symbol-keyed so the state stays off the handle's string-keyed surface. */
|
|
49
|
+
get [exports.TRANSACTION_STATE_KEY]() {
|
|
50
|
+
return this.#state;
|
|
51
|
+
}
|
|
52
|
+
get isActive() {
|
|
53
|
+
return this.#state === TransactionStates.ACTIVE;
|
|
54
|
+
}
|
|
55
|
+
get lifecycleState() {
|
|
56
|
+
return this.#state;
|
|
57
|
+
}
|
|
58
|
+
onEnded(_opts) { }
|
|
59
|
+
onEndFailed(_opts) { }
|
|
60
|
+
onRollbackAfterFailure() { }
|
|
61
|
+
async end(opts) {
|
|
62
|
+
const { end } = opts;
|
|
63
|
+
if (this.#state !== TransactionStates.ACTIVE) {
|
|
64
|
+
// After a FAILED end the transaction is already torn down, so rollback is satisfied by construction - throwing here would replace the caller's original error in `catch { await tx.rollback(); throw error; }`.
|
|
65
|
+
if (this.#state === TransactionStates.FAILED && end === TransactionLifecycle.ROLLBACK) {
|
|
66
|
+
this.onRollbackAfterFailure();
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
throw (0, core_1.getError)({ message: `[Transaction][${end.verb}] Transaction already ended` });
|
|
70
|
+
}
|
|
71
|
+
// Left ACTIVE BEFORE the await: commit racing rollback would otherwise both pass the guard, issue two end statements, and double-release the same connection.
|
|
72
|
+
this.#state = end.endedState;
|
|
73
|
+
try {
|
|
74
|
+
await this.executeEnd({ end });
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
this.onEndFailed({ end, error });
|
|
78
|
+
this.#state = TransactionStates.FAILED;
|
|
79
|
+
throw error;
|
|
80
|
+
}
|
|
81
|
+
this.onEnded({ end });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.TransactionLifecycle = TransactionLifecycle;
|
|
85
|
+
//# sourceMappingURL=transaction-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-lifecycle.js","sourceRoot":"","sources":["../../../../../src/relational/core/datasources/transaction-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-state.d.ts","sourceRoot":"","sources":["../../../../../src/relational/core/datasources/transaction-state.ts"],"names":[],"mappings":"AAEA,uGAAuG;AACvG,eAAO,MAAM,sBAAsB,GAAI,MAAM;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,KAAG,OAOtE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isTransactionCommitted = void 0;
|
|
4
|
+
const transaction_lifecycle_1 = require("./transaction-lifecycle");
|
|
5
|
+
/** True only for a handle built on `TransactionLifecycle`, from either build, that ended by COMMIT. */
|
|
6
|
+
const isTransactionCommitted = (opts) => {
|
|
7
|
+
const { transaction } = opts;
|
|
8
|
+
return (transaction_lifecycle_1.TRANSACTION_STATE_KEY in transaction &&
|
|
9
|
+
transaction[transaction_lifecycle_1.TRANSACTION_STATE_KEY] === transaction_lifecycle_1.TransactionStates.COMMITTED);
|
|
10
|
+
};
|
|
11
|
+
exports.isTransactionCommitted = isTransactionCommitted;
|
|
12
|
+
//# sourceMappingURL=transaction-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-state.js","sourceRoot":"","sources":["../../../../../src/relational/core/datasources/transaction-state.ts"],"names":[],"mappings":";;;AAAA,mEAAmF;AAEnF,uGAAuG;AAChG,MAAM,sBAAsB,GAAG,CAAC,IAA6B,EAAW,EAAE;IAC/E,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAE7B,OAAO,CACL,6CAAqB,IAAI,WAAW;QACpC,WAAW,CAAC,6CAAqB,CAAC,KAAK,yCAAiB,CAAC,SAAS,CACnE,CAAC;AACJ,CAAC,CAAC;AAPW,QAAA,sBAAsB,0BAOjC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { IExtraOptions, RelationTypes, TDrizzleQueryOptions, TFilter, TWhere } from '@venizia/ignis-kernel';
|
|
2
2
|
import type { IRelationalDataSource, IRelationalTransaction } from '../../datasources/common';
|
|
3
3
|
import type { TTableObject, TTableSchemaWithId } from '../../models/common';
|
|
4
|
-
import type { createTableRelationsHelpers, getTableColumns, SQL } from 'drizzle-orm';
|
|
4
|
+
import type { AnyColumn, createTableRelationsHelpers, getTableColumns, SQL, SQLWrapper } from 'drizzle-orm';
|
|
5
5
|
/** Entity relationship config (one-to-one/many-to-one, one-to-many); Drizzle-specific. */
|
|
6
6
|
export type TRelationConfig = {
|
|
7
7
|
name: string;
|
|
@@ -32,10 +32,12 @@ export interface IRelationalQueryDialect {
|
|
|
32
32
|
schema: Schema;
|
|
33
33
|
where: TWhere<TTableObject<Schema>>;
|
|
34
34
|
}): SQL | undefined;
|
|
35
|
+
/** `expressions` names sort targets the schema cannot: a joined column or a computed `SQL`, keyed by the name an order entry uses. */
|
|
35
36
|
toOrderBy<Schema extends TTableSchemaWithId>(opts: {
|
|
36
37
|
tableName: string;
|
|
37
38
|
schema: Schema;
|
|
38
39
|
order: string[];
|
|
40
|
+
expressions?: Readonly<Record<string, AnyColumn | SQLWrapper>>;
|
|
39
41
|
}): SQL[];
|
|
40
42
|
/** Splits update data into plain column assignments and engine-specific JSON-path expressions. Postgres composes `jsonb_set`; another engine composes its own. */
|
|
41
43
|
transformUpdate<Schema extends TTableSchemaWithId>(opts: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/relational/core/repositories/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,OAAO,EACP,MAAM,EACP,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACxF,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/relational/core/repositories/common/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,6 +68,23 @@ export declare abstract class RelationalBaseRepository<EntitySchema extends TTab
|
|
|
68
68
|
dangerouslySkipScopeFilter?: boolean;
|
|
69
69
|
}): TFilter<DO>;
|
|
70
70
|
beginTransaction(opts?: TRelationalTransactionOptionsOf<TDataSource>): Promise<TRelationalTransactionOf<TDataSource>>;
|
|
71
|
+
/**
|
|
72
|
+
* Runs `execute` inside a transaction. Given a `transaction`, joins it: its owner commits or rolls
|
|
73
|
+
* back, so this never does. Given none, owns one: begins it, commits when `execute` resolves, and
|
|
74
|
+
* rolls back when `execute` or the commit throws - rethrowing the original error either way. An
|
|
75
|
+
* owned transaction that `execute` already ended is never ended a second time.
|
|
76
|
+
*/
|
|
77
|
+
runInTransaction<ResultType>(opts: {
|
|
78
|
+
transaction?: TRelationalTransactionOf<TDataSource>;
|
|
79
|
+
transactionOptions?: TRelationalTransactionOptionsOf<TDataSource>;
|
|
80
|
+
execute: (opts: {
|
|
81
|
+
transaction: TRelationalTransactionOf<TDataSource>;
|
|
82
|
+
}) => Promise<ResultType>;
|
|
83
|
+
}): Promise<ResultType>;
|
|
84
|
+
/** `execute` resolved after ending the owned transaction itself: its work stands only if it committed. */
|
|
85
|
+
private resolveEndedByExecute;
|
|
86
|
+
/** A rollback failure is only logged: the caller needs the error that made the rollback necessary. */
|
|
87
|
+
private rollbackOwnedTransaction;
|
|
71
88
|
/** Builds Drizzle query options from a filter, excluding hidden properties. */
|
|
72
89
|
buildQuery(opts: {
|
|
73
90
|
filter: TFilter<DataObject>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../../src/relational/core/repositories/core/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,YAAY,EACZ,MAAM,EACN,UAAU,EACV,oBAAoB,EACpB,OAAO,EACP,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,yBAAyB,EACzB,MAAM,EACP,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAGnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../../src/relational/core/repositories/core/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.RelationalBaseRepository = void 0;
|
|
4
4
|
const ignis_kernel_1 = require("@venizia/ignis-kernel");
|
|
5
5
|
const common_1 = require("../../datasources/common");
|
|
6
|
+
const transaction_state_1 = require("../../datasources/transaction-state");
|
|
6
7
|
const core_1 = require("@venizia/ignis-helpers/core");
|
|
7
8
|
const drizzle_orm_1 = require("drizzle-orm");
|
|
8
9
|
const common_2 = require("../common");
|
|
@@ -150,6 +151,74 @@ class RelationalBaseRepository extends ignis_kernel_1.AbstractRepository {
|
|
|
150
151
|
async beginTransaction(opts) {
|
|
151
152
|
return this.dataSource.beginTransaction(opts);
|
|
152
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Runs `execute` inside a transaction. Given a `transaction`, joins it: its owner commits or rolls
|
|
156
|
+
* back, so this never does. Given none, owns one: begins it, commits when `execute` resolves, and
|
|
157
|
+
* rolls back when `execute` or the commit throws - rethrowing the original error either way. An
|
|
158
|
+
* owned transaction that `execute` already ended is never ended a second time.
|
|
159
|
+
*/
|
|
160
|
+
async runInTransaction(opts) {
|
|
161
|
+
const { transaction, transactionOptions, execute } = opts;
|
|
162
|
+
if (transaction) {
|
|
163
|
+
if (!transaction.isActive) {
|
|
164
|
+
throw (0, core_1.getError)({
|
|
165
|
+
message: `[${this.constructor.name}][runInTransaction] Transaction is no longer active`,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
if (transactionOptions) {
|
|
169
|
+
this.logger
|
|
170
|
+
.for('runInTransaction')
|
|
171
|
+
.debug('Joined transaction | transactionOptions ignored: %j', transactionOptions);
|
|
172
|
+
}
|
|
173
|
+
return execute({ transaction });
|
|
174
|
+
}
|
|
175
|
+
const ownedTransaction = await this.beginTransaction(transactionOptions);
|
|
176
|
+
let result;
|
|
177
|
+
try {
|
|
178
|
+
result = await execute({ transaction: ownedTransaction });
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
if (ownedTransaction.isActive) {
|
|
182
|
+
await this.rollbackOwnedTransaction({ transaction: ownedTransaction });
|
|
183
|
+
}
|
|
184
|
+
throw error;
|
|
185
|
+
}
|
|
186
|
+
if (!ownedTransaction.isActive) {
|
|
187
|
+
return this.resolveEndedByExecute({ transaction: ownedTransaction, result });
|
|
188
|
+
}
|
|
189
|
+
try {
|
|
190
|
+
await ownedTransaction.commit();
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
await this.rollbackOwnedTransaction({ transaction: ownedTransaction });
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
196
|
+
return result;
|
|
197
|
+
}
|
|
198
|
+
/** `execute` resolved after ending the owned transaction itself: its work stands only if it committed. */
|
|
199
|
+
resolveEndedByExecute(opts) {
|
|
200
|
+
const { transaction, result } = opts;
|
|
201
|
+
if ((0, transaction_state_1.isTransactionCommitted)({ transaction })) {
|
|
202
|
+
this.logger
|
|
203
|
+
.for('runInTransaction')
|
|
204
|
+
.warn('execute committed the owned transaction itself | Skipped the commit');
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
throw (0, core_1.getError)({
|
|
208
|
+
message: `[${this.constructor.name}][runInTransaction] execute ended the owned transaction before it could be committed`,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/** A rollback failure is only logged: the caller needs the error that made the rollback necessary. */
|
|
212
|
+
async rollbackOwnedTransaction(opts) {
|
|
213
|
+
try {
|
|
214
|
+
await opts.transaction.rollback();
|
|
215
|
+
}
|
|
216
|
+
catch (rollbackError) {
|
|
217
|
+
this.logger
|
|
218
|
+
.for('runInTransaction')
|
|
219
|
+
.error('Rollback failed, rethrowing the original error | Rollback error: %s', rollbackError);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
153
222
|
/** Builds Drizzle query options from a filter, excluding hidden properties. */
|
|
154
223
|
buildQuery(opts) {
|
|
155
224
|
const result = this.queryDialect.build({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../../../src/relational/core/repositories/core/base.ts"],"names":[],"mappings":";;;AAiBA,wDAI+B;AAG/B,iEAA+E;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../../../src/relational/core/repositories/core/base.ts"],"names":[],"mappings":"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"}
|