| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| export function resolveUrlWithSegments(...segments) { |
| return new URL(joinPathSegments(...segments), document.baseURI).toString() |
| } |
| |
| function joinPathSegments(...segments) { |
| return segments.filter((segment) => !!segment).map((segment, i) => { |
| if (i === 0) { |
| return stripRightSlashes(segment); |
| } else { |
| return stripLeftSlashes(stripRightSlashes(segment)); |
| } |
| }).filter(x => x.length).join("/") |
| } |
| |
| function stripLeftSlashes(s) { |
| let i = 0; |
| while (i < s.length) { |
| if (s.charAt(i) !== "/") { |
| break; |
| } |
| i++; |
| } |
| return s.substring(i); |
| } |
| |
| function stripRightSlashes(s) { |
| let i = s.length; |
| while (i > 0) { |
| if (s.charAt(i - 1) !== "/") { |
| break; |
| } |
| i--; |
| } |
| return s.substring(0, i); |
| } |
| |
| /** |
| * Calculates the proper base URL for CanvasKit/Skwasm assets. |
| * |
| * @param {import("./types").FlutterConfiguration} config |
| * @param {import("./types").BuildConfig} buildConfig |
| */ |
| export function getCanvaskitBaseUrl(config, buildConfig) { |
| if (config.canvasKitBaseUrl) { |
| return config.canvasKitBaseUrl; |
| } |
| if (buildConfig.engineRevision && !buildConfig.useLocalCanvasKit) { |
| return joinPathSegments("https://www.gstatic.com/flutter-canvaskit", buildConfig.engineRevision); |
| } |
| return "canvaskit"; |
| } |