@steedos/service-package-registry 2.5.18-beta.2 → 2.5.18-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.
@@ -10,6 +10,21 @@ const packagesFilePath = path.join(userDir, 'steedos-packages.yml');
10
10
  const metadataApi = require('@steedos/metadata-api');
11
11
  const util = require('./util');
12
12
  const metaDataCore = require('@steedos/metadata-core');
13
+ const npmRCFilePath = path.join(userDir, '.npmrc')
14
+
15
+ // 读取.steedos下的.npmrc文件内容
16
+ const getNpmrc = ()=>{
17
+ let npmrc = "";
18
+ if(fs.existsSync(npmRCFilePath)){
19
+ npmrc = fs.readFileSync(npmRCFilePath, 'utf8')
20
+ }
21
+ return npmrc;
22
+ }
23
+
24
+ // 写入.steedos下的.npmrc文件内容
25
+ const setNpmrc = (data)=>{
26
+ fs.writeFileSync(npmRCFilePath, data);
27
+ }
13
28
 
14
29
  const getPackageYmlData = (packagePath)=>{
15
30
  let packageYmlData = {};
@@ -405,5 +420,8 @@ module.exports = {
405
420
  getPackageInfo,
406
421
  getPackageMetadata,
407
422
  installPackage,
408
- getPackageYmlData
423
+ getPackageYmlData,
424
+ getNpmrc,
425
+ setNpmrc,
426
+ getPackageConfig
409
427
  }
@@ -186,9 +186,11 @@ const scanPackageMetadatas = async (packagePath) => {
186
186
  return packageMetadatas;
187
187
  }
188
188
 
189
- const checkDependencies = async (packagePath)=>{
190
- const packageServiceConfig = require(path.join(packagePath, 'package.service.js'));
191
- const dependencies = (packageServiceConfig && packageServiceConfig.dependencies) || [];
189
+ const checkDependencies = async (packagePath, dependencies)=>{
190
+ if(!dependencies){
191
+ const packageServiceConfig = require(path.join(packagePath, 'package.service.js'));
192
+ dependencies = (packageServiceConfig && packageServiceConfig.dependencies) || [];
193
+ }
192
194
  for(const item of dependencies){
193
195
  const hasService = await objectql.getSteedosSchema().broker.registry.hasService(item);
194
196
  if(!hasService){
@@ -14,6 +14,8 @@ let installDenyList = [];
14
14
  let installAllAllowed = true;
15
15
  let installVersionRestricted = false;
16
16
  var activePromise = Promise.resolve();
17
+ const _ = require('lodash');
18
+ const npa = require("npm-package-arg");
17
19
 
18
20
  log.init({});
19
21
 
@@ -268,6 +270,27 @@ async function installModule(module, version, url, registry_url) {
268
270
  return activePromise;
269
271
  }
270
272
 
273
+ async function yarnAddPackage(yarnPackage){
274
+ var installDir = settings.userDir || ".";
275
+ var yarnArgs = ['add', '-E', ...yarnPackage.split(' '), '--json'];
276
+ const data = await exec.run(yarnCommand, yarnArgs, {cwd: installDir}, true);
277
+ const formatData = JSON.parse(_.last(_.compact(data.stdout.split('\n'))))
278
+ // 解析 yarn add 返回的结果
279
+ const steedosPackages = [];
280
+ _.each(formatData.data.trees, (module)=>{
281
+ const parsed = npa(module.name);
282
+ const packagePath = path.dirname(require.resolve(`${parsed.name}/package.json`, {
283
+ paths: [path.join(installDir, 'node_modules')]
284
+ }))
285
+ steedosPackages.push({
286
+ name: parsed.name,
287
+ version: parsed.rawSpec,
288
+ path: packagePath
289
+ })
290
+ })
291
+ return steedosPackages;
292
+ }
293
+
271
294
 
272
295
  async function uninstallModule(module){
273
296
  if (Buffer.isBuffer(module)) {
@@ -326,5 +349,6 @@ const isPackageUrl = (url)=>{
326
349
  module.exports = {
327
350
  installModule,
328
351
  uninstallModule,
329
- isPackageUrl
352
+ isPackageUrl,
353
+ yarnAddPackage
330
354
  }
@@ -0,0 +1,4 @@
1
+ name: dependencies
2
+ type: select
3
+ multiple: true
4
+ label: 依赖项
@@ -68,12 +68,42 @@
68
68
  "mode": "read",
69
69
  "className": "mb-4",
70
70
  "excludedFields": [
71
- "metadata"
71
+ "metadata",
72
+ "dependencies"
72
73
  ]
73
74
  }
74
75
  ],
75
76
  "className": "p-0",
76
77
  "id": "u:5d4e7e3f6ecc"
78
+ },
79
+ {
80
+ "title": "依赖服务",
81
+ "body": [
82
+ {
83
+ "type": "steedos-object-form",
84
+ "label": "对象表单",
85
+ "objectApiName": "${objectName}",
86
+ "recordId": "${recordId}",
87
+ "appId": "${appId}",
88
+ "id": "u:fec578db3278",
89
+ "mode": "read",
90
+ "className": "mb-4",
91
+ "fields": [
92
+ "dependencies"
93
+ ],
94
+ "fieldsExtend": {
95
+ "dependencies": {
96
+ "label": false,
97
+ "amis": {
98
+ "type": "tpl",
99
+ "tpl": "${dependencies | join: }"
100
+ }
101
+ }
102
+ }
103
+ }
104
+ ],
105
+ "className": "p-0",
106
+ "id": "u:5d4e7e3f6ecc"
77
107
  }
78
108
  ],
79
109
  "id": "u:148cf8e840eb"
@@ -26,13 +26,13 @@
26
26
  "body": [
27
27
  {
28
28
  "type": "tpl",
29
- "tpl": "<div class='antd-Card-heading bg-white'><span class='antd-Card-avtar pull-left thumb-md m-r slds-icon slds-icon_container slds-icon-${iconCategory}-${iconName} ${display === \"split\" && 'hidden'}'><img class='antd-Card-img'src='${icon}' /></span><div class='antd-Card-meta'><div class='antd-Card-title'><span class='antd-TplField'><span>${label}</span></span></div><div class='antd-Card-subTitle'><span class='antd-TplField'><span>${description}</span></span></div><div class='antd-Card-desc'><span class='antd-TplField'><span><span class='bg-green-300 rounded-full px-2 py-0.5 mt-2 inline-block'>${_display.status}</span><span class='text-gray-600 px-2 py-0.5 mt-2 inline-block float-right'>${version}</span></span></span></div></div></div>"
29
+ "tpl": "<div class='antd-Card-heading bg-white'><span class='antd-Card-avtar pull-left thumb-md m-r slds-icon slds-icon_container slds-icon-${iconCategory}-${iconName} ${display === \"split\" && 'hidden'}'><img class='antd-Card-img'src='${icon}' /></span><div class='antd-Card-meta'><div class='antd-Card-title'><span class='antd-TplField' title='${label}'><span>${label}</span></span></div><div class='antd-Card-subTitle'><span class='antd-TplField' title='${description}'><span>${description}</span></span></div><div class='antd-Card-desc'><span class='antd-TplField'><span><span class='bg-${status === 'enable' ? 'green': 'gray'}-300 rounded-full px-2 py-0.5 mt-2 inline-block'>${_display.status}</span><span class='text-gray-600 px-2 py-0.5 mt-2 inline-block float-right'>${version}</span></span></span></div></div></div>"
30
30
  }
31
31
  ],
32
32
  "actions": [
33
33
  {
34
34
  "label": "${uiSchema.actions.enable.label}",
35
- "disabledOn": "${status === 'enable'}",
35
+ "disabledOn": "${status === 'enable' || window:Meteor.settings.public.enable_saas}",
36
36
  "className": "mr-4",
37
37
  "onEvent": {
38
38
  "click": {
@@ -48,7 +48,7 @@
48
48
  },
49
49
  {
50
50
  "label": "${uiSchema.actions.disable.label}",
51
- "disabledOn": "${status !== 'enable'}",
51
+ "disabledOn": "${status !== 'enable' || window:Meteor.settings.public.enable_saas}",
52
52
  "onEvent": {
53
53
  "click": {
54
54
  "actions": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos/service-package-registry",
3
- "version": "2.5.18-beta.2",
3
+ "version": "2.5.18-beta.3",
4
4
  "description": "",
5
5
  "main": "package.service.js",
6
6
  "scripts": {
@@ -9,11 +9,11 @@
9
9
  "author": "",
10
10
  "license": "ISC",
11
11
  "dependencies": {
12
- "@steedos/auth": "2.5.18-beta.2",
13
- "@steedos/core": "2.5.18-beta.2",
14
- "@steedos/metadata-core": "2.5.18-beta.2",
15
- "@steedos/objectql": "2.5.18-beta.2",
16
- "@steedos/service-package-loader": "2.5.18-beta.2",
12
+ "@steedos/auth": "2.5.18-beta.3",
13
+ "@steedos/core": "2.5.18-beta.3",
14
+ "@steedos/metadata-core": "2.5.18-beta.3",
15
+ "@steedos/objectql": "2.5.18-beta.3",
16
+ "@steedos/service-package-loader": "2.5.18-beta.3",
17
17
  "fs-extra": "8.1.0",
18
18
  "i18next": "20.3.2",
19
19
  "json-stringify-safe": "5.0.1",
@@ -31,5 +31,5 @@
31
31
  "publishConfig": {
32
32
  "access": "public"
33
33
  },
34
- "gitHead": "0f48957d39df17d699a5177f473401362a9916bf"
34
+ "gitHead": "ad7085eedba341a58446a969102da5cdc3d691b2"
35
35
  }
@@ -155,13 +155,20 @@ module.exports = {
155
155
  enablePackage:{
156
156
  async handler(ctx) {
157
157
  const { module } = ctx.params
158
- let packageConfig = await loader.enablePackage(module);
158
+ let packageConfig = await loader.getPackageConfig(module);
159
+
160
+ const packageYmlData = loader.getPackageYmlData(packageConfig.path);
161
+
162
+ if(packageYmlData.dependencies){
163
+ await packages.checkDependencies(path.resolve(packageConfig.path), packageYmlData.dependencies || [])
164
+ }
165
+ packageConfig = await loader.enablePackage(module);
166
+
159
167
  if(packageConfig.static){
160
168
  packageConfig = Object.assign({}, packageConfig, this.getStaticPackageInfo(packageConfig, packageConfig.name))
161
169
  }
162
- await packages.checkDependencies(path.resolve(packageConfig.path))
170
+
163
171
  const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packageConfig.path));
164
- const packageYmlData = loader.getPackageYmlData(packageConfig.path);
165
172
  await ctx.broker.call(`@steedos/service-packages.install`, {
166
173
  serviceInfo: Object.assign({}, packageConfig, {
167
174
  packageYmlData,
@@ -225,8 +232,24 @@ module.exports = {
225
232
  async handler(ctx) {
226
233
  return await this.addPackages(ctx);
227
234
  }
235
+ },
236
+ getNpmrc: {
237
+ async handler(ctx){
238
+ return await loader.getNpmrc()
239
+ }
240
+ },
241
+ setNpmrc: {
242
+ async handler(ctx){
243
+ const { npmrc } = ctx.params;
244
+ return await loader.setNpmrc(npmrc)
245
+ }
246
+ },
247
+ yarnAddPackage: {
248
+ async handler(ctx) {
249
+ const { yarnPackage } = ctx.params;
250
+ return await this.yarnAddPackage(yarnPackage);
251
+ }
228
252
  }
229
-
230
253
  },
231
254
 
232
255
  /**
@@ -489,6 +512,34 @@ module.exports = {
489
512
  }
490
513
  }
491
514
  }
515
+ },
516
+ yarnAddPackage: {
517
+ async handler(yarnPackage) {
518
+ const packages = await registry.yarnAddPackage(yarnPackage);
519
+ for (const packageInfo of packages) {
520
+ const packagePath = packageInfo.path;
521
+ loader.appendToPackagesConfig(packageInfo.name, {
522
+ version: packageInfo.version,
523
+ path: util.getPackageRelativePath(process.cwd(), packagePath),
524
+ enable: false
525
+ });
526
+ const metadata = await loader.getPackageMetadata(util.getPackageRelativePath(process.cwd(), packagePath));
527
+ const packageYmlData = loader.getPackageYmlData(packagePath);
528
+ await this.broker.call(`@steedos/service-packages.install`, {
529
+ serviceInfo: Object.assign({}, {
530
+ version: packageInfo.version,
531
+ path: packageInfo.path
532
+ }, {
533
+ packageYmlData: packageYmlData,
534
+ name: packageInfo.name,
535
+ enable: false,
536
+ nodeID: broker.nodeID,
537
+ instanceID: broker.instanceID,
538
+ metadata: metadata
539
+ })
540
+ })
541
+ }
542
+ }
492
543
  }
493
544
  },
494
545
 
@@ -1,166 +0,0 @@
1
- const express = require('express');
2
- const router = express.Router();
3
- const core = require('@steedos/core');
4
- const registry = require('../manager/registry');
5
- const loader = require('../manager/loader');
6
- const objectql = require('@steedos/objectql');
7
- let schema = objectql.getSteedosSchema();
8
- router.get('/api/nodes/install', core.requireAuthentication, async function (req, res) {
9
- const userSession = req.user;
10
- const isSpaceAdmin = userSession.is_space_admin;
11
- const body = JSON.parse(decodeURIComponent(Buffer.from(req.query.data, "base64").toString('utf8')));
12
- if(!isSpaceAdmin){
13
- return res.status(401).send({ message: 'No permission' });
14
- }
15
- try {
16
- const { module, version, label, description, nodeID} = body || {};
17
- let broker = schema.broker;
18
- const result = await broker.call(`@steedos/service-project.installPackage`, {
19
- module, version, label, description
20
- },{
21
- nodeID: nodeID
22
- })
23
- res.redirect(302, `/app/admin/steedos_packages/grid/all`);
24
- // res.status(200).send(result); //TODO 完善返回信息
25
- } catch (error) {
26
- console.error(error);
27
- res.status(500).send({error: error.message});
28
- }
29
- });
30
-
31
- router.post('/api/nodes/uninstall', core.requireAuthentication, async function (req, res) {
32
- const userSession = req.user;
33
- const isSpaceAdmin = userSession.is_space_admin;
34
- const body = req.body;
35
- if(!isSpaceAdmin){
36
- return res.status(401).send({ message: 'No permission' });
37
- }
38
- try {
39
- await loader.removePackage(body.module);
40
- await registry.uninstallModule(body.module)
41
- const { module, nodeID} = body || {};
42
- let broker = schema.broker;
43
- const result = await broker.call(`@steedos/service-project.uninstallPackage`, {
44
- module
45
- },{
46
- nodeID: nodeID
47
- })
48
- res.status(200).send(result); //TODO 完善返回信息
49
- } catch (error) {
50
- console.error(error);
51
- res.status(500).send({error: error.message});
52
- }
53
- });
54
-
55
- router.post('/api/nodes/reload', core.requireAuthentication, async function (req, res) {
56
- const userSession = req.user;
57
- const isSpaceAdmin = userSession.is_space_admin;
58
- const body = req.body;
59
- if(!isSpaceAdmin){
60
- return res.status(401).send({ message: 'No permission' });
61
- }
62
- try {
63
- const { module, nodeID} = body || {};
64
- let broker = schema.broker;
65
- const result = await broker.call(`@steedos/service-project.reloadPackage`, {
66
- module
67
- },{
68
- nodeID: nodeID
69
- })
70
- res.status(200).send(result);
71
- } catch (error) {
72
- console.error(error);
73
- res.status(500).send({error: error.message});
74
- }
75
- });
76
-
77
- router.post('/api/nodes/disable', core.requireAuthentication, async function (req, res) {
78
- const userSession = req.user;
79
- const isSpaceAdmin = userSession.is_space_admin;
80
- const body = req.body;
81
- if(!isSpaceAdmin){
82
- return res.status(401).send({ message: 'No permission' });
83
- }
84
- try {
85
- const { module, nodeID} = body || {};
86
- let broker = schema.broker;
87
- const result = await broker.call(`@steedos/service-project.disablePackage`, {
88
- module
89
- },{
90
- nodeID: nodeID
91
- })
92
- res.status(200).send(result);
93
- } catch (error) {
94
- console.error(error);
95
- res.status(500).send({error: error.message});
96
- }
97
- });
98
-
99
- router.post('/api/nodes/enable', core.requireAuthentication, async function (req, res) {
100
- const userSession = req.user;
101
- const isSpaceAdmin = userSession.is_space_admin;
102
- const body = req.body;
103
- if(!isSpaceAdmin){
104
- return res.status(401).send({ message: 'No permission' });
105
- }
106
- try {
107
- const { module, nodeID} = body || {};
108
- let broker = schema.broker;
109
- const result = await broker.call(`@steedos/service-project.enablePackage`, {
110
- module
111
- },{
112
- nodeID: nodeID
113
- })
114
- res.status(200).send(result);
115
- } catch (error) {
116
- console.error(error);
117
- res.status(500).send({error: error.message});
118
- }
119
- });
120
- router.get('/api/nodes/versions', core.requireAuthentication, async function (req, res) {
121
- const userSession = req.user;
122
- const isSpaceAdmin = userSession.is_space_admin;
123
- // console.log(`req.query`, req.query)
124
- const body = req.query;
125
- const { module } = body || {};
126
- if(!module){
127
- return res.status(500).send({ message: 'Not find module' });
128
- }
129
- if(!isSpaceAdmin){
130
- return res.status(401).send({ message: 'No permission' });
131
- }
132
- try {
133
-
134
- let broker = schema.broker;
135
- const result = await broker.call(`@steedos/service-project.getPackageVersions`, {
136
- module
137
- })
138
- res.status(200).send(result); //TODO 完善返回信息
139
- } catch (error) {
140
- console.error(error);
141
- res.status(500).send({error: error.message});
142
- }
143
- });
144
-
145
- router.post('/api/nodes/upgrade', core.requireAuthentication, async function (req, res) {
146
- const userSession = req.user;
147
- const isSpaceAdmin = userSession.is_space_admin;
148
- const body = req.body;
149
- if(!isSpaceAdmin){
150
- return res.status(401).send({ message: 'No permission' });
151
- }
152
- try {
153
- const { module, version} = body || {};
154
- let broker = schema.broker;
155
- const result = await broker.call(`@steedos/service-project.upgradePackage`, {
156
- module, version
157
- })
158
- res.status(200).send(result);
159
- } catch (error) {
160
- console.error(error);
161
- res.status(500).send({error: error.message});
162
- }
163
- });
164
-
165
-
166
- exports.default = router;
@@ -1,21 +0,0 @@
1
- /*
2
- * @Author: baozhoutao@steedos.com
3
- * @Date: 2022-11-17 16:29:17
4
- * @LastEditors: baozhoutao@steedos.com
5
- * @LastEditTime: 2022-11-28 18:01:04
6
- * @Description:
7
- */
8
- const express = require('express');
9
- const router = express.Router();
10
- const core = require("@steedos/core");
11
-
12
- let STEEDOS_REGISTRY_URL = process.env.STEEDOS_REGISTRY_URL ? process.env.STEEDOS_REGISTRY_URL : 'https://registry.steedos.cn/';
13
-
14
- router.get("/api/nodes/registry", core.requireAuthentication, async function (req, res) {
15
- res.status(200).send([
16
- { label: "https://registry.npmjs.org/", value: "https://registry.npmjs.org/" },
17
- { label: "https://registry.npm.taobao.org/", value: "https://registry.npm.taobao.org/" },
18
- { label: STEEDOS_REGISTRY_URL, value: STEEDOS_REGISTRY_URL },
19
- ]);
20
- });
21
- exports.default = router;