@nocobase/resourcer
Advanced tools
Comparing version 0.13.0-alpha.4 to 0.13.0-alpha.5
@@ -1,65 +0,57 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
var __create = Object.create; | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __getProtoOf = Object.getPrototypeOf; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); | ||
var __export = (target, all) => { | ||
for (var name in all) | ||
__defProp(target, name, { get: all[name], enumerable: true }); | ||
}; | ||
var __copyProps = (to, from, except, desc) => { | ||
if (from && typeof from === "object" || typeof from === "function") { | ||
for (let key of __getOwnPropNames(from)) | ||
if (!__hasOwnProp.call(to, key) && key !== except) | ||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
} | ||
return to; | ||
}; | ||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( | ||
// If the importer is in node compatibility mode or this is not an ESM | ||
// file that has been converted to a CommonJS file using a Babel- | ||
// compatible transform (i.e. "__esModule" has not been set), then set | ||
// "default" to the CommonJS "module.exports" for node compatibility. | ||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, | ||
mod | ||
)); | ||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
var action_exports = {}; | ||
__export(action_exports, { | ||
Action: () => Action, | ||
default: () => action_default | ||
}); | ||
exports.default = exports.Action = void 0; | ||
function _utils() { | ||
const data = require("@nocobase/utils"); | ||
_utils = function _utils() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _koaCompose() { | ||
const data = _interopRequireDefault(require("koa-compose")); | ||
_koaCompose = function _koaCompose() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _lodash() { | ||
const data = _interopRequireDefault(require("lodash")); | ||
_lodash = function _lodash() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
var _middleware = _interopRequireDefault(require("./middleware")); | ||
const _excluded = ["middleware", "middlewares", "handler"]; | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
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); } } | ||
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); }); }; } | ||
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; } | ||
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; } | ||
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; } | ||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } | ||
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); } | ||
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; } | ||
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; } | ||
class Action { | ||
module.exports = __toCommonJS(action_exports); | ||
var import_utils = require("@nocobase/utils"); | ||
var import_koa_compose = __toESM(require("koa-compose")); | ||
var import_lodash = __toESM(require("lodash")); | ||
var import_middleware = __toESM(require("./middleware")); | ||
const _Action = class _Action { | ||
handler; | ||
resource; | ||
name; | ||
options; | ||
context = {}; | ||
params = {}; | ||
actionName; | ||
resourceName; | ||
resourceOf; | ||
middlewares = []; | ||
constructor(options) { | ||
this.handler = void 0; | ||
this.resource = void 0; | ||
this.name = void 0; | ||
this.options = void 0; | ||
this.context = {}; | ||
this.params = {}; | ||
this.actionName = void 0; | ||
this.resourceName = void 0; | ||
this.resourceOf = void 0; | ||
this.middlewares = []; | ||
options = (0, _utils().requireModule)(options); | ||
if (typeof options === 'function') { | ||
options = { | ||
handler: options | ||
}; | ||
options = (0, import_utils.requireModule)(options); | ||
if (typeof options === "function") { | ||
options = { handler: options }; | ||
} | ||
const _options = options, | ||
middleware = _options.middleware, | ||
_options$middlewares = _options.middlewares, | ||
middlewares = _options$middlewares === void 0 ? [] : _options$middlewares, | ||
handler = _options.handler, | ||
params = _objectWithoutProperties(_options, _excluded); | ||
this.middlewares = _middleware.default.toInstanceArray(middleware || middlewares); | ||
const { middleware, middlewares = [], handler, ...params } = options; | ||
this.middlewares = import_middleware.default.toInstanceArray(middleware || middlewares); | ||
this.handler = handler; | ||
@@ -78,6 +70,6 @@ this.options = options; | ||
clone() { | ||
const options = _lodash().default.cloneDeep(this.options); | ||
const options = import_lodash.default.cloneDeep(this.options); | ||
delete options.middleware; | ||
delete options.middlewares; | ||
const action = new Action(options); | ||
const action = new _Action(options); | ||
action.setName(this.name); | ||
@@ -98,11 +90,12 @@ action.setResource(this.resource); | ||
} | ||
(0, _utils().assign)(this.params, params, _objectSpread({ | ||
filter: 'andMerge', | ||
fields: 'intersect', | ||
appends: 'union', | ||
except: 'union', | ||
whitelist: 'intersect', | ||
blacklist: 'intersect', | ||
sort: 'overwrite' | ||
}, strategies)); | ||
(0, import_utils.assign)(this.params, params, { | ||
filter: "andMerge", | ||
fields: "intersect", | ||
appends: "union", | ||
except: "union", | ||
whitelist: "intersect", | ||
blacklist: "intersect", | ||
sort: "overwrite", | ||
...strategies | ||
}); | ||
} | ||
@@ -127,8 +120,8 @@ setResource(resource) { | ||
getMiddlewareHandlers() { | ||
return this.middlewares.filter(middleware => middleware.canAccess(this.name)).map(middleware => middleware.getHandler()); | ||
return this.middlewares.filter((middleware) => middleware.canAccess(this.name)).map((middleware) => middleware.getHandler()); | ||
} | ||
getHandler() { | ||
const handler = (0, _utils().requireModule)(this.handler || this.resource.resourcer.getRegisteredHandler(this.name)); | ||
if (typeof handler !== 'function') { | ||
throw new Error('Handler must be a function!'); | ||
const handler = (0, import_utils.requireModule)(this.handler || this.resource.resourcer.getRegisteredHandler(this.name)); | ||
if (typeof handler !== "function") { | ||
throw new Error("Handler must be a function!"); | ||
} | ||
@@ -138,28 +131,35 @@ return handler; | ||
getHandlers() { | ||
const handlers = [...this.resource.resourcer.getMiddlewares(), ...this.getMiddlewareHandlers(), this.getHandler()].filter(Boolean); | ||
const handlers = [ | ||
...this.resource.resourcer.getMiddlewares(), | ||
...this.getMiddlewareHandlers(), | ||
this.getHandler() | ||
].filter(Boolean); | ||
return handlers; | ||
} | ||
execute(context, next) { | ||
var _this = this; | ||
return _asyncToGenerator(function* () { | ||
return yield (0, _koaCompose().default)(_this.getHandlers())(context, next); | ||
})(); | ||
async execute(context, next) { | ||
return await (0, import_koa_compose.default)(this.getHandlers())(context, next); | ||
} | ||
static toInstanceMap(actions, resource) { | ||
return new Map(Object.entries(actions).map(([key, options]) => { | ||
let action; | ||
if (options instanceof Action) { | ||
action = options; | ||
} else { | ||
action = new Action(options); | ||
} | ||
action.setName(key); | ||
action.setResource(resource); | ||
resource && action.middlewares.unshift(...resource.middlewares); | ||
return [key, action]; | ||
})); | ||
return new Map( | ||
Object.entries(actions).map(([key, options]) => { | ||
let action; | ||
if (options instanceof _Action) { | ||
action = options; | ||
} else { | ||
action = new _Action(options); | ||
} | ||
action.setName(key); | ||
action.setResource(resource); | ||
resource && action.middlewares.unshift(...resource.middlewares); | ||
return [key, action]; | ||
}) | ||
); | ||
} | ||
} | ||
exports.Action = Action; | ||
var _default = Action; | ||
exports.default = _default; | ||
}; | ||
__name(_Action, "Action"); | ||
let Action = _Action; | ||
var action_default = Action; | ||
// Annotate the CommonJS export names for ESM import in node: | ||
0 && (module.exports = { | ||
Action | ||
}); |
@@ -1,2 +0,1 @@ | ||
import Resourcer from './resourcer'; | ||
export * from './utils'; | ||
@@ -7,2 +6,1 @@ export * from './middleware'; | ||
export * from './resourcer'; | ||
export default Resourcer; |
@@ -1,71 +0,29 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __copyProps = (to, from, except, desc) => { | ||
if (from && typeof from === "object" || typeof from === "function") { | ||
for (let key of __getOwnPropNames(from)) | ||
if (!__hasOwnProp.call(to, key) && key !== except) | ||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
} | ||
return to; | ||
}; | ||
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); | ||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
var src_exports = {}; | ||
module.exports = __toCommonJS(src_exports); | ||
__reExport(src_exports, require("./utils"), module.exports); | ||
__reExport(src_exports, require("./middleware"), module.exports); | ||
__reExport(src_exports, require("./action"), module.exports); | ||
__reExport(src_exports, require("./resource"), module.exports); | ||
__reExport(src_exports, require("./resourcer"), module.exports); | ||
// Annotate the CommonJS export names for ESM import in node: | ||
0 && (module.exports = { | ||
...require("./utils"), | ||
...require("./middleware"), | ||
...require("./action"), | ||
...require("./resource"), | ||
...require("./resourcer") | ||
}); | ||
var _exportNames = {}; | ||
exports.default = void 0; | ||
var _resourcer = _interopRequireWildcard(require("./resourcer")); | ||
Object.keys(_resourcer).forEach(function (key) { | ||
if (key === "default" || key === "__esModule") return; | ||
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; | ||
if (key in exports && exports[key] === _resourcer[key]) return; | ||
Object.defineProperty(exports, key, { | ||
enumerable: true, | ||
get: function get() { | ||
return _resourcer[key]; | ||
} | ||
}); | ||
}); | ||
var _utils = require("./utils"); | ||
Object.keys(_utils).forEach(function (key) { | ||
if (key === "default" || key === "__esModule") return; | ||
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; | ||
if (key in exports && exports[key] === _utils[key]) return; | ||
Object.defineProperty(exports, key, { | ||
enumerable: true, | ||
get: function get() { | ||
return _utils[key]; | ||
} | ||
}); | ||
}); | ||
var _middleware = require("./middleware"); | ||
Object.keys(_middleware).forEach(function (key) { | ||
if (key === "default" || key === "__esModule") return; | ||
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; | ||
if (key in exports && exports[key] === _middleware[key]) return; | ||
Object.defineProperty(exports, key, { | ||
enumerable: true, | ||
get: function get() { | ||
return _middleware[key]; | ||
} | ||
}); | ||
}); | ||
var _action = require("./action"); | ||
Object.keys(_action).forEach(function (key) { | ||
if (key === "default" || key === "__esModule") return; | ||
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; | ||
if (key in exports && exports[key] === _action[key]) return; | ||
Object.defineProperty(exports, key, { | ||
enumerable: true, | ||
get: function get() { | ||
return _action[key]; | ||
} | ||
}); | ||
}); | ||
var _resource = require("./resource"); | ||
Object.keys(_resource).forEach(function (key) { | ||
if (key === "default" || key === "__esModule") return; | ||
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; | ||
if (key in exports && exports[key] === _resource[key]) return; | ||
Object.defineProperty(exports, key, { | ||
enumerable: true, | ||
get: function get() { | ||
return _resource[key]; | ||
} | ||
}); | ||
}); | ||
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); } | ||
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; } | ||
var _default = _resourcer.default; | ||
exports.default = _default; |
@@ -1,33 +0,45 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
var __create = Object.create; | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __getProtoOf = Object.getPrototypeOf; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); | ||
var __export = (target, all) => { | ||
for (var name in all) | ||
__defProp(target, name, { get: all[name], enumerable: true }); | ||
}; | ||
var __copyProps = (to, from, except, desc) => { | ||
if (from && typeof from === "object" || typeof from === "function") { | ||
for (let key of __getOwnPropNames(from)) | ||
if (!__hasOwnProp.call(to, key) && key !== except) | ||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
} | ||
return to; | ||
}; | ||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( | ||
// If the importer is in node compatibility mode or this is not an ESM | ||
// file that has been converted to a CommonJS file using a Babel- | ||
// compatible transform (i.e. "__esModule" has not been set), then set | ||
// "default" to the CommonJS "module.exports" for node compatibility. | ||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, | ||
mod | ||
)); | ||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
var middleware_exports = {}; | ||
__export(middleware_exports, { | ||
Middleware: () => Middleware, | ||
branch: () => branch, | ||
default: () => middleware_default | ||
}); | ||
exports.Middleware = void 0; | ||
exports.branch = branch; | ||
exports.default = void 0; | ||
function _koaCompose() { | ||
const data = _interopRequireDefault(require("koa-compose")); | ||
_koaCompose = function _koaCompose() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _utils() { | ||
const data = require("@nocobase/utils"); | ||
_utils = function _utils() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
class Middleware { | ||
module.exports = __toCommonJS(middleware_exports); | ||
var import_koa_compose = __toESM(require("koa-compose")); | ||
var import_utils = require("@nocobase/utils"); | ||
const _Middleware = class _Middleware { | ||
options; | ||
middlewares = []; | ||
constructor(options) { | ||
this.options = void 0; | ||
this.middlewares = []; | ||
options = (0, _utils().requireModule)(options); | ||
if (typeof options === 'function') { | ||
this.options = { | ||
handler: options | ||
}; | ||
options = (0, import_utils.requireModule)(options); | ||
if (typeof options === "function") { | ||
this.options = { handler: options }; | ||
} else { | ||
@@ -38,7 +50,7 @@ this.options = options; | ||
getHandler() { | ||
const handler = (0, _utils().requireModule)(this.options.handler); | ||
if (typeof handler !== 'function') { | ||
throw new Error('Handler must be a function!'); | ||
const handler = (0, import_utils.requireModule)(this.options.handler); | ||
if (typeof handler !== "function") { | ||
throw new Error("Handler must be a function!"); | ||
} | ||
return (ctx, next) => (0, _koaCompose().default)([handler, ...this.middlewares])(ctx, next); | ||
return (ctx, next) => (0, import_koa_compose.default)([handler, ...this.middlewares])(ctx, next); | ||
} | ||
@@ -52,7 +64,3 @@ use(middleware) { | ||
canAccess(name) { | ||
const _this$options = this.options, | ||
_this$options$only = _this$options.only, | ||
only = _this$options$only === void 0 ? [] : _this$options$only, | ||
_this$options$except = _this$options.except, | ||
except = _this$options$except === void 0 ? [] : _this$options$except; | ||
const { only = [], except = [] } = this.options; | ||
if (only.length > 0) { | ||
@@ -73,20 +81,18 @@ return only.includes(name); | ||
} | ||
return middlewares.map(middleware => { | ||
if (middleware instanceof Middleware) { | ||
return middlewares.map((middleware) => { | ||
if (middleware instanceof _Middleware) { | ||
return middleware; | ||
} | ||
if (typeof middleware === 'object') { | ||
return new Middleware(middleware); | ||
if (typeof middleware === "object") { | ||
return new _Middleware(middleware); | ||
} | ||
if (typeof middleware === 'function') { | ||
return new Middleware({ | ||
handler: middleware | ||
}); | ||
if (typeof middleware === "function") { | ||
return new _Middleware({ handler: middleware }); | ||
} | ||
}); | ||
} | ||
} | ||
exports.Middleware = Middleware; | ||
var _default = Middleware; | ||
exports.default = _default; | ||
}; | ||
__name(_Middleware, "Middleware"); | ||
let Middleware = _Middleware; | ||
var middleware_default = Middleware; | ||
function branch(map = {}, reducer, options = {}) { | ||
@@ -104,2 +110,8 @@ return (ctx, next) => { | ||
}; | ||
} | ||
} | ||
__name(branch, "branch"); | ||
// Annotate the CommonJS export names for ESM import in node: | ||
0 && (module.exports = { | ||
Middleware, | ||
branch | ||
}); |
import Action, { ActionName, ActionType } from './action'; | ||
import Middleware, { MiddlewareType } from './middleware'; | ||
import Resourcer from './resourcer'; | ||
import { Resourcer } from './resourcer'; | ||
export type ResourceType = 'single' | 'hasOne' | 'hasMany' | 'belongsTo' | 'belongsToMany'; | ||
@@ -5,0 +5,0 @@ export interface ResourceOptions { |
@@ -1,58 +0,54 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
var __create = Object.create; | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __getProtoOf = Object.getPrototypeOf; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); | ||
var __export = (target, all) => { | ||
for (var name in all) | ||
__defProp(target, name, { get: all[name], enumerable: true }); | ||
}; | ||
var __copyProps = (to, from, except, desc) => { | ||
if (from && typeof from === "object" || typeof from === "function") { | ||
for (let key of __getOwnPropNames(from)) | ||
if (!__hasOwnProp.call(to, key) && key !== except) | ||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
} | ||
return to; | ||
}; | ||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( | ||
// If the importer is in node compatibility mode or this is not an ESM | ||
// file that has been converted to a CommonJS file using a Babel- | ||
// compatible transform (i.e. "__esModule" has not been set), then set | ||
// "default" to the CommonJS "module.exports" for node compatibility. | ||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, | ||
mod | ||
)); | ||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
var resource_exports = {}; | ||
__export(resource_exports, { | ||
Resource: () => Resource, | ||
default: () => resource_default | ||
}); | ||
exports.default = exports.Resource = void 0; | ||
function _lodash() { | ||
const data = _interopRequireDefault(require("lodash")); | ||
_lodash = function _lodash() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
var _action = _interopRequireDefault(require("./action")); | ||
var _middleware = _interopRequireDefault(require("./middleware")); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } | ||
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."); } | ||
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; } } | ||
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } | ||
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; } } }; } | ||
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); } | ||
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; } | ||
class Resource { | ||
module.exports = __toCommonJS(resource_exports); | ||
var import_lodash = __toESM(require("lodash")); | ||
var import_action = __toESM(require("./action")); | ||
var import_middleware = __toESM(require("./middleware")); | ||
const _Resource = class _Resource { | ||
resourcer; | ||
middlewares; | ||
actions = /* @__PURE__ */ new Map(); | ||
options; | ||
except; | ||
constructor(options, resourcer) { | ||
this.resourcer = void 0; | ||
this.middlewares = void 0; | ||
this.actions = new Map(); | ||
this.options = void 0; | ||
this.except = void 0; | ||
const middleware = options.middleware, | ||
middlewares = options.middlewares, | ||
_options$actions = options.actions, | ||
actions = _options$actions === void 0 ? {} : _options$actions, | ||
_options$only = options.only, | ||
only = _options$only === void 0 ? [] : _options$only, | ||
_options$except = options.except, | ||
except = _options$except === void 0 ? [] : _options$except; | ||
const { middleware, middlewares, actions = {}, only = [], except = [] } = options; | ||
this.options = options; | ||
this.resourcer = resourcer; | ||
this.middlewares = _middleware.default.toInstanceArray(middleware || middlewares); | ||
this.middlewares = import_middleware.default.toInstanceArray(middleware || middlewares); | ||
let excludes = []; | ||
var _iterator = _createForOfIteratorHelper(resourcer.getRegisteredHandlers()), | ||
_step; | ||
try { | ||
for (_iterator.s(); !(_step = _iterator.n()).done;) { | ||
const _step$value = _slicedToArray(_step.value, 2), | ||
name = _step$value[0], | ||
handler = _step$value[1]; | ||
if (!actions[name]) { | ||
actions[name] = handler; | ||
} | ||
for (const [name, handler] of resourcer.getRegisteredHandlers()) { | ||
if (!actions[name]) { | ||
actions[name] = handler; | ||
} | ||
} catch (err) { | ||
_iterator.e(err); | ||
} finally { | ||
_iterator.f(); | ||
} | ||
@@ -62,6 +58,6 @@ if (except.length > 0) { | ||
} else if (only.length > 0) { | ||
excludes = Object.keys(actions).filter(name => !only.includes(name)); | ||
excludes = Object.keys(actions).filter((name) => !only.includes(name)); | ||
} | ||
this.except = excludes; | ||
this.actions = _action.default.toInstanceMap(_lodash().default.omit(actions, excludes), this); | ||
this.actions = import_action.default.toInstanceMap(import_lodash.default.omit(actions, excludes), this); | ||
} | ||
@@ -83,5 +79,9 @@ getName() { | ||
} | ||
} | ||
exports.Resource = Resource; | ||
var _default = Resource; | ||
exports.default = _default; | ||
}; | ||
__name(_Resource, "Resource"); | ||
let Resource = _Resource; | ||
var resource_default = Resource; | ||
// Annotate the CommonJS export names for ESM import in node: | ||
0 && (module.exports = { | ||
Resource | ||
}); |
@@ -1,71 +0,55 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
var __create = Object.create; | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __getProtoOf = Object.getPrototypeOf; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); | ||
var __export = (target, all) => { | ||
for (var name in all) | ||
__defProp(target, name, { get: all[name], enumerable: true }); | ||
}; | ||
var __copyProps = (to, from, except, desc) => { | ||
if (from && typeof from === "object" || typeof from === "function") { | ||
for (let key of __getOwnPropNames(from)) | ||
if (!__hasOwnProp.call(to, key) && key !== except) | ||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
} | ||
return to; | ||
}; | ||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( | ||
// If the importer is in node compatibility mode or this is not an ESM | ||
// file that has been converted to a CommonJS file using a Babel- | ||
// compatible transform (i.e. "__esModule" has not been set), then set | ||
// "default" to the CommonJS "module.exports" for node compatibility. | ||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, | ||
mod | ||
)); | ||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
var resourcer_exports = {}; | ||
__export(resourcer_exports, { | ||
Resourcer: () => Resourcer, | ||
default: () => resourcer_default | ||
}); | ||
exports.default = exports.Resourcer = void 0; | ||
function _utils() { | ||
const data = require("@nocobase/utils"); | ||
_utils = function _utils() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _glob() { | ||
const data = _interopRequireDefault(require("glob")); | ||
_glob = function _glob() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _koaCompose() { | ||
const data = _interopRequireDefault(require("koa-compose")); | ||
_koaCompose = function _koaCompose() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _lodash() { | ||
const data = _interopRequireDefault(require("lodash")); | ||
_lodash = function _lodash() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _pathToRegexp() { | ||
const data = require("path-to-regexp"); | ||
_pathToRegexp = function _pathToRegexp() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
var _resource = _interopRequireDefault(require("./resource")); | ||
var _utils2 = require("./utils"); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
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; } | ||
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; } | ||
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; } | ||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } | ||
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); } | ||
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); } } | ||
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); }); }; } | ||
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } | ||
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."); } | ||
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); } | ||
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; } | ||
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; } } | ||
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } | ||
class Resourcer { | ||
module.exports = __toCommonJS(resourcer_exports); | ||
var import_utils = require("@nocobase/utils"); | ||
var import_glob = __toESM(require("glob")); | ||
var import_koa_compose = __toESM(require("koa-compose")); | ||
var import_lodash = __toESM(require("lodash")); | ||
var import_path_to_regexp = require("path-to-regexp"); | ||
var import_resource = __toESM(require("./resource")); | ||
var import_utils2 = require("./utils"); | ||
const _Resourcer = class _Resourcer { | ||
resources = /* @__PURE__ */ new Map(); | ||
/** | ||
* 全局定义的 action handlers | ||
*/ | ||
handlers = /* @__PURE__ */ new Map(); | ||
actionHandlers = /* @__PURE__ */ new Map(); | ||
middlewareHandlers = /* @__PURE__ */ new Map(); | ||
middlewares; | ||
options; | ||
constructor(options = {}) { | ||
this.resources = new Map(); | ||
/** | ||
* 全局定义的 action handlers | ||
*/ | ||
this.handlers = new Map(); | ||
this.actionHandlers = new Map(); | ||
this.middlewareHandlers = new Map(); | ||
this.middlewares = void 0; | ||
this.options = void 0; | ||
this.options = options; | ||
this.middlewares = new (_utils().Toposort)(); | ||
this.middlewares = new import_utils.Toposort(); | ||
} | ||
@@ -82,13 +66,11 @@ /** | ||
import(options) { | ||
const _options$extensions = options.extensions, | ||
extensions = _options$extensions === void 0 ? ['js', 'ts', 'json'] : _options$extensions, | ||
directory = options.directory; | ||
const patten = `${directory}/*.{${extensions.join(',')}}`; | ||
const files = _glob().default.sync(patten, { | ||
ignore: ['**/*.d.ts'] | ||
const { extensions = ["js", "ts", "json"], directory } = options; | ||
const patten = `${directory}/*.{${extensions.join(",")}}`; | ||
const files = import_glob.default.sync(patten, { | ||
ignore: ["**/*.d.ts"] | ||
}); | ||
const resources = new Map(); | ||
files.forEach(file => { | ||
const options = (0, _utils().requireModule)(file); | ||
const table = this.define(typeof options === 'function' ? options(this) : options); | ||
const resources = /* @__PURE__ */ new Map(); | ||
files.forEach((file) => { | ||
const options2 = (0, import_utils.requireModule)(file); | ||
const table = this.define(typeof options2 === "function" ? options2(this) : options2); | ||
resources.set(table.getName(), table); | ||
@@ -105,4 +87,4 @@ }); | ||
define(options) { | ||
const name = options.name; | ||
const resource = new _resource.default(options, this); | ||
const { name } = options; | ||
const resource = new import_resource.default(options, this); | ||
this.resources.set(name, resource); | ||
@@ -129,6 +111,3 @@ return resource; | ||
registerActionHandlers(handlers) { | ||
for (var _i = 0, _Object$entries = Object.entries(handlers); _i < _Object$entries.length; _i++) { | ||
const _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2), | ||
name = _Object$entries$_i[0], | ||
handler = _Object$entries$_i[1]; | ||
for (const [name, handler] of Object.entries(handlers)) { | ||
this.registerActionHandler(name, handler); | ||
@@ -153,3 +132,2 @@ } | ||
getAction(name, action) { | ||
// 支持注册局部 action | ||
if (this.actionHandlers.has(`${name}:${action}`)) { | ||
@@ -166,60 +144,61 @@ return this.getResource(name).getAction(`${name}:${action}`); | ||
} | ||
restApiMiddleware({ | ||
prefix, | ||
accessors | ||
} = {}) { | ||
var _this = this; | ||
return /*#__PURE__*/function () { | ||
var _ref = _asyncToGenerator(function* (ctx, next) { | ||
ctx.resourcer = _this; | ||
let params = (0, _utils2.parseRequest)({ | ||
restApiMiddleware({ prefix, accessors } = {}) { | ||
return async (ctx, next) => { | ||
ctx.resourcer = this; | ||
let params = (0, import_utils2.parseRequest)( | ||
{ | ||
path: ctx.request.path, | ||
method: ctx.request.method | ||
}, { | ||
prefix: _this.options.prefix || prefix, | ||
accessors: _this.options.accessors || accessors | ||
}); | ||
if (!params) { | ||
return next(); | ||
}, | ||
{ | ||
prefix: this.options.prefix || prefix, | ||
accessors: this.options.accessors || accessors | ||
} | ||
try { | ||
const resource = _this.getResource((0, _utils2.getNameByParams)(params)); | ||
// 为关系资源时,暂时需要再执行一遍 parseRequest | ||
if (resource.options.type && resource.options.type !== 'single') { | ||
params = (0, _utils2.parseRequest)({ | ||
); | ||
if (!params) { | ||
return next(); | ||
} | ||
try { | ||
const resource = this.getResource((0, import_utils2.getNameByParams)(params)); | ||
if (resource.options.type && resource.options.type !== "single") { | ||
params = (0, import_utils2.parseRequest)( | ||
{ | ||
path: ctx.request.path, | ||
method: ctx.request.method, | ||
type: resource.options.type | ||
}, { | ||
prefix: _this.options.prefix || prefix, | ||
accessors: _this.options.accessors || accessors | ||
}); | ||
if (!params) { | ||
return next(); | ||
}, | ||
{ | ||
prefix: this.options.prefix || prefix, | ||
accessors: this.options.accessors || accessors | ||
} | ||
); | ||
if (!params) { | ||
return next(); | ||
} | ||
// action 需要 clone 之后再赋给 ctx | ||
ctx.action = _this.getAction((0, _utils2.getNameByParams)(params), params.actionName).clone(); | ||
ctx.action.setContext(ctx); | ||
ctx.action.actionName = params.actionName; | ||
ctx.action.resourceOf = params.associatedIndex; | ||
ctx.action.resourceName = params.associatedName ? `${params.associatedName}.${params.resourceName}` : params.resourceName; | ||
ctx.action.params.filterByTk = params.resourceIndex; | ||
const query = (0, _utils2.parseQuery)(ctx.request.querystring); | ||
if ((0, _pathToRegexp().pathToRegexp)('/resourcer/{:associatedName.}?:resourceName{\\::actionName}').test(ctx.request.path)) { | ||
ctx.action.mergeParams(_objectSpread(_objectSpread(_objectSpread({}, query), params), ctx.request.body)); | ||
} else { | ||
ctx.action.mergeParams(_objectSpread(_objectSpread(_objectSpread({}, query), params), _lodash().default.isEmpty(ctx.request.body) ? {} : { | ||
values: ctx.request.body | ||
})); | ||
} | ||
return (0, _koaCompose().default)(ctx.action.getHandlers())(ctx, next); | ||
} catch (error) { | ||
return next(); | ||
} | ||
}); | ||
return function (_x2, _x3) { | ||
return _ref.apply(this, arguments); | ||
}; | ||
}(); | ||
ctx.action = this.getAction((0, import_utils2.getNameByParams)(params), params.actionName).clone(); | ||
ctx.action.setContext(ctx); | ||
ctx.action.actionName = params.actionName; | ||
ctx.action.resourceOf = params.associatedIndex; | ||
ctx.action.resourceName = params.associatedName ? `${params.associatedName}.${params.resourceName}` : params.resourceName; | ||
ctx.action.params.filterByTk = params.resourceIndex; | ||
const query = (0, import_utils2.parseQuery)(ctx.request.querystring); | ||
if ((0, import_path_to_regexp.pathToRegexp)("/resourcer/{:associatedName.}?:resourceName{\\::actionName}").test(ctx.request.path)) { | ||
ctx.action.mergeParams({ | ||
...query, | ||
...params, | ||
...ctx.request.body | ||
}); | ||
} else { | ||
ctx.action.mergeParams({ | ||
...query, | ||
...params, | ||
...import_lodash.default.isEmpty(ctx.request.body) ? {} : { values: ctx.request.body } | ||
}); | ||
} | ||
return (0, import_koa_compose.default)(ctx.action.getHandlers())(ctx, next); | ||
} catch (error) { | ||
return next(); | ||
} | ||
}; | ||
} | ||
@@ -236,15 +215,15 @@ middleware(options = {}) { | ||
*/ | ||
execute(options, context = {}, next) { | ||
var _this2 = this; | ||
return _asyncToGenerator(function* () { | ||
const resource = options.resource, | ||
action = options.action; | ||
context.resourcer = _this2; | ||
context.action = _this2.getAction(resource, action); | ||
return yield context.action.execute(context, next); | ||
})(); | ||
async execute(options, context = {}, next) { | ||
const { resource, action } = options; | ||
context.resourcer = this; | ||
context.action = this.getAction(resource, action); | ||
return await context.action.execute(context, next); | ||
} | ||
} | ||
exports.Resourcer = Resourcer; | ||
var _default = Resourcer; | ||
exports.default = _default; | ||
}; | ||
__name(_Resourcer, "Resourcer"); | ||
let Resourcer = _Resourcer; | ||
var resourcer_default = Resourcer; | ||
// Annotate the CommonJS export names for ESM import in node: | ||
0 && (module.exports = { | ||
Resourcer | ||
}); |
245
lib/utils.js
@@ -1,78 +0,76 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
var __create = Object.create; | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __getProtoOf = Object.getPrototypeOf; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); | ||
var __export = (target, all) => { | ||
for (var name in all) | ||
__defProp(target, name, { get: all[name], enumerable: true }); | ||
}; | ||
var __copyProps = (to, from, except, desc) => { | ||
if (from && typeof from === "object" || typeof from === "function") { | ||
for (let key of __getOwnPropNames(from)) | ||
if (!__hasOwnProp.call(to, key) && key !== except) | ||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
} | ||
return to; | ||
}; | ||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( | ||
// If the importer is in node compatibility mode or this is not an ESM | ||
// file that has been converted to a CommonJS file using a Babel- | ||
// compatible transform (i.e. "__esModule" has not been set), then set | ||
// "default" to the CommonJS "module.exports" for node compatibility. | ||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, | ||
mod | ||
)); | ||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
var utils_exports = {}; | ||
__export(utils_exports, { | ||
getNameByParams: () => getNameByParams, | ||
mergeFields: () => mergeFields, | ||
parseFields: () => parseFields, | ||
parseQuery: () => parseQuery, | ||
parseRequest: () => parseRequest | ||
}); | ||
exports.getNameByParams = getNameByParams; | ||
exports.mergeFields = mergeFields; | ||
exports.parseFields = parseFields; | ||
exports.parseQuery = parseQuery; | ||
exports.parseRequest = parseRequest; | ||
function _lodash() { | ||
const data = _interopRequireDefault(require("lodash")); | ||
_lodash = function _lodash() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _pathToRegexp() { | ||
const data = require("path-to-regexp"); | ||
_pathToRegexp = function _pathToRegexp() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _qs() { | ||
const data = _interopRequireDefault(require("qs")); | ||
_qs = function _qs() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } | ||
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."); } | ||
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); } | ||
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; } | ||
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; } } | ||
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } | ||
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; } | ||
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; } | ||
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; } | ||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } | ||
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 | ||
module.exports = __toCommonJS(utils_exports); | ||
var import_lodash = __toESM(require("lodash")); | ||
var import_path_to_regexp = require("path-to-regexp"); | ||
var import_qs = __toESM(require("qs")); | ||
function getNameByParams(params) { | ||
const resourceName = params.resourceName, | ||
associatedName = params.associatedName; | ||
const { resourceName, associatedName } = params; | ||
return associatedName ? `${associatedName}.${resourceName}` : resourceName; | ||
} | ||
__name(getNameByParams, "getNameByParams"); | ||
function parseRequest(request, options = {}) { | ||
const accessors = _objectSpread({ | ||
const accessors = { | ||
// 常规 actions | ||
list: 'list', | ||
create: 'create', | ||
get: 'get', | ||
update: 'update', | ||
delete: 'destroy', | ||
list: "list", | ||
create: "create", | ||
get: "get", | ||
update: "update", | ||
delete: "destroy", | ||
// associate 操作 | ||
add: 'add', | ||
set: 'set', | ||
remove: 'remove' | ||
}, options.accessors || {}); | ||
add: "add", | ||
set: "set", | ||
remove: "remove", | ||
...options.accessors || {} | ||
}; | ||
const keys = []; | ||
const regexp = (0, _pathToRegexp().pathToRegexp)('/resourcer/{:associatedName.}?:resourceName{\\::actionName}', keys); | ||
const regexp = (0, import_path_to_regexp.pathToRegexp)("/resourcer/{:associatedName.}?:resourceName{\\::actionName}", keys); | ||
const matches = regexp.exec(request.path); | ||
if (matches) { | ||
const params = {}; | ||
const params2 = {}; | ||
keys.forEach((obj, index) => { | ||
if (matches[index + 1] === undefined) { | ||
if (matches[index + 1] === void 0) { | ||
return; | ||
} | ||
params[obj.name] = matches[index + 1]; | ||
params2[obj.name] = matches[index + 1]; | ||
}); | ||
return params; | ||
return params2; | ||
} | ||
const defaults = { | ||
single: { | ||
'/:resourceName': { | ||
"/:resourceName": { | ||
get: accessors.list, | ||
@@ -82,3 +80,3 @@ post: accessors.create, | ||
}, | ||
'/:resourceName/:resourceIndex': { | ||
"/:resourceName/:resourceIndex": { | ||
get: accessors.get, | ||
@@ -89,3 +87,3 @@ put: accessors.update, | ||
}, | ||
'/:associatedName/:associatedIndex/:resourceName': { | ||
"/:associatedName/:associatedIndex/:resourceName": { | ||
get: accessors.list, | ||
@@ -95,3 +93,3 @@ post: accessors.create, | ||
}, | ||
'/:associatedName/:associatedIndex/:resourceName/:resourceIndex': { | ||
"/:associatedName/:associatedIndex/:resourceName/:resourceIndex": { | ||
get: accessors.get, | ||
@@ -105,3 +103,3 @@ post: accessors.create, | ||
hasOne: { | ||
'/:associatedName/:associatedIndex/:resourceName': { | ||
"/:associatedName/:associatedIndex/:resourceName": { | ||
get: accessors.get, | ||
@@ -115,3 +113,3 @@ post: accessors.update, | ||
hasMany: { | ||
'/:associatedName/:associatedIndex/:resourceName': { | ||
"/:associatedName/:associatedIndex/:resourceName": { | ||
get: accessors.list, | ||
@@ -121,3 +119,3 @@ post: accessors.create, | ||
}, | ||
'/:associatedName/:associatedIndex/:resourceName/:resourceIndex': { | ||
"/:associatedName/:associatedIndex/:resourceName/:resourceIndex": { | ||
get: accessors.get, | ||
@@ -131,7 +129,7 @@ post: accessors.create, | ||
belongsTo: { | ||
'/:associatedName/:associatedIndex/:resourceName': { | ||
"/:associatedName/:associatedIndex/:resourceName": { | ||
get: accessors.get, | ||
delete: accessors.remove | ||
}, | ||
'/:associatedName/:associatedIndex/:resourceName/:resourceIndex': { | ||
"/:associatedName/:associatedIndex/:resourceName/:resourceIndex": { | ||
post: accessors.set | ||
@@ -141,11 +139,13 @@ } | ||
belongsToMany: { | ||
'/:associatedName/:associatedIndex/:resourceName': { | ||
"/:associatedName/:associatedIndex/:resourceName": { | ||
get: accessors.list, | ||
post: accessors.set | ||
}, | ||
'/:associatedName/:associatedIndex/:resourceName/:resourceIndex': { | ||
"/:associatedName/:associatedIndex/:resourceName/:resourceIndex": { | ||
get: accessors.get, | ||
post: accessors.add, | ||
put: accessors.update, | ||
// Many to Many 的 update 是针对 through | ||
patch: accessors.update, | ||
// Many to Many 的 update 是针对 through | ||
delete: accessors.remove | ||
@@ -155,3 +155,3 @@ } | ||
set: { | ||
'/:associatedName/:associatedIndex/:resourceName': { | ||
"/:associatedName/:associatedIndex/:resourceName": { | ||
get: accessors.list, | ||
@@ -164,22 +164,21 @@ post: accessors.add, | ||
const params = {}; | ||
let prefix = (options.prefix || '').trim().replace(/\/$/, ''); | ||
if (prefix && !prefix.startsWith('/')) { | ||
let prefix = (options.prefix || "").trim().replace(/\/$/, ""); | ||
if (prefix && !prefix.startsWith("/")) { | ||
prefix = `/${prefix}`; | ||
} | ||
const _request$type = request.type, | ||
type = _request$type === void 0 ? 'single' : _request$type; | ||
const { type = "single" } = request; | ||
for (const path in defaults[type]) { | ||
const keys = []; | ||
const regexp = (0, _pathToRegexp().pathToRegexp)(`${prefix}${path}`, keys, {}); | ||
const matches = regexp.exec(request.path); | ||
if (!matches) { | ||
const keys2 = []; | ||
const regexp2 = (0, import_path_to_regexp.pathToRegexp)(`${prefix}${path}`, keys2, {}); | ||
const matches2 = regexp2.exec(request.path); | ||
if (!matches2) { | ||
continue; | ||
} | ||
keys.forEach((obj, index) => { | ||
if (matches[index + 1] === undefined) { | ||
keys2.forEach((obj, index) => { | ||
if (matches2[index + 1] === void 0) { | ||
return; | ||
} | ||
params[obj.name] = matches[index + 1]; | ||
params[obj.name] = matches2[index + 1]; | ||
}); | ||
params.actionName = _lodash().default.get(defaults, [type, path, request.method.toLowerCase()]); | ||
params.actionName = import_lodash.default.get(defaults, [type, path, request.method.toLowerCase()]); | ||
} | ||
@@ -190,6 +189,3 @@ if (Object.keys(params).length === 0) { | ||
if (params.resourceName) { | ||
const _params$resourceName$ = params.resourceName.split(':'), | ||
_params$resourceName$2 = _slicedToArray(_params$resourceName$, 2), | ||
resourceName = _params$resourceName$2[0], | ||
actionName = _params$resourceName$2[1]; | ||
const [resourceName, actionName] = params.resourceName.split(":"); | ||
if (actionName) { | ||
@@ -202,5 +198,5 @@ params.resourceName = resourceName; | ||
} | ||
__name(parseRequest, "parseRequest"); | ||
function parseQuery(input) { | ||
// 自带 query 处理的不太给力,需要用 qs 转一下 | ||
const query = _qs().default.parse(input, { | ||
const query = import_qs.default.parse(input, { | ||
// 原始 query string 中如果一个键连等号“=”都没有可以被认为是 null 类型 | ||
@@ -211,4 +207,3 @@ strictNullHandling: true | ||
}); | ||
// filter 支持 json string | ||
if (typeof query.filter === 'string') { | ||
if (typeof query.filter === "string") { | ||
query.filter = JSON.parse(query.filter); | ||
@@ -218,2 +213,3 @@ } | ||
} | ||
__name(parseQuery, "parseQuery"); | ||
function parseFields(fields) { | ||
@@ -223,4 +219,4 @@ if (!fields) { | ||
} | ||
if (typeof fields === 'string') { | ||
fields = fields.split(',').map(field => field.trim()); | ||
if (typeof fields === "string") { | ||
fields = fields.split(",").map((field) => field.trim()); | ||
} | ||
@@ -230,8 +226,8 @@ if (Array.isArray(fields)) { | ||
const output = {}; | ||
fields.forEach(item => { | ||
if (typeof item === 'string') { | ||
fields.forEach((item) => { | ||
if (typeof item === "string") { | ||
onlyFields.push(item); | ||
} else if (typeof item === 'object') { | ||
} else if (typeof item === "object") { | ||
if (item.only) { | ||
onlyFields.push(...item.only.toString().split(',')); | ||
onlyFields.push(...item.only.toString().split(",")); | ||
} | ||
@@ -246,13 +242,14 @@ Object.assign(output, parseFields(item)); | ||
} | ||
if (fields.only && typeof fields.only === 'string') { | ||
fields.only = fields.only.split(',').map(field => field.trim()); | ||
if (fields.only && typeof fields.only === "string") { | ||
fields.only = fields.only.split(",").map((field) => field.trim()); | ||
} | ||
if (fields.except && typeof fields.except === 'string') { | ||
fields.except = fields.except.split(',').map(field => field.trim()); | ||
if (fields.except && typeof fields.except === "string") { | ||
fields.except = fields.except.split(",").map((field) => field.trim()); | ||
} | ||
if (fields.appends && typeof fields.appends === 'string') { | ||
fields.appends = fields.appends.split(',').map(field => field.trim()); | ||
if (fields.appends && typeof fields.appends === "string") { | ||
fields.appends = fields.appends.split(",").map((field) => field.trim()); | ||
} | ||
return fields; | ||
} | ||
__name(parseFields, "parseFields"); | ||
function mergeFields(defaults, inputs) { | ||
@@ -263,31 +260,20 @@ let fields = {}; | ||
if (inputs.only) { | ||
// 前端提供 only,后端提供 only | ||
if (defaults.only) { | ||
fields.only = defaults.only.filter(field => inputs.only.includes(field)); | ||
} | ||
// 前端提供 only,后端提供 except,输出 only 排除 except | ||
else if (defaults.except) { | ||
fields.only = inputs.only.filter(field => !defaults.except.includes(field)); | ||
} | ||
// 前端提供 only,后端没有提供 only 或 except | ||
else { | ||
fields.only = defaults.only.filter((field) => inputs.only.includes(field)); | ||
} else if (defaults.except) { | ||
fields.only = inputs.only.filter((field) => !defaults.except.includes(field)); | ||
} else { | ||
fields.only = inputs.only; | ||
} | ||
} else if (inputs.except) { | ||
// 前端提供 except,后端提供 only,只输出 only 里排除 except 的字段 | ||
if (defaults.only) { | ||
fields.only = defaults.only.filter(field => !inputs.except.includes(field)); | ||
fields.only = defaults.only.filter((field) => !inputs.except.includes(field)); | ||
} else { | ||
fields.except = import_lodash.default.uniq([...inputs.except, ...defaults.except || []]); | ||
} | ||
// 前端提供 except,后端提供 except 或不提供,合并 except | ||
else { | ||
fields.except = _lodash().default.uniq([...inputs.except, ...(defaults.except || [])]); | ||
} | ||
} | ||
// 前端没提供 only 或 except | ||
else { | ||
} else { | ||
fields = defaults; | ||
} | ||
// 如果前端提供了 appends | ||
if (!_lodash().default.isEmpty(inputs.appends)) { | ||
fields.appends = _lodash().default.uniq([...inputs.appends, ...(defaults.appends || [])]); | ||
if (!import_lodash.default.isEmpty(inputs.appends)) { | ||
fields.appends = import_lodash.default.uniq([...inputs.appends, ...defaults.appends || []]); | ||
} | ||
@@ -298,2 +284,11 @@ if (!fields.appends) { | ||
return fields; | ||
} | ||
} | ||
__name(mergeFields, "mergeFields"); | ||
// Annotate the CommonJS export names for ESM import in node: | ||
0 && (module.exports = { | ||
getNameByParams, | ||
mergeFields, | ||
parseFields, | ||
parseQuery, | ||
parseRequest | ||
}); |
{ | ||
"name": "@nocobase/resourcer", | ||
"version": "0.13.0-alpha.4", | ||
"version": "0.13.0-alpha.5", | ||
"description": "", | ||
@@ -9,3 +9,3 @@ "main": "./lib/index.js", | ||
"dependencies": { | ||
"@nocobase/utils": "0.13.0-alpha.4", | ||
"@nocobase/utils": "0.13.0-alpha.5", | ||
"deepmerge": "^4.2.2", | ||
@@ -22,3 +22,3 @@ "koa-compose": "^4.1.0", | ||
}, | ||
"gitHead": "29594e9dbb2455e2f3f6bea95340c4ed75789b61" | ||
"gitHead": "9eabe607b4a20c356fdb2fd95e40fa476986dcb0" | ||
} |
55371
1383
+ Added@nocobase/utils@0.13.0-alpha.5(transitive)
- Removed@nocobase/utils@0.13.0-alpha.4(transitive)