@kubb/core 2.1.6 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/{chunk-DU6UHGVD.cjs → chunk-2UXXYHS6.cjs} +5 -5
  2. package/dist/{chunk-NWXLHLH3.js → chunk-37XMXECQ.js} +3 -3
  3. package/dist/chunk-5SUBV3F7.cjs +15 -0
  4. package/dist/{chunk-BOAROBF4.cjs → chunk-AIG4R6NN.cjs} +27 -19
  5. package/dist/chunk-AIG4R6NN.cjs.map +1 -0
  6. package/dist/{chunk-WHFBT7CJ.cjs → chunk-DM53DOLW.cjs} +90 -90
  7. package/dist/{chunk-QDYI7RBT.js → chunk-ETA3LCRB.js} +3 -3
  8. package/dist/{chunk-QDYI7RBT.js.map → chunk-ETA3LCRB.js.map} +1 -1
  9. package/dist/{chunk-Q4BVTLXG.js → chunk-GKW5TTFV.js} +2 -2
  10. package/dist/{chunk-D42WMZZ7.js → chunk-HI4PB2AG.js} +7 -7
  11. package/dist/{chunk-HGRAENXJ.js → chunk-IQBEGX4Z.js} +2 -2
  12. package/dist/{chunk-DQ3TMDDK.cjs → chunk-JSJ3NRBQ.cjs} +7 -7
  13. package/dist/{chunk-CDC7AOGD.cjs → chunk-KAA3L7N6.cjs} +3 -3
  14. package/dist/{chunk-CDC7AOGD.cjs.map → chunk-KAA3L7N6.cjs.map} +1 -1
  15. package/dist/{chunk-65JU7D5L.cjs → chunk-KXP7HD6Z.cjs} +3 -3
  16. package/dist/{chunk-OCZMQ7SF.js → chunk-MASAFU3G.js} +2 -2
  17. package/dist/{chunk-DAZBGE47.js → chunk-MYC5HIA5.js} +2 -2
  18. package/dist/{chunk-6TTDLGHW.cjs → chunk-OYDUQYAK.cjs} +220 -220
  19. package/dist/{chunk-IZOYUU2C.cjs → chunk-P2QIVQIF.cjs} +6 -6
  20. package/dist/{chunk-34RQN4Y6.js → chunk-V6AVJEQC.js} +3 -3
  21. package/dist/{chunk-PTGWQCIU.cjs → chunk-XX56SVPB.cjs} +5 -5
  22. package/dist/{chunk-SR5FEIHD.js → chunk-YUTCMBUY.js} +2 -2
  23. package/dist/{chunk-XHS5C5AW.js → chunk-YW33IVCC.js} +2 -2
  24. package/dist/fs.cjs +10 -10
  25. package/dist/fs.js +4 -4
  26. package/dist/index.cjs +102 -102
  27. package/dist/index.js +11 -11
  28. package/dist/logger.cjs +7 -7
  29. package/dist/logger.js +3 -3
  30. package/dist/mocks.cjs +10 -10
  31. package/dist/mocks.js +8 -8
  32. package/dist/transformers.cjs +21 -21
  33. package/dist/transformers.js +5 -5
  34. package/dist/utils.cjs +13 -13
  35. package/dist/utils.js +4 -4
  36. package/package.json +5 -5
  37. package/dist/chunk-BOAROBF4.cjs.map +0 -1
  38. package/dist/chunk-BYGMREPJ.cjs +0 -15
  39. /package/dist/{chunk-DU6UHGVD.cjs.map → chunk-2UXXYHS6.cjs.map} +0 -0
  40. /package/dist/{chunk-IZOYUU2C.cjs.map → chunk-37XMXECQ.js.map} +0 -0
  41. /package/dist/{chunk-BYGMREPJ.cjs.map → chunk-5SUBV3F7.cjs.map} +0 -0
  42. /package/dist/{chunk-WHFBT7CJ.cjs.map → chunk-DM53DOLW.cjs.map} +0 -0
  43. /package/dist/{chunk-Q4BVTLXG.js.map → chunk-GKW5TTFV.js.map} +0 -0
  44. /package/dist/{chunk-D42WMZZ7.js.map → chunk-HI4PB2AG.js.map} +0 -0
  45. /package/dist/{chunk-HGRAENXJ.js.map → chunk-IQBEGX4Z.js.map} +0 -0
  46. /package/dist/{chunk-34RQN4Y6.js.map → chunk-JSJ3NRBQ.cjs.map} +0 -0
  47. /package/dist/{chunk-65JU7D5L.cjs.map → chunk-KXP7HD6Z.cjs.map} +0 -0
  48. /package/dist/{chunk-OCZMQ7SF.js.map → chunk-MASAFU3G.js.map} +0 -0
  49. /package/dist/{chunk-DAZBGE47.js.map → chunk-MYC5HIA5.js.map} +0 -0
  50. /package/dist/{chunk-6TTDLGHW.cjs.map → chunk-OYDUQYAK.cjs.map} +0 -0
  51. /package/dist/{chunk-NWXLHLH3.js.map → chunk-P2QIVQIF.cjs.map} +0 -0
  52. /package/dist/{chunk-DQ3TMDDK.cjs.map → chunk-V6AVJEQC.js.map} +0 -0
  53. /package/dist/{chunk-PTGWQCIU.cjs.map → chunk-XX56SVPB.cjs.map} +0 -0
  54. /package/dist/{chunk-SR5FEIHD.js.map → chunk-YUTCMBUY.js.map} +0 -0
  55. /package/dist/{chunk-XHS5C5AW.js.map → chunk-YW33IVCC.js.map} +0 -0
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkCDC7AOGD_cjs = require('./chunk-CDC7AOGD.cjs');
3
+ var chunkKAA3L7N6_cjs = require('./chunk-KAA3L7N6.cjs');
4
4
 
5
5
  // src/transformers/searchAndReplace.ts
6
- chunkCDC7AOGD_cjs.init_cjs_shims();
6
+ chunkKAA3L7N6_cjs.init_cjs_shims();
7
7
  function searchAndReplace(options) {
8
8
  const { text, replaceBy, prefix = "", key } = options;
9
9
  const searchValues = options.searchValues?.(prefix, key) || [
@@ -21,7 +21,7 @@ function searchAndReplace(options) {
21
21
  }
22
22
 
23
23
  // src/transformers/trim.ts
24
- chunkCDC7AOGD_cjs.init_cjs_shims();
24
+ chunkKAA3L7N6_cjs.init_cjs_shims();
25
25
  function trim(text) {
26
26
  return text.replaceAll(/\n/g, "").trim();
27
27
  }
@@ -30,7 +30,7 @@ function trimExtName(text) {
30
30
  }
31
31
 
32
32
  // src/transformers/transformReservedWord.ts
33
- chunkCDC7AOGD_cjs.init_cjs_shims();
33
+ chunkKAA3L7N6_cjs.init_cjs_shims();
34
34
  var reservedWords = [
35
35
  "abstract",
36
36
  "arguments",
@@ -128,4 +128,4 @@ exports.transformReservedWord = transformReservedWord;
128
128
  exports.trim = trim;
129
129
  exports.trimExtName = trimExtName;
130
130
  //# sourceMappingURL=out.js.map
131
- //# sourceMappingURL=chunk-DU6UHGVD.cjs.map
131
+ //# sourceMappingURL=chunk-2UXXYHS6.cjs.map
@@ -1,5 +1,5 @@
1
- import { camelCase } from './chunk-OCZMQ7SF.js';
2
- import { init_esm_shims } from './chunk-QDYI7RBT.js';
1
+ import { camelCase } from './chunk-MASAFU3G.js';
2
+ import { init_esm_shims } from './chunk-ETA3LCRB.js';
3
3
 
4
4
  // src/utils/URLPath.ts
5
5
  init_esm_shims();
@@ -101,4 +101,4 @@ var URLPath = class {
101
101
 
102
102
  export { URLPath };
103
103
  //# sourceMappingURL=out.js.map
104
- //# sourceMappingURL=chunk-NWXLHLH3.js.map
104
+ //# sourceMappingURL=chunk-37XMXECQ.js.map
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ var chunkDM53DOLW_cjs = require('./chunk-DM53DOLW.cjs');
4
+ var chunkKAA3L7N6_cjs = require('./chunk-KAA3L7N6.cjs');
5
+
6
+ // src/fs/clean.ts
7
+ chunkKAA3L7N6_cjs.init_cjs_shims();
8
+ var import_fs_extra = chunkKAA3L7N6_cjs.__toESM(chunkDM53DOLW_cjs.require_lib(), 1);
9
+ async function clean(path) {
10
+ return import_fs_extra.default.remove(path);
11
+ }
12
+
13
+ exports.clean = clean;
14
+ //# sourceMappingURL=out.js.map
15
+ //# sourceMappingURL=chunk-5SUBV3F7.cjs.map
@@ -1,25 +1,21 @@
1
1
  'use strict';
2
2
 
3
- var chunkCDC7AOGD_cjs = require('./chunk-CDC7AOGD.cjs');
3
+ var chunkKAA3L7N6_cjs = require('./chunk-KAA3L7N6.cjs');
4
4
 
5
5
  // src/transformers/casing.ts
6
- chunkCDC7AOGD_cjs.init_cjs_shims();
6
+ chunkKAA3L7N6_cjs.init_cjs_shims();
7
7
 
8
- // ../../node_modules/.pnpm/change-case@5.3.0/node_modules/change-case/dist/index.js
9
- chunkCDC7AOGD_cjs.init_cjs_shims();
8
+ // ../../node_modules/.pnpm/change-case@5.4.0/node_modules/change-case/dist/index.js
9
+ chunkKAA3L7N6_cjs.init_cjs_shims();
10
10
  var SPLIT_LOWER_UPPER_RE = /([\p{Ll}\d])(\p{Lu})/gu;
11
11
  var SPLIT_UPPER_UPPER_RE = /(\p{Lu})([\p{Lu}][\p{Ll}])/gu;
12
- var SPLIT_NUMBER_LOWER_RE = /(\d)(\p{Ll})/gu;
13
- var SPLIT_LETTER_NUMBER_RE = /(\p{L})(\d)/gu;
12
+ var SPLIT_SEPARATE_NUMBER_RE = /(?<=\d)(\p{Ll})|(?<=\p{L})(\d)/u;
14
13
  var DEFAULT_STRIP_REGEXP = /[^\p{L}\d]+/giu;
15
14
  var SPLIT_REPLACE_VALUE = "$1\0$2";
16
15
  var DEFAULT_PREFIX_SUFFIX_CHARACTERS = "";
17
- function split(value, options) {
16
+ function split(value) {
18
17
  let result = value.trim();
19
18
  result = result.replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE).replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE);
20
- if (options?.separateNumbers) {
21
- result = result.replace(SPLIT_NUMBER_LOWER_RE, SPLIT_REPLACE_VALUE).replace(SPLIT_LETTER_NUMBER_RE, SPLIT_REPLACE_VALUE);
22
- }
23
19
  result = result.replace(DEFAULT_STRIP_REGEXP, "\0");
24
20
  let start = 0;
25
21
  let end = result.length;
@@ -31,23 +27,34 @@ function split(value, options) {
31
27
  end--;
32
28
  return result.slice(start, end).split(/\0/g);
33
29
  }
30
+ function splitSeparateNumbers(value) {
31
+ const words = split(value);
32
+ for (let i = 0; i < words.length; i++) {
33
+ const word = words[i];
34
+ const match = SPLIT_SEPARATE_NUMBER_RE.exec(word);
35
+ if (match) {
36
+ words.splice(i, 1, word.slice(0, match.index), word.slice(match.index));
37
+ }
38
+ }
39
+ return words;
40
+ }
34
41
  function camelCase(input, options) {
35
- const [prefix, value, suffix] = splitPrefixSuffix(input, options);
42
+ const [prefix, words, suffix] = splitPrefixSuffix(input, options);
36
43
  const lower = lowerFactory(options?.locale);
37
44
  const upper = upperFactory(options?.locale);
38
45
  const transform = options?.mergeAmbiguousCharacters ? capitalCaseTransformFactory(lower, upper) : pascalCaseTransformFactory(lower, upper);
39
- return prefix + split(value, options).map((word, index) => {
46
+ return prefix + words.map((word, index) => {
40
47
  if (index === 0)
41
48
  return lower(word);
42
49
  return transform(word, index);
43
50
  }).join(options?.delimiter ?? "") + suffix;
44
51
  }
45
52
  function pascalCase(input, options) {
46
- const [prefix, value, suffix] = splitPrefixSuffix(input, options);
53
+ const [prefix, words, suffix] = splitPrefixSuffix(input, options);
47
54
  const lower = lowerFactory(options?.locale);
48
55
  const upper = upperFactory(options?.locale);
49
56
  const transform = options?.mergeAmbiguousCharacters ? capitalCaseTransformFactory(lower, upper) : pascalCaseTransformFactory(lower, upper);
50
- return prefix + split(value, options).map(transform).join(options?.delimiter ?? "") + suffix;
57
+ return prefix + words.map(transform).join(options?.delimiter ?? "") + suffix;
51
58
  }
52
59
  function lowerFactory(locale) {
53
60
  return locale === false ? (input) => input.toLowerCase() : (input) => input.toLocaleLowerCase(locale);
@@ -65,9 +72,10 @@ function pascalCaseTransformFactory(lower, upper) {
65
72
  return initial + lower(word.slice(1));
66
73
  };
67
74
  }
68
- function splitPrefixSuffix(input, options) {
69
- const prefixCharacters = options?.prefixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;
70
- const suffixCharacters = options?.suffixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;
75
+ function splitPrefixSuffix(input, options = {}) {
76
+ const splitFn = options.split ?? (options.separateNumbers ? splitSeparateNumbers : split);
77
+ const prefixCharacters = options.prefixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;
78
+ const suffixCharacters = options.suffixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;
71
79
  let prefixIndex = 0;
72
80
  let suffixIndex = input.length;
73
81
  while (prefixIndex < input.length) {
@@ -85,7 +93,7 @@ function splitPrefixSuffix(input, options) {
85
93
  }
86
94
  return [
87
95
  input.slice(0, prefixIndex),
88
- input.slice(prefixIndex, suffixIndex),
96
+ splitFn(input.slice(prefixIndex, suffixIndex)),
89
97
  input.slice(suffixIndex)
90
98
  ];
91
99
  }
@@ -101,4 +109,4 @@ function pascalCase2(text) {
101
109
  exports.camelCase = camelCase2;
102
110
  exports.pascalCase = pascalCase2;
103
111
  //# sourceMappingURL=out.js.map
104
- //# sourceMappingURL=chunk-BOAROBF4.cjs.map
112
+ //# sourceMappingURL=chunk-AIG4R6NN.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/transformers/casing.ts","../../../node_modules/.pnpm/change-case@5.4.0/node_modules/change-case/src/index.ts"],"names":["camelCase","pascalCase"],"mappings":"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","sourcesContent":["import { camelCase as changeCaseCamel, pascalCase as changePascalCase } from 'change-case'\n\nexport function camelCase(text: string): string {\n return changeCaseCamel(text, { delimiter: '', mergeAmbiguousCharacters: true })\n}\n\nexport function pascalCase(text: string): string {\n return changePascalCase(text, { delimiter: '', mergeAmbiguousCharacters: true })\n}\n","// Regexps involved with splitting words in various case formats.\nconst SPLIT_LOWER_UPPER_RE = /([\\p{Ll}\\d])(\\p{Lu})/gu;\nconst SPLIT_UPPER_UPPER_RE = /(\\p{Lu})([\\p{Lu}][\\p{Ll}])/gu;\n\n// Used to iterate over the initial split result and separate numbers.\nconst SPLIT_SEPARATE_NUMBER_RE = /(?<=\\d)(\\p{Ll})|(?<=\\p{L})(\\d)/u;\n\n// Regexp involved with stripping non-word characters from the result.\nconst DEFAULT_STRIP_REGEXP = /[^\\p{L}\\d]+/giu;\n\n// The replacement value for splits.\nconst SPLIT_REPLACE_VALUE = \"$1\\0$2\";\n\n// The default characters to keep after transforming case.\nconst DEFAULT_PREFIX_SUFFIX_CHARACTERS = \"\";\n\n/**\n * Supported locale values. Use `false` to ignore locale.\n * Defaults to `undefined`, which uses the host environment.\n */\nexport type Locale = string[] | string | false | undefined;\n\n/**\n * Options used for converting strings to pascal/camel case.\n */\nexport interface PascalCaseOptions extends Options {\n mergeAmbiguousCharacters?: boolean;\n}\n\n/**\n * Options used for converting strings to any case.\n */\nexport interface Options {\n locale?: Locale;\n split?: (value: string) => string[];\n /** @deprecated Pass `split: splitSeparateNumbers` instead. */\n separateNumbers?: boolean;\n delimiter?: string;\n prefixCharacters?: string;\n suffixCharacters?: string;\n}\n\n/**\n * Split any cased input strings into an array of words.\n */\nexport function split(value: string) {\n let result = value.trim();\n\n result = result\n .replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE)\n .replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE);\n\n result = result.replace(DEFAULT_STRIP_REGEXP, \"\\0\");\n\n let start = 0;\n let end = result.length;\n\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\") start++;\n if (start === end) return [];\n while (result.charAt(end - 1) === \"\\0\") end--;\n\n return result.slice(start, end).split(/\\0/g);\n}\n\n/**\n * Split the input string into an array of words, separating numbers.\n */\nexport function splitSeparateNumbers(value: string) {\n const words = split(value);\n for (let i = 0; i < words.length; i++) {\n const word = words[i];\n const match = SPLIT_SEPARATE_NUMBER_RE.exec(word);\n if (match) {\n words.splice(i, 1, word.slice(0, match.index), word.slice(match.index));\n }\n }\n return words;\n}\n\n/**\n * Convert a string to space separated lower case (`foo bar`).\n */\nexport function noCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (\n prefix +\n words.map(lowerFactory(options?.locale)).join(options?.delimiter ?? \" \") +\n suffix\n );\n}\n\n/**\n * Convert a string to camel case (`fooBar`).\n */\nexport function camelCase(input: string, options?: PascalCaseOptions) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return (\n prefix +\n words\n .map((word, index) => {\n if (index === 0) return lower(word);\n return transform(word, index);\n })\n .join(options?.delimiter ?? \"\") +\n suffix\n );\n}\n\n/**\n * Convert a string to pascal case (`FooBar`).\n */\nexport function pascalCase(input: string, options?: PascalCaseOptions) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return prefix + words.map(transform).join(options?.delimiter ?? \"\") + suffix;\n}\n\n/**\n * Convert a string to pascal snake case (`Foo_Bar`).\n */\nexport function pascalSnakeCase(input: string, options?: Options) {\n return capitalCase(input, { delimiter: \"_\", ...options });\n}\n\n/**\n * Convert a string to capital case (`Foo Bar`).\n */\nexport function capitalCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n return (\n prefix +\n words\n .map(capitalCaseTransformFactory(lower, upper))\n .join(options?.delimiter ?? \" \") +\n suffix\n );\n}\n\n/**\n * Convert a string to constant case (`FOO_BAR`).\n */\nexport function constantCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (\n prefix +\n words.map(upperFactory(options?.locale)).join(options?.delimiter ?? \"_\") +\n suffix\n );\n}\n\n/**\n * Convert a string to dot case (`foo.bar`).\n */\nexport function dotCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \".\", ...options });\n}\n\n/**\n * Convert a string to kebab case (`foo-bar`).\n */\nexport function kebabCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"-\", ...options });\n}\n\n/**\n * Convert a string to path case (`foo/bar`).\n */\nexport function pathCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"/\", ...options });\n}\n\n/**\n * Convert a string to path case (`Foo bar`).\n */\nexport function sentenceCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = capitalCaseTransformFactory(lower, upper);\n return (\n prefix +\n words\n .map((word, index) => {\n if (index === 0) return transform(word);\n return lower(word);\n })\n .join(options?.delimiter ?? \" \") +\n suffix\n );\n}\n\n/**\n * Convert a string to snake case (`foo_bar`).\n */\nexport function snakeCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"_\", ...options });\n}\n\n/**\n * Convert a string to header case (`Foo-Bar`).\n */\nexport function trainCase(input: string, options?: Options) {\n return capitalCase(input, { delimiter: \"-\", ...options });\n}\n\nfunction lowerFactory(locale: Locale): (input: string) => string {\n return locale === false\n ? (input: string) => input.toLowerCase()\n : (input: string) => input.toLocaleLowerCase(locale);\n}\n\nfunction upperFactory(locale: Locale): (input: string) => string {\n return locale === false\n ? (input: string) => input.toUpperCase()\n : (input: string) => input.toLocaleUpperCase(locale);\n}\n\nfunction capitalCaseTransformFactory(\n lower: (input: string) => string,\n upper: (input: string) => string,\n) {\n return (word: string) => `${upper(word[0])}${lower(word.slice(1))}`;\n}\n\nfunction pascalCaseTransformFactory(\n lower: (input: string) => string,\n upper: (input: string) => string,\n) {\n return (word: string, index: number) => {\n const char0 = word[0];\n const initial =\n index > 0 && char0 >= \"0\" && char0 <= \"9\" ? \"_\" + char0 : upper(char0);\n return initial + lower(word.slice(1));\n };\n}\n\nfunction splitPrefixSuffix(\n input: string,\n options: Options = {},\n): [string, string[], string] {\n const splitFn =\n options.split ?? (options.separateNumbers ? splitSeparateNumbers : split);\n const prefixCharacters =\n options.prefixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n const suffixCharacters =\n options.suffixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n let prefixIndex = 0;\n let suffixIndex = input.length;\n\n while (prefixIndex < input.length) {\n const char = input.charAt(prefixIndex);\n if (!prefixCharacters.includes(char)) break;\n prefixIndex++;\n }\n\n while (suffixIndex > prefixIndex) {\n const index = suffixIndex - 1;\n const char = input.charAt(index);\n if (!suffixCharacters.includes(char)) break;\n suffixIndex = index;\n }\n\n return [\n input.slice(0, prefixIndex),\n splitFn(input.slice(prefixIndex, suffixIndex)),\n input.slice(suffixIndex),\n ];\n}\n"]}