@putkoff/abstract-utilities 1.0.50 → 1.0.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js CHANGED
@@ -1190,40 +1190,130 @@ function url_to_path(urlStr, all_paths) {
1190
1190
  }
1191
1191
  return null;
1192
1192
  }
1193
+ function urljoin(...parts) {
1194
+ return urlJoin(...parts);
1195
+ }
1196
+
1197
+ function split_outside_brackets(s) {
1198
+ let depth = 0;
1199
+ let start = 0;
1200
+ const out = [];
1201
+ for (let i = 0; i < s.length; i++) {
1202
+ const c = s[i];
1203
+ if (c === "[")
1204
+ depth++;
1205
+ else if (c === "]")
1206
+ depth--;
1207
+ // split only when NOT inside brackets
1208
+ if (c === "," && depth === 0) {
1209
+ out.push(s.slice(start, i));
1210
+ start = i + 1;
1211
+ }
1212
+ }
1213
+ out.push(s.slice(start));
1214
+ return out;
1215
+ }
1216
+ function parse_nested_list(s) {
1217
+ // strip outer brackets
1218
+ const inner = s.slice(1, -1).trim();
1219
+ const parts = split_outside_brackets(inner);
1220
+ const result = [];
1221
+ for (let p of parts) {
1222
+ p = p.trim();
1223
+ if (p.startsWith("[") && p.endsWith("]")) {
1224
+ // recursively parse nested list
1225
+ result.push(parse_nested_list(p));
1226
+ }
1227
+ else {
1228
+ result.push(p);
1229
+ }
1230
+ }
1231
+ return result;
1232
+ }
1193
1233
 
1194
1234
  function ensure_list(obj) {
1195
- const objArray = Array.isArray(obj) ? obj : [obj];
1196
- return objArray;
1235
+ if (obj == null)
1236
+ return [];
1237
+ if (Array.isArray(obj)) {
1238
+ return obj.flatMap(item => ensure_list(item));
1239
+ }
1240
+ const s = String(obj).trim();
1241
+ if (s.startsWith("[") && s.endsWith("]")) {
1242
+ return parse_nested_list(s);
1243
+ }
1244
+ return split_outside_brackets(s).map(x => x.trim());
1197
1245
  }
1198
1246
  // coerce any single value into a number (0 if it can't)
1199
1247
  function ensure_number(x) {
1200
1248
  const n = Number(x);
1201
1249
  return isNaN(n) ? 0 : n;
1202
1250
  }
1203
- function ensure_array(input) {
1204
- if (typeof input === 'string') {
1205
- return [input];
1206
- }
1207
- if (Array.isArray(input)) {
1208
- return input.map(item => ensure_string(item));
1209
- }
1210
- return [];
1211
- }
1212
1251
  function ensure_string(obj) {
1213
1252
  return String(obj);
1214
1253
  }
1215
- const assureList = ensure_list;
1216
- const assureString = ensure_string;
1217
- const assureNumber = ensure_number;
1218
- const assureArray = ensure_array;
1219
- const assure_list = ensure_list;
1220
- const assure_string = ensure_string;
1221
- const assure_number = ensure_number;
1222
- const assure_array = ensure_array;
1223
- const ensureList = ensure_list;
1224
- const ensureString = ensure_string;
1225
- const ensureNumber = ensure_number;
1226
- const ensureArray = ensure_array;
1254
+ function ensurelist(obj) {
1255
+ return ensure_list(obj);
1256
+ }
1257
+ function assureList(obj) {
1258
+ return ensure_list(obj);
1259
+ }
1260
+ function assure_list(obj) {
1261
+ return ensure_list(obj);
1262
+ }
1263
+ function ensureList(obj) {
1264
+ return ensure_list(obj);
1265
+ }
1266
+ function assurelist(obj) {
1267
+ return ensure_list(obj);
1268
+ }
1269
+ function ensurenumber(x) {
1270
+ return ensure_number(x);
1271
+ }
1272
+ function assureNumber(x) {
1273
+ return ensure_number(x);
1274
+ }
1275
+ function ensureNumber(x) {
1276
+ return ensure_number(x);
1277
+ }
1278
+ function assurenumber(x) {
1279
+ return ensure_number(x);
1280
+ }
1281
+ function assure_number(x) {
1282
+ return ensure_number(x);
1283
+ }
1284
+ function ensurestring(obj) {
1285
+ return ensure_string(obj);
1286
+ }
1287
+ function ensureString(obj) {
1288
+ return ensure_string(obj);
1289
+ }
1290
+ function assureString(obj) {
1291
+ return ensure_string(obj);
1292
+ }
1293
+ function assurestring(obj) {
1294
+ return ensure_string(obj);
1295
+ }
1296
+ function assure_string(obj) {
1297
+ return ensure_string(obj);
1298
+ }
1299
+ function assurearray(obj) {
1300
+ return ensure_list(obj);
1301
+ }
1302
+ function ensurearray(obj) {
1303
+ return ensure_list(obj);
1304
+ }
1305
+ function ensure_array(obj) {
1306
+ return ensure_list(obj);
1307
+ }
1308
+ function ensureArray(obj) {
1309
+ return ensure_list(obj);
1310
+ }
1311
+ function assure_array(obj) {
1312
+ return ensure_list(obj);
1313
+ }
1314
+ function assureArray(obj) {
1315
+ return ensure_list(obj);
1316
+ }
1227
1317
 
1228
1318
  function cleanText(input) {
1229
1319
  // Replace delimiters with spaces and split
@@ -1720,71 +1810,80 @@ function stripPrefixes(str, bases = []) {
1720
1810
  }
1721
1811
  return str;
1722
1812
  }
1723
- /**
1724
- * Removes characters from the beginning of the string
1725
- * if they are found in the list of characters.
1726
- *
1727
- * @param str - The input string.
1728
- * @param listObjects - A string or an array of characters to remove.
1729
- * @returns The modified string.
1730
- */
1731
- function eatInner(str, listObjects) {
1732
- if (!Array.isArray(listObjects)) {
1733
- listObjects = [listObjects];
1813
+ function tryEatPrefix(str, length, ...objs) {
1814
+ str = String(str);
1815
+ objs = ensure_list(objs);
1816
+ const prefix = str.slice(0, length);
1817
+ if (length < 0) {
1818
+ const start = str.length + length;
1819
+ const actualPrefix = str.slice(start);
1820
+ return objs.includes(actualPrefix) ? [str.slice(0, start), true] : [str, false];
1734
1821
  }
1735
- // Ensure str is a string
1822
+ if (objs.includes(prefix)) {
1823
+ return [str.slice(length), true];
1824
+ }
1825
+ return [str, false];
1826
+ }
1827
+ /** Python-equivalent eatInner */
1828
+ function eatInner(str, listObjects) {
1736
1829
  str = String(str);
1737
- // Remove characters from the beginning while they are in listObjects
1738
- while (str.length > 0 && listObjects.includes(str[0])) {
1830
+ const chars = Array.isArray(listObjects) ? listObjects : [listObjects];
1831
+ // Keep removing from left while leftmost char is in the set
1832
+ while (str.length > 0 && chars.includes(str[0])) {
1739
1833
  str = str.slice(1);
1740
1834
  }
1741
1835
  return str;
1742
1836
  }
1743
- /**
1744
- * Removes characters from the end of the string
1745
- * if they are found in the list of characters.
1746
- *
1747
- * @param str - The input string.
1748
- * @param listObjects - A string or an array of characters to remove.
1749
- * @returns The modified string.
1750
- */
1837
+ /** Python-equivalent eatOuter */
1751
1838
  function eatOuter(str, listObjects) {
1752
- if (!Array.isArray(listObjects)) {
1753
- listObjects = [listObjects];
1754
- }
1755
- // Ensure str is a string
1756
1839
  str = String(str);
1757
- // Remove characters from the end while they are in listObjects
1758
- while (str.length > 0 && listObjects.includes(str[str.length - 1])) {
1840
+ const chars = Array.isArray(listObjects) ? listObjects : [listObjects];
1841
+ if (!str || chars.length === 0)
1842
+ return str;
1843
+ for (let i = 0; i < str.length; i++) {
1844
+ if (!str)
1845
+ return str;
1846
+ const last = str[str.length - 1];
1847
+ if (!chars.includes(last)) {
1848
+ return str;
1849
+ }
1759
1850
  str = str.slice(0, -1);
1760
1851
  }
1761
1852
  return str;
1762
1853
  }
1763
- /**
1764
- * Removes characters from both the beginning and the end of the string
1765
- * if they are found in the list of characters.
1766
- *
1767
- * @param str - The input string.
1768
- * @param listObjects - A string or an array of characters to remove.
1769
- * @returns The modified string.
1770
- */
1854
+ /** Python-equivalent eatAll */
1771
1855
  function eatAll(str, listObjects) {
1772
- return eatOuter(eatInner(str, listObjects), listObjects);
1773
- }
1774
- function eatEnd(obj, endings = ['/']) {
1775
- let result = obj;
1776
- let modified = true;
1777
- while (modified) {
1778
- modified = false;
1779
- for (const ending of endings) {
1780
- if (result.endsWith(ending)) {
1781
- result = result.slice(0, -ending.length);
1782
- modified = true;
1783
- break;
1784
- }
1856
+ str = String(str);
1857
+ const chars = Array.isArray(listObjects) ? listObjects : [listObjects];
1858
+ str = eatInner(str, chars);
1859
+ str = eatOuter(str, chars);
1860
+ return str;
1861
+ }
1862
+ // Plug in the actual version from your project
1863
+ function get_alpha_ints(opts) {
1864
+ // REPLACE WITH YOUR REAL IMPLEMENTATION
1865
+ return [];
1866
+ }
1867
+ /** Python-equivalent eatElse */
1868
+ function eatElse(stringObj, chars, ints = true, alpha = true, lower = true, capitalize = true, string = true, listObj = true) {
1869
+ stringObj = String(stringObj);
1870
+ const alphaInts = get_alpha_ints();
1871
+ let ls = ensure_list(chars || []).concat(alphaInts);
1872
+ while (true) {
1873
+ if (!stringObj)
1874
+ return stringObj;
1875
+ const startOk = !ls.includes(stringObj[0]);
1876
+ const endOk = !ls.includes(stringObj[stringObj.length - 1]);
1877
+ const shouldEat = startOk || endOk;
1878
+ if (!shouldEat)
1879
+ return stringObj;
1880
+ if (stringObj && startOk) {
1881
+ stringObj = stringObj.length === 1 ? "" : stringObj.slice(1);
1882
+ }
1883
+ if (stringObj && endOk) {
1884
+ stringObj = stringObj.length === 1 ? "" : stringObj.slice(0, -1);
1785
1885
  }
1786
1886
  }
1787
- return result;
1788
1887
  }
1789
1888
  function tryParse(obj) {
1790
1889
  try {
@@ -1808,6 +1907,15 @@ function create_list_string(array_obj) {
1808
1907
  }
1809
1908
  return string;
1810
1909
  }
1910
+ function eatall(str, listObjects) {
1911
+ return eatAll(str, listObjects);
1912
+ }
1913
+ function eatinner(str, listObjects) {
1914
+ return eatInner(str, listObjects);
1915
+ }
1916
+ function eatouter(str, listObjects) {
1917
+ return eatOuter(str, listObjects);
1918
+ }
1811
1919
 
1812
1920
  /**
1813
1921
  * In the browser we already have a WHATWG URL constructor on window.
@@ -1842,9 +1950,11 @@ function get_basename(filePath) {
1842
1950
  return '';
1843
1951
  return pathBrowserify.basename(filePath);
1844
1952
  }
1845
- function get_filename(file_path) {
1846
- const ext = pathBrowserify.extname(file_path);
1847
- return pathBrowserify.basename(file_path, ext);
1953
+ function get_filename(filePath) {
1954
+ if (!filePath)
1955
+ return '';
1956
+ const ext = pathBrowserify.extname(filePath);
1957
+ return pathBrowserify.basename(filePath, ext);
1848
1958
  }
1849
1959
  function get_extname(filePath) {
1850
1960
  if (!filePath)
@@ -1882,32 +1992,36 @@ function get_relative_path(basePath, targetPath) {
1882
1992
  }
1883
1993
  }
1884
1994
  /**
1885
- * Join multiple path segments, normalizing leading/trailing slashes.
1995
+ * Join multiple path segments — clean, predictable, bulletproof.
1996
+ *
1997
+ * Accepts ANYTHING that ensure_list can handle:
1998
+ * • 'a,b,c'
1999
+ * • ['a', 'b,c']
2000
+ * • 'a/b/c'
2001
+ * • '/a/', 'b//c'
2002
+ * • mixed arrays, comma strings, whatever
1886
2003
  *
1887
- * Usage:
1888
- * make_path('/foo','bar','baz')
1889
- * make_path(['/foo','bar','baz'])
2004
+ * Always returns a clean POSIX path string. Never a list.
1890
2005
  */
1891
- function make_path(...paths) {
1892
- // If someone passed a single array, unwrap it:
1893
- const pathArray = (paths.length === 1 && Array.isArray(paths[0])
1894
- ? paths[0]
1895
- : paths);
1896
- let real_path = '';
1897
- for (let i = 0; i < pathArray.length; i++) {
1898
- let segment = pathArray[i];
1899
- if (i === 0) {
1900
- real_path = segment;
2006
+ function make_path(...parts) {
2007
+ // Normalize incoming segments into a flat list
2008
+ const segments = ensure_list(parts).map(x => String(x));
2009
+ let out = "";
2010
+ for (let i = 0; i < segments.length; i++) {
2011
+ const seg = segments[i];
2012
+ // Normalize a segment:
2013
+ let cleaned = eatOuter(seg, "/"); // trim trailing slashes
2014
+ if (!cleaned)
2015
+ continue;
2016
+ if (out === "") {
2017
+ out = cleaned;
1901
2018
  }
1902
2019
  else {
1903
- // remove any leading slash on this segment
1904
- segment = segment.replace(/^\/+/, '');
1905
- // remove any trailing slash on the accumulator
1906
- real_path = real_path.replace(/\/+$/, '');
1907
- real_path = `${real_path}/${segment}`;
2020
+ cleaned = eatInner(cleaned, "/"); // trim leading slashes
2021
+ out = `${out}/${cleaned}`;
1908
2022
  }
1909
2023
  }
1910
- return real_path;
2024
+ return out;
1911
2025
  }
1912
2026
  function sanitizeFilename(filename) {
1913
2027
  return filename
@@ -1921,7 +2035,7 @@ function sanitizeFilename(filename) {
1921
2035
  function make_sanitized_path(...paths) {
1922
2036
  let real_path = '';
1923
2037
  for (let i = 0; i < paths.length; i++) {
1924
- const sanitized = sanitizeFilename(eatInner(paths[i], ['/']));
2038
+ const sanitized = sanitizeFilename(eatOuter(paths[i], '/'));
1925
2039
  if (i === 0) {
1926
2040
  real_path = sanitized;
1927
2041
  }
@@ -1939,6 +2053,51 @@ function normalizeUrl(base, p) {
1939
2053
  // collapse multiple “//” into one, but keep the “://” after protocol
1940
2054
  return `${cleanBase}/${cleanPath}`.replace(/([^:])\/{2,}/g, '$1/');
1941
2055
  }
2056
+ function pathjoin(...parts) {
2057
+ return make_path(...parts);
2058
+ }
2059
+ function pathJoin(...parts) {
2060
+ return make_path(...parts);
2061
+ }
2062
+ function makepath(...parts) {
2063
+ return make_path(...parts);
2064
+ }
2065
+ function makePath(...parts) {
2066
+ return make_path(...parts);
2067
+ }
2068
+ function path_join(...parts) {
2069
+ return make_path(...parts);
2070
+ }
2071
+ function getSplitext(filePath) {
2072
+ return get_splitext(filePath);
2073
+ }
2074
+ function getsplitext(filePath) {
2075
+ return get_splitext(filePath);
2076
+ }
2077
+ function getextname(filePath) {
2078
+ return get_extname(filePath);
2079
+ }
2080
+ function getExtname(filePath) {
2081
+ return get_extname(filePath);
2082
+ }
2083
+ function getfilename(filePath) {
2084
+ return get_filename(filePath);
2085
+ }
2086
+ function getFilename(filePath) {
2087
+ return get_filename(filePath);
2088
+ }
2089
+ function getbasename(filePath) {
2090
+ return get_basename(filePath);
2091
+ }
2092
+ function getBasename(filePath) {
2093
+ return get_basename(filePath);
2094
+ }
2095
+ function getdirname(filePath) {
2096
+ return get_dirname(filePath);
2097
+ }
2098
+ function getDirname(filePath) {
2099
+ return get_dirname(filePath);
2100
+ }
1942
2101
 
1943
2102
  /**
1944
2103
  * Returns the absolute path of the current file.
@@ -2376,5 +2535,5 @@ function get_keyword_string(keywords) {
2376
2535
  return allString;
2377
2536
  }
2378
2537
 
2379
- export { API_PREFIX, ATTOSECOND, BASE_URL, Button, CENTISECOND, Checkbox, DAY, DAY_IN_S, DECISECOND, DEV_PREFIX, DIST_ALIASES, DIST_FACTORS, DOMAIN_NAME, DistanceConverter, FEET_PER_METER, FEMTOSECOND, HOUR, HOUR_IN_S, Input, KMS_PER_METER, MEDIA_TYPES, METERS_PER_FOOT, METERS_PER_KM, METERS_PER_MILE, MICROSECOND, MILES_PER_METER, MILISECOND, MIME_TYPES, MINUTE, MIN_IN_S, MONTH, MONTH_IN_S, MPerS_TO_MiPerH, MiPerH_TO_MPerS, NANOSECOND, PI, PI2, PICOSECOND, PROD_PREFIX, PROTOCOL, SECOND, SECONDS_PER_DAY, SECONDS_PER_HOUR, SECONDS_PER_MINUTE, SUB_DIR, SpeedConverter, Spinner, TIME_ALIASES, TIME_FACTORS, TimeConverter, YEAR, YEAR_IN_S, ZEPTOSECOND, alertit, assureArray, assureList, assureNumber, assureString, assure_array, assure_list, assure_number, assure_string, callStorage, callWindowMethod, canonDist, canonTime, capitalize, capitalize_str, checkResponse, cleanArray, cleanText, confirmType, confirm_type, convertDistance, convertSpeed, convertTime, create_list_string, currentUsername, currentUsernames, decodeJwt, distanceToMeters, eatAll, eatEnd, eatInner, eatOuter, ensureArray, ensureList, ensureNumber, ensureString, ensure_array, ensure_list, ensure_number, ensure_string, exponential, fetchIndexHtml, fetchIndexHtmlContainer, fetchIt, fmt, formatNumber, fromMeters, fromMps, fromSeconds, geAuthsUtilsDirectory, geBackupsUtilsDirectory, geConstantsUtilsDirectory, geEnvUtilsDirectory, geFetchUtilsDirectory, geFileUtilsDirectory, gePathUtilsDirectory, geStaticDirectory, geStringUtilsDirectory, geTypeUtilsDirectory, get, getAbsDir, getAbsPath, getAllFileTypes, getAllFileTypesSync, getAlphaNum, getAlphas, getAuthorizationHeader, getBaseDir, getBody, getChar, getCleanArray, getComponentsUtilsDirectory, getConfig, getConfigContent, getConfigVar, getDbConfigsPath, getDistDir, getDocumentProp, getEnvDir, getEnvPath, getFetchVars, getFunctionsDir, getFunctionsUtilsDirectory, getHeaders, getHooksUtilsDirectory, getHtmlDirectory, getLibUtilsDirectory, getMediaExts, getMediaMap, getMethod, getMimeType, getNums, getPublicDir, getResult, getSafeDocument, getSafeLocalStorage, getSafeWindow, getSchemasDirPath, getSchemasPath, getSrcDir, getSubstring, getToken, getWindowHost, getWindowProp, get_all_file_types, get_basename, get_dirname, get_extname, get_filename, get_full_path, get_full_url, get_key_value, get_keyword_string, get_media_exts, get_media_map, get_mime_type, get_relative_path, get_splitext, get_window, get_window_location, get_window_parts, get_window_pathname, isFiniteNum, isLoggedIn, isMediaType, isNum, isStrInString, isTokenExpired, isType, is_media_type, loadConfig, make_path, make_sanitized_path, metersToDistance, mpsToSpeed, normalizeUrl, parseResult, path_to_url, processKeywords, readJsonFile, removeToken, requireToken, roundPercentage, safeDivide, safeGlobalProp, safeMultiply, safeNums, safeStorage, sanitizeFilename, secondsToTime, speedToMps, stripPrefixes, timeToSeconds, toMeters, toSeconds, truncateString, tryParse, urlJoin, url_to_path, velocityFromMs, velocityToMs };
2538
+ export { API_PREFIX, ATTOSECOND, BASE_URL, Button, CENTISECOND, Checkbox, DAY, DAY_IN_S, DECISECOND, DEV_PREFIX, DIST_ALIASES, DIST_FACTORS, DOMAIN_NAME, DistanceConverter, FEET_PER_METER, FEMTOSECOND, HOUR, HOUR_IN_S, Input, KMS_PER_METER, MEDIA_TYPES, METERS_PER_FOOT, METERS_PER_KM, METERS_PER_MILE, MICROSECOND, MILES_PER_METER, MILISECOND, MIME_TYPES, MINUTE, MIN_IN_S, MONTH, MONTH_IN_S, MPerS_TO_MiPerH, MiPerH_TO_MPerS, NANOSECOND, PI, PI2, PICOSECOND, PROD_PREFIX, PROTOCOL, SECOND, SECONDS_PER_DAY, SECONDS_PER_HOUR, SECONDS_PER_MINUTE, SUB_DIR, SpeedConverter, Spinner, TIME_ALIASES, TIME_FACTORS, TimeConverter, YEAR, YEAR_IN_S, ZEPTOSECOND, alertit, assureArray, assureList, assureNumber, assureString, assure_array, assure_list, assure_number, assure_string, assurearray, assurelist, assurenumber, assurestring, callStorage, callWindowMethod, canonDist, canonTime, capitalize, capitalize_str, checkResponse, cleanArray, cleanText, confirmType, confirm_type, convertDistance, convertSpeed, convertTime, create_list_string, currentUsername, currentUsernames, decodeJwt, distanceToMeters, eatAll, eatElse, eatInner, eatOuter, eatall, eatinner, eatouter, ensureArray, ensureList, ensureNumber, ensureString, ensure_array, ensure_list, ensure_number, ensure_string, ensurearray, ensurelist, ensurenumber, ensurestring, exponential, fetchIndexHtml, fetchIndexHtmlContainer, fetchIt, fmt, formatNumber, fromMeters, fromMps, fromSeconds, geAuthsUtilsDirectory, geBackupsUtilsDirectory, geConstantsUtilsDirectory, geEnvUtilsDirectory, geFetchUtilsDirectory, geFileUtilsDirectory, gePathUtilsDirectory, geStaticDirectory, geStringUtilsDirectory, geTypeUtilsDirectory, get, getAbsDir, getAbsPath, getAllFileTypes, getAllFileTypesSync, getAlphaNum, getAlphas, getAuthorizationHeader, getBaseDir, getBasename, getBody, getChar, getCleanArray, getComponentsUtilsDirectory, getConfig, getConfigContent, getConfigVar, getDbConfigsPath, getDirname, getDistDir, getDocumentProp, getEnvDir, getEnvPath, getExtname, getFetchVars, getFilename, getFunctionsDir, getFunctionsUtilsDirectory, getHeaders, getHooksUtilsDirectory, getHtmlDirectory, getLibUtilsDirectory, getMediaExts, getMediaMap, getMethod, getMimeType, getNums, getPublicDir, getResult, getSafeDocument, getSafeLocalStorage, getSafeWindow, getSchemasDirPath, getSchemasPath, getSplitext, getSrcDir, getSubstring, getToken, getWindowHost, getWindowProp, get_all_file_types, get_basename, get_dirname, get_extname, get_filename, get_full_path, get_full_url, get_key_value, get_keyword_string, get_media_exts, get_media_map, get_mime_type, get_relative_path, get_splitext, get_window, get_window_location, get_window_parts, get_window_pathname, getbasename, getdirname, getextname, getfilename, getsplitext, isFiniteNum, isLoggedIn, isMediaType, isNum, isStrInString, isTokenExpired, isType, is_media_type, loadConfig, makePath, make_path, make_sanitized_path, makepath, metersToDistance, mpsToSpeed, normalizeUrl, parseResult, pathJoin, path_join, path_to_url, pathjoin, processKeywords, readJsonFile, removeToken, requireToken, roundPercentage, safeDivide, safeGlobalProp, safeMultiply, safeNums, safeStorage, sanitizeFilename, secondsToTime, speedToMps, stripPrefixes, timeToSeconds, toMeters, toSeconds, truncateString, tryEatPrefix, tryParse, urlJoin, url_to_path, urljoin, velocityFromMs, velocityToMs };
2380
2539
  //# sourceMappingURL=index.js.map