@acmekit/link-modules 2.13.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/dist/definitions/cart-payment-collection.d.ts +3 -0
- package/dist/definitions/cart-payment-collection.d.ts.map +1 -0
- package/dist/definitions/cart-payment-collection.js +71 -0
- package/dist/definitions/cart-payment-collection.js.map +1 -0
- package/dist/definitions/cart-promotion.d.ts +3 -0
- package/dist/definitions/cart-promotion.d.ts.map +1 -0
- package/dist/definitions/cart-promotion.js +63 -0
- package/dist/definitions/cart-promotion.js.map +1 -0
- package/dist/definitions/customer-account-holder.d.ts +3 -0
- package/dist/definitions/customer-account-holder.d.ts.map +1 -0
- package/dist/definitions/customer-account-holder.js +75 -0
- package/dist/definitions/customer-account-holder.js.map +1 -0
- package/dist/definitions/fulfillment-provider-location.d.ts +3 -0
- package/dist/definitions/fulfillment-provider-location.d.ts.map +1 -0
- package/dist/definitions/fulfillment-provider-location.js +75 -0
- package/dist/definitions/fulfillment-provider-location.js.map +1 -0
- package/dist/definitions/fulfillment-set-location.d.ts +3 -0
- package/dist/definitions/fulfillment-set-location.d.ts.map +1 -0
- package/dist/definitions/fulfillment-set-location.js +75 -0
- package/dist/definitions/fulfillment-set-location.js.map +1 -0
- package/dist/definitions/index.d.ts +22 -0
- package/dist/definitions/index.d.ts.map +1 -0
- package/dist/definitions/index.js +38 -0
- package/dist/definitions/index.js.map +1 -0
- package/dist/definitions/invite-rbac-role.d.ts +3 -0
- package/dist/definitions/invite-rbac-role.d.ts.map +1 -0
- package/dist/definitions/invite-rbac-role.js +76 -0
- package/dist/definitions/invite-rbac-role.js.map +1 -0
- package/dist/definitions/order-cart.d.ts +3 -0
- package/dist/definitions/order-cart.d.ts.map +1 -0
- package/dist/definitions/order-cart.js +71 -0
- package/dist/definitions/order-cart.js.map +1 -0
- package/dist/definitions/order-claim-payment-collection.d.ts +3 -0
- package/dist/definitions/order-claim-payment-collection.d.ts.map +1 -0
- package/dist/definitions/order-claim-payment-collection.js +77 -0
- package/dist/definitions/order-claim-payment-collection.js.map +1 -0
- package/dist/definitions/order-exchange-payment-collection.d.ts +3 -0
- package/dist/definitions/order-exchange-payment-collection.d.ts.map +1 -0
- package/dist/definitions/order-exchange-payment-collection.js +77 -0
- package/dist/definitions/order-exchange-payment-collection.js.map +1 -0
- package/dist/definitions/order-fulfillment.d.ts +3 -0
- package/dist/definitions/order-fulfillment.d.ts.map +1 -0
- package/dist/definitions/order-fulfillment.js +75 -0
- package/dist/definitions/order-fulfillment.js.map +1 -0
- package/dist/definitions/order-payment-collection.d.ts +3 -0
- package/dist/definitions/order-payment-collection.d.ts.map +1 -0
- package/dist/definitions/order-payment-collection.js +75 -0
- package/dist/definitions/order-payment-collection.js.map +1 -0
- package/dist/definitions/order-promotion.d.ts +3 -0
- package/dist/definitions/order-promotion.d.ts.map +1 -0
- package/dist/definitions/order-promotion.js +80 -0
- package/dist/definitions/order-promotion.js.map +1 -0
- package/dist/definitions/order-return-fulfillment.d.ts +3 -0
- package/dist/definitions/order-return-fulfillment.d.ts.map +1 -0
- package/dist/definitions/order-return-fulfillment.js +72 -0
- package/dist/definitions/order-return-fulfillment.js.map +1 -0
- package/dist/definitions/product-sales-channel.d.ts +3 -0
- package/dist/definitions/product-sales-channel.d.ts.map +1 -0
- package/dist/definitions/product-sales-channel.js +76 -0
- package/dist/definitions/product-sales-channel.js.map +1 -0
- package/dist/definitions/product-shipping-profile.d.ts +3 -0
- package/dist/definitions/product-shipping-profile.d.ts.map +1 -0
- package/dist/definitions/product-shipping-profile.js +75 -0
- package/dist/definitions/product-shipping-profile.js.map +1 -0
- package/dist/definitions/product-variant-inventory-item.d.ts +3 -0
- package/dist/definitions/product-variant-inventory-item.d.ts.map +1 -0
- package/dist/definitions/product-variant-inventory-item.js +86 -0
- package/dist/definitions/product-variant-inventory-item.js.map +1 -0
- package/dist/definitions/product-variant-price-set.d.ts +3 -0
- package/dist/definitions/product-variant-price-set.d.ts.map +1 -0
- package/dist/definitions/product-variant-price-set.js +80 -0
- package/dist/definitions/product-variant-price-set.js.map +1 -0
- package/dist/definitions/publishable-api-key-sales-channel.d.ts +3 -0
- package/dist/definitions/publishable-api-key-sales-channel.d.ts.map +1 -0
- package/dist/definitions/publishable-api-key-sales-channel.js +82 -0
- package/dist/definitions/publishable-api-key-sales-channel.js.map +1 -0
- package/dist/definitions/readonly/cart-customer.d.ts +3 -0
- package/dist/definitions/readonly/cart-customer.d.ts.map +1 -0
- package/dist/definitions/readonly/cart-customer.js +40 -0
- package/dist/definitions/readonly/cart-customer.js.map +1 -0
- package/dist/definitions/readonly/cart-product.d.ts +3 -0
- package/dist/definitions/readonly/cart-product.d.ts.map +1 -0
- package/dist/definitions/readonly/cart-product.js +52 -0
- package/dist/definitions/readonly/cart-product.js.map +1 -0
- package/dist/definitions/readonly/cart-region.d.ts +3 -0
- package/dist/definitions/readonly/cart-region.d.ts.map +1 -0
- package/dist/definitions/readonly/cart-region.js +40 -0
- package/dist/definitions/readonly/cart-region.js.map +1 -0
- package/dist/definitions/readonly/cart-sales-channel.d.ts +3 -0
- package/dist/definitions/readonly/cart-sales-channel.d.ts.map +1 -0
- package/dist/definitions/readonly/cart-sales-channel.js +40 -0
- package/dist/definitions/readonly/cart-sales-channel.js.map +1 -0
- package/dist/definitions/readonly/cart-shipping-option.d.ts +3 -0
- package/dist/definitions/readonly/cart-shipping-option.d.ts.map +1 -0
- package/dist/definitions/readonly/cart-shipping-option.js +24 -0
- package/dist/definitions/readonly/cart-shipping-option.js.map +1 -0
- package/dist/definitions/readonly/index.d.ts +15 -0
- package/dist/definitions/readonly/index.d.ts.map +1 -0
- package/dist/definitions/readonly/index.js +31 -0
- package/dist/definitions/readonly/index.js.map +1 -0
- package/dist/definitions/readonly/inventory-level-stock-location.d.ts +3 -0
- package/dist/definitions/readonly/inventory-level-stock-location.d.ts.map +1 -0
- package/dist/definitions/readonly/inventory-level-stock-location.js +26 -0
- package/dist/definitions/readonly/inventory-level-stock-location.js.map +1 -0
- package/dist/definitions/readonly/line-item-adjustment-promotion.d.ts +3 -0
- package/dist/definitions/readonly/line-item-adjustment-promotion.d.ts.map +1 -0
- package/dist/definitions/readonly/line-item-adjustment-promotion.js +25 -0
- package/dist/definitions/readonly/line-item-adjustment-promotion.js.map +1 -0
- package/dist/definitions/readonly/order-customer.d.ts +3 -0
- package/dist/definitions/readonly/order-customer.d.ts.map +1 -0
- package/dist/definitions/readonly/order-customer.js +40 -0
- package/dist/definitions/readonly/order-customer.js.map +1 -0
- package/dist/definitions/readonly/order-product.d.ts +3 -0
- package/dist/definitions/readonly/order-product.d.ts.map +1 -0
- package/dist/definitions/readonly/order-product.js +54 -0
- package/dist/definitions/readonly/order-product.js.map +1 -0
- package/dist/definitions/readonly/order-region.d.ts +3 -0
- package/dist/definitions/readonly/order-region.d.ts.map +1 -0
- package/dist/definitions/readonly/order-region.js +40 -0
- package/dist/definitions/readonly/order-region.js.map +1 -0
- package/dist/definitions/readonly/order-sales-channel.d.ts +3 -0
- package/dist/definitions/readonly/order-sales-channel.d.ts.map +1 -0
- package/dist/definitions/readonly/order-sales-channel.js +40 -0
- package/dist/definitions/readonly/order-sales-channel.js.map +1 -0
- package/dist/definitions/readonly/product-translation.d.ts +3 -0
- package/dist/definitions/readonly/product-translation.d.ts.map +1 -0
- package/dist/definitions/readonly/product-translation.js +147 -0
- package/dist/definitions/readonly/product-translation.js.map +1 -0
- package/dist/definitions/readonly/store-currency.d.ts +3 -0
- package/dist/definitions/readonly/store-currency.d.ts.map +1 -0
- package/dist/definitions/readonly/store-currency.js +25 -0
- package/dist/definitions/readonly/store-currency.js.map +1 -0
- package/dist/definitions/readonly/store-locale.d.ts +3 -0
- package/dist/definitions/readonly/store-locale.d.ts.map +1 -0
- package/dist/definitions/readonly/store-locale.js +27 -0
- package/dist/definitions/readonly/store-locale.js.map +1 -0
- package/dist/definitions/region-payment-provider.d.ts +3 -0
- package/dist/definitions/region-payment-provider.d.ts.map +1 -0
- package/dist/definitions/region-payment-provider.js +78 -0
- package/dist/definitions/region-payment-provider.js.map +1 -0
- package/dist/definitions/sales-channel-location.d.ts +3 -0
- package/dist/definitions/sales-channel-location.d.ts.map +1 -0
- package/dist/definitions/sales-channel-location.js +80 -0
- package/dist/definitions/sales-channel-location.js.map +1 -0
- package/dist/definitions/shipping-option-price-set.d.ts +3 -0
- package/dist/definitions/shipping-option-price-set.d.ts.map +1 -0
- package/dist/definitions/shipping-option-price-set.js +78 -0
- package/dist/definitions/shipping-option-price-set.js.map +1 -0
- package/dist/definitions/user-rbac-role.d.ts +3 -0
- package/dist/definitions/user-rbac-role.d.ts.map +1 -0
- package/dist/definitions/user-rbac-role.js +76 -0
- package/dist/definitions/user-rbac-role.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/initialize/index.d.ts +16 -0
- package/dist/initialize/index.d.ts.map +1 -0
- package/dist/initialize/index.js +165 -0
- package/dist/initialize/index.js.map +1 -0
- package/dist/initialize/module-definition.d.ts +3 -0
- package/dist/initialize/module-definition.d.ts.map +1 -0
- package/dist/initialize/module-definition.js +18 -0
- package/dist/initialize/module-definition.js.map +1 -0
- package/dist/loaders/connection.d.ts +4 -0
- package/dist/loaders/connection.d.ts.map +1 -0
- package/dist/loaders/connection.js +19 -0
- package/dist/loaders/connection.js.map +1 -0
- package/dist/loaders/container.d.ts +3 -0
- package/dist/loaders/container.d.ts.map +1 -0
- package/dist/loaders/container.js +32 -0
- package/dist/loaders/container.js.map +1 -0
- package/dist/loaders/index.d.ts +7 -0
- package/dist/loaders/index.d.ts.map +1 -0
- package/dist/loaders/index.js +14 -0
- package/dist/loaders/index.js.map +1 -0
- package/dist/migration/index.d.ts +104 -0
- package/dist/migration/index.d.ts.map +1 -0
- package/dist/migration/index.js +391 -0
- package/dist/migration/index.js.map +1 -0
- package/dist/repositories/index.d.ts +3 -0
- package/dist/repositories/index.d.ts.map +1 -0
- package/dist/repositories/index.js +8 -0
- package/dist/repositories/index.js.map +1 -0
- package/dist/repositories/link.d.ts +36 -0
- package/dist/repositories/link.d.ts.map +1 -0
- package/dist/repositories/link.js +33 -0
- package/dist/repositories/link.js.map +1 -0
- package/dist/services/dynamic-service-class.d.ts +8 -0
- package/dist/services/dynamic-service-class.d.ts.map +1 -0
- package/dist/services/dynamic-service-class.js +29 -0
- package/dist/services/dynamic-service-class.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +26 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/link-module-service.d.ts +42 -0
- package/dist/services/link-module-service.d.ts.map +1 -0
- package/dist/services/link-module-service.js +296 -0
- package/dist/services/link-module-service.js.map +1 -0
- package/dist/services/link.d.ts +18 -0
- package/dist/services/link.d.ts.map +1 -0
- package/dist/services/link.js +139 -0
- package/dist/services/link.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/generate-entity.d.ts +12 -0
- package/dist/utils/generate-entity.d.ts.map +1 -0
- package/dist/utils/generate-entity.js +118 -0
- package/dist/utils/generate-entity.js.map +1 -0
- package/dist/utils/generate-schema.d.ts +5 -0
- package/dist/utils/generate-schema.d.ts.map +1 -0
- package/dist/utils/generate-schema.js +156 -0
- package/dist/utils/generate-schema.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var _MigrationsExecutionPlanner_dbConfig, _MigrationsExecutionPlanner_schema, _MigrationsExecutionPlanner_unsafeSQLCommands, _MigrationsExecutionPlanner_linksEntities;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.MigrationsExecutionPlanner = void 0;
|
|
16
|
+
const postgresql_1 = require("@acmekit/framework/mikro-orm/postgresql");
|
|
17
|
+
const utils_1 = require("@acmekit/framework/utils");
|
|
18
|
+
const utils_2 = require("../utils");
|
|
19
|
+
/**
|
|
20
|
+
* The migrations execution planner creates a plan of SQL queries
|
|
21
|
+
* to be executed to keep link modules database state in sync
|
|
22
|
+
* with the links defined inside the user application.
|
|
23
|
+
*/
|
|
24
|
+
class MigrationsExecutionPlanner {
|
|
25
|
+
constructor(joinerConfig, options) {
|
|
26
|
+
/**
|
|
27
|
+
* Database options for the module service
|
|
28
|
+
*/
|
|
29
|
+
_MigrationsExecutionPlanner_dbConfig.set(this, void 0);
|
|
30
|
+
_MigrationsExecutionPlanner_schema.set(this, "public"
|
|
31
|
+
/**
|
|
32
|
+
* The set of commands that are unsafe to execute automatically when
|
|
33
|
+
* performing "alter table"
|
|
34
|
+
*/
|
|
35
|
+
);
|
|
36
|
+
/**
|
|
37
|
+
* The set of commands that are unsafe to execute automatically when
|
|
38
|
+
* performing "alter table"
|
|
39
|
+
*/
|
|
40
|
+
_MigrationsExecutionPlanner_unsafeSQLCommands.set(this, ["alter column", "drop column"]
|
|
41
|
+
/**
|
|
42
|
+
* On-the-fly computed set of entities for the user provided joinerConfig and the link it is coming from
|
|
43
|
+
*/
|
|
44
|
+
);
|
|
45
|
+
/**
|
|
46
|
+
* On-the-fly computed set of entities for the user provided joinerConfig and the link it is coming from
|
|
47
|
+
*/
|
|
48
|
+
_MigrationsExecutionPlanner_linksEntities.set(this, void 0);
|
|
49
|
+
/**
|
|
50
|
+
* The table that keeps a track of tables generated by the link
|
|
51
|
+
* module.
|
|
52
|
+
*/
|
|
53
|
+
this.tableName = "link_module_migrations";
|
|
54
|
+
__classPrivateFieldSet(this, _MigrationsExecutionPlanner_dbConfig, utils_1.ModulesSdkUtils.loadDatabaseConfig("link_modules", options), "f");
|
|
55
|
+
__classPrivateFieldSet(this, _MigrationsExecutionPlanner_schema, options?.database?.schema ?? "public", "f");
|
|
56
|
+
__classPrivateFieldSet(this, _MigrationsExecutionPlanner_linksEntities, joinerConfig
|
|
57
|
+
.map((config) => {
|
|
58
|
+
if (config.isReadOnlyLink) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const [primary, foreign] = config.relationships ?? [];
|
|
62
|
+
const linkDescriptor = {
|
|
63
|
+
fromModule: primary.serviceName,
|
|
64
|
+
toModule: foreign.serviceName,
|
|
65
|
+
fromModel: primary.alias,
|
|
66
|
+
toModel: foreign.alias,
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
entity: (0, utils_2.generateEntity)(config, primary, foreign),
|
|
70
|
+
linkDescriptor,
|
|
71
|
+
};
|
|
72
|
+
})
|
|
73
|
+
.filter((item) => !!item), "f");
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Initializes the ORM using the normalized dbConfig and set
|
|
77
|
+
* of provided entities
|
|
78
|
+
*/
|
|
79
|
+
async createORM(entities = []) {
|
|
80
|
+
return await utils_1.DALUtils.mikroOrmCreateConnection(__classPrivateFieldGet(this, _MigrationsExecutionPlanner_dbConfig, "f"), entities, "");
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Ensure the table to track link modules migrations
|
|
84
|
+
* exists.
|
|
85
|
+
*
|
|
86
|
+
* @param orm MikroORM
|
|
87
|
+
*/
|
|
88
|
+
async ensureMigrationsTable(orm) {
|
|
89
|
+
await orm.em.getDriver().getConnection().execute(`
|
|
90
|
+
CREATE TABLE IF NOT EXISTS "${__classPrivateFieldGet(this, _MigrationsExecutionPlanner_schema, "f")}"."${this.tableName}" (
|
|
91
|
+
id SERIAL PRIMARY KEY,
|
|
92
|
+
table_name VARCHAR(255) NOT NULL UNIQUE,
|
|
93
|
+
link_descriptor JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
94
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
95
|
+
)
|
|
96
|
+
`);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Ensure the migrations table is in sync
|
|
100
|
+
*
|
|
101
|
+
* @param orm
|
|
102
|
+
* @protected
|
|
103
|
+
*/
|
|
104
|
+
async ensureMigrationsTableUpToDate(orm) {
|
|
105
|
+
const existingTables = (await orm.em
|
|
106
|
+
.getDriver()
|
|
107
|
+
.getConnection()
|
|
108
|
+
.execute(`
|
|
109
|
+
SELECT table_name
|
|
110
|
+
FROM information_schema.tables
|
|
111
|
+
WHERE table_schema = '${__classPrivateFieldGet(this, _MigrationsExecutionPlanner_schema, "f")}';
|
|
112
|
+
`))
|
|
113
|
+
.map(({ table_name }) => table_name)
|
|
114
|
+
.filter((tableName) => __classPrivateFieldGet(this, _MigrationsExecutionPlanner_linksEntities, "f").some(({ entity }) => entity.meta.collection === tableName));
|
|
115
|
+
if (!existingTables.length) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const orderedDescriptors = existingTables.map((tableName) => {
|
|
119
|
+
return __classPrivateFieldGet(this, _MigrationsExecutionPlanner_linksEntities, "f").find(({ entity }) => entity.meta.collection === tableName).linkDescriptor;
|
|
120
|
+
});
|
|
121
|
+
const positionalArgs = new Array(existingTables.length)
|
|
122
|
+
.fill("(?, ?)")
|
|
123
|
+
.join(", ");
|
|
124
|
+
await orm.em
|
|
125
|
+
.getDriver()
|
|
126
|
+
.getConnection()
|
|
127
|
+
.execute(`
|
|
128
|
+
INSERT INTO "${__classPrivateFieldGet(this, _MigrationsExecutionPlanner_schema, "f")}"."${this.tableName}" (table_name, link_descriptor) VALUES ${positionalArgs} ON CONFLICT DO NOTHING;
|
|
129
|
+
`, existingTables.flatMap((tableName, index) => [
|
|
130
|
+
tableName,
|
|
131
|
+
JSON.stringify(orderedDescriptors[index]),
|
|
132
|
+
]));
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Insert tuple to the migrations table and create the link table
|
|
136
|
+
*
|
|
137
|
+
* @param orm
|
|
138
|
+
* @param action
|
|
139
|
+
* @protected
|
|
140
|
+
*/
|
|
141
|
+
async createLinkTable(orm, action) {
|
|
142
|
+
const { tableName, linkDescriptor, sql } = action;
|
|
143
|
+
await orm.em
|
|
144
|
+
.getDriver()
|
|
145
|
+
.getConnection()
|
|
146
|
+
.execute(`
|
|
147
|
+
SET LOCAL search_path TO "${__classPrivateFieldGet(this, _MigrationsExecutionPlanner_schema, "f")}";
|
|
148
|
+
|
|
149
|
+
INSERT INTO "${this.tableName}" (table_name, link_descriptor) VALUES (?, ?) ON CONFLICT DO NOTHING;
|
|
150
|
+
|
|
151
|
+
${sql}
|
|
152
|
+
`, [tableName, linkDescriptor]);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Drops the link table and untracks it from the "link_modules_migrations"
|
|
156
|
+
* table.
|
|
157
|
+
*/
|
|
158
|
+
async dropLinkTable(orm, tableName) {
|
|
159
|
+
await orm.em.getDriver().getConnection().execute(`
|
|
160
|
+
DROP TABLE IF EXISTS "${__classPrivateFieldGet(this, _MigrationsExecutionPlanner_schema, "f")}"."${tableName}";
|
|
161
|
+
DELETE FROM "${__classPrivateFieldGet(this, _MigrationsExecutionPlanner_schema, "f")}"."${this.tableName}" WHERE table_name = '${tableName}';
|
|
162
|
+
`);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Returns an array of table names that have been tracked during
|
|
166
|
+
* the last run. In short, these tables were created by the
|
|
167
|
+
* link modules migrations runner.
|
|
168
|
+
*
|
|
169
|
+
* @param orm MikroORM
|
|
170
|
+
*/
|
|
171
|
+
async getTrackedLinksTables(orm) {
|
|
172
|
+
const results = await orm.em.getDriver().getConnection().execute(`
|
|
173
|
+
SELECT table_name, link_descriptor from "${__classPrivateFieldGet(this, _MigrationsExecutionPlanner_schema, "f")}"."${this.tableName}"
|
|
174
|
+
`);
|
|
175
|
+
return results.map((tuple) => ({
|
|
176
|
+
table_name: tuple.table_name,
|
|
177
|
+
link_descriptor: tuple.link_descriptor,
|
|
178
|
+
}));
|
|
179
|
+
}
|
|
180
|
+
pickTableRelatedCommands(tableName, sqlCommand) {
|
|
181
|
+
const ignoreColumns = ["created_at", "updated_at", "deleted_at"];
|
|
182
|
+
const commands = sqlCommand.split(";");
|
|
183
|
+
const returnedCommands = commands
|
|
184
|
+
.filter((command) => {
|
|
185
|
+
const cmd = command.trim();
|
|
186
|
+
return (cmd.length &&
|
|
187
|
+
cmd !== "set names 'utf8'" &&
|
|
188
|
+
cmd.includes(`"${tableName}"`) &&
|
|
189
|
+
!ignoreColumns.some((column) => cmd.includes(`column "${column}"`)));
|
|
190
|
+
})
|
|
191
|
+
.map((cmd) => cmd.trim());
|
|
192
|
+
if (returnedCommands.length > 0) {
|
|
193
|
+
// adds ; at the end of each command
|
|
194
|
+
returnedCommands.push("");
|
|
195
|
+
}
|
|
196
|
+
return returnedCommands.join(";");
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Returns the migration plan for a specific link entity.
|
|
200
|
+
*/
|
|
201
|
+
async getEntityMigrationPlan(linkDescriptor, entity, trackedLinksTables) {
|
|
202
|
+
const tableName = entity.meta.collection;
|
|
203
|
+
const orm = await this.createORM([entity]);
|
|
204
|
+
try {
|
|
205
|
+
const generator = orm.getSchemaGenerator();
|
|
206
|
+
const platform = orm.em.getPlatform();
|
|
207
|
+
const connection = orm.em.getConnection();
|
|
208
|
+
const schemaName = __classPrivateFieldGet(this, _MigrationsExecutionPlanner_dbConfig, "f").schema || "public";
|
|
209
|
+
/**
|
|
210
|
+
* If the table name for the entity has not been
|
|
211
|
+
* managed by us earlier, then we should create
|
|
212
|
+
* it.
|
|
213
|
+
*/
|
|
214
|
+
if (!trackedLinksTables.includes(tableName)) {
|
|
215
|
+
return {
|
|
216
|
+
action: "create",
|
|
217
|
+
linkDescriptor,
|
|
218
|
+
tableName,
|
|
219
|
+
sql: (0, utils_1.normalizeMigrationSQL)(await generator.getCreateSchemaSQL()),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Pre-fetching information schema from the database and using that
|
|
224
|
+
* as the way to compute the update diff.
|
|
225
|
+
*
|
|
226
|
+
* @note
|
|
227
|
+
* The "loadInformationSchema" mutates the "dbSchema" argument provided
|
|
228
|
+
* to it as the first argument.
|
|
229
|
+
*/
|
|
230
|
+
const dbSchema = new postgresql_1.DatabaseSchema(platform, schemaName);
|
|
231
|
+
await platform
|
|
232
|
+
.getSchemaHelper?.()
|
|
233
|
+
?.loadInformationSchema(dbSchema, connection, [
|
|
234
|
+
{
|
|
235
|
+
table_name: tableName,
|
|
236
|
+
schema_name: schemaName,
|
|
237
|
+
},
|
|
238
|
+
]);
|
|
239
|
+
let updateSQL = (0, utils_1.normalizeMigrationSQL)(await generator.getUpdateSchemaSQL({
|
|
240
|
+
fromSchema: dbSchema,
|
|
241
|
+
}));
|
|
242
|
+
updateSQL = this.pickTableRelatedCommands(tableName, updateSQL);
|
|
243
|
+
/**
|
|
244
|
+
* Entity is upto-date and hence we do not have to perform
|
|
245
|
+
* any updates on it.
|
|
246
|
+
*/
|
|
247
|
+
if (!updateSQL.length) {
|
|
248
|
+
return {
|
|
249
|
+
action: "noop",
|
|
250
|
+
linkDescriptor,
|
|
251
|
+
tableName,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
const usesUnsafeCommands = __classPrivateFieldGet(this, _MigrationsExecutionPlanner_unsafeSQLCommands, "f").some((fragment) => {
|
|
255
|
+
return updateSQL.match(new RegExp(`${fragment}`, "ig"));
|
|
256
|
+
});
|
|
257
|
+
return {
|
|
258
|
+
action: usesUnsafeCommands ? "notify" : "update",
|
|
259
|
+
linkDescriptor,
|
|
260
|
+
tableName,
|
|
261
|
+
sql: updateSQL,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
finally {
|
|
265
|
+
await orm.close(true);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* This method loops over the tables we have fetched from the
|
|
270
|
+
* "link_module_migrations" tables and checks if their new
|
|
271
|
+
* name is different from the tracked name and in that
|
|
272
|
+
* case it will rename the actual table and also the
|
|
273
|
+
* tracked entry.
|
|
274
|
+
*/
|
|
275
|
+
async migrateOldTables(orm, trackedTables) {
|
|
276
|
+
const migratedTables = [];
|
|
277
|
+
for (let trackedTable of trackedTables) {
|
|
278
|
+
const linkEntity = __classPrivateFieldGet(this, _MigrationsExecutionPlanner_linksEntities, "f").find((entity) => {
|
|
279
|
+
return (entity.linkDescriptor.fromModel ===
|
|
280
|
+
trackedTable.link_descriptor.fromModel &&
|
|
281
|
+
entity.linkDescriptor.toModel ===
|
|
282
|
+
trackedTable.link_descriptor.toModel &&
|
|
283
|
+
entity.linkDescriptor.fromModule.toLowerCase() ===
|
|
284
|
+
trackedTable.link_descriptor.fromModule.toLowerCase() &&
|
|
285
|
+
entity.linkDescriptor.toModule.toLowerCase() ===
|
|
286
|
+
trackedTable.link_descriptor.toModule.toLowerCase());
|
|
287
|
+
});
|
|
288
|
+
const newTableName = linkEntity?.entity.meta.collection;
|
|
289
|
+
/**
|
|
290
|
+
* Perform rename
|
|
291
|
+
*/
|
|
292
|
+
if (newTableName && trackedTable.table_name !== newTableName) {
|
|
293
|
+
await this.renameOldTable(orm, trackedTable.table_name, newTableName, linkEntity.linkDescriptor);
|
|
294
|
+
migratedTables.push({
|
|
295
|
+
...trackedTable,
|
|
296
|
+
table_name: newTableName,
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
migratedTables.push({
|
|
301
|
+
...trackedTable,
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return migratedTables;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Renames existing table and also its tracked entry
|
|
309
|
+
*/
|
|
310
|
+
async renameOldTable(orm, oldName, newName, descriptor) {
|
|
311
|
+
await orm.em.getDriver().getConnection().execute(`
|
|
312
|
+
ALTER TABLE "${__classPrivateFieldGet(this, _MigrationsExecutionPlanner_schema, "f")}"."${oldName}" RENAME TO "${__classPrivateFieldGet(this, _MigrationsExecutionPlanner_schema, "f")}"."${newName}";
|
|
313
|
+
UPDATE "${__classPrivateFieldGet(this, _MigrationsExecutionPlanner_schema, "f")}"."${this.tableName}" SET table_name = '${newName}', link_descriptor = '${JSON.stringify(descriptor)}' WHERE table_name = '${oldName}';
|
|
314
|
+
`);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Creates a plan to executed in order to keep the database state in
|
|
318
|
+
* sync with the user-defined links.
|
|
319
|
+
*
|
|
320
|
+
* This method only creates a plan and does not change the database
|
|
321
|
+
* state. You must call the "executePlan" method for that.
|
|
322
|
+
*/
|
|
323
|
+
async createPlan() {
|
|
324
|
+
const orm = await this.createORM();
|
|
325
|
+
try {
|
|
326
|
+
await this.ensureMigrationsTable(orm);
|
|
327
|
+
const executionActions = [];
|
|
328
|
+
await this.ensureMigrationsTableUpToDate(orm);
|
|
329
|
+
const trackedTables = await this.migrateOldTables(orm, await this.getTrackedLinksTables(orm));
|
|
330
|
+
const trackedTablesNames = trackedTables.map(({ table_name }) => table_name);
|
|
331
|
+
/**
|
|
332
|
+
* Looping through the new set of entities and generating
|
|
333
|
+
* execution plan for them
|
|
334
|
+
*/
|
|
335
|
+
for (let { entity, linkDescriptor } of __classPrivateFieldGet(this, _MigrationsExecutionPlanner_linksEntities, "f")) {
|
|
336
|
+
executionActions.push(await this.getEntityMigrationPlan(linkDescriptor, entity, trackedTablesNames));
|
|
337
|
+
}
|
|
338
|
+
const linksTableNames = __classPrivateFieldGet(this, _MigrationsExecutionPlanner_linksEntities, "f").map(({ entity }) => entity.meta.collection);
|
|
339
|
+
/**
|
|
340
|
+
* Finding the tables to be removed
|
|
341
|
+
*/
|
|
342
|
+
const tablesToRemove = (0, utils_1.arrayDifference)(trackedTablesNames, linksTableNames);
|
|
343
|
+
tablesToRemove.forEach((tableToRemove) => {
|
|
344
|
+
executionActions.push({
|
|
345
|
+
action: "delete",
|
|
346
|
+
tableName: tableToRemove,
|
|
347
|
+
linkDescriptor: trackedTables.find(({ table_name }) => tableToRemove === table_name).link_descriptor,
|
|
348
|
+
});
|
|
349
|
+
});
|
|
350
|
+
return executionActions;
|
|
351
|
+
}
|
|
352
|
+
finally {
|
|
353
|
+
await orm.close(true);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Executes the actionsPlan actions where the action is one of 'create' | 'update' | 'delete'.
|
|
358
|
+
* 'noop' and 'notify' actions are implicitly ignored. If a notify action needs to be
|
|
359
|
+
* executed, you can mutate its action to 'update', in that scenario it means that an unsafe
|
|
360
|
+
* update sql (from our point of view) will be executed and some data could be lost.
|
|
361
|
+
*
|
|
362
|
+
* @param actionPlan
|
|
363
|
+
*/
|
|
364
|
+
async executePlan(actionPlan) {
|
|
365
|
+
const orm = await this.createORM();
|
|
366
|
+
try {
|
|
367
|
+
const concurrency = parseInt(process.env.DB_MIGRATION_CONCURRENCY ?? "1");
|
|
368
|
+
await (0, utils_1.executeWithConcurrency)(actionPlan.map((action) => {
|
|
369
|
+
return async () => {
|
|
370
|
+
switch (action.action) {
|
|
371
|
+
case "delete":
|
|
372
|
+
return await this.dropLinkTable(orm, action.tableName);
|
|
373
|
+
case "create":
|
|
374
|
+
return await this.createLinkTable(orm, action);
|
|
375
|
+
case "update":
|
|
376
|
+
const sql = `SET LOCAL search_path TO "${__classPrivateFieldGet(this, _MigrationsExecutionPlanner_schema, "f")}"; \n\n${action.sql}`;
|
|
377
|
+
return await orm.em.getDriver().getConnection().execute(sql);
|
|
378
|
+
default:
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
};
|
|
382
|
+
}), concurrency);
|
|
383
|
+
}
|
|
384
|
+
finally {
|
|
385
|
+
await orm.close(true);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
exports.MigrationsExecutionPlanner = MigrationsExecutionPlanner;
|
|
390
|
+
_MigrationsExecutionPlanner_dbConfig = new WeakMap(), _MigrationsExecutionPlanner_schema = new WeakMap(), _MigrationsExecutionPlanner_unsafeSQLCommands = new WeakMap(), _MigrationsExecutionPlanner_linksEntities = new WeakMap();
|
|
391
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migration/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repositories/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLinkRepository = exports.BaseRepository = void 0;
|
|
4
|
+
var utils_1 = require("@acmekit/framework/utils");
|
|
5
|
+
Object.defineProperty(exports, "BaseRepository", { enumerable: true, get: function () { return utils_1.MikroOrmBaseRepository; } });
|
|
6
|
+
var link_1 = require("./link");
|
|
7
|
+
Object.defineProperty(exports, "getLinkRepository", { enumerable: true, get: function () { return link_1.getLinkRepository; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repositories/index.ts"],"names":[],"mappings":";;;AAAA,kDAAmF;AAA1E,uGAAA,sBAAsB,OAAkB;AACjD,+BAA0C;AAAjC,yGAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Context, ModuleJoinerConfig } from "@acmekit/framework/types";
|
|
2
|
+
import { EntitySchema } from "@acmekit/framework/mikro-orm/core";
|
|
3
|
+
export declare function getLinkRepository(model: EntitySchema): {
|
|
4
|
+
new ({ joinerConfig }: {
|
|
5
|
+
joinerConfig: ModuleJoinerConfig;
|
|
6
|
+
}): {
|
|
7
|
+
readonly joinerConfig_: ModuleJoinerConfig;
|
|
8
|
+
delete(data: any, context?: Context): Promise<string[]>;
|
|
9
|
+
create(data: object[], context?: Context): Promise<object[]>;
|
|
10
|
+
entity: import("@acmekit/framework/mikro-orm/core").EntityClass<EntitySchema<any, never>>;
|
|
11
|
+
update(data: {
|
|
12
|
+
entity: any;
|
|
13
|
+
update: any;
|
|
14
|
+
}[], context?: Context): Promise<any[]>;
|
|
15
|
+
find(options?: import("@acmekit/framework/types").FindOptions<EntitySchema<any, never>> | undefined, context?: Context): Promise<any[]>;
|
|
16
|
+
findAndCount(options?: import("@acmekit/framework/types").FindOptions<EntitySchema<any, never>> | undefined, context?: Context): Promise<[any[], number]>;
|
|
17
|
+
upsert(data: unknown[], context?: Context): Promise<any[]>;
|
|
18
|
+
upsertWithReplace(data: unknown[], config?: import("@acmekit/framework/types").UpsertWithReplaceConfig<any> | undefined, context?: Context): Promise<{
|
|
19
|
+
entities: any[];
|
|
20
|
+
performedActions: import("@acmekit/framework/types").PerformedActions;
|
|
21
|
+
}>;
|
|
22
|
+
softDelete(filters: string | string[] | (import("@acmekit/types/dist/dal/utils").FilterQueryProperties<EntitySchema<any, never>, 3> & import("@acmekit/framework/types").BaseFilterable<import("@acmekit/types/dist/dal/utils").FilterQueryProperties<EntitySchema<any, never>, 3>>) | (import("@acmekit/types/dist/dal/utils").FilterQueryProperties<EntitySchema<any, never>, 3> & import("@acmekit/framework/types").BaseFilterable<import("@acmekit/types/dist/dal/utils").FilterQueryProperties<EntitySchema<any, never>, 3>>)[], sharedContext?: Context): Promise<[any[], Record<string, unknown[]>]>;
|
|
23
|
+
restore(idsOrFilter: string[] | import("@acmekit/framework/types").FilterQuery, sharedContext?: Context): Promise<[any[], Record<string, unknown[]>]>;
|
|
24
|
+
readonly manager_: any;
|
|
25
|
+
getFreshManager<TManager = unknown>(): TManager;
|
|
26
|
+
getActiveManager<TManager = unknown>({ transactionManager, manager, }?: Context): TManager;
|
|
27
|
+
transaction<TManager = unknown>(task: (transactionManager: TManager) => Promise<any>, options?: {
|
|
28
|
+
manager?: TManager;
|
|
29
|
+
isolationLevel?: string;
|
|
30
|
+
enableNestedTransactions?: boolean;
|
|
31
|
+
transaction?: TManager;
|
|
32
|
+
}): Promise<any>;
|
|
33
|
+
serialize<TOutput extends object | object[]>(data: any, options?: any): Promise<TOutput>;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/repositories/link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAQhE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY;2BAInB;QAAE,YAAY,EAAE,kBAAkB,CAAA;KAAE;gCAF1C,kBAAkB;qBAQvB,GAAG,YAAW,OAAO,GAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;qBAW9C,MAAM,EAAE,YAAW,OAAO,GAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;;;;;;;;;;;;;;;;;;;mBAX3B,CAAC;0BACtC,CAAC;oCACmB,CAAA;uBAEpB,CAAL;;;;EAwBJ"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLinkRepository = getLinkRepository;
|
|
4
|
+
const utils_1 = require("@acmekit/framework/utils");
|
|
5
|
+
function getLinkRepository(model) {
|
|
6
|
+
return class LinkRepository extends (0, utils_1.mikroOrmBaseRepositoryFactory)(model) {
|
|
7
|
+
constructor({ joinerConfig }) {
|
|
8
|
+
// @ts-ignore
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.joinerConfig_ = joinerConfig;
|
|
11
|
+
}
|
|
12
|
+
async delete(data, context = {}) {
|
|
13
|
+
const filter = {};
|
|
14
|
+
for (const key in data) {
|
|
15
|
+
filter[key] = {
|
|
16
|
+
$in: Array.isArray(data[key]) ? data[key] : [data[key]],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
return await super.delete(filter, context);
|
|
20
|
+
}
|
|
21
|
+
async create(data, context = {}) {
|
|
22
|
+
const manager = this.getActiveManager(context);
|
|
23
|
+
const links = data.map((link) => {
|
|
24
|
+
link.id = (0, utils_1.generateEntityId)(link.id, this.joinerConfig_.databaseConfig?.idPrefix ?? "link");
|
|
25
|
+
link.deleted_at = null;
|
|
26
|
+
return manager.create(model, link);
|
|
27
|
+
});
|
|
28
|
+
await manager.upsertMany(model, links);
|
|
29
|
+
return links;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/repositories/link.ts"],"names":[],"mappings":";;AASA,8CAsCC;AA5CD,oDAGiC;AAGjC,SAAgB,iBAAiB,CAAC,KAAmB;IACnD,OAAO,MAAM,cAAe,SAAQ,IAAA,qCAA6B,EAAC,KAAK,CAAC;QAGtE,YAAY,EAAE,YAAY,EAAwC;YAChE,aAAa;YACb,KAAK,CAAC,GAAG,SAAS,CAAC,CAAA;YACnB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAA;QACnC,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAS,EAAE,UAAmB,EAAE;YAC3C,MAAM,MAAM,GAAG,EAAE,CAAA;YACjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,CAAC,GAAG,CAAC,GAAG;oBACZ,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBACxD,CAAA;YACH,CAAC;YAED,OAAO,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC5C,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAc,EAAE,UAAmB,EAAE;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAmB,OAAO,CAAC,CAAA;YAEhE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;gBACnC,IAAI,CAAC,EAAE,GAAG,IAAA,wBAAgB,EACxB,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,QAAQ,IAAI,MAAM,CACtD,CAAA;gBACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;gBACtB,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YACpC,CAAC,CAAC,CAAA;YAEF,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAEtC,OAAO,KAAK,CAAA;QACd,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Constructor, ILinkModule, ModuleJoinerConfig } from "@acmekit/framework/types";
|
|
2
|
+
export declare function getModuleService(joinerConfig: ModuleJoinerConfig): Constructor<ILinkModule>;
|
|
3
|
+
export declare function getReadOnlyModuleService(joinerConfig: ModuleJoinerConfig): {
|
|
4
|
+
new (): {
|
|
5
|
+
__joinerConfig(): ModuleJoinerConfig;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=dynamic-service-class.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-service-class.d.ts","sourceRoot":"","sources":["../../src/services/dynamic-service-class.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,WAAW,EACX,kBAAkB,EACnB,MAAM,0BAA0B,CAAA;AAIjC,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,kBAAkB,GAC/B,WAAW,CAAC,WAAW,CAAC,CAmB1B;AAED,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,kBAAkB;;0BAEnD,kBAAkB;;EAIvC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getModuleService = getModuleService;
|
|
4
|
+
exports.getReadOnlyModuleService = getReadOnlyModuleService;
|
|
5
|
+
const utils_1 = require("@acmekit/framework/utils");
|
|
6
|
+
const _services_1 = require(".");
|
|
7
|
+
function getModuleService(joinerConfig) {
|
|
8
|
+
const joinerConfig_ = JSON.parse(JSON.stringify(joinerConfig));
|
|
9
|
+
const databaseConfig = joinerConfig_.databaseConfig;
|
|
10
|
+
delete joinerConfig_.databaseConfig;
|
|
11
|
+
// If extraDataFields is not defined, pick the fields to populate and validate from the
|
|
12
|
+
// database config if any fields are provided.
|
|
13
|
+
if (!(0, utils_1.isDefined)(joinerConfig_.extraDataFields)) {
|
|
14
|
+
joinerConfig_.extraDataFields = Object.keys(databaseConfig?.extraFields || {});
|
|
15
|
+
}
|
|
16
|
+
return class LinkService extends _services_1.LinkModuleService {
|
|
17
|
+
__joinerConfig() {
|
|
18
|
+
return joinerConfig_;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function getReadOnlyModuleService(joinerConfig) {
|
|
23
|
+
return class ReadOnlyLinkService {
|
|
24
|
+
__joinerConfig() {
|
|
25
|
+
return joinerConfig;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=dynamic-service-class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-service-class.js","sourceRoot":"","sources":["../../src/services/dynamic-service-class.ts"],"names":[],"mappings":";;AAQA,4CAqBC;AAED,4DAMC;AAhCD,oDAAoD;AACpD,yCAA6C;AAE7C,SAAgB,gBAAgB,CAC9B,YAAgC;IAEhC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAA;IAC9D,MAAM,cAAc,GAAG,aAAa,CAAC,cAAc,CAAA;IAEnD,OAAO,aAAa,CAAC,cAAc,CAAA;IAEnC,uFAAuF;IACvF,8CAA8C;IAC9C,IAAI,CAAC,IAAA,iBAAS,EAAC,aAAa,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9C,aAAa,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,CACzC,cAAc,EAAE,WAAW,IAAI,EAAE,CAClC,CAAA;IACH,CAAC;IAED,OAAO,MAAM,WAAY,SAAQ,6BAAiB;QACvC,cAAc;YACrB,OAAO,aAAmC,CAAA;QAC5C,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAgB,wBAAwB,CAAC,YAAgC;IACvE,OAAO,MAAM,mBAAmB;QAC9B,cAAc;YACZ,OAAO,YAAkC,CAAA;QAC3C,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.LinkModuleService = exports.LinkService = void 0;
|
|
21
|
+
__exportStar(require("./dynamic-service-class"), exports);
|
|
22
|
+
var link_1 = require("./link");
|
|
23
|
+
Object.defineProperty(exports, "LinkService", { enumerable: true, get: function () { return __importDefault(link_1).default; } });
|
|
24
|
+
var link_module_service_1 = require("./link-module-service");
|
|
25
|
+
Object.defineProperty(exports, "LinkModuleService", { enumerable: true, get: function () { return __importDefault(link_module_service_1).default; } });
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,0DAAuC;AACvC,+BAA+C;AAAtC,oHAAA,OAAO,OAAe;AAC/B,6DAAoE;AAA3D,yIAAA,OAAO,OAAqB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Context, DAL, FindConfig, IEventBusModuleService, ILinkModule, InternalModuleDeclaration, ModuleJoinerConfig, RestoreReturn, SoftDeleteReturn } from "@acmekit/framework/types";
|
|
2
|
+
import { Modules } from "@acmekit/framework/utils";
|
|
3
|
+
import { LinkService } from ".";
|
|
4
|
+
type InjectedDependencies = {
|
|
5
|
+
baseRepository: DAL.RepositoryService;
|
|
6
|
+
linkService: LinkService<any>;
|
|
7
|
+
primaryKey: string | string[];
|
|
8
|
+
foreignKey: string;
|
|
9
|
+
extraFields: string[];
|
|
10
|
+
entityName: string;
|
|
11
|
+
serviceName: string;
|
|
12
|
+
[Modules.EVENT_BUS]?: IEventBusModuleService;
|
|
13
|
+
};
|
|
14
|
+
export default class LinkModuleService implements ILinkModule {
|
|
15
|
+
readonly moduleDeclaration: InternalModuleDeclaration;
|
|
16
|
+
protected baseRepository_: DAL.RepositoryService;
|
|
17
|
+
protected readonly linkService_: LinkService<any>;
|
|
18
|
+
protected readonly eventBusModuleService_?: IEventBusModuleService;
|
|
19
|
+
protected readonly entityName_: string;
|
|
20
|
+
protected readonly serviceName_: string;
|
|
21
|
+
protected primaryKey_: string[];
|
|
22
|
+
protected foreignKey_: string;
|
|
23
|
+
protected extraFields_: string[];
|
|
24
|
+
constructor({ baseRepository, linkService, primaryKey, foreignKey, extraFields, entityName, serviceName, [Modules.EVENT_BUS]: eventBusModuleService, }: InjectedDependencies, moduleDeclaration: InternalModuleDeclaration);
|
|
25
|
+
__joinerConfig(): ModuleJoinerConfig;
|
|
26
|
+
private buildData;
|
|
27
|
+
private isValidKeyName;
|
|
28
|
+
private validateFields;
|
|
29
|
+
retrieve(primaryKeyData: string | string[], foreignKeyData: string, sharedContext?: Context): Promise<unknown>;
|
|
30
|
+
list(filters?: Record<string, unknown>, config?: FindConfig<unknown>, sharedContext?: Context): Promise<unknown[]>;
|
|
31
|
+
listAndCount(filters?: Record<string, unknown>, config?: FindConfig<unknown>, sharedContext?: Context): Promise<[unknown[], number]>;
|
|
32
|
+
create(primaryKeyOrBulkData: string | string[] | [string | string[], string, Record<string, unknown>][], foreignKeyData?: string, extraFields?: Record<string, unknown>, sharedContext?: Context): Promise<unknown[]>;
|
|
33
|
+
dismiss(primaryKeyOrBulkData: string | string[] | [string | string[], string][], foreignKeyData?: string, sharedContext?: Context): Promise<unknown[]>;
|
|
34
|
+
delete(data: any, sharedContext?: Context): Promise<void>;
|
|
35
|
+
softDelete(data: any, { returnLinkableKeys }?: SoftDeleteReturn, sharedContext?: Context): Promise<Record<string, unknown[]> | void>;
|
|
36
|
+
protected softDelete_(data: any[], sharedContext?: Context): Promise<[object[], Record<string, string[]>]>;
|
|
37
|
+
restore(data: any, { returnLinkableKeys }?: RestoreReturn, sharedContext?: Context): Promise<Record<string, unknown[]> | void>;
|
|
38
|
+
restore_(data: any, sharedContext?: Context): Promise<[object[], Record<string, string[]>]>;
|
|
39
|
+
protected emitEvents_(groupedEvents: any): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=link-module-service.d.ts.map
|