in frontend_server_common/lib/src/asset_server.dart [151:223]
List<String> write(
File codeFile, File manifestFile, File sourcemapFile, File metadataFile) {
var modules = <String>[];
var codeBytes = codeFile.readAsBytesSync();
var sourcemapBytes = sourcemapFile.readAsBytesSync();
var metadataBytes = metadataFile.readAsBytesSync();
var manifest =
castStringKeyedMap(json.decode(manifestFile.readAsStringSync()));
for (var filePath in manifest.keys) {
if (filePath == null) {
_logger.severe('Invalid manfiest file: $filePath');
continue;
}
var offsets = castStringKeyedMap(manifest[filePath]);
var codeOffsets = (offsets['code'] as List<dynamic>).cast<int>();
var sourcemapOffsets =
(offsets['sourcemap'] as List<dynamic>).cast<int>();
var metadataOffsets = (offsets['metadata'] as List<dynamic>).cast<int>();
if (codeOffsets.length != 2 ||
sourcemapOffsets.length != 2 ||
metadataOffsets.length != 2) {
_logger.severe('Invalid manifest byte offsets: $offsets');
continue;
}
var codeStart = codeOffsets[0];
var codeEnd = codeOffsets[1];
if (codeStart < 0 || codeEnd > codeBytes.lengthInBytes) {
_logger.severe('Invalid byte index: [$codeStart, $codeEnd]');
continue;
}
var byteView = Uint8List.view(
codeBytes.buffer,
codeStart,
codeEnd - codeStart,
);
_files[filePath] = byteView;
var sourcemapStart = sourcemapOffsets[0];
var sourcemapEnd = sourcemapOffsets[1];
if (sourcemapStart < 0 || sourcemapEnd > sourcemapBytes.lengthInBytes) {
_logger.severe('Invalid byte index: [$sourcemapStart, $sourcemapEnd]');
continue;
}
var sourcemapView = Uint8List.view(
sourcemapBytes.buffer,
sourcemapStart,
sourcemapEnd - sourcemapStart,
);
_sourcemaps['$filePath.map'] = sourcemapView;
var metadataStart = metadataOffsets[0];
var metadataEnd = metadataOffsets[1];
if (metadataStart < 0 || metadataEnd > metadataBytes.lengthInBytes) {
_logger.severe('Invalid byte index: [$metadataStart, $metadataEnd]');
continue;
}
var metadataView = Uint8List.view(
metadataBytes.buffer,
metadataStart,
metadataEnd - metadataStart,
);
_metadata['$filePath.metadata'] = metadataView;
modules.add(filePath);
}
_mergedMetadata = _metadata.values
.map((Uint8List encoded) => utf8.decode(encoded))
.join('\n');
return modules;
}