@technobuddha/library
Version:
A large library of useful functions
94 lines • 5.81 kB
JavaScript
import { u4 } from "./escape.js";
import { empty } from "./unicode.js";
// cspell:ignore unnnn
/**
* Escape a string for use in GraphQL
*
* | Character | Hex | Escape Sequence |
* | ------------------ | -------------------- | -------------------- |
* | Backspace | 0x08 | \\b |
* | Tab | 0x09 | \\t |
* | Newline | 0x0a | \\n |
* | Form Feed | 0x0c | \\f |
* | Carriage Return | 0x0d | \\r |
* | Double Quote | 0x22 | \\" |
* | Single Quote | 0x27 | \\' |
* | Backslash | 0x5c | \\\\ |
* | Control Characters | 0x00-0x1f, 0x7f-0x9f | \\unnnn |
* @param input - The string to escape
* @returns the escaped string
* @example
* ```typescript
* escapeGraphQL('Hello\nWorld'); // "Hello\\nWorld"
* escapeGraphQL('"\\'); // "\\\"\\\\"
* escapeGraphQL('\b'); // "\\b"
* escapeGraphQL('\u20ac'); // "\\u20ac"
* ```
* @group Programming
* @category Escaping
*/
export function escapeGraphQL(input) {
const output = [];
for (let i = 0; i < input.length; ++i) {
const u = input.codePointAt(i);
if (u < 0x00000020) {
switch (u) {
case 0x00000008: {
output.push('\\b');
break;
}
case 0x00000009: {
output.push('\\t');
break;
}
case 0x0000000a: {
output.push('\\n');
break;
}
case 0x0000000c: {
output.push('\\f');
break;
}
case 0x0000000d: {
output.push('\\r');
break;
}
default: {
output.push(u4(u));
}
}
}
else if (u < 0x0000007f) {
switch (u) {
case 0x00000022: {
output.push('\\"');
break;
}
case 0x0000002f: {
output.push('\\/');
break;
}
case 0x0000005c: {
output.push('\\\\');
break;
}
default: {
// eslint-disable-next-line unicorn/prefer-code-point
output.push(String.fromCharCode(u));
}
}
}
else if (u < 0x000000a1) {
output.push(u4(u));
}
else if (u < 0x00010000) {
output.push(String.fromCodePoint(u));
}
else {
i++;
output.push(String.fromCodePoint(u));
}
}
return output.join(empty);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlLWdyYXBoLXFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2VzY2FwZS1ncmFwaC1xbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFckMsc0JBQXNCO0FBQ3RCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFhO0lBQ3pDLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFFLENBQUM7UUFFaEMsSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUM7WUFDbkIsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDVixLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25CLE1BQU07Z0JBQ1IsQ0FBQztnQkFDRCxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25CLE1BQU07Z0JBQ1IsQ0FBQztnQkFDRCxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25CLE1BQU07Z0JBQ1IsQ0FBQztnQkFDRCxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25CLE1BQU07Z0JBQ1IsQ0FBQztnQkFDRCxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25CLE1BQU07Z0JBQ1IsQ0FBQztnQkFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNSLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ1YsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNuQixNQUFNO2dCQUNSLENBQUM7Z0JBQ0QsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNuQixNQUFNO2dCQUNSLENBQUM7Z0JBQ0QsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNwQixNQUFNO2dCQUNSLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDUixxREFBcUQ7b0JBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7YUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNOLENBQUMsRUFBRSxDQUFDO1lBQ0osTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsQ0FBQyJ9