@kubb/core 2.17.0 → 2.18.1

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 (79) hide show
  1. package/dist/{chunk-C6JPLJPT.cjs → chunk-2H4XNW5D.cjs} +351 -267
  2. package/dist/chunk-2H4XNW5D.cjs.map +1 -0
  3. package/dist/chunk-2OWVHAMB.cjs +2584 -0
  4. package/dist/chunk-2OWVHAMB.cjs.map +1 -0
  5. package/dist/chunk-3PQTRXZD.js +1597 -0
  6. package/dist/chunk-3PQTRXZD.js.map +1 -0
  7. package/dist/{chunk-PVJACA4A.js → chunk-4X5FFJPJ.js} +35 -2
  8. package/dist/chunk-4X5FFJPJ.js.map +1 -0
  9. package/dist/{chunk-6V72PGTE.cjs → chunk-5T2QA53B.cjs} +139 -3
  10. package/dist/chunk-5T2QA53B.cjs.map +1 -0
  11. package/dist/{chunk-CWXJJLZF.cjs → chunk-7HFYOZ7F.cjs} +12 -4
  12. package/dist/chunk-7HFYOZ7F.cjs.map +1 -0
  13. package/dist/chunk-FRT5NM5I.js +311 -0
  14. package/dist/chunk-FRT5NM5I.js.map +1 -0
  15. package/dist/chunk-I64YA7CN.cjs +322 -0
  16. package/dist/chunk-I64YA7CN.cjs.map +1 -0
  17. package/dist/{chunk-NLZ2T737.js → chunk-MDO6MCFJ.js} +9 -2
  18. package/dist/chunk-MDO6MCFJ.js.map +1 -0
  19. package/dist/{chunk-JFESCSNU.cjs → chunk-OCUNVJPQ.cjs} +6 -8
  20. package/dist/chunk-OCUNVJPQ.cjs.map +1 -0
  21. package/dist/{chunk-PQ7P6QX5.cjs → chunk-SU2W2A6V.cjs} +3 -3
  22. package/dist/{chunk-YQ5ZU5PV.js → chunk-UCKFXEKM.js} +3 -5
  23. package/dist/{chunk-YQ5ZU5PV.js.map → chunk-UCKFXEKM.js.map} +1 -1
  24. package/dist/fs.cjs +3 -6
  25. package/dist/fs.cjs.map +1 -1
  26. package/dist/fs.js +5 -7
  27. package/dist/index.cjs +10 -2553
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.cts +6 -6
  30. package/dist/index.d.ts +6 -6
  31. package/dist/index.js +21 -1576
  32. package/dist/index.js.map +1 -1
  33. package/dist/logger.cjs +3 -4
  34. package/dist/mocks.cjs +19 -6
  35. package/dist/mocks.cjs.map +1 -1
  36. package/dist/mocks.d.cts +3 -2
  37. package/dist/mocks.d.ts +3 -2
  38. package/dist/mocks.js +16 -2
  39. package/dist/mocks.js.map +1 -1
  40. package/dist/transformers.cjs +3 -5
  41. package/dist/transformers.js +3 -5
  42. package/dist/utils.cjs +26 -194
  43. package/dist/utils.cjs.map +1 -1
  44. package/dist/utils.d.cts +4 -1
  45. package/dist/utils.d.ts +4 -1
  46. package/dist/utils.js +12 -172
  47. package/dist/utils.js.map +1 -1
  48. package/globals.d.ts +9 -12
  49. package/package.json +6 -6
  50. package/src/BarrelManager.ts +1 -1
  51. package/src/FileManager.ts +9 -9
  52. package/src/PluginManager.ts +6 -6
  53. package/src/build.ts +22 -10
  54. package/src/index.ts +1 -1
  55. package/src/plugin.ts +5 -9
  56. package/src/types.ts +4 -2
  57. package/src/utils/getParser.ts +17 -0
  58. package/src/utils/index.ts +1 -0
  59. package/dist/chunk-4ARKZPSY.js +0 -36
  60. package/dist/chunk-4ARKZPSY.js.map +0 -1
  61. package/dist/chunk-5PLDNXZK.js +0 -10
  62. package/dist/chunk-5PLDNXZK.js.map +0 -1
  63. package/dist/chunk-6V72PGTE.cjs.map +0 -1
  64. package/dist/chunk-C6JPLJPT.cjs.map +0 -1
  65. package/dist/chunk-CFHVVM3A.cjs +0 -132
  66. package/dist/chunk-CFHVVM3A.cjs.map +0 -1
  67. package/dist/chunk-CWXJJLZF.cjs.map +0 -1
  68. package/dist/chunk-FU3AZXHF.cjs +0 -19
  69. package/dist/chunk-FU3AZXHF.cjs.map +0 -1
  70. package/dist/chunk-GBVPADCA.js +0 -127
  71. package/dist/chunk-GBVPADCA.js.map +0 -1
  72. package/dist/chunk-JFESCSNU.cjs.map +0 -1
  73. package/dist/chunk-LEPKPXA4.cjs +0 -143
  74. package/dist/chunk-LEPKPXA4.cjs.map +0 -1
  75. package/dist/chunk-NLZ2T737.js.map +0 -1
  76. package/dist/chunk-PVJACA4A.js.map +0 -1
  77. package/dist/chunk-T7WVNL7N.cjs +0 -94
  78. package/dist/chunk-T7WVNL7N.cjs.map +0 -1
  79. /package/dist/{chunk-PQ7P6QX5.cjs.map → chunk-SU2W2A6V.cjs.map} +0 -0
@@ -6,7 +6,7 @@ import { PromiseManager } from './PromiseManager.ts'
6
6
  import { ValidationPluginError } from './errors.ts'
7
7
  import { readSync } from './fs/read.ts'
8
8
  import { LogLevel } from './logger.ts'
9
- import { definePlugin as defineCorePlugin } from './plugin.ts'
9
+ import { pluginCore } from './plugin.ts'
10
10
  import { transformReservedWord } from './transformers/transformReservedWord.ts'
11
11
  import { EventEmitter } from './utils/EventEmitter.ts'
12
12
  import { setUniqueName } from './utils/uniqueName.ts'
@@ -14,7 +14,7 @@ import { setUniqueName } from './utils/uniqueName.ts'
14
14
  import type { PossiblePromise } from '@kubb/types'
15
15
  import type { KubbFile } from './FileManager.ts'
16
16
  import type { Logger } from './logger.ts'
17
- import type { CorePluginOptions } from './plugin.ts'
17
+ import type { PluginCore } from './plugin.ts'
18
18
  import type {
19
19
  Config,
20
20
  GetPluginFactoryOptions,
@@ -89,7 +89,7 @@ export class PluginManager {
89
89
 
90
90
  readonly executed: Array<Executer> = []
91
91
  readonly logger: Logger
92
- readonly #core: Plugin<CorePluginOptions>
92
+ readonly #core: Plugin<PluginCore>
93
93
 
94
94
  readonly #usedPluginNames: Record<string, number> = {}
95
95
  readonly #promiseManager: PromiseManager
@@ -110,7 +110,7 @@ export class PluginManager {
110
110
 
111
111
  const plugins = config.plugins || []
112
112
 
113
- const core = defineCorePlugin({
113
+ const core = pluginCore({
114
114
  config,
115
115
  logger: this.logger,
116
116
  pluginManager: this,
@@ -121,7 +121,7 @@ export class PluginManager {
121
121
  })
122
122
 
123
123
  // call core.api.call with empty context so we can transform `api()` to `api: {}`
124
- this.#core = this.#parse(core as unknown as UserPlugin, this as any, core.api.call(null as any)) as Plugin<CorePluginOptions>
124
+ this.#core = this.#parse(core as unknown as UserPlugin, this as any, core.api.call(null as any)) as Plugin<PluginCore>
125
125
 
126
126
  this.plugins = [this.#core, ...plugins].map((plugin) => {
127
127
  return this.#parse(plugin as UserPlugin, this, this.#core.api)
@@ -624,7 +624,7 @@ export class PluginManager {
624
624
  #parse<TPlugin extends UserPluginWithLifeCycle>(
625
625
  plugin: TPlugin,
626
626
  pluginManager: PluginManager,
627
- context: CorePluginOptions['api'] | undefined,
627
+ context: PluginCore['api'] | undefined,
628
628
  ): Plugin<GetPluginFactoryOptions<TPlugin>> {
629
629
  const usedPluginNames = pluginManager.#usedPluginNames
630
630
 
package/src/build.ts CHANGED
@@ -65,7 +65,7 @@ async function setup(options: BuildOptions): Promise<PluginManager> {
65
65
  const task = async (file: KubbFile.ResolvedFile): Promise<KubbFile.ResolvedFile> => {
66
66
  const { path } = file
67
67
 
68
- let source: string | null = FileManager.getSource(file)
68
+ let source: string | null = await FileManager.getSource(file)
69
69
 
70
70
  const { result: loadedResult } = await pluginManager.hookFirst({
71
71
  hookName: 'load',
@@ -188,11 +188,15 @@ export async function build(options: BuildOptions): Promise<BuildOutput> {
188
188
  logger.emit('end', '💾 Writing completed')
189
189
  }
190
190
 
191
- return {
192
- files: fileManager.files.map((file) => ({
191
+ const files = await Promise.all(
192
+ fileManager.files.map(async (file) => ({
193
193
  ...file,
194
- source: FileManager.getSource(file),
194
+ source: await FileManager.getSource(file),
195
195
  })),
196
+ )
197
+
198
+ return {
199
+ files,
196
200
  pluginManager,
197
201
  }
198
202
  }
@@ -214,21 +218,29 @@ export async function safeBuild(options: BuildOptions): Promise<BuildOutput> {
214
218
  logger.emit('end', '💾 Writing completed')
215
219
  }
216
220
  } catch (e) {
217
- return {
218
- files: fileManager.files.map((file) => ({
221
+ const files = await Promise.all(
222
+ fileManager.files.map(async (file) => ({
219
223
  ...file,
220
- source: FileManager.getSource(file),
224
+ source: await FileManager.getSource(file),
221
225
  })),
226
+ )
227
+
228
+ return {
229
+ files,
222
230
  pluginManager,
223
231
  error: e as Error,
224
232
  }
225
233
  }
226
234
 
227
- return {
228
- files: fileManager.files.map((file) => ({
235
+ const files = await Promise.all(
236
+ fileManager.files.map(async (file) => ({
229
237
  ...file,
230
- source: FileManager.getSource(file),
238
+ source: await FileManager.getSource(file),
231
239
  })),
240
+ )
241
+
242
+ return {
243
+ files,
232
244
  pluginManager,
233
245
  }
234
246
  }
package/src/index.ts CHANGED
@@ -4,7 +4,7 @@ export { Warning } from './errors.ts'
4
4
  export { FileManager, KubbFile } from './FileManager.ts'
5
5
  export { Generator } from './Generator.ts'
6
6
  export { PackageManager } from './PackageManager.ts'
7
- export { createPlugin, pluginName as name, pluginName } from './plugin.ts'
7
+ export { createPlugin } from './plugin.ts'
8
8
  export { PluginManager } from './PluginManager.ts'
9
9
  export { PromiseManager } from './PromiseManager.ts'
10
10
  export type * from './types.ts'
package/src/plugin.ts CHANGED
@@ -8,8 +8,8 @@ import type { Plugin, PluginContext, PluginFactoryOptions, UserPluginWithLifeCyc
8
8
 
9
9
  type PluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (options: T['options']) => UserPluginWithLifeCycle<T>
10
10
 
11
- export function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(factory: PluginFactory<T>) {
12
- return (options: T['options']): ReturnType<PluginFactory<T>> => {
11
+ export function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(factory: PluginFactory<T>): PluginFactory<T> {
12
+ return (options) => {
13
13
  return factory(options)
14
14
  }
15
15
  }
@@ -26,19 +26,15 @@ type Options = {
26
26
  }
27
27
 
28
28
  // not publicly exported
29
- export type CorePluginOptions = PluginFactoryOptions<'core', Options, Options, PluginContext, never>
29
+ export type PluginCore = PluginFactoryOptions<'core', Options, Options, PluginContext, never>
30
30
 
31
- export const pluginName = 'core' satisfies CorePluginOptions['name']
32
- export const pluginKey: CorePluginOptions['key'] = [pluginName] satisfies CorePluginOptions['key']
33
-
34
- export const definePlugin = createPlugin<CorePluginOptions>((options) => {
31
+ export const pluginCore = createPlugin<PluginCore>((options) => {
35
32
  const { fileManager, pluginManager, resolvePath, resolveName, logger } = options
36
33
 
37
34
  return {
38
- name: pluginName,
35
+ name: 'core',
39
36
  options,
40
37
  key: ['core'],
41
-
42
38
  api() {
43
39
  return {
44
40
  get config() {
package/src/types.ts CHANGED
@@ -25,7 +25,7 @@ export type UserConfig = Omit<Config, 'root' | 'plugins'> & {
25
25
  /**
26
26
  * Plugin type can be KubbJSONPlugin or Plugin
27
27
  * Example: ['@kubb/swagger', { output: false }]
28
- * Or: createSwagger({ output: false })
28
+ * Or: pluginSwagger({ output: false })
29
29
  */
30
30
  plugins?: Array<Omit<UnknownUserPlugin, 'api'> | UnionPlugins | [name: string, options: object]>
31
31
  }
@@ -155,13 +155,15 @@ export type PluginFactoryOptions<
155
155
  /**
156
156
  * Same behaviour like what has been done with `QueryKey` in `@tanstack/react-query`
157
157
  */
158
- key: [name: TName | string, identifier?: string | number]
158
+ key: PluginKey<TName | string>
159
159
  options: TOptions
160
160
  resolvedOptions: TResolvedOptions
161
161
  api: TAPI
162
162
  resolvePathOptions: TResolvePathOptions
163
163
  }
164
164
 
165
+ export type PluginKey<TName> = [name: TName, identifier?: string | number]
166
+
165
167
  export type GetPluginFactoryOptions<TPlugin extends UserPlugin> = TPlugin extends UserPlugin<infer X> ? X : never
166
168
 
167
169
  export type UserPlugin<TOptions extends PluginFactoryOptions = PluginFactoryOptions> = {
@@ -0,0 +1,17 @@
1
+ type ParserModuleTs = typeof import('@kubb/parser-ts')
2
+
3
+ export type ParserModule = ParserModuleTs
4
+
5
+ export async function getParser(language: string | undefined) {
6
+ let modulePromise: Promise<ParserModule>
7
+
8
+ switch (language) {
9
+ default:
10
+ modulePromise = import('@kubb/parser-ts')
11
+ break
12
+ }
13
+
14
+ const module = await modulePromise
15
+
16
+ return module
17
+ }
@@ -10,3 +10,4 @@ export { timeout } from './timeout.ts'
10
10
  export { getUniqueName, setUniqueName } from './uniqueName.ts'
11
11
  export type { URLObject } from './URLPath.ts'
12
12
  export { URLPath } from './URLPath.ts'
13
+ export { getParser } from './getParser.ts'
@@ -1,36 +0,0 @@
1
- // src/transformers/casing.ts
2
- import { camelCase as changeCamelCase, pascalCase as changePascalCase, pathCase as changePathCase } from "change-case";
3
- function camelCase(text, { isFile, prefix = "", suffix = "" } = {}) {
4
- if (isFile) {
5
- const splitArray = text.split(".");
6
- return splitArray.map((item, i) => i === splitArray.length - 1 ? camelCase(item, { prefix, suffix }) : camelCase(item)).join("/");
7
- }
8
- return changeCamelCase(`${prefix} ${text} ${suffix}`, {
9
- delimiter: "",
10
- mergeAmbiguousCharacters: true
11
- });
12
- }
13
- function pascalCase(text, { isFile, prefix = "", suffix = "" } = {}) {
14
- if (isFile) {
15
- const splitArray = text.split(".");
16
- return splitArray.map((item, i) => i === splitArray.length - 1 ? pascalCase(item, { prefix, suffix }) : camelCase(item)).join("/");
17
- }
18
- return changePascalCase(`${prefix} ${text} ${suffix}`, {
19
- delimiter: "",
20
- mergeAmbiguousCharacters: true
21
- });
22
- }
23
- function pathCase(text, { isFile, prefix = "", suffix = "" } = {}) {
24
- if (isFile) {
25
- const splitArray = text.split(".");
26
- return splitArray.map((item, i) => i === splitArray.length - 1 ? pathCase(item, { prefix, suffix }) : camelCase(item)).join("/");
27
- }
28
- return changePathCase(`${prefix} ${text} ${suffix}`, { delimiter: "" });
29
- }
30
-
31
- export {
32
- camelCase,
33
- pascalCase,
34
- pathCase
35
- };
36
- //# sourceMappingURL=chunk-4ARKZPSY.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/transformers/casing.ts"],"sourcesContent":["import { camelCase as changeCamelCase, pascalCase as changePascalCase, pathCase as changePathCase } from 'change-case'\n\ntype Options = {\n /**\n * When set it will replace all `.` with `/`.\n */\n isFile?: boolean\n prefix?: string\n suffix?: string\n}\n\nexport function camelCase(text: string, { isFile, prefix = '', suffix = '' }: Options = {}): string {\n if (isFile) {\n const splitArray = text.split('.')\n return splitArray.map((item, i) => (i === splitArray.length - 1 ? camelCase(item, { prefix, suffix }) : camelCase(item))).join('/')\n }\n\n return changeCamelCase(`${prefix} ${text} ${suffix}`, {\n delimiter: '',\n mergeAmbiguousCharacters: true,\n })\n}\n\nexport function pascalCase(text: string, { isFile, prefix = '', suffix = '' }: Options = {}): string {\n if (isFile) {\n const splitArray = text.split('.')\n return splitArray.map((item, i) => (i === splitArray.length - 1 ? pascalCase(item, { prefix, suffix }) : camelCase(item))).join('/')\n }\n\n return changePascalCase(`${prefix} ${text} ${suffix}`, {\n delimiter: '',\n mergeAmbiguousCharacters: true,\n })\n}\n\nexport function pathCase(text: string, { isFile, prefix = '', suffix = '' }: Options = {}): string {\n if (isFile) {\n const splitArray = text.split('.')\n return splitArray.map((item, i) => (i === splitArray.length - 1 ? pathCase(item, { prefix, suffix }) : camelCase(item))).join('/')\n }\n\n return changePathCase(`${prefix} ${text} ${suffix}`, { delimiter: '' })\n}\n"],"mappings":";AAAA,SAAS,aAAa,iBAAiB,cAAc,kBAAkB,YAAY,sBAAsB;AAWlG,SAAS,UAAU,MAAc,EAAE,QAAQ,SAAS,IAAI,SAAS,GAAG,IAAa,CAAC,GAAW;AAClG,MAAI,QAAQ;AACV,UAAM,aAAa,KAAK,MAAM,GAAG;AACjC,WAAO,WAAW,IAAI,CAAC,MAAM,MAAO,MAAM,WAAW,SAAS,IAAI,UAAU,MAAM,EAAE,QAAQ,OAAO,CAAC,IAAI,UAAU,IAAI,CAAE,EAAE,KAAK,GAAG;AAAA,EACpI;AAEA,SAAO,gBAAgB,GAAG,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI;AAAA,IACpD,WAAW;AAAA,IACX,0BAA0B;AAAA,EAC5B,CAAC;AACH;AAEO,SAAS,WAAW,MAAc,EAAE,QAAQ,SAAS,IAAI,SAAS,GAAG,IAAa,CAAC,GAAW;AACnG,MAAI,QAAQ;AACV,UAAM,aAAa,KAAK,MAAM,GAAG;AACjC,WAAO,WAAW,IAAI,CAAC,MAAM,MAAO,MAAM,WAAW,SAAS,IAAI,WAAW,MAAM,EAAE,QAAQ,OAAO,CAAC,IAAI,UAAU,IAAI,CAAE,EAAE,KAAK,GAAG;AAAA,EACrI;AAEA,SAAO,iBAAiB,GAAG,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI;AAAA,IACrD,WAAW;AAAA,IACX,0BAA0B;AAAA,EAC5B,CAAC;AACH;AAEO,SAAS,SAAS,MAAc,EAAE,QAAQ,SAAS,IAAI,SAAS,GAAG,IAAa,CAAC,GAAW;AACjG,MAAI,QAAQ;AACV,UAAM,aAAa,KAAK,MAAM,GAAG;AACjC,WAAO,WAAW,IAAI,CAAC,MAAM,MAAO,MAAM,WAAW,SAAS,IAAI,SAAS,MAAM,EAAE,QAAQ,OAAO,CAAC,IAAI,UAAU,IAAI,CAAE,EAAE,KAAK,GAAG;AAAA,EACnI;AAEA,SAAO,eAAe,GAAG,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,EAAE,WAAW,GAAG,CAAC;AACxE;","names":[]}
@@ -1,10 +0,0 @@
1
- // src/fs/clean.ts
2
- import fs from "fs-extra";
3
- async function clean(path) {
4
- return fs.remove(path);
5
- }
6
-
7
- export {
8
- clean
9
- };
10
- //# sourceMappingURL=chunk-5PLDNXZK.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/fs/clean.ts"],"sourcesContent":["import fs from 'fs-extra'\n\nexport async function clean(path: string): Promise<void> {\n return fs.remove(path)\n}\n"],"mappings":";AAAA,OAAO,QAAQ;AAEf,eAAsB,MAAM,MAA6B;AACvD,SAAO,GAAG,OAAO,IAAI;AACvB;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/natural-orderby@3.0.2/node_modules/natural-orderby/dist/index.js"],"names":["compareNumbers","compareUnicode","stringCompare","compareChunks","compareOtherTypes","compareValues","normalizeAlphaChunk","parseNumber","normalizeNumericChunk","createChunkMap","createChunks","createChunkMaps","isFunction","isNaN","isNull","isObject","isSymbol","isUndefined","parseDate","numberify","stringify","getMappedValueRecord","compareMultiple","createIdentifierFn","getElementByIndex","getValueByIdentifier","baseOrderBy","getIdentifiers","getOrders"],"mappings":"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","sourcesContent":["/**\n * natural-orderby v3.0.2\n *\n * Copyright (c) Olaf Ennen\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nvar compareNumbers = function compareNumbers(numberA, numberB) {\n if (numberA < numberB) {\n return -1;\n }\n if (numberA > numberB) {\n return 1;\n }\n return 0;\n};\n\nvar compareUnicode = function compareUnicode(stringA, stringB) {\n var result = stringA.localeCompare(stringB);\n return result ? result / Math.abs(result) : 0;\n};\n\nvar RE_NUMBERS = /(^0x[\\da-fA-F]+$|^([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?(?!\\.\\d+)(?=\\D|\\s|$))|\\d+)/g;\nvar RE_LEADING_OR_TRAILING_WHITESPACES = /^\\s+|\\s+$/g; // trim pre-post whitespace\nvar RE_WHITESPACES = /\\s+/g; // normalize all whitespace to single ' ' character\nvar RE_INT_OR_FLOAT = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?$/; // identify integers and floats\nvar RE_DATE = /(^([\\w ]+,?[\\w ]+)?[\\w ]+,?[\\w ]+\\d+:\\d+(:\\d+)?[\\w ]?|^\\d{1,4}[/-]\\d{1,4}[/-]\\d{1,4}|^\\w+, \\w+ \\d+, \\d{4})/; // identify date strings\nvar RE_LEADING_ZERO = /^0+[1-9]{1}[0-9]*$/;\n// eslint-disable-next-line no-control-regex\nvar RE_UNICODE_CHARACTERS = /[^\\x00-\\x80]/;\n\nvar stringCompare = function stringCompare(stringA, stringB) {\n if (stringA < stringB) {\n return -1;\n }\n if (stringA > stringB) {\n return 1;\n }\n return 0;\n};\n\nvar compareChunks = function compareChunks(chunksA, chunksB) {\n var lengthA = chunksA.length;\n var lengthB = chunksB.length;\n var size = Math.min(lengthA, lengthB);\n for (var i = 0; i < size; i++) {\n var chunkA = chunksA[i];\n var chunkB = chunksB[i];\n if (chunkA.normalizedString !== chunkB.normalizedString) {\n if (chunkA.normalizedString === '' !== (chunkB.normalizedString === '')) {\n // empty strings have lowest value\n return chunkA.normalizedString === '' ? -1 : 1;\n }\n if (chunkA.parsedNumber !== undefined && chunkB.parsedNumber !== undefined) {\n // compare numbers\n var result = compareNumbers(chunkA.parsedNumber, chunkB.parsedNumber);\n if (result === 0) {\n // compare string value, if parsed numbers are equal\n // Example:\n // chunkA = { parsedNumber: 1, normalizedString: \"001\" }\n // chunkB = { parsedNumber: 1, normalizedString: \"01\" }\n // chunkA.parsedNumber === chunkB.parsedNumber\n // chunkA.normalizedString < chunkB.normalizedString\n return stringCompare(chunkA.normalizedString, chunkB.normalizedString);\n }\n return result;\n } else if (chunkA.parsedNumber !== undefined || chunkB.parsedNumber !== undefined) {\n // number < string\n return chunkA.parsedNumber !== undefined ? -1 : 1;\n } else if (RE_UNICODE_CHARACTERS.test(chunkA.normalizedString + chunkB.normalizedString)) {\n // use locale comparison only if one of the chunks contains unicode characters\n return compareUnicode(chunkA.normalizedString, chunkB.normalizedString);\n } else {\n // use common string comparison for performance reason\n return stringCompare(chunkA.normalizedString, chunkB.normalizedString);\n }\n }\n }\n // if the chunks are equal so far, the one which has more chunks is greater than the other one\n if (lengthA > size || lengthB > size) {\n return lengthA <= size ? -1 : 1;\n }\n return 0;\n};\n\nvar compareOtherTypes = function compareOtherTypes(valueA, valueB) {\n if (!valueA.chunks ? valueB.chunks : !valueB.chunks) {\n return !valueA.chunks ? 1 : -1;\n }\n if (valueA.isNaN ? !valueB.isNaN : valueB.isNaN) {\n return valueA.isNaN ? -1 : 1;\n }\n if (valueA.isSymbol ? !valueB.isSymbol : valueB.isSymbol) {\n return valueA.isSymbol ? -1 : 1;\n }\n if (valueA.isObject ? !valueB.isObject : valueB.isObject) {\n return valueA.isObject ? -1 : 1;\n }\n if (valueA.isArray ? !valueB.isArray : valueB.isArray) {\n return valueA.isArray ? -1 : 1;\n }\n if (valueA.isFunction ? !valueB.isFunction : valueB.isFunction) {\n return valueA.isFunction ? -1 : 1;\n }\n if (valueA.isNull ? !valueB.isNull : valueB.isNull) {\n return valueA.isNull ? -1 : 1;\n }\n return 0;\n};\n\nvar compareValues = function compareValues(valueA, valueB) {\n if (valueA.value === valueB.value) {\n return 0;\n }\n if (valueA.parsedNumber !== undefined && valueB.parsedNumber !== undefined) {\n return compareNumbers(valueA.parsedNumber, valueB.parsedNumber);\n }\n if (valueA.chunks && valueB.chunks) {\n return compareChunks(valueA.chunks, valueB.chunks);\n }\n return compareOtherTypes(valueA, valueB);\n};\n\nvar normalizeAlphaChunk = function normalizeAlphaChunk(chunk) {\n return chunk.replace(RE_WHITESPACES, ' ').replace(RE_LEADING_OR_TRAILING_WHITESPACES, '');\n};\n\nvar parseNumber = function parseNumber(value) {\n if (value.length !== 0) {\n var parsedNumber = Number(value);\n if (!Number.isNaN(parsedNumber)) {\n return parsedNumber;\n }\n }\n return undefined;\n};\n\nvar normalizeNumericChunk = function normalizeNumericChunk(chunk, index, chunks) {\n if (RE_INT_OR_FLOAT.test(chunk)) {\n // don´t parse a number, if there´s a preceding decimal point\n // to keep significance\n // e.g. 1.0020, 1.020\n if (!RE_LEADING_ZERO.test(chunk) || index === 0 || chunks[index - 1] !== '.') {\n return parseNumber(chunk) || 0;\n }\n }\n return undefined;\n};\n\nvar createChunkMap = function createChunkMap(chunk, index, chunks) {\n return {\n parsedNumber: normalizeNumericChunk(chunk, index, chunks),\n normalizedString: normalizeAlphaChunk(chunk)\n };\n};\n\nvar createChunks = function createChunks(value) {\n return value.replace(RE_NUMBERS, '\\0$1\\0').replace(/\\0$/, '').replace(/^\\0/, '').split('\\0');\n};\n\nvar createChunkMaps = function createChunkMaps(value) {\n var chunksMaps = createChunks(value).map(createChunkMap);\n return chunksMaps;\n};\n\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n\nvar isNaN = function isNaN(value) {\n return Number.isNaN(value) || value instanceof Number && Number.isNaN(value.valueOf());\n};\n\nvar isNull = function isNull(value) {\n return value === null;\n};\n\nvar isObject = function isObject(value) {\n return value !== null && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Number) && !(value instanceof String) && !(value instanceof Boolean) && !(value instanceof Date);\n};\n\nvar isSymbol = function isSymbol(value) {\n return typeof value === 'symbol';\n};\n\nvar isUndefined = function isUndefined(value) {\n return value === undefined;\n};\n\nvar parseDate = function parseDate(value) {\n try {\n var parsedDate = Date.parse(value);\n if (!Number.isNaN(parsedDate)) {\n if (RE_DATE.test(value)) {\n return parsedDate;\n }\n }\n return undefined;\n } catch (_unused) {\n return undefined;\n }\n};\n\nvar numberify = function numberify(value) {\n var parsedNumber = parseNumber(value);\n if (parsedNumber !== undefined) {\n return parsedNumber;\n }\n return parseDate(value);\n};\n\nvar stringify = function stringify(value) {\n if (typeof value === 'boolean' || value instanceof Boolean) {\n return Number(value).toString();\n }\n if (typeof value === 'number' || value instanceof Number) {\n return value.toString();\n }\n if (value instanceof Date) {\n return value.getTime().toString();\n }\n if (typeof value === 'string' || value instanceof String) {\n return value.toLowerCase().replace(RE_LEADING_OR_TRAILING_WHITESPACES, '');\n }\n return '';\n};\n\nvar getMappedValueRecord = function getMappedValueRecord(value) {\n if (typeof value === 'string' || value instanceof String || (typeof value === 'number' || value instanceof Number) && !isNaN(value) || typeof value === 'boolean' || value instanceof Boolean || value instanceof Date) {\n var stringValue = stringify(value);\n var parsedNumber = numberify(stringValue);\n var chunks = createChunkMaps(parsedNumber ? \"\" + parsedNumber : stringValue);\n return {\n parsedNumber: parsedNumber,\n chunks: chunks,\n value: value\n };\n }\n return {\n isArray: Array.isArray(value),\n isFunction: isFunction(value),\n isNaN: isNaN(value),\n isNull: isNull(value),\n isObject: isObject(value),\n isSymbol: isSymbol(value),\n isUndefined: isUndefined(value),\n value: value\n };\n};\n\nvar baseCompare = function baseCompare(options) {\n return function (valueA, valueB) {\n var a = getMappedValueRecord(valueA);\n var b = getMappedValueRecord(valueB);\n var result = compareValues(a, b);\n return result * (options.order === 'desc' ? -1 : 1);\n };\n};\n\nvar isValidOrder = function isValidOrder(value) {\n return typeof value === 'string' && (value === 'asc' || value === 'desc');\n};\nvar getOptions = function getOptions(customOptions) {\n var order = 'asc';\n if (typeof customOptions === 'string' && isValidOrder(customOptions)) {\n order = customOptions;\n } else if (customOptions && typeof customOptions === 'object' && customOptions.order && isValidOrder(customOptions.order)) {\n order = customOptions.order;\n }\n return {\n order: order\n };\n};\n\n/**\n * Creates a compare function that defines the natural sort order considering\n * the given `options` which may be passed to [`Array.prototype.sort()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort).\n */\nfunction compare(options) {\n var validatedOptions = getOptions(options);\n return baseCompare(validatedOptions);\n}\n\nvar compareMultiple = function compareMultiple(recordA, recordB, orders) {\n var indexA = recordA.index,\n valuesA = recordA.values;\n var indexB = recordB.index,\n valuesB = recordB.values;\n var length = valuesA.length;\n var ordersLength = orders.length;\n for (var i = 0; i < length; i++) {\n var order = i < ordersLength ? orders[i] : null;\n if (order && typeof order === 'function') {\n var result = order(valuesA[i].value, valuesB[i].value);\n if (result) {\n return result;\n }\n } else {\n var _result = compareValues(valuesA[i], valuesB[i]);\n if (_result) {\n return _result * (order === 'desc' ? -1 : 1);\n }\n }\n }\n return indexA - indexB;\n};\n\nvar createIdentifierFn = function createIdentifierFn(identifier) {\n if (typeof identifier === 'function') {\n // identifier is already a lookup function\n return identifier;\n }\n return function (value) {\n if (Array.isArray(value)) {\n var index = Number(identifier);\n if (Number.isInteger(index)) {\n return value[index];\n }\n } else if (value && typeof value === 'object') {\n var result = Object.getOwnPropertyDescriptor(value, identifier);\n return result == null ? void 0 : result.value;\n }\n return value;\n };\n};\n\nvar getElementByIndex = function getElementByIndex(collection, index) {\n return collection[index];\n};\n\nvar getValueByIdentifier = function getValueByIdentifier(value, getValue) {\n return getValue(value);\n};\n\nvar baseOrderBy = function baseOrderBy(collection, identifiers, orders) {\n var identifierFns = identifiers.length ? identifiers.map(createIdentifierFn) : [function (value) {\n return value;\n }];\n\n // temporary array holds elements with position and sort-values\n var mappedCollection = collection.map(function (element, index) {\n var values = identifierFns.map(function (identifier) {\n return getValueByIdentifier(element, identifier);\n }).map(getMappedValueRecord);\n return {\n index: index,\n values: values\n };\n });\n\n // iterate over values and compare values until a != b or last value reached\n mappedCollection.sort(function (recordA, recordB) {\n return compareMultiple(recordA, recordB, orders);\n });\n return mappedCollection.map(function (element) {\n return getElementByIndex(collection, element.index);\n });\n};\n\nvar getIdentifiers = function getIdentifiers(identifiers) {\n if (!identifiers) {\n return [];\n }\n var identifierList = !Array.isArray(identifiers) ? [identifiers] : [].concat(identifiers);\n if (identifierList.some(function (identifier) {\n return typeof identifier !== 'string' && typeof identifier !== 'number' && typeof identifier !== 'function';\n })) {\n return [];\n }\n return identifierList;\n};\n\nvar getOrders = function getOrders(orders) {\n if (!orders) {\n return [];\n }\n var orderList = !Array.isArray(orders) ? [orders] : [].concat(orders);\n if (orderList.some(function (order) {\n return order !== 'asc' && order !== 'desc' && typeof order !== 'function';\n })) {\n return [];\n }\n return orderList;\n};\n\n/**\n * Creates an array of elements, natural sorted by specified identifiers and\n * the corresponding sort orders. This method implements a stable sort\n * algorithm, which means the original sort order of equal elements is\n * preserved.\n */\nfunction orderBy(collection, identifiers, orders) {\n if (!collection || !Array.isArray(collection)) {\n return [];\n }\n var validatedIdentifiers = getIdentifiers(identifiers);\n var validatedOrders = getOrders(orders);\n return baseOrderBy(collection, validatedIdentifiers, validatedOrders);\n}\n\nexport { compare, orderBy };\n"]}