mirror of
				https://github.com/reduxjs/redux-devtools.git
				synced 2025-11-04 18:07:27 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var helpers = require('../helpers');
 | 
						|
var mark = helpers.mark;
 | 
						|
var extract = helpers.extract;
 | 
						|
var refer = helpers.refer;
 | 
						|
var options = require('../constants/options');
 | 
						|
 | 
						|
module.exports = function serialize(
 | 
						|
  Immutable,
 | 
						|
  refs,
 | 
						|
  customReplacer,
 | 
						|
  customReviver
 | 
						|
) {
 | 
						|
  function replacer(key, value) {
 | 
						|
    if (value instanceof Immutable.Record)
 | 
						|
      return refer(value, 'ImmutableRecord', 'toObject', refs);
 | 
						|
    if (value instanceof Immutable.Range)
 | 
						|
      return extract(value, 'ImmutableRange');
 | 
						|
    if (value instanceof Immutable.Repeat)
 | 
						|
      return extract(value, 'ImmutableRepeat');
 | 
						|
    if (Immutable.OrderedMap.isOrderedMap(value))
 | 
						|
      return mark(value, 'ImmutableOrderedMap', 'toObject');
 | 
						|
    if (Immutable.Map.isMap(value))
 | 
						|
      return mark(value, 'ImmutableMap', 'toObject');
 | 
						|
    if (Immutable.List.isList(value))
 | 
						|
      return mark(value, 'ImmutableList', 'toArray');
 | 
						|
    if (Immutable.OrderedSet.isOrderedSet(value))
 | 
						|
      return mark(value, 'ImmutableOrderedSet', 'toArray');
 | 
						|
    if (Immutable.Set.isSet(value))
 | 
						|
      return mark(value, 'ImmutableSet', 'toArray');
 | 
						|
    if (Immutable.Seq.isSeq(value))
 | 
						|
      return mark(value, 'ImmutableSeq', 'toArray');
 | 
						|
    if (Immutable.Stack.isStack(value))
 | 
						|
      return mark(value, 'ImmutableStack', 'toArray');
 | 
						|
    return value;
 | 
						|
  }
 | 
						|
 | 
						|
  function reviver(key, value) {
 | 
						|
    if (
 | 
						|
      typeof value === 'object' &&
 | 
						|
      value !== null &&
 | 
						|
      '__serializedType__' in value
 | 
						|
    ) {
 | 
						|
      var data = value.data;
 | 
						|
      switch (value.__serializedType__) {
 | 
						|
        case 'ImmutableMap':
 | 
						|
          return Immutable.Map(data);
 | 
						|
        case 'ImmutableOrderedMap':
 | 
						|
          return Immutable.OrderedMap(data);
 | 
						|
        case 'ImmutableList':
 | 
						|
          return Immutable.List(data);
 | 
						|
        case 'ImmutableRange':
 | 
						|
          return Immutable.Range(data._start, data._end, data._step);
 | 
						|
        case 'ImmutableRepeat':
 | 
						|
          return Immutable.Repeat(data._value, data.size);
 | 
						|
        case 'ImmutableSet':
 | 
						|
          return Immutable.Set(data);
 | 
						|
        case 'ImmutableOrderedSet':
 | 
						|
          return Immutable.OrderedSet(data);
 | 
						|
        case 'ImmutableSeq':
 | 
						|
          return Immutable.Seq(data);
 | 
						|
        case 'ImmutableStack':
 | 
						|
          return Immutable.Stack(data);
 | 
						|
        case 'ImmutableRecord':
 | 
						|
          return refs && refs[value.__serializedRef__]
 | 
						|
            ? new refs[value.__serializedRef__](data)
 | 
						|
            : Immutable.Map(data);
 | 
						|
        default:
 | 
						|
          return data;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    return value;
 | 
						|
  }
 | 
						|
 | 
						|
  return {
 | 
						|
    replacer: customReplacer
 | 
						|
      ? function (key, value) {
 | 
						|
          return customReplacer(key, value, replacer);
 | 
						|
        }
 | 
						|
      : replacer,
 | 
						|
    reviver: customReviver
 | 
						|
      ? function (key, value) {
 | 
						|
          return customReviver(key, value, reviver);
 | 
						|
        }
 | 
						|
      : reviver,
 | 
						|
    options: options,
 | 
						|
  };
 | 
						|
};
 |