mirror of
https://github.com/hansjone/netxops.git
synced 2026-10-09 06:33:17 +08:00
40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
/**
|
|
* Lossless JSON helpers for DSH tool results.
|
|
*/
|
|
|
|
import assert from 'node:assert/strict'
|
|
import test from 'node:test'
|
|
|
|
import { omitUndefined, toLosslessJson } from '../src/netx/json-safe.ts'
|
|
|
|
test('omitUndefined drops undefined keys but keeps null/false/0', () => {
|
|
assert.deepEqual(
|
|
omitUndefined({ a: 1, b: undefined, c: null, d: false, e: 0 }),
|
|
{ a: 1, c: null, d: false, e: 0 },
|
|
)
|
|
})
|
|
|
|
test('toLosslessJson strips undefined holes (listBizMonitors-style payload)', () => {
|
|
const raw = {
|
|
ok: true,
|
|
data: {
|
|
kind: 'projects',
|
|
projects: [{ id: 'p1', name: 'demo' }],
|
|
tasks: undefined,
|
|
next: 'go',
|
|
},
|
|
}
|
|
const safe = toLosslessJson(raw)
|
|
assert.equal(safe.ok, true)
|
|
const data = safe.data
|
|
assert.ok(data && typeof data === 'object' && !Array.isArray(data))
|
|
assert.equal(Object.hasOwn(data, 'tasks'), false)
|
|
assert.deepEqual(data.projects, [{ id: 'p1', name: 'demo' }])
|
|
})
|
|
|
|
test('toLosslessJson keeps failure envelopes serializable', () => {
|
|
const safe = toLosslessJson({ ok: false, error: 'x', detail: undefined })
|
|
assert.equal(safe.ok, false)
|
|
assert.equal(safe.error, 'x')
|
|
assert.equal(Object.hasOwn(safe, 'detail'), false)
|
|
})
|