index.js 681 B

1234567891011121314151617181920212223242526
  1. export default function stripFinalNewline(input) {
  2. if (typeof input === 'string') {
  3. return stripFinalNewlineString(input);
  4. }
  5. if (!(ArrayBuffer.isView(input) && input.BYTES_PER_ELEMENT === 1)) {
  6. throw new Error('Input must be a string or a Uint8Array');
  7. }
  8. return stripFinalNewlineBinary(input);
  9. }
  10. const stripFinalNewlineString = input =>
  11. input.at(-1) === LF
  12. ? input.slice(0, input.at(-2) === CR ? -2 : -1)
  13. : input;
  14. const stripFinalNewlineBinary = input =>
  15. input.at(-1) === LF_BINARY
  16. ? input.subarray(0, input.at(-2) === CR_BINARY ? -2 : -1)
  17. : input;
  18. const LF = '\n';
  19. const LF_BINARY = LF.codePointAt(0);
  20. const CR = '\r';
  21. const CR_BINARY = CR.codePointAt(0);