38e93c19b5
no issue
- was unable to revert 9dd7aff9c6
, because it contains members changes
- functional calls did not work correctly, because the content and admin ctrl differentiation happend in the web layer
- `isContentAPI` returned true for `api.v2.settings.edit(data, {context: {internal:true{})`
- content & admin API are using different controllers
- we can just tell which ctrl is content API and which is not
- the direction fits for the content & admin API split
76 lines
2.4 KiB
JavaScript
76 lines
2.4 KiB
JavaScript
const debug = require('ghost-ignition').debug('api:shared:frame');
|
|
const _ = require('lodash');
|
|
|
|
class Frame {
|
|
constructor(obj = {}) {
|
|
this.original = obj;
|
|
|
|
this.options = {};
|
|
this.data = {};
|
|
this.user = {};
|
|
this.file = {};
|
|
this.files = [];
|
|
this.apiType = null;
|
|
}
|
|
|
|
/**
|
|
* If you instantiate a new frame, all the data you pass in, land in `this.original`.
|
|
* Based on the API ctrl implemented, this fn will pick allowed properties to either options or data.
|
|
*/
|
|
configure(apiConfig) {
|
|
debug('configure');
|
|
|
|
if (apiConfig.options) {
|
|
if (typeof apiConfig.options === 'function') {
|
|
apiConfig.options = apiConfig.options(this);
|
|
}
|
|
|
|
if (this.original.hasOwnProperty('query')) {
|
|
Object.assign(this.options, _.pick(this.original.query, apiConfig.options));
|
|
}
|
|
|
|
if (this.original.hasOwnProperty('params')) {
|
|
Object.assign(this.options, _.pick(this.original.params, apiConfig.options));
|
|
}
|
|
|
|
if (this.original.hasOwnProperty('options')) {
|
|
Object.assign(this.options, _.pick(this.original.options, apiConfig.options));
|
|
}
|
|
}
|
|
|
|
this.options.context = this.original.context;
|
|
|
|
if (this.original.body && Object.keys(this.original.body).length) {
|
|
this.data = this.original.body;
|
|
} else {
|
|
if (apiConfig.data) {
|
|
if (typeof apiConfig.data === 'function') {
|
|
apiConfig.data = apiConfig.data(this);
|
|
}
|
|
|
|
if (this.original.hasOwnProperty('query')) {
|
|
Object.assign(this.data, _.pick(this.original.query, apiConfig.data));
|
|
}
|
|
|
|
if (this.original.hasOwnProperty('params')) {
|
|
Object.assign(this.data, _.pick(this.original.params, apiConfig.data));
|
|
}
|
|
|
|
if (this.original.hasOwnProperty('options')) {
|
|
Object.assign(this.data, _.pick(this.original.options, apiConfig.data));
|
|
}
|
|
}
|
|
}
|
|
|
|
this.user = this.original.user;
|
|
this.file = this.original.file;
|
|
this.files = this.original.files;
|
|
|
|
debug('original', this.original);
|
|
debug('options', this.options);
|
|
debug('data', this.data);
|
|
}
|
|
}
|
|
|
|
module.exports = Frame;
|