@builder6/core 0.6.5 → 0.7.1

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.
Files changed (49) hide show
  1. package/dist/config/default.config.d.ts +4 -0
  2. package/dist/config/default.config.js +6 -0
  3. package/dist/config/default.config.js.map +1 -0
  4. package/dist/config/index.d.ts +5 -0
  5. package/dist/config/index.js +77 -0
  6. package/dist/config/index.js.map +1 -0
  7. package/dist/config/moleculer.config.d.ts +63 -0
  8. package/dist/config/moleculer.config.js +67 -0
  9. package/dist/config/moleculer.config.js.map +1 -0
  10. package/dist/files/files.controller.d.ts +11 -0
  11. package/dist/files/files.controller.js +170 -0
  12. package/dist/files/files.controller.js.map +1 -0
  13. package/dist/files/files.controller.spec.d.ts +1 -0
  14. package/dist/files/files.controller.spec.js +17 -0
  15. package/dist/files/files.controller.spec.js.map +1 -0
  16. package/dist/files/files.module.d.ts +2 -0
  17. package/dist/files/files.module.js +27 -0
  18. package/dist/files/files.module.js.map +1 -0
  19. package/dist/files/files.moleculer.d.ts +10 -0
  20. package/dist/files/files.moleculer.js +50 -0
  21. package/dist/files/files.moleculer.js.map +1 -0
  22. package/dist/files/files.service.d.ts +31 -0
  23. package/dist/files/files.service.js +210 -0
  24. package/dist/files/files.service.js.map +1 -0
  25. package/dist/files/files.service.spec.d.ts +1 -0
  26. package/dist/files/files.service.spec.js +17 -0
  27. package/dist/files/files.service.spec.js.map +1 -0
  28. package/dist/files/index.d.ts +3 -0
  29. package/dist/files/index.js +20 -0
  30. package/dist/files/index.js.map +1 -0
  31. package/dist/index.d.ts +4 -0
  32. package/dist/index.js +4 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/plugin/index.d.ts +3 -0
  35. package/dist/plugin/index.js +20 -0
  36. package/dist/plugin/index.js.map +1 -0
  37. package/dist/plugin/moleculer.service.d.ts +11 -0
  38. package/dist/plugin/moleculer.service.js +96 -0
  39. package/dist/plugin/moleculer.service.js.map +1 -0
  40. package/dist/plugin/plugin.module.d.ts +22 -0
  41. package/dist/plugin/plugin.module.js +220 -0
  42. package/dist/plugin/plugin.module.js.map +1 -0
  43. package/dist/plugin/plugin.service.d.ts +2 -0
  44. package/dist/plugin/plugin.service.js +17 -0
  45. package/dist/plugin/plugin.service.js.map +1 -0
  46. package/dist/plugin/plugin.service.spec.d.ts +1 -0
  47. package/dist/plugin/plugin.service.spec.js +17 -0
  48. package/dist/plugin/plugin.service.spec.js.map +1 -0
  49. package/package.json +6 -3
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var FilesService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.FilesService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const AWS = require("aws-sdk");
16
+ const fs = require("fs-extra");
17
+ const uuid_1 = require("uuid");
18
+ const path = require("path");
19
+ const mongodb_service_1 = require("../mongodb/mongodb.service");
20
+ const mime = require("mime-types");
21
+ const config_1 = require("@nestjs/config");
22
+ const crypto = require("crypto");
23
+ let FilesService = FilesService_1 = class FilesService {
24
+ constructor(configService, mongodbService) {
25
+ this.configService = configService;
26
+ this.mongodbService = mongodbService;
27
+ this.logger = new common_1.Logger(FilesService_1.name);
28
+ this.rootUrl = configService.get('root.url');
29
+ this.storageDir = configService.get('storage.dir') || './steedos-storage';
30
+ this.cfsStore = configService.get('cfs.store') || 'local';
31
+ if (this.cfsStore === 'S3') {
32
+ this.s3 = new AWS.S3({
33
+ endpoint: configService.get('cfs.aws.s3.endpoint'),
34
+ accessKeyId: configService.get('cfs.aws.s3.access.key.id'),
35
+ secretAccessKey: configService.get('cfs.aws.s3.secret.access.key'),
36
+ region: configService.get('cfs.aws.s3.region'),
37
+ signatureVersion: 'v4',
38
+ });
39
+ this.s3Bucket = configService.get('cfs.aws.s3.bucket');
40
+ }
41
+ }
42
+ getCollectionFolderName(collectionName) {
43
+ let collectionFolderName = collectionName;
44
+ const collectionNameParts = collectionName.split('.');
45
+ if (collectionNameParts.length === 3 &&
46
+ collectionNameParts[0] === 'cfs' &&
47
+ collectionNameParts[2] === 'filerecord') {
48
+ collectionFolderName = collectionNameParts[1];
49
+ }
50
+ return collectionFolderName;
51
+ }
52
+ async uploadFile(collectionName = 'cfs.files.filerecord', file, metadata) {
53
+ const { _id = (0, uuid_1.v4)(), object_name, owner, space, record_id, parent, } = metadata;
54
+ const mimeType = file.mimetype ||
55
+ mime.lookup(file.originalname) ||
56
+ 'application/octet-stream';
57
+ let relativeKey;
58
+ const md5 = crypto.createHash('md5').update(file.buffer).digest('hex');
59
+ const currentDate = new Date();
60
+ const year = currentDate.getFullYear();
61
+ const month = (currentDate.getMonth() + 1).toString().padStart(2, '0');
62
+ const uniqueFileName = `${_id}-${file.originalname}`;
63
+ const collectionFolderName = this.getCollectionFolderName(collectionName);
64
+ if (this.cfsStore === 'local') {
65
+ const fileDir = path.join(this.storageDir, 'files', collectionFolderName, object_name || 'default', year.toString(), month);
66
+ relativeKey = path.join(object_name || 'default', year.toString(), month, uniqueFileName);
67
+ const filePath = path.join(fileDir, uniqueFileName);
68
+ try {
69
+ await fs.ensureDir(fileDir);
70
+ await fs.writeFile(filePath, file.buffer);
71
+ this.logger.log(`文件上传成功: ${filePath}`);
72
+ }
73
+ catch (err) {
74
+ throw new Error(`文件保存到本地失败: ${err.message}`);
75
+ }
76
+ }
77
+ else if (this.cfsStore === 'S3') {
78
+ const collectionFolderName = this.getCollectionFolderName(collectionName);
79
+ relativeKey = `${collectionFolderName}/${object_name || 'default'}/${year}/${month}/${uniqueFileName}`;
80
+ const params = {
81
+ Bucket: this.s3Bucket,
82
+ Key: relativeKey,
83
+ Body: file.buffer,
84
+ ContentType: mimeType,
85
+ };
86
+ try {
87
+ const data = await this.s3.upload(params).promise();
88
+ this.logger.log(`文件上传S3成功: ${relativeKey}`);
89
+ }
90
+ catch (err) {
91
+ throw new Error(`文件上传失败: ${err.message}`);
92
+ }
93
+ }
94
+ else {
95
+ throw new Error('未知的文件存储类型');
96
+ }
97
+ const savedRecord = await this.mongodbService.insertOne(collectionName, {
98
+ _id,
99
+ original: {
100
+ type: mimeType,
101
+ size: file.size,
102
+ name: file.originalname,
103
+ md5,
104
+ },
105
+ metadata: {
106
+ owner: owner,
107
+ space: space,
108
+ record_id: record_id,
109
+ object_name: object_name,
110
+ parent: parent,
111
+ },
112
+ copies: {
113
+ files: {
114
+ name: file.originalname,
115
+ type: mimeType,
116
+ size: file.size,
117
+ key: relativeKey,
118
+ updatedAt: new Date(),
119
+ createdAt: new Date(),
120
+ },
121
+ },
122
+ });
123
+ return savedRecord;
124
+ }
125
+ async getFile(collectionName, fileId) {
126
+ const fileRecord = await this.mongodbService.findOne(collectionName, {
127
+ _id: fileId,
128
+ });
129
+ return fileRecord;
130
+ }
131
+ async getPreSignedUrl(collectionName, fileId) {
132
+ const fileRecord = await this.mongodbService.findOne(collectionName, {
133
+ _id: fileId,
134
+ });
135
+ if (!fileRecord) {
136
+ throw new Error('未找到指定的文件记录');
137
+ }
138
+ if (this.cfsStore === 'S3') {
139
+ const key = fileRecord.copies.files.key;
140
+ const params = {
141
+ Bucket: this.s3Bucket,
142
+ Key: key,
143
+ Expires: 60 * 5,
144
+ };
145
+ try {
146
+ return this.s3.getSignedUrl('getObject', params);
147
+ }
148
+ catch (err) {
149
+ throw new Error(`生成 S3 签名 URL 失败: ${err.message}`);
150
+ }
151
+ }
152
+ else if (this.cfsStore === 'local') {
153
+ return (this.rootUrl +
154
+ '/api/v6/files/' +
155
+ collectionName +
156
+ '/' +
157
+ fileId +
158
+ '/' +
159
+ fileRecord.original.name);
160
+ }
161
+ return null;
162
+ }
163
+ async downloadFileStream(collectionName, fileId) {
164
+ const fileRecord = await this.mongodbService.findOne(collectionName, {
165
+ _id: fileId,
166
+ });
167
+ if (!fileRecord) {
168
+ throw new Error('未找到指定的文件记录');
169
+ }
170
+ if (this.cfsStore === 'local') {
171
+ try {
172
+ const key = fileRecord.copies.files.key;
173
+ const collectionFolderName = this.getCollectionFolderName(collectionName);
174
+ const fileUrl = path.join(this.storageDir, 'files', collectionFolderName, key);
175
+ if (!(await fs.pathExists(fileUrl))) {
176
+ throw new Error('文件不存在');
177
+ }
178
+ return fs.createReadStream(fileUrl);
179
+ }
180
+ catch (err) {
181
+ throw new Error(`文件下载失败: ${err.message}`);
182
+ }
183
+ }
184
+ else if (this.cfsStore === 'S3') {
185
+ const key = fileRecord.copies.files.key;
186
+ const params = {
187
+ Bucket: this.s3Bucket,
188
+ Key: key,
189
+ Expires: 60 * 60,
190
+ };
191
+ try {
192
+ const s3Object = this.s3.getObject(params);
193
+ return s3Object.createReadStream();
194
+ }
195
+ catch (err) {
196
+ throw new Error(`文件下载失败: ${err.message}`);
197
+ }
198
+ }
199
+ else {
200
+ throw new Error('未知的文件存储类型');
201
+ }
202
+ }
203
+ };
204
+ exports.FilesService = FilesService;
205
+ exports.FilesService = FilesService = FilesService_1 = __decorate([
206
+ (0, common_1.Injectable)(),
207
+ __metadata("design:paramtypes", [config_1.ConfigService,
208
+ mongodb_service_1.MongodbService])
209
+ ], FilesService);
210
+ //# sourceMappingURL=files.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.service.js","sourceRoot":"","sources":["../../src/files/files.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const testing_1 = require("@nestjs/testing");
4
+ const files_service_1 = require("./files.service");
5
+ describe('FilesService', () => {
6
+ let service;
7
+ beforeEach(async () => {
8
+ const module = await testing_1.Test.createTestingModule({
9
+ providers: [files_service_1.FilesService],
10
+ }).compile();
11
+ service = module.get(files_service_1.FilesService);
12
+ });
13
+ it('should be defined', () => {
14
+ expect(service).toBeDefined();
15
+ });
16
+ });
17
+ //# sourceMappingURL=files.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.service.spec.js","sourceRoot":"","sources":["../../src/files/files.service.spec.ts"],"names":[],"mappings":";;AAAA,6CAAsD;AACtD,mDAA+C;AAE/C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,OAAqB,CAAC;IAE1B,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,MAAM,GAAkB,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAC3D,SAAS,EAAE,CAAC,4BAAY,CAAC;SAC1B,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,OAAO,GAAG,MAAM,CAAC,GAAG,CAAe,4BAAY,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './files.controller';
2
+ export * from './files.module';
3
+ export * from './files.service';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./files.controller"), exports);
18
+ __exportStar(require("./files.module"), exports);
19
+ __exportStar(require("./files.service"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/files/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,iDAA+B;AAC/B,kDAAgC"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,6 @@
1
+ export * from './config';
1
2
  export * from './auth';
3
+ export * from './config';
4
+ export * from './files';
5
+ export * from './plugin';
2
6
  export * from './mongodb';
package/dist/index.js CHANGED
@@ -14,6 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./config"), exports);
17
18
  __exportStar(require("./auth"), exports);
19
+ __exportStar(require("./config"), exports);
20
+ __exportStar(require("./files"), exports);
21
+ __exportStar(require("./plugin"), exports);
18
22
  __exportStar(require("./mongodb"), exports);
19
23
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,4CAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,yCAAuB;AACvB,2CAAyB;AACzB,0CAAwB;AACxB,2CAAyB;AACzB,4CAA0B"}
@@ -0,0 +1,3 @@
1
+ export * from './moleculer.service';
2
+ export * from './plugin.module';
3
+ export * from './plugin.service';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./moleculer.service"), exports);
18
+ __exportStar(require("./plugin.module"), exports);
19
+ __exportStar(require("./plugin.service"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,kDAAgC;AAChC,mDAAiC"}
@@ -0,0 +1,11 @@
1
+ import { ConfigService } from '@nestjs/config';
2
+ import { ServiceBroker } from 'moleculer';
3
+ export declare class MoleculerPluginService {
4
+ private configService;
5
+ private readonly broker;
6
+ private readonly logger;
7
+ constructor(configService: ConfigService, broker: ServiceBroker);
8
+ loadServices(): void;
9
+ loadService(plugin: any): void;
10
+ private getPackagePath;
11
+ }
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var MoleculerPluginService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.MoleculerPluginService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const config_1 = require("@nestjs/config");
19
+ const moleculer_1 = require("moleculer");
20
+ const fs = require("fs");
21
+ const path = require("path");
22
+ const moleculer_2 = require("@builder6/moleculer");
23
+ let MoleculerPluginService = MoleculerPluginService_1 = class MoleculerPluginService {
24
+ constructor(configService, broker) {
25
+ this.configService = configService;
26
+ this.broker = broker;
27
+ this.logger = new common_1.Logger(MoleculerPluginService_1.name);
28
+ const transporter = this.configService.get('transporter');
29
+ if (!transporter) {
30
+ console.error('B6_TRANSPORTER env is required.');
31
+ return;
32
+ }
33
+ this.loadServices();
34
+ }
35
+ loadServices() {
36
+ const plugins = this.configService.get('plugin.services');
37
+ if (plugins) {
38
+ for (const plugin of plugins.split(',')) {
39
+ this.loadService(plugin);
40
+ }
41
+ }
42
+ }
43
+ loadService(plugin) {
44
+ try {
45
+ const match = plugin.match(/^(.*?)(?:@([\d.]+))?$/);
46
+ if (!match) {
47
+ this.logger.warn(`服务插件格式无效: ${plugin}`);
48
+ return;
49
+ }
50
+ const [, packageName] = match;
51
+ this.logger.log(`加载服务插件: 名称:${packageName}`);
52
+ if (!this.getPackagePath(packageName)) {
53
+ this.logger.error(`服务插件 ${packageName} 未安装,请先安装`);
54
+ return;
55
+ }
56
+ const packageServicePath = path.resolve(this.getPackagePath(packageName), './package.service.js');
57
+ if (!fs.existsSync(packageServicePath)) {
58
+ this.logger.error(`插件 ${packageName} 缺少文件: ${packageServicePath}`);
59
+ return;
60
+ }
61
+ const serviceModule = require(packageServicePath);
62
+ const serviceSchema = serviceModule.default
63
+ ? serviceModule.default
64
+ : serviceModule;
65
+ if (serviceSchema) {
66
+ const service = this.broker.createService(serviceSchema);
67
+ this.logger.log(`插件服务已加载: ${packageName}`);
68
+ }
69
+ }
70
+ catch (err) {
71
+ this.logger.error(`处理插件 ${plugin} 时出错: ${err.message}`);
72
+ }
73
+ }
74
+ getPackagePath(packageName) {
75
+ try {
76
+ return path.dirname(require.resolve(`${packageName}/package.json`, {
77
+ paths: [
78
+ path.join(process.env.B6_PLUGIN_DIR, 'node_modules'),
79
+ ...module.paths,
80
+ ],
81
+ }));
82
+ }
83
+ catch (e) {
84
+ console.error(e);
85
+ return null;
86
+ }
87
+ }
88
+ };
89
+ exports.MoleculerPluginService = MoleculerPluginService;
90
+ exports.MoleculerPluginService = MoleculerPluginService = MoleculerPluginService_1 = __decorate([
91
+ (0, common_1.Injectable)(),
92
+ __param(1, (0, moleculer_2.InjectBroker)()),
93
+ __metadata("design:paramtypes", [config_1.ConfigService,
94
+ moleculer_1.ServiceBroker])
95
+ ], MoleculerPluginService);
96
+ //# sourceMappingURL=moleculer.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moleculer.service.js","sourceRoot":"","sources":["../../src/plugin/moleculer.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { DynamicModule, Logger } from '@nestjs/common';
2
+ export declare class PluginModule {
3
+ static readonly logger: Logger;
4
+ static plugins: Plugin[];
5
+ private readonly logger;
6
+ private static npmrc;
7
+ private static install_packages;
8
+ static state: any;
9
+ static targetState: any;
10
+ static forRootAsync(): DynamicModule;
11
+ static loadPlugin(packageName: string): any;
12
+ static getPackagePath(packageName: string): string;
13
+ static getPluginDir(): string;
14
+ static getInstallPackages(): {};
15
+ static updateNpmrc(): Promise<void>;
16
+ static installPackages(): Promise<void>;
17
+ }
18
+ interface Plugin {
19
+ name: string;
20
+ module: DynamicModule;
21
+ }
22
+ export {};