示例#1
0
    .pipe(insert.transform((contents) => {
      drafter.validate(contents, validationOptions, (err, res) => {
        if (err) {
          console.error(err);
        }

        if (res) {
          console.log(colors.yellow(`API Blueprint contains ${ res.content.length } semantic issues:`));
          res.content.forEach((iss) => {
            // List each sematic issue
            console.log(colors.bgYellow(colors.black(`[APIB${ iss.attributes.code }]: ${ iss.content }`)));

            // Provide the offending line from source
            let map = '';
            iss.attributes.sourceMap[0].content.forEach((pos) => {
              // The output only provides the start and end position in the input APIB
              // We'll add it to the map output with a simple substring.
              map += contents.substr(pos[0], pos[1]);
            });
            console.log(colors.white(map));
          });
        }
      });
      return contents;
    }));
示例#2
0
exports.noconvert = function (data, callback) {
    try {
        var result = drafter.parse(data, {type: 'ast'});
        return callback(null, result);
    } catch (error) {
        return callback(error, {});
    }
};
示例#3
0
APIBlueprint.prototype.parsers = [ function (data, callback) {
  var result;
  try  {
    result = Drafter.parse(data, {type: 'ast'}).ast;
  }
  catch (e) {
    return callback(e);
  }
  callback(null, result);
}];
function parseBlueprint(file, cb) {
    var data = fs.readFileSync(file, {encoding: 'utf8'});
    var options = {type: 'ast'};
    drafter.parse(data, options, function (error, result) {
        if (error) {
            return cb(error, null, data);
        }
        cb(false, result, data);
    });
}
示例#5
0
exports.convert = function (data, callback) {
    try {
        var result = drafter.parse(data, {type: 'ast'});
        //for (var i = 0; i < result.warnings.length; i++) {
        //    var warn = result.warnings[i];
        //    console.log(warn);
        //}
        var swagger = apib2swagger(result.ast);
        return callback(null, {swagger: swagger});
    }
    catch (error) {
        return callback(error, {});
    }
};
示例#6
0
    return function(cb) {
        var data = fs.readFileSync(filePath, {encoding: 'utf8'});
        var options = { type: 'ast' };
        drafter.parse(data, options, function(err, result) {
            if (err) {
                console.log(err);
                return cb(err);
            }

            var allRoutesList = [];
            result.ast.resourceGroups.forEach(function(resourceGroup){
                resourceGroup.resources.forEach(setupResourceAndUrl);
            });

            // add OPTIONS route where its missing - this must be done after all routes are parsed
            if (autoOptions) {
                addOptionsRoutesWhereMissing(allRoutesList);
            }

            cb();

            function setupResourceAndUrl(resource) {
                var parsedUrl = urlParser.parse(resource.uriTemplate);
                var key = parsedUrl.url;
                routeMap[key] = routeMap[key] || { urlExpression: key, methods: {} };
                parseParameters(parsedUrl, resource.parameters, routeMap);
                resource.actions.forEach(function(action){
                    parseAction(parsedUrl, action, routeMap);
                    saveRouteToTheList(parsedUrl, action);
                });
            }

            /**
             * Adds route and its action to the allRoutesList. It appends the action when route already exists in the list.
             * @param resource Route URI
             * @param action HTTP action
             */
            function saveRouteToTheList(parsedUrl, action) {
                // used to add options routes later
                if (typeof allRoutesList[parsedUrl.url] === 'undefined') {
                    allRoutesList[parsedUrl.url] = [];
                }
                allRoutesList[parsedUrl.url].push(action);
            }

            function addOptionsRoutesWhereMissing(allRoutes) {
                var routesWithoutOptions = [];
                // extracts only routes without OPTIONS
                _.forIn(allRoutes, function (actions, route) {
                    var containsOptions = _.reduce(actions, function (previousResult, iteratedAction) {
                        return previousResult || (iteratedAction.method === 'OPTIONS');
                    }, false);
                    if (!containsOptions) {
                        routesWithoutOptions.push(route);
                    }
                });

                _.forEach(routesWithoutOptions, function (uriTemplate) {
                    // adds prepared OPTIONS action for route
                    var parsedUrl = urlParser.parse(uriTemplate);
                    parseAction(parsedUrl, autoOptionsAction, routeMap);
                });
            }
        });
    };
 'APIB': Promise.method(data => Drafter.parse(data, {type: 'ast'}).ast)