forked from denoland/std
-
Notifications
You must be signed in to change notification settings - Fork 0
/
eol.ts
83 lines (75 loc) · 2.25 KB
/
eol.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
// This module is browser compatible.
// End-of-line character for POSIX platforms such as macOS and Linux.
export const LF = "\n" as const;
/** End-of-line character for Windows platforms. */
export const CRLF = "\r\n" as const;
/**
* End-of-line character evaluated for the current platform.
*
* @example
* ```ts
* import { EOL } from "https://deno.land/std@$STD_VERSION/fs/eol.ts";
*
* EOL; // Returns "\n" on POSIX platforms or "\r\n" on Windows
* ```
*
* @todo(iuioiua): Uncomment the following line upon deprecation of the `EOL`
* enum.
*/
// export const EOL = Deno.build.os === "windows" ? CRLF : LF;
/**
* Platform-specific conventions for the line ending format (i.e., the "end-of-line").
*
* @deprecated (will be removed in 0.209.0) This will be replaced by an
* OS-dependent `EOL` constant.
*/
export enum EOL {
/** Line Feed. Typically used in Unix (and Unix-like) systems. */
LF = "\n",
/** Carriage Return + Line Feed. Historically used in Windows and early DOS systems. */
CRLF = "\r\n",
}
const regDetect = /(?:\r?\n)/g;
/**
* Detect the EOL character for string input.
* returns null if no newline.
*
* @example
* ```ts
* import { detect, EOL } from "https://deno.land/std@$STD_VERSION/fs/mod.ts";
*
* const CRLFinput = "deno\r\nis not\r\nnode";
* const Mixedinput = "deno\nis not\r\nnode";
* const LFinput = "deno\nis not\nnode";
* const NoNLinput = "deno is not node";
*
* detect(LFinput); // output EOL.LF
* detect(CRLFinput); // output EOL.CRLF
* detect(Mixedinput); // output EOL.CRLF
* detect(NoNLinput); // output null
* ```
*/
export function detect(content: string): EOL | null {
const d = content.match(regDetect);
if (!d || d.length === 0) {
return null;
}
const hasCRLF = d.some((x: string): boolean => x === EOL.CRLF);
return hasCRLF ? EOL.CRLF : EOL.LF;
}
/**
* Format the file to the targeted EOL.
*
* @example
* ```ts
* import { EOL, format } from "https://deno.land/std@$STD_VERSION/fs/mod.ts";
*
* const CRLFinput = "deno\r\nis not\r\nnode";
*
* format(CRLFinput, EOL.LF); // output "deno\nis not\nnode"
* ```
*/
export function format(content: string, eol: EOL): string {
return content.replace(regDetect, eol);
}