UNPKG

luhn-generator

Version:

A generator of numbers that passes the validation of Luhn algorithm or Luhn formula, also known as the 'modulus 10' or 'mod 10' algorithm

188 lines (149 loc) 4.82 kB
"use strict"; var _stringify = require("babel-runtime/core-js/json/stringify"); var _stringify2 = _interopRequireDefault(_stringify); var _set = require("babel-runtime/core-js/set"); var _set2 = _interopRequireDefault(_set); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var convertSourceMap = require("convert-source-map"); var sourceMap = require("source-map"); var slash = require("slash"); var path = require("path"); var util = require("./util"); var fs = require("fs"); module.exports = function (commander, filenames, opts) { if (commander.sourceMaps === "inline") { opts.sourceMaps = true; } var results = []; var buildResult = function buildResult() { var map = new sourceMap.SourceMapGenerator({ file: path.basename(commander.outFile || "") || "stdout", sourceRoot: opts.sourceRoot }); var code = ""; var offset = 0; results.forEach(function (result) { code += result.code + "\n"; if (result.map) { var consumer = new sourceMap.SourceMapConsumer(result.map); var sources = new _set2.default(); consumer.eachMapping(function (mapping) { if (mapping.source != null) sources.add(mapping.source); map.addMapping({ generated: { line: mapping.generatedLine + offset, column: mapping.generatedColumn }, source: mapping.source, original: mapping.source == null ? null : { line: mapping.originalLine, column: mapping.originalColumn } }); }); sources.forEach(function (source) { var content = consumer.sourceContentFor(source, true); if (content !== null) { map.setSourceContent(source, content); } }); offset = code.split("\n").length - 1; } }); if (commander.sourceMaps === "inline" || !commander.outFile && commander.sourceMaps) { code += "\n" + convertSourceMap.fromObject(map).toComment(); } return { map: map, code: code }; }; var output = function output() { var result = buildResult(); if (commander.outFile) { if (commander.sourceMaps && commander.sourceMaps !== "inline") { var mapLoc = commander.outFile + ".map"; result.code = util.addSourceMappingUrl(result.code, mapLoc); fs.writeFileSync(mapLoc, (0, _stringify2.default)(result.map)); } fs.writeFileSync(commander.outFile, result.code); } else { process.stdout.write(result.code + "\n"); } }; var stdin = function stdin() { var code = ""; process.stdin.setEncoding("utf8"); process.stdin.on("readable", function () { var chunk = process.stdin.read(); if (chunk !== null) code += chunk; }); process.stdin.on("end", function () { results.push(util.transform(commander.filename, code, { sourceFileName: "stdin" })); output(); }); }; var walk = function walk() { var _filenames = []; results = []; filenames.forEach(function (filename) { if (!fs.existsSync(filename)) return; var stat = fs.statSync(filename); if (stat.isDirectory()) { var dirname = filename; util.readdirFilter(filename).forEach(function (filename) { _filenames.push(path.join(dirname, filename)); }); } else { _filenames.push(filename); } }); _filenames.forEach(function (filename) { if (util.shouldIgnore(filename)) return; var sourceFilename = filename; if (commander.outFile) { sourceFilename = path.relative(path.dirname(commander.outFile), sourceFilename); } sourceFilename = slash(sourceFilename); var data = util.compile(filename, { sourceFileName: sourceFilename }); if (data.ignored) return; results.push(data); }); output(); }; var files = function files() { if (!commander.skipInitialBuild) { walk(); } if (commander.watch) { var chokidar = util.requireChokidar(); chokidar.watch(filenames, { persistent: true, ignoreInitial: true, awaitWriteFinish: { stabilityThreshold: 50, pollInterval: 10 } }).on("all", function (type, filename) { if (util.shouldIgnore(filename) || !util.canCompile(filename, commander.extensions)) return; if (type === "add" || type === "change") { util.log(type + " " + filename); try { walk(); } catch (err) { console.error(err.stack); } } }); } }; if (filenames.length) { files(); } else { stdin(); } };