feeles-ide
Version:
The hackable and serializable IDE to make learning material
75 lines (64 loc) • 1.94 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convertAsset;
var _jsYaml = _interopRequireDefault(require("js-yaml"));
var _lodash = require("lodash");
var tryParseYAML = function tryParseYAML(text) {
try {
return _jsYaml.default.safeLoad(text);
} catch (e) {
return {};
}
};
/**
* 旧アセット定義ファイル(YAML)を新仕様に変換する
*/
function convertAsset() {
var definitionFileTexts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var configs = definitionFileTexts.map(tryParseYAML);
var scopeNames = (0, _lodash.flatten)(configs.map(function (def) {
return Object.keys(def);
}));
var scopes = scopeNames.map(function (name) {
return {
name: name,
defaultActiveCategory: -1
};
});
var nullable = function nullable(value) {
return value ? value + '' : null;
};
var converter = function converter() {
var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
return function (config) {
return {
name: nullable(config.label),
description: nullable(config.description),
category: -1,
iconUrl: nullable(config.image),
insertCode: nullable(config.code),
moduleCode: null,
plan: 'free',
variations: null,
production: true,
scopes: [scopeNames.indexOf(scope)],
filePath: nullable(config.filePath) // 既にあるファイルのパス
};
};
};
var buttons = (0, _lodash.flattenDepth)(configs.map(function (object) {
return Object.keys(object).map(function (scope) {
return object[scope].map(converter(scope));
});
}), 3);
return {
version: '',
categories: [],
scopes: scopes,
module: {},
buttons: buttons
};
}