UNPKG

typia

Version:

Superfast runtime validators with only one line

1 lines 2.79 kB
{"version":3,"file":"_notationSnake.mjs","names":[],"sources":["../../src/internal/_notationSnake.ts"],"sourcesContent":["const _notationSnakeWord = (str: string): string => {\n const indexes: number[] = [];\n for (let i: number = 0; i < str.length; i++) {\n const code: number = str.charCodeAt(i);\n if (65 <= code && code <= 90) indexes.push(i);\n }\n for (let i: number = indexes.length - 1; i > 0; --i) {\n const now: number = indexes[i]!;\n const prev: number = indexes[i - 1]!;\n if (now - prev === 1) indexes.splice(i, 1);\n }\n if (indexes.length !== 0 && indexes[0] === 0) indexes.splice(0, 1);\n if (indexes.length === 0) return str.toLowerCase();\n\n let ret: string = \"\";\n for (let i: number = 0; i < indexes.length; i++) {\n const first: number = i === 0 ? 0 : indexes[i - 1]!;\n const last: number = indexes[i]!;\n\n ret += str.substring(first, last).toLowerCase();\n ret += \"_\";\n }\n ret += str.substring(indexes[indexes.length - 1]!).toLowerCase();\n return ret;\n};\n\nexport const _notationSnake = (str: string): string => {\n if (str.length === 0) return str;\n\n // PREFIX\n let prefix: string = \"\";\n for (let i: number = 0; i < str.length; i++) {\n if (str[i] === \"_\") prefix += \"_\";\n else break;\n }\n if (prefix.length !== 0) str = str.substring(prefix.length);\n\n // SNAKE CASE\n //\n // Run the case-boundary walk within each underscore-delimited segment, not\n // over the whole segment at once. Lowercasing a segment atomically would drop\n // the camelCase boundary inside it (`[\"fooBar\", \"baz\"]` -> `[\"foobar\", \"baz\"]`\n // -> `foobar_baz`), diverging from `SnakeCase<T>`; the per-segment walk keeps\n // it (`[\"foo_bar\", \"baz\"]` -> `foo_bar_baz`).\n return `${prefix}${str.split(\"_\").map(_notationSnakeWord).join(\"_\")}`;\n};\n"],"mappings":";AAAA,MAAM,sBAAsB,QAAwB;CAClD,MAAM,UAAoB,CAAC;CAC3B,KAAK,IAAI,IAAY,GAAG,IAAI,IAAI,QAAQ,KAAK;EAC3C,MAAM,OAAe,IAAI,WAAW,CAAC;EACrC,IAAI,MAAM,QAAQ,QAAQ,IAAI,QAAQ,KAAK,CAAC;CAC9C;CACA,KAAK,IAAI,IAAY,QAAQ,SAAS,GAAG,IAAI,GAAG,EAAE,GAGhD,IAFoB,QAAQ,KACP,QAAQ,IAAI,OACd,GAAG,QAAQ,OAAO,GAAG,CAAC;CAE3C,IAAI,QAAQ,WAAW,KAAK,QAAQ,OAAO,GAAG,QAAQ,OAAO,GAAG,CAAC;CACjE,IAAI,QAAQ,WAAW,GAAG,OAAO,IAAI,YAAY;CAEjD,IAAI,MAAc;CAClB,KAAK,IAAI,IAAY,GAAG,IAAI,QAAQ,QAAQ,KAAK;EAC/C,MAAM,QAAgB,MAAM,IAAI,IAAI,QAAQ,IAAI;EAChD,MAAM,OAAe,QAAQ;EAE7B,OAAO,IAAI,UAAU,OAAO,IAAI,CAAC,CAAC,YAAY;EAC9C,OAAO;CACT;CACA,OAAO,IAAI,UAAU,QAAQ,QAAQ,SAAS,EAAG,CAAC,CAAC,YAAY;CAC/D,OAAO;AACT;AAEA,MAAa,kBAAkB,QAAwB;CACrD,IAAI,IAAI,WAAW,GAAG,OAAO;CAG7B,IAAI,SAAiB;CACrB,KAAK,IAAI,IAAY,GAAG,IAAI,IAAI,QAAQ,KACtC,IAAI,IAAI,OAAO,KAAK,UAAU;MACzB;CAEP,IAAI,OAAO,WAAW,GAAG,MAAM,IAAI,UAAU,OAAO,MAAM;CAS1D,OAAO,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,KAAK,GAAG;AACpE"}