@steedos/objectql 2.1.82 → 2.1.84
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/lib/actions/field_updates.js +15 -15
- package/lib/actions/field_updates.js.map +1 -1
- package/lib/actions/index.js +3 -3
- package/lib/actions/index.js.map +1 -1
- package/lib/actions/workflow_notifications.js +10 -10
- package/lib/actions/workflow_notifications.js.map +1 -1
- package/lib/actions/workflow_rule.js +19 -19
- package/lib/actions/workflow_rule.js.map +1 -1
- package/lib/driver/index.js +1 -0
- package/lib/driver/index.js.map +1 -1
- package/lib/driver/metadata.js +3 -3
- package/lib/driver/metadata.js.map +1 -1
- package/lib/driver/meteorMongo.js +36 -36
- package/lib/driver/meteorMongo.js.map +1 -1
- package/lib/driver/mongo.js +43 -43
- package/lib/driver/mongo.js.map +1 -1
- package/lib/driver/mysql.js +2 -2
- package/lib/driver/mysql.js.map +1 -1
- package/lib/driver/oracle.js +5 -5
- package/lib/driver/oracle.js.map +1 -1
- package/lib/driver/postgres.js +2 -2
- package/lib/driver/postgres.js.map +1 -1
- package/lib/driver/sqlite3.js +2 -2
- package/lib/driver/sqlite3.js.map +1 -1
- package/lib/driver/sqlserver.js +4 -4
- package/lib/driver/sqlserver.js.map +1 -1
- package/lib/dynamic-load/actions.js +22 -18
- package/lib/dynamic-load/actions.js.map +1 -1
- package/lib/dynamic-load/approval_process.js +15 -10
- package/lib/dynamic-load/approval_process.js.map +1 -1
- package/lib/dynamic-load/button.js +25 -18
- package/lib/dynamic-load/button.js.map +1 -1
- package/lib/dynamic-load/chart.js +20 -23
- package/lib/dynamic-load/chart.js.map +1 -1
- package/lib/dynamic-load/field.js +21 -16
- package/lib/dynamic-load/field.js.map +1 -1
- package/lib/dynamic-load/flow_role.js +12 -8
- package/lib/dynamic-load/flow_role.js.map +1 -1
- package/lib/dynamic-load/index.d.ts +1 -0
- package/lib/dynamic-load/index.js +20 -19
- package/lib/dynamic-load/index.js.map +1 -1
- package/lib/dynamic-load/layout.js +19 -14
- package/lib/dynamic-load/layout.js.map +1 -1
- package/lib/dynamic-load/listview.js +14 -11
- package/lib/dynamic-load/listview.js.map +1 -1
- package/lib/dynamic-load/method.js +9 -6
- package/lib/dynamic-load/method.js.map +1 -1
- package/lib/dynamic-load/object_translations.js +29 -51
- package/lib/dynamic-load/object_translations.js.map +1 -1
- package/lib/dynamic-load/originalObject.js +1 -1
- package/lib/dynamic-load/originalObject.js.map +1 -1
- package/lib/dynamic-load/package.d.ts +9 -0
- package/lib/dynamic-load/package.js +507 -0
- package/lib/dynamic-load/package.js.map +1 -0
- package/lib/dynamic-load/page.js +20 -23
- package/lib/dynamic-load/page.js.map +1 -1
- package/lib/dynamic-load/permission.js +61 -65
- package/lib/dynamic-load/permission.js.map +1 -1
- package/lib/dynamic-load/permissionset.js +30 -25
- package/lib/dynamic-load/permissionset.js.map +1 -1
- package/lib/dynamic-load/preload_data.js +55 -74
- package/lib/dynamic-load/preload_data.js.map +1 -1
- package/lib/dynamic-load/profile.js +33 -28
- package/lib/dynamic-load/profile.js.map +1 -1
- package/lib/dynamic-load/query.js +20 -23
- package/lib/dynamic-load/query.js.map +1 -1
- package/lib/dynamic-load/restrictionRules.js +18 -23
- package/lib/dynamic-load/restrictionRules.js.map +1 -1
- package/lib/dynamic-load/role.js +12 -8
- package/lib/dynamic-load/role.js.map +1 -1
- package/lib/dynamic-load/shareRules.js +18 -23
- package/lib/dynamic-load/shareRules.js.map +1 -1
- package/lib/dynamic-load/tab.js +4 -3
- package/lib/dynamic-load/tab.js.map +1 -1
- package/lib/dynamic-load/tabs.js +9 -7
- package/lib/dynamic-load/tabs.js.map +1 -1
- package/lib/dynamic-load/translations.js +23 -17
- package/lib/dynamic-load/translations.js.map +1 -1
- package/lib/dynamic-load/trigger.js +14 -10
- package/lib/dynamic-load/trigger.js.map +1 -1
- package/lib/dynamic-load/validation_rule.js +13 -8
- package/lib/dynamic-load/validation_rule.js.map +1 -1
- package/lib/dynamic-load/workflow.js +38 -25
- package/lib/dynamic-load/workflow.js.map +1 -1
- package/lib/errors/index.js +2 -1
- package/lib/errors/index.js.map +1 -1
- package/lib/formula/core.js +105 -91
- package/lib/formula/core.js.map +1 -1
- package/lib/formula/field_formula.js +26 -20
- package/lib/formula/field_formula.js.map +1 -1
- package/lib/formula/index.js +26 -26
- package/lib/formula/index.js.map +1 -1
- package/lib/formula/params.js +1 -1
- package/lib/formula/params.js.map +1 -1
- package/lib/formula/recompute.js +27 -25
- package/lib/formula/recompute.js.map +1 -1
- package/lib/formula/simple_params.js +2 -2
- package/lib/formula/simple_params.js.map +1 -1
- package/lib/formula/util.js +33 -23
- package/lib/formula/util.js.map +1 -1
- package/lib/index.js +15 -15
- package/lib/index.js.map +1 -1
- package/lib/metadata-register/_base.d.ts +1 -0
- package/lib/metadata-register/_base.js +45 -15
- package/lib/metadata-register/_base.js.map +1 -1
- package/lib/metadata-register/app.js +8 -8
- package/lib/metadata-register/chart.js +1 -1
- package/lib/metadata-register/chart.js.map +1 -1
- package/lib/metadata-register/index.js +72 -72
- package/lib/metadata-register/index.js.map +1 -1
- package/lib/metadata-register/layout.js +18 -16
- package/lib/metadata-register/layout.js.map +1 -1
- package/lib/metadata-register/object.d.ts +0 -1
- package/lib/metadata-register/object.js +17 -35
- package/lib/metadata-register/object.js.map +1 -1
- package/lib/metadata-register/page.js +1 -1
- package/lib/metadata-register/page.js.map +1 -1
- package/lib/metadata-register/permissionFields.js +2 -2
- package/lib/metadata-register/permissionFields.js.map +1 -1
- package/lib/metadata-register/permissionset.js +6 -6
- package/lib/metadata-register/profile.js +6 -6
- package/lib/metadata-register/query.js +1 -1
- package/lib/metadata-register/query.js.map +1 -1
- package/lib/metadata-register/restrictionRules.js +2 -2
- package/lib/metadata-register/restrictionRules.js.map +1 -1
- package/lib/metadata-register/shareRules.js +2 -2
- package/lib/metadata-register/shareRules.js.map +1 -1
- package/lib/metadata-register/tab.js +1 -1
- package/lib/metadata-register/tab.js.map +1 -1
- package/lib/metadata-register/tabs.js +18 -16
- package/lib/metadata-register/tabs.js.map +1 -1
- package/lib/services/datasourceServiceFactory.d.ts +1 -0
- package/lib/services/datasourceServiceFactory.js +51 -0
- package/lib/services/datasourceServiceFactory.js.map +1 -0
- package/lib/services/helpers/graphql.js +86 -87
- package/lib/services/helpers/graphql.js.map +1 -1
- package/lib/services/helpers/index.js +2 -2
- package/lib/services/helpers/index.js.map +1 -1
- package/lib/services/helpers/rest.js +1 -1
- package/lib/services/helpers/rest.js.map +1 -1
- package/lib/services/index.d.ts +3 -0
- package/lib/services/index.js +10 -4
- package/lib/services/index.js.map +1 -1
- package/lib/services/objectService.js +143 -143
- package/lib/services/objectService.js.map +1 -1
- package/lib/services/objectServiceDispatcher.js +92 -92
- package/lib/services/objectServiceDispatcher.js.map +1 -1
- package/lib/{metadata-register/objectServiceManager.d.ts → services/objectServiceFactory.d.ts} +0 -0
- package/lib/{metadata-register/objectServiceManager.js → services/objectServiceFactory.js} +5 -5
- package/lib/services/objectServiceFactory.js.map +1 -0
- package/lib/summary/core.js +51 -44
- package/lib/summary/core.js.map +1 -1
- package/lib/summary/field_summary.js +21 -16
- package/lib/summary/field_summary.js.map +1 -1
- package/lib/summary/index.js +25 -22
- package/lib/summary/index.js.map +1 -1
- package/lib/summary/recompute.js +13 -11
- package/lib/summary/recompute.js.map +1 -1
- package/lib/ts-types/index.js +3 -3
- package/lib/ts-types/index.js.map +1 -1
- package/lib/typeorm/driver.js +58 -58
- package/lib/typeorm/driver.js.map +1 -1
- package/lib/typeorm/index.js +2 -1
- package/lib/typeorm/index.js.map +1 -1
- package/lib/typeorm/util.js +2 -2
- package/lib/typeorm/util.js.map +1 -1
- package/lib/types/app.js +41 -35
- package/lib/types/app.js.map +1 -1
- package/lib/types/config.js +52 -45
- package/lib/types/config.js.map +1 -1
- package/lib/types/connection.js +20 -18
- package/lib/types/connection.js.map +1 -1
- package/lib/types/dashboard.js +10 -7
- package/lib/types/dashboard.js.map +1 -1
- package/lib/types/datasource.d.ts +14 -1
- package/lib/types/datasource.js +205 -192
- package/lib/types/datasource.js.map +1 -1
- package/lib/types/field.d.ts +2 -2
- package/lib/types/field.js +6 -6
- package/lib/types/field.js.map +1 -1
- package/lib/types/field_permission.js +8 -8
- package/lib/types/field_permission.js.map +1 -1
- package/lib/types/index.js +11 -10
- package/lib/types/index.js.map +1 -1
- package/lib/types/list_view.d.ts +1 -1
- package/lib/types/list_view.js +1 -1
- package/lib/types/list_view.js.map +1 -1
- package/lib/types/object.d.ts +11 -11
- package/lib/types/object.js +208 -201
- package/lib/types/object.js.map +1 -1
- package/lib/types/object_dynamic_load.js +105 -155
- package/lib/types/object_dynamic_load.js.map +1 -1
- package/lib/types/object_events.js +5 -5
- package/lib/types/object_events.js.map +1 -1
- package/lib/types/object_layouts.js +7 -7
- package/lib/types/object_layouts.js.map +1 -1
- package/lib/types/object_permission.d.ts +1 -1
- package/lib/types/object_permission.js +1 -1
- package/lib/types/object_permission.js.map +1 -1
- package/lib/types/report.js +10 -7
- package/lib/types/report.js.map +1 -1
- package/lib/types/restrictionRule.js +11 -11
- package/lib/types/restrictionRule.js.map +1 -1
- package/lib/types/schema.d.ts +1 -1
- package/lib/types/schema.js +41 -19
- package/lib/types/schema.js.map +1 -1
- package/lib/types/shareRule.js +11 -11
- package/lib/types/shareRule.js.map +1 -1
- package/lib/types/trigger.js +2 -2
- package/lib/types/trigger.js.map +1 -1
- package/lib/types/validation_rules.js +5 -5
- package/lib/types/validation_rules.js.map +1 -1
- package/lib/util/convert.d.ts +2 -0
- package/lib/util/convert.js +130 -0
- package/lib/util/convert.js.map +1 -0
- package/lib/util/field.js +5 -3
- package/lib/util/field.js.map +1 -1
- package/lib/util/function_expression.js +5 -3
- package/lib/util/function_expression.js.map +1 -1
- package/lib/util/index.d.ts +2 -7
- package/lib/util/index.js +86 -166
- package/lib/util/index.js.map +1 -1
- package/lib/util/locale.js +5 -3
- package/lib/util/locale.js.map +1 -1
- package/lib/util/permission_shares.js +2 -2
- package/lib/util/permission_shares.js.map +1 -1
- package/lib/util/suffix.js +22 -16
- package/lib/util/suffix.js.map +1 -1
- package/lib/util/transform.js +11 -11
- package/lib/util/transform.js.map +1 -1
- package/lib/validators/index.js +3 -2
- package/lib/validators/index.js.map +1 -1
- package/package.json +13 -13
- package/src/dynamic-load/chart.ts +6 -1
- package/src/dynamic-load/index.ts +1 -0
- package/src/dynamic-load/object_translations.ts +19 -10
- package/src/dynamic-load/package.ts +303 -0
- package/src/dynamic-load/page.ts +7 -1
- package/src/dynamic-load/permission.ts +1 -5
- package/src/dynamic-load/preload_data.ts +2 -3
- package/src/dynamic-load/query.ts +6 -1
- package/src/dynamic-load/restrictionRules.ts +6 -2
- package/src/dynamic-load/shareRules.ts +5 -1
- package/src/dynamic-load/translations.ts +3 -1
- package/src/metadata-register/_base.ts +23 -0
- package/src/metadata-register/object.ts +1 -20
- package/src/services/datasourceServiceFactory.ts +37 -0
- package/src/services/helpers/graphql.ts +5 -3
- package/src/services/index.ts +7 -0
- package/src/services/objectService.ts +5 -4
- package/src/{metadata-register/objectServiceManager.ts → services/objectServiceFactory.ts} +4 -4
- package/src/types/datasource.ts +81 -72
- package/src/types/field.ts +2 -2
- package/src/types/list_view.ts +1 -1
- package/src/types/object.ts +11 -11
- package/src/types/object_dynamic_load.ts +5 -47
- package/src/types/object_permission.ts +1 -1
- package/src/types/schema.ts +11 -1
- package/src/util/convert.ts +130 -0
- package/src/util/index.ts +6 -120
- package/lib/metadata-register/objectServiceManager.js.map +0 -1
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import _ = require('lodash');
|
|
2
|
+
import { getLazyLoadFields } from './field';
|
|
3
|
+
import { getLazyLoadButtons } from './button';
|
|
4
|
+
import { addObjectConfig } from '../types/object_dynamic_load';
|
|
5
|
+
import { addPermissionConfig, loadObjectMethods, loadObjectTriggers } from '../dynamic-load'
|
|
6
|
+
import { getSteedosSchema } from '../types'
|
|
7
|
+
import { objectToJson } from '../util/convert';
|
|
8
|
+
import { registerPermissionFields } from '..';
|
|
9
|
+
var util = require('../util');
|
|
10
|
+
var clone = require('clone');
|
|
11
|
+
// let Fiber = require('fibers');
|
|
12
|
+
declare var Creator: any;
|
|
13
|
+
|
|
14
|
+
/***
|
|
15
|
+
* 此文件应该迁移到metadata/core中:系统的结构为所有元数据加载都有metadata/core处理,这样metadata的处理就集中了,规则也就一致了,目前metadata core、objectql各自维护一套。
|
|
16
|
+
*/
|
|
17
|
+
const getListenTo = function (json) {
|
|
18
|
+
if (!json.listenTo) {
|
|
19
|
+
console.log('json', json);
|
|
20
|
+
throw new Error('missing attribute listenTo');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (!_.isString(json.listenTo) && !_.isFunction(json.listenTo)) {
|
|
24
|
+
throw new Error('listenTo must be a function or string')
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
let listenTo: string = '';
|
|
28
|
+
|
|
29
|
+
if (_.isString(json.listenTo)) {
|
|
30
|
+
listenTo = json.listenTo
|
|
31
|
+
} else if (_.isFunction(json.listenTo)) {
|
|
32
|
+
listenTo = json.listenTo()
|
|
33
|
+
}
|
|
34
|
+
return listenTo;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const loadPackageObjects = function (filePath: string) {
|
|
38
|
+
const objectJsons = util.loadObjects(filePath);
|
|
39
|
+
return objectJsons;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const loadPackageFields = function (filePath: string) {
|
|
43
|
+
const fieldJsons = util.loadFields(filePath);
|
|
44
|
+
return fieldJsons;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const loadPackageListViews = function (filePath: string) {
|
|
48
|
+
let listViewJsons = util.loadListViews(filePath);
|
|
49
|
+
return listViewJsons;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const loadPackageButtons = function (filePath: string) {
|
|
53
|
+
let buttonJsons = util.loadButtons(filePath);
|
|
54
|
+
return buttonJsons;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const loadPackageActions = function (filePath: string) {
|
|
58
|
+
let actions = util.loadActions(filePath);
|
|
59
|
+
return _.map(actions, actionToMetadata);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const loadPackageActionScripts = function (filePath: string) {
|
|
63
|
+
let buttonScripts = util.loadButtonScripts(filePath);
|
|
64
|
+
return _.map(buttonScripts, actionToMetadata);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const actionToMetadata = (config) => {
|
|
68
|
+
const actions = {};
|
|
69
|
+
let object_name = getListenTo(config);
|
|
70
|
+
const keys = _.keys(config);
|
|
71
|
+
_.each(keys, (key) => {
|
|
72
|
+
if (key.endsWith('Visible')) {
|
|
73
|
+
if (_.isFunction(config[key])) {
|
|
74
|
+
const _key = key.replace(/(.*)Visible/, '$1');
|
|
75
|
+
if (!actions[_key]) {
|
|
76
|
+
actions[_key] = {};
|
|
77
|
+
}
|
|
78
|
+
actions[_key]._visible = config[key].toString();
|
|
79
|
+
}
|
|
80
|
+
} else {
|
|
81
|
+
if (_.isFunction(config[key])) {
|
|
82
|
+
if (!actions[key]) {
|
|
83
|
+
actions[key] = {};
|
|
84
|
+
}
|
|
85
|
+
actions[key]._todo = config[key].toString();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
})
|
|
89
|
+
return { object_name, actions };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const loadPackagePermissions = function (filePath: string) {
|
|
93
|
+
let permissions = util.loadPermissions(filePath);
|
|
94
|
+
return _.map(permissions, (permission) => {
|
|
95
|
+
delete permission.field_permissions;
|
|
96
|
+
return permission;
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const registerPackageFieldPermissions = async function (filePath: string, broker, serviceName: string) {
|
|
101
|
+
let permissions = util.loadPermissions(filePath);
|
|
102
|
+
permissions.forEach(permission => {
|
|
103
|
+
addPermissionConfig(permission.object_name, permission);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
const data = [];
|
|
107
|
+
|
|
108
|
+
for (const permission of permissions) {
|
|
109
|
+
const { field_permissions } = permission;
|
|
110
|
+
if (field_permissions && _.isArray(field_permissions) && field_permissions.length > 0) {
|
|
111
|
+
for (const field_permission of field_permissions) {
|
|
112
|
+
data.push({
|
|
113
|
+
"name": `${permission.name}.${permission.object_name}.${field_permission.field}`,
|
|
114
|
+
"permission_set_id": permission.name,
|
|
115
|
+
"permission_object": `${permission.name}_${permission.object_name}`,
|
|
116
|
+
"object_name": permission.object_name,
|
|
117
|
+
"field": field_permission.field,
|
|
118
|
+
"readable": field_permission.readable,
|
|
119
|
+
"editable": field_permission.editable,
|
|
120
|
+
"is_system": true,
|
|
121
|
+
})
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (data.length > 0) {
|
|
126
|
+
return await registerPermissionFields.mregister(broker, serviceName, data);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
async function addObjectConfigs(broker, serviceName, objectConfigs) {
|
|
131
|
+
let metadatas = clone(objectConfigs);
|
|
132
|
+
_.map(metadatas, (metadata) => {
|
|
133
|
+
delete metadata.triggers;
|
|
134
|
+
delete metadata.listeners;
|
|
135
|
+
delete metadata.methods;
|
|
136
|
+
objectToJson(metadata);
|
|
137
|
+
})
|
|
138
|
+
const res = await broker.call("objects.addConfigs", { data: metadatas }, {
|
|
139
|
+
meta: {
|
|
140
|
+
metadataServiceName: serviceName,
|
|
141
|
+
caller: {
|
|
142
|
+
nodeID: broker.nodeID
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
return res;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* 加载软件包下的所有元数据
|
|
151
|
+
* 1 在内存中合并所有对象元数据并发送: object.yml 、field.yml、.listview.yml、.button.yml、TODO .action.yml
|
|
152
|
+
* 2 TODO 其他元数据发送
|
|
153
|
+
* @param packagePath 软件包路径
|
|
154
|
+
* @param datasource 软件数据源
|
|
155
|
+
* @param serviceName 软件包服务名称
|
|
156
|
+
*/
|
|
157
|
+
export const loadPackageMetadatas = async function (packagePath: string, datasource: string, serviceName?: string) {
|
|
158
|
+
let packageObjects = loadPackageObjects(packagePath);
|
|
159
|
+
const packageFields = loadPackageFields(packagePath);
|
|
160
|
+
const packageListviews = loadPackageListViews(packagePath);
|
|
161
|
+
const packageButtons = loadPackageButtons(packagePath);
|
|
162
|
+
const packageActions = loadPackageActions(packagePath);
|
|
163
|
+
const packageActionScripts = loadPackageActionScripts(packagePath);
|
|
164
|
+
const packagePermissions = loadPackagePermissions(packagePath);
|
|
165
|
+
|
|
166
|
+
const packageObjectApiNames = _.map(packageObjects, 'name');
|
|
167
|
+
|
|
168
|
+
packageObjects = _.map(packageObjects, (packageObject) => {
|
|
169
|
+
_.map(packageFields, (field) => {
|
|
170
|
+
if (field && field.object_name == packageObject.name) {
|
|
171
|
+
packageObject = _.defaultsDeep(packageObject, { fields: { [field.name]: field } }, packageObject);
|
|
172
|
+
}
|
|
173
|
+
})
|
|
174
|
+
_.map(packageListviews, (listview) => {
|
|
175
|
+
if (listview && listview.object_name == packageObject.name) {
|
|
176
|
+
packageObject = _.defaultsDeep(packageObject, { list_views: { [listview.name]: listview } }, packageObject);
|
|
177
|
+
}
|
|
178
|
+
})
|
|
179
|
+
|
|
180
|
+
_.map(packageButtons, (button) => {
|
|
181
|
+
if (button && button.object_name == packageObject.name) {
|
|
182
|
+
packageObject = _.defaultsDeep(packageObject, { actions: { [button.name]: button } }, packageObject);
|
|
183
|
+
}
|
|
184
|
+
})
|
|
185
|
+
|
|
186
|
+
_.map(packageActions, (action) => {
|
|
187
|
+
if (action && action.object_name == packageObject.name) {
|
|
188
|
+
packageObject = _.defaultsDeep(packageObject, { actions: action.actions }, packageObject);
|
|
189
|
+
}
|
|
190
|
+
})
|
|
191
|
+
|
|
192
|
+
_.map(packageActionScripts, (actionScript) => {
|
|
193
|
+
if (actionScript && actionScript.object_name == packageObject.name) {
|
|
194
|
+
packageObject = _.defaultsDeep(packageObject, { actions: actionScript.actions }, packageObject);
|
|
195
|
+
}
|
|
196
|
+
})
|
|
197
|
+
|
|
198
|
+
_.map(packagePermissions, (permission) => {
|
|
199
|
+
if (permission && permission.object_name == packageObject.name) {
|
|
200
|
+
packageObject = _.defaultsDeep(packageObject, { permission_set: { [permission.name]: permission } }, packageObject);
|
|
201
|
+
}
|
|
202
|
+
})
|
|
203
|
+
return packageObject;
|
|
204
|
+
})
|
|
205
|
+
for (const element of packageObjects) {
|
|
206
|
+
if (datasource) {
|
|
207
|
+
element.datasource = datasource
|
|
208
|
+
}
|
|
209
|
+
if (!element.extend) {
|
|
210
|
+
element.isMain = true;
|
|
211
|
+
}
|
|
212
|
+
let startNo = 10;
|
|
213
|
+
_.each(element.fields, function (field) {
|
|
214
|
+
if (!_.has(field, 'sort_no')) {
|
|
215
|
+
field.sort_no = startNo;
|
|
216
|
+
startNo = startNo + 10;
|
|
217
|
+
}
|
|
218
|
+
})
|
|
219
|
+
if (!element.fields) {
|
|
220
|
+
element.fields = {}
|
|
221
|
+
}
|
|
222
|
+
_.each(getLazyLoadFields(element.name), function (field) {
|
|
223
|
+
util.extend(element.fields, { [field.name]: field })
|
|
224
|
+
})
|
|
225
|
+
if (!element.actions) {
|
|
226
|
+
element.actions = {}
|
|
227
|
+
}
|
|
228
|
+
_.each(getLazyLoadButtons(element.name), function (action) {
|
|
229
|
+
util.extend(element.actions, { [action.name]: action })
|
|
230
|
+
})
|
|
231
|
+
let _mf = _.maxBy(_.values(element.fields), function (field) { return field.sort_no; });
|
|
232
|
+
if (_mf && element.name) {
|
|
233
|
+
element.fields_serial_number = _mf.sort_no + 10;
|
|
234
|
+
}
|
|
235
|
+
addObjectConfig(element, datasource, null);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
loadObjectTriggers(packagePath);
|
|
239
|
+
//此功能不支持微服务模式
|
|
240
|
+
loadObjectMethods(packagePath);
|
|
241
|
+
|
|
242
|
+
await addObjectConfigs(getSteedosSchema().metadataBroker, serviceName, packageObjects);
|
|
243
|
+
if (serviceName) {
|
|
244
|
+
for await (const packageField of packageFields) {
|
|
245
|
+
if (packageField && !_.includes(packageObjectApiNames, packageField.object_name)) {
|
|
246
|
+
|
|
247
|
+
await getSteedosSchema().metadataRegister.addObjectConfig(serviceName, Object.assign({ extend: packageField.object_name }, {
|
|
248
|
+
fields: {
|
|
249
|
+
[packageField.name]: packageField
|
|
250
|
+
}
|
|
251
|
+
}));
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
for await (const packageListview of packageListviews) {
|
|
256
|
+
if (packageListview && !_.includes(packageObjectApiNames, packageListview.object_name)) {
|
|
257
|
+
await getSteedosSchema().metadataRegister.addObjectConfig(serviceName, Object.assign({ extend: packageListview.object_name }, {
|
|
258
|
+
list_views: {
|
|
259
|
+
[packageListview.name]: packageListview
|
|
260
|
+
}
|
|
261
|
+
}));
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
for await (const packageButton of packageButtons) {
|
|
266
|
+
if (packageButton && !_.includes(packageObjectApiNames, packageButton.object_name)) {
|
|
267
|
+
await getSteedosSchema().metadataRegister.addObjectConfig(serviceName, Object.assign({ extend: packageButton.object_name }, {
|
|
268
|
+
actions: {
|
|
269
|
+
[packageButton.name]: packageButton
|
|
270
|
+
}
|
|
271
|
+
}));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
for await (const packageAction of packageActions) {
|
|
276
|
+
if (packageAction && !_.includes(packageObjectApiNames, packageAction.object_name)) {
|
|
277
|
+
await getSteedosSchema().metadataRegister.addObjectConfig(serviceName, Object.assign({ extend: packageAction.object_name }, {
|
|
278
|
+
actions: packageAction.actions
|
|
279
|
+
}));
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
for await (const packageActionScript of packageActionScripts) {
|
|
284
|
+
if (packageActionScript && !_.includes(packageObjectApiNames, packageActionScript.object_name)) {
|
|
285
|
+
await getSteedosSchema().metadataRegister.addObjectConfig(serviceName, Object.assign({ extend: packageActionScript.object_name }, {
|
|
286
|
+
actions: packageActionScript.actions
|
|
287
|
+
}));
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
for await (const permission of packagePermissions) {
|
|
292
|
+
if (permission && !_.includes(packageObjectApiNames, permission.object_name)) {
|
|
293
|
+
await getSteedosSchema().metadataRegister.addObjectConfig(serviceName, Object.assign({ extend: permission.object_name }, {
|
|
294
|
+
permission_set: {
|
|
295
|
+
[permission.name]: permission
|
|
296
|
+
}
|
|
297
|
+
}));
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
await registerPackageFieldPermissions(packagePath, getSteedosSchema().metadataBroker, packagePath)
|
|
303
|
+
}
|
package/src/dynamic-load/page.ts
CHANGED
|
@@ -6,12 +6,18 @@ const loadPageFile = new LoadPageFile();
|
|
|
6
6
|
export const registerPackagePages = async (packagePath: string, packageServiceName: string)=>{
|
|
7
7
|
const pages = loadPageFile.load(packagePath);
|
|
8
8
|
const schema = getSteedosSchema();
|
|
9
|
+
const data = [];
|
|
9
10
|
for (const apiName in pages) {
|
|
10
11
|
const page = pages[apiName];
|
|
11
|
-
|
|
12
|
+
data.push(Object.assign(page, {
|
|
13
|
+
is_system: true, record_permissions: {
|
|
12
14
|
allowEdit: false,
|
|
13
15
|
allowDelete: false,
|
|
14
16
|
allowRead: true,
|
|
15
17
|
}}))
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
if (data.length > 0) {
|
|
21
|
+
await registerPage.mregister(schema.broker, packageServiceName, data)
|
|
16
22
|
}
|
|
17
23
|
}
|
|
@@ -49,11 +49,7 @@ export const loadObjectPermissions = async function (filePath: string, serviceNa
|
|
|
49
49
|
if(serviceName)
|
|
50
50
|
for await (const permission of permissions) {
|
|
51
51
|
const { field_permissions } = permission;
|
|
52
|
-
|
|
53
|
-
await getSteedosSchema().metadataRegister.addObjectConfig(serviceName, Object.assign({extend: permission.object_name}, {permission_set: {
|
|
54
|
-
[permission.name]: permission
|
|
55
|
-
}}));
|
|
56
|
-
if (field_permissions) {
|
|
52
|
+
if (field_permissions && _.isArray(field_permissions) && field_permissions.length > 0) {
|
|
57
53
|
for await (const field_permission of field_permissions) {
|
|
58
54
|
await registerPermissionFields.register(getSteedosSchema().broker, serviceName, {
|
|
59
55
|
"name": `${permission.name}.${permission.object_name}.${field_permission.field}`,
|
|
@@ -98,8 +98,7 @@ export const preloadDBPermissionFields = async function (datasource: SteedosData
|
|
|
98
98
|
Creator.Collections[tableName] = Creator.createCollection({ name: tableName });
|
|
99
99
|
}
|
|
100
100
|
let records: any = await datasource.find(tableName, {});
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
await registerPermissionFields.register(schema.broker, `~database-${tableName}`, element);
|
|
101
|
+
if (records && records.length > 0) {
|
|
102
|
+
await registerPermissionFields.mregister(schema.broker, `~database-${tableName}`, records);
|
|
104
103
|
}
|
|
105
104
|
}
|
|
@@ -6,12 +6,17 @@ const loadQueryFile = new LoadQueryFile();
|
|
|
6
6
|
export const registerPackageQueries = async (packagePath: string, packageServiceName: string)=>{
|
|
7
7
|
const packageQueries = loadQueryFile.load(packagePath);
|
|
8
8
|
const schema = getSteedosSchema();
|
|
9
|
+
const data = [];
|
|
9
10
|
for (const apiName in packageQueries) {
|
|
10
11
|
const query = packageQueries[apiName];
|
|
11
|
-
|
|
12
|
+
data.push(Object.assign(query, {
|
|
13
|
+
is_system: true, record_permissions: {
|
|
12
14
|
allowEdit: false,
|
|
13
15
|
allowDelete: false,
|
|
14
16
|
allowRead: true,
|
|
15
17
|
}}))
|
|
16
18
|
}
|
|
19
|
+
if (data.length > 0) {
|
|
20
|
+
await registerQuery.mregister(schema.broker, packageServiceName, data)
|
|
21
|
+
}
|
|
17
22
|
}
|
|
@@ -6,14 +6,18 @@ const loadRestrictionRules = new LoadRestrictionRules();
|
|
|
6
6
|
export const registerPackageRestrictionRules = async (packagePath: string, packageServiceName: string) => {
|
|
7
7
|
const metadata = loadRestrictionRules.load(packagePath);
|
|
8
8
|
const schema = getSteedosSchema();
|
|
9
|
+
const data = [];
|
|
9
10
|
for (const apiName in metadata) {
|
|
10
11
|
const item = metadata[apiName];
|
|
11
|
-
|
|
12
|
+
data.push(Object.assign(item, {
|
|
12
13
|
is_system: true, record_permissions: {
|
|
13
14
|
allowEdit: false,
|
|
14
15
|
allowDelete: false,
|
|
15
16
|
allowRead: true,
|
|
16
17
|
}
|
|
17
|
-
}))
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
if (data.length > 0) {
|
|
21
|
+
await registerRestrictionRules.mregister(schema.broker, packageServiceName, data)
|
|
18
22
|
}
|
|
19
23
|
}
|
|
@@ -6,9 +6,10 @@ const loadShareRules = new LoadShareRules();
|
|
|
6
6
|
export const registerPackageShareRules = async (packagePath: string, packageServiceName: string) => {
|
|
7
7
|
const metadata = loadShareRules.load(packagePath);
|
|
8
8
|
const schema = getSteedosSchema();
|
|
9
|
+
const data = [];
|
|
9
10
|
for (const apiName in metadata) {
|
|
10
11
|
const item = metadata[apiName];
|
|
11
|
-
|
|
12
|
+
data.push(Object.assign(item, {
|
|
12
13
|
is_system: true, record_permissions: {
|
|
13
14
|
allowEdit: false,
|
|
14
15
|
allowDelete: false,
|
|
@@ -16,4 +17,7 @@ export const registerPackageShareRules = async (packagePath: string, packageServ
|
|
|
16
17
|
}
|
|
17
18
|
}))
|
|
18
19
|
}
|
|
20
|
+
if (data.length > 0) {
|
|
21
|
+
await registerShareRules.mregister(schema.broker, packageServiceName, data)
|
|
22
|
+
}
|
|
19
23
|
}
|
|
@@ -43,7 +43,9 @@ export const addTranslationsFiles = async (filePath: string)=>{
|
|
|
43
43
|
console.error(`addTranslation error`, error.message)
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
-
|
|
46
|
+
if (translations && translations.length > 0) {
|
|
47
|
+
await brokeEmitEvents(filePath)
|
|
48
|
+
}
|
|
47
49
|
}
|
|
48
50
|
|
|
49
51
|
export const getTranslations = async ()=>{
|
|
@@ -26,6 +26,29 @@ export class RegisterBase{
|
|
|
26
26
|
return res;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
async mregister(broker, packageServiceName, configs) {
|
|
30
|
+
const metadatas = clone(configs);
|
|
31
|
+
|
|
32
|
+
const mdata = {};
|
|
33
|
+
|
|
34
|
+
_.map(metadatas, (metadata) => {
|
|
35
|
+
mdata[this.getApiName(metadata)] = metadata
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
const res = await broker.call(`${this.serviceName}.madd`, { data: mdata }, {
|
|
39
|
+
meta: {
|
|
40
|
+
metadataServiceName: packageServiceName,
|
|
41
|
+
caller: {
|
|
42
|
+
nodeID: broker.nodeID,
|
|
43
|
+
service: {
|
|
44
|
+
name: packageServiceName,
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
return res;
|
|
50
|
+
}
|
|
51
|
+
|
|
29
52
|
async remove(broker, packageServiceName, metadataApiNameOrConfig: string | JsonMap) {
|
|
30
53
|
let metadataApiName = metadataApiNameOrConfig;
|
|
31
54
|
if (_.isObject(metadataApiName)) {
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
// import { createObjectService } from './objectServiceManager';
|
|
2
|
-
// import { getObjectServiceName } from '../services/index';
|
|
3
1
|
import * as _ from 'underscore';
|
|
4
|
-
import { objectToJson } from '../util';
|
|
2
|
+
import { objectToJson, jsonToObject } from '../util/convert';
|
|
5
3
|
const clone = require('clone');
|
|
6
4
|
|
|
7
5
|
export async function registerObject(broker, serviceName, objectConfig) {
|
|
@@ -67,21 +65,4 @@ export async function removeObject(broker, objectApiName) {
|
|
|
67
65
|
}
|
|
68
66
|
}});
|
|
69
67
|
return res;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
function funEval (funStr){
|
|
73
|
-
try{
|
|
74
|
-
return eval(funStr)
|
|
75
|
-
}catch (e){
|
|
76
|
-
console.error(e, funStr);
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
export function jsonToObject(objectMetadata){
|
|
81
|
-
_.forEach(objectMetadata.fields, (field, key)=>{
|
|
82
|
-
const _reference_to = field._reference_to;
|
|
83
|
-
if(_reference_to && _.isString(_reference_to)){
|
|
84
|
-
field.reference_to = funEval(`(${_reference_to})`);
|
|
85
|
-
}
|
|
86
|
-
})
|
|
87
68
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as _ from 'underscore';
|
|
2
|
+
import { getDataSourceServiceName } from './index';
|
|
3
|
+
import { jsonToObject } from '../util/convert';
|
|
4
|
+
const LocalDataSourceServices = {};
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
export async function createDataSourceService(broker, dataSource) {
|
|
8
|
+
const dataSourceName = dataSource.name;
|
|
9
|
+
const serviceName = getDataSourceServiceName(dataSourceName);
|
|
10
|
+
|
|
11
|
+
if (LocalDataSourceServices[serviceName]) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let service = broker.createService({
|
|
16
|
+
name: serviceName,
|
|
17
|
+
events: {
|
|
18
|
+
[`${dataSourceName}.*.metadata.objects.inserted`]: {
|
|
19
|
+
handler(ctx) {
|
|
20
|
+
let objectConfig = ctx.params.data;
|
|
21
|
+
jsonToObject(objectConfig)
|
|
22
|
+
dataSource.initObject(objectConfig)
|
|
23
|
+
/**
|
|
24
|
+
* 每次都需要初始化,TypeORM不适用于微服务模式
|
|
25
|
+
*/
|
|
26
|
+
dataSource.initTypeORM();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
if (!broker.started) { //如果broker未启动则手动启动service
|
|
32
|
+
await broker._restartService(service)
|
|
33
|
+
}
|
|
34
|
+
await broker.waitForServices(service.name, null, 10);
|
|
35
|
+
LocalDataSourceServices[serviceName] = true;
|
|
36
|
+
return service
|
|
37
|
+
}
|
|
@@ -260,9 +260,11 @@ export async function dealWithRelatedFields(
|
|
|
260
260
|
let steedosSchema = getSteedosSchema();
|
|
261
261
|
let objectName = objectConfig.name;
|
|
262
262
|
let obj = steedosSchema.getObject(objectName);
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
let
|
|
263
|
+
|
|
264
|
+
const relationsInfo = await obj.getRelationsInfo();
|
|
265
|
+
let detailsInfo = relationsInfo.details || [];
|
|
266
|
+
let lookupsInfo = relationsInfo.lookup_details || [];
|
|
267
|
+
|
|
266
268
|
let relatedInfos = detailsInfo.concat(lookupsInfo);
|
|
267
269
|
for (const info of relatedInfos) {
|
|
268
270
|
if (!info.startsWith("__")) {
|
package/src/services/index.ts
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
export * from './objectServiceDispatcher';
|
|
2
2
|
export * from './objectService';
|
|
3
3
|
|
|
4
|
+
export * from './datasourceServiceFactory';
|
|
5
|
+
export * from './objectServiceFactory';
|
|
6
|
+
|
|
4
7
|
export function getObjectServiceName(objectApiName: string){
|
|
5
8
|
return `@${objectApiName}`;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function getDataSourceServiceName(dataSource: string) {
|
|
12
|
+
return `~dataSource-${dataSource}`;
|
|
6
13
|
}
|
|
@@ -4,7 +4,7 @@ import { getObjectConfig } from '../types/object_dynamic_load';
|
|
|
4
4
|
import _ = require('underscore');
|
|
5
5
|
import { generateActionRestProp, generateActionGraphqlProp, generateSettingsGraphql, RELATED_PREFIX, _getRelatedType, correctName, getGraphqlActions, getRelatedResolver, dealWithRelatedFields } from './helpers';
|
|
6
6
|
import { getObjectServiceName } from '.';
|
|
7
|
-
import { jsonToObject } from '../
|
|
7
|
+
import { jsonToObject } from '../util/convert';
|
|
8
8
|
import { extend } from '../util';
|
|
9
9
|
const Future = require('fibers/future');
|
|
10
10
|
// import { parse } from '@steedos/formula';
|
|
@@ -617,9 +617,10 @@ module.exports = {
|
|
|
617
617
|
resolvers[objectApiName][relatedFieldName] = getRelatedResolver(objectApiName, detailObjectApiName, detailFieldName, detailFieldReferenceToFieldName);
|
|
618
618
|
}
|
|
619
619
|
};
|
|
620
|
-
schema.events[`${getObjectServiceName(objectConfig.name)}.metadata.objects.inserted`] = {
|
|
620
|
+
schema.events[`${objectConfig.datasource}.${getObjectServiceName(objectConfig.name)}.metadata.objects.inserted`] = {
|
|
621
621
|
handler: async function (ctx) {
|
|
622
622
|
let objectConfig = ctx.params.data;
|
|
623
|
+
// console.log(`${objectConfig.datasource}.${getObjectServiceName(objectConfig.name)}.metadata.objects.inserted`);
|
|
623
624
|
// 对象发生变化时,重新创建Steedos Object 对象
|
|
624
625
|
const datasource = getDataSource(objectConfig.datasource);
|
|
625
626
|
if (datasource) {
|
|
@@ -639,13 +640,13 @@ module.exports = {
|
|
|
639
640
|
await datasource.init();
|
|
640
641
|
}
|
|
641
642
|
|
|
642
|
-
if(datasource.name === 'meteor' && Creator.Objects[objectConfig.name]){
|
|
643
|
+
if (datasource.name === 'meteor' && Creator.Objects[objectConfig.name]) {
|
|
643
644
|
jsonToObject(objectConfig);
|
|
644
645
|
const localTriggers = (localObjectConfig as any).triggers;
|
|
645
646
|
if(localTriggers){
|
|
646
647
|
objectConfig.triggers = localTriggers;
|
|
647
648
|
}
|
|
648
|
-
extend(objectConfig, {triggers: (localObjectConfig as any)._baseTriggers})
|
|
649
|
+
extend(objectConfig, { triggers: Creator.Objects[objectConfig.name].triggers }, { triggers: (localObjectConfig as any)._baseTriggers })
|
|
649
650
|
Creator.Objects[objectConfig.name] = objectConfig;
|
|
650
651
|
|
|
651
652
|
await Future.task(() => {
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import * as _ from 'underscore';
|
|
2
|
-
import { getObjectServiceName } from '
|
|
2
|
+
import { getObjectServiceName } from './index';
|
|
3
3
|
const objectService = require('../services/objectService');
|
|
4
4
|
|
|
5
5
|
const LocalObjectServices = {};
|
|
6
6
|
|
|
7
|
-
function onDestroyObjectService(objectApiName){
|
|
7
|
+
function onDestroyObjectService(objectApiName) {
|
|
8
8
|
const serviceName = getObjectServiceName(objectApiName);
|
|
9
9
|
delete LocalObjectServices[serviceName]
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export async function createObjectService(broker, serviceName, objectConfig) {
|
|
13
|
-
if(LocalObjectServices[serviceName]){
|
|
14
|
-
return
|
|
13
|
+
if (LocalObjectServices[serviceName]) {
|
|
14
|
+
return;
|
|
15
15
|
}
|
|
16
16
|
let service = broker.createService({
|
|
17
17
|
name: serviceName,
|