UNPKG

@knapsack/app

Version:

Build Design Systems on top of knapsack, by Basalt

140 lines (106 loc) 5.04 kB
"use strict"; 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; }