deno.land / x / deno@v1.28.2 / runtime / js / 06_util.js
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license."use strict";
((window) => { const { decodeURIComponent, ObjectPrototypeIsPrototypeOf, Promise, SafeArrayIterator, StringPrototypeReplace, TypeError, } = window.__bootstrap.primordials; const { build } = window.__bootstrap.build; const { URLPrototype } = window.__bootstrap.url; let logDebug = false; let logSource = "JS";
function setLogDebug(debug, source) { logDebug = debug; if (source) { logSource = source; } }
function log(...args) { if (logDebug) { // if we destructure `console` off `globalThis` too early, we don't bind to // the right console, therefore we don't log anything out. globalThis.console.log( `DEBUG ${logSource} -`, ...new SafeArrayIterator(args), ); } }
function createResolvable() { let resolve; let reject; const promise = new Promise((res, rej) => { resolve = res; reject = rej; }); promise.resolve = resolve; promise.reject = reject; return promise; }
// Keep in sync with `fromFileUrl()` in `std/path/win32.ts`. function pathFromURLWin32(url) { let p = StringPrototypeReplace( url.pathname, /^\/*([A-Za-z]:)(\/|$)/, "$1/", ); p = StringPrototypeReplace( p, /\//g, "\\", ); p = StringPrototypeReplace( p, /%(?![0-9A-Fa-f]{2})/g, "%25", ); let path = decodeURIComponent(p); if (url.hostname != "") { // Note: The `URL` implementation guarantees that the drive letter and // hostname are mutually exclusive. Otherwise it would not have been valid // to append the hostname and path like this. path = `\\\\${url.hostname}${path}`; } return path; }
// Keep in sync with `fromFileUrl()` in `std/path/posix.ts`. function pathFromURLPosix(url) { if (url.hostname !== "") { throw new TypeError(`Host must be empty.`); }
return decodeURIComponent( StringPrototypeReplace(url.pathname, /%(?![0-9A-Fa-f]{2})/g, "%25"), ); }
function pathFromURL(pathOrUrl) { if (ObjectPrototypeIsPrototypeOf(URLPrototype, pathOrUrl)) { if (pathOrUrl.protocol != "file:") { throw new TypeError("Must be a file URL."); }
return build.os == "windows" ? pathFromURLWin32(pathOrUrl) : pathFromURLPosix(pathOrUrl); } return pathOrUrl; }
window.__bootstrap.internals = { ...window.__bootstrap.internals ?? {}, pathFromURL, };
function writable(value) { return { value, writable: true, enumerable: true, configurable: true, }; }
function nonEnumerable(value) { return { value, writable: true, enumerable: false, configurable: true, }; }
function readOnly(value) { return { value, enumerable: true, writable: false, configurable: true, }; }
function getterOnly(getter) { return { get: getter, enumerable: true, configurable: true, }; }
window.__bootstrap.util = { log, setLogDebug, createResolvable, pathFromURL, writable, nonEnumerable, readOnly, getterOnly, };})(this);
Version Info