typia
Version:
Superfast runtime validators with only one line
31 lines (30 loc) • 1.5 kB
JavaScript
//#region src/internal/_jsonStringifyProperty.ts
/**
* 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 === void 0 ? "" : head + text + tail;
//#endregion
export { _jsonStringifyProperty };
//# sourceMappingURL=_jsonStringifyProperty.mjs.map