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

"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"];