Son CV dans un terminal web en Javascript!
https://terminal-cv.gregandev.fr
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.5 KiB
107 lines
3.5 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
var _icssReplaceSymbols = require('icss-replace-symbols');
|
|
|
|
var _icssReplaceSymbols2 = _interopRequireDefault(_icssReplaceSymbols);
|
|
|
|
var importRegexp = /^:import\((.+)\)$/;
|
|
|
|
var Parser = (function () {
|
|
function Parser(pathFetcher, trace) {
|
|
_classCallCheck(this, Parser);
|
|
|
|
this.pathFetcher = pathFetcher;
|
|
this.plugin = this.plugin.bind(this);
|
|
this.exportTokens = {};
|
|
this.translations = {};
|
|
this.trace = trace;
|
|
}
|
|
|
|
_createClass(Parser, [{
|
|
key: "plugin",
|
|
value: function plugin(css, result) {
|
|
var _this = this;
|
|
|
|
return Promise.all(this.fetchAllImports(css)).then(function (_) {
|
|
return _this.linkImportedSymbols(css);
|
|
}).then(function (_) {
|
|
return _this.extractExports(css);
|
|
});
|
|
}
|
|
}, {
|
|
key: "fetchAllImports",
|
|
value: function fetchAllImports(css) {
|
|
var _this2 = this;
|
|
|
|
var imports = [];
|
|
css.each(function (node) {
|
|
if (node.type == "rule" && node.selector.match(importRegexp)) {
|
|
imports.push(_this2.fetchImport(node, css.source.input.from, imports.length));
|
|
}
|
|
});
|
|
return imports;
|
|
}
|
|
}, {
|
|
key: "linkImportedSymbols",
|
|
value: function linkImportedSymbols(css) {
|
|
(0, _icssReplaceSymbols2["default"])(css, this.translations);
|
|
}
|
|
}, {
|
|
key: "extractExports",
|
|
value: function extractExports(css) {
|
|
var _this3 = this;
|
|
|
|
css.each(function (node) {
|
|
if (node.type == "rule" && node.selector == ":export") _this3.handleExport(node);
|
|
});
|
|
}
|
|
}, {
|
|
key: "handleExport",
|
|
value: function handleExport(exportNode) {
|
|
var _this4 = this;
|
|
|
|
exportNode.each(function (decl) {
|
|
if (decl.type == 'decl') {
|
|
Object.keys(_this4.translations).forEach(function (translation) {
|
|
decl.value = decl.value.replace(translation, _this4.translations[translation]);
|
|
});
|
|
_this4.exportTokens[decl.prop] = decl.value;
|
|
}
|
|
});
|
|
exportNode.remove();
|
|
}
|
|
}, {
|
|
key: "fetchImport",
|
|
value: function fetchImport(importNode, relativeTo, depNr) {
|
|
var _this5 = this;
|
|
|
|
var file = importNode.selector.match(importRegexp)[1],
|
|
depTrace = this.trace + String.fromCharCode(depNr);
|
|
return this.pathFetcher(file, relativeTo, depTrace).then(function (exports) {
|
|
importNode.each(function (decl) {
|
|
if (decl.type == 'decl') {
|
|
_this5.translations[decl.prop] = exports[decl.value];
|
|
}
|
|
});
|
|
importNode.remove();
|
|
}, function (err) {
|
|
return console.log(err);
|
|
});
|
|
}
|
|
}]);
|
|
|
|
return Parser;
|
|
})();
|
|
|
|
exports["default"] = Parser;
|
|
module.exports = exports["default"]; |