1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /**
- * Copyright (c) 2015-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- 'use strict';
- const { URL } = require('url');
- module.exports = getPublicUrlOrPath;
- /**
- * Returns a URL or a path with slash at the end
- * In production can be URL, abolute path, relative path
- * In development always will be an absolute path
- * In development can use `path` module functions for operations
- *
- * @param {boolean} isEnvDevelopment
- * @param {(string|undefined)} homepage a valid url or pathname
- * @param {(string|undefined)} envPublicUrl a valid url or pathname
- * @returns {string}
- */
- function getPublicUrlOrPath(isEnvDevelopment, homepage, envPublicUrl) {
- const stubDomain = 'https://create-react-app.dev';
- if (envPublicUrl) {
- // ensure last slash exists
- envPublicUrl = envPublicUrl.endsWith('/')
- ? envPublicUrl
- : envPublicUrl + '/';
- // validate if `envPublicUrl` is a URL or path like
- // `stubDomain` is ignored if `envPublicUrl` contains a domain
- const validPublicUrl = new URL(envPublicUrl, stubDomain);
- return isEnvDevelopment
- ? envPublicUrl.startsWith('.')
- ? '/'
- : validPublicUrl.pathname
- : // Some apps do not use client-side routing with pushState.
- // For these, "homepage" can be set to "." to enable relative asset paths.
- envPublicUrl;
- }
- if (homepage) {
- // strip last slash if exists
- homepage = homepage.endsWith('/') ? homepage : homepage + '/';
- // validate if `homepage` is a URL or path like and use just pathname
- const validHomepagePathname = new URL(homepage, stubDomain).pathname;
- return isEnvDevelopment
- ? homepage.startsWith('.')
- ? '/'
- : validHomepagePathname
- : // Some apps do not use client-side routing with pushState.
- // For these, "homepage" can be set to "." to enable relative asset paths.
- homepage.startsWith('.')
- ? homepage
- : validHomepagePathname;
- }
- return '/';
- }
|