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

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,36 @@ const destroyExistThePackageService = async (packageInfo)=>{
111
112
  }
112
113
  }
113
114
 
115
+ const loadDependency = async (dependencyName, dependencyVersion)=>{
116
+ let schema = objectql.getSteedosSchema();
117
+ let broker = schema.broker;
118
+ let packageInfo = null;
119
+ const packageConfig = getPackageConfig(dependencyName);
120
+ if(packageConfig){
121
+ if(packageConfig.enable){
122
+ return ;
123
+ }else{
124
+ await enablePackage(dependencyName)
125
+ }
126
+ }else{
127
+ try {
128
+ const packagePath = path.dirname(require.resolve(`${dependencyName}/package.json`, {
129
+ paths: [path.join(userDir, 'node_modules')]
130
+ }))
131
+ packageInfo = require(path.join(packagePath, 'package.json'));
132
+ } catch (error) {
133
+ // console.log(`loadDependency`, error.message)
134
+ }
135
+ if(packageInfo){
136
+ await enablePackage(dependencyName)
137
+ }else{
138
+ await installPackage(broker, {module: dependencyName, version: dependencyVersion, enable: true})
139
+ }
140
+ // 如果steedos package yml 中没有该依赖,则直接安装
141
+ // await installPackage(broker, {module: dependencyName, version: dependencyVersion, enable: true})
142
+ }
143
+ }
144
+
114
145
  const loadPackage = async (packageName, packagePath)=>{
115
146
  try {
116
147
  if(!packagePath){
@@ -120,7 +151,14 @@ const loadPackage = async (packageName, packagePath)=>{
120
151
  }
121
152
  const packageInfo = require(path.join(packagePath, 'package.json'));
122
153
  await destroyExistThePackageService(packageInfo);
123
- await steedos.loadPackage(packagePath)
154
+ await steedos.loadPackage(packagePath);
155
+
156
+ if(packageInfo.dependencies){
157
+ for (const dependencyName in packageInfo.dependencies) {
158
+ const dependencyVersion = packageInfo.dependencies[dependencyName];
159
+ await loadDependency(dependencyName, dependencyVersion);
160
+ }
161
+ }
124
162
  return Object.assign({packagePath: packagePath}, packageInfo);
125
163
  } catch (error) {
126
164
  console.error(error)
@@ -162,13 +200,17 @@ const removePackage = async (packageName)=>{
162
200
  fs.writeFileSync(packagesFilePath, data);
163
201
  }
164
202
 
165
- const enablePackage = async (packageName)=>{
203
+ const getPackageConfig = (packageName)=>{
166
204
  const packages = loadPackagesConfig();
167
- let packagePath = null;
168
- const package = _.find(packages, (info, name)=>{
205
+ return _.find(packages, (info, name)=>{
169
206
  return packageName == name
170
- })
171
- if(package.local){
207
+ });
208
+ }
209
+
210
+ const enablePackage = async (packageName)=>{
211
+ let packagePath = null;
212
+ let package = getPackageConfig(packageName);
213
+ if(package && package.local){
172
214
  if(path.isAbsolute(package.path)){
173
215
  packagePath = package.path
174
216
  }else{
@@ -180,18 +222,85 @@ const enablePackage = async (packageName)=>{
180
222
  }))
181
223
  }
182
224
  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});
225
+
226
+ if(package){
227
+ package.enable = true;
228
+ }else{
229
+ const packageJSON = require(path.join(packagePath, 'package.json'));
230
+ package = {
231
+ label: '',
232
+ version: packageJSON.version,
233
+ description: packageJSON.description || '',
234
+ local: false,
235
+ enable: true,
236
+ path: util.getPackageRelativePath(process.cwd(), packagePath)
188
237
  }
189
- })
190
- let data = yaml.dump(packages);
191
- fs.writeFileSync(packagesFilePath, data);
238
+ }
239
+ appendToPackagesConfig(packageName, package);
240
+ let packageInfo = Object.assign({}, package, {name: packageName});
192
241
  return packageInfo;
193
242
  }
243
+ const installPackage = async (broker, options)=>{
244
+ let {module, version, label, description, enable} = options;
245
+ const packagePath = await registry.installModule(module, version)
246
+ if(enable){
247
+ await loadPackage(module, packagePath);
248
+ }else{
249
+ enable = false;
250
+ }
251
+ const packageConfig = {
252
+ label: label || '',
253
+ version: version,
254
+ description: description || '',
255
+ local: false,
256
+ enable: enable,
257
+ path: util.getPackageRelativePath(process.cwd(), packagePath)
258
+ }
259
+ appendToPackagesConfig(module, packageConfig);
260
+ const metadata = await getPackageMetadata(util.getPackageRelativePath(process.cwd(), packagePath));
261
+ await broker.call(`@steedos/service-packages.install`, {
262
+ serviceInfo: Object.assign({}, packageConfig, {
263
+ name: module,
264
+ enable: enable,
265
+ nodeID: broker.nodeID,
266
+ instanceID: broker.instanceID,
267
+ metadata: metadata
268
+ })
269
+ })
270
+ return packageConfig;
271
+ }
194
272
 
273
+ const getPackageMetadata = async (packagePath)=>{
274
+ const packageMetadata = [];
275
+ const result = await metadataApi.loadFileToJson(packagePath, {
276
+ CustomApplication: '*',
277
+ CustomPermissionset: '*',
278
+ CustomProfile: '*',
279
+ CustomObject: '*',
280
+ Layout: '*',
281
+ CustomReport: '*',
282
+ Workflow: '*',
283
+ Flow: '*',
284
+ ApprovalProcess: '*',
285
+ Role: '*',
286
+ FlowRole: '*',
287
+ Query: '*',
288
+ Chart: '*',
289
+ Page: '*',
290
+ Tab: '*',
291
+ });
292
+
293
+ _.each(result, (metadataItems, metadataType)=>{
294
+ _.each(metadataItems, (metadata, apiName)=>{
295
+ packageMetadata.push({
296
+ label: metadata.label || metadata.name,
297
+ type: metadataType,
298
+ api_name: apiName
299
+ })
300
+ })
301
+ })
302
+ return packageMetadata;
303
+ }
195
304
 
196
305
  module.exports = {
197
306
  loadPackages,
@@ -201,5 +310,7 @@ module.exports = {
201
310
  disablePackage,
202
311
  enablePackage,
203
312
  removePackage,
204
- getPackageInfo
313
+ getPackageInfo,
314
+ getPackageMetadata,
315
+ installPackage
205
316
  }
@@ -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();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos/service-package-registry",
3
- "version": "2.2.54",
3
+ "version": "2.2.55-beta.3",
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",
13
- "@steedos/core": "2.2.54",
14
- "@steedos/metadata-core": "2.2.54",
15
- "@steedos/objectql": "2.2.54",
16
- "@steedos/service-package-license": "2.2.54",
17
- "@steedos/service-package-loader": "2.2.54",
12
+ "@steedos/auth": "2.2.55-beta.3",
13
+ "@steedos/core": "2.2.55-beta.3",
14
+ "@steedos/metadata-core": "2.2.55-beta.3",
15
+ "@steedos/objectql": "2.2.55-beta.3",
16
+ "@steedos/service-package-license": "2.2.55-beta.3",
17
+ "@steedos/service-package-loader": "2.2.55-beta.3",
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": "c3c4c95a7010fd3a1af0cd41d999bff14718da1b"
35
+ "gitHead": "cf9ffd7d4f7de88c5b0bbb6c1c269afbeb2268a1"
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,
@@ -576,7 +519,7 @@ module.exports = {
576
519
  async handler(){
577
520
  const settings = this.settings;
578
521
  const packages = settings.STEEDOS_INITIAL_PACKAGES;
579
- if(_.isString(packages)){
522
+ if(_.isString(packages) && packages){
580
523
  for (const packageName of packages.split(',')) {
581
524
  try {
582
525
  const parsed = npa(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,