@nocobase/plugin-file-manager 0.5.0-alpha.37 → 0.7.0-alpha.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 (85) hide show
  1. package/LICENSE +201 -21
  2. package/esm/actions/upload.d.ts +3 -0
  3. package/esm/actions/upload.js +143 -0
  4. package/esm/actions/upload.js.map +1 -0
  5. package/esm/collections/attachments.d.ts +3 -0
  6. package/esm/collections/attachments.js +59 -0
  7. package/esm/collections/attachments.js.map +1 -0
  8. package/esm/collections/storages.d.ts +3 -0
  9. package/esm/collections/storages.js +60 -0
  10. package/esm/collections/storages.js.map +1 -0
  11. package/esm/constants.d.ts +6 -0
  12. package/esm/constants.js +7 -0
  13. package/esm/constants.js.map +1 -0
  14. package/esm/index.d.ts +2 -0
  15. package/esm/index.js +3 -0
  16. package/esm/index.js.map +1 -0
  17. package/esm/rules/index.d.ts +1 -0
  18. package/esm/rules/index.js +3 -0
  19. package/esm/rules/index.js.map +1 -0
  20. package/esm/rules/mimetype.d.ts +1 -0
  21. package/esm/rules/mimetype.js +5 -0
  22. package/esm/rules/mimetype.js.map +1 -0
  23. package/esm/server.d.ts +7 -0
  24. package/esm/server.js +48 -0
  25. package/esm/server.js.map +1 -0
  26. package/esm/storages/ali-oss.d.ts +16 -0
  27. package/esm/storages/ali-oss.js +26 -0
  28. package/esm/storages/ali-oss.js.map +1 -0
  29. package/esm/storages/index.d.ts +8 -0
  30. package/esm/storages/index.js +12 -0
  31. package/esm/storages/index.js.map +1 -0
  32. package/esm/storages/local.d.ts +14 -0
  33. package/esm/storages/local.js +127 -0
  34. package/esm/storages/local.js.map +1 -0
  35. package/esm/storages/s3.d.ts +17 -0
  36. package/esm/storages/s3.js +53 -0
  37. package/esm/storages/s3.js.map +1 -0
  38. package/esm/utils.d.ts +2 -0
  39. package/esm/utils.js +16 -0
  40. package/esm/utils.js.map +1 -0
  41. package/lib/actions/upload.js +145 -228
  42. package/lib/actions/upload.js.map +1 -1
  43. package/lib/collections/attachments.d.ts +2 -2
  44. package/lib/collections/attachments.js +58 -56
  45. package/lib/collections/attachments.js.map +1 -1
  46. package/lib/collections/storages.d.ts +2 -2
  47. package/lib/collections/storages.js +59 -62
  48. package/lib/collections/storages.js.map +1 -1
  49. package/lib/constants.js +2 -17
  50. package/lib/constants.js.map +1 -1
  51. package/lib/index.js +14 -47
  52. package/lib/index.js.map +1 -1
  53. package/lib/rules/index.js +6 -30
  54. package/lib/rules/index.js.map +1 -1
  55. package/lib/rules/mimetype.js +5 -26
  56. package/lib/rules/mimetype.js.map +1 -1
  57. package/lib/server.d.ts +7 -3
  58. package/lib/server.js +46 -95
  59. package/lib/server.js.map +1 -1
  60. package/lib/storages/ali-oss.js +23 -44
  61. package/lib/storages/ali-oss.js.map +1 -1
  62. package/lib/storages/index.js +5 -31
  63. package/lib/storages/index.js.map +1 -1
  64. package/lib/storages/local.d.ts +2 -1
  65. package/lib/storages/local.js +110 -198
  66. package/lib/storages/local.js.map +1 -1
  67. package/lib/storages/s3.js +49 -84
  68. package/lib/storages/s3.js.map +1 -1
  69. package/lib/utils.js +14 -39
  70. package/lib/utils.js.map +1 -1
  71. package/package.json +17 -3
  72. package/tsconfig.build.json +9 -0
  73. package/lib/actions/upload.d.ts.map +0 -1
  74. package/lib/collections/attachments.d.ts.map +0 -1
  75. package/lib/collections/storages.d.ts.map +0 -1
  76. package/lib/constants.d.ts.map +0 -1
  77. package/lib/index.d.ts.map +0 -1
  78. package/lib/rules/index.d.ts.map +0 -1
  79. package/lib/rules/mimetype.d.ts.map +0 -1
  80. package/lib/server.d.ts.map +0 -1
  81. package/lib/storages/ali-oss.d.ts.map +0 -1
  82. package/lib/storages/index.d.ts.map +0 -1
  83. package/lib/storages/local.d.ts.map +0 -1
  84. package/lib/storages/s3.d.ts.map +0 -1
  85. package/lib/utils.d.ts.map +0 -1
@@ -1,45 +1,19 @@
1
1
  "use strict";
2
-
3
- function _react() {
4
- const data = _interopRequireDefault(require("react"));
5
-
6
- _react = function _react() {
7
- return data;
8
- };
9
-
10
- return data;
11
- }
12
-
13
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
-
15
- var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
16
- return mod && mod.__esModule ? mod : {
17
- "default": mod
18
- };
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
19
4
  };
20
-
21
- Object.defineProperty(exports, "__esModule", {
22
- value: true
23
- });
5
+ Object.defineProperty(exports, "__esModule", { value: true });
24
6
  exports.getStorageConfig = void 0;
25
-
26
7
  const local_1 = __importDefault(require("./local"));
27
-
28
8
  const ali_oss_1 = __importDefault(require("./ali-oss"));
29
-
30
9
  const s3_1 = __importDefault(require("./s3"));
31
-
32
10
  const constants_1 = require("../constants");
33
-
34
11
  const map = new Map();
35
12
  map.set(constants_1.STORAGE_TYPE_LOCAL, local_1.default);
36
13
  map.set(constants_1.STORAGE_TYPE_ALI_OSS, ali_oss_1.default);
37
14
  map.set(constants_1.STORAGE_TYPE_S3, s3_1.default);
38
-
39
15
  function getStorageConfig(key) {
40
- return map.get(key);
16
+ return map.get(key);
41
17
  }
42
-
43
18
  exports.getStorageConfig = getStorageConfig;
44
- ;
45
- //# sourceMappingURL=index.js.map
19
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["storages/index.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,wDAA4B;AAC5B,8CAAsB;AAEtB,4CAIsB;AAUtB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;AACxC,GAAG,CAAC,GAAG,CAAC,8BAAkB,EAAE,eAAK,CAAC,CAAC;AACnC,GAAG,CAAC,GAAG,CAAC,gCAAoB,EAAE,iBAAG,CAAC,CAAC;AACnC,GAAG,CAAC,GAAG,CAAC,2BAAe,EAAE,YAAE,CAAC,CAAC;AAG7B,SAAgB,gBAAgB,CAAC,GAAW;IAC1C,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAFD,4CAEC;AAAA,CAAC","file":"index.js","sourcesContent":["import local from './local';\nimport oss from './ali-oss';\nimport s3 from './s3';\n\nimport {\n STORAGE_TYPE_LOCAL,\n STORAGE_TYPE_ALI_OSS,\n STORAGE_TYPE_S3\n} from '../constants';\n\nexport interface IStorage {\n filenameKey?: string;\n middleware?: Function;\n getFileData?: Function;\n make: Function;\n defaults: Function;\n}\n\nconst map = new Map<string, IStorage>();\nmap.set(STORAGE_TYPE_LOCAL, local);\nmap.set(STORAGE_TYPE_ALI_OSS, oss);\nmap.set(STORAGE_TYPE_S3, s3);\n\n\nexport function getStorageConfig(key: string): IStorage {\n return map.get(key);\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storages/index.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,wDAA4B;AAC5B,8CAAsB;AAEtB,4CAAyF;AAUzF,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;AACxC,GAAG,CAAC,GAAG,CAAC,8BAAkB,EAAE,eAAK,CAAC,CAAC;AACnC,GAAG,CAAC,GAAG,CAAC,gCAAoB,EAAE,iBAAG,CAAC,CAAC;AACnC,GAAG,CAAC,GAAG,CAAC,2BAAe,EAAE,YAAE,CAAC,CAAC;AAE7B,SAAgB,gBAAgB,CAAC,GAAW;IAC1C,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAFD,4CAEC","sourcesContent":["import local from './local';\nimport oss from './ali-oss';\nimport s3 from './s3';\n\nimport { STORAGE_TYPE_LOCAL, STORAGE_TYPE_ALI_OSS, STORAGE_TYPE_S3 } from '../constants';\n\nexport interface IStorage {\n filenameKey?: string;\n middleware?: Function;\n getFileData?: Function;\n make: Function;\n defaults: Function;\n}\n\nconst map = new Map<string, IStorage>();\nmap.set(STORAGE_TYPE_LOCAL, local);\nmap.set(STORAGE_TYPE_ALI_OSS, oss);\nmap.set(STORAGE_TYPE_S3, s3);\n\nexport function getStorageConfig(key: string): IStorage {\n return map.get(key);\n}\n"]}
@@ -1,5 +1,6 @@
1
+ import Application from '@nocobase/server';
1
2
  import multer from 'multer';
2
- declare function middleware(app: any, options?: any): Promise<void>;
3
+ declare function middleware(app: Application, options?: any): Promise<void>;
3
4
  declare const _default: {
4
5
  middleware: typeof middleware;
5
6
  make(storage: any): multer.StorageEngine;
@@ -1,220 +1,132 @@
1
1
  "use strict";
2
-
3
- function _react() {
4
- const data = _interopRequireDefault(require("react"));
5
-
6
- _react = function _react() {
7
- return data;
8
- };
9
-
10
- return data;
11
- }
12
-
13
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
-
15
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
16
-
17
- 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); }
18
-
19
- 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; }
20
-
21
- var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
22
- function adopt(value) {
23
- return value instanceof P ? value : new P(function (resolve) {
24
- resolve(value);
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
25
9
  });
26
- }
27
-
28
- return new (P || (P = Promise))(function (resolve, reject) {
29
- function fulfilled(value) {
30
- try {
31
- step(generator.next(value));
32
- } catch (e) {
33
- reject(e);
34
- }
35
- }
36
-
37
- function rejected(value) {
38
- try {
39
- step(generator["throw"](value));
40
- } catch (e) {
41
- reject(e);
42
- }
43
- }
44
-
45
- function step(result) {
46
- result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
47
- }
48
-
49
- step((generator = generator.apply(thisArg, _arguments || [])).next());
50
- });
51
10
  };
52
-
53
- var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
54
- return mod && mod.__esModule ? mod : {
55
- "default": mod
56
- };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
57
13
  };
58
-
59
- Object.defineProperty(exports, "__esModule", {
60
- value: true
61
- });
62
-
63
- const path_1 = __importDefault(require("path"));
64
-
65
- const url_1 = require("url");
66
-
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const koa_static_1 = __importDefault(require("koa-static"));
67
16
  const mkdirp_1 = __importDefault(require("mkdirp"));
68
-
69
17
  const multer_1 = __importDefault(require("multer"));
70
-
71
- const koa_static_1 = __importDefault(require("koa-static"));
72
-
18
+ const path_1 = __importDefault(require("path"));
19
+ const url_1 = require("url");
73
20
  const constants_1 = require("../constants");
74
-
75
21
  const utils_1 = require("../utils");
76
-
22
+ // use koa-mount match logic
77
23
  function match(basePath, pathname) {
78
- if (!pathname.startsWith(basePath)) {
79
- return false;
80
- }
81
-
82
- const newPath = pathname.replace(basePath, '') || '/';
83
-
84
- if (basePath.slice(-1) === '/') {
85
- return true;
86
- }
87
-
88
- return newPath[0] === '/';
24
+ if (!pathname.startsWith(basePath)) {
25
+ return false;
26
+ }
27
+ const newPath = pathname.replace(basePath, '') || '/';
28
+ if (basePath.slice(-1) === '/') {
29
+ return true;
30
+ }
31
+ return newPath[0] === '/';
89
32
  }
90
-
91
33
  function update(app, storages) {
92
- return __awaiter(this, void 0, void 0, function* () {
93
- const StorageModel = app.db.getModel('storages');
94
- const items = yield StorageModel.findAll({
95
- where: {
96
- type: constants_1.STORAGE_TYPE_LOCAL
97
- }
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ const Storage = app.db.getCollection('storages');
36
+ const items = yield Storage.repository.find({
37
+ filter: {
38
+ type: constants_1.STORAGE_TYPE_LOCAL,
39
+ },
40
+ });
41
+ const primaryKey = Storage.model.primaryKeyAttribute;
42
+ storages.clear();
43
+ for (const storage of items) {
44
+ storages.set(storage[primaryKey], storage);
45
+ }
98
46
  });
99
- const primaryKey = StorageModel.primaryKeyAttribute;
100
- storages.clear();
101
-
102
- var _iterator = _createForOfIteratorHelper(items),
103
- _step;
104
-
105
- try {
106
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
107
- const storage = _step.value;
108
- storages.set(storage[primaryKey], storage);
109
- }
110
- } catch (err) {
111
- _iterator.e(err);
112
- } finally {
113
- _iterator.f();
114
- }
115
- });
116
47
  }
117
-
118
48
  function createLocalServerUpdateHook(app, storages) {
119
- return function (row) {
120
- return __awaiter(this, void 0, void 0, function* () {
121
- if (row.get('type') === constants_1.STORAGE_TYPE_LOCAL) {
122
- yield update(app, storages);
123
- }
124
- });
125
- };
49
+ return function (row) {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ if (row.get('type') === constants_1.STORAGE_TYPE_LOCAL) {
52
+ yield update(app, storages);
53
+ }
54
+ });
55
+ };
126
56
  }
127
-
128
57
  function getDocumentRoot(storage) {
129
- const _ref = storage.options || {},
130
- _ref$documentRoot = _ref.documentRoot,
131
- documentRoot = _ref$documentRoot === void 0 ? 'uploads' : _ref$documentRoot;
132
-
133
- return path_1.default.resolve(path_1.default.isAbsolute(documentRoot) ? documentRoot : path_1.default.join(process.cwd(), documentRoot));
58
+ const { documentRoot = 'uploads' } = storage.options || {};
59
+ // TODO(feature): 后面考虑以字符串模板的方式使用,可注入 req/action 相关变量,以便于区分文件夹
60
+ return path_1.default.resolve(path_1.default.isAbsolute(documentRoot) ? documentRoot : path_1.default.join(process.cwd(), documentRoot));
134
61
  }
135
-
136
62
  function middleware(app, options) {
137
- return __awaiter(this, void 0, void 0, function* () {
138
- const LOCALHOST = `http://localhost:${process.env.API_PORT}`;
139
- const StorageModel = app.db.getModel('storages');
140
- const storages = new Map();
141
- const localServerUpdateHook = createLocalServerUpdateHook(app, storages);
142
- StorageModel.addHook('afterCreate', localServerUpdateHook);
143
- StorageModel.addHook('afterUpdate', localServerUpdateHook);
144
- StorageModel.addHook('afterDestroy', localServerUpdateHook);
145
- yield update(app, storages);
146
- app.use(function (ctx, next) {
147
- return __awaiter(this, void 0, void 0, function* () {
148
- var _iterator2 = _createForOfIteratorHelper(storages.values()),
149
- _step2;
150
-
151
- try {
152
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
153
- const storage = _step2.value;
154
- const baseUrl = storage.get('baseUrl');
155
- let url;
156
-
157
- try {
158
- url = new url_1.URL(baseUrl);
159
- } catch (e) {
160
- url = {
161
- pathname: baseUrl
162
- };
163
- }
164
-
165
- if (url.origin && url.origin !== LOCALHOST) {
166
- continue;
167
- }
168
-
169
- const basePath = url.pathname.startsWith('/') ? url.pathname : `/${url.pathname}`;
170
-
171
- if (!match(basePath, ctx.path)) {
172
- continue;
173
- }
174
-
175
- return (0, koa_static_1.default)(getDocumentRoot(storage), {
176
- defer: true
177
- })(ctx, () => __awaiter(this, void 0, void 0, function* () {
178
- if (ctx.path.startsWith(basePath)) {
179
- ctx.path = ctx.path.replace(basePath, '');
180
- }
181
-
182
- yield next();
183
- }));
184
- }
185
- } catch (err) {
186
- _iterator2.e(err);
187
- } finally {
188
- _iterator2.f();
189
- }
190
-
191
- yield next();
192
- });
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ const LOCALHOST = `http://localhost:${process.env.SERVER_PORT || '13002'}`;
65
+ const Storage = app.db.getCollection('storages');
66
+ const storages = new Map();
67
+ const localServerUpdateHook = createLocalServerUpdateHook(app, storages);
68
+ Storage.model.addHook('afterCreate', localServerUpdateHook);
69
+ Storage.model.addHook('afterUpdate', localServerUpdateHook);
70
+ Storage.model.addHook('afterDestroy', localServerUpdateHook);
71
+ app.on('beforeStart', () => __awaiter(this, void 0, void 0, function* () {
72
+ yield update(app, storages);
73
+ }));
74
+ app.use(function (ctx, next) {
75
+ var _a;
76
+ return __awaiter(this, void 0, void 0, function* () {
77
+ for (const storage of storages.values()) {
78
+ const baseUrl = storage.get('baseUrl');
79
+ let url;
80
+ try {
81
+ url = new url_1.URL(baseUrl);
82
+ }
83
+ catch (e) {
84
+ url = {
85
+ pathname: baseUrl,
86
+ };
87
+ }
88
+ // 以下情况才认为当前进程所应该提供静态服务
89
+ // 否则都忽略,交给其他 server 来提供(如 nginx/cdn 等)
90
+ if (url.origin && ((_a = storage === null || storage === void 0 ? void 0 : storage.options) === null || _a === void 0 ? void 0 : _a.serve) === false) {
91
+ continue;
92
+ }
93
+ const basePath = url.pathname.startsWith('/') ? url.pathname : `/${url.pathname}`;
94
+ if (!match(basePath, ctx.path)) {
95
+ continue;
96
+ }
97
+ return (0, koa_static_1.default)(getDocumentRoot(storage), {
98
+ // for handle files after any api handlers
99
+ defer: true,
100
+ })(ctx, () => __awaiter(this, void 0, void 0, function* () {
101
+ if (ctx.path.startsWith(basePath)) {
102
+ ctx.path = ctx.path.replace(basePath, '');
103
+ }
104
+ yield next();
105
+ }));
106
+ }
107
+ yield next();
108
+ });
109
+ });
193
110
  });
194
- });
195
111
  }
196
-
197
112
  exports.default = {
198
- middleware,
199
-
200
- make(storage) {
201
- return multer_1.default.diskStorage({
202
- destination: function destination(req, file, cb) {
203
- const destPath = path_1.default.join(getDocumentRoot(storage), storage.path);
204
- (0, mkdirp_1.default)(destPath, err => cb(err, destPath));
205
- },
206
- filename: utils_1.getFilename
207
- });
208
- },
209
-
210
- defaults() {
211
- return {
212
- title: '本地存储',
213
- type: constants_1.STORAGE_TYPE_LOCAL,
214
- name: `local`,
215
- baseUrl: process.env.LOCAL_STORAGE_BASE_URL || `http://localhost:${process.env.API_PORT}/uploads`
216
- };
217
- }
218
-
113
+ middleware,
114
+ make(storage) {
115
+ return multer_1.default.diskStorage({
116
+ destination: function (req, file, cb) {
117
+ const destPath = path_1.default.join(getDocumentRoot(storage), storage.path);
118
+ (0, mkdirp_1.default)(destPath, (err) => cb(err, destPath));
119
+ },
120
+ filename: utils_1.getFilename,
121
+ });
122
+ },
123
+ defaults() {
124
+ return {
125
+ title: '本地存储',
126
+ type: constants_1.STORAGE_TYPE_LOCAL,
127
+ name: `local`,
128
+ baseUrl: process.env.LOCAL_STORAGE_BASE_URL || `http://localhost:${process.env.SERVER_PORT || '13002'}/uploads`,
129
+ };
130
+ },
219
131
  };
220
- //# sourceMappingURL=local.js.map
132
+ //# sourceMappingURL=local.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["storages/local.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,6BAA0B;AAC1B,oDAA4B;AAC5B,oDAA4B;AAC5B,4DAA+B;AAC/B,4CAAkD;AAClD,oCAAuC;AAGvC,SAAS,KAAK,CAAC,QAAgB,EAAE,QAAgB;IAC/C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAClC,OAAO,KAAK,CAAC;KACd;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;IACtD,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QAC9B,OAAO,IAAI,CAAC;KACb;IAED,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AAC5B,CAAC;AAED,SAAe,MAAM,CAAC,GAAG,EAAE,QAAQ;;QACjC,MAAM,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAEjD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC;YACvC,KAAK,EAAE;gBACL,IAAI,EAAE,8BAAkB;aACzB;SACF,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,YAAY,CAAC,mBAAmB,CAAC;QAEpD,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE;YAC3B,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;SAC5C;IACH,CAAC;CAAA;AAED,SAAS,2BAA2B,CAAC,GAAG,EAAE,QAAQ;IAChD,OAAO,UAAgB,GAAG;;YACxB,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,8BAAkB,EAAE;gBAC1C,MAAM,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;aAC7B;QACH,CAAC;KAAA,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,OAAO;IAC9B,MAAM,EAAE,YAAY,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IAE3D,OAAO,cAAI,CAAC,OAAO,CAAC,cAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAC/C,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAe,UAAU,CAAC,GAAG,EAAE,OAAQ;;QACrC,MAAM,SAAS,GAAG,oBAAoB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAE7D,MAAM,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAC;QAExC,MAAM,qBAAqB,GAAG,2BAA2B,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzE,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;QAC3D,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;QAC3D,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC;QAE5D,MAAM,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAE5B,GAAG,CAAC,GAAG,CAAC,UAAgB,GAAG,EAAE,IAAI;;gBAC/B,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE;oBACvC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAEvC,IAAI,GAAG,CAAC;oBACR,IAAI;wBACF,GAAG,GAAG,IAAI,SAAG,CAAC,OAAO,CAAC,CAAC;qBACxB;oBAAC,OAAO,CAAC,EAAE;wBACV,GAAG,GAAG;4BACJ,QAAQ,EAAE,OAAO;yBAClB,CAAC;qBACH;oBAID,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE;wBAC1C,SAAS;qBACV;oBAED,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBAClF,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;wBAC9B,SAAS;qBACV;oBAED,OAAO,IAAA,oBAAK,EAAC,eAAe,CAAC,OAAO,CAAC,EAAE;wBAErC,KAAK,EAAE,IAAI;qBACZ,CAAC,CAAC,GAAG,EAAE,GAAS,EAAE;wBACjB,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;4BACjC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;yBAC3C;wBAED,MAAM,IAAI,EAAE,CAAC;oBACf,CAAC,CAAA,CAAC,CAAC;iBACJ;gBAED,MAAM,IAAI,EAAE,CAAC;YACf,CAAC;SAAA,CAAC,CAAC;IACL,CAAC;CAAA;AAED,kBAAe;IACb,UAAU;IACV,IAAI,CAAC,OAAO;QACV,OAAO,gBAAM,CAAC,WAAW,CAAC;YACxB,WAAW,EAAE,UAAU,GAAG,EAAE,IAAI,EAAE,EAAE;gBAClC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnE,IAAA,gBAAM,EAAC,QAAQ,EAAE,CAAC,GAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC7D,CAAC;YACD,QAAQ,EAAE,mBAAW;SACtB,CAAC,CAAC;IACL,CAAC;IACD,QAAQ;QACN,OAAO;YACL,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,8BAAkB;YACxB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,oBAAoB,OAAO,CAAC,GAAG,CAAC,QAAQ,UAAU;SAClG,CAAC;IACJ,CAAC;CACF,CAAC","file":"local.js","sourcesContent":["import path from 'path';\nimport { URL } from 'url';\nimport mkdirp from 'mkdirp';\nimport multer from 'multer';\nimport serve from 'koa-static';\nimport { STORAGE_TYPE_LOCAL } from '../constants';\nimport { getFilename } from '../utils';\n\n// use koa-mount match logic\nfunction match(basePath: string, pathname: string): boolean {\n if (!pathname.startsWith(basePath)) {\n return false;\n }\n\n const newPath = pathname.replace(basePath, '') || '/';\n if (basePath.slice(-1) === '/') {\n return true;\n }\n\n return newPath[0] === '/';\n}\n\nasync function update(app, storages) {\n const StorageModel = app.db.getModel('storages');\n\n const items = await StorageModel.findAll({\n where: {\n type: STORAGE_TYPE_LOCAL,\n }\n });\n\n const primaryKey = StorageModel.primaryKeyAttribute;\n\n storages.clear();\n for (const storage of items) {\n storages.set(storage[primaryKey], storage);\n }\n}\n\nfunction createLocalServerUpdateHook(app, storages) {\n return async function (row) {\n if (row.get('type') === STORAGE_TYPE_LOCAL) {\n await update(app, storages);\n }\n }\n}\n\nfunction getDocumentRoot(storage): string {\n const { documentRoot = 'uploads' } = storage.options || {};\n // TODO(feature): 后面考虑以字符串模板的方式使用,可注入 req/action 相关变量,以便于区分文件夹\n return path.resolve(path.isAbsolute(documentRoot)\n ? documentRoot\n : path.join(process.cwd(), documentRoot));\n}\n\nasync function middleware(app, options?) {\n const LOCALHOST = `http://localhost:${process.env.API_PORT}`;\n\n const StorageModel = app.db.getModel('storages');\n const storages = new Map<string, any>();\n\n const localServerUpdateHook = createLocalServerUpdateHook(app, storages);\n StorageModel.addHook('afterCreate', localServerUpdateHook);\n StorageModel.addHook('afterUpdate', localServerUpdateHook);\n StorageModel.addHook('afterDestroy', localServerUpdateHook);\n\n await update(app, storages);\n\n app.use(async function (ctx, next) {\n for (const storage of storages.values()) {\n const baseUrl = storage.get('baseUrl');\n\n let url;\n try {\n url = new URL(baseUrl);\n } catch (e) {\n url = {\n pathname: baseUrl\n };\n }\n\n // 以下情况才认为当前进程所应该提供静态服务\n // 否则都忽略,交给其他 server 来提供(如 nginx/cdn 等)\n if (url.origin && url.origin !== LOCALHOST) {\n continue;\n }\n\n const basePath = url.pathname.startsWith('/') ? url.pathname : `/${url.pathname}`;\n if (!match(basePath, ctx.path)) {\n continue;\n }\n\n return serve(getDocumentRoot(storage), {\n // for handle files after any api handlers\n defer: true\n })(ctx, async () => {\n if (ctx.path.startsWith(basePath)) {\n ctx.path = ctx.path.replace(basePath, '');\n }\n // console.log('file request:', `${basePath}${ctx.path}`);\n await next();\n });\n }\n\n await next();\n });\n}\n\nexport default {\n middleware,\n make(storage) {\n return multer.diskStorage({\n destination: function (req, file, cb) {\n const destPath = path.join(getDocumentRoot(storage), storage.path);\n mkdirp(destPath, (err: Error | null) => cb(err, destPath));\n },\n filename: getFilename\n });\n },\n defaults() {\n return {\n title: '本地存储',\n type: STORAGE_TYPE_LOCAL,\n name: `local`,\n baseUrl: process.env.LOCAL_STORAGE_BASE_URL || `http://localhost:${process.env.API_PORT}/uploads`\n };\n }\n};\n"]}
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/storages/local.ts"],"names":[],"mappings":"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","sourcesContent":["import Application from '@nocobase/server';\nimport serve from 'koa-static';\nimport mkdirp from 'mkdirp';\nimport multer from 'multer';\nimport path from 'path';\nimport { URL } from 'url';\nimport { STORAGE_TYPE_LOCAL } from '../constants';\nimport { getFilename } from '../utils';\n\n// use koa-mount match logic\nfunction match(basePath: string, pathname: string): boolean {\n if (!pathname.startsWith(basePath)) {\n return false;\n }\n\n const newPath = pathname.replace(basePath, '') || '/';\n if (basePath.slice(-1) === '/') {\n return true;\n }\n\n return newPath[0] === '/';\n}\n\nasync function update(app: Application, storages) {\n const Storage = app.db.getCollection('storages');\n\n const items = await Storage.repository.find({\n filter: {\n type: STORAGE_TYPE_LOCAL,\n },\n });\n\n const primaryKey = Storage.model.primaryKeyAttribute;\n\n storages.clear();\n for (const storage of items) {\n storages.set(storage[primaryKey], storage);\n }\n}\n\nfunction createLocalServerUpdateHook(app, storages) {\n return async function (row) {\n if (row.get('type') === STORAGE_TYPE_LOCAL) {\n await update(app, storages);\n }\n };\n}\n\nfunction getDocumentRoot(storage): string {\n const { documentRoot = 'uploads' } = storage.options || {};\n // TODO(feature): 后面考虑以字符串模板的方式使用,可注入 req/action 相关变量,以便于区分文件夹\n return path.resolve(path.isAbsolute(documentRoot) ? documentRoot : path.join(process.cwd(), documentRoot));\n}\n\nasync function middleware(app: Application, options?) {\n const LOCALHOST = `http://localhost:${process.env.SERVER_PORT || '13002'}`;\n\n const Storage = app.db.getCollection('storages');\n const storages = new Map<string, any>();\n\n const localServerUpdateHook = createLocalServerUpdateHook(app, storages);\n Storage.model.addHook('afterCreate', localServerUpdateHook);\n Storage.model.addHook('afterUpdate', localServerUpdateHook);\n Storage.model.addHook('afterDestroy', localServerUpdateHook);\n\n app.on('beforeStart', async () => {\n await update(app, storages);\n });\n\n app.use(async function (ctx, next) {\n for (const storage of storages.values()) {\n const baseUrl = storage.get('baseUrl');\n\n let url;\n try {\n url = new URL(baseUrl);\n } catch (e) {\n url = {\n pathname: baseUrl,\n };\n }\n\n // 以下情况才认为当前进程所应该提供静态服务\n // 否则都忽略,交给其他 server 来提供(如 nginx/cdn 等)\n if (url.origin && storage?.options?.serve === false) {\n continue;\n }\n\n const basePath = url.pathname.startsWith('/') ? url.pathname : `/${url.pathname}`;\n\n if (!match(basePath, ctx.path)) {\n continue;\n }\n\n return serve(getDocumentRoot(storage), {\n // for handle files after any api handlers\n defer: true,\n })(ctx, async () => {\n if (ctx.path.startsWith(basePath)) {\n ctx.path = ctx.path.replace(basePath, '');\n }\n await next();\n });\n }\n\n await next();\n });\n}\n\nexport default {\n middleware,\n make(storage) {\n return multer.diskStorage({\n destination: function (req, file, cb) {\n const destPath = path.join(getDocumentRoot(storage), storage.path);\n mkdirp(destPath, (err: Error | null) => cb(err, destPath));\n },\n filename: getFilename,\n });\n },\n defaults() {\n return {\n title: '本地存储',\n type: STORAGE_TYPE_LOCAL,\n name: `local`,\n baseUrl: process.env.LOCAL_STORAGE_BASE_URL || `http://localhost:${process.env.SERVER_PORT || '13002'}/uploads`,\n };\n },\n};\n"]}
@@ -1,90 +1,55 @@
1
1
  "use strict";
2
-
3
- function _react() {
4
- const data = _interopRequireDefault(require("react"));
5
-
6
- _react = function _react() {
7
- return data;
8
- };
9
-
10
- return data;
11
- }
12
-
13
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
-
15
- var __rest = void 0 && (void 0).__rest || function (s, e) {
16
- var t = {};
17
-
18
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
19
-
20
- if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
21
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
22
- }
23
- return t;
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
24
12
  };
25
-
26
- Object.defineProperty(exports, "__esModule", {
27
- value: true
28
- });
29
-
13
+ Object.defineProperty(exports, "__esModule", { value: true });
30
14
  const constants_1 = require("../constants");
31
-
32
15
  const utils_1 = require("../utils");
33
-
34
16
  exports.default = {
35
- filenameKey: 'key',
36
-
37
- make(storage) {
38
- const S3Client = require('aws-sdk/clients/s3');
39
-
40
- const multerS3 = require('multer-s3');
41
-
42
- const _a = storage.options,
43
- accessKeyId = _a.accessKeyId,
44
- secretAccessKey = _a.secretAccessKey,
45
- bucket = _a.bucket,
46
- _a$acl = _a.acl,
47
- acl = _a$acl === void 0 ? 'public-read' : _a$acl,
48
- options = __rest(_a, ["accessKeyId", "secretAccessKey", "bucket", "acl"]);
49
-
50
- const s3 = new S3Client(Object.assign(Object.assign({}, options), {
51
- credentials: {
52
- accessKeyId,
53
- secretAccessKey
54
- }
55
- }));
56
- return multerS3({
57
- s3,
58
- bucket,
59
- acl,
60
-
61
- contentType(req, file, cb) {
62
- if (file.mimetype) {
63
- cb(null, file.mimetype);
64
- return;
65
- }
66
-
67
- multerS3.AUTO_CONTENT_TYPE(req, file, cb);
68
- },
69
-
70
- key: (0, utils_1.cloudFilenameGetter)(storage)
71
- });
72
- },
73
-
74
- defaults() {
75
- return {
76
- title: 'AWS S3',
77
- name: 'aws-s3',
78
- type: constants_1.STORAGE_TYPE_S3,
79
- baseUrl: process.env.AWS_S3_STORAGE_BASE_URL,
80
- options: {
81
- region: process.env.AWS_S3_REGION,
82
- accessKeyId: process.env.AWS_ACCESS_KEY_ID,
83
- secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
84
- bucket: process.env.AWS_S3_BUCKET
85
- }
86
- };
87
- }
88
-
17
+ filenameKey: 'key',
18
+ make(storage) {
19
+ const S3Client = require('aws-sdk/clients/s3');
20
+ const multerS3 = require('multer-s3');
21
+ const _a = storage.options, { accessKeyId, secretAccessKey, bucket, acl = 'public-read' } = _a, options = __rest(_a, ["accessKeyId", "secretAccessKey", "bucket", "acl"]);
22
+ const s3 = new S3Client(Object.assign(Object.assign({}, options), { credentials: {
23
+ accessKeyId,
24
+ secretAccessKey,
25
+ } }));
26
+ return multerS3({
27
+ s3,
28
+ bucket,
29
+ acl,
30
+ contentType(req, file, cb) {
31
+ if (file.mimetype) {
32
+ cb(null, file.mimetype);
33
+ return;
34
+ }
35
+ multerS3.AUTO_CONTENT_TYPE(req, file, cb);
36
+ },
37
+ key: (0, utils_1.cloudFilenameGetter)(storage),
38
+ });
39
+ },
40
+ defaults() {
41
+ return {
42
+ title: 'AWS S3',
43
+ name: 'aws-s3',
44
+ type: constants_1.STORAGE_TYPE_S3,
45
+ baseUrl: process.env.AWS_S3_STORAGE_BASE_URL,
46
+ options: {
47
+ region: process.env.AWS_S3_REGION,
48
+ accessKeyId: process.env.AWS_ACCESS_KEY_ID,
49
+ secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
50
+ bucket: process.env.AWS_S3_BUCKET,
51
+ },
52
+ };
53
+ },
89
54
  };
90
- //# sourceMappingURL=s3.js.map
55
+ //# sourceMappingURL=s3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["storages/s3.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,4CAA+C;AAC/C,oCAA+C;AAE/C,kBAAe;IACb,WAAW,EAAE,KAAK;IAClB,IAAI,CAAC,OAAO;QACV,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,KAMF,OAAO,CAAC,OAAO,EANb,EACJ,WAAW,EACX,eAAe,EACf,MAAM,EACN,GAAG,GAAG,aAAa,OAEF,EADd,OAAO,cALN,mDAML,CAAkB,CAAC;QACpB,MAAM,EAAE,GAAG,IAAI,QAAQ,iCAClB,OAAO,KACV,WAAW,EAAE;gBACX,WAAW;gBACX,eAAe;aAChB,IACD,CAAC;QAEH,OAAO,QAAQ,CAAC;YACd,EAAE;YACF,MAAM;YACN,GAAG;YACH,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBACvB,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACxB,OAAO;iBACR;gBAED,QAAQ,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YAC5C,CAAC;YACD,GAAG,EAAE,IAAA,2BAAmB,EAAC,OAAO,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IACD,QAAQ;QACN,OAAO;YACL,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,2BAAe;YACrB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;YAC5C,OAAO,EAAE;gBACP,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;gBACjC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;gBAC1C,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;gBAClD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;aAClC;SACF,CAAA;IACH,CAAC;CACF,CAAA","file":"s3.js","sourcesContent":["import { STORAGE_TYPE_S3 } from '../constants';\nimport { cloudFilenameGetter } from '../utils';\n\nexport default {\n filenameKey: 'key',\n make(storage) {\n const S3Client = require('aws-sdk/clients/s3');\n const multerS3 = require('multer-s3');\n const {\n accessKeyId,\n secretAccessKey,\n bucket,\n acl = 'public-read',\n ...options\n } = storage.options;\n const s3 = new S3Client({\n ...options,\n credentials: {\n accessKeyId,\n secretAccessKey\n }\n });\n\n return multerS3({\n s3,\n bucket,\n acl,\n contentType(req, file, cb) {\n if (file.mimetype) {\n cb(null, file.mimetype);\n return;\n }\n \n multerS3.AUTO_CONTENT_TYPE(req, file, cb);\n },\n key: cloudFilenameGetter(storage)\n });\n },\n defaults() {\n return {\n title: 'AWS S3',\n name: 'aws-s3',\n type: STORAGE_TYPE_S3,\n baseUrl: process.env.AWS_S3_STORAGE_BASE_URL,\n options: {\n region: process.env.AWS_S3_REGION,\n accessKeyId: process.env.AWS_ACCESS_KEY_ID,\n secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,\n bucket: process.env.AWS_S3_BUCKET,\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"s3.js","sourceRoot":"","sources":["../../src/storages/s3.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,4CAA+C;AAC/C,oCAA+C;AAE/C,kBAAe;IACb,WAAW,EAAE,KAAK;IAClB,IAAI,CAAC,OAAO;QACV,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,KAA4E,OAAO,CAAC,OAAO,EAA3F,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,GAAG,aAAa,OAAgC,EAA3B,OAAO,cAAvE,mDAAyE,CAAkB,CAAC;QAClG,MAAM,EAAE,GAAG,IAAI,QAAQ,iCAClB,OAAO,KACV,WAAW,EAAE;gBACX,WAAW;gBACX,eAAe;aAChB,IACD,CAAC;QAEH,OAAO,QAAQ,CAAC;YACd,EAAE;YACF,MAAM;YACN,GAAG;YACH,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBACvB,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACxB,OAAO;iBACR;gBAED,QAAQ,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YAC5C,CAAC;YACD,GAAG,EAAE,IAAA,2BAAmB,EAAC,OAAO,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IACD,QAAQ;QACN,OAAO;YACL,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,2BAAe;YACrB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;YAC5C,OAAO,EAAE;gBACP,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;gBACjC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;gBAC1C,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;gBAClD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;aAClC;SACF,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["import { STORAGE_TYPE_S3 } from '../constants';\nimport { cloudFilenameGetter } from '../utils';\n\nexport default {\n filenameKey: 'key',\n make(storage) {\n const S3Client = require('aws-sdk/clients/s3');\n const multerS3 = require('multer-s3');\n const { accessKeyId, secretAccessKey, bucket, acl = 'public-read', ...options } = storage.options;\n const s3 = new S3Client({\n ...options,\n credentials: {\n accessKeyId,\n secretAccessKey,\n },\n });\n\n return multerS3({\n s3,\n bucket,\n acl,\n contentType(req, file, cb) {\n if (file.mimetype) {\n cb(null, file.mimetype);\n return;\n }\n\n multerS3.AUTO_CONTENT_TYPE(req, file, cb);\n },\n key: cloudFilenameGetter(storage),\n });\n },\n defaults() {\n return {\n title: 'AWS S3',\n name: 'aws-s3',\n type: STORAGE_TYPE_S3,\n baseUrl: process.env.AWS_S3_STORAGE_BASE_URL,\n options: {\n region: process.env.AWS_S3_REGION,\n accessKeyId: process.env.AWS_ACCESS_KEY_ID,\n secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,\n bucket: process.env.AWS_S3_BUCKET,\n },\n };\n },\n};\n"]}