@ruiapp/rapid-core 0.9.7 → 0.9.9
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/CHANGELOG.md +11 -11
- package/dist/helpers/entityHelper.d.ts +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +163 -53
- package/dist/utilities/fsUtility.d.ts +8 -0
- package/package.json +1 -1
- package/rollup.config.js +16 -16
- package/src/bootstrapApplicationConfig.ts +782 -782
- package/src/core/actionHandler.ts +23 -23
- package/src/core/eventManager.ts +20 -20
- package/src/core/facility.ts +7 -7
- package/src/core/http/formDataParser.ts +89 -89
- package/src/core/http-types.ts +4 -4
- package/src/core/pluginManager.ts +193 -193
- package/src/core/providers/runtimeProvider.ts +5 -5
- package/src/core/request.ts +96 -96
- package/src/core/response.ts +79 -79
- package/src/core/routeContext.ts +127 -127
- package/src/core/routes/healthz.ts +20 -20
- package/src/core/routes/index.ts +3 -3
- package/src/core/routesBuilder.ts +110 -110
- package/src/core/server.ts +156 -156
- package/src/dataAccess/columnTypeMapper.ts +22 -22
- package/src/dataAccess/dataAccessTypes.ts +165 -165
- package/src/dataAccess/dataAccessor.ts +135 -135
- package/src/dataAccess/entityManager.ts +1932 -1932
- package/src/dataAccess/entityMapper.ts +111 -111
- package/src/dataAccess/entityValidator.ts +33 -33
- package/src/dataAccess/propertyMapper.ts +28 -28
- package/src/deno-std/assert/assert.ts +9 -9
- package/src/deno-std/assert/assertion_error.ts +7 -7
- package/src/deno-std/datetime/to_imf.ts +32 -32
- package/src/deno-std/encoding/base64.ts +141 -141
- package/src/deno-std/http/cookie.ts +372 -372
- package/src/facilities/cache/CacheFacilityTypes.ts +29 -29
- package/src/facilities/cache/CacheFactory.ts +31 -31
- package/src/facilities/cache/MemoryCache.ts +58 -58
- package/src/facilities/cache/MemoryCacheProvider.ts +15 -15
- package/src/facilities/log/LogFacility.ts +35 -35
- package/src/helpers/entityHelper.ts +89 -76
- package/src/helpers/filterHelper.ts +148 -148
- package/src/helpers/inputHelper.ts +11 -11
- package/src/helpers/licenseHelper.ts +29 -29
- package/src/helpers/metaHelper.ts +111 -111
- package/src/helpers/runCollectionEntityActionHandler.ts +58 -58
- package/src/index.ts +82 -81
- package/src/plugins/auth/AuthPlugin.ts +103 -103
- package/src/plugins/auth/AuthPluginTypes.ts +11 -11
- package/src/plugins/auth/actionHandlers/changePassword.ts +61 -61
- package/src/plugins/auth/actionHandlers/createSession.ts +68 -68
- package/src/plugins/auth/actionHandlers/deleteSession.ts +18 -18
- package/src/plugins/auth/actionHandlers/getMyProfile.ts +38 -38
- package/src/plugins/auth/actionHandlers/index.ts +8 -8
- package/src/plugins/auth/actionHandlers/resetPassword.ts +45 -45
- package/src/plugins/auth/models/AccessToken.ts +56 -56
- package/src/plugins/auth/models/index.ts +3 -3
- package/src/plugins/auth/routes/changePassword.ts +15 -15
- package/src/plugins/auth/routes/getMyProfile.ts +15 -15
- package/src/plugins/auth/routes/index.ts +7 -7
- package/src/plugins/auth/routes/resetPassword.ts +15 -15
- package/src/plugins/auth/routes/signin.ts +15 -15
- package/src/plugins/auth/routes/signout.ts +15 -15
- package/src/plugins/auth/services/AuthService.ts +39 -39
- package/src/plugins/cronJob/CronJobPlugin.ts +104 -104
- package/src/plugins/cronJob/CronJobPluginTypes.ts +44 -44
- package/src/plugins/cronJob/actionHandlers/index.ts +4 -4
- package/src/plugins/cronJob/actionHandlers/runCronJob.ts +32 -32
- package/src/plugins/cronJob/entityWatchers/cronJobEntityWatchers.ts +24 -24
- package/src/plugins/cronJob/entityWatchers/index.ts +4 -4
- package/src/plugins/cronJob/models/CronJob.ts +129 -129
- package/src/plugins/cronJob/models/index.ts +3 -3
- package/src/plugins/cronJob/routes/index.ts +3 -3
- package/src/plugins/cronJob/routes/runCronJob.ts +15 -15
- package/src/plugins/cronJob/services/CronJobService.ts +252 -252
- package/src/plugins/dataManage/DataManagePlugin.ts +163 -163
- package/src/plugins/dataManage/actionHandlers/addEntityRelations.ts +15 -15
- package/src/plugins/dataManage/actionHandlers/countCollectionEntities.ts +17 -17
- package/src/plugins/dataManage/actionHandlers/createCollectionEntitiesBatch.ts +81 -81
- package/src/plugins/dataManage/actionHandlers/createCollectionEntity.ts +20 -20
- package/src/plugins/dataManage/actionHandlers/deleteCollectionEntities.ts +45 -45
- package/src/plugins/dataManage/actionHandlers/deleteCollectionEntityById.ts +20 -20
- package/src/plugins/dataManage/actionHandlers/findCollectionEntities.ts +27 -27
- package/src/plugins/dataManage/actionHandlers/findCollectionEntityById.ts +30 -30
- package/src/plugins/dataManage/actionHandlers/queryDatabase.ts +22 -22
- package/src/plugins/dataManage/actionHandlers/removeEntityRelations.ts +15 -15
- package/src/plugins/dataManage/actionHandlers/updateCollectionEntityById.ts +38 -38
- package/src/plugins/entityAccessControl/EntityAccessControlPlugin.ts +146 -146
- package/src/plugins/fileManage/FileManagePlugin.ts +52 -52
- package/src/plugins/fileManage/actionHandlers/downloadDocument.ts +65 -65
- package/src/plugins/fileManage/actionHandlers/downloadFile.ts +44 -44
- package/src/plugins/fileManage/actionHandlers/uploadFile.ts +33 -33
- package/src/plugins/fileManage/routes/downloadDocument.ts +15 -15
- package/src/plugins/fileManage/routes/downloadFile.ts +15 -15
- package/src/plugins/fileManage/routes/index.ts +5 -5
- package/src/plugins/fileManage/routes/uploadFile.ts +15 -15
- package/src/plugins/license/LicensePlugin.ts +79 -79
- package/src/plugins/license/LicensePluginTypes.ts +95 -95
- package/src/plugins/license/LicenseService.ts +137 -137
- package/src/plugins/license/actionHandlers/getLicense.ts +18 -18
- package/src/plugins/license/actionHandlers/index.ts +5 -5
- package/src/plugins/license/actionHandlers/updateLicense.ts +24 -24
- package/src/plugins/license/helpers/certHelper.ts +21 -21
- package/src/plugins/license/helpers/cryptoHelper.ts +47 -47
- package/src/plugins/license/models/index.ts +1 -1
- package/src/plugins/license/routes/getLicense.ts +15 -15
- package/src/plugins/license/routes/index.ts +4 -4
- package/src/plugins/license/routes/updateLicense.ts +15 -15
- package/src/plugins/mail/MailPlugin.ts +74 -74
- package/src/plugins/mail/MailPluginTypes.ts +27 -27
- package/src/plugins/mail/MailService.ts +38 -38
- package/src/plugins/mail/actionHandlers/index.ts +3 -3
- package/src/plugins/mail/models/index.ts +1 -1
- package/src/plugins/mail/routes/index.ts +1 -1
- package/src/plugins/metaManage/MetaManagePlugin.ts +198 -198
- package/src/plugins/metaManage/actionHandlers/getMetaModelDetail.ts +10 -10
- package/src/plugins/metaManage/actionHandlers/listMetaModels.ts +9 -9
- package/src/plugins/metaManage/actionHandlers/listMetaRoutes.ts +9 -9
- package/src/plugins/metaManage/services/MetaService.ts +376 -376
- package/src/plugins/notification/NotificationPlugin.ts +68 -68
- package/src/plugins/notification/NotificationPluginTypes.ts +13 -13
- package/src/plugins/notification/NotificationService.ts +25 -25
- package/src/plugins/notification/actionHandlers/index.ts +3 -3
- package/src/plugins/notification/models/Notification.ts +60 -60
- package/src/plugins/notification/models/index.ts +3 -3
- package/src/plugins/notification/routes/index.ts +1 -1
- package/src/plugins/routeManage/RouteManagePlugin.ts +64 -64
- package/src/plugins/routeManage/actionHandlers/httpProxy.ts +13 -13
- package/src/plugins/routeManage/actionHandlers/mock.ts +28 -28
- package/src/plugins/sequence/SequencePlugin.ts +146 -146
- package/src/plugins/sequence/SequencePluginTypes.ts +69 -69
- package/src/plugins/sequence/SequenceService.ts +92 -92
- package/src/plugins/sequence/actionHandlers/generateSn.ts +32 -32
- package/src/plugins/sequence/actionHandlers/index.ts +4 -4
- package/src/plugins/sequence/models/SequenceAutoIncrementRecord.ts +49 -49
- package/src/plugins/sequence/models/SequenceRule.ts +42 -42
- package/src/plugins/sequence/models/index.ts +4 -4
- package/src/plugins/sequence/routes/generateSn.ts +15 -15
- package/src/plugins/sequence/routes/index.ts +3 -3
- package/src/plugins/sequence/segment-utility.ts +11 -11
- package/src/plugins/sequence/segments/autoIncrement.ts +90 -90
- package/src/plugins/sequence/segments/dayOfMonth.ts +19 -19
- package/src/plugins/sequence/segments/index.ts +9 -9
- package/src/plugins/sequence/segments/literal.ts +16 -16
- package/src/plugins/sequence/segments/month.ts +19 -19
- package/src/plugins/sequence/segments/parameter.ts +20 -20
- package/src/plugins/sequence/segments/year.ts +19 -19
- package/src/plugins/serverOperation/ServerOperationPlugin.ts +91 -91
- package/src/plugins/serverOperation/ServerOperationPluginTypes.ts +15 -15
- package/src/plugins/serverOperation/actionHandlers/index.ts +4 -4
- package/src/plugins/serverOperation/actionHandlers/runServerOperation.ts +15 -15
- package/src/plugins/setting/SettingPlugin.ts +68 -68
- package/src/plugins/setting/SettingPluginTypes.ts +37 -37
- package/src/plugins/setting/SettingService.ts +213 -213
- package/src/plugins/setting/actionHandlers/getSystemSettingValues.ts +30 -30
- package/src/plugins/setting/actionHandlers/getUserSettingValues.ts +38 -38
- package/src/plugins/setting/actionHandlers/index.ts +6 -6
- package/src/plugins/setting/actionHandlers/setSystemSettingValues.ts +30 -30
- package/src/plugins/setting/models/SystemSettingGroupSetting.ts +57 -57
- package/src/plugins/setting/models/SystemSettingItem.ts +48 -48
- package/src/plugins/setting/models/SystemSettingItemSetting.ts +73 -73
- package/src/plugins/setting/models/UserSettingGroupSetting.ts +57 -57
- package/src/plugins/setting/models/UserSettingItem.ts +55 -55
- package/src/plugins/setting/models/UserSettingItemSetting.ts +73 -73
- package/src/plugins/setting/models/index.ts +8 -8
- package/src/plugins/setting/routes/getSystemSettingValues.ts +15 -15
- package/src/plugins/setting/routes/getUserSettingValues.ts +15 -15
- package/src/plugins/setting/routes/index.ts +5 -5
- package/src/plugins/setting/routes/setSystemSettingValues.ts +15 -15
- package/src/plugins/stateMachine/StateMachinePlugin.ts +196 -196
- package/src/plugins/stateMachine/StateMachinePluginTypes.ts +48 -48
- package/src/plugins/stateMachine/actionHandlers/index.ts +4 -4
- package/src/plugins/stateMachine/actionHandlers/sendStateMachineEvent.ts +54 -54
- package/src/plugins/stateMachine/models/StateMachine.ts +42 -42
- package/src/plugins/stateMachine/models/index.ts +3 -3
- package/src/plugins/stateMachine/routes/index.ts +3 -3
- package/src/plugins/stateMachine/routes/sendStateMachineEvent.ts +15 -15
- package/src/plugins/stateMachine/stateMachineHelper.ts +36 -36
- package/src/plugins/webhooks/WebhooksPlugin.ts +148 -148
- package/src/plugins/webhooks/pluginConfig.ts +75 -75
- package/src/polyfill.ts +5 -5
- package/src/proxy/mod.ts +38 -38
- package/src/proxy/types.ts +21 -21
- package/src/queryBuilder/index.ts +1 -1
- package/src/queryBuilder/queryBuilder.ts +755 -755
- package/src/server.ts +530 -530
- package/src/types/cron-job-types.ts +66 -66
- package/src/types.ts +856 -856
- package/src/utilities/accessControlUtility.ts +33 -33
- package/src/utilities/entityUtility.ts +18 -18
- package/src/utilities/errorUtility.ts +15 -15
- package/src/utilities/fsUtility.ts +137 -61
- package/src/utilities/httpUtility.ts +19 -19
- package/src/utilities/jwtUtility.ts +26 -26
- package/src/utilities/passwordUtility.ts +26 -26
- package/src/utilities/pathUtility.ts +14 -14
- package/src/utilities/timeUtility.ts +17 -17
- package/src/utilities/typeUtility.ts +15 -15
- package/tsconfig.json +19 -19
package/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# @ruiapp/rapid-core
|
|
2
|
-
|
|
3
|
-
## 0.7.0
|
|
4
|
-
|
|
5
|
-
- feature: added server.registerCronJob to allow plugins register cron jobs.
|
|
6
|
-
|
|
7
|
-
## 0.2.4
|
|
8
|
-
|
|
9
|
-
### Patch Changes
|
|
10
|
-
|
|
11
|
-
- 146a99d: add between filterMode, range is deprecated
|
|
1
|
+
# @ruiapp/rapid-core
|
|
2
|
+
|
|
3
|
+
## 0.7.0
|
|
4
|
+
|
|
5
|
+
- feature: added server.registerCronJob to allow plugins register cron jobs.
|
|
6
|
+
|
|
7
|
+
## 0.2.4
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 146a99d: add between filterMode, range is deprecated
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { IRpdServer } from "../core/server";
|
|
2
|
-
import { RpdDataModel } from "../types";
|
|
3
|
-
export declare function detectChangedFieldsOfEntity(server: IRpdServer, model: RpdDataModel, before: any, after: any): Record<string, any> | null;
|
|
2
|
+
import { RpdDataModel, UpdateEntityByIdOptions } from "../types";
|
|
3
|
+
export declare function detectChangedFieldsOfEntity(server: IRpdServer, model: RpdDataModel, before: any, after: any, relationPropertiesToUpdate: UpdateEntityByIdOptions["relationPropertiesToUpdate"]): Record<string, any> | null;
|
package/dist/index.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export { default as EntityManager } from "./dataAccess/entityManager";
|
|
|
13
13
|
export * from "./dataAccess/entityManager";
|
|
14
14
|
export * from "./utilities/accessControlUtility";
|
|
15
15
|
export * from "./utilities/entityUtility";
|
|
16
|
+
export * from "./utilities/fsUtility";
|
|
16
17
|
export * from "./utilities/jwtUtility";
|
|
17
18
|
export * from "./utilities/timeUtility";
|
|
18
19
|
export * from "./utilities/passwordUtility";
|
package/dist/index.js
CHANGED
|
@@ -7,11 +7,11 @@ var events = require('events');
|
|
|
7
7
|
var Router = require('koa-tree-router');
|
|
8
8
|
var qs = require('qs');
|
|
9
9
|
var dayjs = require('dayjs');
|
|
10
|
+
var fs = require('fs');
|
|
11
|
+
var path = require('path');
|
|
10
12
|
var jsonwebtoken = require('jsonwebtoken');
|
|
11
13
|
var crypto = require('crypto');
|
|
12
14
|
var bcrypt = require('bcryptjs');
|
|
13
|
-
var path = require('path');
|
|
14
|
-
var fs = require('fs');
|
|
15
15
|
var uuid = require('uuid');
|
|
16
16
|
var nodemailer = require('nodemailer');
|
|
17
17
|
var cron = require('cron');
|
|
@@ -22,10 +22,10 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
22
22
|
var Router__default = /*#__PURE__*/_interopDefaultLegacy(Router);
|
|
23
23
|
var qs__default = /*#__PURE__*/_interopDefaultLegacy(qs);
|
|
24
24
|
var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
|
|
25
|
+
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
|
26
|
+
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
|
|
25
27
|
var crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto);
|
|
26
28
|
var bcrypt__default = /*#__PURE__*/_interopDefaultLegacy(bcrypt);
|
|
27
|
-
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
|
|
28
|
-
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
|
29
29
|
var nodemailer__default = /*#__PURE__*/_interopDefaultLegacy(nodemailer);
|
|
30
30
|
|
|
31
31
|
function fixBigIntJSONSerialize() {
|
|
@@ -2246,7 +2246,7 @@ function mapPropertyNameToColumnName(server, model, propertyName) {
|
|
|
2246
2246
|
return property.columnName || property.code;
|
|
2247
2247
|
}
|
|
2248
2248
|
|
|
2249
|
-
function detectChangedFieldsOfEntity(server, model, before, after) {
|
|
2249
|
+
function detectChangedFieldsOfEntity(server, model, before, after, relationPropertiesToUpdate) {
|
|
2250
2250
|
if (!before) {
|
|
2251
2251
|
throw new Error("Argument 'before' can not be null.");
|
|
2252
2252
|
}
|
|
@@ -2261,6 +2261,11 @@ function detectChangedFieldsOfEntity(server, model, before, after) {
|
|
|
2261
2261
|
const afterValue = after[key];
|
|
2262
2262
|
const beforeValue = before[key] || before[property.targetIdColumnName];
|
|
2263
2263
|
if (afterValue) {
|
|
2264
|
+
if (relationPropertiesToUpdate && relationPropertiesToUpdate[property.code]) {
|
|
2265
|
+
changed = true;
|
|
2266
|
+
changes[key] = afterValue;
|
|
2267
|
+
continue;
|
|
2268
|
+
}
|
|
2264
2269
|
if (lodash.isNumber(afterValue)) {
|
|
2265
2270
|
if (beforeValue) {
|
|
2266
2271
|
if (lodash.isNumber(beforeValue)) {
|
|
@@ -2863,8 +2868,8 @@ async function findManyRelationLinksViaLinkTable(options) {
|
|
|
2863
2868
|
const command = `SELECT * FROM ${server.queryBuilder.quoteTable({
|
|
2864
2869
|
schema: relationProperty.linkSchema,
|
|
2865
2870
|
tableName: relationProperty.linkTableName,
|
|
2866
|
-
})} WHERE ${server.queryBuilder.quoteObject(relationProperty.selfIdColumnName)} = ANY($1::int[])
|
|
2867
|
-
ORDER BY id
|
|
2871
|
+
})} WHERE ${server.queryBuilder.quoteObject(relationProperty.selfIdColumnName)} = ANY($1::int[])
|
|
2872
|
+
ORDER BY id
|
|
2868
2873
|
`;
|
|
2869
2874
|
const params = [mainEntityIds];
|
|
2870
2875
|
const relationLinks = await server.queryDatabaseObject(command, params, routeContext?.getDbTransactionClient());
|
|
@@ -3251,7 +3256,7 @@ async function updateEntityById(server, dataAccessor, options, plugin) {
|
|
|
3251
3256
|
if (!entity) {
|
|
3252
3257
|
throw new Error(`${model.namespace}.${model.singularCode} with id "${id}" was not found.`);
|
|
3253
3258
|
}
|
|
3254
|
-
let changes = detectChangedFieldsOfEntity(server, model, entity, entityToSave);
|
|
3259
|
+
let changes = detectChangedFieldsOfEntity(server, model, entity, entityToSave, options.relationPropertiesToUpdate);
|
|
3255
3260
|
if (!changes && !options.operation) {
|
|
3256
3261
|
return entity;
|
|
3257
3262
|
}
|
|
@@ -3281,7 +3286,7 @@ async function updateEntityById(server, dataAccessor, options, plugin) {
|
|
|
3281
3286
|
sender: plugin,
|
|
3282
3287
|
routeContext: options.routeContext,
|
|
3283
3288
|
});
|
|
3284
|
-
changes = detectChangedFieldsOfEntity(server, model, entity, entityToSave);
|
|
3289
|
+
changes = detectChangedFieldsOfEntity(server, model, entity, entityToSave, options.relationPropertiesToUpdate);
|
|
3285
3290
|
// check readonly properties
|
|
3286
3291
|
Object.keys(changes).forEach((propertyName) => {
|
|
3287
3292
|
let isReadonlyProperty = false;
|
|
@@ -3495,7 +3500,7 @@ async function updateEntityById(server, dataAccessor, options, plugin) {
|
|
|
3495
3500
|
await server.queryDatabaseObject(`DELETE FROM ${server.queryBuilder.quoteTable({
|
|
3496
3501
|
schema: property.linkSchema,
|
|
3497
3502
|
tableName: property.linkTableName,
|
|
3498
|
-
})} WHERE ${server.queryBuilder.quoteObject(property.selfIdColumnName)} = $1
|
|
3503
|
+
})} WHERE ${server.queryBuilder.quoteObject(property.selfIdColumnName)} = $1
|
|
3499
3504
|
AND ${server.queryBuilder.quoteObject(property.targetIdColumnName)} <> ALL($2::int[])`, [id, targetIdsToKeep], routeContext?.getDbTransactionClient());
|
|
3500
3505
|
}
|
|
3501
3506
|
else {
|
|
@@ -3524,8 +3529,8 @@ async function updateEntityById(server, dataAccessor, options, plugin) {
|
|
|
3524
3529
|
await server.queryDatabaseObject(`UPDATE ${server.queryBuilder.quoteTable({
|
|
3525
3530
|
schema: relationModel.schema,
|
|
3526
3531
|
tableName: relationModel.tableName,
|
|
3527
|
-
})}
|
|
3528
|
-
SET ${server.queryBuilder.quoteObject(property.selfIdColumnName)} = null
|
|
3532
|
+
})}
|
|
3533
|
+
SET ${server.queryBuilder.quoteObject(property.selfIdColumnName)} = null
|
|
3529
3534
|
WHERE id = ANY($1::int[])`, [targetIdsToRemove], routeContext?.getDbTransactionClient());
|
|
3530
3535
|
}
|
|
3531
3536
|
else {
|
|
@@ -3810,7 +3815,7 @@ async function deleteEntityById(server, dataAccessor, options, plugin) {
|
|
|
3810
3815
|
await server.queryDatabaseObject(`DELETE FROM ${server.queryBuilder.quoteTable({
|
|
3811
3816
|
schema: relationProperty.linkSchema,
|
|
3812
3817
|
tableName: relationProperty.linkTableName,
|
|
3813
|
-
})}
|
|
3818
|
+
})}
|
|
3814
3819
|
WHERE ${server.queryBuilder.quoteObject(relationProperty.selfIdColumnName)} = $1`, [id], routeContext?.getDbTransactionClient());
|
|
3815
3820
|
}
|
|
3816
3821
|
else {
|
|
@@ -3820,8 +3825,8 @@ async function deleteEntityById(server, dataAccessor, options, plugin) {
|
|
|
3820
3825
|
await server.queryDatabaseObject(`UPDATE ${server.queryBuilder.quoteTable({
|
|
3821
3826
|
schema: relationModel.schema,
|
|
3822
3827
|
tableName: relationModel.tableName,
|
|
3823
|
-
})}
|
|
3824
|
-
SET ${server.queryBuilder.quoteObject(relationProperty.selfIdColumnName)} = null
|
|
3828
|
+
})}
|
|
3829
|
+
SET ${server.queryBuilder.quoteObject(relationProperty.selfIdColumnName)} = null
|
|
3825
3830
|
WHERE ${server.queryBuilder.quoteObject(relationProperty.selfIdColumnName)} = $1`, [id], routeContext?.getDbTransactionClient());
|
|
3826
3831
|
}
|
|
3827
3832
|
}
|
|
@@ -3918,11 +3923,11 @@ class EntityManager {
|
|
|
3918
3923
|
const command = `INSERT INTO ${queryBuilder.quoteTable({
|
|
3919
3924
|
schema: relationProperty.linkSchema,
|
|
3920
3925
|
tableName: relationProperty.linkTableName,
|
|
3921
|
-
})} (${queryBuilder.quoteObject(relationProperty.selfIdColumnName)}, ${queryBuilder.quoteObject(relationProperty.targetIdColumnName)})
|
|
3922
|
-
SELECT $1, $2 WHERE NOT EXISTS (
|
|
3923
|
-
SELECT ${queryBuilder.quoteObject(relationProperty.selfIdColumnName)}, ${queryBuilder.quoteObject(relationProperty.targetIdColumnName)}
|
|
3924
|
-
FROM ${queryBuilder.quoteTable({ schema: relationProperty.linkSchema, tableName: relationProperty.linkTableName })}
|
|
3925
|
-
WHERE ${queryBuilder.quoteObject(relationProperty.selfIdColumnName)}=$1 AND ${queryBuilder.quoteObject(relationProperty.targetIdColumnName)}=$2
|
|
3926
|
+
})} (${queryBuilder.quoteObject(relationProperty.selfIdColumnName)}, ${queryBuilder.quoteObject(relationProperty.targetIdColumnName)})
|
|
3927
|
+
SELECT $1, $2 WHERE NOT EXISTS (
|
|
3928
|
+
SELECT ${queryBuilder.quoteObject(relationProperty.selfIdColumnName)}, ${queryBuilder.quoteObject(relationProperty.targetIdColumnName)}
|
|
3929
|
+
FROM ${queryBuilder.quoteTable({ schema: relationProperty.linkSchema, tableName: relationProperty.linkTableName })}
|
|
3930
|
+
WHERE ${queryBuilder.quoteObject(relationProperty.selfIdColumnName)}=$1 AND ${queryBuilder.quoteObject(relationProperty.targetIdColumnName)}=$2
|
|
3926
3931
|
)`;
|
|
3927
3932
|
const params = [id, relation.id];
|
|
3928
3933
|
await server.queryDatabaseObject(command, params, routeContext?.getDbTransactionClient());
|
|
@@ -3962,7 +3967,7 @@ class EntityManager {
|
|
|
3962
3967
|
const { queryBuilder } = server;
|
|
3963
3968
|
if (relationProperty.linkTableName) {
|
|
3964
3969
|
for (const relation of relations) {
|
|
3965
|
-
const command = `DELETE FROM ${queryBuilder.quoteTable({ schema: relationProperty.linkSchema, tableName: relationProperty.linkTableName })}
|
|
3970
|
+
const command = `DELETE FROM ${queryBuilder.quoteTable({ schema: relationProperty.linkSchema, tableName: relationProperty.linkTableName })}
|
|
3966
3971
|
WHERE ${queryBuilder.quoteObject(relationProperty.selfIdColumnName)}=$1 AND ${queryBuilder.quoteObject(relationProperty.targetIdColumnName)}=$2;`;
|
|
3967
3972
|
const params = [id, relation.id];
|
|
3968
3973
|
await server.queryDatabaseObject(command, params, routeContext?.getDbTransactionClient());
|
|
@@ -4941,6 +4946,128 @@ function getEntityRelationTargetId(entity, propName, targetColumnName) {
|
|
|
4941
4946
|
}
|
|
4942
4947
|
}
|
|
4943
4948
|
|
|
4949
|
+
async function readFile(path) {
|
|
4950
|
+
return new Promise((resolve, reject) => {
|
|
4951
|
+
fs__default["default"].readFile(path, null, (err, data) => {
|
|
4952
|
+
if (err) {
|
|
4953
|
+
reject(err);
|
|
4954
|
+
}
|
|
4955
|
+
else {
|
|
4956
|
+
resolve(data);
|
|
4957
|
+
}
|
|
4958
|
+
});
|
|
4959
|
+
});
|
|
4960
|
+
}
|
|
4961
|
+
async function copyFile(fromPath, toPath) {
|
|
4962
|
+
return new Promise((resolve, reject) => {
|
|
4963
|
+
fs__default["default"].copyFile(fromPath, toPath, (err) => {
|
|
4964
|
+
if (err) {
|
|
4965
|
+
reject(err);
|
|
4966
|
+
}
|
|
4967
|
+
else {
|
|
4968
|
+
resolve();
|
|
4969
|
+
}
|
|
4970
|
+
});
|
|
4971
|
+
});
|
|
4972
|
+
}
|
|
4973
|
+
async function removeFile(path) {
|
|
4974
|
+
return new Promise((resolve, reject) => {
|
|
4975
|
+
fs__default["default"].rm(path, (err) => {
|
|
4976
|
+
if (err) {
|
|
4977
|
+
reject(err);
|
|
4978
|
+
}
|
|
4979
|
+
else {
|
|
4980
|
+
resolve();
|
|
4981
|
+
}
|
|
4982
|
+
});
|
|
4983
|
+
});
|
|
4984
|
+
}
|
|
4985
|
+
async function moveFile(fromPath, toPath) {
|
|
4986
|
+
return new Promise((resolve, reject) => {
|
|
4987
|
+
fs__default["default"].rename(fromPath, toPath, (err) => {
|
|
4988
|
+
if (err) {
|
|
4989
|
+
reject(err);
|
|
4990
|
+
}
|
|
4991
|
+
else {
|
|
4992
|
+
resolve();
|
|
4993
|
+
}
|
|
4994
|
+
});
|
|
4995
|
+
});
|
|
4996
|
+
}
|
|
4997
|
+
async function appendFile(path, data) {
|
|
4998
|
+
return new Promise((resolve, reject) => {
|
|
4999
|
+
fs__default["default"].appendFile(path, Buffer.from(data), (err) => {
|
|
5000
|
+
if (err) {
|
|
5001
|
+
reject(err);
|
|
5002
|
+
}
|
|
5003
|
+
else {
|
|
5004
|
+
resolve();
|
|
5005
|
+
}
|
|
5006
|
+
});
|
|
5007
|
+
});
|
|
5008
|
+
}
|
|
5009
|
+
async function writeFile(path, data) {
|
|
5010
|
+
return new Promise((resolve, reject) => {
|
|
5011
|
+
fs__default["default"].writeFile(path, Buffer.from(data), (err) => {
|
|
5012
|
+
if (err) {
|
|
5013
|
+
reject(err);
|
|
5014
|
+
}
|
|
5015
|
+
else {
|
|
5016
|
+
resolve();
|
|
5017
|
+
}
|
|
5018
|
+
});
|
|
5019
|
+
});
|
|
5020
|
+
}
|
|
5021
|
+
function ensureDirectoryExists(dirPath) {
|
|
5022
|
+
if (!fs__default["default"].existsSync(dirPath)) {
|
|
5023
|
+
const parentDirPath = path__default["default"].dirname(dirPath);
|
|
5024
|
+
if (parentDirPath == dirPath) {
|
|
5025
|
+
return;
|
|
5026
|
+
}
|
|
5027
|
+
ensureDirectoryExists(parentDirPath);
|
|
5028
|
+
fs__default["default"].mkdirSync(dirPath);
|
|
5029
|
+
}
|
|
5030
|
+
}
|
|
5031
|
+
function enumFileBaseNamesInDirectory(options) {
|
|
5032
|
+
const { dirPath, prefix, fileNameFilter } = options;
|
|
5033
|
+
let fileNames = [];
|
|
5034
|
+
let resolvedDirPath = dirPath;
|
|
5035
|
+
const isRelative = dirPath.startsWith(".") || dirPath.startsWith("..");
|
|
5036
|
+
if (isRelative) {
|
|
5037
|
+
resolvedDirPath = path__default["default"].join(process.cwd(), dirPath);
|
|
5038
|
+
}
|
|
5039
|
+
if (!fs__default["default"].existsSync(resolvedDirPath)) {
|
|
5040
|
+
console.warn(`Directory '${resolvedDirPath}' not found.`);
|
|
5041
|
+
return [];
|
|
5042
|
+
}
|
|
5043
|
+
const files = fs__default["default"].readdirSync(resolvedDirPath);
|
|
5044
|
+
for (const fileName of files) {
|
|
5045
|
+
const filePathName = path__default["default"].join(resolvedDirPath, fileName);
|
|
5046
|
+
const fileStat = fs__default["default"].statSync(filePathName);
|
|
5047
|
+
if (fileStat.isDirectory()) {
|
|
5048
|
+
fileNames = fileNames.concat(enumFileBaseNamesInDirectory({
|
|
5049
|
+
dirPath: filePathName,
|
|
5050
|
+
prefix: prefix ? `${prefix}/${fileName}` : fileName,
|
|
5051
|
+
fileNameFilter,
|
|
5052
|
+
}));
|
|
5053
|
+
}
|
|
5054
|
+
else if (fileStat.isFile()) {
|
|
5055
|
+
if (fileNameFilter && !fileNameFilter(fileName)) {
|
|
5056
|
+
continue;
|
|
5057
|
+
}
|
|
5058
|
+
const baseName = path__default["default"].parse(fileName).name;
|
|
5059
|
+
if (prefix) {
|
|
5060
|
+
fileNames.push(`${prefix}/${baseName}`);
|
|
5061
|
+
}
|
|
5062
|
+
else {
|
|
5063
|
+
fileNames.push(baseName);
|
|
5064
|
+
}
|
|
5065
|
+
}
|
|
5066
|
+
}
|
|
5067
|
+
fileNames.sort();
|
|
5068
|
+
return fileNames;
|
|
5069
|
+
}
|
|
5070
|
+
|
|
4944
5071
|
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
|
4945
5072
|
// This module is browser compatible.
|
|
4946
5073
|
/**
|
|
@@ -5471,9 +5598,9 @@ class MetaService {
|
|
|
5471
5598
|
await server.tryQueryDatabaseObject(`COMMENT ON TABLE ${queryBuilder.quoteTable(model)} IS ${queryBuilder.formatValueToSqlLiteral(model.name)};`, []);
|
|
5472
5599
|
}
|
|
5473
5600
|
}
|
|
5474
|
-
const sqlQueryColumnInformations = `SELECT c.table_schema, c.table_name, c.column_name, c.ordinal_position, d.description, c.data_type, c.udt_name, c.is_nullable, c.column_default, c.character_maximum_length, c.numeric_precision, c.numeric_scale
|
|
5475
|
-
FROM information_schema.columns c
|
|
5476
|
-
INNER JOIN pg_catalog.pg_statio_all_tables st ON (st.schemaname = c.table_schema and st.relname = c.table_name)
|
|
5601
|
+
const sqlQueryColumnInformations = `SELECT c.table_schema, c.table_name, c.column_name, c.ordinal_position, d.description, c.data_type, c.udt_name, c.is_nullable, c.column_default, c.character_maximum_length, c.numeric_precision, c.numeric_scale
|
|
5602
|
+
FROM information_schema.columns c
|
|
5603
|
+
INNER JOIN pg_catalog.pg_statio_all_tables st ON (st.schemaname = c.table_schema and st.relname = c.table_name)
|
|
5477
5604
|
LEFT JOIN pg_catalog.pg_description d ON (d.objoid = st.relid and d.objsubid = c.ordinal_position);`;
|
|
5478
5605
|
const columnsInDb = await server.queryDatabaseObject(sqlQueryColumnInformations, []);
|
|
5479
5606
|
for (const model of applicationConfig.models) {
|
|
@@ -7373,31 +7500,6 @@ class AuthPlugin {
|
|
|
7373
7500
|
}
|
|
7374
7501
|
}
|
|
7375
7502
|
|
|
7376
|
-
async function readFile(path) {
|
|
7377
|
-
return new Promise((resolve, reject) => {
|
|
7378
|
-
fs__default["default"].readFile(path, null, (err, data) => {
|
|
7379
|
-
if (err) {
|
|
7380
|
-
reject(err);
|
|
7381
|
-
}
|
|
7382
|
-
else {
|
|
7383
|
-
resolve(data);
|
|
7384
|
-
}
|
|
7385
|
-
});
|
|
7386
|
-
});
|
|
7387
|
-
}
|
|
7388
|
-
async function appendFile(path, data) {
|
|
7389
|
-
return new Promise((resolve, reject) => {
|
|
7390
|
-
fs__default["default"].appendFile(path, Buffer.from(data), (err) => {
|
|
7391
|
-
if (err) {
|
|
7392
|
-
reject(err);
|
|
7393
|
-
}
|
|
7394
|
-
else {
|
|
7395
|
-
resolve();
|
|
7396
|
-
}
|
|
7397
|
-
});
|
|
7398
|
-
});
|
|
7399
|
-
}
|
|
7400
|
-
|
|
7401
7503
|
function getFileBaseName(pathname) {
|
|
7402
7504
|
const extName = path__default["default"].extname(pathname);
|
|
7403
7505
|
return path__default["default"].basename(pathname, extName);
|
|
@@ -7511,7 +7613,7 @@ async function handler$8(plugin, ctx, options) {
|
|
|
7511
7613
|
const fileKey = `${uuid.v1()}${extName}`;
|
|
7512
7614
|
const filePathName = path__default["default"].join(server.config.localFileStoragePath, fileKey);
|
|
7513
7615
|
const fileBuffer = await file.arrayBuffer();
|
|
7514
|
-
await
|
|
7616
|
+
await writeFile(filePathName, fileBuffer);
|
|
7515
7617
|
ctx.output = { ok: true, fileKey };
|
|
7516
7618
|
}
|
|
7517
7619
|
|
|
@@ -9661,9 +9763,9 @@ class EntityAccessControlPlugin {
|
|
|
9661
9763
|
if (!userId) {
|
|
9662
9764
|
return;
|
|
9663
9765
|
}
|
|
9664
|
-
const actions = await server.queryDatabaseObject(`select distinct a.* from sys_actions a
|
|
9665
|
-
inner join oc_role_sys_action_links ra on a.id = ra.action_id
|
|
9666
|
-
inner join oc_role_user_links ru on ru.role_id = ra.role_id
|
|
9766
|
+
const actions = await server.queryDatabaseObject(`select distinct a.* from sys_actions a
|
|
9767
|
+
inner join oc_role_sys_action_links ra on a.id = ra.action_id
|
|
9768
|
+
inner join oc_role_user_links ru on ru.role_id = ra.role_id
|
|
9667
9769
|
where ru.user_id = $1;`, [userId]);
|
|
9668
9770
|
routeContext.state.allowedActions = actions.map((item) => item.code);
|
|
9669
9771
|
}
|
|
@@ -9706,12 +9808,16 @@ exports.ServerOperationPlugin = ServerOperationPlugin;
|
|
|
9706
9808
|
exports.SettingPlugin = SettingPlugin;
|
|
9707
9809
|
exports.StateMachinePlugin = StateMachinePlugin;
|
|
9708
9810
|
exports.WebhooksPlugin = WebhooksPlugin;
|
|
9811
|
+
exports.appendFile = appendFile;
|
|
9709
9812
|
exports.bootstrapApplicationConfig = bootstrapApplicationConfig$1;
|
|
9813
|
+
exports.copyFile = copyFile;
|
|
9710
9814
|
exports.createJwt = createJwt;
|
|
9711
9815
|
exports.decodeJwt = decodeJwt;
|
|
9712
9816
|
exports.deleteCookie = deleteCookie;
|
|
9713
9817
|
exports.detectChangedFieldsOfEntity = detectChangedFieldsOfEntity;
|
|
9818
|
+
exports.ensureDirectoryExists = ensureDirectoryExists;
|
|
9714
9819
|
exports.entityHelper = entityHelper;
|
|
9820
|
+
exports.enumFileBaseNamesInDirectory = enumFileBaseNamesInDirectory;
|
|
9715
9821
|
exports.formatDateTimeWithTimezone = formatDateTimeWithTimezone;
|
|
9716
9822
|
exports.generateJwtSecretKey = generateJwtSecretKey;
|
|
9717
9823
|
exports.generatePasswordHash = generatePasswordHash;
|
|
@@ -9725,8 +9831,12 @@ exports.isAccessAllowed = isAccessAllowed;
|
|
|
9725
9831
|
exports.licenseHelper = licenseHelper;
|
|
9726
9832
|
exports.mapDbRowToEntity = mapDbRowToEntity;
|
|
9727
9833
|
exports.metaHelper = metaHelper;
|
|
9834
|
+
exports.moveFile = moveFile;
|
|
9835
|
+
exports.readFile = readFile;
|
|
9836
|
+
exports.removeFile = removeFile;
|
|
9728
9837
|
exports.setCookie = setCookie;
|
|
9729
9838
|
exports.tryValidateLicense = tryValidateLicense;
|
|
9730
9839
|
exports.validateLicense = validateLicense;
|
|
9731
9840
|
exports.validatePassword = validatePassword;
|
|
9732
9841
|
exports.verifyJwt = verifyJwt;
|
|
9842
|
+
exports.writeFile = writeFile;
|
|
@@ -4,3 +4,11 @@ export declare function copyFile(fromPath: string, toPath: string): Promise<void
|
|
|
4
4
|
export declare function removeFile(path: string): Promise<void>;
|
|
5
5
|
export declare function moveFile(fromPath: string, toPath: string): Promise<void>;
|
|
6
6
|
export declare function appendFile(path: string, data: ArrayBuffer): Promise<void>;
|
|
7
|
+
export declare function writeFile(path: string, data: ArrayBuffer): Promise<void>;
|
|
8
|
+
export declare function ensureDirectoryExists(dirPath: string): void;
|
|
9
|
+
export type EnumFileBaseNamesOptions = {
|
|
10
|
+
dirPath: string;
|
|
11
|
+
prefix?: string;
|
|
12
|
+
fileNameFilter?: (fileName: string) => boolean;
|
|
13
|
+
};
|
|
14
|
+
export declare function enumFileBaseNamesInDirectory(options: EnumFileBaseNamesOptions): string[];
|
package/package.json
CHANGED
package/rollup.config.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import typescript from "rollup-plugin-typescript2";
|
|
2
|
-
import tscAlias from "rollup-plugin-tsc-alias";
|
|
3
|
-
|
|
4
|
-
export default {
|
|
5
|
-
input: ["src/index.ts"],
|
|
6
|
-
output: [
|
|
7
|
-
{
|
|
8
|
-
dir: "dist",
|
|
9
|
-
entryFileNames: "[name].js",
|
|
10
|
-
format: "cjs",
|
|
11
|
-
exports: "named",
|
|
12
|
-
},
|
|
13
|
-
],
|
|
14
|
-
plugins: [typescript(), tscAlias()],
|
|
15
|
-
external: [],
|
|
16
|
-
};
|
|
1
|
+
import typescript from "rollup-plugin-typescript2";
|
|
2
|
+
import tscAlias from "rollup-plugin-tsc-alias";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
input: ["src/index.ts"],
|
|
6
|
+
output: [
|
|
7
|
+
{
|
|
8
|
+
dir: "dist",
|
|
9
|
+
entryFileNames: "[name].js",
|
|
10
|
+
format: "cjs",
|
|
11
|
+
exports: "named",
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
plugins: [typescript(), tscAlias()],
|
|
15
|
+
external: [],
|
|
16
|
+
};
|