123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885 |
- /**
- * @license React
- * react-server-dom-webpack.development.js
- *
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- 'use strict';
- if (process.env.NODE_ENV !== "production") {
- (function() {
- 'use strict';
- var React = require('react');
- function createStringDecoder() {
- return new TextDecoder();
- }
- var decoderOptions = {
- stream: true
- };
- function readPartialStringChunk(decoder, buffer) {
- return decoder.decode(buffer, decoderOptions);
- }
- function readFinalStringChunk(decoder, buffer) {
- return decoder.decode(buffer);
- }
- function parseModel(response, json) {
- return JSON.parse(json, response._fromJSON);
- }
- // eslint-disable-next-line no-unused-vars
- function resolveModuleReference(bundlerConfig, moduleData) {
- if (bundlerConfig) {
- var resolvedModuleData = bundlerConfig[moduleData.id][moduleData.name];
- if (moduleData.async) {
- return {
- id: resolvedModuleData.id,
- chunks: resolvedModuleData.chunks,
- name: resolvedModuleData.name,
- async: true
- };
- } else {
- return resolvedModuleData;
- }
- }
- return moduleData;
- } // The chunk cache contains all the chunks we've preloaded so far.
- // If they're still pending they're a thenable. This map also exists
- // in Webpack but unfortunately it's not exposed so we have to
- // replicate it in user space. null means that it has already loaded.
- var chunkCache = new Map();
- var asyncModuleCache = new Map();
- function ignoreReject() {// We rely on rejected promises to be handled by another listener.
- } // Start preloading the modules since we might need them soon.
- // This function doesn't suspend.
- function preloadModule(moduleData) {
- var chunks = moduleData.chunks;
- var promises = [];
- for (var i = 0; i < chunks.length; i++) {
- var chunkId = chunks[i];
- var entry = chunkCache.get(chunkId);
- if (entry === undefined) {
- var thenable = globalThis.__next_chunk_load__(chunkId);
- promises.push(thenable);
- var resolve = chunkCache.set.bind(chunkCache, chunkId, null);
- thenable.then(resolve, ignoreReject);
- chunkCache.set(chunkId, thenable);
- } else if (entry !== null) {
- promises.push(entry);
- }
- }
- if (moduleData.async) {
- var existingPromise = asyncModuleCache.get(moduleData.id);
- if (existingPromise) {
- if (existingPromise.status === 'fulfilled') {
- return null;
- }
- return existingPromise;
- } else {
- var modulePromise = Promise.all(promises).then(function () {
- return globalThis.__next_require__(moduleData.id);
- });
- modulePromise.then(function (value) {
- var fulfilledThenable = modulePromise;
- fulfilledThenable.status = 'fulfilled';
- fulfilledThenable.value = value;
- }, function (reason) {
- var rejectedThenable = modulePromise;
- rejectedThenable.status = 'rejected';
- rejectedThenable.reason = reason;
- });
- asyncModuleCache.set(moduleData.id, modulePromise);
- return modulePromise;
- }
- } else if (promises.length > 0) {
- return Promise.all(promises);
- } else {
- return null;
- }
- } // Actually require the module or suspend if it's not yet ready.
- // Increase priority if necessary.
- function requireModule(moduleData) {
- var moduleExports;
- if (moduleData.async) {
- // We assume that preloadModule has been called before, which
- // should have added something to the module cache.
- var promise = asyncModuleCache.get(moduleData.id);
- if (promise.status === 'fulfilled') {
- moduleExports = promise.value;
- } else {
- throw promise.reason;
- }
- } else {
- moduleExports = globalThis.__next_require__(moduleData.id);
- }
- if (moduleData.name === '*') {
- // This is a placeholder value that represents that the caller imported this
- // as a CommonJS module as is.
- return moduleExports;
- }
- if (moduleData.name === '') {
- // This is a placeholder value that represents that the caller accessed the
- // default property of this if it was an ESM interop module.
- return moduleExports.__esModule ? moduleExports.default : moduleExports;
- }
- return moduleExports[moduleData.name];
- }
- // ATTENTION
- // When adding new symbols to this file,
- // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
- // The Symbol used to tag the ReactElement-like types.
- var REACT_ELEMENT_TYPE = Symbol.for('react.element');
- var REACT_LAZY_TYPE = Symbol.for('react.lazy');
- var REACT_SERVER_CONTEXT_DEFAULT_VALUE_NOT_LOADED = Symbol.for('react.default_value');
- var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
- var ContextRegistry = ReactSharedInternals.ContextRegistry;
- function getOrCreateServerContext(globalName) {
- if (!ContextRegistry[globalName]) {
- ContextRegistry[globalName] = React.createServerContext(globalName, // $FlowFixMe function signature doesn't reflect the symbol value
- REACT_SERVER_CONTEXT_DEFAULT_VALUE_NOT_LOADED);
- }
- return ContextRegistry[globalName];
- }
- var PENDING = 'pending';
- var BLOCKED = 'blocked';
- var RESOLVED_MODEL = 'resolved_model';
- var RESOLVED_MODULE = 'resolved_module';
- var INITIALIZED = 'fulfilled';
- var ERRORED = 'rejected';
- function Chunk(status, value, reason, response) {
- this.status = status;
- this.value = value;
- this.reason = reason;
- this._response = response;
- } // We subclass Promise.prototype so that we get other methods like .catch
- Chunk.prototype = Object.create(Promise.prototype); // TODO: This doesn't return a new Promise chain unlike the real .then
- Chunk.prototype.then = function (resolve, reject) {
- var chunk = this; // If we have resolved content, we try to initialize it first which
- // might put us back into one of the other states.
- switch (chunk.status) {
- case RESOLVED_MODEL:
- initializeModelChunk(chunk);
- break;
- case RESOLVED_MODULE:
- initializeModuleChunk(chunk);
- break;
- } // The status might have changed after initialization.
- switch (chunk.status) {
- case INITIALIZED:
- resolve(chunk.value);
- break;
- case PENDING:
- case BLOCKED:
- if (resolve) {
- if (chunk.value === null) {
- chunk.value = [];
- }
- chunk.value.push(resolve);
- }
- if (reject) {
- if (chunk.reason === null) {
- chunk.reason = [];
- }
- chunk.reason.push(reject);
- }
- break;
- default:
- reject(chunk.reason);
- break;
- }
- };
- function readChunk(chunk) {
- // If we have resolved content, we try to initialize it first which
- // might put us back into one of the other states.
- switch (chunk.status) {
- case RESOLVED_MODEL:
- initializeModelChunk(chunk);
- break;
- case RESOLVED_MODULE:
- initializeModuleChunk(chunk);
- break;
- } // The status might have changed after initialization.
- switch (chunk.status) {
- case INITIALIZED:
- return chunk.value;
- case PENDING:
- case BLOCKED:
- // eslint-disable-next-line no-throw-literal
- throw chunk;
- default:
- throw chunk.reason;
- }
- }
- function getRoot(response) {
- var chunk = getChunk(response, 0);
- return chunk;
- }
- function createPendingChunk(response) {
- // $FlowFixMe Flow doesn't support functions as constructors
- return new Chunk(PENDING, null, null, response);
- }
- function createBlockedChunk(response) {
- // $FlowFixMe Flow doesn't support functions as constructors
- return new Chunk(BLOCKED, null, null, response);
- }
- function createErrorChunk(response, error) {
- // $FlowFixMe Flow doesn't support functions as constructors
- return new Chunk(ERRORED, null, error, response);
- }
- function createInitializedChunk(response, value) {
- // $FlowFixMe Flow doesn't support functions as constructors
- return new Chunk(INITIALIZED, value, null, response);
- }
- function wakeChunk(listeners, value) {
- for (var i = 0; i < listeners.length; i++) {
- var listener = listeners[i];
- listener(value);
- }
- }
- function wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners) {
- switch (chunk.status) {
- case INITIALIZED:
- wakeChunk(resolveListeners, chunk.value);
- break;
- case PENDING:
- case BLOCKED:
- chunk.value = resolveListeners;
- chunk.reason = rejectListeners;
- break;
- case ERRORED:
- if (rejectListeners) {
- wakeChunk(rejectListeners, chunk.reason);
- }
- break;
- }
- }
- function triggerErrorOnChunk(chunk, error) {
- if (chunk.status !== PENDING && chunk.status !== BLOCKED) {
- // We already resolved. We didn't expect to see this.
- return;
- }
- var listeners = chunk.reason;
- var erroredChunk = chunk;
- erroredChunk.status = ERRORED;
- erroredChunk.reason = error;
- if (listeners !== null) {
- wakeChunk(listeners, error);
- }
- }
- function createResolvedModelChunk(response, value) {
- // $FlowFixMe Flow doesn't support functions as constructors
- return new Chunk(RESOLVED_MODEL, value, null, response);
- }
- function createResolvedModuleChunk(response, value) {
- // $FlowFixMe Flow doesn't support functions as constructors
- return new Chunk(RESOLVED_MODULE, value, null, response);
- }
- function resolveModelChunk(chunk, value) {
- if (chunk.status !== PENDING) {
- // We already resolved. We didn't expect to see this.
- return;
- }
- var resolveListeners = chunk.value;
- var rejectListeners = chunk.reason;
- var resolvedChunk = chunk;
- resolvedChunk.status = RESOLVED_MODEL;
- resolvedChunk.value = value;
- if (resolveListeners !== null) {
- // This is unfortunate that we're reading this eagerly if
- // we already have listeners attached since they might no
- // longer be rendered or might not be the highest pri.
- initializeModelChunk(resolvedChunk); // The status might have changed after initialization.
- wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners);
- }
- }
- function resolveModuleChunk(chunk, value) {
- if (chunk.status !== PENDING && chunk.status !== BLOCKED) {
- // We already resolved. We didn't expect to see this.
- return;
- }
- var resolveListeners = chunk.value;
- var rejectListeners = chunk.reason;
- var resolvedChunk = chunk;
- resolvedChunk.status = RESOLVED_MODULE;
- resolvedChunk.value = value;
- if (resolveListeners !== null) {
- initializeModuleChunk(resolvedChunk);
- wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners);
- }
- }
- var initializingChunk = null;
- var initializingChunkBlockedModel = null;
- function initializeModelChunk(chunk) {
- var prevChunk = initializingChunk;
- var prevBlocked = initializingChunkBlockedModel;
- initializingChunk = chunk;
- initializingChunkBlockedModel = null;
- try {
- var _value = parseModel(chunk._response, chunk.value);
- if (initializingChunkBlockedModel !== null && initializingChunkBlockedModel.deps > 0) {
- initializingChunkBlockedModel.value = _value; // We discovered new dependencies on modules that are not yet resolved.
- // We have to go the BLOCKED state until they're resolved.
- var blockedChunk = chunk;
- blockedChunk.status = BLOCKED;
- blockedChunk.value = null;
- blockedChunk.reason = null;
- } else {
- var initializedChunk = chunk;
- initializedChunk.status = INITIALIZED;
- initializedChunk.value = _value;
- }
- } catch (error) {
- var erroredChunk = chunk;
- erroredChunk.status = ERRORED;
- erroredChunk.reason = error;
- } finally {
- initializingChunk = prevChunk;
- initializingChunkBlockedModel = prevBlocked;
- }
- }
- function initializeModuleChunk(chunk) {
- try {
- var _value2 = requireModule(chunk.value);
- var initializedChunk = chunk;
- initializedChunk.status = INITIALIZED;
- initializedChunk.value = _value2;
- } catch (error) {
- var erroredChunk = chunk;
- erroredChunk.status = ERRORED;
- erroredChunk.reason = error;
- }
- } // Report that any missing chunks in the model is now going to throw this
- // error upon read. Also notify any pending promises.
- function reportGlobalError(response, error) {
- response._chunks.forEach(function (chunk) {
- // If this chunk was already resolved or errored, it won't
- // trigger an error but if it wasn't then we need to
- // because we won't be getting any new data to resolve it.
- if (chunk.status === PENDING) {
- triggerErrorOnChunk(chunk, error);
- }
- });
- }
- function createElement(type, key, props) {
- var element = {
- // This tag allows us to uniquely identify this as a React Element
- $$typeof: REACT_ELEMENT_TYPE,
- // Built-in properties that belong on the element
- type: type,
- key: key,
- ref: null,
- props: props,
- // Record the component responsible for creating this element.
- _owner: null
- };
- {
- // We don't really need to add any of these but keeping them for good measure.
- // Unfortunately, _store is enumerable in jest matchers so for equality to
- // work, I need to keep it or make _store non-enumerable in the other file.
- element._store = {};
- Object.defineProperty(element._store, 'validated', {
- configurable: false,
- enumerable: false,
- writable: true,
- value: true // This element has already been validated on the server.
- });
- Object.defineProperty(element, '_self', {
- configurable: false,
- enumerable: false,
- writable: false,
- value: null
- });
- Object.defineProperty(element, '_source', {
- configurable: false,
- enumerable: false,
- writable: false,
- value: null
- });
- }
- return element;
- }
- function createLazyChunkWrapper(chunk) {
- var lazyType = {
- $$typeof: REACT_LAZY_TYPE,
- _payload: chunk,
- _init: readChunk
- };
- return lazyType;
- }
- function getChunk(response, id) {
- var chunks = response._chunks;
- var chunk = chunks.get(id);
- if (!chunk) {
- chunk = createPendingChunk(response);
- chunks.set(id, chunk);
- }
- return chunk;
- }
- function createModelResolver(chunk, parentObject, key) {
- var blocked;
- if (initializingChunkBlockedModel) {
- blocked = initializingChunkBlockedModel;
- blocked.deps++;
- } else {
- blocked = initializingChunkBlockedModel = {
- deps: 1,
- value: null
- };
- }
- return function (value) {
- parentObject[key] = value;
- blocked.deps--;
- if (blocked.deps === 0) {
- if (chunk.status !== BLOCKED) {
- return;
- }
- var resolveListeners = chunk.value;
- var initializedChunk = chunk;
- initializedChunk.status = INITIALIZED;
- initializedChunk.value = blocked.value;
- if (resolveListeners !== null) {
- wakeChunk(resolveListeners, blocked.value);
- }
- }
- };
- }
- function createModelReject(chunk) {
- return function (error) {
- return triggerErrorOnChunk(chunk, error);
- };
- }
- function parseModelString(response, parentObject, key, value) {
- switch (value[0]) {
- case '$':
- {
- if (value === '$') {
- return REACT_ELEMENT_TYPE;
- } else if (value[1] === '$' || value[1] === '@') {
- // This was an escaped string value.
- return value.substring(1);
- } else {
- var id = parseInt(value.substring(1), 16);
- var chunk = getChunk(response, id);
- switch (chunk.status) {
- case RESOLVED_MODEL:
- initializeModelChunk(chunk);
- break;
- case RESOLVED_MODULE:
- initializeModuleChunk(chunk);
- break;
- } // The status might have changed after initialization.
- switch (chunk.status) {
- case INITIALIZED:
- return chunk.value;
- case PENDING:
- case BLOCKED:
- var parentChunk = initializingChunk;
- chunk.then(createModelResolver(parentChunk, parentObject, key), createModelReject(parentChunk));
- return null;
- default:
- throw chunk.reason;
- }
- }
- }
- case '@':
- {
- var _id = parseInt(value.substring(1), 16);
- var _chunk = getChunk(response, _id); // We create a React.lazy wrapper around any lazy values.
- // When passed into React, we'll know how to suspend on this.
- return createLazyChunkWrapper(_chunk);
- }
- }
- return value;
- }
- function parseModelTuple(response, value) {
- var tuple = value;
- if (tuple[0] === REACT_ELEMENT_TYPE) {
- // TODO: Consider having React just directly accept these arrays as elements.
- // Or even change the ReactElement type to be an array.
- return createElement(tuple[1], tuple[2], tuple[3]);
- }
- return value;
- }
- function createResponse(bundlerConfig) {
- var chunks = new Map();
- var response = {
- _bundlerConfig: bundlerConfig,
- _chunks: chunks
- };
- return response;
- }
- function resolveModel(response, id, model) {
- var chunks = response._chunks;
- var chunk = chunks.get(id);
- if (!chunk) {
- chunks.set(id, createResolvedModelChunk(response, model));
- } else {
- resolveModelChunk(chunk, model);
- }
- }
- function resolveProvider(response, id, contextName) {
- var chunks = response._chunks;
- chunks.set(id, createInitializedChunk(response, getOrCreateServerContext(contextName).Provider));
- }
- function resolveModule(response, id, model) {
- var chunks = response._chunks;
- var chunk = chunks.get(id);
- var moduleMetaData = parseModel(response, model);
- var moduleReference = resolveModuleReference(response._bundlerConfig, moduleMetaData); // TODO: Add an option to encode modules that are lazy loaded.
- // For now we preload all modules as early as possible since it's likely
- // that we'll need them.
- var promise = preloadModule(moduleReference);
- if (promise) {
- var blockedChunk;
- if (!chunk) {
- // Technically, we should just treat promise as the chunk in this
- // case. Because it'll just behave as any other promise.
- blockedChunk = createBlockedChunk(response);
- chunks.set(id, blockedChunk);
- } else {
- // This can't actually happen because we don't have any forward
- // references to modules.
- blockedChunk = chunk;
- blockedChunk.status = BLOCKED;
- }
- promise.then(function () {
- return resolveModuleChunk(blockedChunk, moduleReference);
- }, function (error) {
- return triggerErrorOnChunk(blockedChunk, error);
- });
- } else {
- if (!chunk) {
- chunks.set(id, createResolvedModuleChunk(response, moduleReference));
- } else {
- // This can't actually happen because we don't have any forward
- // references to modules.
- resolveModuleChunk(chunk, moduleReference);
- }
- }
- }
- function resolveSymbol(response, id, name) {
- var chunks = response._chunks; // We assume that we'll always emit the symbol before anything references it
- // to save a few bytes.
- chunks.set(id, createInitializedChunk(response, Symbol.for(name)));
- }
- function resolveError(response, id, message, stack) {
- // eslint-disable-next-line react-internal/prod-error-codes
- var error = new Error(message);
- error.stack = stack;
- var chunks = response._chunks;
- var chunk = chunks.get(id);
- if (!chunk) {
- chunks.set(id, createErrorChunk(response, error));
- } else {
- triggerErrorOnChunk(chunk, error);
- }
- }
- function close(response) {
- // In case there are any remaining unresolved chunks, they won't
- // be resolved now. So we need to issue an error to those.
- // Ideally we should be able to early bail out if we kept a
- // ref count of pending chunks.
- reportGlobalError(response, new Error('Connection closed.'));
- }
- function processFullRow(response, row) {
- if (row === '') {
- return;
- }
- var tag = row[0]; // When tags that are not text are added, check them here before
- // parsing the row as text.
- // switch (tag) {
- // }
- var colon = row.indexOf(':', 1);
- var id = parseInt(row.substring(1, colon), 16);
- var text = row.substring(colon + 1);
- switch (tag) {
- case 'J':
- {
- resolveModel(response, id, text);
- return;
- }
- case 'M':
- {
- resolveModule(response, id, text);
- return;
- }
- case 'P':
- {
- resolveProvider(response, id, text);
- return;
- }
- case 'S':
- {
- resolveSymbol(response, id, JSON.parse(text));
- return;
- }
- case 'E':
- {
- var errorInfo = JSON.parse(text);
- resolveError(response, id, errorInfo.message, errorInfo.stack);
- return;
- }
- default:
- {
- throw new Error("Error parsing the data. It's probably an error code or network corruption.");
- }
- }
- }
- function processStringChunk(response, chunk, offset) {
- var linebreak = chunk.indexOf('\n', offset);
- while (linebreak > -1) {
- var fullrow = response._partialRow + chunk.substring(offset, linebreak);
- processFullRow(response, fullrow);
- response._partialRow = '';
- offset = linebreak + 1;
- linebreak = chunk.indexOf('\n', offset);
- }
- response._partialRow += chunk.substring(offset);
- }
- function processBinaryChunk(response, chunk) {
- var stringDecoder = response._stringDecoder;
- var linebreak = chunk.indexOf(10); // newline
- while (linebreak > -1) {
- var fullrow = response._partialRow + readFinalStringChunk(stringDecoder, chunk.subarray(0, linebreak));
- processFullRow(response, fullrow);
- response._partialRow = '';
- chunk = chunk.subarray(linebreak + 1);
- linebreak = chunk.indexOf(10); // newline
- }
- response._partialRow += readPartialStringChunk(stringDecoder, chunk);
- }
- function createFromJSONCallback(response) {
- return function (key, value) {
- if (typeof value === 'string') {
- // We can't use .bind here because we need the "this" value.
- return parseModelString(response, this, key, value);
- }
- if (typeof value === 'object' && value !== null) {
- return parseModelTuple(response, value);
- }
- return value;
- };
- }
- function createResponse$1(bundlerConfig) {
- // NOTE: CHECK THE COMPILER OUTPUT EACH TIME YOU CHANGE THIS.
- // It should be inlined to one object literal but minor changes can break it.
- var stringDecoder = createStringDecoder() ;
- var response = createResponse(bundlerConfig);
- response._partialRow = '';
- {
- response._stringDecoder = stringDecoder;
- } // Don't inline this call because it causes closure to outline the call above.
- response._fromJSON = createFromJSONCallback(response);
- return response;
- }
- function startReadingFromStream(response, stream) {
- var reader = stream.getReader();
- function progress(_ref) {
- var done = _ref.done,
- value = _ref.value;
- if (done) {
- close(response);
- return;
- }
- var buffer = value;
- processBinaryChunk(response, buffer);
- return reader.read().then(progress).catch(error);
- }
- function error(e) {
- reportGlobalError(response, e);
- }
- reader.read().then(progress).catch(error);
- }
- function createFromReadableStream(stream, options) {
- var response = createResponse$1(options && options.moduleMap ? options.moduleMap : null);
- startReadingFromStream(response, stream);
- return getRoot(response);
- }
- function createFromFetch(promiseForResponse, options) {
- var response = createResponse$1(options && options.moduleMap ? options.moduleMap : null);
- promiseForResponse.then(function (r) {
- startReadingFromStream(response, r.body);
- }, function (e) {
- reportGlobalError(response, e);
- });
- return getRoot(response);
- }
- function createFromXHR(request, options) {
- var response = createResponse$1(options && options.moduleMap ? options.moduleMap : null);
- var processedLength = 0;
- function progress(e) {
- var chunk = request.responseText;
- processStringChunk(response, chunk, processedLength);
- processedLength = chunk.length;
- }
- function load(e) {
- progress();
- close(response);
- }
- function error(e) {
- reportGlobalError(response, new TypeError('Network error'));
- }
- request.addEventListener('progress', progress);
- request.addEventListener('load', load);
- request.addEventListener('error', error);
- request.addEventListener('abort', error);
- request.addEventListener('timeout', error);
- return getRoot(response);
- }
- exports.createFromFetch = createFromFetch;
- exports.createFromReadableStream = createFromReadableStream;
- exports.createFromXHR = createFromXHR;
- })();
- }
|