12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 'use strict';
- var assert = require('assert');
- var map = require('arr-map');
- var flatten = require('arr-flatten');
- var levenshtein = require('fast-levenshtein');
- function normalizeArgs(registry, args) {
- function getFunction(task) {
- if (typeof task === 'function') {
- return task;
- }
- var fn = registry.get(task);
- if (!fn) {
- var similar = similarTasks(registry, task);
- if (similar.length > 0) {
- assert(false, 'Task never defined: ' + task + ' - did you mean? ' + similar.join(', '));
- } else {
- assert(false, 'Task never defined: ' + task);
- }
- }
- return fn;
- }
- var flattenArgs = flatten(args);
- assert(flattenArgs.length, 'One or more tasks should be combined using series or parallel');
- return map(flattenArgs, getFunction);
- }
- function similarTasks(registry, queryTask) {
- if (typeof queryTask !== 'string') {
- return [];
- }
- var tasks = registry.tasks();
- var similarTasks = [];
- for (var task in tasks) {
- if (tasks.hasOwnProperty(task)) {
- var distance = levenshtein.get(task, queryTask);
- var allowedDistance = Math.floor(0.4 * task.length) + 1;
- if (distance < allowedDistance) {
- similarTasks.push(task);
- }
- }
- }
- return similarTasks;
- }
- module.exports = normalizeArgs;
|