• Как правильно организовать модули с использованием typescript и дефиниций TSD (DefinetelyTyped)?

    wallride
    @wallride Автор вопроса
    Виртуализирую вселенную.
    Ну вот один вариант я придумал... стрёмный, но всё же.
    в package.json в скриптах повесить хук на postinstall, который пробежится по tsd.ts и исправит ссылки на
    /// <reference path="../../../../typings/node/node.d.ts" />
    , если они дублируют дефиниции родительского проекта.

    Вот типа так:
    var fs = require('fs');
    var path = require('path');
    
    
    
    function searchParentTypingPath(currentPath, moduleName, depth){
        if (!depth) depth = 1;
        if (depth>4) return null;
        try{
            var filePath = currentPath+'/typings/'+moduleName+'/'+moduleName+'.d.ts';
            fs.accessSync(filePath);
            return filePath;
        }
        catch(e){
            return searchParentTypingPath(currentPath+'/..', moduleName, depth+1);
        }
    }
    
    
    module.exports = function (tsdFilePath, verbose){
        var tsdContent = fs.readFileSync(tsdFilePath).toString();
        var resultContent = '';
        tsdContent.split('\n').forEach(function(line){
            var match = line.match(/^\/\/\/\s+<reference path="([\/a-zA-Z0-9_\-.]+)"\s*\/>/);
            if (!match) {
                resultContent+=line+'\n';
                return;
            }
            var modulePath = match[1];
            if (!modulePath.match(/^\w+/)) {// it's not provided by TSD
                resultContent+=line+'\n';
                return;
            }
            var moduleName =  path.basename(modulePath, '.d.ts');
    
            var parentPath = searchParentTypingPath(path.dirname(tsdFilePath)+'/../..', moduleName);
            resultContent+='/// <reference path="'+(parentPath||modulePath)+'" />\n';
        });
        if (verbose) {
            console.log(resultContent);
            return resultContent;
        }
        fs.writeFileSync(tsdFilePath, resultContent);
    };
    Ответ написан
  • ES6 generators или promises?

    wallride
    @wallride
    Виртуализирую вселенную.
    Ну не знаю. А как насчёт выброса ексепшнов в промисах? Разве возможно?
    Я возлюбил генераторы именно за эту фичу - эксепшны "всплывают" наверх из функций, вызываемых через yield.
    Ответ написан
    Комментировать