parseCanvasAssetRef function

CanvasAssetRef parseCanvasAssetRef(
  1. String input
)

Implementation

CanvasAssetRef parseCanvasAssetRef(String input) {
  final raw = input.trim();

  if (raw.isEmpty) {
    return const CanvasRawAssetRef('');
  }

  // Windows absolute path, e.g. C:\tmp\a.png or C:/tmp/a.png.
  if (RegExp(r'^[a-zA-Z]:[\\/]').hasMatch(raw)) {
    return CanvasFileAssetRef(raw: raw, path: raw);
  }

  if (_looksLikeLocalPath(raw)) {
    return CanvasFileAssetRef(raw: raw, path: raw);
  }

  final uri = Uri.tryParse(raw);
  final scheme = uri?.scheme.toLowerCase() ?? '';

  if (scheme == 'http' || scheme == 'https') {
    return CanvasUrlAssetRef(raw: raw, uri: uri!);
  }

  if (scheme == 'data') {
    return CanvasDataUriAssetRef(raw);
  }

  if (scheme == 'blob') {
    return CanvasBlobUrlAssetRef(raw);
  }

  if (scheme == 'file') {
    return CanvasFileAssetRef(raw: raw, path: _filePathFromUri(raw));
  }

  final customScheme = _customScheme(raw);
  if (customScheme != null) {
    return CanvasSchemeAssetRef(
      raw: raw,
      scheme: customScheme.$1,
      payload: customScheme.$2,
    );
  }

  return CanvasRawAssetRef(raw);
}