{"version":3,"file":"index.esm.mjs","sources":["../src/index.ts"],"sourcesContent":["import { ITSAndTypeAndStringLiteral, ITSTypeAndStringLiteral } from 'ts-type/lib/helper/string';\n\nexport const enum EnumLineBreak\n{\n\tCR = \"\\r\",\n\tCRLF = \"\\r\\n\",\n\tLF = \"\\n\",\n}\n\nexport const enum EnumLineBreakCharCode\n{\n\tCR = 0x0d,\n\tLF = 0x0a,\n}\n\nconst CR = EnumLineBreak.CR as const;\nconst CRLF = EnumLineBreak.CRLF as const;\nconst LF = EnumLineBreak.LF as const;\n\nconst R_CRLF = /\\r\\n|\\r(?!\\n)|\\n/g;\nconst R_CRLF_MATCH = new RegExp(`(${R_CRLF.source})`, R_CRLF.flags);\n\nexport { CR, CRLF, LF, R_CRLF, R_CRLF_MATCH }\n\nexport type ILineBreak = ITSTypeAndStringLiteral<EnumLineBreak>;\n\nexport type ILineBreakInput = ITSAndTypeAndStringLiteral<EnumLineBreak>;\n\nexport interface IOptions\n{\n\tdisable?: {\n\t\tlf?: boolean,\n\t\tcrlf?: boolean,\n\t\tcr?: boolean,\n\t}\n}\n\nexport function crlf(text: string, newline: ILineBreakInput = EnumLineBreak.LF): string\n{\n\treturn text.replace(R_CRLF, newline);\n}\n\nexport function chkcrlf(text: string, options?: IOptions)\n{\n\tconst disable = options?.disable ?? {};\n\n\treturn {\n\t\tlf: !disable.lf && /\\n/.test(text.replace(/\\r\\n/g, '')),\n\t\tcrlf: !disable.crlf && /\\r\\n/.test(text),\n\t\tcr: !disable.cr && /\\r(?!\\n)/.test(text),\n\t} as const;\n}\n\nexport type IChkCrlf = ReturnType<typeof chkcrlf>;\n\nexport function detectLineBreak(text: string, options?: IOptions)\n{\n\tconst _lb = chkcrlf(text, options);\n\treturn _detectLineBreakCore(_lb)\n}\n\nexport function _detectLineBreakCore(_lb: IChkCrlf)\n{\n\treturn _lb.crlf ? EnumLineBreak.CRLF : (_lb.lf || !_lb.cr) ? EnumLineBreak.LF : EnumLineBreak.CR\n}\n\nexport function isCRLF(newline: string): newline is EnumLineBreak.CRLF\n{\n\treturn newline === EnumLineBreak.CRLF\n}\n\nexport function isLF(newline: string): newline is EnumLineBreak.LF\n{\n\treturn newline === EnumLineBreak.LF\n}\n\nexport function isCR(newline: string): newline is EnumLineBreak.CR\n{\n\treturn newline === EnumLineBreak.CR\n}\n\nexport function charCodeIsLF(charCode: number): charCode is EnumLineBreakCharCode.LF\n{\n\treturn charCode === EnumLineBreakCharCode.LF\n}\n\nexport function charCodeIsCR(charCode: number): charCode is EnumLineBreakCharCode.CR\n{\n\treturn charCode === EnumLineBreakCharCode.CR\n}\n\nexport function lineSplit(text: string)\n{\n\treturn text.split(R_CRLF);\n}\n\nexport function crlf_unicode_normalize(text: string, newline: ILineBreakInput = EnumLineBreak.LF): string\n{\n\tconst ln3 = newline + newline + newline;\n\tconst ln2 = newline + newline;\n\n\treturn text\n\t\t.replace(/\\u000C/g, ln3)\n\t\t.replace(/\\u2028/g, newline)\n\t\t.replace(/\\u2029/g, ln2)\n\t\t;\n}\n\nexport function isEqualWithIgnoreLineSeparators(a: string, b: string)\n{\n\tconst _lb_a: IChkCrlf = chkcrlf(a);\n\tconst _lb_b: IChkCrlf = chkcrlf(b);\n\n\tlet bool = false;\n\n\tif (_lb_a.cr === _lb_b.cr && _lb_a.crlf === _lb_b.crlf && _lb_a.lf === _lb_b.lf)\n\t{\n\t\tbool = crlf(a) === crlf(b);\n\t}\n\n\treturn {\n\t\tbool,\n\t\t_lb_a,\n\t\t_lb_b,\n\t}\n}\n\nexport type ILineBreakName = keyof typeof EnumLineBreak;\n\nexport function toLineBreakName(newline: ILineBreakInput): ILineBreakName\n{\n\tswitch (newline)\n\t{\n\t\tcase EnumLineBreak.LF:\n\t\t\treturn 'LF'\n\t\tcase EnumLineBreak.CR:\n\t\t\treturn 'CR'\n\t\tcase EnumLineBreak.CRLF:\n\t\t\treturn 'CRLF'\n\t}\n\n\tthrow new TypeError(`Invalid line break`);\n}\n\nexport function nameToLineBreak(name: ILineBreakName | Lowercase<ILineBreakName> | Capitalize<Lowercase<ILineBreakName>> | string): EnumLineBreak\n{\n\tswitch (name?.toUpperCase())\n\t{\n\t\tcase 'LF':\n\t\t\treturn EnumLineBreak.LF\n\t\tcase 'CR':\n\t\t\treturn EnumLineBreak.CR\n\t\tcase 'CRLF':\n\t\t\treturn EnumLineBreak.CRLF\n\t}\n\n\tthrow new TypeError(`Invalid line break name: ${name}`);\n}\n\nexport function detectCurrentIndexLineBreakFromBufferLike<T extends number, A extends {\n\t[n: number]: number\n}>(buffer: A, index: T)\n{\n\tconst cur = buffer[index];\n\tconst next = index + 1;\n\tif (charCodeIsLF(cur))\n\t{\n\t\treturn {\n\t\t\tnewline: EnumLineBreak.LF as const,\n\t\t\tcur: cur as EnumLineBreakCharCode.LF,\n\t\t\tindex,\n\t\t\tnext,\n\t\t\tlength: 1 as const,\n\t\t} as const\n\t}\n\telse if (charCodeIsCR(cur))\n\t{\n\t\tif (charCodeIsLF(buffer[next]))\n\t\t{\n\t\t\treturn {\n\t\t\t\tnewline: EnumLineBreak.CRLF as const,\n\t\t\t\tcur: cur as EnumLineBreakCharCode.CR,\n\t\t\t\tindex,\n\t\t\t\tnext: next + 1,\n\t\t\t\tlength: 2 as const,\n\t\t\t} as const\n\t\t}\n\n\t\treturn {\n\t\t\tnewline: EnumLineBreak.CR as const,\n\t\t\tcur: cur as EnumLineBreakCharCode.CR,\n\t\t\tindex,\n\t\t\tnext,\n\t\t\tlength: 1 as const,\n\t\t} as const\n\t}\n\n\treturn {\n\t\tnewline: void 0 as undefined,\n\t\tcur,\n\t\tindex,\n\t\tnext,\n\t\tlength: 0 as const,\n\t} as const\n}\n\nexport function detectCurrentIndexLineBreak<T extends number, A extends {\n\t[n: number]: string\n}>(buffer: A, index: T)\n{\n\tconst cur = buffer[index];\n\tconst next = index + 1;\n\tif (isLF(cur))\n\t{\n\t\treturn {\n\t\t\tnewline: EnumLineBreak.LF as const,\n\t\t\tcur: cur as EnumLineBreak.LF,\n\t\t\tindex,\n\t\t\tnext,\n\t\t\tlength: 1 as const,\n\t\t} as const\n\t}\n\telse if (isCR(cur))\n\t{\n\t\tif (isLF(buffer[next]))\n\t\t{\n\t\t\treturn {\n\t\t\t\tnewline: EnumLineBreak.CRLF as const,\n\t\t\t\tcur: cur as EnumLineBreak.CR,\n\t\t\t\tindex,\n\t\t\t\tnext: next + 1,\n\t\t\t\tlength: 2 as const,\n\t\t\t} as const\n\t\t}\n\n\t\treturn {\n\t\t\tnewline: EnumLineBreak.CR as const,\n\t\t\tcur: cur as EnumLineBreak.CR,\n\t\t\tindex,\n\t\t\tnext,\n\t\t\tlength: 1 as const,\n\t\t} as const\n\t}\n\n\treturn {\n\t\tnewline: void 0 as void,\n\t\tcur,\n\t\tindex,\n\t\tnext,\n\t\tlength: 0 as const,\n\t} as const\n}\n\nexport default crlf;\n"],"names":["EnumLineBreak","EnumLineBreakCharCode","CR","CRLF","LF","R_CRLF","R_CRLF_MATCH","RegExp","source","flags","crlf","text","newline","replace","chkcrlf","options","_options$disable","disable","lf","test","cr","detectLineBreak","_detectLineBreakCore","_lb","isCRLF","isLF","isCR","charCodeIsLF","charCode","charCodeIsCR","lineSplit","split","crlf_unicode_normalize","ln2","isEqualWithIgnoreLineSeparators","a","b","_lb_a","_lb_b","bool","toLineBreakName","TypeError","nameToLineBreak","name","toUpperCase","detectCurrentIndexLineBreakFromBufferLike","buffer","index","cur","next","length","detectCurrentIndexLineBreak"],"mappings":"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"}