gatsby-source-morty
Version:
Gatsby source plugin for building websites using the Morty CMS as a data source
116 lines (85 loc) • 3.04 kB
JavaScript
;
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _nodeFetch = require('node-fetch');
var _nodeFetch2 = _interopRequireDefault(_nodeFetch);
var _crypto = require('crypto');
var _crypto2 = _interopRequireDefault(_crypto);
var _remark = require('remark');
var _remark2 = _interopRequireDefault(_remark);
var _remarkPresetLintRecommended = require('remark-preset-lint-recommended');
var _remarkPresetLintRecommended2 = _interopRequireDefault(_remarkPresetLintRecommended);
var _remarkHtml = require('remark-html');
var _remarkHtml2 = _interopRequireDefault(_remarkHtml);
var _utilities = require('graphql/utilities');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function mdToHtml(md) {
return (0, _remark2.default)().use(_remarkPresetLintRecommended2.default).use(_remarkHtml2.default).processSync(md).contents;
}
exports.mdToHtml = mdToHtml;
function fetchData(_ref, body) {
var account = _ref.account,
accessToken = _ref.accessToken;
var uri = void 0;
if (account && account.length) {
if (account.includes('.')) {
uri = 'https://' + account + '/graphql';
} else {
uri = 'https://' + account + '.morty-cms.com/graphql';
}
} else {
uri = 'http://localhost:3000/graphql';
}
var method = 'POST';
var headers = {
Accept: 'application/json',
'Content-Type': 'application/json'
};
if (accessToken) {
headers['Authorization'] = accessToken;
}
return (0, _nodeFetch2.default)(uri, {
method: method,
headers: headers,
body: (0, _stringify2.default)(body)
}).then(function (response) {
return response.json();
});
}
exports.fetchData = fetchData;
function getSchema(pluginOptions) {
return new _promise2.default(function (resolve, reject) {
var directory = void 0;
if (process.env.NODE_ENV === 'test') {
directory = require('os').tmpdir();
} else {
directory = process.cwd() + '/.cache/cache';
}
var schema = void 0;
try {
schema = JSON.parse(_fs2.default.readFileSync(directory + '/schema.json', 'utf-8'));
} catch (e) {
// ignore
}
if (!schema) {
fetchData(pluginOptions, { query: _utilities.introspectionQuery }).then(function (data) {
schema = data;
_fs2.default.writeFileSync(directory + '/schema.json', (0, _stringify2.default)(schema));
resolve(schema);
}).catch(function (error) {
reject(new Error('Error while fetching introspection query result: ' + error.message));
});
} else {
resolve(schema);
}
});
}
exports.getSchema = getSchema;
function digest(node) {
return _crypto2.default.createHash('md5').update((0, _stringify2.default)(node)).digest('hex');
}
exports.digest = digest;