From bc9747721cab40d7c4c3b6522cb93665ced7cca4 Mon Sep 17 00:00:00 2001 From: Devon Carew Date: Tue, 16 Sep 2025 09:33:25 -0700 Subject: [PATCH 1/3] refactor magic_numbers.dart --- pkgs/mime/CHANGELOG.md | 8 +- pkgs/mime/lib/mime.dart | 2 +- pkgs/mime/lib/src/magic_number.dart | 407 ------------------ pkgs/mime/lib/src/magic_numbers.dart | 145 +++++++ pkgs/mime/lib/src/mime_shared.dart | 2 +- pkgs/mime/lib/src/mime_type.dart | 5 +- ...former.dart => multipart_transformer.dart} | 0 pkgs/mime/pubspec.yaml | 2 +- pkgs/mime/test/mime_type_test.dart | 2 +- 9 files changed, 158 insertions(+), 415 deletions(-) delete mode 100644 pkgs/mime/lib/src/magic_number.dart create mode 100644 pkgs/mime/lib/src/magic_numbers.dart rename pkgs/mime/lib/src/{mime_multipart_transformer.dart => multipart_transformer.dart} (100%) diff --git a/pkgs/mime/CHANGELOG.md b/pkgs/mime/CHANGELOG.md index fd5a24905c..66ef9a6481 100644 --- a/pkgs/mime/CHANGELOG.md +++ b/pkgs/mime/CHANGELOG.md @@ -1,7 +1,11 @@ +## 2.0.1-wip + ## 2.0.0 -* **[Breaking]** `extensionFromMime(String mimeType)` returns `null` instead of `mimeType` for an unknown mime type. -* Update `extensionFromMime` to return a default extension when a MIME type maps to multiple extensions. +* **[Breaking]** `extensionFromMime(String mimeType)` returns `null` instead of + `mimeType` for an unknown mime type. +* Update `extensionFromMime` to return a default extension when a MIME type maps + to multiple extensions. ## 1.0.6 diff --git a/pkgs/mime/lib/mime.dart b/pkgs/mime/lib/mime.dart index cb450981fe..6c8c7d1cbb 100644 --- a/pkgs/mime/lib/mime.dart +++ b/pkgs/mime/lib/mime.dart @@ -10,6 +10,6 @@ library; export 'src/extension.dart'; -export 'src/mime_multipart_transformer.dart'; export 'src/mime_shared.dart'; export 'src/mime_type.dart'; +export 'src/multipart_transformer.dart'; diff --git a/pkgs/mime/lib/src/magic_number.dart b/pkgs/mime/lib/src/magic_number.dart deleted file mode 100644 index c8b5c3be13..0000000000 --- a/pkgs/mime/lib/src/magic_number.dart +++ /dev/null @@ -1,407 +0,0 @@ -// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -class MagicNumber { - final String mimeType; - final List numbers; - final List? mask; - - const MagicNumber(this.mimeType, this.numbers, {this.mask}); - - bool matches(List header) { - if (header.length < numbers.length) return false; - - for (var i = 0; i < numbers.length; i++) { - if (mask != null) { - if ((mask![i] & numbers[i]) != (mask![i] & header[i])) return false; - } else { - if (numbers[i] != header[i]) return false; - } - } - - return true; - } -} - -const int initialMagicNumbersMaxLength = 12; - -const List initialMagicNumbers = [ - MagicNumber('application/pdf', [0x25, 0x50, 0x44, 0x46]), - MagicNumber('application/postscript', [0x25, 0x51]), - - /// AIFF is based on the EA IFF 85 Standard for Interchange Format Files. - /// -> 4 bytes have the ASCII characters 'F' 'O' 'R' 'M'. - /// -> 4 bytes indicating the size of the file - /// -> 4 bytes have the ASCII characters 'A' 'I' 'F' 'F'. - /// http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/Docs/AIFF-1.3.pdf - MagicNumber('audio/x-aiff', [ - 0x46, - 0x4F, - 0x52, - 0x4D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x41, - 0x49, - 0x46, - 0x46 - ], mask: [ - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0xFF - ]), - - /// -> 4 bytes have the ASCII characters 'f' 'L' 'a' 'C'. - /// https://xiph.org/flac/format.html - MagicNumber('audio/x-flac', [0x66, 0x4C, 0x61, 0x43]), - - /// The WAVE file format is based on the RIFF document format. - /// -> 4 bytes have the ASCII characters 'R' 'I' 'F' 'F'. - /// -> 4 bytes indicating the size of the file - /// -> 4 bytes have the ASCII characters 'W' 'A' 'V' 'E'. - /// http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Docs/riffmci.pdf - MagicNumber('audio/x-wav', [ - 0x52, - 0x49, - 0x46, - 0x46, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x41, - 0x56, - 0x45 - ], mask: [ - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0xFF - ]), - MagicNumber('image/gif', [0x47, 0x49, 0x46, 0x38, 0x37, 0x61]), - MagicNumber('image/gif', [0x47, 0x49, 0x46, 0x38, 0x39, 0x61]), - MagicNumber('image/jpeg', [0xFF, 0xD8]), - MagicNumber('image/png', [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A]), - MagicNumber('image/tiff', [0x49, 0x49, 0x2A, 0x00]), - MagicNumber('image/tiff', [0x4D, 0x4D, 0x00, 0x2A]), - MagicNumber('audio/aac', [0xFF, 0xF1]), - MagicNumber('audio/aac', [0xFF, 0xF9]), - MagicNumber('audio/weba', [0x1A, 0x45, 0xDF, 0xA3]), - MagicNumber('audio/mpeg', [0x49, 0x44, 0x33]), - MagicNumber('audio/mpeg', [0xFF, 0xFB]), - MagicNumber('audio/ogg', [0x4F, 0x70, 0x75]), - MagicNumber('video/3gpp', [ - 0x00, - 0x00, - 0x00, - 0x00, - 0x66, - 0x74, - 0x79, - 0x70, - 0x33, - 0x67, - 0x70, - 0x35 - ], mask: [ - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF - ]), - MagicNumber('video/mp4', [ - 0x00, - 0x00, - 0x00, - 0x00, - 0x66, - 0x74, - 0x79, - 0x70, - 0x61, - 0x76, - 0x63, - 0x31 - ], mask: [ - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF - ]), - MagicNumber('video/mp4', [ - 0x00, - 0x00, - 0x00, - 0x00, - 0x66, - 0x74, - 0x79, - 0x70, - 0x69, - 0x73, - 0x6F, - 0x32 - ], mask: [ - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF - ]), - MagicNumber('video/mp4', [ - 0x00, - 0x00, - 0x00, - 0x00, - 0x66, - 0x74, - 0x79, - 0x70, - 0x69, - 0x73, - 0x6F, - 0x6D - ], mask: [ - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF - ]), - MagicNumber('video/mp4', [ - 0x00, - 0x00, - 0x00, - 0x00, - 0x66, - 0x74, - 0x79, - 0x70, - 0x6D, - 0x70, - 0x34, - 0x31 - ], mask: [ - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF - ]), - MagicNumber('video/mp4', [ - 0x00, - 0x00, - 0x00, - 0x00, - 0x66, - 0x74, - 0x79, - 0x70, - 0x6D, - 0x70, - 0x34, - 0x32 - ], mask: [ - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF - ]), - MagicNumber('model/gltf-binary', [0x46, 0x54, 0x6C, 0x67]), - - /// The WebP file format is based on the RIFF document format. - /// -> 4 bytes have the ASCII characters 'R' 'I' 'F' 'F'. - /// -> 4 bytes indicating the size of the file - /// -> 4 bytes have the ASCII characters 'W' 'E' 'B' 'P'. - /// https://developers.google.com/speed/webp/docs/riff_container - MagicNumber('image/webp', [ - 0x52, - 0x49, - 0x46, - 0x46, - 0x00, - 0x00, - 0x00, - 0x00, - 0x57, - 0x45, - 0x42, - 0x50 - ], mask: [ - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0xFF - ]), - - MagicNumber('font/woff2', [0x77, 0x4f, 0x46, 0x32]), - - /// High Efficiency Image File Format (ISO/IEC 23008-12). - /// -> 4 bytes indicating the ftyp box length. - /// -> 4 bytes have the ASCII characters 'f' 't' 'y' 'p'. - /// -> 4 bytes have the ASCII characters 'h' 'e' 'i' 'c'. - /// https://www.iana.org/assignments/media-types/image/heic - MagicNumber('image/heic', [ - 0x00, - 0x00, - 0x00, - 0x00, - 0x66, - 0x74, - 0x79, - 0x70, - 0x68, - 0x65, - 0x69, - 0x63 - ], mask: [ - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF - ]), - - /// -> 4 bytes indicating the ftyp box length. - /// -> 4 bytes have the ASCII characters 'f' 't' 'y' 'p'. - /// -> 4 bytes have the ASCII characters 'h' 'e' 'i' 'x'. - MagicNumber('image/heic', [ - 0x00, - 0x00, - 0x00, - 0x00, - 0x66, - 0x74, - 0x79, - 0x70, - 0x68, - 0x65, - 0x69, - 0x78 - ], mask: [ - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF - ]), - - /// -> 4 bytes indicating the ftyp box length. - /// -> 4 bytes have the ASCII characters 'f' 't' 'y' 'p'. - /// -> 4 bytes have the ASCII characters 'm' 'i' 'f' '1'. - MagicNumber('image/heif', [ - 0x00, - 0x00, - 0x00, - 0x00, - 0x66, - 0x74, - 0x79, - 0x70, - 0x6D, - 0x69, - 0x66, - 0x31 - ], mask: [ - 0x00, - 0x00, - 0x00, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF - ]), -]; diff --git a/pkgs/mime/lib/src/magic_numbers.dart b/pkgs/mime/lib/src/magic_numbers.dart new file mode 100644 index 0000000000..a9cfd579da --- /dev/null +++ b/pkgs/mime/lib/src/magic_numbers.dart @@ -0,0 +1,145 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +const int initialMagicNumbersMaxLength = 12; + +class MagicNumber { + final String mimeType; + final String numbers; + final String? masks; + + const MagicNumber(this.mimeType, this.numbers, [this.masks]); + + bool matches(List header) { + if (header.length < numbers.length) return false; + + for (var i = 0; i < numbers.length; i++) { + final number = numbers.codeUnitAt(i); + if (masks != null) { + final mask = masks!.codeUnitAt(i); + if ((mask & number) != (mask & header[i])) return false; + } else { + if (number != header[i]) return false; + } + } + + return true; + } +} + +const List initialMagicNumbers = [ + MagicNumber('application/pdf', '\x25\x50\x44\x46'), + MagicNumber('application/postscript', '\x25\x51'), + + /// AIFF is based on the EA IFF 85 Standard for Interchange Format Files. + /// -> 4 bytes have the ASCII characters 'F' 'O' 'R' 'M'. + /// -> 4 bytes indicating the size of the file + /// -> 4 bytes have the ASCII characters 'A' 'I' 'F' 'F'. + /// http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/Docs/AIFF-1.3.pdf + MagicNumber( + 'audio/x-aiff', + '\x46\x4F\x52\x4D\x00\x00\x00\x00\x41\x49\x46\x46', + '\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF', + ), + + /// -> 4 bytes have the ASCII characters 'f' 'L' 'a' 'C'. + /// https://xiph.org/flac/format.html + MagicNumber('audio/x-flac', '\x66\x4C\x61\x43'), + + /// The WAVE file format is based on the RIFF document format. + /// -> 4 bytes have the ASCII characters 'R' 'I' 'F' 'F'. + /// -> 4 bytes indicating the size of the file + /// -> 4 bytes have the ASCII characters 'W' 'A' 'V' 'E'. + /// http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Docs/riffmci.pdf + MagicNumber( + 'audio/x-wav', + '\x52\x49\x46\x46\x00\x00\x00\x00\x57\x41\x56\x45', + '\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF', + ), + MagicNumber('image/gif', '\x47\x49\x46\x38\x37\x61'), + MagicNumber('image/gif', '\x47\x49\x46\x38\x39\x61'), + MagicNumber('image/jpeg', '\xFF\xD8'), + MagicNumber('image/png', '\x89\x50\x4E\x47\x0D\x0A\x1A\x0A'), + MagicNumber('image/tiff', '\x49\x49\x2A\x00'), + MagicNumber('image/tiff', '\x4D\x4D\x00\x2A'), + MagicNumber('audio/aac', '\xFF\xF1'), + MagicNumber('audio/aac', '\xFF\xF9'), + MagicNumber('audio/weba', '\x1A\x45\xDF\xA3'), + MagicNumber('audio/mpeg', '\x49\x44\x33'), + MagicNumber('audio/mpeg', '\xFF\xFB'), + MagicNumber('audio/ogg', '\x4F\x70\x75'), + MagicNumber( + 'video/3gpp', + '\x00\x00\x00\x00\x66\x74\x79\x70\x33\x67\x70\x35', + '\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF', + ), + MagicNumber( + 'video/mp4', + '\x00\x00\x00\x00\x66\x74\x79\x70\x61\x76\x63\x31', + '\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF', + ), + MagicNumber( + 'video/mp4', + '\x00\x00\x00\x00\x66\x74\x79\x70\x69\x73\x6F\x32', + '\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF', + ), + MagicNumber( + 'video/mp4', + '\x00\x00\x00\x00\x66\x74\x79\x70\x69\x73\x6F\x6D', + '\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF', + ), + MagicNumber( + 'video/mp4', + '\x00\x00\x00\x00\x66\x74\x79\x70\x6D\x70\x34\x31', + '\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF', + ), + MagicNumber( + 'video/mp4', + '\x00\x00\x00\x00\x66\x74\x79\x70\x6D\x70\x34\x32', + '\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF', + ), + MagicNumber('model/gltf-binary', '\x46\x54\x6C\x67'), + + /// The WebP file format is based on the RIFF document format. + /// -> 4 bytes have the ASCII characters 'R' 'I' 'F' 'F'. + /// -> 4 bytes indicating the size of the file + /// -> 4 bytes have the ASCII characters 'W' 'E' 'B' 'P'. + /// https://developers.google.com/speed/webp/docs/riff_container + MagicNumber( + 'image/webp', + '\x52\x49\x46\x46\x00\x00\x00\x00\x57\x45\x42\x50', + '\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF', + ), + + MagicNumber('font/woff2', '\x77\x4f\x46\x32'), + + /// High Efficiency Image File Format (ISO/IEC 23008-12). + /// -> 4 bytes indicating the ftyp box length. + /// -> 4 bytes have the ASCII characters 'f' 't' 'y' 'p'. + /// -> 4 bytes have the ASCII characters 'h' 'e' 'i' 'c'. + /// https://www.iana.org/assignments/media-types/image/heic + MagicNumber( + 'image/heic', + '\x00\x00\x00\x00\x66\x74\x79\x70\x68\x65\x69\x63', + '\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF', + ), + + /// -> 4 bytes indicating the ftyp box length. + /// -> 4 bytes have the ASCII characters 'f' 't' 'y' 'p'. + /// -> 4 bytes have the ASCII characters 'h' 'e' 'i' 'x'. + MagicNumber( + 'image/heic', + '\x00\x00\x00\x00\x66\x74\x79\x70\x68\x65\x69\x78', + '\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF', + ), + + /// -> 4 bytes indicating the ftyp box length. + /// -> 4 bytes have the ASCII characters 'f' 't' 'y' 'p'. + /// -> 4 bytes have the ASCII characters 'm' 'i' 'f' '1'. + MagicNumber( + 'image/heif', + '\x00\x00\x00\x00\x66\x74\x79\x70\x6D\x69\x66\x31', + '\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF', + ), +]; diff --git a/pkgs/mime/lib/src/mime_shared.dart b/pkgs/mime/lib/src/mime_shared.dart index 1c98971e90..637bef7e8d 100644 --- a/pkgs/mime/lib/src/mime_shared.dart +++ b/pkgs/mime/lib/src/mime_shared.dart @@ -2,7 +2,7 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import 'mime_multipart_transformer.dart'; +import 'multipart_transformer.dart'; class MimeMultipartException implements Exception { final String message; diff --git a/pkgs/mime/lib/src/mime_type.dart b/pkgs/mime/lib/src/mime_type.dart index 9cf9194a14..1e4d588779 100644 --- a/pkgs/mime/lib/src/mime_type.dart +++ b/pkgs/mime/lib/src/mime_type.dart @@ -3,7 +3,7 @@ // BSD-style license that can be found in the LICENSE file. import 'default_extension_map.dart'; -import 'magic_number.dart'; +import 'magic_numbers.dart'; final MimeTypeResolver _globalResolver = MimeTypeResolver(); @@ -90,7 +90,8 @@ class MimeTypeResolver { if (bytes.length > _magicNumbersMaxLength) { _magicNumbersMaxLength = bytes.length; } - _magicNumbers.add(MagicNumber(mimeType, bytes, mask: mask)); + _magicNumbers.add(MagicNumber(mimeType, String.fromCharCodes(bytes), + mask == null ? null : String.fromCharCodes(mask))); } static String? _matchMagic( diff --git a/pkgs/mime/lib/src/mime_multipart_transformer.dart b/pkgs/mime/lib/src/multipart_transformer.dart similarity index 100% rename from pkgs/mime/lib/src/mime_multipart_transformer.dart rename to pkgs/mime/lib/src/multipart_transformer.dart diff --git a/pkgs/mime/pubspec.yaml b/pkgs/mime/pubspec.yaml index 31ac74885f..696754f7ef 100644 --- a/pkgs/mime/pubspec.yaml +++ b/pkgs/mime/pubspec.yaml @@ -1,5 +1,5 @@ name: mime -version: 2.0.0 +version: 2.0.0-wip description: >- Utilities for handling media (MIME) types, including determining a type from a file extension and file contents. diff --git a/pkgs/mime/test/mime_type_test.dart b/pkgs/mime/test/mime_type_test.dart index 23cb34af30..8ffeb37d98 100644 --- a/pkgs/mime/test/mime_type_test.dart +++ b/pkgs/mime/test/mime_type_test.dart @@ -5,7 +5,7 @@ import 'dart:math' as math; import 'package:mime/mime.dart'; -import 'package:mime/src/magic_number.dart'; +import 'package:mime/src/magic_numbers.dart'; import 'package:test/test.dart'; void _expectMimeType(String path, String? expectedMimeType, From fa07c8034fc8f0eebfce99999a6aae7750feff65 Mon Sep 17 00:00:00 2001 From: Devon Carew Date: Tue, 16 Sep 2025 09:37:15 -0700 Subject: [PATCH 2/3] rename a file --- pkgs/mime/lib/src/{magic_numbers.dart => magic_number.dart} | 0 pkgs/mime/lib/src/mime_type.dart | 2 +- pkgs/mime/test/mime_type_test.dart | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename pkgs/mime/lib/src/{magic_numbers.dart => magic_number.dart} (100%) diff --git a/pkgs/mime/lib/src/magic_numbers.dart b/pkgs/mime/lib/src/magic_number.dart similarity index 100% rename from pkgs/mime/lib/src/magic_numbers.dart rename to pkgs/mime/lib/src/magic_number.dart diff --git a/pkgs/mime/lib/src/mime_type.dart b/pkgs/mime/lib/src/mime_type.dart index 1e4d588779..5019eb5372 100644 --- a/pkgs/mime/lib/src/mime_type.dart +++ b/pkgs/mime/lib/src/mime_type.dart @@ -3,7 +3,7 @@ // BSD-style license that can be found in the LICENSE file. import 'default_extension_map.dart'; -import 'magic_numbers.dart'; +import 'magic_number.dart'; final MimeTypeResolver _globalResolver = MimeTypeResolver(); diff --git a/pkgs/mime/test/mime_type_test.dart b/pkgs/mime/test/mime_type_test.dart index 8ffeb37d98..23cb34af30 100644 --- a/pkgs/mime/test/mime_type_test.dart +++ b/pkgs/mime/test/mime_type_test.dart @@ -5,7 +5,7 @@ import 'dart:math' as math; import 'package:mime/mime.dart'; -import 'package:mime/src/magic_numbers.dart'; +import 'package:mime/src/magic_number.dart'; import 'package:test/test.dart'; void _expectMimeType(String path, String? expectedMimeType, From 3f174e2ac034bc2826c1562bece3b5446ab9f785 Mon Sep 17 00:00:00 2001 From: Devon Carew Date: Tue, 16 Sep 2025 09:41:34 -0700 Subject: [PATCH 3/3] fix pubspec version --- pkgs/mime/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/mime/pubspec.yaml b/pkgs/mime/pubspec.yaml index 696754f7ef..dda95eb8ea 100644 --- a/pkgs/mime/pubspec.yaml +++ b/pkgs/mime/pubspec.yaml @@ -1,5 +1,5 @@ name: mime -version: 2.0.0-wip +version: 2.0.1-wip description: >- Utilities for handling media (MIME) types, including determining a type from a file extension and file contents.