@knapsack/app
Version:
Build Design Systems on top of knapsack, by Basalt
140 lines (106 loc) • 5.04 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.processConfig = processConfig;
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _path = require("path");
var _schemaUtils = require("@knapsack/schema-utils");
var _types = require("@knapsack/core/types");
var _rendererBase = require("../server/renderer-base");
var log = _interopRequireWildcard(require("../cli/log"));
var _events = require("../server/events");
var _serverUtils = require("../server/server-utils");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (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 = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
/**
* Handle backwards compatibility of config
*/
function convertOldConfig(config) {
// handle backward compatibility here, may need to make new Interface
return config;
}
/**
* @todo validate with schema and assign defaults
*/
function validateConfig(config) {
var _config$designTokens, _config$designTokens2;
const templateRendererResults = (0, _schemaUtils.validateUniqueIdsInArray)(config.templateRenderers);
if (!templateRendererResults.ok) {
log.error(`Each templateRenderer must have a unique id, these do not: ${templateRendererResults.duplicateIdList}`);
process.exit(1);
}
config.templateRenderers.forEach((templateRenderer, i) => {
if (templateRenderer instanceof _rendererBase.KnapsackRendererBase === false) {
log.error(`Each templateRenderer must be an instance of "KnapsackRenderer" and ${templateRenderer.id || `number ${i + 1}`} is not`);
process.exit(1);
}
}); // @todo check if `config.patterns` exists; but can't now as it can contain globs
(0, _serverUtils.dirExistsOrExit)(config.public);
if ((_config$designTokens = config.designTokens) === null || _config$designTokens === void 0 ? void 0 : _config$designTokens.data) {
{
const {
message,
ok
} = (0, _schemaUtils.validateDataAgainstSchema)(_types.knapsackDesignTokensSchema, config.designTokens.data);
if (!ok) {
log.error(message);
process.exit(1);
}
}
{
const {
ok,
message
} = (0, _schemaUtils.validateUniqueIdsInArray)(config.designTokens.data.tokens, 'name');
if (!ok) {
log.error(`Error in Design Tokens. ${message}`);
process.exit(1);
}
}
}
if ((_config$designTokens2 = config.designTokens) === null || _config$designTokens2 === void 0 ? void 0 : _config$designTokens2.createCodeSnippet) {
config.designTokens.data.tokens = config.designTokens.data.tokens.map(token => {
if (token.code) return token;
return _objectSpread({}, token, {
code: config.designTokens.createCodeSnippet(token)
});
});
}
{
const {
ok,
message
} = (0, _schemaUtils.validateUniqueIdsInArray)(config.plugins);
if (!ok) {
log.error(`Plugins must have a unique "id". ${message}`);
process.exit(1);
}
}
return true;
}
/**
* Prepare user config: validate, convert all paths to absolute, assign defaults
*/
function processConfig(userConfig, from) {
var _rest$plugins;
const _convertOldConfig = convertOldConfig(userConfig),
{
public: publicDir,
dist
} = _convertOldConfig,
rest = (0, _objectWithoutProperties2.default)(_convertOldConfig, ["public", "dist"]);
const config = _objectSpread({
public: (0, _path.resolve)(from, publicDir),
dist: (0, _path.resolve)(from, dist),
// data: resolve(from, rest.data), // @todo turn `data` directory from relative to absolute path & then resolve issues elsewhere that arise (i.e. when `join()` is used)
plugins: (_rest$plugins = rest.plugins) !== null && _rest$plugins !== void 0 ? _rest$plugins : []
}, rest);
const ok = validateConfig(config);
if (!ok) process.exit(1);
_events.knapsackEvents.emit(_events.EVENTS.CONFIG_READY, config);
return config;
}