UNPKG

polymer-build

Version:
104 lines 4.55 kB
"use strict"; /** * @license * Copyright (c) 2016 The Polymer Project Authors. All rights reserved. * This code may only be used under the BSD style license found at * http://polymer.github.io/LICENSE.txt * The complete set of authors may be found at * http://polymer.github.io/AUTHORS.txt * The complete set of contributors may be found at * http://polymer.github.io/CONTRIBUTORS.txt * Code distributed by Google as part of the polymer project is also * subject to an additional IP rights grant found at * http://polymer.github.io/PATENTS.txt */ Object.defineProperty(exports, "__esModule", { value: true }); /** * CODE ADAPTED FROM THE "SLASH" LIBRARY BY SINDRE SORHUS * https://github.com/sindresorhus/slash * * ORIGINAL LICENSE: * The MIT License (MIT) * * Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)* * * Permission is hereby granted, free of charge, to any person obtaining a copy* * of this software and associated documentation files (the "Software"), to * deal* * in the Software without restriction, including without limitation the rights* * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell* * copies of the Software, and to permit persons to whom the Software is* * furnished to do so, subject to the following conditions:* * * The above copyright notice and this permission notice shall be included in* * all copies or substantial portions of the Software.* * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR* * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,* * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE* * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER* * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM,* * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN* * THE SOFTWARE. */ /** * This module consists of functions for transformations to filesystem and url * paths. * TODO(usergenic): We should consider migrating the responsibility of * path-related string transformation to a package like `upath`. * Please see: https://www.npmjs.com/package/upath */ const path = require("path"); /** * Returns a properly encoded URL representing the relative URL from the root * to the target. This function will throw an error if the target is outside * the root. We use this to map a file from the filesystem to the relative * URL that represents it in the build. */ function urlFromPath(root, target) { const targetPosix = posixifyPath(target); const rootPosix = posixifyPath(root); const relativePath = path.posix.relative(rootPosix, targetPosix); // The startsWith(root) check is important on Windows because of the case // where paths have different drive letters. The startsWith('../') will // catch the general not-in-root case. if (!targetPosix.startsWith(posixifyPath(root)) || relativePath.startsWith('../')) { throw new Error(`target path is not in root: ${target} (${root})`); } return encodeURI(relativePath); } exports.urlFromPath = urlFromPath; /** * Returns a filesystem path for the url, relative to the root. */ function pathFromUrl(root, // TODO(usergenic): PackageRelativeUrl are not *necessarily* always just a // relative path from root. Maybe subclass as PackageRelativeUrlPath or // something if this function doesn't disappear after // https://github.com/Polymer/polymer-build/issues/324 is addressed. url) { return path.normalize(decodeURIComponent(path.posix.join(posixifyPath(root), path.posix.join('/', url)))); } exports.pathFromUrl = pathFromUrl; /** * Returns a string where all Windows path separators are converted to forward * slashes. * NOTE(usergenic): We will generate only canonical Windows paths, but this * function is exported so that we can create a forward-slashed Windows root * path when dealing with the `sw-precache` library, which uses `glob` npm * module generates only forward-slash paths in building its `precacheConfig` * map. */ function posixifyPath(filepath) { // We don't want to change backslashes to forward-slashes in the case where // we're already on posix environment, because they would be intentional in // that case (albeit weird.) if (path.sep === '\\') { filepath = filepath.replace(/\\/g, '/'); } return filepath; } exports.posixifyPath = posixifyPath; //# sourceMappingURL=path-transformers.js.map