@nocobase/plugin-file-manager 0.9.4-alpha.1 → 0.10.0-alpha.2

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/lib/client/FileStorage.d.ts +2 -1
  2. package/lib/client/FileStorage.js +6 -6
  3. package/lib/client/StorageOptions.d.ts +1 -1
  4. package/lib/client/StorageOptions.js +18 -21
  5. package/lib/client/index.d.ts +2 -2
  6. package/lib/client/index.js +12 -7
  7. package/lib/client/initializers/UploadActionInitializer.d.ts +2 -1
  8. package/lib/client/initializers/UploadActionInitializer.js +1 -1
  9. package/lib/client/interfaces/attachment.d.ts +2 -0
  10. package/lib/client/interfaces/attachment.js +139 -0
  11. package/lib/client/locale/en-US.d.ts +22 -0
  12. package/lib/client/locale/en-US.js +28 -0
  13. package/lib/client/locale/index.js +0 -10
  14. package/lib/client/locale/ja-JP.d.ts +19 -0
  15. package/lib/client/locale/ja-JP.js +25 -0
  16. package/lib/client/locale/ru-RU.d.ts +19 -0
  17. package/lib/client/locale/ru-RU.js +25 -0
  18. package/lib/client/locale/tr-TR.d.ts +18 -0
  19. package/lib/client/locale/tr-TR.js +24 -0
  20. package/lib/client/locale/zh-CN.d.ts +25 -3
  21. package/lib/client/locale/zh-CN.js +25 -4
  22. package/lib/client/schemas/storage.js +41 -18
  23. package/lib/client/templates/file.js +1 -1
  24. package/lib/server/actions/attachments.d.ts +3 -0
  25. package/lib/server/actions/{upload.js → attachments.js} +140 -141
  26. package/lib/server/actions/index.d.ts +3 -0
  27. package/lib/server/actions/index.js +22 -0
  28. package/lib/server/collections/attachments.js +1 -0
  29. package/lib/server/collections/storages.js +3 -2
  30. package/lib/server/constants.d.ts +1 -1
  31. package/lib/server/constants.js +3 -3
  32. package/lib/server/rules/mimetype.d.ts +1 -1
  33. package/lib/server/rules/mimetype.js +1 -1
  34. package/lib/server/server.d.ts +1 -0
  35. package/lib/server/server.js +18 -6
  36. package/lib/server/storages/ali-oss.d.ts +2 -0
  37. package/lib/server/storages/ali-oss.js +12 -0
  38. package/lib/server/storages/index.d.ts +29 -4
  39. package/lib/server/storages/index.js +17 -7
  40. package/lib/server/storages/local.d.ts +2 -0
  41. package/lib/server/storages/local.js +34 -5
  42. package/lib/server/storages/s3.d.ts +2 -0
  43. package/lib/server/storages/s3.js +21 -0
  44. package/lib/server/storages/tx-cos.d.ts +2 -0
  45. package/lib/server/storages/tx-cos.js +25 -0
  46. package/package.json +10 -7
  47. package/lib/client/FileStorageShortcut.d.ts +0 -1
  48. package/lib/client/FileStorageShortcut.js +0 -91
  49. package/lib/server/actions/upload.d.ts +0 -4
@@ -12,6 +12,6 @@ function _mimeMatch() {
12
12
  return data;
13
13
  }
14
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
- function _default(file, options = '*', ctx) {
15
+ function _default(file, options = '*') {
16
16
  return options.toString().split(',').some((0, _mimeMatch().default)(file.mimetype));
17
17
  }
@@ -1,4 +1,5 @@
1
1
  import { Plugin } from '@nocobase/server';
2
+ export { default as storageTypes } from './storages';
2
3
  export default class PluginFileManager extends Plugin {
3
4
  storageType(): string;
4
5
  install(): Promise<void>;
@@ -4,6 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+ Object.defineProperty(exports, "storageTypes", {
8
+ enumerable: true,
9
+ get: function get() {
10
+ return _storages.default;
11
+ }
12
+ });
7
13
  function _server() {
8
14
  const data = require("@nocobase/server");
9
15
  _server = function _server() {
@@ -18,9 +24,12 @@ function _path() {
18
24
  };
19
25
  return data;
20
26
  }
21
- var _upload = require("./actions/upload");
27
+ var _actions = _interopRequireDefault(require("./actions"));
22
28
  var _constants = require("./constants");
23
- var _storages = require("./storages");
29
+ var _storages = _interopRequireWildcard(require("./storages"));
30
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
32
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
33
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
25
34
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
26
35
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -30,7 +39,8 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
30
39
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
31
40
  class PluginFileManager extends _server().Plugin {
32
41
  storageType() {
33
- return process.env.DEFAULT_STORAGE_TYPE;
42
+ var _process$env$DEFAULT_;
43
+ return (_process$env$DEFAULT_ = process.env.DEFAULT_STORAGE_TYPE) !== null && _process$env$DEFAULT_ !== void 0 ? _process$env$DEFAULT_ : 'local';
34
44
  }
35
45
  install() {
36
46
  var _this = this;
@@ -62,10 +72,12 @@ class PluginFileManager extends _server().Plugin {
62
72
  name: `pm.${_this2.name}.storages`,
63
73
  actions: ['storages:*']
64
74
  });
75
+ (0, _actions.default)(_this2);
65
76
  _this2.app.acl.allow('attachments', 'upload', 'loggedIn');
66
- _this2.app.resourcer.use(_upload.middleware);
67
- _this2.app.resourcer.use(_upload.createAction);
68
- _this2.app.resourcer.registerActionHandler('upload', _upload.uploadAction);
77
+ _this2.app.acl.allow('attachments', 'create', 'loggedIn');
78
+ // this.app.resourcer.use(uploadMiddleware);
79
+ // this.app.resourcer.use(createAction);
80
+ // this.app.resourcer.registerActionHandler('upload', uploadAction);
69
81
  if (process.env.APP_ENV !== 'production') {
70
82
  yield (0, _storages.getStorageConfig)(_constants.STORAGE_TYPE_LOCAL).middleware(_this2.app);
71
83
  }
@@ -1,3 +1,4 @@
1
+ import { AttachmentModel } from '.';
1
2
  declare const _default: {
2
3
  make(storage: any): any;
3
4
  defaults(): {
@@ -12,5 +13,6 @@ declare const _default: {
12
13
  bucket: string;
13
14
  };
14
15
  };
16
+ delete(storage: any, records: AttachmentModel[]): Promise<[number, AttachmentModel[]]>;
15
17
  };
16
18
  export default _default;
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _constants = require("../constants");
8
8
  var _utils = require("../utils");
9
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
10
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
9
11
  var _default = {
10
12
  make(storage) {
11
13
  const createAliOssStorage = require('multer-aliyun-oss');
@@ -27,6 +29,16 @@ var _default = {
27
29
  bucket: process.env.ALI_OSS_BUCKET
28
30
  }
29
31
  };
32
+ },
33
+ delete(storage, records) {
34
+ var _this = this;
35
+ return _asyncToGenerator(function* () {
36
+ const _this$make = _this.make(storage),
37
+ client = _this$make.client;
38
+ const _yield$client$deleteM = yield client.deleteMulti(records.map(record => `${record.path}/${record.filename}`)),
39
+ deleted = _yield$client$deleteM.deleted;
40
+ return [deleted.length, records.filter(record => !deleted.find(item => item.Key === `${record.path}/${record.filename}`))];
41
+ })();
30
42
  }
31
43
  };
32
44
  exports.default = _default;
@@ -1,8 +1,33 @@
1
+ import { StorageEngine } from 'multer';
2
+ import Application from '@nocobase/server';
3
+ import { Registry } from '@nocobase/utils';
4
+ export interface StorageModel {
5
+ title: string;
6
+ type: string;
7
+ name: string;
8
+ baseUrl: string;
9
+ options: {
10
+ [key: string]: string;
11
+ };
12
+ deleteFileOnDestroy?: boolean;
13
+ }
14
+ export interface AttachmentModel {
15
+ title: string;
16
+ filename: string;
17
+ path: string;
18
+ }
1
19
  export interface IStorage {
2
20
  filenameKey?: string;
3
- middleware?: Function;
4
- getFileData?: Function;
5
- make: Function;
6
- defaults: Function;
21
+ middleware?(app: Application): void;
22
+ getFileData?(file: {
23
+ [key: string]: any;
24
+ }): {
25
+ [key: string]: any;
26
+ };
27
+ make(storage: StorageModel): StorageEngine;
28
+ defaults(): StorageModel;
29
+ delete(storage: StorageModel, records: AttachmentModel[]): Promise<[number, AttachmentModel[]]>;
7
30
  }
31
+ declare const storageTypes: Registry<IStorage>;
8
32
  export declare function getStorageConfig(key: string): IStorage;
33
+ export default storageTypes;
@@ -3,18 +3,28 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.default = void 0;
6
7
  exports.getStorageConfig = getStorageConfig;
8
+ function _utils() {
9
+ const data = require("@nocobase/utils");
10
+ _utils = function _utils() {
11
+ return data;
12
+ };
13
+ return data;
14
+ }
7
15
  var _local = _interopRequireDefault(require("./local"));
8
16
  var _aliOss = _interopRequireDefault(require("./ali-oss"));
9
17
  var _s = _interopRequireDefault(require("./s3"));
10
18
  var _txCos = _interopRequireDefault(require("./tx-cos"));
11
19
  var _constants = require("../constants");
12
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
- const map = new Map();
14
- map.set(_constants.STORAGE_TYPE_LOCAL, _local.default);
15
- map.set(_constants.STORAGE_TYPE_ALI_OSS, _aliOss.default);
16
- map.set(_constants.STORAGE_TYPE_S3, _s.default);
17
- map.set(_constants.STORAGE_TYPE_TX_COS, _txCos.default);
21
+ const storageTypes = new (_utils().Registry)();
22
+ storageTypes.register(_constants.STORAGE_TYPE_LOCAL, _local.default);
23
+ storageTypes.register(_constants.STORAGE_TYPE_ALI_OSS, _aliOss.default);
24
+ storageTypes.register(_constants.STORAGE_TYPE_S3, _s.default);
25
+ storageTypes.register(_constants.STORAGE_TYPE_TX_COS, _txCos.default);
18
26
  function getStorageConfig(key) {
19
- return map.get(key);
20
- }
27
+ return storageTypes.get(key);
28
+ }
29
+ var _default = storageTypes;
30
+ exports.default = _default;
@@ -1,5 +1,6 @@
1
1
  import Application from '@nocobase/server';
2
2
  import multer from 'multer';
3
+ import { AttachmentModel } from '.';
3
4
  declare function middleware(app: Application): Promise<void>;
4
5
  declare const _default: {
5
6
  middleware: typeof middleware;
@@ -13,5 +14,6 @@ declare const _default: {
13
14
  documentRoot: string;
14
15
  };
15
16
  };
17
+ delete(storage: any, records: AttachmentModel[]): Promise<[number, AttachmentModel[]]>;
16
18
  };
17
19
  export default _default;
@@ -4,6 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+ function _promises() {
8
+ const data = _interopRequireDefault(require("fs/promises"));
9
+ _promises = function _promises() {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
7
14
  function _koaStatic() {
8
15
  const data = _interopRequireDefault(require("koa-static"));
9
16
  _koaStatic = function _koaStatic() {
@@ -102,7 +109,7 @@ function createLocalServerUpdateHook(app, storages) {
102
109
  function getDocumentRoot(storage) {
103
110
  const _ref2 = storage.options || {},
104
111
  _ref2$documentRoot = _ref2.documentRoot,
105
- documentRoot = _ref2$documentRoot === void 0 ? 'uploads' : _ref2$documentRoot;
112
+ documentRoot = _ref2$documentRoot === void 0 ? process.env.LOCAL_STORAGE_DEST || 'storage/uploads' : _ref2$documentRoot;
106
113
  // TODO(feature): 后面考虑以字符串模板的方式使用,可注入 req/action 相关变量,以便于区分文件夹
107
114
  return _path().default.resolve(_path().default.isAbsolute(documentRoot) ? documentRoot : _path().default.join(process.cwd(), documentRoot));
108
115
  }
@@ -120,7 +127,7 @@ function _middleware() {
120
127
  yield refresh(app, storages);
121
128
  }));
122
129
  app.use( /*#__PURE__*/function () {
123
- var _ref4 = _asyncToGenerator(function* (ctx, next) {
130
+ var _ref5 = _asyncToGenerator(function* (ctx, next) {
124
131
  var _iterator2 = _createForOfIteratorHelper(storages.values()),
125
132
  _step2;
126
133
  try {
@@ -167,7 +174,7 @@ function _middleware() {
167
174
  yield next();
168
175
  });
169
176
  return function (_x7, _x8) {
170
- return _ref4.apply(this, arguments);
177
+ return _ref5.apply(this, arguments);
171
178
  };
172
179
  }());
173
180
  });
@@ -189,9 +196,9 @@ var _default = {
189
196
  LOCAL_STORAGE_DEST = _process$env.LOCAL_STORAGE_DEST,
190
197
  LOCAL_STORAGE_BASE_URL = _process$env.LOCAL_STORAGE_BASE_URL,
191
198
  APP_PORT = _process$env.APP_PORT;
192
- const documentRoot = LOCAL_STORAGE_DEST || 'uploads';
199
+ const documentRoot = LOCAL_STORAGE_DEST || 'storage/uploads';
193
200
  return {
194
- title: '本地存储',
201
+ title: 'Local storage',
195
202
  type: _constants.STORAGE_TYPE_LOCAL,
196
203
  name: `local`,
197
204
  baseUrl: LOCAL_STORAGE_BASE_URL || `http://localhost:${APP_PORT || '13000'}/${documentRoot}`,
@@ -199,6 +206,28 @@ var _default = {
199
206
  documentRoot
200
207
  }
201
208
  };
209
+ },
210
+ delete(storage, records) {
211
+ return _asyncToGenerator(function* () {
212
+ const documentRoot = getDocumentRoot(storage);
213
+ let count = 0;
214
+ const undeleted = [];
215
+ yield records.reduce((promise, record) => promise.then( /*#__PURE__*/_asyncToGenerator(function* () {
216
+ try {
217
+ yield _promises().default.unlink(_path().default.join(documentRoot, record.path, record.filename));
218
+ count += 1;
219
+ } catch (ex) {
220
+ if (ex.code === 'ENOENT') {
221
+ console.warn(ex.message);
222
+ count += 1;
223
+ } else {
224
+ console.error(ex);
225
+ undeleted.push(record);
226
+ }
227
+ }
228
+ })), Promise.resolve());
229
+ return [count, undeleted];
230
+ })();
202
231
  }
203
232
  };
204
233
  exports.default = _default;
@@ -1,3 +1,4 @@
1
+ import { AttachmentModel } from '.';
1
2
  declare const _default: {
2
3
  filenameKey: string;
3
4
  make(storage: any): any;
@@ -13,5 +14,6 @@ declare const _default: {
13
14
  bucket: string;
14
15
  };
15
16
  };
17
+ delete(storage: any, records: AttachmentModel[]): Promise<[number, AttachmentModel[]]>;
16
18
  };
17
19
  export default _default;
@@ -7,6 +7,8 @@ exports.default = void 0;
7
7
  var _constants = require("../constants");
8
8
  var _utils = require("../utils");
9
9
  const _excluded = ["accessKeyId", "secretAccessKey", "bucket", "acl"];
10
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
11
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
10
12
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
11
13
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12
14
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -60,6 +62,25 @@ var _default = {
60
62
  bucket: process.env.AWS_S3_BUCKET
61
63
  }
62
64
  };
65
+ },
66
+ delete(storage, records) {
67
+ var _this = this;
68
+ return _asyncToGenerator(function* () {
69
+ const _require2 = require('@aws-sdk/client-s3'),
70
+ DeleteObjectsCommand = _require2.DeleteObjectsCommand;
71
+ const _this$make = _this.make(storage),
72
+ s3 = _this$make.s3;
73
+ const _yield$s3$send = yield s3.send(new DeleteObjectsCommand({
74
+ Bucket: storage.options.bucket,
75
+ Delete: {
76
+ Objects: records.map(record => ({
77
+ Key: `${record.path}/${record.filename}`
78
+ }))
79
+ }
80
+ })),
81
+ Deleted = _yield$s3$send.Deleted;
82
+ return [Deleted.length, records.filter(record => !Deleted.find(item => item.Key === `${record.path}/${record.filename}`))];
83
+ })();
63
84
  }
64
85
  };
65
86
  exports.default = _default;
@@ -1,3 +1,4 @@
1
+ import { AttachmentModel } from '.';
1
2
  declare const _default: {
2
3
  filenameKey: string;
3
4
  make(storage: any): any;
@@ -13,5 +14,6 @@ declare const _default: {
13
14
  Bucket: string;
14
15
  };
15
16
  };
17
+ delete(storage: any, records: AttachmentModel[]): Promise<[number, AttachmentModel[]]>;
16
18
  };
17
19
  export default _default;
@@ -4,8 +4,17 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+ function _util() {
8
+ const data = require("util");
9
+ _util = function _util() {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
7
14
  var _constants = require("../constants");
8
15
  var _utils = require("../utils");
16
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
17
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
9
18
  var _default = {
10
19
  filenameKey: 'url',
11
20
  make(storage) {
@@ -28,6 +37,22 @@ var _default = {
28
37
  Bucket: process.env.TX_COS_BUCKET
29
38
  }
30
39
  };
40
+ },
41
+ delete(storage, records) {
42
+ var _this = this;
43
+ return _asyncToGenerator(function* () {
44
+ const _this$make = _this.make(storage),
45
+ cos = _this$make.cos;
46
+ const _yield$promisify = yield (0, _util().promisify)(cos.deleteMultipleObject)({
47
+ Region: storage.options.Region,
48
+ Bucket: storage.options.Bucket,
49
+ Objects: records.map(record => ({
50
+ Key: `${record.path}/${record.filename}`
51
+ }))
52
+ }),
53
+ Deleted = _yield$promisify.Deleted;
54
+ return [Deleted.length, records.filter(record => !Deleted.find(item => item.Key === `${record.path}/${record.filename}`))];
55
+ })();
31
56
  }
32
57
  };
33
58
  exports.default = _default;
package/package.json CHANGED
@@ -1,16 +1,19 @@
1
1
  {
2
2
  "name": "@nocobase/plugin-file-manager",
3
- "version": "0.9.4-alpha.1",
4
- "description": "",
3
+ "version": "0.10.0-alpha.2",
4
+ "displayName": "file manager",
5
+ "displayName.zh-CN": "文件管理",
6
+ "description": "file management plugin.",
7
+ "description.zh-CN": "文件管理。",
5
8
  "license": "AGPL-3.0",
6
9
  "main": "./lib/index.js",
7
10
  "types": "./lib/index.d.ts",
8
11
  "dependencies": {
9
12
  "@aws-sdk/client-s3": "^3.245.0",
10
13
  "@koa/multer": "^3.0.0",
11
- "@nocobase/actions": "0.9.4-alpha.1",
12
- "@nocobase/client": "0.9.4-alpha.1",
13
- "@nocobase/server": "0.9.4-alpha.1",
14
+ "@nocobase/actions": "0.10.0-alpha.2",
15
+ "@nocobase/client": "0.10.0-alpha.2",
16
+ "@nocobase/server": "0.10.0-alpha.2",
14
17
  "cos-nodejs-sdk-v5": "^2.11.14",
15
18
  "koa-static": "^5.0.0",
16
19
  "mime-match": "^1.0.2",
@@ -21,9 +24,9 @@
21
24
  "multer-s3": "^3.0.1"
22
25
  },
23
26
  "devDependencies": {
24
- "@nocobase/test": "0.9.4-alpha.1",
27
+ "@nocobase/test": "0.10.0-alpha.2",
25
28
  "@types/koa-multer": "^1.0.1",
26
29
  "@types/multer": "^1.4.5"
27
30
  },
28
- "gitHead": "0b4936be557be918dbdf8196dadcbc7eb395906d"
31
+ "gitHead": "85028ae1733fcbd46ecd5d291dacbdc175f7f073"
29
32
  }
@@ -1 +0,0 @@
1
- export declare const FileStorageShortcut: () => JSX.Element;
@@ -1,91 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.FileStorageShortcut = void 0;
7
- function _icons() {
8
- const data = require("@ant-design/icons");
9
- _icons = function _icons() {
10
- return data;
11
- };
12
- return data;
13
- }
14
- function _shared() {
15
- const data = require("@formily/shared");
16
- _shared = function _shared() {
17
- return data;
18
- };
19
- return data;
20
- }
21
- function _client() {
22
- const data = require("@nocobase/client");
23
- _client = function _client() {
24
- return data;
25
- };
26
- return data;
27
- }
28
- function _react() {
29
- const data = _interopRequireWildcard(require("react"));
30
- _react = function _react() {
31
- return data;
32
- };
33
- return data;
34
- }
35
- function _reactI18next() {
36
- const data = require("react-i18next");
37
- _reactI18next = function _reactI18next() {
38
- return data;
39
- };
40
- return data;
41
- }
42
- var _storage = require("./schemas/storage");
43
- var _StorageOptions = require("./StorageOptions");
44
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
45
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
46
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
47
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
48
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
49
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
50
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
51
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
52
- const schema = {
53
- type: 'object',
54
- properties: {
55
- [(0, _shared().uid)()]: {
56
- 'x-component': 'Action.Drawer',
57
- type: 'void',
58
- title: '{{t("File storages")}}',
59
- properties: {
60
- storageSchema: _storage.storageSchema
61
- }
62
- }
63
- }
64
- };
65
- const FileStorageShortcut = () => {
66
- const _useState = (0, _react().useState)(false),
67
- _useState2 = _slicedToArray(_useState, 2),
68
- visible = _useState2[0],
69
- setVisible = _useState2[1];
70
- const _useTranslation = (0, _reactI18next().useTranslation)(),
71
- t = _useTranslation.t;
72
- return _react().default.createElement(_client().ActionContext.Provider, {
73
- value: {
74
- visible,
75
- setVisible
76
- }
77
- }, _react().default.createElement(_client().PluginManager.Toolbar.Item, {
78
- eventKey: 'FileStorage',
79
- onClick: () => {
80
- setVisible(true);
81
- },
82
- icon: _react().default.createElement(_icons().FileOutlined, null),
83
- title: t('File storages')
84
- }), _react().default.createElement(_client().SchemaComponent, {
85
- components: {
86
- StorageOptions: _StorageOptions.StorageOptions
87
- },
88
- schema: schema
89
- }));
90
- };
91
- exports.FileStorageShortcut = FileStorageShortcut;
@@ -1,4 +0,0 @@
1
- import { Context, Next } from '@nocobase/actions';
2
- export declare function middleware(ctx: Context, next: Next): Promise<any>;
3
- export declare function createAction(ctx: Context, next: Next): Promise<any>;
4
- export declare function uploadAction(ctx: Context, next: Next): Promise<never>;