Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add option preserveReferences #3

Merged
merged 7 commits into from
Apr 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,9 @@ Convert a value to an [ESTree](https://github.com/estree/estree) node.

- `instanceAsObject` (boolean, default: `false`) — If true, treat objects that have a prototype as
plain objects.
- `preserveReferences` (boolean, default: `false`) — If true, preserve references to the same object
found within the input. This also allows to serialize recursive structures. If needed, the
resulting expression will be an iife.

## Compatibility

Expand Down
20 changes: 20 additions & 0 deletions fixtures/array-multi-reference/input.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Used as input
// { preserveReferences: true }
export default (() => {
const $0 = new Date(3)
return [1, 'Hello', null, new Date(1), new Date(2), $0, $0]
})()

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = [
1,
'Hello',
null,
new Date(1),
new Date(2),
new Date(3),
new Date(3)
]
13 changes: 13 additions & 0 deletions fixtures/array-recursive-nested-deep/input.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// Used as input
// { preserveReferences: true }
export default (() => {
const $1 = ['variable 1', , ,],
$0 = ['variable 0', ['variable 2', $1]]
return ($1[1] = $0)
})()

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
// Recursive references are not supported witout preserveReferences
13 changes: 13 additions & 0 deletions fixtures/array-recursive-nested/input.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// Used as input
// { preserveReferences: true }
export default (() => {
const $1 = ['variable 1', ,],
$0 = ['variable 0', $1]
return ($1[1] = $0)
})()

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
// Recursive references are not supported witout preserveReferences
12 changes: 12 additions & 0 deletions fixtures/array-recursive/input.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// Used as input
// { preserveReferences: true }
export default (() => {
const $0 = ['recursive', , ,]
return ($0[1] = $0)
})()

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
// Recursive references are not supported witout preserveReferences
10 changes: 9 additions & 1 deletion fixtures/array/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
export default [1, '2', , undefined]
// Used as input
// { preserveReferences: true }
export default [1, '2', , {}, ,]

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = [1, '2', , {}, ,]
8 changes: 8 additions & 0 deletions fixtures/big-int/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default 1337n

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = 1337n
8 changes: 8 additions & 0 deletions fixtures/big-int64array/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default new BigInt64Array([1n, 2n, 3n])

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = new BigInt64Array([1n, 2n, 3n])
8 changes: 8 additions & 0 deletions fixtures/big-uint64array/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default new BigUint64Array([1n, 2n, 3n])

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = new BigUint64Array([1n, 2n, 3n])
8 changes: 8 additions & 0 deletions fixtures/buffer/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default Buffer.from([1, 2, 3])

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = Buffer.from([1, 2, 3])
8 changes: 8 additions & 0 deletions fixtures/date/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default new Date(1234567890123)

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = new Date(1234567890123)
8 changes: 8 additions & 0 deletions fixtures/false-object/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default new Boolean(false)

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = new Boolean(false)
8 changes: 8 additions & 0 deletions fixtures/false/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default false

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = false
8 changes: 8 additions & 0 deletions fixtures/float32array/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default new Float32Array([1, 2, 3])

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = new Float32Array([1, 2, 3])
8 changes: 8 additions & 0 deletions fixtures/float64array/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default new Float64Array([1, 2, 3])

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = new Float64Array([1, 2, 3])
8 changes: 8 additions & 0 deletions fixtures/infinity/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default Infinity

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = Infinity
8 changes: 8 additions & 0 deletions fixtures/int16array/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default new Int16Array([1, 2, 3])

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = new Int16Array([1, 2, 3])
8 changes: 8 additions & 0 deletions fixtures/int32array/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default new Int32Array([1, 2, 3])

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = new Int32Array([1, 2, 3])
8 changes: 8 additions & 0 deletions fixtures/int8array/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default new Int8Array([1, 2, 3])

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = new Int8Array([1, 2, 3])
25 changes: 25 additions & 0 deletions fixtures/map-multi-reference/input.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Used as input
// { preserveReferences: true }
export default (() => {
const $0 = {},
$1 = {}
return new Map([
['key', {}],
[{}, 'value'],
[$0, 42],
[42, $0],
[$1, $1]
])
})()

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = new Map([
['key', {}],
[{}, 'value'],
[{}, 42],
[42, {}],
[{}, {}]
])
18 changes: 18 additions & 0 deletions fixtures/map-recursive-deep/input.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Used as input
// { preserveReferences: true }
export default (() => {
const $1 = new Map(),
$2 = new Map(),
$0 = new Map([
['recursive', 'value'],
['key', $1],
[$2, 'value']
])
return $1.set('key', $0), $2.set($0, 'value'), $0
})()

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
// Recursive references are not supported witout preserveReferences
12 changes: 12 additions & 0 deletions fixtures/map-recursive/input.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// Used as input
// { preserveReferences: true }
export default (() => {
const $0 = new Map([['recursive', 'value']])
return $0.set('key', $0).set($0, 'value')
})()

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
// Recursive references are not supported witout preserveReferences
11 changes: 11 additions & 0 deletions fixtures/map/input.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
// Used as input
// { preserveReferences: true }
export default new Map([
[{}, 42],
[42, {}]
])

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = new Map([
[{}, 42],
[42, {}]
])
8 changes: 8 additions & 0 deletions fixtures/nan/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default NaN

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = NaN
8 changes: 8 additions & 0 deletions fixtures/negative-bigint/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default -7n

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = -7n
8 changes: 8 additions & 0 deletions fixtures/negative-infinity/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default -Infinity

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = -Infinity
8 changes: 8 additions & 0 deletions fixtures/negative-number-object/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default new Number(-456)

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = new Number(-456)
8 changes: 8 additions & 0 deletions fixtures/negative-number/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default -37

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = -37
8 changes: 8 additions & 0 deletions fixtures/negative-zero/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default -0

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = -0
8 changes: 8 additions & 0 deletions fixtures/null/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default null

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = null
8 changes: 8 additions & 0 deletions fixtures/number-object/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default new Number(123)

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = new Number(123)
8 changes: 8 additions & 0 deletions fixtures/number/input.js
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
// Used as input
// { preserveReferences: true }
export default 42

// -------------------------------------------------------------------------------------------------

// Default output
// { preserveReferences: false }
const withoutPreserveReferences = 42
Loading
Loading