@nocobase/resourcer 0.9.1-alpha.1 → 0.9.2-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.
package/lib/action.js CHANGED
@@ -4,57 +4,39 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.Action = void 0;
7
-
8
7
  function _utils() {
9
8
  const data = require("@nocobase/utils");
10
-
11
9
  _utils = function _utils() {
12
10
  return data;
13
11
  };
14
-
15
12
  return data;
16
13
  }
17
-
18
14
  function _koaCompose() {
19
15
  const data = _interopRequireDefault(require("koa-compose"));
20
-
21
16
  _koaCompose = function _koaCompose() {
22
17
  return data;
23
18
  };
24
-
25
19
  return data;
26
20
  }
27
-
28
21
  function _lodash() {
29
22
  const data = _interopRequireDefault(require("lodash"));
30
-
31
23
  _lodash = function _lodash() {
32
24
  return data;
33
25
  };
34
-
35
26
  return data;
36
27
  }
37
-
38
28
  var _middleware = _interopRequireDefault(require("./middleware"));
39
-
40
29
  const _excluded = ["middleware", "middlewares", "handler"];
41
-
42
30
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
43
-
44
31
  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); } }
45
-
46
32
  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); }); }; }
47
-
48
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; }
49
-
50
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; }
51
-
52
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
53
-
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; }
36
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
37
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
54
38
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
55
-
56
39
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
57
-
58
40
  class Action {
59
41
  constructor(options) {
60
42
  this.handler = void 0;
@@ -68,26 +50,22 @@ class Action {
68
50
  this.resourceOf = void 0;
69
51
  this.middlewares = [];
70
52
  options = (0, _utils().requireModule)(options);
71
-
72
53
  if (typeof options === 'function') {
73
54
  options = {
74
55
  handler: options
75
56
  };
76
57
  }
77
-
78
58
  const _options = options,
79
- middleware = _options.middleware,
80
- _options$middlewares = _options.middlewares,
81
- middlewares = _options$middlewares === void 0 ? [] : _options$middlewares,
82
- handler = _options.handler,
83
- params = _objectWithoutProperties(_options, _excluded);
84
-
59
+ middleware = _options.middleware,
60
+ _options$middlewares = _options.middlewares,
61
+ middlewares = _options$middlewares === void 0 ? [] : _options$middlewares,
62
+ handler = _options.handler,
63
+ params = _objectWithoutProperties(_options, _excluded);
85
64
  this.middlewares = _middleware.default.toInstanceArray(middleware || middlewares);
86
65
  this.handler = handler;
87
66
  this.options = options;
88
67
  this.mergeParams(params);
89
68
  }
90
-
91
69
  toJSON() {
92
70
  return {
93
71
  actionName: this.actionName,
@@ -96,10 +74,8 @@ class Action {
96
74
  params: this.params
97
75
  };
98
76
  }
99
-
100
77
  clone() {
101
78
  const options = _lodash().default.cloneDeep(this.options);
102
-
103
79
  delete options.middleware;
104
80
  delete options.middlewares;
105
81
  const action = new Action(options);
@@ -108,20 +84,16 @@ class Action {
108
84
  action.middlewares.push(...this.middlewares);
109
85
  return action;
110
86
  }
111
-
112
87
  setContext(context) {
113
88
  this.context = context;
114
89
  }
115
-
116
90
  mergeParams(params, strategies = {}) {
117
91
  if (!this.params) {
118
92
  this.params = {};
119
93
  }
120
-
121
94
  if (!params) {
122
95
  return;
123
96
  }
124
-
125
97
  (0, _utils().assign)(this.params, params, _objectSpread({
126
98
  filter: 'andMerge',
127
99
  fields: 'intersect',
@@ -132,75 +104,58 @@ class Action {
132
104
  sort: 'overwrite'
133
105
  }, strategies));
134
106
  }
135
-
136
107
  setResource(resource) {
137
108
  this.resource = resource;
138
109
  return this;
139
110
  }
140
-
141
111
  getResource() {
142
112
  return this.resource;
143
113
  }
144
-
145
114
  getOptions() {
146
115
  return this.options;
147
116
  }
148
-
149
117
  setName(name) {
150
118
  this.name = name;
151
119
  return this;
152
120
  }
153
-
154
121
  getName() {
155
122
  return this.name;
156
123
  }
157
-
158
124
  getMiddlewareHandlers() {
159
125
  return this.middlewares.filter(middleware => middleware.canAccess(this.name)).map(middleware => middleware.getHandler());
160
126
  }
161
-
162
127
  getHandler() {
163
128
  const handler = (0, _utils().requireModule)(this.handler || this.resource.resourcer.getRegisteredHandler(this.name));
164
-
165
129
  if (typeof handler !== 'function') {
166
130
  throw new Error('Handler must be a function!');
167
131
  }
168
-
169
132
  return handler;
170
133
  }
171
-
172
134
  getHandlers() {
173
135
  const handlers = [...this.resource.resourcer.getMiddlewares(), ...this.getMiddlewareHandlers(), this.getHandler()].filter(Boolean);
174
136
  return handlers;
175
137
  }
176
-
177
138
  execute(context, next) {
178
139
  var _this = this;
179
-
180
140
  return _asyncToGenerator(function* () {
181
141
  return yield (0, _koaCompose().default)(_this.getHandlers())(context, next);
182
142
  })();
183
143
  }
184
-
185
144
  static toInstanceMap(actions, resource) {
186
145
  return new Map(Object.entries(actions).map(([key, options]) => {
187
146
  let action;
188
-
189
147
  if (options instanceof Action) {
190
148
  action = options;
191
149
  } else {
192
150
  action = new Action(options);
193
151
  }
194
-
195
152
  action.setName(key);
196
153
  action.setResource(resource);
197
154
  resource && action.middlewares.unshift(...resource.middlewares);
198
155
  return [key, action];
199
156
  }));
200
157
  }
201
-
202
158
  }
203
-
204
159
  exports.Action = Action;
205
160
  var _default = Action;
206
161
  exports.default = _default;
package/lib/index.js CHANGED
@@ -5,9 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  var _exportNames = {};
7
7
  exports.default = void 0;
8
-
9
8
  var _resourcer = _interopRequireWildcard(require("./resourcer"));
10
-
11
9
  Object.keys(_resourcer).forEach(function (key) {
12
10
  if (key === "default" || key === "__esModule") return;
13
11
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -19,9 +17,7 @@ Object.keys(_resourcer).forEach(function (key) {
19
17
  }
20
18
  });
21
19
  });
22
-
23
20
  var _utils = require("./utils");
24
-
25
21
  Object.keys(_utils).forEach(function (key) {
26
22
  if (key === "default" || key === "__esModule") return;
27
23
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -33,9 +29,7 @@ Object.keys(_utils).forEach(function (key) {
33
29
  }
34
30
  });
35
31
  });
36
-
37
32
  var _middleware = require("./middleware");
38
-
39
33
  Object.keys(_middleware).forEach(function (key) {
40
34
  if (key === "default" || key === "__esModule") return;
41
35
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -47,9 +41,7 @@ Object.keys(_middleware).forEach(function (key) {
47
41
  }
48
42
  });
49
43
  });
50
-
51
44
  var _action = require("./action");
52
-
53
45
  Object.keys(_action).forEach(function (key) {
54
46
  if (key === "default" || key === "__esModule") return;
55
47
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -61,9 +53,7 @@ Object.keys(_action).forEach(function (key) {
61
53
  }
62
54
  });
63
55
  });
64
-
65
56
  var _resource = require("./resource");
66
-
67
57
  Object.keys(_resource).forEach(function (key) {
68
58
  if (key === "default" || key === "__esModule") return;
69
59
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -75,10 +65,7 @@ Object.keys(_resource).forEach(function (key) {
75
65
  }
76
66
  });
77
67
  });
78
-
79
68
  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); }
80
-
81
69
  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; }
82
-
83
70
  var _default = _resourcer.default;
84
71
  exports.default = _default;
package/lib/middleware.js CHANGED
@@ -6,35 +6,26 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.Middleware = void 0;
7
7
  exports.branch = branch;
8
8
  exports.default = void 0;
9
-
10
9
  function _koaCompose() {
11
10
  const data = _interopRequireDefault(require("koa-compose"));
12
-
13
11
  _koaCompose = function _koaCompose() {
14
12
  return data;
15
13
  };
16
-
17
14
  return data;
18
15
  }
19
-
20
16
  function _utils() {
21
17
  const data = require("@nocobase/utils");
22
-
23
18
  _utils = function _utils() {
24
19
  return data;
25
20
  };
26
-
27
21
  return data;
28
22
  }
29
-
30
23
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
-
32
24
  class Middleware {
33
25
  constructor(options) {
34
26
  this.options = void 0;
35
27
  this.middlewares = [];
36
28
  options = (0, _utils().requireModule)(options);
37
-
38
29
  if (typeof options === 'function') {
39
30
  this.options = {
40
31
  handler: options
@@ -43,61 +34,47 @@ class Middleware {
43
34
  this.options = options;
44
35
  }
45
36
  }
46
-
47
37
  getHandler() {
48
38
  const handler = (0, _utils().requireModule)(this.options.handler);
49
-
50
39
  if (typeof handler !== 'function') {
51
40
  throw new Error('Handler must be a function!');
52
41
  }
53
-
54
42
  return (ctx, next) => (0, _koaCompose().default)([handler, ...this.middlewares])(ctx, next);
55
43
  }
56
-
57
44
  use(middleware) {
58
45
  this.middlewares.push(middleware);
59
46
  }
60
-
61
47
  disuse(middleware) {
62
48
  this.middlewares.splice(this.middlewares.indexOf(middleware), 1);
63
49
  }
64
-
65
50
  canAccess(name) {
66
51
  const _this$options = this.options,
67
- _this$options$only = _this$options.only,
68
- only = _this$options$only === void 0 ? [] : _this$options$only,
69
- _this$options$except = _this$options.except,
70
- except = _this$options$except === void 0 ? [] : _this$options$except;
71
-
52
+ _this$options$only = _this$options.only,
53
+ only = _this$options$only === void 0 ? [] : _this$options$only,
54
+ _this$options$except = _this$options.except,
55
+ except = _this$options$except === void 0 ? [] : _this$options$except;
72
56
  if (only.length > 0) {
73
57
  return only.includes(name);
74
58
  }
75
-
76
59
  if (except.length > 0) {
77
60
  return !except.includes(name);
78
61
  }
79
-
80
62
  return true;
81
63
  }
82
-
83
64
  static toInstanceArray(middlewares) {
84
65
  if (!middlewares) {
85
66
  return [];
86
67
  }
87
-
88
68
  if (!Array.isArray(middlewares)) {
89
69
  middlewares = [middlewares];
90
70
  }
91
-
92
71
  return middlewares.map(middleware => {
93
72
  if (middleware instanceof Middleware) {
94
73
  return middleware;
95
74
  }
96
-
97
75
  if (typeof middleware === 'object') {
98
76
  return new Middleware(middleware);
99
77
  }
100
-
101
78
  if (typeof middleware === 'function') {
102
79
  return new Middleware({
103
80
  handler: middleware
@@ -105,27 +82,20 @@ class Middleware {
105
82
  }
106
83
  });
107
84
  }
108
-
109
85
  }
110
-
111
86
  exports.Middleware = Middleware;
112
87
  var _default = Middleware;
113
88
  exports.default = _default;
114
-
115
89
  function branch(map = {}, reducer, options = {}) {
116
90
  return (ctx, next) => {
117
91
  const key = reducer(ctx);
118
-
119
92
  if (!key) {
120
93
  return options.keyNotFound ? options.keyNotFound(ctx, next) : ctx.throw(404);
121
94
  }
122
-
123
95
  const handler = map[key];
124
-
125
96
  if (!handler) {
126
97
  return options.handlerNotSet ? options.handlerNotSet(ctx, next) : ctx.throw(404);
127
98
  }
128
-
129
99
  return handler(ctx, next);
130
100
  };
131
101
  }
package/lib/resource.js CHANGED
@@ -4,37 +4,23 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.Resource = void 0;
7
-
8
7
  function _lodash() {
9
8
  const data = _interopRequireDefault(require("lodash"));
10
-
11
9
  _lodash = function _lodash() {
12
10
  return data;
13
11
  };
14
-
15
12
  return data;
16
13
  }
17
-
18
14
  var _action = _interopRequireDefault(require("./action"));
19
-
20
15
  var _middleware = _interopRequireDefault(require("./middleware"));
21
-
22
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
-
24
17
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
25
-
26
18
  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."); }
27
-
28
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
29
-
19
+ 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; } }
30
20
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
31
-
32
21
  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(_e2) { throw _e2; }, 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(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
33
-
34
22
  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); }
35
-
36
23
  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; }
37
-
38
24
  class Resource {
39
25
  constructor(options, resourcer) {
40
26
  this.resourcer = void 0;
@@ -43,27 +29,24 @@ class Resource {
43
29
  this.options = void 0;
44
30
  this.except = void 0;
45
31
  const middleware = options.middleware,
46
- middlewares = options.middlewares,
47
- _options$actions = options.actions,
48
- actions = _options$actions === void 0 ? {} : _options$actions,
49
- _options$only = options.only,
50
- only = _options$only === void 0 ? [] : _options$only,
51
- _options$except = options.except,
52
- except = _options$except === void 0 ? [] : _options$except;
32
+ middlewares = options.middlewares,
33
+ _options$actions = options.actions,
34
+ actions = _options$actions === void 0 ? {} : _options$actions,
35
+ _options$only = options.only,
36
+ only = _options$only === void 0 ? [] : _options$only,
37
+ _options$except = options.except,
38
+ except = _options$except === void 0 ? [] : _options$except;
53
39
  this.options = options;
54
40
  this.resourcer = resourcer;
55
41
  this.middlewares = _middleware.default.toInstanceArray(middleware || middlewares);
56
42
  let excludes = [];
57
-
58
43
  var _iterator = _createForOfIteratorHelper(resourcer.getRegisteredHandlers()),
59
- _step;
60
-
44
+ _step;
61
45
  try {
62
46
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
63
47
  const _step$value = _slicedToArray(_step.value, 2),
64
- name = _step$value[0],
65
- handler = _step$value[1];
66
-
48
+ name = _step$value[0],
49
+ handler = _step$value[1];
67
50
  if (!actions[name]) {
68
51
  actions[name] = handler;
69
52
  }
@@ -73,39 +56,30 @@ class Resource {
73
56
  } finally {
74
57
  _iterator.f();
75
58
  }
76
-
77
59
  if (except.length > 0) {
78
60
  excludes = except;
79
61
  } else if (only.length > 0) {
80
62
  excludes = Object.keys(actions).filter(name => !only.includes(name));
81
63
  }
82
-
83
64
  this.except = excludes;
84
65
  this.actions = _action.default.toInstanceMap(_lodash().default.omit(actions, excludes), this);
85
66
  }
86
-
87
67
  getName() {
88
68
  return this.options.name;
89
69
  }
90
-
91
70
  getExcept() {
92
71
  return this.except;
93
72
  }
94
-
95
73
  getAction(action) {
96
74
  if (this.except.includes(action)) {
97
75
  throw new Error(`${action} action is not allowed`);
98
76
  }
99
-
100
77
  if (!this.actions.has(action)) {
101
78
  throw new Error(`${action} action does not exist`);
102
79
  }
103
-
104
80
  return this.actions.get(action);
105
81
  }
106
-
107
82
  }
108
-
109
83
  exports.Resource = Resource;
110
84
  var _default = Resource;
111
85
  exports.default = _default;
package/lib/resourcer.js CHANGED
@@ -4,91 +4,63 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.Resourcer = void 0;
7
-
8
7
  function _utils() {
9
8
  const data = require("@nocobase/utils");
10
-
11
9
  _utils = function _utils() {
12
10
  return data;
13
11
  };
14
-
15
12
  return data;
16
13
  }
17
-
18
14
  function _glob() {
19
15
  const data = _interopRequireDefault(require("glob"));
20
-
21
16
  _glob = function _glob() {
22
17
  return data;
23
18
  };
24
-
25
19
  return data;
26
20
  }
27
-
28
21
  function _koaCompose() {
29
22
  const data = _interopRequireDefault(require("koa-compose"));
30
-
31
23
  _koaCompose = function _koaCompose() {
32
24
  return data;
33
25
  };
34
-
35
26
  return data;
36
27
  }
37
-
38
28
  function _lodash() {
39
29
  const data = _interopRequireDefault(require("lodash"));
40
-
41
30
  _lodash = function _lodash() {
42
31
  return data;
43
32
  };
44
-
45
33
  return data;
46
34
  }
47
-
48
35
  function _pathToRegexp() {
49
36
  const data = require("path-to-regexp");
50
-
51
37
  _pathToRegexp = function _pathToRegexp() {
52
38
  return data;
53
39
  };
54
-
55
40
  return data;
56
41
  }
57
-
58
42
  var _resource = _interopRequireDefault(require("./resource"));
59
-
60
43
  var _utils2 = require("./utils");
61
-
62
44
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
63
-
64
45
  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; }
65
-
66
46
  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; }
67
-
68
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
69
-
47
+ 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; }
48
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
49
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
70
50
  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); } }
71
-
72
51
  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); }); }; }
73
-
74
52
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
75
-
76
53
  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."); }
77
-
78
54
  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); }
79
-
80
55
  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; }
81
-
82
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
83
-
56
+ 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; } }
84
57
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
85
-
86
58
  class Resourcer {
87
- /**
88
- * 全局定义的 action handlers
89
- */
90
59
  constructor(options = {}) {
91
60
  this.resources = new Map();
61
+ /**
62
+ * 全局定义的 action handlers
63
+ */
92
64
  this.handlers = new Map();
93
65
  this.actionHandlers = new Map();
94
66
  this.middlewareHandlers = new Map();
@@ -106,18 +78,14 @@ class Resourcer {
106
78
  * @param {string} [options.directory] 指定配置所在路径
107
79
  * @param {array} [options.extensions = ['js', 'ts', 'json']] 文件后缀
108
80
  */
109
-
110
-
111
81
  import(options) {
112
82
  const _options$extensions = options.extensions,
113
- extensions = _options$extensions === void 0 ? ['js', 'ts', 'json'] : _options$extensions,
114
- directory = options.directory;
83
+ extensions = _options$extensions === void 0 ? ['js', 'ts', 'json'] : _options$extensions,
84
+ directory = options.directory;
115
85
  const patten = `${directory}/*.{${extensions.join(',')}}`;
116
-
117
86
  const files = _glob().default.sync(patten, {
118
87
  ignore: ['**/*.d.ts']
119
88
  });
120
-
121
89
  const resources = new Map();
122
90
  files.forEach(file => {
123
91
  const options = (0, _utils().requireModule)(file);
@@ -132,27 +100,21 @@ class Resourcer {
132
100
  * @param name
133
101
  * @param options
134
102
  */
135
-
136
-
137
103
  define(options) {
138
104
  const name = options.name;
139
105
  const resource = new _resource.default(options, this);
140
106
  this.resources.set(name, resource);
141
107
  return resource;
142
108
  }
143
-
144
109
  isDefined(name) {
145
110
  return this.resources.has(name);
146
111
  }
147
-
148
112
  removeResource(name) {
149
113
  return this.resources.delete(name);
150
114
  }
151
-
152
115
  registerAction(name, handler) {
153
116
  this.registerActionHandler(name, handler);
154
117
  }
155
-
156
118
  registerActions(handlers) {
157
119
  this.registerActionHandlers(handlers);
158
120
  }
@@ -161,61 +123,47 @@ class Resourcer {
161
123
  *
162
124
  * @param handlers
163
125
  */
164
-
165
-
166
126
  registerActionHandlers(handlers) {
167
127
  for (var _i = 0, _Object$entries = Object.entries(handlers); _i < _Object$entries.length; _i++) {
168
128
  const _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
169
- name = _Object$entries$_i[0],
170
- handler = _Object$entries$_i[1];
171
-
129
+ name = _Object$entries$_i[0],
130
+ handler = _Object$entries$_i[1];
172
131
  this.registerActionHandler(name, handler);
173
132
  }
174
133
  }
175
-
176
134
  registerActionHandler(name, handler) {
177
135
  this.actionHandlers.set(name, handler);
178
136
  }
179
-
180
137
  getRegisteredHandler(name) {
181
138
  return this.actionHandlers.get(name);
182
139
  }
183
-
184
140
  getRegisteredHandlers() {
185
141
  return this.actionHandlers;
186
142
  }
187
-
188
143
  getResource(name) {
189
144
  if (!this.resources.has(name)) {
190
145
  throw new Error(`${name} resource does not exist`);
191
146
  }
192
-
193
147
  return this.resources.get(name);
194
148
  }
195
-
196
149
  getAction(name, action) {
197
150
  // 支持注册局部 action
198
151
  if (this.actionHandlers.has(`${name}:${action}`)) {
199
152
  return this.getResource(name).getAction(`${name}:${action}`);
200
153
  }
201
-
202
154
  return this.getResource(name).getAction(action);
203
155
  }
204
-
205
156
  getMiddlewares() {
206
157
  return this.middlewares.nodes;
207
158
  }
208
-
209
159
  use(middlewares, options = {}) {
210
160
  this.middlewares.add(middlewares, options);
211
161
  }
212
-
213
162
  restApiMiddleware({
214
163
  prefix,
215
164
  accessors
216
165
  } = {}) {
217
166
  var _this = this;
218
-
219
167
  return /*#__PURE__*/function () {
220
168
  var _ref = _asyncToGenerator(function* (ctx, next) {
221
169
  ctx.resourcer = _this;
@@ -226,15 +174,12 @@ class Resourcer {
226
174
  prefix: _this.options.prefix || prefix,
227
175
  accessors: _this.options.accessors || accessors
228
176
  });
229
-
230
177
  if (!params) {
231
178
  return next();
232
179
  }
233
-
234
180
  try {
235
- const resource = _this.getResource((0, _utils2.getNameByParams)(params)); // 为关系资源时,暂时需要再执行一遍 parseRequest
236
-
237
-
181
+ const resource = _this.getResource((0, _utils2.getNameByParams)(params));
182
+ // 为关系资源时,暂时需要再执行一遍 parseRequest
238
183
  if (resource.options.type && resource.options.type !== 'single') {
239
184
  params = (0, _utils2.parseRequest)({
240
185
  path: ctx.request.path,
@@ -244,13 +189,11 @@ class Resourcer {
244
189
  prefix: _this.options.prefix || prefix,
245
190
  accessors: _this.options.accessors || accessors
246
191
  });
247
-
248
192
  if (!params) {
249
193
  return next();
250
194
  }
251
- } // action 需要 clone 之后再赋给 ctx
252
-
253
-
195
+ }
196
+ // action 需要 clone 之后再赋给 ctx
254
197
  ctx.action = _this.getAction((0, _utils2.getNameByParams)(params), params.actionName).clone();
255
198
  ctx.action.setContext(ctx);
256
199
  ctx.action.actionName = params.actionName;
@@ -258,7 +201,6 @@ class Resourcer {
258
201
  ctx.action.resourceName = params.associatedName ? `${params.associatedName}.${params.resourceName}` : params.resourceName;
259
202
  ctx.action.params.filterByTk = params.resourceIndex;
260
203
  const query = (0, _utils2.parseQuery)(ctx.request.querystring);
261
-
262
204
  if ((0, _pathToRegexp().pathToRegexp)('/resourcer/{:associatedName.}?:resourceName{\\::actionName}').test(ctx.request.path)) {
263
205
  ctx.action.mergeParams(_objectSpread(_objectSpread(_objectSpread({}, query), params), ctx.request.body));
264
206
  } else {
@@ -266,19 +208,16 @@ class Resourcer {
266
208
  values: ctx.request.body
267
209
  }));
268
210
  }
269
-
270
211
  return (0, _koaCompose().default)(ctx.action.getHandlers())(ctx, next);
271
212
  } catch (error) {
272
213
  return next();
273
214
  }
274
215
  });
275
-
276
- return function (_x, _x2) {
216
+ return function (_x2, _x3) {
277
217
  return _ref.apply(this, arguments);
278
218
  };
279
219
  }();
280
220
  }
281
-
282
221
  middleware(options = {}) {
283
222
  return this.restApiMiddleware(options);
284
223
  }
@@ -289,22 +228,17 @@ class Resourcer {
289
228
  * @param context
290
229
  * @param next
291
230
  */
292
-
293
-
294
231
  execute(options, context = {}, next) {
295
232
  var _this2 = this;
296
-
297
233
  return _asyncToGenerator(function* () {
298
234
  const resource = options.resource,
299
- action = options.action;
235
+ action = options.action;
300
236
  context.resourcer = _this2;
301
237
  context.action = _this2.getAction(resource, action);
302
238
  return yield context.action.execute(context, next);
303
239
  })();
304
240
  }
305
-
306
241
  }
307
-
308
242
  exports.Resourcer = Resourcer;
309
243
  var _default = Resourcer;
310
244
  exports.default = _default;
package/lib/utils.js CHANGED
@@ -8,63 +8,44 @@ exports.mergeFields = mergeFields;
8
8
  exports.parseFields = parseFields;
9
9
  exports.parseQuery = parseQuery;
10
10
  exports.parseRequest = parseRequest;
11
-
12
11
  function _lodash() {
13
12
  const data = _interopRequireDefault(require("lodash"));
14
-
15
13
  _lodash = function _lodash() {
16
14
  return data;
17
15
  };
18
-
19
16
  return data;
20
17
  }
21
-
22
18
  function _pathToRegexp() {
23
19
  const data = require("path-to-regexp");
24
-
25
20
  _pathToRegexp = function _pathToRegexp() {
26
21
  return data;
27
22
  };
28
-
29
23
  return data;
30
24
  }
31
-
32
25
  function _qs() {
33
26
  const data = _interopRequireDefault(require("qs"));
34
-
35
27
  _qs = function _qs() {
36
28
  return data;
37
29
  };
38
-
39
30
  return data;
40
31
  }
41
-
42
32
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
43
-
44
33
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
45
-
46
34
  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."); }
47
-
48
35
  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
-
50
36
  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; }
51
-
52
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
53
-
37
+ 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; } }
54
38
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
55
-
56
39
  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; }
57
-
58
40
  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; }
59
-
60
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
61
-
41
+ 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; }
42
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
43
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } // @ts-ignore
62
44
  function getNameByParams(params) {
63
45
  const resourceName = params.resourceName,
64
- associatedName = params.associatedName;
46
+ associatedName = params.associatedName;
65
47
  return associatedName ? `${associatedName}.${resourceName}` : resourceName;
66
48
  }
67
-
68
49
  function parseRequest(request, options = {}) {
69
50
  const accessors = _objectSpread({
70
51
  // 常规 actions
@@ -78,23 +59,19 @@ function parseRequest(request, options = {}) {
78
59
  set: 'set',
79
60
  remove: 'remove'
80
61
  }, options.accessors || {});
81
-
82
62
  const keys = [];
83
63
  const regexp = (0, _pathToRegexp().pathToRegexp)('/resourcer/{:associatedName.}?:resourceName{\\::actionName}', keys);
84
64
  const matches = regexp.exec(request.path);
85
-
86
65
  if (matches) {
87
66
  const params = {};
88
67
  keys.forEach((obj, index) => {
89
68
  if (matches[index + 1] === undefined) {
90
69
  return;
91
70
  }
92
-
93
71
  params[obj.name] = matches[index + 1];
94
72
  });
95
73
  return params;
96
74
  }
97
-
98
75
  const defaults = {
99
76
  single: {
100
77
  '/:resourceName': {
@@ -176,78 +153,62 @@ function parseRequest(request, options = {}) {
176
153
  };
177
154
  const params = {};
178
155
  let prefix = (options.prefix || '').trim().replace(/\/$/, '');
179
-
180
156
  if (prefix && !prefix.startsWith('/')) {
181
157
  prefix = `/${prefix}`;
182
158
  }
183
-
184
159
  const _request$type = request.type,
185
- type = _request$type === void 0 ? 'single' : _request$type;
186
-
160
+ type = _request$type === void 0 ? 'single' : _request$type;
187
161
  for (const path in defaults[type]) {
188
162
  const keys = [];
189
163
  const regexp = (0, _pathToRegexp().pathToRegexp)(`${prefix}${path}`, keys, {});
190
164
  const matches = regexp.exec(request.path);
191
-
192
165
  if (!matches) {
193
166
  continue;
194
167
  }
195
-
196
168
  keys.forEach((obj, index) => {
197
169
  if (matches[index + 1] === undefined) {
198
170
  return;
199
171
  }
200
-
201
172
  params[obj.name] = matches[index + 1];
202
173
  });
203
174
  params.actionName = _lodash().default.get(defaults, [type, path, request.method.toLowerCase()]);
204
175
  }
205
-
206
176
  if (Object.keys(params).length === 0) {
207
177
  return false;
208
178
  }
209
-
210
179
  if (params.resourceName) {
211
180
  const _params$resourceName$ = params.resourceName.split(':'),
212
- _params$resourceName$2 = _slicedToArray(_params$resourceName$, 2),
213
- resourceName = _params$resourceName$2[0],
214
- actionName = _params$resourceName$2[1];
215
-
181
+ _params$resourceName$2 = _slicedToArray(_params$resourceName$, 2),
182
+ resourceName = _params$resourceName$2[0],
183
+ actionName = _params$resourceName$2[1];
216
184
  if (actionName) {
217
185
  params.resourceName = resourceName;
218
186
  params.actionName = actionName;
219
187
  }
220
188
  }
221
-
222
189
  return params;
223
190
  }
224
-
225
191
  function parseQuery(input) {
226
192
  // 自带 query 处理的不太给力,需要用 qs 转一下
227
193
  const query = _qs().default.parse(input, {
228
194
  // 原始 query string 中如果一个键连等号“=”都没有可以被认为是 null 类型
229
- strictNullHandling: true // 逗号分隔转换为数组
195
+ strictNullHandling: true
196
+ // 逗号分隔转换为数组
230
197
  // comma: true,
231
-
232
- }); // filter 支持 json string
233
-
234
-
198
+ });
199
+ // filter 支持 json string
235
200
  if (typeof query.filter === 'string') {
236
201
  query.filter = JSON.parse(query.filter);
237
202
  }
238
-
239
203
  return query;
240
204
  }
241
-
242
205
  function parseFields(fields) {
243
206
  if (!fields) {
244
207
  return {};
245
208
  }
246
-
247
209
  if (typeof fields === 'string') {
248
210
  fields = fields.split(',').map(field => field.trim());
249
211
  }
250
-
251
212
  if (Array.isArray(fields)) {
252
213
  const onlyFields = [];
253
214
  const output = {};
@@ -258,46 +219,39 @@ function parseFields(fields) {
258
219
  if (item.only) {
259
220
  onlyFields.push(...item.only.toString().split(','));
260
221
  }
261
-
262
222
  Object.assign(output, parseFields(item));
263
223
  }
264
224
  });
265
-
266
225
  if (onlyFields.length) {
267
226
  output.only = onlyFields;
268
227
  }
269
-
270
228
  return output;
271
229
  }
272
-
273
230
  if (fields.only && typeof fields.only === 'string') {
274
231
  fields.only = fields.only.split(',').map(field => field.trim());
275
232
  }
276
-
277
233
  if (fields.except && typeof fields.except === 'string') {
278
234
  fields.except = fields.except.split(',').map(field => field.trim());
279
235
  }
280
-
281
236
  if (fields.appends && typeof fields.appends === 'string') {
282
237
  fields.appends = fields.appends.split(',').map(field => field.trim());
283
238
  }
284
-
285
239
  return fields;
286
240
  }
287
-
288
241
  function mergeFields(defaults, inputs) {
289
242
  let fields = {};
290
243
  defaults = parseFields(defaults);
291
244
  inputs = parseFields(inputs);
292
-
293
245
  if (inputs.only) {
294
246
  // 前端提供 only,后端提供 only
295
247
  if (defaults.only) {
296
248
  fields.only = defaults.only.filter(field => inputs.only.includes(field));
297
- } // 前端提供 only,后端提供 except,输出 only 排除 except
249
+ }
250
+ // 前端提供 only,后端提供 except,输出 only 排除 except
298
251
  else if (defaults.except) {
299
252
  fields.only = inputs.only.filter(field => !defaults.except.includes(field));
300
- } // 前端提供 only,后端没有提供 only 或 except
253
+ }
254
+ // 前端提供 only,后端没有提供 only 或 except
301
255
  else {
302
256
  fields.only = inputs.only;
303
257
  }
@@ -305,23 +259,22 @@ function mergeFields(defaults, inputs) {
305
259
  // 前端提供 except,后端提供 only,只输出 only 里排除 except 的字段
306
260
  if (defaults.only) {
307
261
  fields.only = defaults.only.filter(field => !inputs.except.includes(field));
308
- } // 前端提供 except,后端提供 except 或不提供,合并 except
262
+ }
263
+ // 前端提供 except,后端提供 except 或不提供,合并 except
309
264
  else {
310
265
  fields.except = _lodash().default.uniq([...inputs.except, ...(defaults.except || [])]);
311
266
  }
312
- } // 前端没提供 only 或 except
267
+ }
268
+ // 前端没提供 only 或 except
313
269
  else {
314
270
  fields = defaults;
315
- } // 如果前端提供了 appends
316
-
317
-
271
+ }
272
+ // 如果前端提供了 appends
318
273
  if (!_lodash().default.isEmpty(inputs.appends)) {
319
274
  fields.appends = _lodash().default.uniq([...inputs.appends, ...(defaults.appends || [])]);
320
275
  }
321
-
322
276
  if (!fields.appends) {
323
277
  fields.appends = [];
324
278
  }
325
-
326
279
  return fields;
327
280
  }
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@nocobase/resourcer",
3
- "version": "0.9.1-alpha.1",
3
+ "version": "0.9.2-alpha.1",
4
4
  "description": "",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",
7
7
  "license": "Apache-2.0",
8
8
  "dependencies": {
9
- "@nocobase/utils": "0.9.1-alpha.1",
9
+ "@nocobase/utils": "0.9.2-alpha.1",
10
10
  "deepmerge": "^4.2.2",
11
11
  "koa-compose": "^4.1.0",
12
12
  "lodash": "^4.17.21",
@@ -18,5 +18,5 @@
18
18
  "url": "git+https://github.com/nocobase/nocobase.git",
19
19
  "directory": "packages/resourcer"
20
20
  },
21
- "gitHead": "56cb184b00dc383b853015d525bf6e79dea92169"
21
+ "gitHead": "a4f103eb0144f07205aff7b2a6be8ea6aa1330df"
22
22
  }