miragejs
Version:
A client-side server to help you build, test and demo your JavaScript app
76 lines (64 loc) • 2.17 kB
JavaScript
import BaseRouteHandler from "./base";
import assert from "../assert";
import { dasherize } from "../utils/inflector";
/**
* @hide
*/
export default class FunctionRouteHandler extends BaseRouteHandler {
constructor(schema, serializerOrRegistry, userFunction, path, server) {
super(server);
this.schema = schema;
this.serializerOrRegistry = serializerOrRegistry;
this.userFunction = userFunction;
this.path = path;
}
handle(request) {
return this.userFunction(this.schema, request);
}
setRequest(request) {
this.request = request;
}
serialize(response, serializerType) {
let serializer;
if (serializerType) {
serializer = this.serializerOrRegistry.serializerFor(serializerType, {
explicit: true,
});
} else {
serializer = this.serializerOrRegistry;
}
return serializer.serialize(response, this.request);
}
normalizedRequestAttrs(modelName = null) {
let {
path,
request,
request: { requestHeaders },
} = this;
let attrs;
let lowerCaseHeaders = {};
for (let header in requestHeaders) {
lowerCaseHeaders[header.toLowerCase()] = requestHeaders[header];
}
if (/x-www-form-urlencoded/.test(lowerCaseHeaders["content-type"])) {
attrs = this._getAttrsForFormRequest(request);
} else {
if (modelName) {
assert(
dasherize(modelName) === modelName,
`You called normalizedRequestAttrs('${modelName}'), but normalizedRequestAttrs was intended to be used with the dasherized version of the model type. Please change this to normalizedRequestAttrs('${dasherize(
modelName
)}').`
);
} else {
modelName = this.getModelClassFromPath(path);
}
assert(
this.schema.hasModelForModelName(modelName),
`You're using a shorthand or the #normalizedRequestAttrs helper but the detected model of '${modelName}' does not exist. You might need to pass in the correct modelName as the first argument to #normalizedRequestAttrs.`
);
attrs = this._getAttrsForRequest(request, modelName);
}
return attrs;
}
}