@steedos/service-package-registry 2.2.54-beta.8 → 2.2.55-beta.10

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.
@@ -7,7 +7,8 @@ const objectql = require('@steedos/objectql');
7
7
  const registry = require('./registry');
8
8
  const userDir = path.join(process.cwd(), '.steedos');
9
9
  const packagesFilePath = path.join(userDir, 'steedos-packages.yml');
10
-
10
+ const metadataApi = require('@steedos/metadata-api');
11
+ const util = require('./util');
11
12
  const loadPackagesConfig = ()=>{
12
13
  return yaml.load(fs.readFileSync(packagesFilePath, 'utf8')) || {};
13
14
  }
@@ -111,6 +112,51 @@ const destroyExistThePackageService = async (packageInfo)=>{
111
112
  }
112
113
  }
113
114
 
115
+ const isPackage = (name)=>{
116
+ try {
117
+ const packagePath = path.dirname(require.resolve(`${name}/package.json`, {
118
+ paths: [path.join(userDir, 'node_modules')]
119
+ }))
120
+ return fs.existsSync(path.join(packagePath, 'package.service.js'));
121
+ } catch (error) {
122
+ return false;
123
+ }
124
+ }
125
+
126
+ const loadDependency = async (dependencyName, dependencyVersion)=>{
127
+ let schema = objectql.getSteedosSchema();
128
+ let broker = schema.broker;
129
+ let packageInfo = null;
130
+ const packageConfig = getPackageConfig(dependencyName);
131
+ if(packageConfig){
132
+ if(packageConfig.enable){
133
+ return ;
134
+ }else{
135
+ await enablePackage(dependencyName)
136
+ }
137
+ }else{
138
+ try {
139
+ const packagePath = path.dirname(require.resolve(`${dependencyName}/package.json`, {
140
+ paths: [path.join(userDir, 'node_modules')]
141
+ }))
142
+ packageInfo = require(path.join(packagePath, 'package.json'));
143
+ } catch (error) {
144
+ // console.log(`loadDependency`, error.message)
145
+ }
146
+ if(packageInfo && isPackage(dependencyName)){
147
+ await enablePackage(dependencyName)
148
+ }else{
149
+ try {
150
+ await installPackage(broker, {module: dependencyName, version: dependencyVersion, enable: true})
151
+ } catch (error) {
152
+
153
+ }
154
+ }
155
+ // 如果steedos package yml 中没有该依赖,则直接安装
156
+ // await installPackage(broker, {module: dependencyName, version: dependencyVersion, enable: true})
157
+ }
158
+ }
159
+
114
160
  const loadPackage = async (packageName, packagePath)=>{
115
161
  try {
116
162
  if(!packagePath){
@@ -120,7 +166,14 @@ const loadPackage = async (packageName, packagePath)=>{
120
166
  }
121
167
  const packageInfo = require(path.join(packagePath, 'package.json'));
122
168
  await destroyExistThePackageService(packageInfo);
123
- await steedos.loadPackage(packagePath)
169
+ await steedos.loadPackage(packagePath);
170
+
171
+ if(packageInfo.dependencies){
172
+ for (const dependencyName in packageInfo.dependencies) {
173
+ const dependencyVersion = packageInfo.dependencies[dependencyName];
174
+ await loadDependency(dependencyName, dependencyVersion);
175
+ }
176
+ }
124
177
  return Object.assign({packagePath: packagePath}, packageInfo);
125
178
  } catch (error) {
126
179
  console.error(error)
@@ -162,13 +215,17 @@ const removePackage = async (packageName)=>{
162
215
  fs.writeFileSync(packagesFilePath, data);
163
216
  }
164
217
 
165
- const enablePackage = async (packageName)=>{
218
+ const getPackageConfig = (packageName)=>{
166
219
  const packages = loadPackagesConfig();
167
- let packagePath = null;
168
- const package = _.find(packages, (info, name)=>{
220
+ return _.find(packages, (info, name)=>{
169
221
  return packageName == name
170
- })
171
- if(package.local){
222
+ });
223
+ }
224
+
225
+ const enablePackage = async (packageName)=>{
226
+ let packagePath = null;
227
+ let package = getPackageConfig(packageName);
228
+ if(package && package.local){
172
229
  if(path.isAbsolute(package.path)){
173
230
  packagePath = package.path
174
231
  }else{
@@ -179,19 +236,86 @@ const enablePackage = async (packageName)=>{
179
236
  paths: [path.join(userDir, 'node_modules')]
180
237
  }))
181
238
  }
182
- await steedos.loadPackage(packagePath)
183
- let packageInfo = {};
184
- _.map(packages, (package, name)=>{
185
- if(packageName == name){
186
- package.enable = true;
187
- packageInfo = Object.assign({}, package, {name: packageName});
239
+ await loadPackage(packageName, packagePath)
240
+
241
+ if(package){
242
+ package.enable = true;
243
+ }else{
244
+ const packageJSON = require(path.join(packagePath, 'package.json'));
245
+ package = {
246
+ label: '',
247
+ version: packageJSON.version,
248
+ description: packageJSON.description || '',
249
+ local: false,
250
+ enable: true,
251
+ path: util.getPackageRelativePath(process.cwd(), packagePath)
188
252
  }
189
- })
190
- let data = yaml.dump(packages);
191
- fs.writeFileSync(packagesFilePath, data);
253
+ }
254
+ appendToPackagesConfig(packageName, package);
255
+ let packageInfo = Object.assign({}, package, {name: packageName});
192
256
  return packageInfo;
193
257
  }
258
+ const installPackage = async (broker, options)=>{
259
+ let {module, version, label, description, enable} = options;
260
+ const packagePath = await registry.installModule(module, version);
261
+ if(enable){
262
+ await loadPackage(module, packagePath);
263
+ }else{
264
+ enable = false;
265
+ }
266
+ const packageConfig = {
267
+ label: label || '',
268
+ version: version,
269
+ description: description || '',
270
+ local: false,
271
+ enable: enable,
272
+ path: util.getPackageRelativePath(process.cwd(), packagePath)
273
+ }
274
+ appendToPackagesConfig(module, packageConfig);
275
+ const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(), packagePath));
276
+ await broker.call(`@steedos/service-packages.install`, {
277
+ serviceInfo: Object.assign({}, packageConfig, {
278
+ name: module,
279
+ enable: enable,
280
+ nodeID: broker.nodeID,
281
+ instanceID: broker.instanceID,
282
+ metadata: metadata
283
+ })
284
+ })
285
+ return packageConfig;
286
+ }
287
+
288
+ const getPackageMetadata = async (packagePath)=>{
289
+ const packageMetadata = [];
290
+ const result = await metadataApi.loadFileToJson(packagePath, {
291
+ CustomApplication: '*',
292
+ CustomPermissionset: '*',
293
+ CustomProfile: '*',
294
+ CustomObject: '*',
295
+ Layout: '*',
296
+ CustomReport: '*',
297
+ Workflow: '*',
298
+ Flow: '*',
299
+ ApprovalProcess: '*',
300
+ Role: '*',
301
+ FlowRole: '*',
302
+ Query: '*',
303
+ Chart: '*',
304
+ Page: '*',
305
+ Tab: '*',
306
+ });
194
307
 
308
+ _.each(result, (metadataItems, metadataType)=>{
309
+ _.each(metadataItems, (metadata, apiName)=>{
310
+ packageMetadata.push({
311
+ label: metadata.label || metadata.name,
312
+ type: metadataType,
313
+ api_name: apiName
314
+ })
315
+ })
316
+ })
317
+ return packageMetadata;
318
+ }
195
319
 
196
320
  module.exports = {
197
321
  loadPackages,
@@ -201,5 +325,7 @@ module.exports = {
201
325
  disablePackage,
202
326
  enablePackage,
203
327
  removePackage,
204
- getPackageInfo
328
+ getPackageInfo,
329
+ getPackageMetadata,
330
+ installPackage
205
331
  }
@@ -6,7 +6,7 @@ const objectql = require('@steedos/objectql');
6
6
  const packageJson = require('./package-json');
7
7
  const _ = require('lodash');
8
8
  const login = require('./login');
9
-
9
+ const metadataApi = require('@steedos/metadata-api');
10
10
  function registryUrl(scope) {
11
11
  try {
12
12
  const result = login.getYarnrcScopes();
@@ -213,7 +213,6 @@ async function installModule(module, version, url, registry_url) {
213
213
  activePromise = Promise.resolve(packagePath);
214
214
  return activePromise;
215
215
  } catch (error) {
216
- console.log(`error`, error)
217
216
  throw new Error(`${module} is not steedos package`)
218
217
  }
219
218
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos/service-package-registry",
3
- "version": "2.2.54-beta.8",
3
+ "version": "2.2.55-beta.10",
4
4
  "description": "",
5
5
  "main": "package.service.js",
6
6
  "scripts": {
@@ -9,12 +9,12 @@
9
9
  "author": "",
10
10
  "license": "ISC",
11
11
  "dependencies": {
12
- "@steedos/auth": "2.2.54-beta.8",
13
- "@steedos/core": "2.2.54-beta.8",
14
- "@steedos/metadata-core": "2.2.54-beta.8",
15
- "@steedos/objectql": "2.2.54-beta.8",
16
- "@steedos/service-package-license": "2.2.54-beta.8",
17
- "@steedos/service-package-loader": "2.2.54-beta.8",
12
+ "@steedos/auth": "2.2.55-beta.10",
13
+ "@steedos/core": "2.2.55-beta.10",
14
+ "@steedos/metadata-core": "2.2.55-beta.10",
15
+ "@steedos/objectql": "2.2.55-beta.10",
16
+ "@steedos/service-package-license": "2.2.55-beta.10",
17
+ "@steedos/service-package-loader": "2.2.55-beta.10",
18
18
  "fs-extra": "8.1.0",
19
19
  "i18next": "20.3.2",
20
20
  "json-stringify-safe": "5.0.1",
@@ -32,5 +32,5 @@
32
32
  "publishConfig": {
33
33
  "access": "public"
34
34
  },
35
- "gitHead": "f91a35447a4a07a7d6868748ce911cd660c5fadc"
35
+ "gitHead": "8332c1b7386041d49e191183011c96210ffa97d8"
36
36
  }