Index: lib/runtime/dart_sdk.js |
diff --git a/lib/runtime/dart_sdk.js b/lib/runtime/dart_sdk.js |
index 6fa4889a5d9981db9943f5ef46390fe71381153e..77d5fbbc6aeda6ae03f47fb6ded380d8ef1eb87b 100644 |
--- a/lib/runtime/dart_sdk.js |
+++ b/lib/runtime/dart_sdk.js |
@@ -24123,7 +24123,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
const _stringSink = Symbol('_stringSink'); |
convert.StringConversionSinkMixin = class StringConversionSinkMixin extends core.Object { |
add(str) { |
- return this.addSlice(str, 0, str[dartx.length], false); |
+ this.addSlice(str, 0, str[dartx.length], false); |
} |
asUtf8Sink(allowMalformed) { |
return new convert._Utf8ConversionSink(this, allowMalformed); |
@@ -24157,7 +24157,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
if (dart.notNull(isLast)) this.close(); |
} |
add(str) { |
- return this[_stringSink].write(str); |
+ this[_stringSink].write(str); |
} |
asUtf8Sink(allowMalformed) { |
return new convert._Utf8StringSinkAdapter(this, this[_stringSink], allowMalformed); |
@@ -24267,7 +24267,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
dart.throw(new core.RangeError.range(start, 0, i)); |
} |
} |
- let list = []; |
+ let list = dart.list([], core.int); |
if (end == null) { |
while (dart.notNull(it.moveNext())) |
list[dartx.add](it.current); |
@@ -24369,10 +24369,10 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
super.Codec(); |
} |
decodeStream(byteStream) { |
- return byteStream.transform(core.String)(this.decoder).fold(dart.dynamic)(new core.StringBuffer(), dart.fn((buffer, string) => ((() => { |
+ return byteStream.transform(dart.dynamic)(dart.as(this.decoder, async.StreamTransformer$(core.List$(core.int), dart.dynamic))).fold(dart.dynamic)(new core.StringBuffer(), dart.fn((buffer, string) => ((() => { |
dart.dsend(buffer, 'write', string); |
return buffer; |
- })()), dart.dynamic, [dart.dynamic, core.String])).then(core.String)(dart.fn(buffer => dart.toString(buffer), core.String, [dart.dynamic])); |
+ })()))).then(core.String)(dart.fn(buffer => dart.toString(buffer), core.String, [dart.dynamic])); |
} |
static getByName(name) { |
if (name == null) return null; |
@@ -24433,30 +24433,63 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return new (convert._FusedConverter$(S, T, dart.dynamic))(this, other); |
} |
startChunkedConversion(sink) { |
- dart.as(sink, core.Sink$(T)); |
dart.throw(new core.UnsupportedError(`This converter does not support chunked conversions: ${this}`)); |
} |
- bind(source) { |
- dart.as(source, async.Stream$(S)); |
- return async.Stream$(T).eventTransformed(source, dart.fn(sink => new convert._ConverterStreamEventSink(this, sink), convert._ConverterStreamEventSink, [async.EventSink])); |
+ bind(stream) { |
+ return async.Stream.eventTransformed(stream, dart.fn(sink => new convert._ConverterStreamEventSink(dart.as(this, convert.ChunkedConverter), sink), convert._ConverterStreamEventSink, [async.EventSink])); |
} |
} |
- Converter[dart.implements] = () => [async.StreamTransformer$(S, T)]; |
+ Converter[dart.implements] = () => [async.StreamTransformer]; |
dart.setSignature(Converter, { |
constructors: () => ({Converter: [convert.Converter$(S, T), []]}), |
methods: () => ({ |
fuse: [convert.Converter$(S, dart.dynamic), [convert.Converter$(T, dart.dynamic)]], |
- startChunkedConversion: [convert.ChunkedConversionSink, [core.Sink$(T)]], |
- bind: [async.Stream$(T), [async.Stream$(S)]] |
+ startChunkedConversion: [convert.ChunkedConversionSink, [core.Sink]], |
+ bind: [async.Stream, [async.Stream]] |
}) |
}); |
return Converter; |
}); |
convert.Converter = convert.Converter$(); |
- convert._UnicodeSubsetEncoder = class _UnicodeSubsetEncoder extends convert.Converter$(core.String, core.List$(core.int)) { |
+ convert.ChunkedConverter$ = dart.generic((S, T, S2, T2) => { |
+ class ChunkedConverter extends convert.Converter$(S, T) { |
+ ChunkedConverter() { |
+ super.Converter(); |
+ } |
+ startChunkedConversion(sink) { |
+ dart.as(sink, core.Sink$(T2)); |
+ dart.throw(new core.UnsupportedError(`This converter does not support chunked conversions: ${this}`)); |
+ } |
+ bind(stream) { |
+ dart.as(stream, async.Stream$(S2)); |
+ return async.Stream$(T2).eventTransformed(stream, dart.fn(sink => { |
+ dart.as(sink, async.EventSink$(T2)); |
+ return new (convert._ConverterStreamEventSink$(S2, T2))(this, sink); |
+ }, convert._ConverterStreamEventSink$(S2, T2), [async.EventSink$(T2)])); |
+ } |
+ fuse(other) { |
+ dart.as(other, convert.Converter$(T, dart.dynamic)); |
+ if (dart.is(other, convert.ChunkedConverter$(T, dart.dynamic, T2, dart.dynamic))) { |
+ return new (convert._FusedChunkedConverter$(S, T, dart.dynamic, S2, T2, dart.dynamic))(this, other); |
+ } |
+ return super.fuse(other); |
+ } |
+ } |
+ dart.setSignature(ChunkedConverter, { |
+ constructors: () => ({ChunkedConverter: [convert.ChunkedConverter$(S, T, S2, T2), []]}), |
+ methods: () => ({ |
+ startChunkedConversion: [convert.ChunkedConversionSink$(S2), [core.Sink$(T2)]], |
+ bind: [async.Stream$(T2), [async.Stream$(S2)]], |
+ fuse: [convert.Converter$(S, dart.dynamic), [convert.Converter$(T, dart.dynamic)]] |
+ }) |
+ }); |
+ return ChunkedConverter; |
+ }); |
+ convert.ChunkedConverter = convert.ChunkedConverter$(); |
+ convert._UnicodeSubsetEncoder = class _UnicodeSubsetEncoder extends convert.ChunkedConverter$(core.String, core.List$(core.int), core.String, core.List$(core.int)) { |
_UnicodeSubsetEncoder(subsetMask) { |
this[_subsetMask] = subsetMask; |
- super.Converter(); |
+ super.ChunkedConverter(); |
} |
convert(string, start, end) { |
if (start === void 0) start = 0; |
@@ -24531,11 +24564,11 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
}) |
}); |
const _convertInvalid = Symbol('_convertInvalid'); |
- convert._UnicodeSubsetDecoder = class _UnicodeSubsetDecoder extends convert.Converter$(core.List$(core.int), core.String) { |
+ convert._UnicodeSubsetDecoder = class _UnicodeSubsetDecoder extends convert.ChunkedConverter$(core.List$(core.int), core.String, core.List$(core.int), core.String) { |
_UnicodeSubsetDecoder(allowInvalid, subsetMask) { |
this[_allowInvalid] = allowInvalid; |
this[_subsetMask] = subsetMask; |
- super.Converter(); |
+ super.ChunkedConverter(); |
} |
convert(bytes, start, end) { |
if (start === void 0) start = 0; |
@@ -24543,7 +24576,6 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
let byteCount = bytes[dartx.length]; |
core.RangeError.checkValidRange(start, end, byteCount); |
if (end == null) end = byteCount; |
- let length = dart.notNull(end) - dart.notNull(start); |
for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull(i) + 1) { |
let byte = bytes[dartx.get](i); |
if ((dart.notNull(byte) & ~dart.notNull(this[_subsetMask])) >>> 0 != 0) { |
@@ -24605,7 +24637,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
ChunkedConversionSink() { |
} |
static withCallback(callback) { |
- return new (convert._SimpleCallbackSink$(T))(callback); |
+ return new convert._SimpleCallbackSink(callback); |
} |
} |
ChunkedConversionSink[dart.implements] = () => [core.Sink$(T)]; |
@@ -24715,15 +24747,616 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
add: [dart.void, [core.List$(core.int)]] |
}) |
}); |
+ const _urlSafe = Symbol('_urlSafe'); |
+ convert.Base64Encoder = class Base64Encoder extends convert.ChunkedConverter$(core.List$(core.int), core.String, core.List$(core.int), core.String) { |
+ Base64Encoder() { |
+ this[_urlSafe] = false; |
+ super.ChunkedConverter(); |
+ } |
+ urlSafe() { |
+ this[_urlSafe] = true; |
+ super.ChunkedConverter(); |
+ } |
+ convert(input) { |
+ if (dart.notNull(input[dartx.isEmpty])) return ""; |
+ let encoder = new convert._Base64Encoder(this[_urlSafe]); |
+ let buffer = encoder.encode(input, 0, input[dartx.length], true); |
+ return core.String.fromCharCodes(buffer); |
+ } |
+ startChunkedConversion(sink) { |
+ if (dart.is(sink, convert.StringConversionSink)) { |
+ return new convert._Utf8Base64EncoderSink(sink.asUtf8Sink(false), this[_urlSafe]); |
+ } |
+ return new convert._AsciiBase64EncoderSink(sink, this[_urlSafe]); |
+ } |
+ }; |
+ dart.defineNamedConstructor(convert.Base64Encoder, 'urlSafe'); |
+ dart.setSignature(convert.Base64Encoder, { |
+ constructors: () => ({ |
+ Base64Encoder: [convert.Base64Encoder, []], |
+ urlSafe: [convert.Base64Encoder, []] |
+ }), |
+ methods: () => ({ |
+ convert: [core.String, [core.List$(core.int)]], |
+ startChunkedConversion: [convert.ByteConversionSink, [core.Sink$(core.String)]] |
+ }) |
+ }); |
+ const _encoder = Symbol('_encoder'); |
+ convert.Base64Codec = class Base64Codec extends convert.Codec$(core.List$(core.int), core.String) { |
+ Base64Codec() { |
+ this[_encoder] = dart.const(new convert.Base64Encoder()); |
+ super.Codec(); |
+ } |
+ urlSafe() { |
+ this[_encoder] = dart.const(new convert.Base64Encoder.urlSafe()); |
+ super.Codec(); |
+ } |
+ get encoder() { |
+ return this[_encoder]; |
+ } |
+ get decoder() { |
+ return dart.const(new convert.Base64Decoder()); |
+ } |
+ }; |
+ dart.defineNamedConstructor(convert.Base64Codec, 'urlSafe'); |
+ dart.setSignature(convert.Base64Codec, { |
+ constructors: () => ({ |
+ Base64Codec: [convert.Base64Codec, []], |
+ urlSafe: [convert.Base64Codec, []] |
+ }) |
+ }); |
+ convert.BASE64 = dart.const(new convert.Base64Codec()); |
+ convert.BASE64URL = dart.const(new convert.Base64Codec.urlSafe()); |
+ convert._paddingChar = 61; |
+ const _alphabet = Symbol('_alphabet'); |
+ const _state$0 = Symbol('_state'); |
+ convert._Base64Encoder = class _Base64Encoder extends core.Object { |
+ _Base64Encoder(urlSafe) { |
+ this[_alphabet] = dart.notNull(urlSafe) ? convert._Base64Encoder._base64urlAlphabet : convert._Base64Encoder._base64Alphabet; |
+ this[_state$0] = 0; |
+ } |
+ static _encodeState(count, bits) { |
+ dart.assert(dart.notNull(count) <= dart.notNull(convert._Base64Encoder._countMask)); |
+ return (bits[dartx['<<']](convert._Base64Encoder._valueShift) | dart.notNull(count)) >>> 0; |
+ } |
+ static _stateBits(state) { |
+ return state[dartx['>>']](convert._Base64Encoder._valueShift); |
+ } |
+ static _stateCount(state) { |
+ return (dart.notNull(state) & dart.notNull(convert._Base64Encoder._countMask)) >>> 0; |
+ } |
+ createBuffer(bufferLength) { |
+ return typed_data.Uint8List.new(bufferLength); |
+ } |
+ encode(bytes, start, end, isLast) { |
+ dart.assert(0 <= dart.notNull(start)); |
+ dart.assert(dart.notNull(start) <= dart.notNull(end)); |
+ dart.assert(bytes == null || dart.notNull(end) <= dart.notNull(bytes[dartx.length])); |
+ let length = dart.notNull(end) - dart.notNull(start); |
+ let count = convert._Base64Encoder._stateCount(this[_state$0]); |
+ let byteCount = dart.notNull(count) + length; |
+ let fullChunks = (byteCount / 3)[dartx.truncate](); |
+ let partialChunkLength = byteCount - fullChunks * 3; |
+ let bufferLength = fullChunks * 4; |
+ if (dart.notNull(isLast) && partialChunkLength > 0) { |
+ bufferLength = bufferLength + 4; |
+ } |
+ let output = this.createBuffer(bufferLength); |
+ this[_state$0] = convert._Base64Encoder.encodeChunk(this[_alphabet], bytes, start, end, isLast, output, 0, this[_state$0]); |
+ if (bufferLength > 0) return output; |
+ return null; |
+ } |
+ static encodeChunk(alphabet, bytes, start, end, isLast, output, outputIndex, state) { |
+ let bits = convert._Base64Encoder._stateBits(state); |
+ let expectedChars = 3 - dart.notNull(convert._Base64Encoder._stateCount(state)); |
+ let byteOr = 0; |
+ for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull(i) + 1) { |
+ let byte = bytes[dartx.get](i); |
+ byteOr = (dart.notNull(byteOr) | dart.notNull(byte)) >>> 0; |
+ bits = (dart.notNull(bits) << 8 | dart.notNull(byte)) & 16777215; |
+ expectedChars--; |
+ if (expectedChars == 0) { |
+ output[dartx.set]((() => { |
+ let x = outputIndex; |
+ outputIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), alphabet[dartx.codeUnitAt]((bits[dartx['>>']](18) & dart.notNull(convert._Base64Encoder._sixBitMask)) >>> 0)); |
+ output[dartx.set]((() => { |
+ let x = outputIndex; |
+ outputIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), alphabet[dartx.codeUnitAt]((bits[dartx['>>']](12) & dart.notNull(convert._Base64Encoder._sixBitMask)) >>> 0)); |
+ output[dartx.set]((() => { |
+ let x = outputIndex; |
+ outputIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), alphabet[dartx.codeUnitAt]((bits[dartx['>>']](6) & dart.notNull(convert._Base64Encoder._sixBitMask)) >>> 0)); |
+ output[dartx.set]((() => { |
+ let x = outputIndex; |
+ outputIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), alphabet[dartx.codeUnitAt]((dart.notNull(bits) & dart.notNull(convert._Base64Encoder._sixBitMask)) >>> 0)); |
+ expectedChars = 3; |
+ bits = 0; |
+ } |
+ } |
+ if (dart.notNull(byteOr) >= 0 && dart.notNull(byteOr) <= 255) { |
+ if (dart.notNull(isLast) && expectedChars < 3) { |
+ convert._Base64Encoder.writeFinalChunk(alphabet, output, outputIndex, 3 - expectedChars, bits); |
+ return 0; |
+ } |
+ return convert._Base64Encoder._encodeState(3 - expectedChars, bits); |
+ } |
+ let i = start; |
+ while (dart.notNull(i) < dart.notNull(end)) { |
+ let byte = bytes[dartx.get](i); |
+ if (dart.notNull(byte) < 0 || dart.notNull(byte) > 255) break; |
+ i = dart.notNull(i) + 1; |
+ } |
+ dart.throw(new core.ArgumentError.value(bytes, `Not a byte value at index ${i}: 0x${bytes[dartx.get](i)[dartx.toRadixString](16)}`)); |
+ } |
+ static writeFinalChunk(alphabet, output, outputIndex, count, bits) { |
+ dart.assert(dart.notNull(count) > 0); |
+ if (count == 1) { |
+ output[dartx.set]((() => { |
+ let x = outputIndex; |
+ outputIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), alphabet[dartx.codeUnitAt]((bits[dartx['>>']](2) & dart.notNull(convert._Base64Encoder._sixBitMask)) >>> 0)); |
+ output[dartx.set]((() => { |
+ let x = outputIndex; |
+ outputIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), alphabet[dartx.codeUnitAt]((dart.notNull(bits) << 4 & dart.notNull(convert._Base64Encoder._sixBitMask)) >>> 0)); |
+ output[dartx.set]((() => { |
+ let x = outputIndex; |
+ outputIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), convert._paddingChar); |
+ output[dartx.set]((() => { |
+ let x = outputIndex; |
+ outputIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), convert._paddingChar); |
+ } else { |
+ dart.assert(count == 2); |
+ output[dartx.set]((() => { |
+ let x = outputIndex; |
+ outputIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), alphabet[dartx.codeUnitAt]((bits[dartx['>>']](10) & dart.notNull(convert._Base64Encoder._sixBitMask)) >>> 0)); |
+ output[dartx.set]((() => { |
+ let x = outputIndex; |
+ outputIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), alphabet[dartx.codeUnitAt]((bits[dartx['>>']](4) & dart.notNull(convert._Base64Encoder._sixBitMask)) >>> 0)); |
+ output[dartx.set]((() => { |
+ let x = outputIndex; |
+ outputIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), alphabet[dartx.codeUnitAt]((dart.notNull(bits) << 2 & dart.notNull(convert._Base64Encoder._sixBitMask)) >>> 0)); |
+ output[dartx.set]((() => { |
+ let x = outputIndex; |
+ outputIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), convert._paddingChar); |
+ } |
+ } |
+ }; |
+ dart.setSignature(convert._Base64Encoder, { |
+ constructors: () => ({_Base64Encoder: [convert._Base64Encoder, [core.bool]]}), |
+ methods: () => ({ |
+ createBuffer: [typed_data.Uint8List, [core.int]], |
+ encode: [typed_data.Uint8List, [core.List$(core.int), core.int, core.int, core.bool]] |
+ }), |
+ statics: () => ({ |
+ _encodeState: [core.int, [core.int, core.int]], |
+ _stateBits: [core.int, [core.int]], |
+ _stateCount: [core.int, [core.int]], |
+ encodeChunk: [core.int, [core.String, core.List$(core.int), core.int, core.int, core.bool, typed_data.Uint8List, core.int, core.int]], |
+ writeFinalChunk: [dart.void, [core.String, typed_data.Uint8List, core.int, core.int, core.int]] |
+ }), |
+ names: ['_encodeState', '_stateBits', '_stateCount', 'encodeChunk', 'writeFinalChunk'] |
+ }); |
+ convert._Base64Encoder._base64Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; |
+ convert._Base64Encoder._base64urlAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; |
+ convert._Base64Encoder._valueShift = 2; |
+ convert._Base64Encoder._countMask = 3; |
+ convert._Base64Encoder._sixBitMask = 63; |
+ convert._BufferCachingBase64Encoder = class _BufferCachingBase64Encoder extends convert._Base64Encoder { |
+ _BufferCachingBase64Encoder(urlSafe) { |
+ this.bufferCache = null; |
+ super._Base64Encoder(urlSafe); |
+ } |
+ createBuffer(bufferLength) { |
+ if (this.bufferCache == null || dart.notNull(this.bufferCache[dartx.length]) < dart.notNull(bufferLength)) { |
+ this.bufferCache = typed_data.Uint8List.new(bufferLength); |
+ } |
+ return typed_data.Uint8List.view(this.bufferCache[dartx.buffer], 0, bufferLength); |
+ } |
+ }; |
+ dart.setSignature(convert._BufferCachingBase64Encoder, { |
+ constructors: () => ({_BufferCachingBase64Encoder: [convert._BufferCachingBase64Encoder, [core.bool]]}) |
+ }); |
+ const _add$1 = Symbol('_add'); |
+ convert._Base64EncoderSink = class _Base64EncoderSink extends convert.ByteConversionSinkBase { |
+ add(source) { |
+ this[_add$1](source, 0, source[dartx.length], false); |
+ } |
+ close() { |
+ this[_add$1](null, 0, 0, true); |
+ } |
+ addSlice(source, start, end, isLast) { |
+ if (end == null) dart.throw(new core.ArgumentError.notNull("end")); |
+ core.RangeError.checkValidRange(start, end, source[dartx.length]); |
+ this[_add$1](source, start, end, isLast); |
+ } |
+ }; |
+ dart.setSignature(convert._Base64EncoderSink, { |
+ methods: () => ({ |
+ add: [dart.void, [core.List$(core.int)]], |
+ close: [dart.void, []] |
+ }) |
+ }); |
+ convert._AsciiBase64EncoderSink = class _AsciiBase64EncoderSink extends convert._Base64EncoderSink { |
+ _AsciiBase64EncoderSink(sink, urlSafe) { |
+ this[_sink$] = sink; |
+ this[_encoder] = new convert._BufferCachingBase64Encoder(urlSafe); |
+ } |
+ [_add$1](source, start, end, isLast) { |
+ let buffer = this[_encoder].encode(source, start, end, isLast); |
+ if (buffer != null) { |
+ let string = core.String.fromCharCodes(buffer); |
+ this[_sink$].add(string); |
+ } |
+ if (dart.notNull(isLast)) { |
+ this[_sink$].close(); |
+ } |
+ } |
+ }; |
+ dart.setSignature(convert._AsciiBase64EncoderSink, { |
+ constructors: () => ({_AsciiBase64EncoderSink: [convert._AsciiBase64EncoderSink, [core.Sink$(core.String), core.bool]]}), |
+ methods: () => ({[_add$1]: [dart.void, [core.List$(core.int), core.int, core.int, core.bool]]}) |
+ }); |
+ convert._Utf8Base64EncoderSink = class _Utf8Base64EncoderSink extends convert._Base64EncoderSink { |
+ _Utf8Base64EncoderSink(sink, urlSafe) { |
+ this[_sink$] = sink; |
+ this[_encoder] = new convert._Base64Encoder(urlSafe); |
+ } |
+ [_add$1](source, start, end, isLast) { |
+ let buffer = this[_encoder].encode(source, start, end, isLast); |
+ if (buffer != null) { |
+ this[_sink$].addSlice(buffer, 0, buffer[dartx.length], isLast); |
+ } |
+ } |
+ }; |
+ dart.setSignature(convert._Utf8Base64EncoderSink, { |
+ constructors: () => ({_Utf8Base64EncoderSink: [convert._Utf8Base64EncoderSink, [convert.ByteConversionSink, core.bool]]}), |
+ methods: () => ({[_add$1]: [dart.void, [core.List$(core.int), core.int, core.int, core.bool]]}) |
+ }); |
+ convert.Base64Decoder = class Base64Decoder extends convert.ChunkedConverter$(core.String, core.List$(core.int), core.String, core.List$(core.int)) { |
+ Base64Decoder() { |
+ super.ChunkedConverter(); |
+ } |
+ convert(input, start, end) { |
+ if (start === void 0) start = 0; |
+ if (end === void 0) end = null; |
+ end = core.RangeError.checkValidRange(start, end, input[dartx.length]); |
+ if (start == end) return typed_data.Uint8List.new(0); |
+ let decoder = new convert._Base64Decoder(); |
+ let buffer = decoder.decode(input, start, end); |
+ decoder.close(input, end); |
+ return buffer; |
+ } |
+ startChunkedConversion(sink) { |
+ return new convert._Base64DecoderSink(sink); |
+ } |
+ }; |
+ dart.setSignature(convert.Base64Decoder, { |
+ constructors: () => ({Base64Decoder: [convert.Base64Decoder, []]}), |
+ methods: () => ({ |
+ convert: [core.List$(core.int), [core.String], [core.int, core.int]], |
+ startChunkedConversion: [convert.StringConversionSink, [core.Sink$(core.List$(core.int))]] |
+ }) |
+ }); |
+ convert._Base64Decoder = class _Base64Decoder extends core.Object { |
+ _Base64Decoder() { |
+ this[_state$0] = 0; |
+ } |
+ static _encodeCharacterState(count, bits) { |
+ dart.assert(count == (dart.notNull(count) & dart.notNull(convert._Base64Decoder._countMask)) >>> 0); |
+ return (bits[dartx['<<']](convert._Base64Decoder._valueShift) | dart.notNull(count)) >>> 0; |
+ } |
+ static _stateCount(state) { |
+ dart.assert(dart.notNull(state) >= 0); |
+ return (dart.notNull(state) & dart.notNull(convert._Base64Decoder._countMask)) >>> 0; |
+ } |
+ static _stateBits(state) { |
+ dart.assert(dart.notNull(state) >= 0); |
+ return state[dartx['>>']](convert._Base64Decoder._valueShift); |
+ } |
+ static _encodePaddingState(expectedPadding) { |
+ dart.assert(dart.notNull(expectedPadding) >= 0); |
+ dart.assert(dart.notNull(expectedPadding) <= 5); |
+ return -dart.notNull(expectedPadding) - 1; |
+ } |
+ static _statePadding(state) { |
+ dart.assert(dart.notNull(state) < 0); |
+ return -dart.notNull(state) - 1; |
+ } |
+ static _hasSeenPadding(state) { |
+ return dart.notNull(state) < 0; |
+ } |
+ decode(input, start, end) { |
+ dart.assert(0 <= dart.notNull(start)); |
+ dart.assert(dart.notNull(start) <= dart.notNull(end)); |
+ dart.assert(dart.notNull(end) <= dart.notNull(input[dartx.length])); |
+ if (dart.notNull(convert._Base64Decoder._hasSeenPadding(this[_state$0]))) { |
+ this[_state$0] = convert._Base64Decoder._checkPadding(input, start, end, this[_state$0]); |
+ return null; |
+ } |
+ if (start == end) return typed_data.Uint8List.new(0); |
+ let buffer = convert._Base64Decoder._allocateBuffer(input, start, end, this[_state$0]); |
+ this[_state$0] = convert._Base64Decoder.decodeChunk(input, start, end, buffer, 0, this[_state$0]); |
+ return buffer; |
+ } |
+ close(input, end) { |
+ if (dart.notNull(this[_state$0]) < dart.notNull(convert._Base64Decoder._encodePaddingState(0))) { |
+ dart.throw(new core.FormatException("Missing padding character", input, end)); |
+ } |
+ if (dart.notNull(this[_state$0]) > 0) { |
+ dart.throw(new core.FormatException("Invalid length, must be multiple of four", input, end)); |
+ } |
+ this[_state$0] = convert._Base64Decoder._encodePaddingState(0); |
+ } |
+ static decodeChunk(input, start, end, output, outIndex, state) { |
+ dart.assert(!dart.notNull(convert._Base64Decoder._hasSeenPadding(state))); |
+ let asciiMask = 127; |
+ let asciiMax = 127; |
+ let eightBitMask = 255; |
+ let bitsPerCharacter = 6; |
+ let bits = convert._Base64Decoder._stateBits(state); |
+ let count = convert._Base64Decoder._stateCount(state); |
+ let charOr = 0; |
+ for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull(i) + 1) { |
+ let char = input[dartx.codeUnitAt](i); |
+ charOr = (dart.notNull(charOr) | dart.notNull(char)) >>> 0; |
+ let code = convert._Base64Decoder._inverseAlphabet[dartx.get]((dart.notNull(char) & asciiMask) >>> 0); |
+ if (dart.notNull(code) >= 0) { |
+ bits = (bits[dartx['<<']](bitsPerCharacter) | dart.notNull(code)) & 16777215; |
+ count = dart.notNull(count) + 1 & 3; |
+ if (count == 0) { |
+ dart.assert(dart.notNull(outIndex) + 3 <= dart.notNull(output[dartx.length])); |
+ output[dartx.set]((() => { |
+ let x = outIndex; |
+ outIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), (bits[dartx['>>']](16) & eightBitMask) >>> 0); |
+ output[dartx.set]((() => { |
+ let x = outIndex; |
+ outIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), (bits[dartx['>>']](8) & eightBitMask) >>> 0); |
+ output[dartx.set]((() => { |
+ let x = outIndex; |
+ outIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), (dart.notNull(bits) & eightBitMask) >>> 0); |
+ bits = 0; |
+ } |
+ continue; |
+ } else if (code == convert._Base64Decoder._padding && dart.notNull(count) > 1) { |
+ if (dart.notNull(charOr) < 0 || dart.notNull(charOr) > asciiMax) break; |
+ if (count == 3) { |
+ if ((dart.notNull(bits) & 3) != 0) { |
+ dart.throw(new core.FormatException("Invalid encoding before padding", input, i)); |
+ } |
+ output[dartx.set]((() => { |
+ let x = outIndex; |
+ outIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), bits[dartx['>>']](10)); |
+ output[dartx.set]((() => { |
+ let x = outIndex; |
+ outIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), bits[dartx['>>']](2)); |
+ } else { |
+ if ((dart.notNull(bits) & 15) != 0) { |
+ dart.throw(new core.FormatException("Invalid encoding before padding", input, i)); |
+ } |
+ output[dartx.set]((() => { |
+ let x = outIndex; |
+ outIndex = dart.notNull(x) + 1; |
+ return x; |
+ })(), bits[dartx['>>']](4)); |
+ } |
+ let expectedPadding = (3 - dart.notNull(count)) * 3; |
+ if (char == convert._Base64Decoder._char_percent) { |
+ expectedPadding = expectedPadding + 2; |
+ } |
+ state = convert._Base64Decoder._encodePaddingState(expectedPadding); |
+ return convert._Base64Decoder._checkPadding(input, dart.notNull(i) + 1, end, state); |
+ } |
+ dart.throw(new core.FormatException("Invalid character", input, i)); |
+ } |
+ if (dart.notNull(charOr) >= 0 && dart.notNull(charOr) <= asciiMax) { |
+ return convert._Base64Decoder._encodeCharacterState(count, bits); |
+ } |
+ let i = null; |
+ for (i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull(i) + 1) { |
+ let char = input[dartx.codeUnitAt](i); |
+ if (dart.notNull(char) < 0 || dart.notNull(char) > asciiMax) break; |
+ } |
+ dart.throw(new core.FormatException("Invalid character", input, i)); |
+ } |
+ static _allocateBuffer(input, start, end, state) { |
+ dart.assert(dart.notNull(state) >= 0); |
+ let paddingStart = convert._Base64Decoder._trimPaddingChars(input, start, end); |
+ let length = dart.notNull(convert._Base64Decoder._stateCount(state)) + (dart.notNull(paddingStart) - dart.notNull(start)); |
+ let bufferLength = length[dartx['>>']](2) * 3; |
+ let remainderLength = length & 3; |
+ if (remainderLength != 0 && dart.notNull(paddingStart) < dart.notNull(end)) { |
+ bufferLength = bufferLength + (remainderLength - 1); |
+ } |
+ if (bufferLength > 0) return typed_data.Uint8List.new(bufferLength); |
+ return null; |
+ } |
+ static _trimPaddingChars(input, start, end) { |
+ let padding = 0; |
+ let index = end; |
+ let newEnd = end; |
+ while (dart.notNull(index) > dart.notNull(start) && padding < 2) { |
+ index = dart.notNull(index) - 1; |
+ let char = input[dartx.codeUnitAt](index); |
+ if (char == convert._paddingChar) { |
+ padding++; |
+ newEnd = index; |
+ continue; |
+ } |
+ if ((dart.notNull(char) | 32) >>> 0 == convert._Base64Decoder._char_d) { |
+ if (index == start) break; |
+ index = dart.notNull(index) - 1; |
+ char = input[dartx.codeUnitAt](index); |
+ } |
+ if (char == convert._Base64Decoder._char_3) { |
+ if (index == start) break; |
+ index = dart.notNull(index) - 1; |
+ char = input[dartx.codeUnitAt](index); |
+ } |
+ if (char == convert._Base64Decoder._char_percent) { |
+ padding++; |
+ newEnd = index; |
+ continue; |
+ } |
+ break; |
+ } |
+ return newEnd; |
+ } |
+ static _checkPadding(input, start, end, state) { |
+ dart.assert(convert._Base64Decoder._hasSeenPadding(state)); |
+ if (start == end) return state; |
+ let expectedPadding = convert._Base64Decoder._statePadding(state); |
+ dart.assert(dart.notNull(expectedPadding) >= 0); |
+ dart.assert(dart.notNull(expectedPadding) < 6); |
+ while (dart.notNull(expectedPadding) > 0) { |
+ let char = input[dartx.codeUnitAt](start); |
+ if (expectedPadding == 3) { |
+ if (char == convert._paddingChar) { |
+ expectedPadding = dart.notNull(expectedPadding) - 3; |
+ start = dart.notNull(start) + 1; |
+ break; |
+ } |
+ if (char == convert._Base64Decoder._char_percent) { |
+ expectedPadding = dart.notNull(expectedPadding) - 1; |
+ start = dart.notNull(start) + 1; |
+ if (start == end) break; |
+ char = input[dartx.codeUnitAt](start); |
+ } else { |
+ break; |
+ } |
+ } |
+ let expectedPartialPadding = expectedPadding; |
+ if (dart.notNull(expectedPartialPadding) > 3) { |
+ expectedPartialPadding = dart.notNull(expectedPartialPadding) - 3; |
+ } |
+ if (expectedPartialPadding == 2) { |
+ if (char != convert._Base64Decoder._char_3) break; |
+ start = dart.notNull(start) + 1; |
+ expectedPadding = dart.notNull(expectedPadding) - 1; |
+ if (start == end) break; |
+ char = input[dartx.codeUnitAt](start); |
+ } |
+ if ((dart.notNull(char) | 32) >>> 0 != convert._Base64Decoder._char_d) break; |
+ start = dart.notNull(start) + 1; |
+ expectedPadding = dart.notNull(expectedPadding) - 1; |
+ if (start == end) break; |
+ } |
+ if (start != end) { |
+ dart.throw(new core.FormatException("Invalid padding character", input, start)); |
+ } |
+ return convert._Base64Decoder._encodePaddingState(expectedPadding); |
+ } |
+ }; |
+ dart.setSignature(convert._Base64Decoder, { |
+ methods: () => ({ |
+ decode: [typed_data.Uint8List, [core.String, core.int, core.int]], |
+ close: [dart.void, [core.String, core.int]] |
+ }), |
+ statics: () => ({ |
+ _encodeCharacterState: [core.int, [core.int, core.int]], |
+ _stateCount: [core.int, [core.int]], |
+ _stateBits: [core.int, [core.int]], |
+ _encodePaddingState: [core.int, [core.int]], |
+ _statePadding: [core.int, [core.int]], |
+ _hasSeenPadding: [core.bool, [core.int]], |
+ decodeChunk: [core.int, [core.String, core.int, core.int, typed_data.Uint8List, core.int, core.int]], |
+ _allocateBuffer: [typed_data.Uint8List, [core.String, core.int, core.int, core.int]], |
+ _trimPaddingChars: [core.int, [core.String, core.int, core.int]], |
+ _checkPadding: [core.int, [core.String, core.int, core.int, core.int]] |
+ }), |
+ names: ['_encodeCharacterState', '_stateCount', '_stateBits', '_encodePaddingState', '_statePadding', '_hasSeenPadding', 'decodeChunk', '_allocateBuffer', '_trimPaddingChars', '_checkPadding'] |
+ }); |
+ convert._Base64Decoder._valueShift = 2; |
+ convert._Base64Decoder._countMask = 3; |
+ convert._Base64Decoder._invalid = -2; |
+ convert._Base64Decoder._padding = -1; |
+ convert._Base64Decoder._char_percent = 37; |
+ convert._Base64Decoder._char_3 = 51; |
+ convert._Base64Decoder._char_d = 100; |
+ dart.defineLazy(convert._Base64Decoder, { |
+ get __() { |
+ return convert._Base64Decoder._invalid; |
+ }, |
+ get _p() { |
+ return convert._Base64Decoder._padding; |
+ }, |
+ get _inverseAlphabet() { |
+ return typed_data.Int8List.fromList(dart.list([convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder._p, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, 62, convert._Base64Decoder.__, 62, convert._Base64Decoder.__, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder._p, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, 63, convert._Base64Decoder.__, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__, convert._Base64Decoder.__], core.int)); |
+ } |
+ }); |
+ const _decoder = Symbol('_decoder'); |
+ convert._Base64DecoderSink = class _Base64DecoderSink extends convert.StringConversionSinkBase { |
+ _Base64DecoderSink(sink) { |
+ this[_decoder] = new convert._Base64Decoder(); |
+ this[_sink$] = sink; |
+ } |
+ add(string) { |
+ if (dart.notNull(string[dartx.isEmpty])) return; |
+ let buffer = this[_decoder].decode(string, 0, string[dartx.length]); |
+ if (buffer != null) this[_sink$].add(buffer); |
+ } |
+ close() { |
+ this[_decoder].close(null, null); |
+ this[_sink$].close(); |
+ } |
+ addSlice(string, start, end, isLast) { |
+ end = core.RangeError.checkValidRange(start, end, string[dartx.length]); |
+ if (start == end) return; |
+ let buffer = this[_decoder].decode(string, start, end); |
+ if (buffer != null) this[_sink$].add(buffer); |
+ if (dart.notNull(isLast)) { |
+ this[_decoder].close(string, end); |
+ this[_sink$].close(); |
+ } |
+ } |
+ }; |
+ dart.setSignature(convert._Base64DecoderSink, { |
+ constructors: () => ({_Base64DecoderSink: [convert._Base64DecoderSink, [core.Sink$(core.List$(core.int))]]}), |
+ methods: () => ({ |
+ close: [dart.void, []], |
+ addSlice: [dart.void, [core.String, core.int, core.int, core.bool]] |
+ }) |
+ }); |
convert._ByteAdapterSink = class _ByteAdapterSink extends convert.ByteConversionSinkBase { |
_ByteAdapterSink(sink) { |
this[_sink$] = sink; |
} |
add(chunk) { |
- return this[_sink$].add(chunk); |
+ this[_sink$].add(chunk); |
} |
close() { |
- return this[_sink$].close(); |
+ this[_sink$].close(); |
} |
}; |
dart.setSignature(convert._ByteAdapterSink, { |
@@ -24810,30 +25443,6 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return _SimpleCallbackSink; |
}); |
convert._SimpleCallbackSink = convert._SimpleCallbackSink$(); |
- convert._EventSinkAdapter$ = dart.generic(T => { |
- class _EventSinkAdapter extends core.Object { |
- _EventSinkAdapter(sink) { |
- this[_sink$] = sink; |
- } |
- add(data) { |
- dart.as(data, T); |
- return this[_sink$].add(data); |
- } |
- close() { |
- return this[_sink$].close(); |
- } |
- } |
- _EventSinkAdapter[dart.implements] = () => [convert.ChunkedConversionSink$(T)]; |
- dart.setSignature(_EventSinkAdapter, { |
- constructors: () => ({_EventSinkAdapter: [convert._EventSinkAdapter$(T), [async.EventSink$(T)]]}), |
- methods: () => ({ |
- add: [dart.void, [T]], |
- close: [dart.void, []] |
- }) |
- }); |
- return _EventSinkAdapter; |
- }); |
- convert._EventSinkAdapter = convert._EventSinkAdapter$(); |
const _eventSink = Symbol('_eventSink'); |
const _chunkedSink = Symbol('_chunkedSink'); |
convert._ConverterStreamEventSink$ = dart.generic((S, T) => { |
@@ -24844,19 +25453,19 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
add(o) { |
dart.as(o, S); |
- return this[_chunkedSink].add(o); |
+ this[_chunkedSink].add(o); |
} |
addError(error, stackTrace) { |
if (stackTrace === void 0) stackTrace = null; |
this[_eventSink].addError(error, stackTrace); |
} |
close() { |
- return this[_chunkedSink].close(); |
+ this[_chunkedSink].close(); |
} |
} |
_ConverterStreamEventSink[dart.implements] = () => [async.EventSink$(S)]; |
dart.setSignature(_ConverterStreamEventSink, { |
- constructors: () => ({_ConverterStreamEventSink: [convert._ConverterStreamEventSink$(S, T), [convert.Converter, async.EventSink$(T)]]}), |
+ constructors: () => ({_ConverterStreamEventSink: [convert._ConverterStreamEventSink$(S, T), [convert.ChunkedConverter$(dart.dynamic, dart.dynamic, S, T), async.EventSink$(T)]]}), |
methods: () => ({ |
add: [dart.void, [S]], |
addError: [dart.void, [core.Object], [core.StackTrace]], |
@@ -24866,8 +25475,34 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return _ConverterStreamEventSink; |
}); |
convert._ConverterStreamEventSink = convert._ConverterStreamEventSink$(); |
- const _second = Symbol('_second'); |
const _first$ = Symbol('_first'); |
+ const _second = Symbol('_second'); |
+ convert._FusedChunkedConverter$ = dart.generic((S, M, T, S2, M2, T2) => { |
+ class _FusedChunkedConverter extends convert.ChunkedConverter$(S, T, S2, T2) { |
+ _FusedChunkedConverter(first, second) { |
+ this[_first$] = first; |
+ this[_second] = second; |
+ super.ChunkedConverter(); |
+ } |
+ convert(input) { |
+ dart.as(input, S); |
+ return this[_second].convert(this[_first$].convert(input)); |
+ } |
+ startChunkedConversion(sink) { |
+ dart.as(sink, core.Sink$(T2)); |
+ return this[_first$].startChunkedConversion(this[_second].startChunkedConversion(sink)); |
+ } |
+ } |
+ dart.setSignature(_FusedChunkedConverter, { |
+ constructors: () => ({_FusedChunkedConverter: [convert._FusedChunkedConverter$(S, M, T, S2, M2, T2), [convert.ChunkedConverter$(S, M, S2, M2), convert.ChunkedConverter$(M, T, M2, T2)]]}), |
+ methods: () => ({ |
+ convert: [T, [S]], |
+ startChunkedConversion: [convert.ChunkedConversionSink$(S2), [core.Sink$(T2)]] |
+ }) |
+ }); |
+ return _FusedChunkedConverter; |
+ }); |
+ convert._FusedChunkedConverter = convert._FusedChunkedConverter$(); |
convert._FusedCodec$ = dart.generic((S, M, T) => { |
class _FusedCodec extends convert.Codec$(S, T) { |
get encoder() { |
@@ -24920,19 +25555,12 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
convert(input) { |
dart.as(input, S); |
- return dart.as(this[_second].convert(this[_first$].convert(input)), T); |
- } |
- startChunkedConversion(sink) { |
- dart.as(sink, core.Sink$(T)); |
- return this[_first$].startChunkedConversion(this[_second].startChunkedConversion(sink)); |
+ return this[_second].convert(this[_first$].convert(input)); |
} |
} |
dart.setSignature(_FusedConverter, { |
- constructors: () => ({_FusedConverter: [convert._FusedConverter$(S, M, T), [convert.Converter, convert.Converter]]}), |
- methods: () => ({ |
- convert: [T, [S]], |
- startChunkedConversion: [convert.ChunkedConversionSink, [core.Sink$(T)]] |
- }) |
+ constructors: () => ({_FusedConverter: [convert._FusedConverter$(S, M, T), [convert.Converter$(S, M), convert.Converter$(M, T)]]}), |
+ methods: () => ({convert: [T, [S]]}) |
}); |
return _FusedConverter; |
}); |
@@ -24946,31 +25574,49 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
this.escapeApos = escapeApos; |
this.escapeSlash = escapeSlash; |
} |
+ HtmlEscapeMode(opts) { |
+ let name = opts && 'name' in opts ? opts.name : "custom"; |
+ let escapeLtGt = opts && 'escapeLtGt' in opts ? opts.escapeLtGt : false; |
+ let escapeQuot = opts && 'escapeQuot' in opts ? opts.escapeQuot : false; |
+ let escapeApos = opts && 'escapeApos' in opts ? opts.escapeApos : false; |
+ let escapeSlash = opts && 'escapeSlash' in opts ? opts.escapeSlash : false; |
+ this.escapeLtGt = escapeLtGt; |
+ this.escapeQuot = escapeQuot; |
+ this.escapeApos = escapeApos; |
+ this.escapeSlash = escapeSlash; |
+ this[_name$0] = name; |
+ } |
toString() { |
return this[_name$0]; |
} |
}; |
dart.defineNamedConstructor(convert.HtmlEscapeMode, '_'); |
dart.setSignature(convert.HtmlEscapeMode, { |
- constructors: () => ({_: [convert.HtmlEscapeMode, [core.String, core.bool, core.bool, core.bool, core.bool]]}) |
+ constructors: () => ({ |
+ _: [convert.HtmlEscapeMode, [core.String, core.bool, core.bool, core.bool, core.bool]], |
+ HtmlEscapeMode: [convert.HtmlEscapeMode, [], {name: core.String, escapeLtGt: core.bool, escapeQuot: core.bool, escapeApos: core.bool, escapeSlash: core.bool}] |
+ }) |
}); |
dart.defineLazy(convert.HtmlEscapeMode, { |
get UNKNOWN() { |
return dart.const(new convert.HtmlEscapeMode._('unknown', true, true, true, true)); |
}, |
get ATTRIBUTE() { |
- return dart.const(new convert.HtmlEscapeMode._('attribute', false, true, false, false)); |
+ return dart.const(new convert.HtmlEscapeMode._('attribute', true, true, false, false)); |
+ }, |
+ get SQ_ATTRIBUTE() { |
+ return dart.const(new convert.HtmlEscapeMode._('attribute', true, false, true, false)); |
}, |
get ELEMENT() { |
- return dart.const(new convert.HtmlEscapeMode._('element', true, false, false, true)); |
+ return dart.const(new convert.HtmlEscapeMode._('element', true, false, false, false)); |
} |
}); |
const _convert = Symbol('_convert'); |
- convert.HtmlEscape = class HtmlEscape extends convert.Converter$(core.String, core.String) { |
+ convert.HtmlEscape = class HtmlEscape extends convert.ChunkedConverter$(core.String, core.String, core.String, core.String) { |
HtmlEscape(mode) { |
if (mode === void 0) mode = convert.HtmlEscapeMode.UNKNOWN; |
this.mode = mode; |
- super.Converter(); |
+ super.ChunkedConverter(); |
} |
convert(text) { |
let val = this[_convert](text, 0, text[dartx.length]); |
@@ -24980,52 +25626,49 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
let result = null; |
for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull(i) + 1) { |
let ch = text[dartx.get](i); |
- let replace = null; |
+ let replacement = null; |
switch (ch) { |
case '&': |
{ |
- replace = '&'; |
- break; |
- } |
- case 'Â ': |
- { |
- replace = ' '; |
+ replacement = '&'; |
break; |
} |
case '"': |
{ |
- if (dart.notNull(this.mode.escapeQuot)) replace = '"'; |
+ if (dart.notNull(this.mode.escapeQuot)) replacement = '"'; |
break; |
} |
case "'": |
{ |
- if (dart.notNull(this.mode.escapeApos)) replace = '''; |
+ if (dart.notNull(this.mode.escapeApos)) replacement = '''; |
break; |
} |
case '<': |
{ |
- if (dart.notNull(this.mode.escapeLtGt)) replace = '<'; |
+ if (dart.notNull(this.mode.escapeLtGt)) replacement = '<'; |
break; |
} |
case '>': |
{ |
- if (dart.notNull(this.mode.escapeLtGt)) replace = '>'; |
+ if (dart.notNull(this.mode.escapeLtGt)) replacement = '>'; |
break; |
} |
case '/': |
{ |
- if (dart.notNull(this.mode.escapeSlash)) replace = '/'; |
+ if (dart.notNull(this.mode.escapeSlash)) replacement = '/'; |
break; |
} |
} |
- if (replace != null) { |
- if (result == null) result = new core.StringBuffer(text[dartx.substring](start, i)); |
- result.write(replace); |
- } else if (result != null) { |
- result.write(ch); |
+ if (replacement != null) { |
+ if (result == null) result = new core.StringBuffer(); |
+ if (dart.notNull(i) > dart.notNull(start)) result.write(text[dartx.substring](start, i)); |
+ result.write(replacement); |
+ start = dart.notNull(i) + 1; |
} |
} |
- return result != null ? dart.toString(result) : null; |
+ if (result == null) return null; |
+ if (dart.notNull(end) > dart.notNull(start)) result.write(text[dartx.substring](start, end)); |
+ return dart.toString(result); |
} |
startChunkedConversion(sink) { |
if (!dart.is(sink, convert.StringConversionSink)) { |
@@ -25059,7 +25702,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
} |
close() { |
- return this[_sink$].close(); |
+ this[_sink$].close(); |
} |
}; |
dart.setSignature(convert._HtmlEscapeSink, { |
@@ -25145,18 +25788,18 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
convert.JSON = dart.const(new convert.JsonCodec()); |
convert._Reviver = dart.typedef('_Reviver', () => dart.functionType(dart.dynamic, [dart.dynamic, dart.dynamic])); |
convert._ToEncodable = dart.typedef('_ToEncodable', () => dart.functionType(dart.dynamic, [dart.dynamic])); |
- convert.JsonEncoder = class JsonEncoder extends convert.Converter$(core.Object, core.String) { |
+ convert.JsonEncoder = class JsonEncoder extends convert.ChunkedConverter$(core.Object, core.String, core.Object, core.String) { |
JsonEncoder(toEncodable) { |
if (toEncodable === void 0) toEncodable = null; |
this.indent = null; |
this[_toEncodable$] = toEncodable; |
- super.Converter(); |
+ super.ChunkedConverter(); |
} |
withIndent(indent, toEncodable) { |
if (toEncodable === void 0) toEncodable = null; |
this.indent = indent; |
this[_toEncodable$] = toEncodable; |
- super.Converter(); |
+ super.ChunkedConverter(); |
} |
convert(object) { |
return convert._JsonStringStringifier.stringify(object, dart.as(this[_toEncodable$], dart.functionType(dart.dynamic, [dart.dynamic])), this.indent); |
@@ -25194,7 +25837,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
}); |
const _indent = Symbol('_indent'); |
const _bufferSize = Symbol('_bufferSize'); |
- convert.JsonUtf8Encoder = class JsonUtf8Encoder extends convert.Converter$(core.Object, core.List$(core.int)) { |
+ convert.JsonUtf8Encoder = class JsonUtf8Encoder extends convert.ChunkedConverter$(core.Object, core.List$(core.int), core.Object, core.List$(core.int)) { |
JsonUtf8Encoder(indent, toEncodable, bufferSize) { |
if (indent === void 0) indent = null; |
if (toEncodable === void 0) toEncodable = null; |
@@ -25202,7 +25845,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
this[_indent] = convert.JsonUtf8Encoder._utf8Encode(indent); |
this[_toEncodable$] = toEncodable; |
this[_bufferSize] = bufferSize; |
- super.Converter(); |
+ super.ChunkedConverter(); |
} |
static _utf8Encode(string) { |
if (string == null) return null; |
@@ -25331,11 +25974,11 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
close: [dart.void, []] |
}) |
}); |
- convert.JsonDecoder = class JsonDecoder extends convert.Converter$(core.String, core.Object) { |
+ convert.JsonDecoder = class JsonDecoder extends convert.ChunkedConverter$(core.String, core.Object, core.String, core.Object) { |
JsonDecoder(reviver) { |
if (reviver === void 0) reviver = null; |
this[_reviver] = reviver; |
- super.Converter(); |
+ super.ChunkedConverter(); |
} |
convert(input) { |
return convert._parseJson(input, this[_reviver]); |
@@ -25356,10 +25999,10 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
}) |
}); |
convert._parseJson = function(source, reviver) { |
- if (!(typeof source == 'string')) dart.throw(new core.ArgumentError(source)); |
+ if (!(typeof source == 'string')) dart.throw(_js_helper.argumentErrorValue(source)); |
let parsed = null; |
try { |
- parsed = dart.global.JSON.parse(source); |
+ parsed = JSON.parse(source); |
} catch (e) { |
dart.throw(new core.FormatException(String(e))); |
} |
@@ -25498,9 +26141,9 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return true; |
} else if (dart.is(object, core.Map)) { |
this[_checkCycle](object); |
- this.writeMap(dart.as(object, core.Map$(core.String, core.Object))); |
+ let success = this.writeMap(dart.as(object, core.Map$(core.String, core.Object))); |
this[_removeSeen](object); |
- return true; |
+ return success; |
} else { |
return false; |
} |
@@ -25517,16 +26160,32 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
this.writeString(']'); |
} |
writeMap(map) { |
+ if (dart.notNull(map[dartx.isEmpty])) { |
+ this.writeString("{}"); |
+ return true; |
+ } |
+ let keyValueList = core.List.new(dart.notNull(map[dartx.length]) * 2); |
+ let i = 0; |
+ let allStringKeys = true; |
+ map[dartx.forEach](dart.fn((key, value) => { |
+ if (!(typeof key == 'string')) { |
+ allStringKeys = false; |
+ } |
+ keyValueList[dartx.set](i++, key); |
+ keyValueList[dartx.set](i++, value); |
+ }, dart.void, [core.String, core.Object])); |
+ if (!allStringKeys) return false; |
this.writeString('{'); |
let separator = '"'; |
- map[dartx.forEach](dart.fn((key, value) => { |
+ for (let i = 0; i < dart.notNull(keyValueList[dartx.length]); i = i + 2) { |
this.writeString(separator); |
separator = ',"'; |
- this.writeStringContent(key); |
+ this.writeStringContent(dart.as(keyValueList[dartx.get](i), core.String)); |
this.writeString('":'); |
- this.writeObject(value); |
- }, dart.void, [core.String, core.Object])); |
+ this.writeObject(keyValueList[dartx.get](i + 1)); |
+ } |
this.writeString('}'); |
+ return true; |
} |
}; |
dart.setSignature(convert._JsonStringifier, { |
@@ -25538,7 +26197,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
writeObject: [dart.void, [dart.dynamic]], |
writeJsonValue: [core.bool, [dart.dynamic]], |
writeList: [dart.void, [core.List]], |
- writeMap: [dart.void, [core.Map$(core.String, core.Object)]] |
+ writeMap: [core.bool, [core.Map$(core.String, core.Object)]] |
}), |
statics: () => ({hexDigit: [core.int, [core.int]]}), |
names: ['hexDigit'] |
@@ -25583,34 +26242,44 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
writeMap(map) { |
if (dart.notNull(map[dartx.isEmpty])) { |
- this.writeString('{}'); |
- } else { |
- this.writeString('{\n'); |
- this[_indentLevel] = dart.notNull(this[_indentLevel]) + 1; |
- let first = true; |
- map[dartx.forEach](dart.fn((key, value) => { |
- if (!first) { |
- this.writeString(",\n"); |
- } |
- this.writeIndentation(this[_indentLevel]); |
- this.writeString('"'); |
- this.writeStringContent(key); |
- this.writeString('": '); |
- this.writeObject(value); |
- first = false; |
- }, dart.void, [core.String, core.Object])); |
- this.writeString('\n'); |
- this[_indentLevel] = dart.notNull(this[_indentLevel]) - 1; |
+ this.writeString("{}"); |
+ return true; |
+ } |
+ let keyValueList = core.List.new(dart.notNull(map[dartx.length]) * 2); |
+ let i = 0; |
+ let allStringKeys = true; |
+ map[dartx.forEach](dart.fn((key, value) => { |
+ if (!(typeof key == 'string')) { |
+ allStringKeys = false; |
+ } |
+ keyValueList[dartx.set](i++, key); |
+ keyValueList[dartx.set](i++, value); |
+ }, dart.void, [dart.dynamic, dart.dynamic])); |
+ if (!allStringKeys) return false; |
+ this.writeString('{\n'); |
+ this[_indentLevel] = dart.notNull(this[_indentLevel]) + 1; |
+ let separator = ""; |
+ for (let i = 0; i < dart.notNull(keyValueList[dartx.length]); i = i + 2) { |
+ this.writeString(separator); |
+ separator = ",\n"; |
this.writeIndentation(this[_indentLevel]); |
- this.writeString('}'); |
+ this.writeString('"'); |
+ this.writeStringContent(dart.as(keyValueList[dartx.get](i), core.String)); |
+ this.writeString('": '); |
+ this.writeObject(keyValueList[dartx.get](i + 1)); |
} |
+ this.writeString('\n'); |
+ this[_indentLevel] = dart.notNull(this[_indentLevel]) - 1; |
+ this.writeIndentation(this[_indentLevel]); |
+ this.writeString('}'); |
+ return true; |
} |
}; |
convert._JsonPrettyPrintMixin[dart.implements] = () => [convert._JsonStringifier]; |
dart.setSignature(convert._JsonPrettyPrintMixin, { |
methods: () => ({ |
writeList: [dart.void, [core.List]], |
- writeMap: [dart.void, [core.Map]] |
+ writeMap: [core.bool, [core.Map]] |
}) |
}); |
convert._JsonStringStringifier = class _JsonStringStringifier extends convert._JsonStringifier { |
@@ -25888,6 +26557,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
close() { |
this[_sink$].close(); |
+ this[_sink$] = null; |
} |
add(source) { |
this.addSlice(source, 0, source[dartx.length], false); |
@@ -25897,19 +26567,31 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
if (dart.notNull(isLast)) this.close(); |
} |
addSlice(source, start, end, isLast) { |
- core.RangeError.checkValidRange(start, end, source[dartx.length]); |
+ end = core.RangeError.checkValidRange(start, end, source[dartx.length]); |
+ if (start == end) return; |
+ if (!dart.is(source, typed_data.Uint8List)) { |
+ convert._Latin1DecoderSink._checkValidLatin1(source, start, end); |
+ } |
+ this[_addSliceToSink](source, start, end, isLast); |
+ } |
+ static _checkValidLatin1(source, start, end) { |
+ let mask = 0; |
for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull(i) + 1) { |
- let char = source[dartx.get](i); |
- if (dart.notNull(char) > dart.notNull(convert._LATIN1_MASK) || dart.notNull(char) < 0) { |
- dart.throw(new core.FormatException("Source contains non-Latin-1 characters.")); |
- } |
+ mask = (dart.notNull(mask) | dart.notNull(source[dartx.get](i))) >>> 0; |
} |
- if (dart.notNull(start) < dart.notNull(end)) { |
- this[_addSliceToSink](source, start, end, isLast); |
+ if (dart.notNull(mask) >= 0 && dart.notNull(mask) <= dart.notNull(convert._LATIN1_MASK)) { |
+ return; |
} |
- if (dart.notNull(isLast)) { |
- this.close(); |
+ convert._Latin1DecoderSink._reportInvalidLatin1(source, start, end); |
+ } |
+ static _reportInvalidLatin1(source, start, end) { |
+ for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull(i) + 1) { |
+ let char = source[dartx.get](i); |
+ if (dart.notNull(char) < 0 || dart.notNull(char) > dart.notNull(convert._LATIN1_MASK)) { |
+ dart.throw(new core.FormatException("Source contains non-Latin-1 characters.", source, i)); |
+ } |
} |
+ dart.assert(false); |
} |
}; |
dart.setSignature(convert._Latin1DecoderSink, { |
@@ -25918,7 +26600,12 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
close: [dart.void, []], |
add: [dart.void, [core.List$(core.int)]], |
[_addSliceToSink]: [dart.void, [core.List$(core.int), core.int, core.int, core.bool]] |
- }) |
+ }), |
+ statics: () => ({ |
+ _checkValidLatin1: [dart.void, [core.List$(core.int), core.int, core.int]], |
+ _reportInvalidLatin1: [dart.void, [core.List$(core.int), core.int, core.int]] |
+ }), |
+ names: ['_checkValidLatin1', '_reportInvalidLatin1'] |
}); |
convert._Latin1AllowInvalidDecoderSink = class _Latin1AllowInvalidDecoderSink extends convert._Latin1DecoderSink { |
_Latin1AllowInvalidDecoderSink(sink) { |
@@ -25945,18 +26632,63 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
dart.setSignature(convert._Latin1AllowInvalidDecoderSink, { |
constructors: () => ({_Latin1AllowInvalidDecoderSink: [convert._Latin1AllowInvalidDecoderSink, [convert.StringConversionSink]]}) |
}); |
- convert.LineSplitter = class LineSplitter extends convert.Converter$(core.String, core.List$(core.String)) { |
+ convert._LF = 10; |
+ convert._CR = 13; |
+ convert.LineSplitter = class LineSplitter extends convert.ChunkedConverter$(core.String, core.List$(core.String), core.String, core.String) { |
LineSplitter() { |
- super.Converter(); |
+ super.ChunkedConverter(); |
+ } |
+ static split(lines, start, end) { |
+ return dart.syncStar(function*(lines, start, end) { |
+ if (start === void 0) start = 0; |
+ if (end === void 0) end = null; |
+ end = core.RangeError.checkValidRange(start, end, lines[dartx.length]); |
+ let sliceStart = start; |
+ let char = 0; |
+ for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull(i) + 1) { |
+ let previousChar = char; |
+ char = lines[dartx.codeUnitAt](i); |
+ if (char != convert._CR) { |
+ if (char != convert._LF) continue; |
+ if (previousChar == convert._CR) { |
+ sliceStart = dart.notNull(i) + 1; |
+ continue; |
+ } |
+ } |
+ yield lines[dartx.substring](sliceStart, i); |
+ sliceStart = dart.notNull(i) + 1; |
+ } |
+ if (dart.notNull(sliceStart) < dart.notNull(end)) { |
+ yield lines[dartx.substring](sliceStart, end); |
+ } |
+ }, core.String, lines, start, end); |
} |
convert(data) { |
- let lines = core.List$(core.String).new(); |
- convert._LineSplitterSink._addSlice(data, 0, data[dartx.length], true, dart.bind(lines, dartx.add)); |
+ let lines = dart.list([], core.String); |
+ let end = data[dartx.length]; |
+ let sliceStart = 0; |
+ let char = 0; |
+ for (let i = 0; i < dart.notNull(end); i++) { |
+ let previousChar = char; |
+ char = data[dartx.codeUnitAt](i); |
+ if (char != convert._CR) { |
+ if (char != convert._LF) continue; |
+ if (previousChar == convert._CR) { |
+ sliceStart = i + 1; |
+ continue; |
+ } |
+ } |
+ lines[dartx.add](data[dartx.substring](sliceStart, i)); |
+ sliceStart = i + 1; |
+ } |
+ if (sliceStart < dart.notNull(end)) { |
+ lines[dartx.add](data[dartx.substring](sliceStart, end)); |
+ } |
return lines; |
} |
startChunkedConversion(sink) { |
if (!dart.is(sink, convert.StringConversionSink)) { |
- sink = convert.StringConversionSink.from(dart.as(sink, core.Sink$(core.String))); |
+ sink = convert.StringConversionSink.from(sink); |
} |
return new convert._LineSplitterSink(dart.as(sink, convert.StringConversionSink)); |
} |
@@ -25965,74 +26697,79 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
constructors: () => ({LineSplitter: [convert.LineSplitter, []]}), |
methods: () => ({ |
convert: [core.List$(core.String), [core.String]], |
- startChunkedConversion: [convert.StringConversionSink, [core.Sink]] |
- }) |
+ startChunkedConversion: [convert.StringConversionSink, [core.Sink$(core.String)]] |
+ }), |
+ statics: () => ({split: [core.Iterable$(core.String), [core.String], [core.int, core.int]]}), |
+ names: ['split'] |
}); |
const _carry = Symbol('_carry'); |
+ const _skipLeadingLF = Symbol('_skipLeadingLF'); |
+ const _addLines = Symbol('_addLines'); |
convert._LineSplitterSink = class _LineSplitterSink extends convert.StringConversionSinkBase { |
_LineSplitterSink(sink) { |
this[_sink$] = sink; |
this[_carry] = null; |
+ this[_skipLeadingLF] = false; |
} |
addSlice(chunk, start, end, isLast) { |
+ end = core.RangeError.checkValidRange(start, end, chunk[dartx.length]); |
+ if (dart.notNull(start) >= dart.notNull(end)) { |
+ if (dart.notNull(isLast)) this.close(); |
+ return; |
+ } |
if (this[_carry] != null) { |
+ dart.assert(!dart.notNull(this[_skipLeadingLF])); |
chunk = dart.notNull(this[_carry]) + dart.notNull(chunk[dartx.substring](start, end)); |
start = 0; |
end = chunk[dartx.length]; |
this[_carry] = null; |
+ } else if (dart.notNull(this[_skipLeadingLF])) { |
+ if (chunk[dartx.codeUnitAt](start) == convert._LF) { |
+ start = dart.notNull(start) + 1; |
+ } |
+ this[_skipLeadingLF] = false; |
} |
- this[_carry] = convert._LineSplitterSink._addSlice(chunk, start, end, isLast, dart.bind(this[_sink$], 'add')); |
- if (dart.notNull(isLast)) this[_sink$].close(); |
+ this[_addLines](chunk, start, end); |
+ if (dart.notNull(isLast)) this.close(); |
} |
close() { |
- this.addSlice('', 0, 0, true); |
- } |
- static _addSlice(chunk, start, end, isLast, adder) { |
- let pos = start; |
- while (dart.notNull(pos) < dart.notNull(end)) { |
- let skip = 0; |
- let char = chunk[dartx.codeUnitAt](pos); |
- if (char == convert._LineSplitterSink._LF) { |
- skip = 1; |
- } else if (char == convert._LineSplitterSink._CR) { |
- skip = 1; |
- if (dart.notNull(pos) + 1 < dart.notNull(end)) { |
- if (chunk[dartx.codeUnitAt](dart.notNull(pos) + 1) == convert._LineSplitterSink._LF) { |
- skip = 2; |
- } |
- } else if (!dart.notNull(isLast)) { |
- return chunk[dartx.substring](start, end); |
+ if (this[_carry] != null) { |
+ this[_sink$].add(this[_carry]); |
+ this[_carry] = null; |
+ } |
+ this[_sink$].close(); |
+ } |
+ [_addLines](lines, start, end) { |
+ let sliceStart = start; |
+ let char = 0; |
+ for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull(i) + 1) { |
+ let previousChar = char; |
+ char = lines[dartx.codeUnitAt](i); |
+ if (char != convert._CR) { |
+ if (char != convert._LF) continue; |
+ if (previousChar == convert._CR) { |
+ sliceStart = dart.notNull(i) + 1; |
+ continue; |
} |
} |
- if (skip > 0) { |
- adder(chunk[dartx.substring](start, pos)); |
- start = pos = dart.notNull(pos) + skip; |
- } else { |
- pos = dart.notNull(pos) + 1; |
- } |
+ this[_sink$].add(lines[dartx.substring](sliceStart, i)); |
+ sliceStart = dart.notNull(i) + 1; |
} |
- if (pos != start) { |
- let carry = chunk[dartx.substring](start, pos); |
- if (dart.notNull(isLast)) { |
- adder(carry); |
- } else { |
- return carry; |
- } |
+ if (dart.notNull(sliceStart) < dart.notNull(end)) { |
+ this[_carry] = lines[dartx.substring](sliceStart, end); |
+ } else { |
+ this[_skipLeadingLF] = char == convert._CR; |
} |
- return null; |
} |
}; |
dart.setSignature(convert._LineSplitterSink, { |
constructors: () => ({_LineSplitterSink: [convert._LineSplitterSink, [convert.StringConversionSink]]}), |
methods: () => ({ |
addSlice: [dart.void, [core.String, core.int, core.int, core.bool]], |
- close: [dart.void, []] |
- }), |
- statics: () => ({_addSlice: [core.String, [core.String, core.int, core.int, core.bool, dart.functionType(dart.void, [core.String])]]}), |
- names: ['_addSlice'] |
+ close: [dart.void, []], |
+ [_addLines]: [dart.void, [core.String, core.int, core.int]] |
+ }) |
}); |
- convert._LineSplitterSink._LF = 10; |
- convert._LineSplitterSink._CR = 13; |
convert.StringConversionSink = class StringConversionSink extends convert.ChunkedConversionSink$(core.String) { |
StringConversionSink() { |
super.ChunkedConversionSink(); |
@@ -26071,21 +26808,21 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
this[_callback] = callback; |
} |
close() { |
- return this[_callback](); |
+ this[_callback](); |
} |
writeCharCode(charCode) { |
- return this[_sink$].writeCharCode(charCode); |
+ this[_sink$].writeCharCode(charCode); |
} |
write(o) { |
- return this[_sink$].write(o); |
+ this[_sink$].write(o); |
} |
writeln(o) { |
if (o === void 0) o = ""; |
- return this[_sink$].writeln(o); |
+ this[_sink$].writeln(o); |
} |
writeAll(objects, separator) { |
if (separator === void 0) separator = ""; |
- return this[_sink$].writeAll(objects, separator); |
+ this[_sink$].writeAll(objects, separator); |
} |
}; |
convert._ClosableStringSink[dart.implements] = () => [convert.ClosableStringSink]; |
@@ -26115,7 +26852,6 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
write(o) { |
if (dart.notNull(this[_buffer].isNotEmpty)) this[_flush](); |
- let str = dart.toString(o); |
this[_chunkedSink].add(dart.toString(o)); |
} |
writeln(o) { |
@@ -26182,7 +26918,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
this[_sink$] = sink; |
} |
add(str) { |
- return this[_sink$].add(str); |
+ this[_sink$].add(str); |
} |
addSlice(str, start, end, isLast) { |
if (start == 0 && end == str[dartx.length]) { |
@@ -26193,7 +26929,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
if (dart.notNull(isLast)) this.close(); |
} |
close() { |
- return this[_sink$].close(); |
+ this[_sink$].close(); |
} |
}; |
dart.setSignature(convert._StringAdapterSink, { |
@@ -26203,7 +26939,6 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
close: [dart.void, []] |
}) |
}); |
- const _decoder = Symbol('_decoder'); |
convert._Utf8StringSinkAdapter = class _Utf8StringSinkAdapter extends convert.ByteConversionSink { |
_Utf8StringSinkAdapter(sink, stringSink, allowMalformed) { |
this[_sink$] = sink; |
@@ -26294,7 +27029,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return new convert.Utf8Decoder({allowMalformed: allowMalformed}).convert(codeUnits); |
} |
get encoder() { |
- return new convert.Utf8Encoder(); |
+ return dart.const(new convert.Utf8Encoder()); |
} |
get decoder() { |
return new convert.Utf8Decoder({allowMalformed: this[_allowMalformed]}); |
@@ -26307,9 +27042,9 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
convert.UTF8 = dart.const(new convert.Utf8Codec()); |
const _fillBuffer = Symbol('_fillBuffer'); |
const _writeSurrogate = Symbol('_writeSurrogate'); |
- convert.Utf8Encoder = class Utf8Encoder extends convert.Converter$(core.String, core.List$(core.int)) { |
+ convert.Utf8Encoder = class Utf8Encoder extends convert.ChunkedConverter$(core.String, core.List$(core.int), core.String, core.List$(core.int)) { |
Utf8Encoder() { |
- super.Converter(); |
+ super.ChunkedConverter(); |
} |
convert(string, start, end) { |
if (start === void 0) start = 0; |
@@ -26534,15 +27269,19 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
addSlice: [dart.void, [core.String, core.int, core.int, core.bool]] |
}) |
}); |
- convert.Utf8Decoder = class Utf8Decoder extends convert.Converter$(core.List$(core.int), core.String) { |
+ convert.Utf8Decoder = class Utf8Decoder extends convert.ChunkedConverter$(core.List$(core.int), core.String, core.List$(core.int), core.String) { |
Utf8Decoder(opts) { |
let allowMalformed = opts && 'allowMalformed' in opts ? opts.allowMalformed : false; |
this[_allowMalformed] = allowMalformed; |
- super.Converter(); |
+ super.ChunkedConverter(); |
} |
convert(codeUnits, start, end) { |
if (start === void 0) start = 0; |
if (end === void 0) end = null; |
+ let result = convert.Utf8Decoder._convertIntercepted(this[_allowMalformed], codeUnits, start, end); |
+ if (result != null) { |
+ return result; |
+ } |
let length = codeUnits[dartx.length]; |
core.RangeError.checkValidRange(start, end, length); |
if (end == null) end = length; |
@@ -26567,6 +27306,9 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
fuse(next) { |
return super.fuse(next); |
} |
+ static _convertIntercepted(allowMalformed, codeUnits, start, end) { |
+ return null; |
+ } |
}; |
dart.setSignature(convert.Utf8Decoder, { |
constructors: () => ({Utf8Decoder: [convert.Utf8Decoder, [], {allowMalformed: core.bool}]}), |
@@ -26575,7 +27317,9 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
startChunkedConversion: [convert.ByteConversionSink, [core.Sink$(core.String)]], |
bind: [async.Stream$(core.String), [async.Stream$(core.List$(core.int))]], |
fuse: [convert.Converter$(core.List$(core.int), dart.dynamic), [convert.Converter$(core.String, dart.dynamic)]] |
- }) |
+ }), |
+ statics: () => ({_convertIntercepted: [core.String, [core.bool, core.List$(core.int), core.int, core.int]]}), |
+ names: ['_convertIntercepted'] |
}); |
convert._ONE_BYTE_LIMIT = 127; |
convert._TWO_BYTE_LIMIT = 2047; |
@@ -26586,10 +27330,6 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
convert._SURROGATE_VALUE_MASK = 1023; |
convert._LEAD_SURROGATE_MIN = 55296; |
convert._TAIL_SURROGATE_MIN = 56320; |
- convert._isSurrogate = function(codeUnit) { |
- return (dart.notNull(codeUnit) & dart.notNull(convert._SURROGATE_MASK)) >>> 0 == convert._LEAD_SURROGATE_MIN; |
- }; |
- dart.lazyFn(convert._isSurrogate, () => [core.bool, [core.int]]); |
convert._isLeadSurrogate = function(codeUnit) { |
return (dart.notNull(codeUnit) & dart.notNull(convert._SURROGATE_TAG_MASK)) >>> 0 == convert._LEAD_SURROGATE_MIN; |
}; |
@@ -28392,27 +29132,76 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
static new(name) { |
return new _internal.Symbol(name); |
} |
- }; |
- dart.setSignature(core.Symbol, { |
- constructors: () => ({new: [core.Symbol, [core.String]]}) |
- }); |
- core.Type = class Type extends core.Object {}; |
- const _writeAuthority = Symbol('_writeAuthority'); |
- const _userInfo = Symbol('_userInfo'); |
- const _host = Symbol('_host'); |
- const _port = Symbol('_port'); |
- const _path = Symbol('_path'); |
- const _query = Symbol('_query'); |
- const _fragment = Symbol('_fragment'); |
- const _pathSegments = Symbol('_pathSegments'); |
- const _queryParameters = Symbol('_queryParameters'); |
- const _merge = Symbol('_merge'); |
- const _hasDotSegments = Symbol('_hasDotSegments'); |
- const _removeDotSegments = Symbol('_removeDotSegments'); |
- const _toWindowsFilePath = Symbol('_toWindowsFilePath'); |
- const _toFilePath = Symbol('_toFilePath'); |
- const _isPathAbsolute = Symbol('_isPathAbsolute'); |
- core.Uri = class Uri extends core.Object { |
+ }; |
+ dart.setSignature(core.Symbol, { |
+ constructors: () => ({new: [core.Symbol, [core.String]]}) |
+ }); |
+ core.Type = class Type extends core.Object {}; |
+ const _userInfo = Symbol('_userInfo'); |
+ const _host = Symbol('_host'); |
+ const _port = Symbol('_port'); |
+ const _path = Symbol('_path'); |
+ const _query = Symbol('_query'); |
+ const _fragment = Symbol('_fragment'); |
+ const _pathSegments = Symbol('_pathSegments'); |
+ const _queryParameters = Symbol('_queryParameters'); |
+ const _queryParameterLists = Symbol('_queryParameterLists'); |
+ const _writeAuthority = Symbol('_writeAuthority'); |
+ const _mergePaths = Symbol('_mergePaths'); |
+ const _toWindowsFilePath = Symbol('_toWindowsFilePath'); |
+ const _toFilePath = Symbol('_toFilePath'); |
+ const _isPathAbsolute = Symbol('_isPathAbsolute'); |
+ core.Uri = class Uri extends core.Object { |
+ _internal(scheme, userInfo, host, port, path, query, fragment) { |
+ this.scheme = scheme; |
+ this[_userInfo] = userInfo; |
+ this[_host] = host; |
+ this[_port] = port; |
+ this[_path] = path; |
+ this[_query] = query; |
+ this[_fragment] = fragment; |
+ this[_pathSegments] = null; |
+ this[_queryParameters] = null; |
+ this[_queryParameterLists] = null; |
+ } |
+ static new(opts) { |
+ let scheme = opts && 'scheme' in opts ? opts.scheme : ""; |
+ let userInfo = opts && 'userInfo' in opts ? opts.userInfo : ""; |
+ let host = opts && 'host' in opts ? opts.host : null; |
+ let port = opts && 'port' in opts ? opts.port : null; |
+ let path = opts && 'path' in opts ? opts.path : null; |
+ let pathSegments = opts && 'pathSegments' in opts ? opts.pathSegments : null; |
+ let query = opts && 'query' in opts ? opts.query : null; |
+ let queryParameters = opts && 'queryParameters' in opts ? opts.queryParameters : null; |
+ let fragment = opts && 'fragment' in opts ? opts.fragment : null; |
+ scheme = core.Uri._makeScheme(scheme, 0, core.Uri._stringOrNullLength(scheme)); |
+ userInfo = core.Uri._makeUserInfo(userInfo, 0, core.Uri._stringOrNullLength(userInfo)); |
+ host = core.Uri._makeHost(host, 0, core.Uri._stringOrNullLength(host), false); |
+ if (query == "") query = null; |
+ query = core.Uri._makeQuery(query, 0, core.Uri._stringOrNullLength(query), queryParameters); |
+ fragment = core.Uri._makeFragment(fragment, 0, core.Uri._stringOrNullLength(fragment)); |
+ port = core.Uri._makePort(port, scheme); |
+ let isFile = scheme == "file"; |
+ if (host == null && (dart.notNull(userInfo[dartx.isNotEmpty]) || port != null || isFile)) { |
+ host = ""; |
+ } |
+ let hasAuthority = host != null; |
+ path = core.Uri._makePath(path, 0, core.Uri._stringOrNullLength(path), pathSegments, scheme, hasAuthority); |
+ if (dart.notNull(scheme[dartx.isEmpty]) && host == null && !dart.notNull(path[dartx.startsWith]('/'))) { |
+ path = core.Uri._normalizeRelativePath(path); |
+ } else { |
+ path = core.Uri._removeDotSegments(path); |
+ } |
+ return new core.Uri._internal(scheme, userInfo, host, port, path, query, fragment); |
+ } |
+ static http(authority, unencodedPath, queryParameters) { |
+ if (queryParameters === void 0) queryParameters = null; |
+ return core.Uri._makeHttpUri("http", authority, unencodedPath, queryParameters); |
+ } |
+ static https(authority, unencodedPath, queryParameters) { |
+ if (queryParameters === void 0) queryParameters = null; |
+ return core.Uri._makeHttpUri("https", authority, unencodedPath, queryParameters); |
+ } |
get authority() { |
if (!dart.notNull(this.hasAuthority)) return ""; |
let sb = new core.StringBuffer(); |
@@ -28431,7 +29220,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
get port() { |
if (this[_port] == null) return core.Uri._defaultPort(this.scheme); |
- return dart.asInt(this[_port]); |
+ return this[_port]; |
} |
static _defaultPort(scheme) { |
if (scheme == "http") return 80; |
@@ -28447,11 +29236,9 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
get fragment() { |
return this[_fragment] == null ? "" : this[_fragment]; |
} |
- static parse(uri) { |
- function isRegName(ch) { |
- return dart.notNull(ch) < 128 && (dart.notNull(core.Uri._regNameTable[dartx.get](ch[dartx['>>']](4))) & 1 << (dart.notNull(ch) & 15)) != 0; |
- } |
- dart.fn(isRegName, core.bool, [core.int]); |
+ static parse(uri, start, end) { |
+ if (start === void 0) start = 0; |
+ if (end === void 0) end = null; |
let EOI = -1; |
let scheme = ""; |
let userinfo = ""; |
@@ -28460,11 +29247,12 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
let path = null; |
let query = null; |
let fragment = null; |
- let index = 0; |
- let pathStart = 0; |
+ if (end == null) end = uri[dartx.length]; |
+ let index = start; |
+ let pathStart = start; |
let char = EOI; |
function parseAuth() { |
- if (index == uri[dartx.length]) { |
+ if (index == end) { |
char = EOI; |
return; |
} |
@@ -28472,7 +29260,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
let lastColon = -1; |
let lastAt = -1; |
char = uri[dartx.codeUnitAt](index); |
- while (dart.notNull(index) < dart.notNull(uri[dartx.length])) { |
+ while (dart.notNull(index) < dart.notNull(end)) { |
char = uri[dartx.codeUnitAt](index); |
if (char == core.Uri._SLASH || char == core.Uri._QUESTION || char == core.Uri._NUMBER_SIGN) { |
break; |
@@ -28486,7 +29274,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
lastColon = -1; |
let endBracket = uri[dartx.indexOf](']', dart.notNull(index) + 1); |
if (endBracket == -1) { |
- index = uri[dartx.length]; |
+ index = end; |
char = EOI; |
break; |
} else { |
@@ -28518,7 +29306,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
hostEnd = lastColon; |
} |
host = core.Uri._makeHost(uri, hostStart, hostEnd, true); |
- if (dart.notNull(index) < dart.notNull(uri[dartx.length])) { |
+ if (dart.notNull(index) < dart.notNull(end)) { |
char = uri[dartx.codeUnitAt](index); |
} |
} |
@@ -28528,22 +29316,22 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
let ALLOW_AUTH = 2; |
let state = NOT_IN_PATH; |
let i = index; |
- while (dart.notNull(i) < dart.notNull(uri[dartx.length])) { |
+ while (dart.notNull(i) < dart.notNull(end)) { |
char = uri[dartx.codeUnitAt](i); |
if (char == core.Uri._QUESTION || char == core.Uri._NUMBER_SIGN) { |
state = NOT_IN_PATH; |
break; |
} |
if (char == core.Uri._SLASH) { |
- state = i == 0 ? ALLOW_AUTH : IN_PATH; |
+ state = i == start ? ALLOW_AUTH : IN_PATH; |
break; |
} |
if (char == core.Uri._COLON) { |
- if (i == 0) core.Uri._fail(uri, 0, "Invalid empty scheme"); |
- scheme = core.Uri._makeScheme(uri, i); |
+ if (i == start) core.Uri._fail(uri, start, "Invalid empty scheme"); |
+ scheme = core.Uri._makeScheme(uri, start, i); |
i = dart.notNull(i) + 1; |
pathStart = i; |
- if (i == uri[dartx.length]) { |
+ if (i == end) { |
char = EOI; |
state = NOT_IN_PATH; |
} else { |
@@ -28565,7 +29353,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
if (state == ALLOW_AUTH) { |
dart.assert(char == core.Uri._SLASH); |
index = dart.notNull(index) + 1; |
- if (index == uri[dartx.length]) { |
+ if (index == end) { |
char = EOI; |
state = NOT_IN_PATH; |
} else { |
@@ -28584,7 +29372,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
dart.assert(state == IN_PATH || state == NOT_IN_PATH); |
if (state == IN_PATH) { |
- while ((index = dart.notNull(index) + 1) < dart.notNull(uri[dartx.length])) { |
+ while ((index = dart.notNull(index) + 1) < dart.notNull(end)) { |
char = uri[dartx.codeUnitAt](index); |
if (char == core.Uri._QUESTION || char == core.Uri._NUMBER_SIGN) { |
break; |
@@ -28594,69 +29382,30 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
state = NOT_IN_PATH; |
} |
dart.assert(state == NOT_IN_PATH); |
- let isFile = scheme == "file"; |
- let ensureLeadingSlash = host != null; |
- path = core.Uri._makePath(uri, pathStart, index, null, ensureLeadingSlash, isFile); |
+ let hasAuthority = host != null; |
+ path = core.Uri._makePath(uri, pathStart, index, null, scheme, hasAuthority); |
if (char == core.Uri._QUESTION) { |
- let numberSignIndex = uri[dartx.indexOf]('#', dart.notNull(index) + 1); |
- if (dart.notNull(numberSignIndex) < 0) { |
- query = core.Uri._makeQuery(uri, dart.notNull(index) + 1, uri[dartx.length], null); |
+ let numberSignIndex = -1; |
+ for (let i = dart.notNull(index) + 1; i < dart.notNull(end); i++) { |
+ if (uri[dartx.codeUnitAt](i) == core.Uri._NUMBER_SIGN) { |
+ numberSignIndex = i; |
+ break; |
+ } |
+ } |
+ if (numberSignIndex < 0) { |
+ query = core.Uri._makeQuery(uri, dart.notNull(index) + 1, end, null); |
} else { |
query = core.Uri._makeQuery(uri, dart.notNull(index) + 1, numberSignIndex, null); |
- fragment = core.Uri._makeFragment(uri, dart.notNull(numberSignIndex) + 1, uri[dartx.length]); |
+ fragment = core.Uri._makeFragment(uri, numberSignIndex + 1, end); |
} |
} else if (char == core.Uri._NUMBER_SIGN) { |
- fragment = core.Uri._makeFragment(uri, dart.notNull(index) + 1, uri[dartx.length]); |
+ fragment = core.Uri._makeFragment(uri, dart.notNull(index) + 1, end); |
} |
return new core.Uri._internal(scheme, userinfo, host, port, path, query, fragment); |
} |
static _fail(uri, index, message) { |
dart.throw(new core.FormatException(message, uri, index)); |
} |
- _internal(scheme, userInfo, host, port, path, query, fragment) { |
- this.scheme = scheme; |
- this[_userInfo] = userInfo; |
- this[_host] = host; |
- this[_port] = port; |
- this[_path] = path; |
- this[_query] = query; |
- this[_fragment] = fragment; |
- this[_pathSegments] = null; |
- this[_queryParameters] = null; |
- } |
- static new(opts) { |
- let scheme = opts && 'scheme' in opts ? opts.scheme : ""; |
- let userInfo = opts && 'userInfo' in opts ? opts.userInfo : ""; |
- let host = opts && 'host' in opts ? opts.host : null; |
- let port = opts && 'port' in opts ? opts.port : null; |
- let path = opts && 'path' in opts ? opts.path : null; |
- let pathSegments = opts && 'pathSegments' in opts ? opts.pathSegments : null; |
- let query = opts && 'query' in opts ? opts.query : null; |
- let queryParameters = opts && 'queryParameters' in opts ? opts.queryParameters : null; |
- let fragment = opts && 'fragment' in opts ? opts.fragment : null; |
- scheme = core.Uri._makeScheme(scheme, core.Uri._stringOrNullLength(scheme)); |
- userInfo = core.Uri._makeUserInfo(userInfo, 0, core.Uri._stringOrNullLength(userInfo)); |
- host = core.Uri._makeHost(host, 0, core.Uri._stringOrNullLength(host), false); |
- if (query == "") query = null; |
- query = core.Uri._makeQuery(query, 0, core.Uri._stringOrNullLength(query), queryParameters); |
- fragment = core.Uri._makeFragment(fragment, 0, core.Uri._stringOrNullLength(fragment)); |
- port = core.Uri._makePort(port, scheme); |
- let isFile = scheme == "file"; |
- if (host == null && (dart.notNull(userInfo[dartx.isNotEmpty]) || port != null || isFile)) { |
- host = ""; |
- } |
- let ensureLeadingSlash = host != null; |
- path = core.Uri._makePath(path, 0, core.Uri._stringOrNullLength(path), pathSegments, ensureLeadingSlash, isFile); |
- return new core.Uri._internal(scheme, userInfo, host, port, path, query, fragment); |
- } |
- static http(authority, unencodedPath, queryParameters) { |
- if (queryParameters === void 0) queryParameters = null; |
- return core.Uri._makeHttpUri("http", authority, unencodedPath, queryParameters); |
- } |
- static https(authority, unencodedPath, queryParameters) { |
- if (queryParameters === void 0) queryParameters = null; |
- return core.Uri._makeHttpUri("https", authority, unencodedPath, queryParameters); |
- } |
static _makeHttpUri(scheme, authority, unencodedPath, queryParameters) { |
let userInfo = ""; |
let host = null; |
@@ -28701,7 +29450,27 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
static file(path, opts) { |
let windows = opts && 'windows' in opts ? opts.windows : null; |
windows = windows == null ? core.Uri._isWindows : windows; |
- return dart.as(dart.notNull(windows) ? core.Uri._makeWindowsFileUrl(path) : core.Uri._makeFileUri(path), core.Uri); |
+ return dart.as(dart.notNull(windows) ? core.Uri._makeWindowsFileUrl(path, false) : core.Uri._makeFileUri(path, false), core.Uri); |
+ } |
+ static directory(path, opts) { |
+ let windows = opts && 'windows' in opts ? opts.windows : null; |
+ windows = windows == null ? core.Uri._isWindows : windows; |
+ return dart.as(dart.notNull(windows) ? core.Uri._makeWindowsFileUrl(path, true) : core.Uri._makeFileUri(path, true), core.Uri); |
+ } |
+ static dataFromString(content, opts) { |
+ let mimeType = opts && 'mimeType' in opts ? opts.mimeType : null; |
+ let encoding = opts && 'encoding' in opts ? opts.encoding : null; |
+ let parameters = opts && 'parameters' in opts ? opts.parameters : null; |
+ let base64 = opts && 'base64' in opts ? opts.base64 : false; |
+ let data = core.UriData.fromString(content, {mimeType: mimeType, encoding: encoding, parameters: parameters, base64: base64}); |
+ return data.uri; |
+ } |
+ static dataFromBytes(bytes, opts) { |
+ let mimeType = opts && 'mimeType' in opts ? opts.mimeType : "application/octet-stream"; |
+ let parameters = opts && 'parameters' in opts ? opts.parameters : null; |
+ let percentEncoded = opts && 'percentEncoded' in opts ? opts.percentEncoded : false; |
+ let data = core.UriData.fromBytes(bytes, {mimeType: mimeType, parameters: parameters, percentEncoded: percentEncoded}); |
+ return data.uri; |
} |
static get base() { |
let uri = _js_helper.Primitives.currentUri(); |
@@ -28724,7 +29493,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
static _checkWindowsPathReservedCharacters(segments, argumentError, firstSegment) { |
if (firstSegment === void 0) firstSegment = 0; |
- segments[dartx.skip](firstSegment)[dartx.forEach](dart.fn(segment => { |
+ for (let segment of segments[dartx.skip](firstSegment)) { |
if (dart.notNull(segment[dartx.contains](core.RegExp.new('["*/:<>?\\\\|]')))) { |
if (dart.notNull(argumentError)) { |
dart.throw(new core.ArgumentError("Illegal character in path")); |
@@ -28732,7 +29501,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
dart.throw(new core.UnsupportedError("Illegal character in path")); |
} |
} |
- }, dart.void, [core.String])); |
+ } |
} |
static _checkWindowsDriveLetter(charCode, argumentError) { |
if (dart.notNull(core.Uri._UPPER_CASE_A) <= dart.notNull(charCode) && dart.notNull(charCode) <= dart.notNull(core.Uri._UPPER_CASE_Z) || dart.notNull(core.Uri._LOWER_CASE_A) <= dart.notNull(charCode) && dart.notNull(charCode) <= dart.notNull(core.Uri._LOWER_CASE_Z)) { |
@@ -28744,18 +29513,22 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
dart.throw(new core.UnsupportedError("Illegal drive letter " + core.String.fromCharCode(charCode))); |
} |
} |
- static _makeFileUri(path) { |
+ static _makeFileUri(path, slashTerminated) { |
let sep = "/"; |
+ let segments = path[dartx.split](sep); |
+ if (dart.notNull(slashTerminated) && dart.notNull(segments[dartx.isNotEmpty]) && dart.notNull(segments[dartx.last][dartx.isNotEmpty])) { |
+ segments[dartx.add](""); |
+ } |
if (dart.notNull(path[dartx.startsWith](sep))) { |
- return core.Uri.new({scheme: "file", pathSegments: path[dartx.split](sep)}); |
+ return core.Uri.new({scheme: "file", pathSegments: segments}); |
} else { |
- return core.Uri.new({pathSegments: path[dartx.split](sep)}); |
+ return core.Uri.new({pathSegments: segments}); |
} |
} |
- static _makeWindowsFileUrl(path) { |
+ static _makeWindowsFileUrl(path, slashTerminated) { |
if (dart.notNull(path[dartx.startsWith]("\\\\?\\"))) { |
- if (dart.notNull(path[dartx.startsWith]("\\\\?\\UNC\\"))) { |
- path = `\\${path[dartx.substring](7)}`; |
+ if (dart.notNull(path[dartx.startsWith]("UNC\\", 4))) { |
+ path = path[dartx.replaceRange](0, 7, '\\'); |
} else { |
path = path[dartx.substring](4); |
if (dart.notNull(path[dartx.length]) < 3 || path[dartx.codeUnitAt](1) != core.Uri._COLON || path[dartx.codeUnitAt](2) != core.Uri._BACKSLASH) { |
@@ -28763,34 +29536,46 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
} |
} else { |
- path = path[dartx.replaceAll]("/", "\\"); |
+ path = path[dartx.replaceAll]("/", '\\'); |
} |
- let sep = "\\"; |
- if (dart.notNull(path[dartx.length]) > 1 && path[dartx.get](1) == ":") { |
+ let sep = '\\'; |
+ if (dart.notNull(path[dartx.length]) > 1 && path[dartx.codeUnitAt](1) == core.Uri._COLON) { |
core.Uri._checkWindowsDriveLetter(path[dartx.codeUnitAt](0), true); |
if (path[dartx.length] == 2 || path[dartx.codeUnitAt](2) != core.Uri._BACKSLASH) { |
dart.throw(new core.ArgumentError("Windows paths with drive letter must be absolute")); |
} |
let pathSegments = path[dartx.split](sep); |
+ if (dart.notNull(slashTerminated) && dart.notNull(pathSegments[dartx.last][dartx.isNotEmpty])) { |
+ pathSegments[dartx.add](""); |
+ } |
core.Uri._checkWindowsPathReservedCharacters(pathSegments, true, 1); |
return core.Uri.new({scheme: "file", pathSegments: pathSegments}); |
} |
- if (dart.notNull(path[dartx.length]) > 0 && path[dartx.get](0) == sep) { |
- if (dart.notNull(path[dartx.length]) > 1 && path[dartx.get](1) == sep) { |
- let pathStart = path[dartx.indexOf]("\\", 2); |
- let hostPart = pathStart == -1 ? path[dartx.substring](2) : path[dartx.substring](2, pathStart); |
- let pathPart = pathStart == -1 ? "" : path[dartx.substring](dart.notNull(pathStart) + 1); |
+ if (dart.notNull(path[dartx.startsWith](sep))) { |
+ if (dart.notNull(path[dartx.startsWith](sep, 1))) { |
+ let pathStart = path[dartx.indexOf]('\\', 2); |
+ let hostPart = dart.notNull(pathStart) < 0 ? path[dartx.substring](2) : path[dartx.substring](2, pathStart); |
+ let pathPart = dart.notNull(pathStart) < 0 ? "" : path[dartx.substring](dart.notNull(pathStart) + 1); |
let pathSegments = pathPart[dartx.split](sep); |
core.Uri._checkWindowsPathReservedCharacters(pathSegments, true); |
+ if (dart.notNull(slashTerminated) && dart.notNull(pathSegments[dartx.last][dartx.isNotEmpty])) { |
+ pathSegments[dartx.add](""); |
+ } |
return core.Uri.new({scheme: "file", host: hostPart, pathSegments: pathSegments}); |
} else { |
let pathSegments = path[dartx.split](sep); |
+ if (dart.notNull(slashTerminated) && dart.notNull(pathSegments[dartx.last][dartx.isNotEmpty])) { |
+ pathSegments[dartx.add](""); |
+ } |
core.Uri._checkWindowsPathReservedCharacters(pathSegments, true); |
return core.Uri.new({scheme: "file", pathSegments: pathSegments}); |
} |
} else { |
let pathSegments = path[dartx.split](sep); |
core.Uri._checkWindowsPathReservedCharacters(pathSegments, true); |
+ if (dart.notNull(slashTerminated) && dart.notNull(pathSegments[dartx.isNotEmpty]) && dart.notNull(pathSegments[dartx.last][dartx.isNotEmpty])) { |
+ pathSegments[dartx.add](""); |
+ } |
return core.Uri.new({pathSegments: pathSegments}); |
} |
} |
@@ -28806,7 +29591,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
let fragment = opts && 'fragment' in opts ? opts.fragment : null; |
let schemeChanged = false; |
if (scheme != null) { |
- scheme = core.Uri._makeScheme(scheme, scheme[dartx.length]); |
+ scheme = core.Uri._makeScheme(scheme, 0, scheme[dartx.length]); |
schemeChanged = true; |
} else { |
scheme = this.scheme; |
@@ -28815,12 +29600,12 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
if (userInfo != null) { |
userInfo = core.Uri._makeUserInfo(userInfo, 0, userInfo[dartx.length]); |
} else { |
- userInfo = this.userInfo; |
+ userInfo = this[_userInfo]; |
} |
if (port != null) { |
port = core.Uri._makePort(port, scheme); |
} else { |
- port = dart.asInt(this[_port]); |
+ port = this[_port]; |
if (schemeChanged) { |
port = core.Uri._makePort(port, scheme); |
} |
@@ -28828,37 +29613,45 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
if (host != null) { |
host = core.Uri._makeHost(host, 0, host[dartx.length], false); |
} else if (dart.notNull(this.hasAuthority)) { |
- host = this.host; |
+ host = this[_host]; |
} else if (dart.notNull(userInfo[dartx.isNotEmpty]) || port != null || isFile) { |
host = ""; |
} |
- let ensureLeadingSlash = host != null; |
+ let hasAuthority = host != null; |
if (path != null || pathSegments != null) { |
- path = core.Uri._makePath(path, 0, core.Uri._stringOrNullLength(path), pathSegments, ensureLeadingSlash, isFile); |
+ path = core.Uri._makePath(path, 0, core.Uri._stringOrNullLength(path), pathSegments, scheme, hasAuthority); |
} else { |
- path = this.path; |
- if ((isFile || ensureLeadingSlash && !dart.notNull(path[dartx.isEmpty])) && !dart.notNull(path[dartx.startsWith]('/'))) { |
- path = `/${path}`; |
+ path = this[_path]; |
+ if ((isFile || hasAuthority && !dart.notNull(path[dartx.isEmpty])) && !dart.notNull(path[dartx.startsWith]('/'))) { |
+ path = "/" + dart.notNull(path); |
} |
} |
if (query != null || queryParameters != null) { |
query = core.Uri._makeQuery(query, 0, core.Uri._stringOrNullLength(query), queryParameters); |
- } else if (dart.notNull(this.hasQuery)) { |
- query = this.query; |
+ } else { |
+ query = this[_query]; |
} |
if (fragment != null) { |
fragment = core.Uri._makeFragment(fragment, 0, fragment[dartx.length]); |
- } else if (dart.notNull(this.hasFragment)) { |
- fragment = this.fragment; |
+ } else { |
+ fragment = this[_fragment]; |
} |
return new core.Uri._internal(scheme, userInfo, host, port, path, query, fragment); |
} |
+ removeFragment() { |
+ if (!dart.notNull(this.hasFragment)) return this; |
+ return new core.Uri._internal(this.scheme, this[_userInfo], this[_host], this[_port], this[_path], this[_query], null); |
+ } |
get pathSegments() { |
- if (this[_pathSegments] == null) { |
- let pathToSplit = !dart.notNull(this.path[dartx.isEmpty]) && this.path[dartx.codeUnitAt](0) == core.Uri._SLASH ? this.path[dartx.substring](1) : this.path; |
- this[_pathSegments] = new (collection.UnmodifiableListView$(core.String))(pathToSplit == "" ? dart.const(dart.list([], core.String)) : core.List$(core.String).from(pathToSplit[dartx.split]("/")[dartx.map](core.String)(core.Uri.decodeComponent), {growable: false})); |
+ let result = this[_pathSegments]; |
+ if (result != null) return result; |
+ let pathToSplit = this.path; |
+ if (dart.notNull(pathToSplit[dartx.isNotEmpty]) && pathToSplit[dartx.codeUnitAt](0) == core.Uri._SLASH) { |
+ pathToSplit = pathToSplit[dartx.substring](1); |
} |
- return this[_pathSegments]; |
+ result = pathToSplit == "" ? dart.const(dart.list([], core.String)) : core.List$(core.String).unmodifiable(pathToSplit[dartx.split]("/")[dartx.map](core.String)(core.Uri.decodeComponent)); |
+ this[_pathSegments] = result; |
+ return result; |
} |
get queryParameters() { |
if (this[_queryParameters] == null) { |
@@ -28866,6 +29659,21 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
return this[_queryParameters]; |
} |
+ get queryParametersAll() { |
+ if (this[_queryParameterLists] == null) { |
+ let queryParameterLists = core.Uri._splitQueryStringAll(this.query); |
+ for (let key of queryParameterLists[dartx.keys]) { |
+ queryParameterLists[dartx.set](key, core.List$(core.String).unmodifiable(dart.as(queryParameterLists[dartx.get](key), core.Iterable))); |
+ } |
+ this[_queryParameterLists] = core.Map$(core.String, core.List$(core.String)).unmodifiable(queryParameterLists); |
+ } |
+ return this[_queryParameterLists]; |
+ } |
+ normalizePath() { |
+ let path = core.Uri._normalizePath(this[_path], this.scheme, this.hasAuthority); |
+ if (core.identical(path, this[_path])) return this; |
+ return this.replace({path: path}); |
+ } |
static _makePort(port, scheme) { |
if (port != null && port == core.Uri._defaultPort(scheme)) return null; |
return port; |
@@ -28959,32 +29767,34 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
return dart.toString(buffer); |
} |
- static _makeScheme(scheme, end) { |
- if (end == 0) return ""; |
- let firstCodeUnit = scheme[dartx.codeUnitAt](0); |
+ static _makeScheme(scheme, start, end) { |
+ if (start == end) return ""; |
+ let firstCodeUnit = scheme[dartx.codeUnitAt](start); |
if (!dart.notNull(core.Uri._isAlphabeticCharacter(firstCodeUnit))) { |
- core.Uri._fail(scheme, 0, "Scheme not starting with alphabetic character"); |
+ core.Uri._fail(scheme, start, "Scheme not starting with alphabetic character"); |
} |
- let allLowercase = dart.notNull(firstCodeUnit) >= dart.notNull(core.Uri._LOWER_CASE_A); |
- for (let i = 0; i < dart.notNull(end); i++) { |
+ let containsUpperCase = false; |
+ for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull(i) + 1) { |
let codeUnit = scheme[dartx.codeUnitAt](i); |
if (!dart.notNull(core.Uri._isSchemeCharacter(codeUnit))) { |
core.Uri._fail(scheme, i, "Illegal scheme character"); |
} |
- if (dart.notNull(codeUnit) < dart.notNull(core.Uri._LOWER_CASE_A) || dart.notNull(codeUnit) > dart.notNull(core.Uri._LOWER_CASE_Z)) { |
- allLowercase = false; |
+ if (dart.notNull(core.Uri._UPPER_CASE_A) <= dart.notNull(codeUnit) && dart.notNull(codeUnit) <= dart.notNull(core.Uri._UPPER_CASE_Z)) { |
+ containsUpperCase = true; |
} |
} |
- scheme = scheme[dartx.substring](0, end); |
- if (!allLowercase) scheme = scheme[dartx.toLowerCase](); |
+ scheme = scheme[dartx.substring](start, end); |
+ if (containsUpperCase) scheme = scheme[dartx.toLowerCase](); |
return scheme; |
} |
static _makeUserInfo(userInfo, start, end) { |
if (userInfo == null) return ""; |
return core.Uri._normalize(userInfo, start, end, core.Uri._userinfoTable); |
} |
- static _makePath(path, start, end, pathSegments, ensureLeadingSlash, isFile) { |
- if (path == null && pathSegments == null) return dart.notNull(isFile) ? "/" : ""; |
+ static _makePath(path, start, end, pathSegments, scheme, hasAuthority) { |
+ let isFile = scheme == "file"; |
+ let ensureLeadingSlash = isFile || dart.notNull(hasAuthority); |
+ if (path == null && pathSegments == null) return isFile ? "/" : ""; |
if (path != null && pathSegments != null) { |
dart.throw(new core.ArgumentError('Both path and pathSegments specified')); |
} |
@@ -28992,15 +29802,22 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
if (path != null) { |
result = core.Uri._normalize(path, start, end, core.Uri._pathCharOrSlashTable); |
} else { |
- result = pathSegments[dartx.map](core.String)(dart.fn(s => core.Uri._uriEncode(core.Uri._pathCharTable, s), core.String, [core.String]))[dartx.join]("/"); |
+ result = pathSegments[dartx.map](core.String)(dart.fn(s => core.Uri._uriEncode(core.Uri._pathCharTable, s, convert.UTF8, false), core.String, [core.String]))[dartx.join]("/"); |
} |
if (dart.notNull(dart.as(dart.dload(result, 'isEmpty'), core.bool))) { |
- if (dart.notNull(isFile)) return "/"; |
- } else if ((dart.notNull(isFile) || dart.notNull(ensureLeadingSlash)) && !dart.equals(dart.dsend(result, 'codeUnitAt', 0), core.Uri._SLASH)) { |
- return `/${result}`; |
+ if (isFile) return "/"; |
+ } else if (ensureLeadingSlash && !dart.notNull(dart.as(dart.dsend(result, 'startsWith', '/'), core.bool))) { |
+ result = "/" + dart.notNull(dart.as(result, core.String)); |
} |
+ result = core.Uri._normalizePath(dart.as(result, core.String), scheme, hasAuthority); |
return dart.as(result, core.String); |
} |
+ static _normalizePath(path, scheme, hasAuthority) { |
+ if (dart.notNull(scheme[dartx.isEmpty]) && !dart.notNull(hasAuthority) && !dart.notNull(path[dartx.startsWith]('/'))) { |
+ return core.Uri._normalizeRelativePath(path); |
+ } |
+ return core.Uri._removeDotSegments(path); |
+ } |
static _makeQuery(query, start, end, queryParameters) { |
if (query == null && queryParameters == null) return null; |
if (query != null && queryParameters != null) { |
@@ -29008,18 +29825,28 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
if (query != null) return core.Uri._normalize(query, start, end, core.Uri._queryCharTable); |
let result = new core.StringBuffer(); |
- let first = true; |
- queryParameters[dartx.forEach](dart.fn((key, value) => { |
- if (!first) { |
- result.write("&"); |
- } |
- first = false; |
+ let separator = ""; |
+ function writeParameter(key, value) { |
+ result.write(separator); |
+ separator = "&"; |
result.write(core.Uri.encodeQueryComponent(key)); |
- if (value != null && !dart.notNull(value[dartx.isEmpty])) { |
+ if (value != null && dart.notNull(value[dartx.isNotEmpty])) { |
result.write("="); |
result.write(core.Uri.encodeQueryComponent(value)); |
} |
- }, dart.void, [core.String, core.String])); |
+ } |
+ dart.fn(writeParameter, dart.void, [core.String, core.String]); |
+ queryParameters[dartx.forEach](dart.fn((key, value) => { |
+ if (value == null || typeof value == 'string') { |
+ writeParameter(key, dart.as(value, core.String)); |
+ } else { |
+ let values = dart.as(value, core.Iterable); |
+ for (let value of values) { |
+ dart.as(value, core.String); |
+ writeParameter(key, value); |
+ } |
+ } |
+ }, dart.void, [core.String, dart.dynamic])); |
return result.toString(); |
} |
static _makeFragment(fragment, start, end) { |
@@ -29029,17 +29856,6 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
static _stringOrNullLength(s) { |
return s == null ? 0 : s[dartx.length]; |
} |
- static _isHexDigit(char) { |
- if (dart.notNull(core.Uri._NINE) >= dart.notNull(char)) return dart.notNull(core.Uri._ZERO) <= dart.notNull(char); |
- char = (dart.notNull(char) | 32) >>> 0; |
- return dart.notNull(core.Uri._LOWER_CASE_A) <= dart.notNull(char) && dart.notNull(core.Uri._LOWER_CASE_F) >= dart.notNull(char); |
- } |
- static _hexValue(char) { |
- dart.assert(core.Uri._isHexDigit(char)); |
- if (dart.notNull(core.Uri._NINE) >= dart.notNull(char)) return dart.notNull(char) - dart.notNull(core.Uri._ZERO); |
- char = (dart.notNull(char) | 32) >>> 0; |
- return dart.notNull(char) - (dart.notNull(core.Uri._LOWER_CASE_A) - 10); |
- } |
static _normalizeEscape(source, index, lowerCase) { |
dart.assert(source[dartx.codeUnitAt](index) == core.Uri._PERCENT); |
if (dart.notNull(index) + 2 >= dart.notNull(source[dartx.length])) { |
@@ -29047,10 +29863,12 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
let firstDigit = source[dartx.codeUnitAt](dart.notNull(index) + 1); |
let secondDigit = source[dartx.codeUnitAt](dart.notNull(index) + 2); |
- if (!dart.notNull(core.Uri._isHexDigit(firstDigit)) || !dart.notNull(core.Uri._isHexDigit(secondDigit))) { |
+ let firstDigitValue = core.Uri._parseHexDigit(firstDigit); |
+ let secondDigitValue = core.Uri._parseHexDigit(secondDigit); |
+ if (dart.notNull(firstDigitValue) < 0 || dart.notNull(secondDigitValue) < 0) { |
return "%"; |
} |
- let value = dart.notNull(core.Uri._hexValue(firstDigit)) * 16 + dart.notNull(core.Uri._hexValue(secondDigit)); |
+ let value = dart.notNull(firstDigitValue) * 16 + dart.notNull(secondDigitValue); |
if (dart.notNull(core.Uri._isUnreservedChar(value))) { |
if (dart.notNull(lowerCase) && dart.notNull(core.Uri._UPPER_CASE_A) <= value && dart.notNull(core.Uri._UPPER_CASE_Z) >= value) { |
value = (value | 32) >>> 0; |
@@ -29062,41 +29880,46 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
return null; |
} |
- static _isUnreservedChar(ch) { |
- return dart.notNull(ch) < 127 && (dart.notNull(core.Uri._unreservedTable[dartx.get](ch[dartx['>>']](4))) & 1 << (dart.notNull(ch) & 15)) != 0; |
+ static _parseHexDigit(char) { |
+ let digit = (dart.notNull(char) ^ dart.notNull(core.Uri._ZERO)) >>> 0; |
+ if (digit <= 9) return digit; |
+ let lowerCase = (dart.notNull(char) | 32) >>> 0; |
+ if (dart.notNull(core.Uri._LOWER_CASE_A) <= lowerCase && lowerCase <= dart.notNull(core.Uri._LOWER_CASE_F)) { |
+ return lowerCase - (dart.notNull(core.Uri._LOWER_CASE_A) - 10); |
+ } |
+ return -1; |
} |
static _escapeChar(char) { |
- dart.assert(dart.dsend(char, '<=', 1114111)); |
- let hexDigits = "0123456789ABCDEF"; |
+ dart.assert(dart.notNull(char) <= 1114111); |
let codeUnits = null; |
- if (dart.notNull(dart.as(dart.dsend(char, '<', 128), core.bool))) { |
- codeUnits = core.List.new(3); |
+ if (dart.notNull(char) < 128) { |
+ codeUnits = core.List$(core.int).new(3); |
codeUnits[dartx.set](0, core.Uri._PERCENT); |
- codeUnits[dartx.set](1, hexDigits[dartx.codeUnitAt](dart.as(dart.dsend(char, '>>', 4), core.int))); |
- codeUnits[dartx.set](2, hexDigits[dartx.codeUnitAt](dart.as(dart.dsend(char, '&', 15), core.int))); |
+ codeUnits[dartx.set](1, core.Uri._hexDigits[dartx.codeUnitAt](char[dartx['>>']](4))); |
+ codeUnits[dartx.set](2, core.Uri._hexDigits[dartx.codeUnitAt](dart.notNull(char) & 15)); |
} else { |
let flag = 192; |
let encodedBytes = 2; |
- if (dart.notNull(dart.as(dart.dsend(char, '>', 2047), core.bool))) { |
+ if (dart.notNull(char) > 2047) { |
flag = 224; |
encodedBytes = 3; |
- if (dart.notNull(dart.as(dart.dsend(char, '>', 65535), core.bool))) { |
+ if (dart.notNull(char) > 65535) { |
encodedBytes = 4; |
flag = 240; |
} |
} |
- codeUnits = core.List.new(3 * encodedBytes); |
+ codeUnits = core.List$(core.int).new(3 * encodedBytes); |
let index = 0; |
while (--encodedBytes >= 0) { |
- let byte = dart.as(dart.dsend(dart.dsend(dart.dsend(char, '>>', 6 * encodedBytes), '&', 63), '|', flag), core.int); |
+ let byte = (char[dartx['>>']](6 * encodedBytes) & 63 | flag) >>> 0; |
codeUnits[dartx.set](index, core.Uri._PERCENT); |
- codeUnits[dartx.set](index + 1, hexDigits[dartx.codeUnitAt](byte[dartx['>>']](4))); |
- codeUnits[dartx.set](index + 2, hexDigits[dartx.codeUnitAt](dart.notNull(byte) & 15)); |
+ codeUnits[dartx.set](index + 1, core.Uri._hexDigits[dartx.codeUnitAt](byte[dartx['>>']](4))); |
+ codeUnits[dartx.set](index + 2, core.Uri._hexDigits[dartx.codeUnitAt](byte & 15)); |
index = index + 3; |
flag = 128; |
} |
} |
- return core.String.fromCharCodes(dart.as(codeUnits, core.Iterable$(core.int))); |
+ return core.String.fromCharCodes(codeUnits); |
} |
static _normalize(component, start, end, charTable) { |
let buffer = null; |
@@ -29160,8 +29983,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
get isAbsolute() { |
return this.scheme != "" && this.fragment == ""; |
} |
- [_merge](base, reference) { |
- if (dart.notNull(base[dartx.isEmpty])) return `/${reference}`; |
+ [_mergePaths](base, reference) { |
let backCount = 0; |
let refStart = 0; |
while (dart.notNull(reference[dartx.startsWith]("../", refStart))) { |
@@ -29181,21 +30003,27 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
baseEnd = newEnd; |
backCount--; |
} |
- return dart.notNull(base[dartx.substring](0, dart.notNull(baseEnd) + 1)) + dart.notNull(reference[dartx.substring](refStart - 3 * backCount)); |
+ return base[dartx.replaceRange](dart.notNull(baseEnd) + 1, null, reference[dartx.substring](refStart - 3 * backCount)); |
} |
- [_hasDotSegments](path) { |
- if (dart.notNull(path[dartx.length]) > 0 && path[dartx.codeUnitAt](0) == core.Uri._DOT) return true; |
+ static _mayContainDotSegments(path) { |
+ if (dart.notNull(path[dartx.startsWith]('.'))) return true; |
let index = path[dartx.indexOf]("/."); |
return index != -1; |
} |
- [_removeDotSegments](path) { |
- if (!dart.notNull(this[_hasDotSegments](path))) return path; |
+ static _removeDotSegments(path) { |
+ if (!dart.notNull(core.Uri._mayContainDotSegments(path))) return path; |
+ dart.assert(path[dartx.isNotEmpty]); |
let output = dart.list([], core.String); |
let appendSlash = false; |
for (let segment of path[dartx.split]("/")) { |
appendSlash = false; |
if (segment == "..") { |
- if (!dart.notNull(output[dartx.isEmpty]) && (output[dartx.length] != 1 || output[dartx.get](0) != "")) output[dartx.removeLast](); |
+ if (dart.notNull(output[dartx.isNotEmpty])) { |
+ output[dartx.removeLast](); |
+ if (dart.notNull(output[dartx.isEmpty])) { |
+ output[dartx.add](""); |
+ } |
+ } |
appendSlash = true; |
} else if ("." == segment) { |
appendSlash = true; |
@@ -29206,6 +30034,33 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
if (appendSlash) output[dartx.add](""); |
return output[dartx.join]("/"); |
} |
+ static _normalizeRelativePath(path) { |
+ dart.assert(!dart.notNull(path[dartx.startsWith]('/'))); |
+ if (!dart.notNull(core.Uri._mayContainDotSegments(path))) return path; |
+ dart.assert(path[dartx.isNotEmpty]); |
+ let output = dart.list([], core.String); |
+ let appendSlash = false; |
+ for (let segment of path[dartx.split]("/")) { |
+ appendSlash = false; |
+ if (".." == segment) { |
+ if (!dart.notNull(output[dartx.isEmpty]) && output[dartx.last] != "..") { |
+ output[dartx.removeLast](); |
+ appendSlash = true; |
+ } else { |
+ output[dartx.add](".."); |
+ } |
+ } else if ("." == segment) { |
+ appendSlash = true; |
+ } else { |
+ output[dartx.add](segment); |
+ } |
+ } |
+ if (dart.notNull(output[dartx.isEmpty]) || output[dartx.length] == 1 && dart.notNull(output[dartx.get](0)[dartx.isEmpty])) { |
+ return "./"; |
+ } |
+ if (appendSlash || output[dartx.last] == '..') output[dartx.add](""); |
+ return output[dartx.join]("/"); |
+ } |
resolve(reference) { |
return this.resolveUri(core.Uri.parse(reference)); |
} |
@@ -29223,7 +30078,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
targetHost = reference.host; |
targetPort = dart.notNull(reference.hasPort) ? reference.port : null; |
} |
- targetPath = this[_removeDotSegments](reference.path); |
+ targetPath = core.Uri._removeDotSegments(reference.path); |
if (dart.notNull(reference.hasQuery)) { |
targetQuery = reference.query; |
} |
@@ -29233,9 +30088,12 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
targetUserInfo = reference.userInfo; |
targetHost = reference.host; |
targetPort = core.Uri._makePort(dart.notNull(reference.hasPort) ? reference.port : null, targetScheme); |
- targetPath = this[_removeDotSegments](reference.path); |
+ targetPath = core.Uri._removeDotSegments(reference.path); |
if (dart.notNull(reference.hasQuery)) targetQuery = reference.query; |
} else { |
+ targetUserInfo = this[_userInfo]; |
+ targetHost = this[_host]; |
+ targetPort = this[_port]; |
if (reference.path == "") { |
targetPath = this[_path]; |
if (dart.notNull(reference.hasQuery)) { |
@@ -29244,21 +30102,34 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
targetQuery = this[_query]; |
} |
} else { |
- if (dart.notNull(reference.path[dartx.startsWith]("/"))) { |
- targetPath = this[_removeDotSegments](reference.path); |
+ if (dart.notNull(reference.hasAbsolutePath)) { |
+ targetPath = core.Uri._removeDotSegments(reference.path); |
} else { |
- targetPath = this[_removeDotSegments](this[_merge](this[_path], reference.path)); |
+ if (dart.notNull(this.hasEmptyPath)) { |
+ if (!dart.notNull(this.hasScheme) && !dart.notNull(this.hasAuthority)) { |
+ targetPath = reference.path; |
+ } else { |
+ targetPath = core.Uri._removeDotSegments("/" + dart.notNull(reference.path)); |
+ } |
+ } else { |
+ let mergedPath = this[_mergePaths](this[_path], reference.path); |
+ if (dart.notNull(this.hasScheme) || dart.notNull(this.hasAuthority) || dart.notNull(this.hasAbsolutePath)) { |
+ targetPath = core.Uri._removeDotSegments(mergedPath); |
+ } else { |
+ targetPath = core.Uri._normalizeRelativePath(mergedPath); |
+ } |
+ } |
} |
if (dart.notNull(reference.hasQuery)) targetQuery = reference.query; |
} |
- targetUserInfo = this[_userInfo]; |
- targetHost = this[_host]; |
- targetPort = dart.asInt(this[_port]); |
} |
} |
let fragment = dart.notNull(reference.hasFragment) ? reference.fragment : null; |
return new core.Uri._internal(targetScheme, targetUserInfo, targetHost, targetPort, targetPath, targetQuery, fragment); |
} |
+ get hasScheme() { |
+ return this.scheme[dartx.isNotEmpty]; |
+ } |
get hasAuthority() { |
return this[_host] != null; |
} |
@@ -29271,6 +30142,12 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
get hasFragment() { |
return this[_fragment] != null; |
} |
+ get hasEmptyPath() { |
+ return this[_path][dartx.isEmpty]; |
+ } |
+ get hasAbsolutePath() { |
+ return this[_path][dartx.startsWith]('/'); |
+ } |
get origin() { |
if (this.scheme == "" || this[_host] == null || this[_host] == "") { |
dart.throw(new core.StateError(`Cannot use origin without a scheme: ${this}`)); |
@@ -29341,6 +30218,9 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
ss.write(this[_port]); |
} |
} |
+ get data() { |
+ return this.scheme == "data" ? core.UriData.fromUri(this) : null; |
+ } |
toString() { |
let sb = new core.StringBuffer(); |
core.Uri._addIfNonEmpty(sb, this.scheme, this.scheme, ':'); |
@@ -29378,24 +30258,24 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
} |
static encodeComponent(component) { |
- return core.Uri._uriEncode(core.Uri._unreserved2396Table, component); |
+ return core.Uri._uriEncode(core.Uri._unreserved2396Table, component, convert.UTF8, false); |
} |
static encodeQueryComponent(component, opts) { |
let encoding = opts && 'encoding' in opts ? opts.encoding : convert.UTF8; |
- return core.Uri._uriEncode(core.Uri._unreservedTable, component, {encoding: encoding, spaceToPlus: true}); |
+ return core.Uri._uriEncode(core.Uri._unreservedTable, component, encoding, true); |
} |
static decodeComponent(encodedComponent) { |
- return core.Uri._uriDecode(encodedComponent); |
+ return core.Uri._uriDecode(encodedComponent, 0, encodedComponent[dartx.length], convert.UTF8, false); |
} |
static decodeQueryComponent(encodedComponent, opts) { |
let encoding = opts && 'encoding' in opts ? opts.encoding : convert.UTF8; |
- return core.Uri._uriDecode(encodedComponent, {plusToSpace: true, encoding: encoding}); |
+ return core.Uri._uriDecode(encodedComponent, 0, encodedComponent[dartx.length], encoding, true); |
} |
static encodeFull(uri) { |
- return core.Uri._uriEncode(core.Uri._encodeFullTable, uri); |
+ return core.Uri._uriEncode(core.Uri._encodeFullTable, uri, convert.UTF8, false); |
} |
static decodeFull(uri) { |
- return core.Uri._uriDecode(uri); |
+ return core.Uri._uriDecode(uri, 0, uri[dartx.length], convert.UTF8, false); |
} |
static splitQueryString(query, opts) { |
let encoding = opts && 'encoding' in opts ? opts.encoding : convert.UTF8; |
@@ -29413,6 +30293,45 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return map; |
}, core.Map$(core.String, core.String), [core.Map$(core.String, core.String), core.String])); |
} |
+ static _createList() { |
+ return []; |
+ } |
+ static _splitQueryStringAll(query, opts) { |
+ let encoding = opts && 'encoding' in opts ? opts.encoding : convert.UTF8; |
+ let result = dart.map(); |
+ let i = 0; |
+ let start = 0; |
+ let equalsIndex = -1; |
+ function parsePair(start, equalsIndex, end) { |
+ let key = null; |
+ let value = null; |
+ if (start == end) return; |
+ if (dart.notNull(equalsIndex) < 0) { |
+ key = core.Uri._uriDecode(query, start, end, encoding, true); |
+ value = ""; |
+ } else { |
+ key = core.Uri._uriDecode(query, start, equalsIndex, encoding, true); |
+ value = core.Uri._uriDecode(query, dart.notNull(equalsIndex) + 1, end, encoding, true); |
+ } |
+ dart.dsend(result[dartx.putIfAbsent](key, core.Uri._createList), 'add', value); |
+ } |
+ dart.fn(parsePair, dart.void, [core.int, core.int, core.int]); |
+ let _equals = 61; |
+ let _ampersand = 38; |
+ while (i < dart.notNull(query[dartx.length])) { |
+ let char = query[dartx.codeUnitAt](i); |
+ if (char == _equals) { |
+ if (equalsIndex < 0) equalsIndex = i; |
+ } else if (char == _ampersand) { |
+ parsePair(start, equalsIndex, i); |
+ start = i + 1; |
+ equalsIndex = -1; |
+ } |
+ i++; |
+ } |
+ parsePair(start, equalsIndex, i); |
+ return result; |
+ } |
static parseIPv4Address(host) { |
function error(msg) { |
dart.throw(new core.FormatException(`Illegal IPv4 address, ${msg}`)); |
@@ -29503,7 +30422,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} else if (parts[dartx.length] != 8) { |
error('an address without a wildcard must contain exactly 8 parts'); |
} |
- let bytes = core.List$(core.int).new(16); |
+ let bytes = typed_data.Uint8List.new(16); |
for (let i = 0, index = 0; i < dart.notNull(parts[dartx.length]); i++) { |
let value = parts[dartx.get](i); |
if (value == -1) { |
@@ -29519,17 +30438,12 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
index = index + 2; |
} |
} |
- return dart.as(bytes, core.List$(core.int)); |
+ return bytes; |
} |
- static _uriEncode(canonicalTable, text, opts) { |
- let encoding = opts && 'encoding' in opts ? opts.encoding : convert.UTF8; |
- let spaceToPlus = opts && 'spaceToPlus' in opts ? opts.spaceToPlus : false; |
- function byteToHex(byte, buffer) { |
- let hex = '0123456789ABCDEF'; |
- dart.dsend(buffer, 'writeCharCode', hex[dartx.codeUnitAt](dart.as(dart.dsend(byte, '>>', 4), core.int))); |
- dart.dsend(buffer, 'writeCharCode', hex[dartx.codeUnitAt](dart.as(dart.dsend(byte, '&', 15), core.int))); |
+ static _uriEncode(canonicalTable, text, encoding, spaceToPlus) { |
+ if (core.identical(encoding, convert.UTF8) && dart.notNull(core.Uri._needsNoEncoding.hasMatch(text))) { |
+ return text; |
} |
- dart.fn(byteToHex); |
let result = new core.StringBuffer(); |
let bytes = encoding.encode(text); |
for (let i = 0; i < dart.notNull(bytes[dartx.length]); i++) { |
@@ -29537,10 +30451,12 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
if (dart.notNull(byte) < 128 && (dart.notNull(canonicalTable[dartx.get](byte[dartx['>>']](4))) & 1 << (dart.notNull(byte) & 15)) != 0) { |
result.writeCharCode(byte); |
} else if (dart.notNull(spaceToPlus) && byte == core.Uri._SPACE) { |
- result.writeCharCode(core.Uri._PLUS); |
+ result.write('+'); |
} else { |
- result.writeCharCode(core.Uri._PERCENT); |
- byteToHex(byte, result); |
+ let hexDigits = '0123456789ABCDEF'; |
+ result.write('%'); |
+ result.write(hexDigits[dartx.get](byte[dartx['>>']](4) & 15)); |
+ result.write(hexDigits[dartx.get](dart.notNull(byte) & 15)); |
} |
} |
return result.toString(); |
@@ -29562,34 +30478,39 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
return byte; |
} |
- static _uriDecode(text, opts) { |
- let plusToSpace = opts && 'plusToSpace' in opts ? opts.plusToSpace : false; |
- let encoding = opts && 'encoding' in opts ? opts.encoding : convert.UTF8; |
+ static _uriDecode(text, start, end, encoding, plusToSpace) { |
+ dart.assert(0 <= dart.notNull(start)); |
+ dart.assert(dart.notNull(start) <= dart.notNull(end)); |
+ dart.assert(dart.notNull(end) <= dart.notNull(text[dartx.length])); |
+ dart.assert(encoding != null); |
let simple = true; |
- for (let i = 0; i < dart.notNull(text[dartx.length]) && simple; i++) { |
+ for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull(i) + 1) { |
let codeUnit = text[dartx.codeUnitAt](i); |
- simple = codeUnit != core.Uri._PERCENT && codeUnit != core.Uri._PLUS; |
+ if (dart.notNull(codeUnit) > 127 || codeUnit == core.Uri._PERCENT || dart.notNull(plusToSpace) && codeUnit == core.Uri._PLUS) { |
+ simple = false; |
+ break; |
+ } |
} |
let bytes = null; |
if (simple) { |
- if (dart.equals(encoding, convert.UTF8) || dart.equals(encoding, convert.LATIN1)) { |
- return text; |
+ if (dart.equals(convert.UTF8, encoding) || dart.equals(convert.LATIN1, encoding) || dart.equals(convert.ASCII, encoding)) { |
+ return text[dartx.substring](start, end); |
} else { |
- bytes = text[dartx.codeUnits]; |
+ bytes = text[dartx.substring](start, end)[dartx.codeUnits]; |
} |
} else { |
bytes = core.List$(core.int).new(); |
- for (let i = 0; i < dart.notNull(text[dartx.length]); i++) { |
+ for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull(i) + 1) { |
let codeUnit = text[dartx.codeUnitAt](i); |
if (dart.notNull(codeUnit) > 127) { |
dart.throw(new core.ArgumentError("Illegal percent encoding in URI")); |
} |
if (codeUnit == core.Uri._PERCENT) { |
- if (i + 3 > dart.notNull(text[dartx.length])) { |
+ if (dart.notNull(i) + 3 > dart.notNull(text[dartx.length])) { |
dart.throw(new core.ArgumentError('Truncated URI')); |
} |
- bytes[dartx.add](core.Uri._hexCharPairToByte(text, i + 1)); |
- i = i + 2; |
+ bytes[dartx.add](core.Uri._hexCharPairToByte(text, dart.notNull(i) + 1)); |
+ i = dart.notNull(i) + 2; |
} else if (dart.notNull(plusToSpace) && codeUnit == core.Uri._PLUS) { |
bytes[dartx.add](core.Uri._SPACE); |
} else { |
@@ -29600,23 +30521,30 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return encoding.decode(bytes); |
} |
static _isAlphabeticCharacter(codeUnit) { |
- return dart.notNull(codeUnit) >= dart.notNull(core.Uri._LOWER_CASE_A) && dart.notNull(codeUnit) <= dart.notNull(core.Uri._LOWER_CASE_Z) || dart.notNull(codeUnit) >= dart.notNull(core.Uri._UPPER_CASE_A) && dart.notNull(codeUnit) <= dart.notNull(core.Uri._UPPER_CASE_Z); |
+ let lowerCase = (dart.notNull(codeUnit) | 32) >>> 0; |
+ return dart.notNull(core.Uri._LOWER_CASE_A) <= lowerCase && lowerCase <= dart.notNull(core.Uri._LOWER_CASE_Z); |
+ } |
+ static _isUnreservedChar(char) { |
+ return dart.notNull(char) < 127 && (dart.notNull(core.Uri._unreservedTable[dartx.get](char[dartx['>>']](4))) & 1 << (dart.notNull(char) & 15)) != 0; |
} |
}; |
dart.defineNamedConstructor(core.Uri, '_internal'); |
dart.setSignature(core.Uri, { |
constructors: () => ({ |
- _internal: [core.Uri, [core.String, core.String, core.String, core.num, core.String, core.String, core.String]], |
- new: [core.Uri, [], {scheme: core.String, userInfo: core.String, host: core.String, port: core.int, path: core.String, pathSegments: core.Iterable$(core.String), query: core.String, queryParameters: core.Map$(core.String, core.String), fragment: core.String}], |
+ _internal: [core.Uri, [core.String, core.String, core.String, core.int, core.String, core.String, core.String]], |
+ new: [core.Uri, [], {scheme: core.String, userInfo: core.String, host: core.String, port: core.int, path: core.String, pathSegments: core.Iterable$(core.String), query: core.String, queryParameters: core.Map$(core.String, dart.dynamic), fragment: core.String}], |
http: [core.Uri, [core.String, core.String], [core.Map$(core.String, core.String)]], |
https: [core.Uri, [core.String, core.String], [core.Map$(core.String, core.String)]], |
- file: [core.Uri, [core.String], {windows: core.bool}] |
+ file: [core.Uri, [core.String], {windows: core.bool}], |
+ directory: [core.Uri, [core.String], {windows: core.bool}], |
+ dataFromString: [core.Uri, [core.String], {mimeType: core.String, encoding: convert.Encoding, parameters: core.Map$(core.String, core.String), base64: core.bool}], |
+ dataFromBytes: [core.Uri, [core.List$(core.int)], {mimeType: dart.dynamic, parameters: core.Map$(core.String, core.String), percentEncoded: dart.dynamic}] |
}), |
methods: () => ({ |
- replace: [core.Uri, [], {scheme: core.String, userInfo: core.String, host: core.String, port: core.int, path: core.String, pathSegments: core.Iterable$(core.String), query: core.String, queryParameters: core.Map$(core.String, core.String), fragment: core.String}], |
- [_merge]: [core.String, [core.String, core.String]], |
- [_hasDotSegments]: [core.bool, [core.String]], |
- [_removeDotSegments]: [core.String, [core.String]], |
+ replace: [core.Uri, [], {scheme: core.String, userInfo: core.String, host: core.String, port: core.int, path: core.String, pathSegments: core.Iterable$(core.String), query: core.String, queryParameters: core.Map$(core.String, dart.dynamic), fragment: core.String}], |
+ removeFragment: [core.Uri, []], |
+ normalizePath: [core.Uri, []], |
+ [_mergePaths]: [core.String, [core.String, core.String]], |
resolve: [core.Uri, [core.String]], |
resolveUri: [core.Uri, [core.Uri]], |
toFilePath: [core.String, [], {windows: core.bool}], |
@@ -29626,32 +30554,34 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
}), |
statics: () => ({ |
_defaultPort: [core.int, [core.String]], |
- parse: [core.Uri, [core.String]], |
+ parse: [core.Uri, [core.String], [core.int, core.int]], |
_fail: [dart.void, [core.String, core.int, core.String]], |
_makeHttpUri: [core.Uri, [core.String, core.String, core.String, core.Map$(core.String, core.String)]], |
_checkNonWindowsPathReservedCharacters: [dart.dynamic, [core.List$(core.String), core.bool]], |
_checkWindowsPathReservedCharacters: [dart.dynamic, [core.List$(core.String), core.bool], [core.int]], |
_checkWindowsDriveLetter: [dart.dynamic, [core.int, core.bool]], |
- _makeFileUri: [dart.dynamic, [core.String]], |
- _makeWindowsFileUrl: [dart.dynamic, [core.String]], |
+ _makeFileUri: [dart.dynamic, [core.String, core.bool]], |
+ _makeWindowsFileUrl: [dart.dynamic, [core.String, core.bool]], |
_makePort: [core.int, [core.int, core.String]], |
_makeHost: [core.String, [core.String, core.int, core.int, core.bool]], |
_isRegNameChar: [core.bool, [core.int]], |
_normalizeRegName: [core.String, [core.String, core.int, core.int]], |
- _makeScheme: [core.String, [core.String, core.int]], |
+ _makeScheme: [core.String, [core.String, core.int, core.int]], |
_makeUserInfo: [core.String, [core.String, core.int, core.int]], |
- _makePath: [core.String, [core.String, core.int, core.int, core.Iterable$(core.String), core.bool, core.bool]], |
- _makeQuery: [core.String, [core.String, core.int, core.int, core.Map$(core.String, core.String)]], |
+ _makePath: [core.String, [core.String, core.int, core.int, core.Iterable$(core.String), core.String, core.bool]], |
+ _normalizePath: [core.String, [core.String, core.String, core.bool]], |
+ _makeQuery: [core.String, [core.String, core.int, core.int, core.Map$(core.String, dart.dynamic)]], |
_makeFragment: [core.String, [core.String, core.int, core.int]], |
_stringOrNullLength: [core.int, [core.String]], |
- _isHexDigit: [core.bool, [core.int]], |
- _hexValue: [core.int, [core.int]], |
_normalizeEscape: [core.String, [core.String, core.int, core.bool]], |
- _isUnreservedChar: [core.bool, [core.int]], |
- _escapeChar: [core.String, [dart.dynamic]], |
+ _parseHexDigit: [core.int, [core.int]], |
+ _escapeChar: [core.String, [core.int]], |
_normalize: [core.String, [core.String, core.int, core.int, core.List$(core.int)]], |
_isSchemeCharacter: [core.bool, [core.int]], |
_isGeneralDelimiter: [core.bool, [core.int]], |
+ _mayContainDotSegments: [core.bool, [core.String]], |
+ _removeDotSegments: [core.String, [core.String]], |
+ _normalizeRelativePath: [core.String, [core.String]], |
_addIfNonEmpty: [dart.void, [core.StringBuffer, core.String, core.String, core.String]], |
encodeComponent: [core.String, [core.String]], |
encodeQueryComponent: [core.String, [core.String], {encoding: convert.Encoding}], |
@@ -29660,14 +30590,17 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
encodeFull: [core.String, [core.String]], |
decodeFull: [core.String, [core.String]], |
splitQueryString: [core.Map$(core.String, core.String), [core.String], {encoding: convert.Encoding}], |
+ _createList: [core.List, []], |
+ _splitQueryStringAll: [core.Map, [core.String], {encoding: convert.Encoding}], |
parseIPv4Address: [core.List$(core.int), [core.String]], |
parseIPv6Address: [core.List$(core.int), [core.String], [core.int, core.int]], |
- _uriEncode: [core.String, [core.List$(core.int), core.String], {encoding: convert.Encoding, spaceToPlus: core.bool}], |
+ _uriEncode: [core.String, [core.List$(core.int), core.String, convert.Encoding, core.bool]], |
_hexCharPairToByte: [core.int, [core.String, core.int]], |
- _uriDecode: [core.String, [core.String], {plusToSpace: core.bool, encoding: convert.Encoding}], |
- _isAlphabeticCharacter: [core.bool, [core.int]] |
+ _uriDecode: [core.String, [core.String, core.int, core.int, convert.Encoding, core.bool]], |
+ _isAlphabeticCharacter: [core.bool, [core.int]], |
+ _isUnreservedChar: [core.bool, [core.int]] |
}), |
- names: ['_defaultPort', 'parse', '_fail', '_makeHttpUri', '_checkNonWindowsPathReservedCharacters', '_checkWindowsPathReservedCharacters', '_checkWindowsDriveLetter', '_makeFileUri', '_makeWindowsFileUrl', '_makePort', '_makeHost', '_isRegNameChar', '_normalizeRegName', '_makeScheme', '_makeUserInfo', '_makePath', '_makeQuery', '_makeFragment', '_stringOrNullLength', '_isHexDigit', '_hexValue', '_normalizeEscape', '_isUnreservedChar', '_escapeChar', '_normalize', '_isSchemeCharacter', '_isGeneralDelimiter', '_addIfNonEmpty', 'encodeComponent', 'encodeQueryComponent', 'decodeComponent', 'decodeQueryComponent', 'encodeFull', 'decodeFull', 'splitQueryString', 'parseIPv4Address', 'parseIPv6Address', '_uriEncode', '_hexCharPairToByte', '_uriDecode', '_isAlphabeticCharacter'] |
+ names: ['_defaultPort', 'parse', '_fail', '_makeHttpUri', '_checkNonWindowsPathReservedCharacters', '_checkWindowsPathReservedCharacters', '_checkWindowsDriveLetter', '_makeFileUri', '_makeWindowsFileUrl', '_makePort', '_makeHost', '_isRegNameChar', '_normalizeRegName', '_makeScheme', '_makeUserInfo', '_makePath', '_normalizePath', '_makeQuery', '_makeFragment', '_stringOrNullLength', '_normalizeEscape', '_parseHexDigit', '_escapeChar', '_normalize', '_isSchemeCharacter', '_isGeneralDelimiter', '_mayContainDotSegments', '_removeDotSegments', '_normalizeRelativePath', '_addIfNonEmpty', 'encodeComponent', 'encodeQueryComponent', 'decodeComponent', 'decodeQueryComponent', 'encodeFull', 'decodeFull', 'splitQueryString', '_createList', '_splitQueryStringAll', 'parseIPv4Address', 'parseIPv6Address', '_uriEncode', '_hexCharPairToByte', '_uriDecode', '_isAlphabeticCharacter', '_isUnreservedChar'] |
}); |
core.Uri._SPACE = 32; |
core.Uri._DOUBLE_QUOTE = 34; |
@@ -29694,6 +30627,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
core.Uri._LOWER_CASE_F = 102; |
core.Uri._LOWER_CASE_Z = 122; |
core.Uri._BAR = 124; |
+ core.Uri._hexDigits = "0123456789ABCDEF"; |
core.Uri._unreservedTable = dart.const(dart.list([0, 0, 24576, 1023, 65534, 34815, 65534, 18431], core.int)); |
core.Uri._unreserved2396Table = dart.const(dart.list([0, 0, 26498, 1023, 65534, 34815, 65534, 18431], core.int)); |
core.Uri._encodeFullTable = dart.const(dart.list([0, 0, 65498, 45055, 65535, 34815, 65534, 18431], core.int)); |
@@ -29706,6 +30640,354 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
core.Uri._pathCharTable = dart.const(dart.list([0, 0, 32722, 12287, 65535, 34815, 65534, 18431], core.int)); |
core.Uri._pathCharOrSlashTable = dart.const(dart.list([0, 0, 65490, 12287, 65535, 34815, 65534, 18431], core.int)); |
core.Uri._queryCharTable = dart.const(dart.list([0, 0, 65490, 45055, 65535, 34815, 65534, 18431], core.int)); |
+ dart.defineLazy(core.Uri, { |
+ get _needsNoEncoding() { |
+ return core.RegExp.new('^[\\-\\.0-9A-Z_a-z~]*$'); |
+ } |
+ }); |
+ const _text = Symbol('_text'); |
+ const _separatorIndices = Symbol('_separatorIndices'); |
+ const _uriCache = Symbol('_uriCache'); |
+ core.UriData = class UriData extends core.Object { |
+ _(text, separatorIndices, uriCache) { |
+ this[_text] = text; |
+ this[_separatorIndices] = separatorIndices; |
+ this[_uriCache] = uriCache; |
+ } |
+ static fromString(content, opts) { |
+ let mimeType = opts && 'mimeType' in opts ? opts.mimeType : null; |
+ let encoding = opts && 'encoding' in opts ? opts.encoding : null; |
+ let parameters = opts && 'parameters' in opts ? opts.parameters : null; |
+ let base64 = opts && 'base64' in opts ? opts.base64 : false; |
+ let buffer = new core.StringBuffer(); |
+ let indices = dart.list([core.UriData._noScheme], core.int); |
+ let charsetName = null; |
+ let encodingName = null; |
+ if (parameters != null) charsetName = parameters[dartx.get]("charset"); |
+ if (encoding == null) { |
+ if (charsetName != null) { |
+ encoding = convert.Encoding.getByName(charsetName); |
+ } |
+ } else if (charsetName == null) { |
+ encodingName = encoding.name; |
+ } |
+ let t = encoding; |
+ t == null ? encoding = convert.ASCII : t; |
+ core.UriData._writeUri(mimeType, encodingName, parameters, buffer, indices); |
+ indices[dartx.add](buffer.length); |
+ if (dart.notNull(base64)) { |
+ buffer.write(';base64,'); |
+ indices[dartx.add](dart.notNull(buffer.length) - 1); |
+ buffer.write(encoding.fuse(convert.BASE64).encode(content)); |
+ } else { |
+ buffer.write(','); |
+ core.UriData._uriEncodeBytes(core.UriData._uricTable, encoding.encode(content), buffer); |
+ } |
+ return new core.UriData._(buffer.toString(), indices, null); |
+ } |
+ static fromBytes(bytes, opts) { |
+ let mimeType = opts && 'mimeType' in opts ? opts.mimeType : "application/octet-stream"; |
+ let parameters = opts && 'parameters' in opts ? opts.parameters : null; |
+ let percentEncoded = opts && 'percentEncoded' in opts ? opts.percentEncoded : false; |
+ let buffer = new core.StringBuffer(); |
+ let indices = dart.list([core.UriData._noScheme], core.int); |
+ core.UriData._writeUri(dart.as(mimeType, core.String), null, parameters, buffer, indices); |
+ indices[dartx.add](buffer.length); |
+ if (dart.notNull(dart.as(percentEncoded, core.bool))) { |
+ buffer.write(','); |
+ core.UriData._uriEncodeBytes(core.UriData._uricTable, bytes, buffer); |
+ } else { |
+ buffer.write(';base64,'); |
+ indices[dartx.add](dart.notNull(buffer.length) - 1); |
+ convert.BASE64.encoder.startChunkedConversion(convert.StringConversionSink.fromStringSink(buffer)).addSlice(bytes, 0, bytes[dartx.length], true); |
+ } |
+ return new core.UriData._(buffer.toString(), indices, null); |
+ } |
+ static fromUri(uri) { |
+ if (uri.scheme != "data") { |
+ dart.throw(new core.ArgumentError.value(uri, "uri", "Scheme must be 'data'")); |
+ } |
+ if (dart.notNull(uri.hasAuthority)) { |
+ dart.throw(new core.ArgumentError.value(uri, "uri", "Data uri must not have authority")); |
+ } |
+ if (dart.notNull(uri.hasFragment)) { |
+ dart.throw(new core.ArgumentError.value(uri, "uri", "Data uri must not have a fragment part")); |
+ } |
+ if (!dart.notNull(uri.hasQuery)) { |
+ return core.UriData._parse(uri.path, 0, uri); |
+ } |
+ return core.UriData._parse(`${uri}`, 5, uri); |
+ } |
+ static _writeUri(mimeType, charsetName, parameters, buffer, indices) { |
+ if (mimeType == null || mimeType == "text/plain") { |
+ mimeType = ""; |
+ } |
+ if (dart.notNull(mimeType[dartx.isEmpty]) || core.identical(mimeType, "application/octet-stream")) { |
+ buffer.write(mimeType); |
+ } else { |
+ let slashIndex = core.UriData._validateMimeType(mimeType); |
+ if (dart.notNull(slashIndex) < 0) { |
+ dart.throw(new core.ArgumentError.value(mimeType, "mimeType", "Invalid MIME type")); |
+ } |
+ buffer.write(core.Uri._uriEncode(core.UriData._tokenCharTable, mimeType[dartx.substring](0, slashIndex), convert.UTF8, false)); |
+ buffer.write("/"); |
+ buffer.write(core.Uri._uriEncode(core.UriData._tokenCharTable, mimeType[dartx.substring](dart.notNull(slashIndex) + 1), convert.UTF8, false)); |
+ } |
+ if (charsetName != null) { |
+ if (indices != null) { |
+ indices[dartx.add](buffer.length); |
+ indices[dartx.add](dart.notNull(buffer.length) + 8); |
+ } |
+ buffer.write(";charset="); |
+ buffer.write(core.Uri._uriEncode(core.UriData._tokenCharTable, charsetName, convert.UTF8, false)); |
+ } |
+ dart.nullSafe(parameters, _ => _[dartx.forEach](dart.fn((key, value) => { |
+ if (dart.notNull(key[dartx.isEmpty])) { |
+ dart.throw(new core.ArgumentError.value("", "Parameter names must not be empty")); |
+ } |
+ if (dart.notNull(value[dartx.isEmpty])) { |
+ dart.throw(new core.ArgumentError.value("", "Parameter values must not be empty", `parameters["${key}"]`)); |
+ } |
+ if (indices != null) indices[dartx.add](buffer.length); |
+ buffer.write(';'); |
+ buffer.write(core.Uri._uriEncode(core.UriData._tokenCharTable, key, convert.UTF8, false)); |
+ if (indices != null) indices[dartx.add](buffer.length); |
+ buffer.write('='); |
+ buffer.write(core.Uri._uriEncode(core.UriData._tokenCharTable, value, convert.UTF8, false)); |
+ }, dart.void, [core.String, core.String]))); |
+ } |
+ static _validateMimeType(mimeType) { |
+ let slashIndex = -1; |
+ for (let i = 0; i < dart.notNull(mimeType[dartx.length]); i++) { |
+ let char = mimeType[dartx.codeUnitAt](i); |
+ if (char != core.Uri._SLASH) continue; |
+ if (slashIndex < 0) { |
+ slashIndex = i; |
+ continue; |
+ } |
+ return -1; |
+ } |
+ return slashIndex; |
+ } |
+ static parse(uri) { |
+ if (!dart.notNull(uri[dartx.startsWith]("data:"))) { |
+ dart.throw(new core.FormatException("Does not start with 'data:'", uri, 0)); |
+ } |
+ return core.UriData._parse(uri, 5, null); |
+ } |
+ get uri() { |
+ if (this[_uriCache] != null) return this[_uriCache]; |
+ let path = this[_text]; |
+ let query = null; |
+ let colonIndex = this[_separatorIndices][dartx.get](0); |
+ let queryIndex = this[_text][dartx.indexOf]('?', dart.notNull(colonIndex) + 1); |
+ let end = null; |
+ if (dart.notNull(queryIndex) >= 0) { |
+ query = this[_text][dartx.substring](dart.notNull(queryIndex) + 1); |
+ end = queryIndex; |
+ } |
+ path = this[_text][dartx.substring](dart.notNull(colonIndex) + 1, end); |
+ this[_uriCache] = new core.Uri._internal("data", "", null, null, path, query, null); |
+ return this[_uriCache]; |
+ } |
+ get mimeType() { |
+ let start = dart.notNull(this[_separatorIndices][dartx.get](0)) + 1; |
+ let end = this[_separatorIndices][dartx.get](1); |
+ if (start == end) return "text/plain"; |
+ return core.Uri._uriDecode(this[_text], start, end, convert.UTF8, false); |
+ } |
+ get charset() { |
+ let parameterStart = 1; |
+ let parameterEnd = dart.notNull(this[_separatorIndices][dartx.length]) - 1; |
+ if (dart.notNull(this.isBase64)) { |
+ parameterEnd = parameterEnd - 1; |
+ } |
+ for (let i = parameterStart; i < parameterEnd; i = i + 2) { |
+ let keyStart = dart.notNull(this[_separatorIndices][dartx.get](i)) + 1; |
+ let keyEnd = this[_separatorIndices][dartx.get](i + 1); |
+ if (keyEnd == keyStart + 7 && dart.notNull(this[_text][dartx.startsWith]("charset", keyStart))) { |
+ return core.Uri._uriDecode(this[_text], dart.notNull(keyEnd) + 1, this[_separatorIndices][dartx.get](i + 2), convert.UTF8, false); |
+ } |
+ } |
+ return "US-ASCII"; |
+ } |
+ get isBase64() { |
+ return this[_separatorIndices][dartx.length][dartx.isOdd]; |
+ } |
+ get contentText() { |
+ return this[_text][dartx.substring](dart.notNull(this[_separatorIndices][dartx.last]) + 1); |
+ } |
+ contentAsBytes() { |
+ let text = this[_text]; |
+ let start = dart.notNull(this[_separatorIndices][dartx.last]) + 1; |
+ if (dart.notNull(this.isBase64)) { |
+ return convert.BASE64.decoder.convert(text, start); |
+ } |
+ let percent = 37; |
+ let length = dart.notNull(text[dartx.length]) - start; |
+ for (let i = start; i < dart.notNull(text[dartx.length]); i++) { |
+ let codeUnit = text[dartx.codeUnitAt](i); |
+ if (codeUnit == percent) { |
+ i = i + 2; |
+ length = length - 2; |
+ } |
+ } |
+ let result = typed_data.Uint8List.new(length); |
+ if (length == text[dartx.length]) { |
+ result[dartx.setRange](0, length, text[dartx.codeUnits], start); |
+ return result; |
+ } |
+ let index = 0; |
+ for (let i = start; i < dart.notNull(text[dartx.length]); i++) { |
+ let codeUnit = text[dartx.codeUnitAt](i); |
+ if (codeUnit != percent) { |
+ result[dartx.set](index++, codeUnit); |
+ } else { |
+ if (i + 2 < dart.notNull(text[dartx.length])) { |
+ let digit1 = core.Uri._parseHexDigit(text[dartx.codeUnitAt](i + 1)); |
+ let digit2 = core.Uri._parseHexDigit(text[dartx.codeUnitAt](i + 2)); |
+ if (dart.notNull(digit1) >= 0 && dart.notNull(digit2) >= 0) { |
+ let byte = dart.notNull(digit1) * 16 + dart.notNull(digit2); |
+ result[dartx.set](index++, byte); |
+ i = i + 2; |
+ continue; |
+ } |
+ } |
+ dart.throw(new core.FormatException("Invalid percent escape", text, i)); |
+ } |
+ } |
+ dart.assert(index == result[dartx.length]); |
+ return result; |
+ } |
+ contentAsString(opts) { |
+ let encoding = opts && 'encoding' in opts ? opts.encoding : null; |
+ if (encoding == null) { |
+ let charset = this.charset; |
+ encoding = convert.Encoding.getByName(charset); |
+ if (encoding == null) { |
+ dart.throw(new core.UnsupportedError(`Unknown charset: ${charset}`)); |
+ } |
+ } |
+ let text = this[_text]; |
+ let start = dart.notNull(this[_separatorIndices][dartx.last]) + 1; |
+ if (dart.notNull(this.isBase64)) { |
+ let converter = convert.BASE64.decoder.fuse(encoding.decoder); |
+ return dart.as(converter.convert(text[dartx.substring](start)), core.String); |
+ } |
+ return core.Uri._uriDecode(text, start, text[dartx.length], encoding, false); |
+ } |
+ get parameters() { |
+ let result = dart.map({}, core.String, core.String); |
+ for (let i = 3; i < dart.notNull(this[_separatorIndices][dartx.length]); i = i + 2) { |
+ let start = dart.notNull(this[_separatorIndices][dartx.get](i - 2)) + 1; |
+ let equals = this[_separatorIndices][dartx.get](i - 1); |
+ let end = this[_separatorIndices][dartx.get](i); |
+ let key = core.Uri._uriDecode(this[_text], start, equals, convert.UTF8, false); |
+ let value = core.Uri._uriDecode(this[_text], dart.notNull(equals) + 1, end, convert.UTF8, false); |
+ result[dartx.set](key, value); |
+ } |
+ return result; |
+ } |
+ static _parse(text, start, sourceUri) { |
+ dart.assert(start == 0 || start == 5); |
+ dart.assert(start == 5 == text[dartx.startsWith]("data:")); |
+ let comma = 44; |
+ let slash = 47; |
+ let semicolon = 59; |
+ let equals = 61; |
+ let indices = dart.list([dart.notNull(start) - 1], core.int); |
+ let slashIndex = -1; |
+ let char = null; |
+ let i = start; |
+ for (; dart.notNull(i) < dart.notNull(text[dartx.length]); i = dart.notNull(i) + 1) { |
+ char = text[dartx.codeUnitAt](i); |
+ if (dart.equals(char, comma) || dart.equals(char, semicolon)) break; |
+ if (dart.equals(char, slash)) { |
+ if (dart.notNull(slashIndex) < 0) { |
+ slashIndex = i; |
+ continue; |
+ } |
+ dart.throw(new core.FormatException("Invalid MIME type", text, i)); |
+ } |
+ } |
+ if (dart.notNull(slashIndex) < 0 && dart.notNull(i) > dart.notNull(start)) { |
+ dart.throw(new core.FormatException("Invalid MIME type", text, i)); |
+ } |
+ while (!dart.equals(char, comma)) { |
+ indices[dartx.add](i); |
+ i = dart.notNull(i) + 1; |
+ let equalsIndex = -1; |
+ for (; dart.notNull(i) < dart.notNull(text[dartx.length]); i = dart.notNull(i) + 1) { |
+ char = text[dartx.codeUnitAt](i); |
+ if (dart.equals(char, equals)) { |
+ if (dart.notNull(equalsIndex) < 0) equalsIndex = i; |
+ } else if (dart.equals(char, semicolon) || dart.equals(char, comma)) { |
+ break; |
+ } |
+ } |
+ if (dart.notNull(equalsIndex) >= 0) { |
+ indices[dartx.add](equalsIndex); |
+ } else { |
+ let lastSeparator = indices[dartx.last]; |
+ if (!dart.equals(char, comma) || i != dart.notNull(lastSeparator) + 7 || !dart.notNull(text[dartx.startsWith]("base64", dart.notNull(lastSeparator) + 1))) { |
+ dart.throw(new core.FormatException("Expecting '='", text, i)); |
+ } |
+ break; |
+ } |
+ } |
+ indices[dartx.add](i); |
+ return new core.UriData._(text, indices, sourceUri); |
+ } |
+ static _uriEncodeBytes(canonicalTable, bytes, buffer) { |
+ let byteOr = 0; |
+ for (let i = 0; i < dart.notNull(bytes[dartx.length]); i++) { |
+ let byte = bytes[dartx.get](i); |
+ byteOr = (dart.notNull(byteOr) | dart.notNull(byte)) >>> 0; |
+ if (dart.notNull(byte) < 128 && (dart.notNull(canonicalTable[dartx.get](byte[dartx['>>']](4))) & 1 << (dart.notNull(byte) & 15)) != 0) { |
+ buffer.writeCharCode(byte); |
+ } else { |
+ buffer.writeCharCode(core.Uri._PERCENT); |
+ buffer.writeCharCode(core.Uri._hexDigits[dartx.codeUnitAt](byte[dartx['>>']](4))); |
+ buffer.writeCharCode(core.Uri._hexDigits[dartx.codeUnitAt](dart.notNull(byte) & 15)); |
+ } |
+ } |
+ if ((dart.notNull(byteOr) & ~255) >>> 0 != 0) { |
+ for (let i = 0; i < dart.notNull(bytes[dartx.length]); i++) { |
+ let byte = bytes[dartx.get](i); |
+ if (dart.notNull(byte) < 0 || dart.notNull(byte) > 255) { |
+ dart.throw(new core.ArgumentError.value(byte, "non-byte value")); |
+ } |
+ } |
+ } |
+ } |
+ toString() { |
+ return this[_separatorIndices][dartx.get](0) == core.UriData._noScheme ? `data:${this[_text]}` : this[_text]; |
+ } |
+ }; |
+ dart.defineNamedConstructor(core.UriData, '_'); |
+ dart.setSignature(core.UriData, { |
+ constructors: () => ({ |
+ _: [core.UriData, [core.String, core.List$(core.int), core.Uri]], |
+ fromString: [core.UriData, [core.String], {mimeType: core.String, encoding: convert.Encoding, parameters: core.Map$(core.String, core.String), base64: core.bool}], |
+ fromBytes: [core.UriData, [core.List$(core.int)], {mimeType: dart.dynamic, parameters: core.Map$(core.String, core.String), percentEncoded: dart.dynamic}], |
+ fromUri: [core.UriData, [core.Uri]] |
+ }), |
+ methods: () => ({ |
+ contentAsBytes: [core.List$(core.int), []], |
+ contentAsString: [core.String, [], {encoding: convert.Encoding}] |
+ }), |
+ statics: () => ({ |
+ _writeUri: [dart.void, [core.String, core.String, core.Map$(core.String, core.String), core.StringBuffer, core.List]], |
+ _validateMimeType: [core.int, [core.String]], |
+ parse: [core.UriData, [core.String]], |
+ _parse: [core.UriData, [core.String, core.int, core.Uri]], |
+ _uriEncodeBytes: [dart.void, [core.List$(core.int), core.List$(core.int), core.StringSink]] |
+ }), |
+ names: ['_writeUri', '_validateMimeType', 'parse', '_parse', '_uriEncodeBytes'] |
+ }); |
+ core.UriData._noScheme = -1; |
+ core.UriData._tokenCharTable = dart.const(dart.list([0, 0, 27858, 1023, 65534, 51199, 65535, 32767], core.int)); |
+ core.UriData._uricTable = core.Uri._queryCharTable; |
isolate.IsolateSpawnException = class IsolateSpawnException extends core.Object { |
IsolateSpawnException(message) { |
this.message = message; |
@@ -32025,7 +33307,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
}); |
indexed_db.KeyRange[dart.metadata] = () => [dart.const(new _metadata.DomName('IDBKeyRange')), dart.const(new _metadata.Unstable()), dart.const(new _js_helper.Native("IDBKeyRange"))]; |
dart.registerExtension(dart.global.IDBKeyRange, indexed_db.KeyRange); |
- const _add$1 = Symbol('_add'); |
+ const _add$2 = Symbol('_add'); |
const _clear$0 = Symbol('_clear'); |
const _put = Symbol('_put'); |
const _createIndex = Symbol('_createIndex'); |
@@ -32061,9 +33343,9 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
try { |
let request = null; |
if (key != null) { |
- request = this[_add$1](value, key); |
+ request = this[_add$2](value, key); |
} else { |
- request = this[_add$1](value); |
+ request = this[_add$2](value); |
} |
return indexed_db._completeRequest(dart.dynamic)(dart.as(request, indexed_db.Request)); |
} catch (e) { |
@@ -32179,7 +33461,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
get [dartx.transaction]() { |
return this.transaction; |
} |
- [_add$1](value, key) { |
+ [_add$2](value, key) { |
if (key === void 0) key = null; |
if (key != null) { |
let value_1 = html_common.convertDartToNative_SerializedScriptValue(value); |
@@ -32285,7 +33567,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
[dartx.getObject]: [async.Future, [dart.dynamic]], |
[dartx.openCursor]: [async.Stream$(indexed_db.CursorWithValue), [], {key: dart.dynamic, range: indexed_db.KeyRange, direction: core.String, autoAdvance: core.bool}], |
[dartx.createIndex]: [indexed_db.Index, [core.String, dart.dynamic], {unique: core.bool, multiEntry: core.bool}], |
- [_add$1]: [indexed_db.Request, [dart.dynamic], [dart.dynamic]], |
+ [_add$2]: [indexed_db.Request, [dart.dynamic], [dart.dynamic]], |
[_add_1]: [indexed_db.Request, [dart.dynamic, dart.dynamic]], |
[_add_2]: [indexed_db.Request, [dart.dynamic]], |
[_clear$0]: [indexed_db.Request, []], |