typia
Version:
Superfast runtime validators with only one line
31 lines • 1.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports._jsonStringifyProperty = void 0;
/**
* Writes one object member the way ECMAScript `JSON.stringify` writes it.
*
* `SerializeJSONObject` serializes each member first and drops the member
* entirely when that result is `undefined`. Deciding omission from the _input_
* instead cannot reach the same answer: a symbol and a `toJSON` returning
* nothing are both present, non-`undefined`, non-function values whose
* serialization is `undefined`, so the member's text became the literal
* `"k":undefined` — output that is not JSON at all.
*
* The serialized text is passed in already evaluated, so the member's value is
* serialized exactly once. Testing the input and then serializing would
* evaluate a `toJSON` twice, and a `toJSON` is free to answer differently each
* call.
*
* The trailing separator belongs to the member because a dropped member must
* take its comma with it; `_jsonStringifyTail` removes the one that is left
* behind when the last written member is the one that dropped.
*
* @param head Quoted key and colon, emitted by the transform.
* @param text Serialized member value, or `undefined` when it has none.
* @param tail Separator following this member, empty for the last one.
* @returns Member text, or an empty string when the member is omitted.
* @internal
*/
const _jsonStringifyProperty = (head, text, tail) => (text === undefined ? "" : head + text + tail);
exports._jsonStringifyProperty = _jsonStringifyProperty;
//# sourceMappingURL=_jsonStringifyProperty.js.map