Skip to content

Commit

Permalink
no tail
Browse files Browse the repository at this point in the history
  • Loading branch information
WebReflection committed Sep 29, 2020
1 parent 628162f commit f05ca1e
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 23 deletions.
22 changes: 15 additions & 7 deletions cjs/index.js
Expand Up @@ -7,6 +7,7 @@ const {keys} = Object;
const Primitive = String; // it could be Number
const primitive = 'string'; // it could be 'number'

const ignore = {};
const object = 'object';

const noop = (_, value) => value;
Expand All @@ -20,19 +21,26 @@ const Primitives = (_, value) => (
);

const revive = (input, parsed, output, $) => {
const lazy = [];
for (let ke = keys(output), {length} = ke, y = 0; y < length; y++) {
const key = ke[y];
const value = output[key];
const k = ke[y];
const value = output[k];
if (value instanceof Primitive) {
const tmp = input[value];
if (typeof tmp === object && !parsed.has(tmp)) {
parsed.add(tmp);
output[key] = $.call(output, key, revive(input, parsed, tmp, $));
} else {
output[key] = $.call(output, key, tmp);
output[k] = ignore;
lazy.push({k, a: [input, parsed, tmp, $]});
}
} else
output[key] = $.call(output, key, value);
else
output[k] = $.call(output, k, tmp);
}
else if (output[k] !== ignore)
output[k] = $.call(output, k, value);
}
for (let {length} = lazy, i = 0; i < length; i++) {
const {k, a} = lazy[i];
output[k] = $.call(output, k, revive.apply(null, a));
}
return output;
};
Expand Down
2 changes: 1 addition & 1 deletion es.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 15 additions & 7 deletions esm/index.js
Expand Up @@ -6,6 +6,7 @@ const {keys} = Object;
const Primitive = String; // it could be Number
const primitive = 'string'; // it could be 'number'

const ignore = {};
const object = 'object';

const noop = (_, value) => value;
Expand All @@ -19,19 +20,26 @@ const Primitives = (_, value) => (
);

const revive = (input, parsed, output, $) => {
const lazy = [];
for (let ke = keys(output), {length} = ke, y = 0; y < length; y++) {
const key = ke[y];
const value = output[key];
const k = ke[y];
const value = output[k];
if (value instanceof Primitive) {
const tmp = input[value];
if (typeof tmp === object && !parsed.has(tmp)) {
parsed.add(tmp);
output[key] = $.call(output, key, revive(input, parsed, tmp, $));
} else {
output[key] = $.call(output, key, tmp);
output[k] = ignore;
lazy.push({k, a: [input, parsed, tmp, $]});
}
} else
output[key] = $.call(output, key, value);
else
output[k] = $.call(output, k, tmp);
}
else if (output[k] !== ignore)
output[k] = $.call(output, k, value);
}
for (let {length} = lazy, i = 0; i < length; i++) {
const {k, a} = lazy[i];
output[k] = $.call(output, k, revive.apply(null, a));
}
return output;
};
Expand Down
26 changes: 19 additions & 7 deletions index.js
Expand Up @@ -11,6 +11,7 @@ self.Flatted = (function (exports) {

var primitive = 'string'; // it could be 'number'

var ignore = {};
var object = 'object';

var noop = function noop(_, value) {
Expand All @@ -26,20 +27,31 @@ self.Flatted = (function (exports) {
};

var revive = function revive(input, parsed, output, $) {
var lazy = [];

for (var ke = keys(output), length = ke.length, y = 0; y < length; y++) {
var key = ke[y];
var value = output[key];
var k = ke[y];
var value = output[k];

if (value instanceof Primitive) {
var tmp = input[value];

if (typeof(tmp) === object && !parsed.has(tmp)) {
parsed.add(tmp);
output[key] = $.call(output, key, revive(input, parsed, tmp, $));
} else {
output[key] = $.call(output, key, tmp);
}
} else output[key] = $.call(output, key, value);
output[k] = ignore;
lazy.push({
k: k,
a: [input, parsed, tmp, $]
});
} else output[k] = $.call(output, k, tmp);
} else if (output[k] !== ignore) output[k] = $.call(output, k, value);
}

for (var _length = lazy.length, i = 0; i < _length; i++) {
var _lazy$i = lazy[i],
_k = _lazy$i.k,
a = _lazy$i.a;
output[_k] = $.call(output, _k, revive.apply(null, a));
}

return output;
Expand Down
2 changes: 1 addition & 1 deletion min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit f05ca1e

Please sign in to comment.