@steedos/service-package-registry 2.2.55-beta.2 → 2.2.55-beta.5

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.55-beta.2",
3
+ "version": "2.2.55-beta.5",
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.55-beta.2",
13
- "@steedos/core": "2.2.55-beta.2",
14
- "@steedos/metadata-core": "2.2.55-beta.2",
15
- "@steedos/objectql": "2.2.55-beta.2",
16
- "@steedos/service-package-license": "2.2.55-beta.2",
17
- "@steedos/service-package-loader": "2.2.55-beta.2",
12
+ "@steedos/auth": "2.2.55-beta.5",
13
+ "@steedos/core": "2.2.55-beta.5",
14
+ "@steedos/metadata-core": "2.2.55-beta.5",
15
+ "@steedos/objectql": "2.2.55-beta.5",
16
+ "@steedos/service-package-license": "2.2.55-beta.5",
17
+ "@steedos/service-package-loader": "2.2.55-beta.5",
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": "6e4d3d24ef1164cdb9134efd03c1304c471eb615"
35
+ "gitHead": "ab16a9162d1c2ef61b47056e139ddd4d69a5919b"
36
36
  }
@@ -9,7 +9,7 @@ const packageLicense = require('@steedos/service-package-license');
9
9
  const axios = require('axios');
10
10
  const _ = require(`lodash`);
11
11
  const path = require(`path`);
12
- const metadataApi = require('@steedos/metadata-api');
12
+
13
13
  const util = require('./main/default/manager/util');
14
14
  const fetch = require('node-fetch');
15
15
  const fs = require('fs');
@@ -21,38 +21,6 @@ const login = require('./main/default/manager/login');
21
21
  const HEADER_AUTH = 'Authorization';
22
22
  const AUTH_TYPE = 'Bearer';
23
23
 
24
- const getPackageMetadata = async (packagePath)=>{
25
- const packageMetadata = [];
26
- const result = await metadataApi.loadFileToJson(packagePath, {
27
- CustomApplication: '*',
28
- CustomPermissionset: '*',
29
- CustomProfile: '*',
30
- CustomObject: '*',
31
- Layout: '*',
32
- CustomReport: '*',
33
- Workflow: '*',
34
- Flow: '*',
35
- ApprovalProcess: '*',
36
- Role: '*',
37
- FlowRole: '*',
38
- Query: '*',
39
- Chart: '*',
40
- Page: '*',
41
- Tab: '*',
42
- });
43
-
44
- _.each(result, (metadataItems, metadataType)=>{
45
- _.each(metadataItems, (metadata, apiName)=>{
46
- packageMetadata.push({
47
- label: metadata.label || metadata.name,
48
- type: metadataType,
49
- api_name: apiName
50
- })
51
- })
52
- })
53
- return packageMetadata;
54
- }
55
-
56
24
  /**
57
25
  * @typedef {import('moleculer').Context} Context Moleculer's Context
58
26
  * 软件包服务启动后也需要抛出事件。
@@ -141,7 +109,7 @@ module.exports = {
141
109
  packagePath = path.resolve(process.cwd(), packagePath)
142
110
  }
143
111
  await loader.loadPackage(module, packagePath);
144
- const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfig.path));
112
+ const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfig.path));
145
113
  await ctx.broker.call(`@steedos/service-packages.install`, {
146
114
  serviceInfo: Object.assign({}, Object.assign({}, packageConfig, { name: module }), {
147
115
  nodeID: ctx.broker.nodeID,
@@ -167,7 +135,7 @@ module.exports = {
167
135
  const { module } = ctx.params
168
136
  const packageConfig = await loader.disablePackage(module);
169
137
  if(packageConfig.path){
170
- const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfig.path));
138
+ const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfig.path));
171
139
  await ctx.broker.call(`@steedos/service-packages.install`, {
172
140
  serviceInfo: Object.assign({}, packageConfig, {
173
141
  nodeID: ctx.broker.nodeID,
@@ -183,7 +151,7 @@ module.exports = {
183
151
  async handler(ctx) {
184
152
  const { module } = ctx.params
185
153
  const packageConfig = await loader.enablePackage(module);
186
- const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfig.path));
154
+ const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfig.path));
187
155
  await ctx.broker.call(`@steedos/service-packages.install`, {
188
156
  serviceInfo: Object.assign({}, packageConfig, {
189
157
  nodeID: ctx.broker.nodeID,
@@ -229,7 +197,7 @@ module.exports = {
229
197
  await this.loginSteedosRegistry();
230
198
  console.info(`login steedos registry success`);
231
199
  } catch (error) {
232
- console.error(`login steedos registry fail: `, error.message);
200
+ // console.error(`login steedos registry fail: `, error.message);
233
201
  }
234
202
  const settings = this.settings;
235
203
  const syncCloudPackages = settings.STEEDOS_CLOUD_SYNC_PACKAGES;
@@ -295,7 +263,7 @@ module.exports = {
295
263
  await this.loginSteedosRegistry();
296
264
  console.info(`login steedos registry success`);
297
265
  } catch (error) {
298
- console.error(`login steedos registry fail: `, error.message);
266
+ // console.error(`login steedos registry fail: `, error.message);
299
267
  }
300
268
  let { module, version, url, auth, registry_url } = ctx.params
301
269
  const enable = true;
@@ -342,32 +310,7 @@ module.exports = {
342
310
  methods: {
343
311
  installPackage: {
344
312
  async handler(module, version, label, description, enable, broker) {
345
- const packagePath = await registry.installModule(module, version)
346
- if(enable){
347
- const packageInfo = await loader.loadPackage(module, packagePath);
348
- }else{
349
- enable = false;
350
- }
351
- const packageConfig = {
352
- label: label,
353
- version: version,
354
- description: description || '',
355
- local: false,
356
- enable: enable,
357
- path: util.getPackageRelativePath(process.cwd(), packagePath)
358
- }
359
- loader.appendToPackagesConfig(module, packageConfig);
360
- const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(), packagePath));
361
- await broker.call(`@steedos/service-packages.install`, {
362
- serviceInfo: Object.assign({}, packageConfig, {
363
- name: module,
364
- enable: enable,
365
- nodeID: broker.nodeID,
366
- instanceID: broker.instanceID,
367
- metadata: metadata
368
- })
369
- })
370
- return packageConfig;
313
+ return await loader.installPackage(broker, {module, version, label, description, enable})
371
314
  }
372
315
  },
373
316
  getCloudSaasPurchasedPackages:{
@@ -432,7 +375,7 @@ module.exports = {
432
375
  path: util.getPackageRelativePath(process.cwd(), packagePath)
433
376
  }
434
377
  const newConfig = loader.appendToPackagesConfig(module, packageConfig);
435
- const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(), packagePath));
378
+ const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packagePath));
436
379
  await this.broker.call(`@steedos/service-packages.install`, {
437
380
  serviceInfo: Object.assign({}, newConfig, {
438
381
  name: module,
@@ -508,7 +451,7 @@ module.exports = {
508
451
  path: util.getPackageRelativePath(process.cwd(), packagePath)
509
452
  }
510
453
  loader.appendToPackagesConfig(packageName, packageConfig);
511
- const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(), packagePath));
454
+ const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packagePath));
512
455
  await broker.call(`@steedos/service-packages.install`, {
513
456
  serviceInfo: Object.assign({}, packageConfig, {
514
457
  name: packageName,
@@ -642,22 +585,36 @@ module.exports = {
642
585
  }
643
586
 
644
587
  await this.broker.call(`@steedos/service-package-license.syncPackagesLicense`);
645
-
588
+
646
589
  const PACKAGE_INSTALL_NODE = process.env.PACKAGE_INSTALL_NODE
647
590
  if(PACKAGE_INSTALL_NODE){
648
591
  await this.broker.call('metadata.add', {key: `#package_install_node.${this.broker.nodeID}`, data: {nodeID: PACKAGE_INSTALL_NODE}}, {meta: {}})
649
592
  }
650
593
  packages.maintainSystemFiles()
594
+ // 单包路径steedos-app
651
595
  try {
652
596
  const packagePath = path.join(process.cwd(), 'steedos-app');
653
597
  if(fs.existsSync(packagePath)){
654
598
  const packageInfo = require(path.join(packagePath, 'package.json'));
655
- loader.appendToPackagesConfig(`${packageInfo.name}`, {version: packageInfo.version, description: packageInfo.description, local: true, path: util.getPackageRelativePath(process.cwd(), packagePath)});
599
+ loader.appendToPackagesConfig(`${packageInfo.name}`, {version: packageInfo.version, description: packageInfo.description || '', local: true, path: util.getPackageRelativePath(process.cwd(), packagePath)});
656
600
  }
657
601
  } catch (error) {
658
602
  console.log(`started error`, error)
659
603
  }
660
604
 
605
+ // 新版单包项目加载
606
+ // try {
607
+ // if(fs.existsSync(path.join(process.cwd(), 'package.service.js'))){
608
+ // const packagePath = process.cwd();
609
+ // if(fs.existsSync(packagePath)){
610
+ // const packageInfo = require(path.join(packagePath, 'package.json'));
611
+ // loader.appendToPackagesConfig(`${packageInfo.name}`, {version: packageInfo.version, description: packageInfo.description, local: true, path: util.getPackageRelativePath(process.cwd(), packagePath)});
612
+ // }
613
+ // }
614
+ // } catch (error) {
615
+ // console.log(`started error`, error)
616
+ // }
617
+
661
618
  await metadata.uncompressPackages(process.cwd());
662
619
  const mPackages = metadata.getAllPackages(process.cwd());
663
620
  _.each(mPackages, (packagePath)=>{
@@ -675,7 +632,7 @@ module.exports = {
675
632
  for (const name in installPackages) {
676
633
  if (Object.hasOwnProperty.call(installPackages, name)) {
677
634
  const _packageInfo = installPackages[name];
678
- const metadata = await getPackageMetadata(_packageInfo.path);
635
+ const metadata = await loader.getPackageMetadata(_packageInfo.path);
679
636
  await this.broker.call(`@steedos/service-packages.install`, {
680
637
  serviceInfo: {
681
638
  name: name,