UNPKG

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
'use strict'; 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;