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

88 lines (87 loc) 4.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var path = require("path"); var Filesystem = require("./filesystem"); var MappingEntry = require("./mapping-entry"); var TryPath = require("./try-path"); /** * Creates a function that can resolve paths according to tsconfig paths property. * @param absoluteBaseUrl Absolute version of baseUrl as specified in tsconfig. * @param paths The paths as specified in tsconfig. * @param mainFields A list of package.json field names to try when resolving module files. * @param addMatchAll Add a match-all "*" rule if none is present * @returns a function that can resolve paths. */ function createMatchPath(absoluteBaseUrl, paths, mainFields, addMatchAll) { if (mainFields === void 0) { mainFields = ["main"]; } if (addMatchAll === void 0) { addMatchAll = true; } var absolutePaths = MappingEntry.getAbsoluteMappingEntries(absoluteBaseUrl, paths, addMatchAll); return function (requestedModule, readJson, fileExists, extensions) { return matchFromAbsolutePaths(absolutePaths, requestedModule, readJson, fileExists, extensions, mainFields); }; } exports.createMatchPath = createMatchPath; /** * Finds a path from tsconfig that matches a module load request. * @param absolutePathMappings The paths to try as specified in tsconfig but resolved to absolute form. * @param requestedModule The required module name. * @param readJson Function that can read json from a path (useful for testing). * @param fileExists Function that checks for existance of a file at a path (useful for testing). * @param extensions File extensions to probe for (useful for testing). * @param mainFields A list of package.json field names to try when resolving module files. * @returns the found path, or undefined if no path was found. */ function matchFromAbsolutePaths(absolutePathMappings, requestedModule, readJson, fileExists, extensions, mainFields) { if (readJson === void 0) { readJson = Filesystem.readJsonFromDiskSync; } if (fileExists === void 0) { fileExists = Filesystem.fileExistsSync; } if (extensions === void 0) { extensions = Object.keys(require.extensions); } if (mainFields === void 0) { mainFields = ["main"]; } var tryPaths = TryPath.getPathsToTry(extensions, absolutePathMappings, requestedModule); if (!tryPaths) { return undefined; } return findFirstExistingPath(tryPaths, readJson, fileExists, mainFields); } exports.matchFromAbsolutePaths = matchFromAbsolutePaths; function findFirstExistingMainFieldMappedFile(packageJson, mainFields, packageJsonPath, fileExists) { for (var index = 0; index < mainFields.length; index++) { var mainFieldName = mainFields[index]; var candidateMapping = packageJson[mainFieldName]; if (candidateMapping && typeof candidateMapping === "string") { var candidateFilePath = path.join(path.dirname(packageJsonPath), candidateMapping); if (fileExists(candidateFilePath)) { return candidateFilePath; } } } return undefined; } function findFirstExistingPath(tryPaths, readJson, fileExists, mainFields) { if (readJson === void 0) { readJson = Filesystem.readJsonFromDiskSync; } if (mainFields === void 0) { mainFields = ["main"]; } for (var _i = 0, tryPaths_1 = tryPaths; _i < tryPaths_1.length; _i++) { var tryPath = tryPaths_1[_i]; if (tryPath.type === "file" || tryPath.type === "extension" || tryPath.type === "index") { if (fileExists(tryPath.path)) { // Not sure why we don't just return the full path? Why strip it? return TryPath.getStrippedPath(tryPath); } } else if (tryPath.type === "package") { var packageJson = readJson(tryPath.path); if (packageJson) { var mainFieldMappedFile = findFirstExistingMainFieldMappedFile(packageJson, mainFields, tryPath.path, fileExists); if (mainFieldMappedFile) { // Not sure why we don't just return the full path? Why strip it? return Filesystem.removeExtension(mainFieldMappedFile); } } } else { TryPath.exhaustiveTypeException(tryPath.type); } } return undefined; }