├── .editorconfig
├── .eslintrc.js
├── .gitattributes
├── .gitignore
├── .verb.md
├── README.md
├── examples
├── Intl.Segmenter
│ ├── iterator.ts
│ └── segment.ts
├── Segmenter
│ ├── array-from.ts
│ ├── getSegments-static.ts
│ ├── getSegments.ts
│ ├── iterator-long-string.ts
│ ├── iterator.ts
│ └── segment.ts
└── example.ts
├── index.ts
├── package.json
├── pnpm-lock.yaml
├── prettier.config.js
├── src
└── Segmenter.ts
├── test
└── Segmenter.test.ts
├── tsconfig.json
└── tsup.config.ts
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | end_of_line = lf
6 | charset = utf-8
7 | indent_size = 2
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 |
11 | [*.md]
12 | trim_trailing_whitespace = false
13 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @type {import('@types/eslint').Linter.BaseConfig}
3 | */
4 | module.exports = {
5 | root: true,
6 |
7 | extends: [
8 | 'eslint:recommended'
9 | ],
10 |
11 | env: {
12 | commonjs: true,
13 | es2023: true,
14 | mocha: true,
15 | node: true
16 | },
17 |
18 | plugins: ['@typescript-eslint'],
19 | parser: '@typescript-eslint/parser',
20 | parserOptions: {
21 | ecmaVersion: 'latest',
22 | sourceType: 'module',
23 | requireConfigFile: false
24 | },
25 |
26 | rules: {
27 | 'accessor-pairs': 2,
28 | 'array-bracket-newline': [1, 'consistent'],
29 | 'array-bracket-spacing': [1, 'never'],
30 | 'array-callback-return': 1,
31 | 'array-element-newline': [1, 'consistent'],
32 | 'arrow-body-style': 0,
33 | 'arrow-parens': [1, 'as-needed'],
34 | 'arrow-spacing': [1, { before: true, after: true }],
35 | 'block-scoped-var': 1,
36 | 'block-spacing': [1, 'always'],
37 | 'brace-style': [1, '1tbs', { allowSingleLine: true }],
38 | 'callback-return': 0,
39 | 'camelcase': [0, { allow: [] }],
40 | 'capitalized-comments': 0,
41 | 'class-methods-use-this': 0,
42 | 'comma-dangle': [1, 'never'],
43 | 'comma-spacing': [1, { before: false, after: true }],
44 | 'comma-style': [1, 'last'],
45 | 'complexity': 1,
46 | 'computed-property-spacing': 1,
47 | 'consistent-return': 0,
48 | 'consistent-this': 1,
49 | 'constructor-super': 2,
50 | 'curly': [1, 'multi-line', 'consistent'],
51 | 'default-case': 1,
52 | 'dot-location': [1, 'property'],
53 | 'dot-notation': 1,
54 | 'eol-last': 1,
55 | 'eqeqeq': [1, 'allow-null'],
56 | 'for-direction': 1,
57 | 'func-call-spacing': 2,
58 | 'generator-star-spacing': [1, { before: true, after: true }],
59 | 'handle-callback-err': [2, '^(err|error)$'],
60 | 'indent': [1, 2, { SwitchCase: 1 }],
61 | 'key-spacing': [1, { beforeColon: false, afterColon: true }],
62 | 'keyword-spacing': [1, { before: true, after: true }],
63 | 'linebreak-style': [1, 'unix'],
64 | 'new-cap': [1, { newIsCap: true, capIsNew: false }],
65 | 'new-parens': 2,
66 | 'no-alert': 1,
67 | 'no-array-constructor': 1,
68 | 'no-async-promise-executor': 1,
69 | 'no-await-in-loop': 0,
70 | 'no-caller': 2,
71 | 'no-case-declarations': 1,
72 | 'no-class-assign': 2,
73 | 'no-cond-assign': 2,
74 | 'no-console': 0,
75 | 'no-const-assign': 2,
76 | 'no-constant-condition': [1, { checkLoops: false }],
77 | 'no-control-regex': 2,
78 | 'no-debugger': 2,
79 | 'no-delete-var': 2,
80 | 'no-dupe-args': 2,
81 | 'no-dupe-class-members': 2,
82 | 'no-dupe-keys': 2,
83 | 'no-duplicate-case': 2,
84 | 'no-duplicate-imports': 0,
85 | 'no-else-return': 0,
86 | 'no-empty-character-class': 2,
87 | 'no-empty-function': 0,
88 | 'no-empty-pattern': 0,
89 | 'no-empty': [1, { allowEmptyCatch: true }],
90 | 'no-eval': 0,
91 | 'no-ex-assign': 2,
92 | 'no-extend-native': 2,
93 | 'no-extra-bind': 1,
94 | 'no-extra-boolean-cast': 1,
95 | 'no-extra-label': 1,
96 | 'no-extra-parens': [1, 'all', { conditionalAssign: false, returnAssign: false, nestedBinaryExpressions: false, ignoreJSX: 'multi-line', enforceForArrowConditionals: false }],
97 | 'no-extra-semi': 1,
98 | 'no-fallthrough': 2,
99 | 'no-floating-decimal': 2,
100 | 'no-func-assign': 2,
101 | 'no-global-assign': 2,
102 | 'no-implicit-coercion': 2,
103 | 'no-implicit-globals': 1,
104 | 'no-implied-eval': 2,
105 | 'no-inner-declarations': [1, 'functions'],
106 | 'no-invalid-regexp': 2,
107 | 'no-invalid-this': 1,
108 | 'no-irregular-whitespace': 2,
109 | 'no-iterator': 2,
110 | 'no-label-var': 2,
111 | 'no-labels': 2,
112 | 'no-lone-blocks': 2,
113 | 'no-lonely-if': 2,
114 | 'no-loop-func': 1,
115 | 'no-mixed-requires': 1,
116 | 'no-mixed-spaces-and-tabs': 2,
117 | 'no-multi-assign': 0,
118 | 'no-multi-spaces': 1,
119 | 'no-multi-str': 2,
120 | 'no-multiple-empty-lines': [1, { max: 1 }],
121 | 'no-native-reassign': 2,
122 | 'no-negated-condition': 0,
123 | 'no-negated-in-lhs': 2,
124 | 'no-new-func': 2,
125 | 'no-new-object': 2,
126 | 'no-new-require': 2,
127 | 'no-new-symbol': 1,
128 | 'no-new-wrappers': 2,
129 | 'no-new': 1,
130 | 'no-obj-calls': 2,
131 | 'no-octal-escape': 2,
132 | 'no-octal': 2,
133 | 'no-path-concat': 1,
134 | 'no-proto': 2,
135 | 'no-prototype-builtins': 0,
136 | 'no-redeclare': 2,
137 | 'no-regex-spaces': 2,
138 | 'no-restricted-globals': 2,
139 | 'no-return-assign': 1,
140 | 'no-return-await': 2,
141 | 'no-script-url': 1,
142 | 'no-self-assign': 1,
143 | 'no-self-compare': 1,
144 | 'no-sequences': 2,
145 | 'no-shadow-restricted-names': 2,
146 | 'no-shadow': 0,
147 | 'no-spaced-func': 2,
148 | 'no-sparse-arrays': 2,
149 | 'no-template-curly-in-string': 0,
150 | 'no-this-before-super': 2,
151 | 'no-throw-literal': 2,
152 | 'no-trailing-spaces': 1,
153 | 'no-undef-init': 2,
154 | 'no-undef': 2,
155 | 'no-unexpected-multiline': 2,
156 | 'no-unneeded-ternary': [1, { defaultAssignment: false }],
157 | 'no-unreachable-loop': 1,
158 | 'no-unreachable': 2,
159 | 'no-unsafe-assignment': 0,
160 | 'no-unsafe-call': 0,
161 | 'no-unsafe-finally': 2,
162 | 'no-unsafe-member-access': 0,
163 | 'no-unsafe-negation': 2,
164 | 'no-unsafe-optional-chaining': 0,
165 | 'no-unsafe-return': 0,
166 | 'no-unused-expressions': 2,
167 | 'no-unused-vars': [1, { vars: 'all', args: 'after-used' }],
168 | 'no-use-before-define': 0,
169 | 'no-useless-call': 2,
170 | 'no-useless-catch': 0,
171 | 'no-useless-escape': 0,
172 | 'no-useless-rename': 1,
173 | 'no-useless-return': 1,
174 | 'no-var': 1,
175 | 'no-void': 1,
176 | 'no-warning-comments': 0,
177 | 'no-with': 2,
178 | 'object-curly-spacing': [1, 'always', { objectsInObjects: true }],
179 | 'object-shorthand': 1,
180 | 'one-var': [1, { initialized: 'never' }],
181 | 'operator-linebreak': [0, 'after', { overrides: { '?': 'before', ':': 'before' } }],
182 | 'padded-blocks': [1, { switches: 'never' }],
183 | 'prefer-const': [1, { destructuring: 'all', ignoreReadBeforeAssign: false }],
184 | 'prefer-promise-reject-errors': 1,
185 | 'quotes': [1, 'single', 'avoid-escape'],
186 | 'radix': 2,
187 | 'rest-spread-spacing': 1,
188 | 'semi-spacing': [1, { before: false, after: true }],
189 | 'semi-style': 1,
190 | 'semi': [1, 'always'],
191 | 'space-before-blocks': [1, 'always'],
192 | 'space-before-function-paren': [1, { anonymous: 'never', named: 'never', asyncArrow: 'always' }],
193 | 'space-in-parens': [1, 'never'],
194 | 'space-infix-ops': 1,
195 | 'space-unary-ops': [1, { words: true, nonwords: false }],
196 | 'spaced-comment': [0, 'always', { markers: ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] }],
197 | 'strict': 2,
198 | 'switch-colon-spacing': 1,
199 | 'symbol-description': 1,
200 | 'template-curly-spacing': [2, 'never'],
201 | 'template-tag-spacing': [2, 'never'],
202 | 'unicode-bom': 1,
203 | 'use-isnan': 2,
204 | 'valid-jsdoc': 1,
205 | 'valid-typeof': 2,
206 | 'wrap-iife': [1, 'any'],
207 | 'yoda': [1, 'never'],
208 |
209 | // TypeScript
210 | '@typescript-eslint/consistent-type-imports': 1,
211 | '@typescript-eslint/no-unused-vars': [1, { vars: 'all', args: 'after-used', argsIgnorePattern: '^_' }]
212 | },
213 |
214 | ignorePatterns: [
215 | '.cache',
216 | '.chat',
217 | '.config',
218 | '.vscode',
219 | '.git',
220 | 'node_modules',
221 | 'vendor',
222 | 'build',
223 | 'dist',
224 | 'tmp',
225 | 'temp'
226 | ]
227 | };
228 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Enforce Unix newlines
2 | * text eol=lf
3 |
4 | # binaries
5 | *.ai binary
6 | *.psd binary
7 | *.jpg binary
8 | *.gif binary
9 | *.png binary
10 | *.jpeg binary
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # always ignore files
2 | *.sublime-*
3 | *.code-*
4 | *.log
5 | .DS_Store
6 | .env
7 | .env.*
8 |
9 | # always ignore dirs
10 | temp
11 | tmp
12 | vendor
13 |
14 | # test related, or directories generated by tests
15 | test/actual
16 | actual
17 | coverage
18 | .nyc*
19 |
20 | # package managers
21 | node_modules
22 | package-lock.json
23 | yarn.lock
24 |
25 | # misc
26 | _gh_pages
27 | _draft
28 | _drafts
29 | bower_components
30 | vendor
31 | temp
32 | tmp
33 |
34 | # AI
35 |
36 | *.generated.*
37 | *.updated.*
38 | .chat
39 | .smith
40 | dist
--------------------------------------------------------------------------------
/.verb.md:
--------------------------------------------------------------------------------
1 |
2 | Install with [pnpm](https://pnpm.io):
3 |
4 | ```sh
5 | $ pnpm install intl-segmenter
6 | ```
7 |
8 | ## Overview
9 |
10 | If you do any text processing, parsing, or formatting, especially for the terminal, you know the challenges of handling special characters, emojis, and extended Unicode characters.
11 |
12 | The `Intl.Segmenter` object was introduced to simplify text segmentation and correctly handle these special characters. However, it has notable limitations and potential risks:
13 |
14 | - Predictable "Maximum call stack exceeded" exceptions occur when strings exceed 40-50k characters.
15 | - Performance degrades geometrically as the number of non-ASCII/extended Unicode characters increases.
16 |
17 | For context:
18 |
19 | - Blog posts average 2k-10k chars
20 | - Novels 450k-500k chars
21 | - This README ~7k chars
22 |
23 | This library wraps `Intl.Segmenter` to address these issues:
24 |
25 | - Handles strings up to millions of characters in length (tested to ~24m chars on M2 Macbook Pro).
26 | - Improves performance by 50-500x compared to direct `Intl.Segmenter` usage.
27 | - Prevents "Maximum call stack exceeded" exceptions that predictably occur with long strings over a certain length.
28 |
29 | Use this as a drop-in replacement for `Intl.Segmenter` when accurate text segmentation is needed, particularly for strings with non-ASCII/extended Unicode characters.
30 |
31 | ## Usage
32 |
33 | ```js
34 | // Use Segmenter instead of Intl.Segmenter
35 | import { Segmenter } from '{%= name %}';
36 |
37 | const segmenter = new Segmenter('en', { granularity: 'grapheme' });
38 | const segments = [];
39 |
40 | // The segmenter.segment method is a generator
41 | for (const segment of segmenter.segment('Your input string here.')) {
42 | segments.push(segment);
43 | }
44 |
45 | // You can also use Array.from, but read the "Heads up" section first
46 | console.log(Array.from(segmenter.segment('Your input string here.')));
47 | ```
48 |
49 | ### Heads up!
50 |
51 | I recommend using manual iteration (traditional loops) if there's any chance the string will exceed a few hundred characters.
52 |
53 | **Note on Array.from's Iterator Handling**
54 |
55 | When `Array.from` processes an iterator/generator, it retains the entire iteration state in memory. Unlike a `for...of` loop, it can't process and discard items one by one. Instead, it:
56 |
57 | - Keeps the full generator state alive
58 | - Maintains the entire call stack for iteration
59 | - Holds all intermediate values
60 | - Builds up the final array
61 |
62 | This creates a deeper call stack and increased memory usage compared to manual iteration, where each step can be completed and garbage collected.
63 |
64 | ## API
65 |
66 | ### Segmenter
67 |
68 | **Params**
69 |
70 | - `language` **{String}**: A [BCP 47 language tag][tag], or an [Intl.Locale][locale] instance.
71 | - `options` **{Object}**: Supports all [Intl.Segmenter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/Segmenter#parameters) options, with an additional `maxChunkLength` that defaults to `100`.
72 |
73 | **Example**
74 |
75 | ```js
76 | const segmenter = new Segmenter('en', { maxChunkLength: 100 });
77 | ```
78 |
79 | ### .segment
80 |
81 | Segments the provided string into an iterable sequence of `Intl.Segment` objects, optimized for performance and memory management.
82 |
83 | **Params**
84 |
85 | - `input` **{String}**: The string to be segmented.
86 |
87 | **Returns**
88 |
89 | - **{Generator}**: Yields `Intl.Segment` objects.
90 |
91 | **Example**
92 |
93 | ```js
94 | const segmenter = new Segmenter('en', { localeMatcher: 'lookup' });
95 |
96 | for (const segment of segmenter.segment('This is a test')) {
97 | console.log(segment);
98 | }
99 | ```
100 |
101 | ### .findSafeBreakPoint
102 |
103 | Mostly an internal method, but documented here in case you need to use it directly, or override it in a subclass.
104 |
105 | This method determines a safe position to break the string into chunks for efficient processing without splitting essential non-ASCII/extended Unicode character groups.
106 |
107 | **Params**
108 |
109 | - `input` **{String}**: The string to analyze.
110 |
111 | **Returns**
112 |
113 | - **{Number}**: Position index to use for safely breaking the string.
114 |
115 | **Example**
116 |
117 | ```js
118 | const segmenter = new Segmenter();
119 | const breakPoint = segmenter.findSafeBreakPoint('This is a test');
120 | console.log(breakPoint); // e.g., 4
121 | ```
122 |
123 | ### .getSegments
124 |
125 | Returns all segments of the input string as an array, using the efficient generator from `.segment()`.
126 |
127 | **Params**
128 |
129 | - `input` **{String}**: The string to be segmented.
130 |
131 | **Returns**
132 |
133 | - **{Array}**: An array of `Intl.Segment` objects.
134 |
135 | **Example**
136 |
137 | ```js
138 | const segmenter = new Segmenter();
139 | const segments = segmenter.getSegments('This is a test');
140 | console.log(segments);
141 | // Returns:
142 | // [
143 | // { segment: 'T', index: 0, input: 'This is a test' },
144 | // { segment: 'h', index: 1, input: 'This is a test' },
145 | // { segment: 'i', index: 2, input: 'This is a test' },
146 | // { segment: 's', index: 3, input: 'This is a test' },
147 | // { segment: ' ', index: 4, input: 'This is a test' },
148 | // { segment: 'i', index: 5, input: 'This is a test' },
149 | // { segment: 's', index: 6, input: 'This is a test' },
150 | // { segment: ' ', index: 7, input: 'This is a test' },
151 | // { segment: 'a', index: 8, input: 'This is a test' },
152 | // { segment: ' ', index: 9, input: 'This is a test' },
153 | // { segment: 't', index: 10, input: 'This is a test' },
154 | // { segment: 'e', index: 11, input: 'This is a test' },
155 | // { segment: 's', index: 12, input: 'This is a test' },
156 | // { segment: 't', index: 13, input: 'This is a test' }
157 | // ]
158 | ```
159 |
160 | ### Segmenter.getSegments
161 |
162 | Static method for segmenting a string. Creates a `Segmenter` instance and returns the segments as an array.
163 |
164 | **Params**
165 |
166 | - `input` **{String}**: The string to be segmented.
167 | - `language` **{String}**: A [BCP 47 language tag][tag], or an [Intl.Locale][locale] instance.
168 | - `options` **{Object}**: _(optional)_ Intl.Segmenter options.
169 |
170 | **Returns**
171 |
172 | - **{Array}**: An array of `Intl.Segment` objects.
173 |
174 | **Example**
175 |
176 | ```js
177 | const segments = Segmenter.getSegments('This is a test', 'en');
178 | console.log(segments);
179 | ```
180 |
181 | ## FAQ
182 |
183 | In a nutshell, this library prevents maximum call stack exceeded exceptions caused by memory management issues in `Intl.Segmenter`, and improves performance by 50-500x over using `Intl.Segmenter` directly.
184 |
185 | **What does this do?**
186 |
187 | This library wraps `Intl.Segmenter` and serves as a drop-in replacement that not only improves performance by 50-500x over `Intl.Segmenter` directly, but prevents maximum call stack exceeded exceptions that predictably occur with long strings.
188 |
189 | Without this library, exceptions reliably occur with strings exceeding 20-50k in length, depending on the number of non-ASCII/extended Unicode characters. These characters significantly affect performance and trigger exceptions sooner.
190 |
191 | Simply import the library and use `Segmenter` instead of `Intl.Segmenter`.
192 |
193 | **Why use this?**
194 |
195 | If you use `Intl.Segmenter`, your application is at risk of being terminated due to maximum call stack exceed exceptions. To prevent the exception from happening, you need to either prevent input strings from exceeding a certain length, say 10k characters, or wrap `segment` method to iterate over longer strings.
196 |
197 | However, _this is not as trivial as it sounds_. If you limit the length of the input string, in theory this would still allow users to break their input into chunks, then programmatically loop over those chunks. But now you've created the potential to split on a non-ASCII/extended unicode character, completely negating the entire point of using `Intl.Segmenter` in the first place.
198 |
199 | Alternatively, you can use this library, since it solves those problems for you and ensures that `Intl.Segmenter` handles all characters correctly. This library not only improves performance by 50-500x over `Intl.Segmenter` directly, but it prevents maximum call stack exceeded exceptions that _consistently occur when long strings are passed_.
200 |
201 | **What is Intl.Segmenter?**
202 |
203 | The newly introduced (2024) built-in [Intl.Segmenter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter) object enables locale-sensitive text segmentation, enabling you to get meaningful items (graphemes, words or sentences) from a string.
204 |
205 | **What causes the exception?**
206 |
207 | As of Nov. 17, 2024, a maximum call stack exceeded exception occurs when using `Intl.Segmenter` on strings that exceed 40-60k characters. The avg. blog post is around 2,500-10,000 characters, so you'll only encounter the call stack error when working with longer strings. However, even on shorter strings you might notice performance issues.
208 |
209 | Notably, performance in `Intl.Segmenter` degrades geometrically as the number of non-ASCII/extended unicode characters present in string increases, same goes for when _when the exception occurs_.
210 |
211 | _(On a related note, stack traces from exceptions indicate that the issue is related to the way Node.js interacts with V8 and how memory management is occurring at the application level via Node.js. We're still looking into this.)_
212 |
213 | **Will the exception be fixed?**
214 |
215 | I'm not sure yet if this is a bug, or a limitation in `Intl.Segmenter`. But there has been an open [issue](https://issues.chromium.org/issues/326176949) about this for almost a year, and it doesn't seem to be a priority.
216 |
217 | Please [create an issue](../../issues) on this library if you have information or updates related to this issue.
218 |
219 | ## Comparison to Intl.Segmenter
220 |
221 | In this example, we compare the performance of `Segmenter` to `Intl.Segmenter` when processing a string with a length of 1200 characters.
222 |
223 | ```ts
224 | const text = ' 👨👩👧👦 🌍✨He👨👩👧👦llo 👨👩👧👦 world! 🌍✨'.repeat(1200);
225 |
226 | // With Intl.Segmenter
227 | const intlSegmenter = new Intl.Segmenter('en', { granularity: 'grapheme', localeMatcher: 'best fit' });
228 | console.time('total time');
229 | Array.from(intlSegmenter.segment(text));
230 | console.timeEnd('total time');
231 | // total time: 3.040s
232 |
233 | // With Segmenter
234 | const segmenter = new Segmenter('en', { granularity: 'grapheme', localeMatcher: 'best fit' });
235 | console.time('total time');
236 | Array.from(segmenter.segment(text));
237 | console.timeEnd('total time');
238 | // total time: 18.102ms
239 | ```
240 |
241 | Segmenter is ~167x faster than `Intl.Segmenter`. The performance difference would be even more pronounced with longer strings, but the call stack exceeded exception would prevent you from testing that.
242 |
243 |
244 | [tag]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/Segmenter#parameters
245 | [locale]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale
246 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # intl-segmenter [](https://www.npmjs.com/package/intl-segmenter) [](https://npmjs.org/package/intl-segmenter) [](https://npmjs.org/package/intl-segmenter)
2 |
3 | > A high-performance wrapper around `Intl.Segmenter` for efficient text segmentation. This class resolves memory handling issues seen with large strings and can enhance performance by 50-500x. Only ~60 loc and no dependencies.
4 |
5 | Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
6 |
7 | ## Install
8 |
9 | Install with [npm](https://www.npmjs.com/):
10 |
11 | ```sh
12 | $ npm install --save intl-segmenter
13 | ```
14 |
15 | Install with [pnpm](https://pnpm.io):
16 |
17 | ```sh
18 | $ pnpm install intl-segmenter
19 | ```
20 |
21 | ## Overview
22 |
23 | If you do any text processing, parsing, or formatting, especially for the terminal, you know the challenges of handling special characters, emojis, and extended Unicode characters.
24 |
25 | The [`Intl.Segmenter`](https://www.raymondcamden.com/2024/11/20/counting-words-with-intlsegmenter) object was introduced to simplify text segmentation and correctly handle these special characters. However, it has notable limitations and potential risks:
26 |
27 | * Predictable "Maximum call stack exceeded" exceptions occur when strings exceed 40-50k characters.
28 | * Performance degrades geometrically as the number of non-ASCII/extended Unicode characters increases.
29 |
30 | For context:
31 |
32 | * Blog posts average 2k-10k chars
33 | * Novels 450k-500k chars
34 | * This README ~7k chars
35 |
36 | This library wraps `Intl.Segmenter` to address these issues:
37 |
38 | * Handles strings up to millions of characters in length (tested to ~24m chars on M2 Macbook Pro).
39 | * Improves performance by 50-500x compared to direct `Intl.Segmenter` usage.
40 | * Prevents "Maximum call stack exceeded" exceptions that predictably occur with long strings over a certain length.
41 |
42 | Use this as a drop-in replacement for `Intl.Segmenter` when accurate text segmentation is needed, particularly for strings with non-ASCII/extended Unicode characters.
43 |
44 | ## Usage
45 |
46 | ```js
47 | // Use Segmenter instead of Intl.Segmenter
48 | import { Segmenter } from 'intl-segmenter';
49 |
50 | const segmenter = new Segmenter('en', { granularity: 'grapheme' });
51 | const segments = [];
52 |
53 | // The segmenter.segment method is a generator
54 | for (const segment of segmenter.segment('Your input string here.')) {
55 | segments.push(segment);
56 | }
57 |
58 | // You can also use Array.from, but read the "Heads up" section first
59 | console.log(Array.from(segmenter.segment('Your input string here.')));
60 | ```
61 |
62 | ### Heads up!
63 |
64 | I recommend using manual iteration (traditional loops) if there's any chance the string will exceed a few hundred characters.
65 |
66 | **Note on Array.from's Iterator Handling**
67 |
68 | When `Array.from` processes an iterator/generator, it retains the entire iteration state in memory. Unlike a `for...of` loop, it can't process and discard items one by one. Instead, it:
69 |
70 | * Keeps the full generator state alive
71 | * Maintains the entire call stack for iteration
72 | * Holds all intermediate values
73 | * Builds up the final array
74 |
75 | This creates a deeper call stack and increased memory usage compared to manual iteration, where each step can be completed and garbage collected.
76 |
77 | ## API
78 |
79 | ### Segmenter
80 |
81 | **Params**
82 |
83 | * `language` **{String}**: A [BCP 47 language tag](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/Segmenter#parameters), or an [Intl.Locale](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale) instance.
84 | * `options` **{Object}**: Supports all [Intl.Segmenter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/Segmenter#parameters) options, with an additional `maxChunkLength` that defaults to `100`.
85 |
86 | **Example**
87 |
88 | ```js
89 | const segmenter = new Segmenter('en', { maxChunkLength: 100 });
90 | ```
91 |
92 | ### .segment
93 |
94 | Segments the provided string into an iterable sequence of `Intl.Segment` objects, optimized for performance and memory management.
95 |
96 | **Params**
97 |
98 | * `input` **{String}**: The string to be segmented.
99 |
100 | **Returns**
101 |
102 | * **{Generator}**: Yields `Intl.Segment` objects.
103 |
104 | **Example**
105 |
106 | ```js
107 | const segmenter = new Segmenter('en', { localeMatcher: 'lookup' });
108 |
109 | for (const segment of segmenter.segment('This is a test')) {
110 | console.log(segment);
111 | }
112 | ```
113 |
114 | ### .findSafeBreakPoint
115 |
116 | Mostly an internal method, but documented here in case you need to use it directly, or override it in a subclass.
117 |
118 | This method determines a safe position to break the string into chunks for efficient processing without splitting essential non-ASCII/extended Unicode character groups.
119 |
120 | **Params**
121 |
122 | * `input` **{String}**: The string to analyze.
123 |
124 | **Returns**
125 |
126 | * **{Number}**: Position index to use for safely breaking the string.
127 |
128 | **Example**
129 |
130 | ```js
131 | const segmenter = new Segmenter();
132 | const breakPoint = segmenter.findSafeBreakPoint('This is a test');
133 | console.log(breakPoint); // e.g., 4
134 | ```
135 |
136 | ### .getSegments
137 |
138 | Returns all segments of the input string as an array, using the efficient generator from `.segment()`.
139 |
140 | **Params**
141 |
142 | * `input` **{String}**: The string to be segmented.
143 |
144 | **Returns**
145 |
146 | * **{Array}**: An array of `Intl.Segment` objects.
147 |
148 | **Example**
149 |
150 | ```js
151 | const segmenter = new Segmenter();
152 | const segments = segmenter.getSegments('This is a test');
153 | console.log(segments);
154 | // Returns:
155 | // [
156 | // { segment: 'T', index: 0, input: 'This is a test' },
157 | // { segment: 'h', index: 1, input: 'This is a test' },
158 | // { segment: 'i', index: 2, input: 'This is a test' },
159 | // { segment: 's', index: 3, input: 'This is a test' },
160 | // { segment: ' ', index: 4, input: 'This is a test' },
161 | // { segment: 'i', index: 5, input: 'This is a test' },
162 | // { segment: 's', index: 6, input: 'This is a test' },
163 | // { segment: ' ', index: 7, input: 'This is a test' },
164 | // { segment: 'a', index: 8, input: 'This is a test' },
165 | // { segment: ' ', index: 9, input: 'This is a test' },
166 | // { segment: 't', index: 10, input: 'This is a test' },
167 | // { segment: 'e', index: 11, input: 'This is a test' },
168 | // { segment: 's', index: 12, input: 'This is a test' },
169 | // { segment: 't', index: 13, input: 'This is a test' }
170 | // ]
171 | ```
172 |
173 | ### Segmenter.getSegments
174 |
175 | Static method for segmenting a string. Creates a `Segmenter` instance and returns the segments as an array.
176 |
177 | **Params**
178 |
179 | * `input` **{String}**: The string to be segmented.
180 | * `language` **{String}**: A [BCP 47 language tag](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/Segmenter#parameters), or an [Intl.Locale](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale) instance.
181 | * `options` **{Object}**: _(optional)_ Intl.Segmenter options.
182 |
183 | **Returns**
184 |
185 | * **{Array}**: An array of `Intl.Segment` objects.
186 |
187 | **Example**
188 |
189 | ```js
190 | const segments = Segmenter.getSegments('This is a test', 'en');
191 | console.log(segments);
192 | ```
193 |
194 | ## FAQ
195 |
196 | In a nutshell, this library prevents maximum call stack exceeded exceptions caused by memory management issues in `Intl.Segmenter`, and improves performance by 50-500x over using `Intl.Segmenter` directly.
197 |
198 | **What does this do?**
199 |
200 | This library wraps `Intl.Segmenter` and serves as a drop-in replacement that not only improves performance by 50-500x over `Intl.Segmenter` directly, but prevents maximum call stack exceeded exceptions that predictably occur with long strings.
201 |
202 | Without this library, exceptions reliably occur with strings exceeding 20-50k in length, depending on the number of non-ASCII/extended Unicode characters. These characters significantly affect performance and trigger exceptions sooner.
203 |
204 | Simply import the library and use `Segmenter` instead of `Intl.Segmenter`.
205 |
206 | **Why use this?**
207 |
208 | If you use `Intl.Segmenter`, your application is at risk of being terminated due to maximum call stack exceed exceptions. To prevent the exception from happening, you need to either prevent input strings from exceeding a certain length, say 10k characters, or wrap `segment` method to iterate over longer strings.
209 |
210 | However, _this is not as trivial as it sounds_. If you limit the length of the input string, in theory this would still allow users to break their input into chunks, then programmatically loop over those chunks. But now you've created the potential to split on a non-ASCII/extended unicode character, completely negating the entire point of using `Intl.Segmenter` in the first place.
211 |
212 | Alternatively, you can use this library, since it solves those problems for you and ensures that `Intl.Segmenter` handles all characters correctly. This library not only improves performance by 50-500x over `Intl.Segmenter` directly, but it prevents maximum call stack exceeded exceptions that _consistently occur when long strings are passed_.
213 |
214 | **What is Intl.Segmenter?**
215 |
216 | The newly introduced (2024) built-in [Intl.Segmenter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter) object enables locale-sensitive text segmentation, enabling you to get meaningful items (graphemes, words or sentences) from a string.
217 |
218 | **What causes the exception?**
219 |
220 | As of Nov. 17, 2024, a maximum call stack exceeded exception occurs when using `Intl.Segmenter` on strings that exceed 40-60k characters. The avg. blog post is around 2,500-10,000 characters, so you'll only encounter the call stack error when working with longer strings. However, even on shorter strings you might notice performance issues.
221 |
222 | Notably, performance in `Intl.Segmenter` degrades geometrically as the number of non-ASCII/extended unicode characters present in string increases, same goes for when _when the exception occurs_.
223 |
224 | _(On a related note, stack traces from exceptions indicate that the issue is related to the way Node.js interacts with V8 and how memory management is occurring at the application level via Node.js. We're still looking into this.)_
225 |
226 | **Will the exception be fixed?**
227 |
228 | I'm not sure yet if this is a bug, or a limitation in `Intl.Segmenter`. But there has been an open [issue](https://issues.chromium.org/issues/326176949) about this for almost a year, and it doesn't seem to be a priority.
229 |
230 | Please [create an issue](../../issues) on this library if you have information or updates related to this issue.
231 |
232 | ## Comparison to Intl.Segmenter
233 |
234 | In this example, we compare the performance of `Segmenter` to `Intl.Segmenter` when processing a string with a length of 1200 characters.
235 |
236 | ```ts
237 | const text = ' 👨👩👧👦 🌍✨He👨👩👧👦llo 👨👩👧👦 world! 🌍✨'.repeat(1200);
238 |
239 | // With Intl.Segmenter
240 | const intlSegmenter = new Intl.Segmenter('en', { granularity: 'grapheme', localeMatcher: 'best fit' });
241 | console.time('total time');
242 | Array.from(intlSegmenter.segment(text));
243 | console.timeEnd('total time');
244 | // total time: 3.040s
245 |
246 | // With Segmenter
247 | const segmenter = new Segmenter('en', { granularity: 'grapheme', localeMatcher: 'best fit' });
248 | console.time('total time');
249 | Array.from(segmenter.segment(text));
250 | console.timeEnd('total time');
251 | // total time: 18.102ms
252 | ```
253 |
254 | Segmenter is ~167x faster than `Intl.Segmenter`. The performance difference would be even more pronounced with longer strings, but the call stack exceeded exception would prevent you from testing that.
255 |
256 | ## About
257 |
258 |
259 | Contributing
260 |
261 | Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
262 |
263 |
264 |
265 |
266 | Running Tests
267 |
268 | Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
269 |
270 | ```sh
271 | $ npm install && npm test
272 | ```
273 |
274 |
275 |
276 |
277 | Building docs
278 |
279 | _(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
280 |
281 | To generate the readme, run the following command:
282 |
283 | ```sh
284 | $ npm install -g verbose/verb#dev verb-generate-readme && verb
285 | ```
286 |
287 |
288 |
289 | ### Author
290 |
291 | **Jon Schlinkert**
292 |
293 | * [GitHub Profile](https://github.com/jonschlinkert)
294 | * [Twitter Profile](https://twitter.com/jonschlinkert)
295 | * [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)
296 |
297 | ### License
298 |
299 | Copyright © 2025, [Jon Schlinkert](https://github.com/jonschlinkert).
300 | Released under the MIT License.
301 |
302 | ***
303 |
304 | _This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on January 26, 2025._
305 |
--------------------------------------------------------------------------------
/examples/Intl.Segmenter/iterator.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * HEADS UP!!!!
3 | *
4 | * This will cause a maximum call stack exceeded error if you change
5 | * the `repeat` value higher. This is due to limitations in
6 | * in `Intl.Segmenter`.
7 | */
8 |
9 | const getSegments = (text: string): string[] => {
10 | const segmenter = new Intl.Segmenter();
11 | const segments = [];
12 |
13 | for (const segment of segmenter.segment(text)) {
14 | segments.push(segment);
15 | }
16 |
17 | return segments;
18 | };
19 |
20 | console.time('total time');
21 | const text = 'Hello 👨👩👧👦 world! 🌍✨ a'.repeat(1700);
22 | const segments = getSegments(text);
23 | console.timeEnd('total time');
24 |
25 | // M2 MacBook Pro:
26 | // total time: 1.964s
27 | // 32,300 segments
28 |
29 | console.log(segments.length.toLocaleString(), 'segments');
30 |
31 |
--------------------------------------------------------------------------------
/examples/Intl.Segmenter/segment.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * HEADS UP!!!!
3 | *
4 | * This will cause a maximum call stack exceeded error if you change
5 | * the `repeat` value higher than ~1,270 or so. This is due to limitations
6 | * in in `Intl.Segmenter`.
7 | */
8 |
9 | const repeat = 1_200;
10 | const text = ' 👨👩👧👦 🌍✨He👨👩👧👦llo 👨👩👧👦 world! 🌍✨'.repeat(repeat);
11 | console.log(text.length.toLocaleString(), 'length');
12 |
13 | const segmenter = new Intl.Segmenter('en', { granularity: 'grapheme', localeMatcher: 'best fit' });
14 | console.time('total time');
15 | const segments = Array.from(segmenter.segment(text));
16 | console.timeEnd('total time');
17 | console.log(segments.length.toLocaleString(), 'segments');
18 | // M2 MacBook Pro:
19 | // total time: 3.019s
20 | // 27,600 segments
21 |
--------------------------------------------------------------------------------
/examples/Segmenter/array-from.ts:
--------------------------------------------------------------------------------
1 | import { Segmenter } from '~/Segmenter';
2 |
3 | const segmenter = new Segmenter('en', { granularity: 'grapheme' });
4 | const segments = Array.from(segmenter.segment('Your input string here.'));
5 | const graphemes = segments.map(segment => segment.segment);
6 | console.log(graphemes);
7 |
--------------------------------------------------------------------------------
/examples/Segmenter/getSegments-static.ts:
--------------------------------------------------------------------------------
1 | import { Segmenter } from '~/Segmenter';
2 |
3 | const text = 'Hello 👨👩👧👦 world! 🌍✨ a'.repeat(10_000);
4 | const segments = Segmenter.getSegments(text, 'en', {
5 | granularity: 'word',
6 | localeMatcher: 'best fit'
7 | });
8 |
9 | console.log(segments.map(segment => segment.segment));
10 |
--------------------------------------------------------------------------------
/examples/Segmenter/getSegments.ts:
--------------------------------------------------------------------------------
1 | import { Segmenter } from '~/Segmenter';
2 |
3 | const segmenter = new Segmenter('en', { granularity: 'word' });
4 | const text = 'Hello 👨👩👧👦 world! 🌍✨ a'.repeat(100_000);
5 |
6 | console.time('total time');
7 | const segments = segmenter.getSegments(text);
8 | console.timeEnd('total time');
9 | // M2 MacBook Pro:
10 | // total time: 1.359s
11 | // 1,900,000 segments
12 |
13 | console.log(segments.length.toLocaleString(), 'segments');
14 |
--------------------------------------------------------------------------------
/examples/Segmenter/iterator-long-string.ts:
--------------------------------------------------------------------------------
1 | import { Segmenter } from '~/Segmenter';
2 |
3 | const segmenter = new Segmenter('en', { granularity: 'grapheme' });
4 | const text = 'Hello 👨👩👧👦 world! 🌍✨ a'.repeat(800_700);
5 | console.log(text.length.toLocaleString(), 'length');
6 |
7 | console.time('total time');
8 | const segments = [];
9 | for (const segment of segmenter.segment(text)) {
10 | segments.push(segment);
11 | }
12 |
13 | console.timeEnd('total time');
14 | // M2 MacBook Pro:
15 | // 3,021,000 length
16 | // total time: 1.351s
17 | // 1,913,300 segments
18 |
19 | console.log(segments.length.toLocaleString(), 'segments');
20 |
--------------------------------------------------------------------------------
/examples/Segmenter/iterator.ts:
--------------------------------------------------------------------------------
1 | import { Segmenter } from '~/Segmenter';
2 |
3 | const segmenter = new Segmenter('fr', { granularity: 'grapheme' });
4 | console.log(segmenter.resolvedOptions());
5 |
6 | const text = 'Hello 👨👩👧👦 world! 🌍✨ a'.repeat(1_700);
7 | console.log(text.length.toLocaleString(), 'length');
8 |
9 | console.time('total time');
10 | const segments = [];
11 | for (const segment of segmenter.segment(text)) {
12 | segments.push(segment);
13 | }
14 |
15 | console.timeEnd('total time');
16 | // M2 MacBook Pro:
17 | // total time: 28.986ms (~68x faster than Intl.Segmenter)
18 | // 32,300 segments
19 |
20 | console.log(segments.length.toLocaleString(), 'segments');
21 |
--------------------------------------------------------------------------------
/examples/Segmenter/segment.ts:
--------------------------------------------------------------------------------
1 | import { Segmenter } from '~/Segmenter';
2 |
3 | const text = 'Hello 👨👩👧👦 world! 🌍✨ a'.repeat(1200);
4 | console.log(text.length.toLocaleString(), 'length');
5 | const segmenter = new Segmenter('en', { granularity: 'grapheme', localeMatcher: 'best fit' });
6 | console.time('total time');
7 | const segments = Array.from(segmenter.segment(text));
8 | console.timeEnd('total time');
9 | console.log(segments.length.toLocaleString(), 'segments');
10 | // M2 MacBook Pro:
11 | // total time: 22.604ms (~130x faster than Intl.Segmenter)
12 | // 22,800 segments
13 |
--------------------------------------------------------------------------------
/examples/example.ts:
--------------------------------------------------------------------------------
1 | import { Segmenter } from '~/Segmenter';
2 |
3 | const segmenter = new Segmenter('en', { granularity: 'grapheme' });
4 |
5 | for (const segment of segmenter.segment('Your input string here.')) {
6 | console.log(segment);
7 | }
8 |
--------------------------------------------------------------------------------
/index.ts:
--------------------------------------------------------------------------------
1 | export * from './src/Segmenter';
2 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "intl-segmenter",
3 | "version": "1.0.0",
4 | "description": "A high-performance wrapper around `Intl.Segmenter` for efficient text segmentation. This class resolves memory handling issues seen with large strings and can enhance performance by 50-500x. Only ~70 loc (with comments) and no dependencies.",
5 | "license": "MIT",
6 | "author": {
7 | "name": "Jon Schlinkert",
8 | "email": "jon.schlinkert@sellside.com",
9 | "url": "https://github.com/jonschlinkert"
10 | },
11 | "repository": "jonschlinkert/intl-segmenter",
12 | "homepage": "https://github.com/jonschlinkert/intl-segmenter",
13 | "bugs": {
14 | "url": "https://github.com/jonschlinkert/intl-segmenter/issues"
15 | },
16 | "scripts": {
17 | "eslint": "npx eslint --ext .ts .",
18 | "test": "ts-mocha -r esbuild-register 'test/**/*.ts'",
19 | "tsup": "npx tsup"
20 | },
21 | "main": "dist/index.js",
22 | "module": "dist/index.mjs",
23 | "files": [
24 | "dist"
25 | ],
26 | "exports": {
27 | ".": {
28 | "import": "./dist/index.mjs",
29 | "require": "./dist/index.js"
30 | },
31 | "./*": {
32 | "import": "./dist/*.mjs",
33 | "require": "./dist/*.js"
34 | }
35 | },
36 | "devDependencies": {
37 | "@types/node": "^22.10.10",
38 | "@typescript-eslint/eslint-plugin": "^8.14.0",
39 | "@typescript-eslint/parser": "^8.14.0",
40 | "esbuild-register": "^3.5.0",
41 | "eslint": "^8.57.0",
42 | "gulp-format-md": "^2.0.0",
43 | "prettier": "^3.3.3",
44 | "ts-mocha": "^10.0.0",
45 | "ts-node": "^10.9.2",
46 | "tsconfig-paths": "^4.2.0",
47 | "tsup": "^8.0.2",
48 | "typescript": "^5.4.5"
49 | },
50 | "keywords": [
51 | "ansi",
52 | "ascii",
53 | "character",
54 | "characters",
55 | "chunk",
56 | "chunks",
57 | "emoji",
58 | "emojis",
59 | "graphemes",
60 | "intl",
61 | "segment",
62 | "segmentation",
63 | "segmenter",
64 | "sentences",
65 | "split",
66 | "string",
67 | "strings",
68 | "terminal",
69 | "text",
70 | "tokenization",
71 | "tokenize",
72 | "unicode",
73 | "utf-8",
74 | "utf16",
75 | "utf32",
76 | "utf8",
77 | "words"
78 | ],
79 | "verb": {
80 | "toc": false,
81 | "layout": "default",
82 | "tasks": [
83 | "readme"
84 | ],
85 | "plugins": [
86 | "gulp-format-md"
87 | ],
88 | "reflinks": [
89 | "verb"
90 | ],
91 | "lint": {
92 | "reflinks": true
93 | }
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | devDependencies:
11 | '@types/node':
12 | specifier: ^22.10.10
13 | version: 22.10.10
14 | '@typescript-eslint/eslint-plugin':
15 | specifier: ^8.14.0
16 | version: 8.14.0(@typescript-eslint/parser@8.14.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)
17 | '@typescript-eslint/parser':
18 | specifier: ^8.14.0
19 | version: 8.14.0(eslint@8.57.1)(typescript@5.6.3)
20 | esbuild-register:
21 | specifier: ^3.5.0
22 | version: 3.6.0(esbuild@0.24.0)
23 | eslint:
24 | specifier: ^8.57.0
25 | version: 8.57.1
26 | gulp-format-md:
27 | specifier: ^2.0.0
28 | version: 2.0.0
29 | prettier:
30 | specifier: ^3.3.3
31 | version: 3.3.3
32 | ts-mocha:
33 | specifier: ^10.0.0
34 | version: 10.0.0(mocha@10.8.2)
35 | ts-node:
36 | specifier: ^10.9.2
37 | version: 10.9.2(@types/node@22.10.10)(typescript@5.6.3)
38 | tsconfig-paths:
39 | specifier: ^4.2.0
40 | version: 4.2.0
41 | tsup:
42 | specifier: ^8.0.2
43 | version: 8.3.5(typescript@5.6.3)
44 | typescript:
45 | specifier: ^5.4.5
46 | version: 5.6.3
47 |
48 | packages:
49 |
50 | '@cspotcode/source-map-support@0.8.1':
51 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
52 | engines: {node: '>=12'}
53 |
54 | '@esbuild/aix-ppc64@0.24.0':
55 | resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==}
56 | engines: {node: '>=18'}
57 | cpu: [ppc64]
58 | os: [aix]
59 |
60 | '@esbuild/android-arm64@0.24.0':
61 | resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==}
62 | engines: {node: '>=18'}
63 | cpu: [arm64]
64 | os: [android]
65 |
66 | '@esbuild/android-arm@0.24.0':
67 | resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==}
68 | engines: {node: '>=18'}
69 | cpu: [arm]
70 | os: [android]
71 |
72 | '@esbuild/android-x64@0.24.0':
73 | resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==}
74 | engines: {node: '>=18'}
75 | cpu: [x64]
76 | os: [android]
77 |
78 | '@esbuild/darwin-arm64@0.24.0':
79 | resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==}
80 | engines: {node: '>=18'}
81 | cpu: [arm64]
82 | os: [darwin]
83 |
84 | '@esbuild/darwin-x64@0.24.0':
85 | resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==}
86 | engines: {node: '>=18'}
87 | cpu: [x64]
88 | os: [darwin]
89 |
90 | '@esbuild/freebsd-arm64@0.24.0':
91 | resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==}
92 | engines: {node: '>=18'}
93 | cpu: [arm64]
94 | os: [freebsd]
95 |
96 | '@esbuild/freebsd-x64@0.24.0':
97 | resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==}
98 | engines: {node: '>=18'}
99 | cpu: [x64]
100 | os: [freebsd]
101 |
102 | '@esbuild/linux-arm64@0.24.0':
103 | resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==}
104 | engines: {node: '>=18'}
105 | cpu: [arm64]
106 | os: [linux]
107 |
108 | '@esbuild/linux-arm@0.24.0':
109 | resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==}
110 | engines: {node: '>=18'}
111 | cpu: [arm]
112 | os: [linux]
113 |
114 | '@esbuild/linux-ia32@0.24.0':
115 | resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==}
116 | engines: {node: '>=18'}
117 | cpu: [ia32]
118 | os: [linux]
119 |
120 | '@esbuild/linux-loong64@0.24.0':
121 | resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==}
122 | engines: {node: '>=18'}
123 | cpu: [loong64]
124 | os: [linux]
125 |
126 | '@esbuild/linux-mips64el@0.24.0':
127 | resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==}
128 | engines: {node: '>=18'}
129 | cpu: [mips64el]
130 | os: [linux]
131 |
132 | '@esbuild/linux-ppc64@0.24.0':
133 | resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==}
134 | engines: {node: '>=18'}
135 | cpu: [ppc64]
136 | os: [linux]
137 |
138 | '@esbuild/linux-riscv64@0.24.0':
139 | resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==}
140 | engines: {node: '>=18'}
141 | cpu: [riscv64]
142 | os: [linux]
143 |
144 | '@esbuild/linux-s390x@0.24.0':
145 | resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==}
146 | engines: {node: '>=18'}
147 | cpu: [s390x]
148 | os: [linux]
149 |
150 | '@esbuild/linux-x64@0.24.0':
151 | resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==}
152 | engines: {node: '>=18'}
153 | cpu: [x64]
154 | os: [linux]
155 |
156 | '@esbuild/netbsd-x64@0.24.0':
157 | resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==}
158 | engines: {node: '>=18'}
159 | cpu: [x64]
160 | os: [netbsd]
161 |
162 | '@esbuild/openbsd-arm64@0.24.0':
163 | resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==}
164 | engines: {node: '>=18'}
165 | cpu: [arm64]
166 | os: [openbsd]
167 |
168 | '@esbuild/openbsd-x64@0.24.0':
169 | resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==}
170 | engines: {node: '>=18'}
171 | cpu: [x64]
172 | os: [openbsd]
173 |
174 | '@esbuild/sunos-x64@0.24.0':
175 | resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==}
176 | engines: {node: '>=18'}
177 | cpu: [x64]
178 | os: [sunos]
179 |
180 | '@esbuild/win32-arm64@0.24.0':
181 | resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==}
182 | engines: {node: '>=18'}
183 | cpu: [arm64]
184 | os: [win32]
185 |
186 | '@esbuild/win32-ia32@0.24.0':
187 | resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==}
188 | engines: {node: '>=18'}
189 | cpu: [ia32]
190 | os: [win32]
191 |
192 | '@esbuild/win32-x64@0.24.0':
193 | resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==}
194 | engines: {node: '>=18'}
195 | cpu: [x64]
196 | os: [win32]
197 |
198 | '@eslint-community/eslint-utils@4.4.1':
199 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
200 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
201 | peerDependencies:
202 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
203 |
204 | '@eslint-community/regexpp@4.12.1':
205 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
206 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
207 |
208 | '@eslint/eslintrc@2.1.4':
209 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
210 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
211 |
212 | '@eslint/js@8.57.1':
213 | resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==}
214 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
215 |
216 | '@humanwhocodes/config-array@0.13.0':
217 | resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==}
218 | engines: {node: '>=10.10.0'}
219 | deprecated: Use @eslint/config-array instead
220 |
221 | '@humanwhocodes/module-importer@1.0.1':
222 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
223 | engines: {node: '>=12.22'}
224 |
225 | '@humanwhocodes/object-schema@2.0.3':
226 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
227 | deprecated: Use @eslint/object-schema instead
228 |
229 | '@isaacs/cliui@8.0.2':
230 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
231 | engines: {node: '>=12'}
232 |
233 | '@jridgewell/gen-mapping@0.3.5':
234 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
235 | engines: {node: '>=6.0.0'}
236 |
237 | '@jridgewell/resolve-uri@3.1.2':
238 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
239 | engines: {node: '>=6.0.0'}
240 |
241 | '@jridgewell/set-array@1.2.1':
242 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
243 | engines: {node: '>=6.0.0'}
244 |
245 | '@jridgewell/sourcemap-codec@1.5.0':
246 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
247 |
248 | '@jridgewell/trace-mapping@0.3.25':
249 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
250 |
251 | '@jridgewell/trace-mapping@0.3.9':
252 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
253 |
254 | '@nodelib/fs.scandir@2.1.5':
255 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
256 | engines: {node: '>= 8'}
257 |
258 | '@nodelib/fs.stat@2.0.5':
259 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
260 | engines: {node: '>= 8'}
261 |
262 | '@nodelib/fs.walk@1.2.8':
263 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
264 | engines: {node: '>= 8'}
265 |
266 | '@pkgjs/parseargs@0.11.0':
267 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
268 | engines: {node: '>=14'}
269 |
270 | '@rollup/rollup-android-arm-eabi@4.27.2':
271 | resolution: {integrity: sha512-Tj+j7Pyzd15wAdSJswvs5CJzJNV+qqSUcr/aCD+jpQSBtXvGnV0pnrjoc8zFTe9fcKCatkpFpOO7yAzpO998HA==}
272 | cpu: [arm]
273 | os: [android]
274 |
275 | '@rollup/rollup-android-arm64@4.27.2':
276 | resolution: {integrity: sha512-xsPeJgh2ThBpUqlLgRfiVYBEf/P1nWlWvReG+aBWfNv3XEBpa6ZCmxSVnxJgLgkNz4IbxpLy64h2gCmAAQLneQ==}
277 | cpu: [arm64]
278 | os: [android]
279 |
280 | '@rollup/rollup-darwin-arm64@4.27.2':
281 | resolution: {integrity: sha512-KnXU4m9MywuZFedL35Z3PuwiTSn/yqRIhrEA9j+7OSkji39NzVkgxuxTYg5F8ryGysq4iFADaU5osSizMXhU2A==}
282 | cpu: [arm64]
283 | os: [darwin]
284 |
285 | '@rollup/rollup-darwin-x64@4.27.2':
286 | resolution: {integrity: sha512-Hj77A3yTvUeCIx/Vi+4d4IbYhyTwtHj07lVzUgpUq9YpJSEiGJj4vXMKwzJ3w5zp5v3PFvpJNgc/J31smZey6g==}
287 | cpu: [x64]
288 | os: [darwin]
289 |
290 | '@rollup/rollup-freebsd-arm64@4.27.2':
291 | resolution: {integrity: sha512-RjgKf5C3xbn8gxvCm5VgKZ4nn0pRAIe90J0/fdHUsgztd3+Zesb2lm2+r6uX4prV2eUByuxJNdt647/1KPRq5g==}
292 | cpu: [arm64]
293 | os: [freebsd]
294 |
295 | '@rollup/rollup-freebsd-x64@4.27.2':
296 | resolution: {integrity: sha512-duq21FoXwQtuws+V9H6UZ+eCBc7fxSpMK1GQINKn3fAyd9DFYKPJNcUhdIKOrMFjLEJgQskoMoiuizMt+dl20g==}
297 | cpu: [x64]
298 | os: [freebsd]
299 |
300 | '@rollup/rollup-linux-arm-gnueabihf@4.27.2':
301 | resolution: {integrity: sha512-6npqOKEPRZkLrMcvyC/32OzJ2srdPzCylJjiTJT2c0bwwSGm7nz2F9mNQ1WrAqCBZROcQn91Fno+khFhVijmFA==}
302 | cpu: [arm]
303 | os: [linux]
304 |
305 | '@rollup/rollup-linux-arm-musleabihf@4.27.2':
306 | resolution: {integrity: sha512-V9Xg6eXtgBtHq2jnuQwM/jr2mwe2EycnopO8cbOvpzFuySCGtKlPCI3Hj9xup/pJK5Q0388qfZZy2DqV2J8ftw==}
307 | cpu: [arm]
308 | os: [linux]
309 |
310 | '@rollup/rollup-linux-arm64-gnu@4.27.2':
311 | resolution: {integrity: sha512-uCFX9gtZJoQl2xDTpRdseYuNqyKkuMDtH6zSrBTA28yTfKyjN9hQ2B04N5ynR8ILCoSDOrG/Eg+J2TtJ1e/CSA==}
312 | cpu: [arm64]
313 | os: [linux]
314 |
315 | '@rollup/rollup-linux-arm64-musl@4.27.2':
316 | resolution: {integrity: sha512-/PU9P+7Rkz8JFYDHIi+xzHabOu9qEWR07L5nWLIUsvserrxegZExKCi2jhMZRd0ATdboKylu/K5yAXbp7fYFvA==}
317 | cpu: [arm64]
318 | os: [linux]
319 |
320 | '@rollup/rollup-linux-powerpc64le-gnu@4.27.2':
321 | resolution: {integrity: sha512-eCHmol/dT5odMYi/N0R0HC8V8QE40rEpkyje/ZAXJYNNoSfrObOvG/Mn+s1F/FJyB7co7UQZZf6FuWnN6a7f4g==}
322 | cpu: [ppc64]
323 | os: [linux]
324 |
325 | '@rollup/rollup-linux-riscv64-gnu@4.27.2':
326 | resolution: {integrity: sha512-DEP3Njr9/ADDln3kNi76PXonLMSSMiCir0VHXxmGSHxCxDfQ70oWjHcJGfiBugzaqmYdTC7Y+8Int6qbnxPBIQ==}
327 | cpu: [riscv64]
328 | os: [linux]
329 |
330 | '@rollup/rollup-linux-s390x-gnu@4.27.2':
331 | resolution: {integrity: sha512-NHGo5i6IE/PtEPh5m0yw5OmPMpesFnzMIS/lzvN5vknnC1sXM5Z/id5VgcNPgpD+wHmIcuYYgW+Q53v+9s96lQ==}
332 | cpu: [s390x]
333 | os: [linux]
334 |
335 | '@rollup/rollup-linux-x64-gnu@4.27.2':
336 | resolution: {integrity: sha512-PaW2DY5Tan+IFvNJGHDmUrORadbe/Ceh8tQxi8cmdQVCCYsLoQo2cuaSj+AU+YRX8M4ivS2vJ9UGaxfuNN7gmg==}
337 | cpu: [x64]
338 | os: [linux]
339 |
340 | '@rollup/rollup-linux-x64-musl@4.27.2':
341 | resolution: {integrity: sha512-dOlWEMg2gI91Qx5I/HYqOD6iqlJspxLcS4Zlg3vjk1srE67z5T2Uz91yg/qA8sY0XcwQrFzWWiZhMNERylLrpQ==}
342 | cpu: [x64]
343 | os: [linux]
344 |
345 | '@rollup/rollup-win32-arm64-msvc@4.27.2':
346 | resolution: {integrity: sha512-euMIv/4x5Y2/ImlbGl88mwKNXDsvzbWUlT7DFky76z2keajCtcbAsN9LUdmk31hAoVmJJYSThgdA0EsPeTr1+w==}
347 | cpu: [arm64]
348 | os: [win32]
349 |
350 | '@rollup/rollup-win32-ia32-msvc@4.27.2':
351 | resolution: {integrity: sha512-RsnE6LQkUHlkC10RKngtHNLxb7scFykEbEwOFDjr3CeCMG+Rr+cKqlkKc2/wJ1u4u990urRHCbjz31x84PBrSQ==}
352 | cpu: [ia32]
353 | os: [win32]
354 |
355 | '@rollup/rollup-win32-x64-msvc@4.27.2':
356 | resolution: {integrity: sha512-foJM5vv+z2KQmn7emYdDLyTbkoO5bkHZE1oth2tWbQNGW7mX32d46Hz6T0MqXdWS2vBZhaEtHqdy9WYwGfiliA==}
357 | cpu: [x64]
358 | os: [win32]
359 |
360 | '@tsconfig/node10@1.0.11':
361 | resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
362 |
363 | '@tsconfig/node12@1.0.11':
364 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
365 |
366 | '@tsconfig/node14@1.0.3':
367 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
368 |
369 | '@tsconfig/node16@1.0.4':
370 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
371 |
372 | '@types/estree@1.0.6':
373 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
374 |
375 | '@types/json5@0.0.29':
376 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
377 |
378 | '@types/node@22.10.10':
379 | resolution: {integrity: sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==}
380 |
381 | '@typescript-eslint/eslint-plugin@8.14.0':
382 | resolution: {integrity: sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==}
383 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
384 | peerDependencies:
385 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
386 | eslint: ^8.57.0 || ^9.0.0
387 | typescript: '*'
388 | peerDependenciesMeta:
389 | typescript:
390 | optional: true
391 |
392 | '@typescript-eslint/parser@8.14.0':
393 | resolution: {integrity: sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==}
394 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
395 | peerDependencies:
396 | eslint: ^8.57.0 || ^9.0.0
397 | typescript: '*'
398 | peerDependenciesMeta:
399 | typescript:
400 | optional: true
401 |
402 | '@typescript-eslint/scope-manager@8.14.0':
403 | resolution: {integrity: sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==}
404 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
405 |
406 | '@typescript-eslint/type-utils@8.14.0':
407 | resolution: {integrity: sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==}
408 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
409 | peerDependencies:
410 | typescript: '*'
411 | peerDependenciesMeta:
412 | typescript:
413 | optional: true
414 |
415 | '@typescript-eslint/types@8.14.0':
416 | resolution: {integrity: sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==}
417 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
418 |
419 | '@typescript-eslint/typescript-estree@8.14.0':
420 | resolution: {integrity: sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==}
421 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
422 | peerDependencies:
423 | typescript: '*'
424 | peerDependenciesMeta:
425 | typescript:
426 | optional: true
427 |
428 | '@typescript-eslint/utils@8.14.0':
429 | resolution: {integrity: sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==}
430 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
431 | peerDependencies:
432 | eslint: ^8.57.0 || ^9.0.0
433 |
434 | '@typescript-eslint/visitor-keys@8.14.0':
435 | resolution: {integrity: sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==}
436 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
437 |
438 | '@ungap/structured-clone@1.2.0':
439 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
440 |
441 | acorn-jsx@5.3.2:
442 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
443 | peerDependencies:
444 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
445 |
446 | acorn-walk@8.3.4:
447 | resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
448 | engines: {node: '>=0.4.0'}
449 |
450 | acorn@8.14.0:
451 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
452 | engines: {node: '>=0.4.0'}
453 | hasBin: true
454 |
455 | ajv@6.12.6:
456 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
457 |
458 | ansi-colors@4.1.3:
459 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
460 | engines: {node: '>=6'}
461 |
462 | ansi-regex@5.0.1:
463 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
464 | engines: {node: '>=8'}
465 |
466 | ansi-regex@6.1.0:
467 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
468 | engines: {node: '>=12'}
469 |
470 | ansi-styles@4.3.0:
471 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
472 | engines: {node: '>=8'}
473 |
474 | ansi-styles@6.2.1:
475 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
476 | engines: {node: '>=12'}
477 |
478 | any-promise@1.3.0:
479 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
480 |
481 | anymatch@3.1.3:
482 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
483 | engines: {node: '>= 8'}
484 |
485 | arg@4.1.3:
486 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
487 |
488 | argparse@1.0.10:
489 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
490 |
491 | argparse@2.0.1:
492 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
493 |
494 | arrify@1.0.1:
495 | resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
496 | engines: {node: '>=0.10.0'}
497 |
498 | autolinker@0.28.1:
499 | resolution: {integrity: sha512-zQAFO1Dlsn69eXaO6+7YZc+v84aquQKbwpzCE3L0stj56ERn9hutFxPopViLjo9G+rWwjozRhgS5KJ25Xy19cQ==}
500 |
501 | balanced-match@1.0.2:
502 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
503 |
504 | binary-extensions@2.3.0:
505 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
506 | engines: {node: '>=8'}
507 |
508 | brace-expansion@1.1.11:
509 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
510 |
511 | brace-expansion@2.0.1:
512 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
513 |
514 | braces@3.0.3:
515 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
516 | engines: {node: '>=8'}
517 |
518 | browser-stdout@1.3.1:
519 | resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
520 |
521 | buffer-from@1.1.2:
522 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
523 |
524 | bundle-require@5.0.0:
525 | resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==}
526 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
527 | peerDependencies:
528 | esbuild: '>=0.18'
529 |
530 | cac@6.7.14:
531 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
532 | engines: {node: '>=8'}
533 |
534 | callsites@3.1.0:
535 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
536 | engines: {node: '>=6'}
537 |
538 | camelcase@6.3.0:
539 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
540 | engines: {node: '>=10'}
541 |
542 | chalk@4.1.2:
543 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
544 | engines: {node: '>=10'}
545 |
546 | chokidar@3.6.0:
547 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
548 | engines: {node: '>= 8.10.0'}
549 |
550 | chokidar@4.0.1:
551 | resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==}
552 | engines: {node: '>= 14.16.0'}
553 |
554 | cliui@7.0.4:
555 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
556 |
557 | color-convert@2.0.1:
558 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
559 | engines: {node: '>=7.0.0'}
560 |
561 | color-name@1.1.4:
562 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
563 |
564 | commander@4.1.1:
565 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
566 | engines: {node: '>= 6'}
567 |
568 | concat-map@0.0.1:
569 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
570 |
571 | concat-with-sourcemaps@1.1.0:
572 | resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==}
573 |
574 | consola@3.2.3:
575 | resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
576 | engines: {node: ^14.18.0 || >=16.10.0}
577 |
578 | core-util-is@1.0.3:
579 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
580 |
581 | create-require@1.1.1:
582 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
583 |
584 | cross-spawn@7.0.5:
585 | resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==}
586 | engines: {node: '>= 8'}
587 |
588 | debug@4.3.7:
589 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
590 | engines: {node: '>=6.0'}
591 | peerDependencies:
592 | supports-color: '*'
593 | peerDependenciesMeta:
594 | supports-color:
595 | optional: true
596 |
597 | decamelize@4.0.0:
598 | resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
599 | engines: {node: '>=10'}
600 |
601 | deep-is@0.1.4:
602 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
603 |
604 | diff@3.5.0:
605 | resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
606 | engines: {node: '>=0.3.1'}
607 |
608 | diff@4.0.2:
609 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
610 | engines: {node: '>=0.3.1'}
611 |
612 | diff@5.2.0:
613 | resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
614 | engines: {node: '>=0.3.1'}
615 |
616 | doctrine@3.0.0:
617 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
618 | engines: {node: '>=6.0.0'}
619 |
620 | eastasianwidth@0.2.0:
621 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
622 |
623 | emoji-regex@8.0.0:
624 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
625 |
626 | emoji-regex@9.2.2:
627 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
628 |
629 | esbuild-register@3.6.0:
630 | resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==}
631 | peerDependencies:
632 | esbuild: '>=0.12 <1'
633 |
634 | esbuild@0.24.0:
635 | resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==}
636 | engines: {node: '>=18'}
637 | hasBin: true
638 |
639 | escalade@3.2.0:
640 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
641 | engines: {node: '>=6'}
642 |
643 | escape-string-regexp@4.0.0:
644 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
645 | engines: {node: '>=10'}
646 |
647 | eslint-scope@7.2.2:
648 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
649 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
650 |
651 | eslint-visitor-keys@3.4.3:
652 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
653 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
654 |
655 | eslint@8.57.1:
656 | resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
657 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
658 | deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
659 | hasBin: true
660 |
661 | espree@9.6.1:
662 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
663 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
664 |
665 | esquery@1.6.0:
666 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
667 | engines: {node: '>=0.10'}
668 |
669 | esrecurse@4.3.0:
670 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
671 | engines: {node: '>=4.0'}
672 |
673 | estraverse@5.3.0:
674 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
675 | engines: {node: '>=4.0'}
676 |
677 | esutils@2.0.3:
678 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
679 | engines: {node: '>=0.10.0'}
680 |
681 | extend-shallow@2.0.1:
682 | resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
683 | engines: {node: '>=0.10.0'}
684 |
685 | fast-deep-equal@3.1.3:
686 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
687 |
688 | fast-glob@3.3.2:
689 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
690 | engines: {node: '>=8.6.0'}
691 |
692 | fast-json-stable-stringify@2.1.0:
693 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
694 |
695 | fast-levenshtein@2.0.6:
696 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
697 |
698 | fastq@1.17.1:
699 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
700 |
701 | fdir@6.4.2:
702 | resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==}
703 | peerDependencies:
704 | picomatch: ^3 || ^4
705 | peerDependenciesMeta:
706 | picomatch:
707 | optional: true
708 |
709 | file-entry-cache@6.0.1:
710 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
711 | engines: {node: ^10.12.0 || >=12.0.0}
712 |
713 | fill-range@6.0.0:
714 | resolution: {integrity: sha512-HaePWycCxz/O/VsefR6fRhhZ+64gSwUAy5GIN1gX+8Z+JPFWvNsz2qaeYLq/hS3RgC06MlkZFSE+4UObHvbpXw==}
715 | engines: {node: '>=4.0'}
716 |
717 | fill-range@7.1.1:
718 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
719 | engines: {node: '>=8'}
720 |
721 | find-up@5.0.0:
722 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
723 | engines: {node: '>=10'}
724 |
725 | flat-cache@3.2.0:
726 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
727 | engines: {node: ^10.12.0 || >=12.0.0}
728 |
729 | flat@5.0.2:
730 | resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
731 | hasBin: true
732 |
733 | flatted@3.3.1:
734 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
735 |
736 | foreground-child@3.3.0:
737 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
738 | engines: {node: '>=14'}
739 |
740 | fs.realpath@1.0.0:
741 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
742 |
743 | fsevents@2.3.3:
744 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
745 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
746 | os: [darwin]
747 |
748 | get-caller-file@2.0.5:
749 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
750 | engines: {node: 6.* || 8.* || >= 10.*}
751 |
752 | gfm-code-block-regex@1.0.0:
753 | resolution: {integrity: sha512-aP0XZhL1LNyCT3r89k4MfUCT5FYcUAWbBb2HmFlBvOgYVtDXGYqyG6pRmxwJqwbLRGyK/kdt8IrsJVmuxPVvDw==}
754 | engines: {node: '>=0.10.0'}
755 |
756 | gfm-code-blocks@1.0.0:
757 | resolution: {integrity: sha512-MdJip0Y/0UArlhvBE5heNAFgR/aJr5rdcnodC6nJK1yPKmEfhe89h9LZVn724mqcslAj5rOYT07oQoHr1tmDuw==}
758 | engines: {node: '>=0.10.0'}
759 |
760 | glob-parent@5.1.2:
761 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
762 | engines: {node: '>= 6'}
763 |
764 | glob-parent@6.0.2:
765 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
766 | engines: {node: '>=10.13.0'}
767 |
768 | glob@10.4.5:
769 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
770 | hasBin: true
771 |
772 | glob@7.2.3:
773 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
774 | deprecated: Glob versions prior to v9 are no longer supported
775 |
776 | glob@8.1.0:
777 | resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
778 | engines: {node: '>=12'}
779 | deprecated: Glob versions prior to v9 are no longer supported
780 |
781 | globals@13.24.0:
782 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
783 | engines: {node: '>=8'}
784 |
785 | graphemer@1.4.0:
786 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
787 |
788 | gulp-format-md@2.0.0:
789 | resolution: {integrity: sha512-hn5CxC/Pzog+HYzoS5tx9404Dw3d/E3TZcPSbcCoL3PJNN2PN43rycut1AGLi1NiLAqI4E8t1xNCbLfof6mP9A==}
790 | engines: {node: '>=8'}
791 |
792 | gulp-header@1.8.12:
793 | resolution: {integrity: sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==}
794 | deprecated: Removed event-stream from gulp-header
795 |
796 | has-flag@4.0.0:
797 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
798 | engines: {node: '>=8'}
799 |
800 | he@1.2.0:
801 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
802 | hasBin: true
803 |
804 | ignore@5.3.2:
805 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
806 | engines: {node: '>= 4'}
807 |
808 | import-fresh@3.3.0:
809 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
810 | engines: {node: '>=6'}
811 |
812 | imurmurhash@0.1.4:
813 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
814 | engines: {node: '>=0.8.19'}
815 |
816 | inflight@1.0.6:
817 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
818 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
819 |
820 | inherits@2.0.4:
821 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
822 |
823 | is-binary-path@2.1.0:
824 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
825 | engines: {node: '>=8'}
826 |
827 | is-extendable@0.1.1:
828 | resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
829 | engines: {node: '>=0.10.0'}
830 |
831 | is-extglob@2.1.1:
832 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
833 | engines: {node: '>=0.10.0'}
834 |
835 | is-fullwidth-code-point@3.0.0:
836 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
837 | engines: {node: '>=8'}
838 |
839 | is-glob@4.0.3:
840 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
841 | engines: {node: '>=0.10.0'}
842 |
843 | is-number@7.0.0:
844 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
845 | engines: {node: '>=0.12.0'}
846 |
847 | is-path-inside@3.0.3:
848 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
849 | engines: {node: '>=8'}
850 |
851 | is-plain-obj@2.1.0:
852 | resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
853 | engines: {node: '>=8'}
854 |
855 | is-unicode-supported@0.1.0:
856 | resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
857 | engines: {node: '>=10'}
858 |
859 | isarray@1.0.0:
860 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
861 |
862 | isexe@2.0.0:
863 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
864 |
865 | isobject@3.0.1:
866 | resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
867 | engines: {node: '>=0.10.0'}
868 |
869 | jackspeak@3.4.3:
870 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
871 |
872 | joycon@3.1.1:
873 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
874 | engines: {node: '>=10'}
875 |
876 | js-yaml@4.1.0:
877 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
878 | hasBin: true
879 |
880 | json-buffer@3.0.1:
881 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
882 |
883 | json-schema-traverse@0.4.1:
884 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
885 |
886 | json-stable-stringify-without-jsonify@1.0.1:
887 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
888 |
889 | json5@1.0.2:
890 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
891 | hasBin: true
892 |
893 | json5@2.2.3:
894 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
895 | engines: {node: '>=6'}
896 | hasBin: true
897 |
898 | keyv@4.5.4:
899 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
900 |
901 | levn@0.4.1:
902 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
903 | engines: {node: '>= 0.8.0'}
904 |
905 | lilconfig@3.1.2:
906 | resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
907 | engines: {node: '>=14'}
908 |
909 | lines-and-columns@1.2.4:
910 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
911 |
912 | list-item@2.0.0:
913 | resolution: {integrity: sha512-hxCRzLagZIT8txXzLxcefV7oHelVzLlZ76W5DMNHqW8x/42O6D6f9m6Tt09qhLsOHynUXGe4YwZySEmGjHgOTw==}
914 | engines: {node: '>=4'}
915 |
916 | load-tsconfig@0.2.5:
917 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
918 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
919 |
920 | locate-path@6.0.0:
921 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
922 | engines: {node: '>=10'}
923 |
924 | lodash._reinterpolate@3.0.0:
925 | resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==}
926 |
927 | lodash.merge@4.6.2:
928 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
929 |
930 | lodash.sortby@4.7.0:
931 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
932 |
933 | lodash.template@4.5.0:
934 | resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==}
935 |
936 | lodash.templatesettings@4.2.0:
937 | resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==}
938 |
939 | log-symbols@4.1.0:
940 | resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
941 | engines: {node: '>=10'}
942 |
943 | lru-cache@10.4.3:
944 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
945 |
946 | make-error@1.3.6:
947 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
948 |
949 | markdown-utils@1.0.0:
950 | resolution: {integrity: sha512-d09qgYTIYrLEwMgVeaQpQMp+PpPZGsunX5IHY1mFEWLLT9U2tmlzvcUBIEnYNzsE48OKOzXyPWGOVaO3oLTOwQ==}
951 | engines: {node: '>=4'}
952 |
953 | merge2@1.4.1:
954 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
955 | engines: {node: '>= 8'}
956 |
957 | micromatch@4.0.8:
958 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
959 | engines: {node: '>=8.6'}
960 |
961 | minimatch@3.1.2:
962 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
963 |
964 | minimatch@5.1.6:
965 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
966 | engines: {node: '>=10'}
967 |
968 | minimatch@9.0.5:
969 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
970 | engines: {node: '>=16 || 14 >=14.17'}
971 |
972 | minimist@1.2.8:
973 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
974 |
975 | minipass@7.1.2:
976 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
977 | engines: {node: '>=16 || 14 >=14.17'}
978 |
979 | mkdirp@0.5.6:
980 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
981 | hasBin: true
982 |
983 | mocha@10.8.2:
984 | resolution: {integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==}
985 | engines: {node: '>= 14.0.0'}
986 | hasBin: true
987 |
988 | ms@2.1.3:
989 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
990 |
991 | mz@2.7.0:
992 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
993 |
994 | natural-compare@1.4.0:
995 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
996 |
997 | normalize-path@3.0.0:
998 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
999 | engines: {node: '>=0.10.0'}
1000 |
1001 | object-assign@4.1.1:
1002 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1003 | engines: {node: '>=0.10.0'}
1004 |
1005 | once@1.4.0:
1006 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1007 |
1008 | optionator@0.9.4:
1009 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1010 | engines: {node: '>= 0.8.0'}
1011 |
1012 | p-limit@3.1.0:
1013 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1014 | engines: {node: '>=10'}
1015 |
1016 | p-locate@5.0.0:
1017 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1018 | engines: {node: '>=10'}
1019 |
1020 | package-json-from-dist@1.0.1:
1021 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
1022 |
1023 | parent-module@1.0.1:
1024 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1025 | engines: {node: '>=6'}
1026 |
1027 | path-exists@4.0.0:
1028 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1029 | engines: {node: '>=8'}
1030 |
1031 | path-is-absolute@1.0.1:
1032 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1033 | engines: {node: '>=0.10.0'}
1034 |
1035 | path-key@3.1.1:
1036 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1037 | engines: {node: '>=8'}
1038 |
1039 | path-scurry@1.11.1:
1040 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
1041 | engines: {node: '>=16 || 14 >=14.18'}
1042 |
1043 | picocolors@1.1.1:
1044 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1045 |
1046 | picomatch@2.3.1:
1047 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1048 | engines: {node: '>=8.6'}
1049 |
1050 | picomatch@4.0.2:
1051 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
1052 | engines: {node: '>=12'}
1053 |
1054 | pirates@4.0.6:
1055 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
1056 | engines: {node: '>= 6'}
1057 |
1058 | postcss-load-config@6.0.1:
1059 | resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
1060 | engines: {node: '>= 18'}
1061 | peerDependencies:
1062 | jiti: '>=1.21.0'
1063 | postcss: '>=8.0.9'
1064 | tsx: ^4.8.1
1065 | yaml: ^2.4.2
1066 | peerDependenciesMeta:
1067 | jiti:
1068 | optional: true
1069 | postcss:
1070 | optional: true
1071 | tsx:
1072 | optional: true
1073 | yaml:
1074 | optional: true
1075 |
1076 | prelude-ls@1.2.1:
1077 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1078 | engines: {node: '>= 0.8.0'}
1079 |
1080 | prettier@3.3.3:
1081 | resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
1082 | engines: {node: '>=14'}
1083 | hasBin: true
1084 |
1085 | pretty-remarkable@1.0.0:
1086 | resolution: {integrity: sha512-uFNIULmMgcMZs++dCRwMLoQdwkjprIleWEOYk6LzwoRZ874QVBKut+SCFQsYsWz1Eh+9wYdI86XsI5TQiMRfHA==}
1087 | engines: {node: '>=4.0'}
1088 |
1089 | process-nextick-args@2.0.1:
1090 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
1091 |
1092 | punycode@2.3.1:
1093 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1094 | engines: {node: '>=6'}
1095 |
1096 | queue-microtask@1.2.3:
1097 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1098 |
1099 | randombytes@2.1.0:
1100 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
1101 |
1102 | readable-stream@2.3.8:
1103 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
1104 |
1105 | readdirp@3.6.0:
1106 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1107 | engines: {node: '>=8.10.0'}
1108 |
1109 | readdirp@4.0.2:
1110 | resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==}
1111 | engines: {node: '>= 14.16.0'}
1112 |
1113 | remarkable@1.7.4:
1114 | resolution: {integrity: sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg==}
1115 | engines: {node: '>= 0.10.0'}
1116 | hasBin: true
1117 |
1118 | require-directory@2.1.1:
1119 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
1120 | engines: {node: '>=0.10.0'}
1121 |
1122 | resolve-from@4.0.0:
1123 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1124 | engines: {node: '>=4'}
1125 |
1126 | resolve-from@5.0.0:
1127 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
1128 | engines: {node: '>=8'}
1129 |
1130 | reusify@1.0.4:
1131 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1132 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1133 |
1134 | rimraf@3.0.2:
1135 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
1136 | deprecated: Rimraf versions prior to v4 are no longer supported
1137 | hasBin: true
1138 |
1139 | rollup@4.27.2:
1140 | resolution: {integrity: sha512-KreA+PzWmk2yaFmZVwe6GB2uBD86nXl86OsDkt1bJS9p3vqWuEQ6HnJJ+j/mZi/q0920P99/MVRlB4L3crpF5w==}
1141 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1142 | hasBin: true
1143 |
1144 | run-parallel@1.2.0:
1145 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1146 |
1147 | safe-buffer@5.1.2:
1148 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
1149 |
1150 | sections@1.0.0:
1151 | resolution: {integrity: sha512-fIM8mM3bPainFNKxQn3K+fCl2ZPYdo13GrUDPmjvQfK3b3jeC1E4c0t/irS0qcsG6JLTJNxjNOX6k10URz0ZJg==}
1152 | engines: {node: '>=0.10.0'}
1153 |
1154 | semver@7.6.3:
1155 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
1156 | engines: {node: '>=10'}
1157 | hasBin: true
1158 |
1159 | serialize-javascript@6.0.2:
1160 | resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
1161 |
1162 | shebang-command@2.0.0:
1163 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1164 | engines: {node: '>=8'}
1165 |
1166 | shebang-regex@3.0.0:
1167 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1168 | engines: {node: '>=8'}
1169 |
1170 | signal-exit@4.1.0:
1171 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1172 | engines: {node: '>=14'}
1173 |
1174 | sort-by-value@0.1.0:
1175 | resolution: {integrity: sha512-hTkhmGnyccPZcgIGtvC32Oipl2Qf8rRd/G1beErsgJurdO9i35PDeeR+vEsbpvGibzQuNB1P2yhFn9E/daD2rw==}
1176 | engines: {node: '>=4'}
1177 |
1178 | source-map-support@0.5.21:
1179 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
1180 |
1181 | source-map@0.6.1:
1182 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1183 | engines: {node: '>=0.10.0'}
1184 |
1185 | source-map@0.8.0-beta.0:
1186 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
1187 | engines: {node: '>= 8'}
1188 |
1189 | sprintf-js@1.0.3:
1190 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
1191 |
1192 | string-width@4.2.3:
1193 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1194 | engines: {node: '>=8'}
1195 |
1196 | string-width@5.1.2:
1197 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1198 | engines: {node: '>=12'}
1199 |
1200 | string_decoder@1.1.1:
1201 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
1202 |
1203 | strip-ansi@6.0.1:
1204 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1205 | engines: {node: '>=8'}
1206 |
1207 | strip-ansi@7.1.0:
1208 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
1209 | engines: {node: '>=12'}
1210 |
1211 | strip-bom@3.0.0:
1212 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
1213 | engines: {node: '>=4'}
1214 |
1215 | strip-json-comments@3.1.1:
1216 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1217 | engines: {node: '>=8'}
1218 |
1219 | sucrase@3.35.0:
1220 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
1221 | engines: {node: '>=16 || 14 >=14.17'}
1222 | hasBin: true
1223 |
1224 | supports-color@7.2.0:
1225 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1226 | engines: {node: '>=8'}
1227 |
1228 | supports-color@8.1.1:
1229 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
1230 | engines: {node: '>=10'}
1231 |
1232 | text-table@0.2.0:
1233 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
1234 |
1235 | thenify-all@1.6.0:
1236 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
1237 | engines: {node: '>=0.8'}
1238 |
1239 | thenify@3.3.1:
1240 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
1241 |
1242 | through2@2.0.5:
1243 | resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
1244 |
1245 | tinyexec@0.3.1:
1246 | resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==}
1247 |
1248 | tinyglobby@0.2.10:
1249 | resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==}
1250 | engines: {node: '>=12.0.0'}
1251 |
1252 | to-regex-range@4.0.3:
1253 | resolution: {integrity: sha512-AtJgwCeygrdcfleD1nolmv8TSJcsPvSsvnqQRzc1AkEa//+RRTseKZpaXOfZk2/U1B+bz0sRpkaF1oHX5YmHKg==}
1254 | engines: {node: '>=4.0'}
1255 |
1256 | to-regex-range@5.0.1:
1257 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1258 | engines: {node: '>=8.0'}
1259 |
1260 | tr46@1.0.1:
1261 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
1262 |
1263 | tree-kill@1.2.2:
1264 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
1265 | hasBin: true
1266 |
1267 | ts-api-utils@1.4.0:
1268 | resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==}
1269 | engines: {node: '>=16'}
1270 | peerDependencies:
1271 | typescript: '>=4.2.0'
1272 |
1273 | ts-interface-checker@0.1.13:
1274 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
1275 |
1276 | ts-mocha@10.0.0:
1277 | resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
1278 | engines: {node: '>= 6.X.X'}
1279 | hasBin: true
1280 | peerDependencies:
1281 | mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
1282 |
1283 | ts-node@10.9.2:
1284 | resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
1285 | hasBin: true
1286 | peerDependencies:
1287 | '@swc/core': '>=1.2.50'
1288 | '@swc/wasm': '>=1.2.50'
1289 | '@types/node': '*'
1290 | typescript: '>=2.7'
1291 | peerDependenciesMeta:
1292 | '@swc/core':
1293 | optional: true
1294 | '@swc/wasm':
1295 | optional: true
1296 |
1297 | ts-node@7.0.1:
1298 | resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
1299 | engines: {node: '>=4.2.0'}
1300 | hasBin: true
1301 |
1302 | tsconfig-paths@3.15.0:
1303 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
1304 |
1305 | tsconfig-paths@4.2.0:
1306 | resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
1307 | engines: {node: '>=6'}
1308 |
1309 | tsup@8.3.5:
1310 | resolution: {integrity: sha512-Tunf6r6m6tnZsG9GYWndg0z8dEV7fD733VBFzFJ5Vcm1FtlXB8xBD/rtrBi2a3YKEV7hHtxiZtW5EAVADoe1pA==}
1311 | engines: {node: '>=18'}
1312 | hasBin: true
1313 | peerDependencies:
1314 | '@microsoft/api-extractor': ^7.36.0
1315 | '@swc/core': ^1
1316 | postcss: ^8.4.12
1317 | typescript: '>=4.5.0'
1318 | peerDependenciesMeta:
1319 | '@microsoft/api-extractor':
1320 | optional: true
1321 | '@swc/core':
1322 | optional: true
1323 | postcss:
1324 | optional: true
1325 | typescript:
1326 | optional: true
1327 |
1328 | type-check@0.4.0:
1329 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1330 | engines: {node: '>= 0.8.0'}
1331 |
1332 | type-fest@0.20.2:
1333 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
1334 | engines: {node: '>=10'}
1335 |
1336 | typescript@5.6.3:
1337 | resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
1338 | engines: {node: '>=14.17'}
1339 | hasBin: true
1340 |
1341 | undici-types@6.20.0:
1342 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
1343 |
1344 | uri-js@4.4.1:
1345 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1346 |
1347 | util-deprecate@1.0.2:
1348 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1349 |
1350 | v8-compile-cache-lib@3.0.1:
1351 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
1352 |
1353 | webidl-conversions@4.0.2:
1354 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
1355 |
1356 | whatwg-url@7.1.0:
1357 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
1358 |
1359 | which@2.0.2:
1360 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1361 | engines: {node: '>= 8'}
1362 | hasBin: true
1363 |
1364 | word-wrap@1.2.5:
1365 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
1366 | engines: {node: '>=0.10.0'}
1367 |
1368 | workerpool@6.5.1:
1369 | resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==}
1370 |
1371 | wrap-ansi@7.0.0:
1372 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
1373 | engines: {node: '>=10'}
1374 |
1375 | wrap-ansi@8.1.0:
1376 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
1377 | engines: {node: '>=12'}
1378 |
1379 | wrappy@1.0.2:
1380 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
1381 |
1382 | xtend@4.0.2:
1383 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
1384 | engines: {node: '>=0.4'}
1385 |
1386 | y18n@5.0.8:
1387 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
1388 | engines: {node: '>=10'}
1389 |
1390 | yargs-parser@20.2.9:
1391 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
1392 | engines: {node: '>=10'}
1393 |
1394 | yargs-unparser@2.0.0:
1395 | resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
1396 | engines: {node: '>=10'}
1397 |
1398 | yargs@16.2.0:
1399 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
1400 | engines: {node: '>=10'}
1401 |
1402 | yn@2.0.0:
1403 | resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
1404 | engines: {node: '>=4'}
1405 |
1406 | yn@3.1.1:
1407 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
1408 | engines: {node: '>=6'}
1409 |
1410 | yocto-queue@0.1.0:
1411 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1412 | engines: {node: '>=10'}
1413 |
1414 | snapshots:
1415 |
1416 | '@cspotcode/source-map-support@0.8.1':
1417 | dependencies:
1418 | '@jridgewell/trace-mapping': 0.3.9
1419 |
1420 | '@esbuild/aix-ppc64@0.24.0':
1421 | optional: true
1422 |
1423 | '@esbuild/android-arm64@0.24.0':
1424 | optional: true
1425 |
1426 | '@esbuild/android-arm@0.24.0':
1427 | optional: true
1428 |
1429 | '@esbuild/android-x64@0.24.0':
1430 | optional: true
1431 |
1432 | '@esbuild/darwin-arm64@0.24.0':
1433 | optional: true
1434 |
1435 | '@esbuild/darwin-x64@0.24.0':
1436 | optional: true
1437 |
1438 | '@esbuild/freebsd-arm64@0.24.0':
1439 | optional: true
1440 |
1441 | '@esbuild/freebsd-x64@0.24.0':
1442 | optional: true
1443 |
1444 | '@esbuild/linux-arm64@0.24.0':
1445 | optional: true
1446 |
1447 | '@esbuild/linux-arm@0.24.0':
1448 | optional: true
1449 |
1450 | '@esbuild/linux-ia32@0.24.0':
1451 | optional: true
1452 |
1453 | '@esbuild/linux-loong64@0.24.0':
1454 | optional: true
1455 |
1456 | '@esbuild/linux-mips64el@0.24.0':
1457 | optional: true
1458 |
1459 | '@esbuild/linux-ppc64@0.24.0':
1460 | optional: true
1461 |
1462 | '@esbuild/linux-riscv64@0.24.0':
1463 | optional: true
1464 |
1465 | '@esbuild/linux-s390x@0.24.0':
1466 | optional: true
1467 |
1468 | '@esbuild/linux-x64@0.24.0':
1469 | optional: true
1470 |
1471 | '@esbuild/netbsd-x64@0.24.0':
1472 | optional: true
1473 |
1474 | '@esbuild/openbsd-arm64@0.24.0':
1475 | optional: true
1476 |
1477 | '@esbuild/openbsd-x64@0.24.0':
1478 | optional: true
1479 |
1480 | '@esbuild/sunos-x64@0.24.0':
1481 | optional: true
1482 |
1483 | '@esbuild/win32-arm64@0.24.0':
1484 | optional: true
1485 |
1486 | '@esbuild/win32-ia32@0.24.0':
1487 | optional: true
1488 |
1489 | '@esbuild/win32-x64@0.24.0':
1490 | optional: true
1491 |
1492 | '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)':
1493 | dependencies:
1494 | eslint: 8.57.1
1495 | eslint-visitor-keys: 3.4.3
1496 |
1497 | '@eslint-community/regexpp@4.12.1': {}
1498 |
1499 | '@eslint/eslintrc@2.1.4':
1500 | dependencies:
1501 | ajv: 6.12.6
1502 | debug: 4.3.7(supports-color@8.1.1)
1503 | espree: 9.6.1
1504 | globals: 13.24.0
1505 | ignore: 5.3.2
1506 | import-fresh: 3.3.0
1507 | js-yaml: 4.1.0
1508 | minimatch: 3.1.2
1509 | strip-json-comments: 3.1.1
1510 | transitivePeerDependencies:
1511 | - supports-color
1512 |
1513 | '@eslint/js@8.57.1': {}
1514 |
1515 | '@humanwhocodes/config-array@0.13.0':
1516 | dependencies:
1517 | '@humanwhocodes/object-schema': 2.0.3
1518 | debug: 4.3.7(supports-color@8.1.1)
1519 | minimatch: 3.1.2
1520 | transitivePeerDependencies:
1521 | - supports-color
1522 |
1523 | '@humanwhocodes/module-importer@1.0.1': {}
1524 |
1525 | '@humanwhocodes/object-schema@2.0.3': {}
1526 |
1527 | '@isaacs/cliui@8.0.2':
1528 | dependencies:
1529 | string-width: 5.1.2
1530 | string-width-cjs: string-width@4.2.3
1531 | strip-ansi: 7.1.0
1532 | strip-ansi-cjs: strip-ansi@6.0.1
1533 | wrap-ansi: 8.1.0
1534 | wrap-ansi-cjs: wrap-ansi@7.0.0
1535 |
1536 | '@jridgewell/gen-mapping@0.3.5':
1537 | dependencies:
1538 | '@jridgewell/set-array': 1.2.1
1539 | '@jridgewell/sourcemap-codec': 1.5.0
1540 | '@jridgewell/trace-mapping': 0.3.25
1541 |
1542 | '@jridgewell/resolve-uri@3.1.2': {}
1543 |
1544 | '@jridgewell/set-array@1.2.1': {}
1545 |
1546 | '@jridgewell/sourcemap-codec@1.5.0': {}
1547 |
1548 | '@jridgewell/trace-mapping@0.3.25':
1549 | dependencies:
1550 | '@jridgewell/resolve-uri': 3.1.2
1551 | '@jridgewell/sourcemap-codec': 1.5.0
1552 |
1553 | '@jridgewell/trace-mapping@0.3.9':
1554 | dependencies:
1555 | '@jridgewell/resolve-uri': 3.1.2
1556 | '@jridgewell/sourcemap-codec': 1.5.0
1557 |
1558 | '@nodelib/fs.scandir@2.1.5':
1559 | dependencies:
1560 | '@nodelib/fs.stat': 2.0.5
1561 | run-parallel: 1.2.0
1562 |
1563 | '@nodelib/fs.stat@2.0.5': {}
1564 |
1565 | '@nodelib/fs.walk@1.2.8':
1566 | dependencies:
1567 | '@nodelib/fs.scandir': 2.1.5
1568 | fastq: 1.17.1
1569 |
1570 | '@pkgjs/parseargs@0.11.0':
1571 | optional: true
1572 |
1573 | '@rollup/rollup-android-arm-eabi@4.27.2':
1574 | optional: true
1575 |
1576 | '@rollup/rollup-android-arm64@4.27.2':
1577 | optional: true
1578 |
1579 | '@rollup/rollup-darwin-arm64@4.27.2':
1580 | optional: true
1581 |
1582 | '@rollup/rollup-darwin-x64@4.27.2':
1583 | optional: true
1584 |
1585 | '@rollup/rollup-freebsd-arm64@4.27.2':
1586 | optional: true
1587 |
1588 | '@rollup/rollup-freebsd-x64@4.27.2':
1589 | optional: true
1590 |
1591 | '@rollup/rollup-linux-arm-gnueabihf@4.27.2':
1592 | optional: true
1593 |
1594 | '@rollup/rollup-linux-arm-musleabihf@4.27.2':
1595 | optional: true
1596 |
1597 | '@rollup/rollup-linux-arm64-gnu@4.27.2':
1598 | optional: true
1599 |
1600 | '@rollup/rollup-linux-arm64-musl@4.27.2':
1601 | optional: true
1602 |
1603 | '@rollup/rollup-linux-powerpc64le-gnu@4.27.2':
1604 | optional: true
1605 |
1606 | '@rollup/rollup-linux-riscv64-gnu@4.27.2':
1607 | optional: true
1608 |
1609 | '@rollup/rollup-linux-s390x-gnu@4.27.2':
1610 | optional: true
1611 |
1612 | '@rollup/rollup-linux-x64-gnu@4.27.2':
1613 | optional: true
1614 |
1615 | '@rollup/rollup-linux-x64-musl@4.27.2':
1616 | optional: true
1617 |
1618 | '@rollup/rollup-win32-arm64-msvc@4.27.2':
1619 | optional: true
1620 |
1621 | '@rollup/rollup-win32-ia32-msvc@4.27.2':
1622 | optional: true
1623 |
1624 | '@rollup/rollup-win32-x64-msvc@4.27.2':
1625 | optional: true
1626 |
1627 | '@tsconfig/node10@1.0.11': {}
1628 |
1629 | '@tsconfig/node12@1.0.11': {}
1630 |
1631 | '@tsconfig/node14@1.0.3': {}
1632 |
1633 | '@tsconfig/node16@1.0.4': {}
1634 |
1635 | '@types/estree@1.0.6': {}
1636 |
1637 | '@types/json5@0.0.29':
1638 | optional: true
1639 |
1640 | '@types/node@22.10.10':
1641 | dependencies:
1642 | undici-types: 6.20.0
1643 |
1644 | '@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)':
1645 | dependencies:
1646 | '@eslint-community/regexpp': 4.12.1
1647 | '@typescript-eslint/parser': 8.14.0(eslint@8.57.1)(typescript@5.6.3)
1648 | '@typescript-eslint/scope-manager': 8.14.0
1649 | '@typescript-eslint/type-utils': 8.14.0(eslint@8.57.1)(typescript@5.6.3)
1650 | '@typescript-eslint/utils': 8.14.0(eslint@8.57.1)(typescript@5.6.3)
1651 | '@typescript-eslint/visitor-keys': 8.14.0
1652 | eslint: 8.57.1
1653 | graphemer: 1.4.0
1654 | ignore: 5.3.2
1655 | natural-compare: 1.4.0
1656 | ts-api-utils: 1.4.0(typescript@5.6.3)
1657 | optionalDependencies:
1658 | typescript: 5.6.3
1659 | transitivePeerDependencies:
1660 | - supports-color
1661 |
1662 | '@typescript-eslint/parser@8.14.0(eslint@8.57.1)(typescript@5.6.3)':
1663 | dependencies:
1664 | '@typescript-eslint/scope-manager': 8.14.0
1665 | '@typescript-eslint/types': 8.14.0
1666 | '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3)
1667 | '@typescript-eslint/visitor-keys': 8.14.0
1668 | debug: 4.3.7(supports-color@8.1.1)
1669 | eslint: 8.57.1
1670 | optionalDependencies:
1671 | typescript: 5.6.3
1672 | transitivePeerDependencies:
1673 | - supports-color
1674 |
1675 | '@typescript-eslint/scope-manager@8.14.0':
1676 | dependencies:
1677 | '@typescript-eslint/types': 8.14.0
1678 | '@typescript-eslint/visitor-keys': 8.14.0
1679 |
1680 | '@typescript-eslint/type-utils@8.14.0(eslint@8.57.1)(typescript@5.6.3)':
1681 | dependencies:
1682 | '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3)
1683 | '@typescript-eslint/utils': 8.14.0(eslint@8.57.1)(typescript@5.6.3)
1684 | debug: 4.3.7(supports-color@8.1.1)
1685 | ts-api-utils: 1.4.0(typescript@5.6.3)
1686 | optionalDependencies:
1687 | typescript: 5.6.3
1688 | transitivePeerDependencies:
1689 | - eslint
1690 | - supports-color
1691 |
1692 | '@typescript-eslint/types@8.14.0': {}
1693 |
1694 | '@typescript-eslint/typescript-estree@8.14.0(typescript@5.6.3)':
1695 | dependencies:
1696 | '@typescript-eslint/types': 8.14.0
1697 | '@typescript-eslint/visitor-keys': 8.14.0
1698 | debug: 4.3.7(supports-color@8.1.1)
1699 | fast-glob: 3.3.2
1700 | is-glob: 4.0.3
1701 | minimatch: 9.0.5
1702 | semver: 7.6.3
1703 | ts-api-utils: 1.4.0(typescript@5.6.3)
1704 | optionalDependencies:
1705 | typescript: 5.6.3
1706 | transitivePeerDependencies:
1707 | - supports-color
1708 |
1709 | '@typescript-eslint/utils@8.14.0(eslint@8.57.1)(typescript@5.6.3)':
1710 | dependencies:
1711 | '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1)
1712 | '@typescript-eslint/scope-manager': 8.14.0
1713 | '@typescript-eslint/types': 8.14.0
1714 | '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3)
1715 | eslint: 8.57.1
1716 | transitivePeerDependencies:
1717 | - supports-color
1718 | - typescript
1719 |
1720 | '@typescript-eslint/visitor-keys@8.14.0':
1721 | dependencies:
1722 | '@typescript-eslint/types': 8.14.0
1723 | eslint-visitor-keys: 3.4.3
1724 |
1725 | '@ungap/structured-clone@1.2.0': {}
1726 |
1727 | acorn-jsx@5.3.2(acorn@8.14.0):
1728 | dependencies:
1729 | acorn: 8.14.0
1730 |
1731 | acorn-walk@8.3.4:
1732 | dependencies:
1733 | acorn: 8.14.0
1734 |
1735 | acorn@8.14.0: {}
1736 |
1737 | ajv@6.12.6:
1738 | dependencies:
1739 | fast-deep-equal: 3.1.3
1740 | fast-json-stable-stringify: 2.1.0
1741 | json-schema-traverse: 0.4.1
1742 | uri-js: 4.4.1
1743 |
1744 | ansi-colors@4.1.3: {}
1745 |
1746 | ansi-regex@5.0.1: {}
1747 |
1748 | ansi-regex@6.1.0: {}
1749 |
1750 | ansi-styles@4.3.0:
1751 | dependencies:
1752 | color-convert: 2.0.1
1753 |
1754 | ansi-styles@6.2.1: {}
1755 |
1756 | any-promise@1.3.0: {}
1757 |
1758 | anymatch@3.1.3:
1759 | dependencies:
1760 | normalize-path: 3.0.0
1761 | picomatch: 2.3.1
1762 |
1763 | arg@4.1.3: {}
1764 |
1765 | argparse@1.0.10:
1766 | dependencies:
1767 | sprintf-js: 1.0.3
1768 |
1769 | argparse@2.0.1: {}
1770 |
1771 | arrify@1.0.1: {}
1772 |
1773 | autolinker@0.28.1:
1774 | dependencies:
1775 | gulp-header: 1.8.12
1776 |
1777 | balanced-match@1.0.2: {}
1778 |
1779 | binary-extensions@2.3.0: {}
1780 |
1781 | brace-expansion@1.1.11:
1782 | dependencies:
1783 | balanced-match: 1.0.2
1784 | concat-map: 0.0.1
1785 |
1786 | brace-expansion@2.0.1:
1787 | dependencies:
1788 | balanced-match: 1.0.2
1789 |
1790 | braces@3.0.3:
1791 | dependencies:
1792 | fill-range: 7.1.1
1793 |
1794 | browser-stdout@1.3.1: {}
1795 |
1796 | buffer-from@1.1.2: {}
1797 |
1798 | bundle-require@5.0.0(esbuild@0.24.0):
1799 | dependencies:
1800 | esbuild: 0.24.0
1801 | load-tsconfig: 0.2.5
1802 |
1803 | cac@6.7.14: {}
1804 |
1805 | callsites@3.1.0: {}
1806 |
1807 | camelcase@6.3.0: {}
1808 |
1809 | chalk@4.1.2:
1810 | dependencies:
1811 | ansi-styles: 4.3.0
1812 | supports-color: 7.2.0
1813 |
1814 | chokidar@3.6.0:
1815 | dependencies:
1816 | anymatch: 3.1.3
1817 | braces: 3.0.3
1818 | glob-parent: 5.1.2
1819 | is-binary-path: 2.1.0
1820 | is-glob: 4.0.3
1821 | normalize-path: 3.0.0
1822 | readdirp: 3.6.0
1823 | optionalDependencies:
1824 | fsevents: 2.3.3
1825 |
1826 | chokidar@4.0.1:
1827 | dependencies:
1828 | readdirp: 4.0.2
1829 |
1830 | cliui@7.0.4:
1831 | dependencies:
1832 | string-width: 4.2.3
1833 | strip-ansi: 6.0.1
1834 | wrap-ansi: 7.0.0
1835 |
1836 | color-convert@2.0.1:
1837 | dependencies:
1838 | color-name: 1.1.4
1839 |
1840 | color-name@1.1.4: {}
1841 |
1842 | commander@4.1.1: {}
1843 |
1844 | concat-map@0.0.1: {}
1845 |
1846 | concat-with-sourcemaps@1.1.0:
1847 | dependencies:
1848 | source-map: 0.6.1
1849 |
1850 | consola@3.2.3: {}
1851 |
1852 | core-util-is@1.0.3: {}
1853 |
1854 | create-require@1.1.1: {}
1855 |
1856 | cross-spawn@7.0.5:
1857 | dependencies:
1858 | path-key: 3.1.1
1859 | shebang-command: 2.0.0
1860 | which: 2.0.2
1861 |
1862 | debug@4.3.7(supports-color@8.1.1):
1863 | dependencies:
1864 | ms: 2.1.3
1865 | optionalDependencies:
1866 | supports-color: 8.1.1
1867 |
1868 | decamelize@4.0.0: {}
1869 |
1870 | deep-is@0.1.4: {}
1871 |
1872 | diff@3.5.0: {}
1873 |
1874 | diff@4.0.2: {}
1875 |
1876 | diff@5.2.0: {}
1877 |
1878 | doctrine@3.0.0:
1879 | dependencies:
1880 | esutils: 2.0.3
1881 |
1882 | eastasianwidth@0.2.0: {}
1883 |
1884 | emoji-regex@8.0.0: {}
1885 |
1886 | emoji-regex@9.2.2: {}
1887 |
1888 | esbuild-register@3.6.0(esbuild@0.24.0):
1889 | dependencies:
1890 | debug: 4.3.7(supports-color@8.1.1)
1891 | esbuild: 0.24.0
1892 | transitivePeerDependencies:
1893 | - supports-color
1894 |
1895 | esbuild@0.24.0:
1896 | optionalDependencies:
1897 | '@esbuild/aix-ppc64': 0.24.0
1898 | '@esbuild/android-arm': 0.24.0
1899 | '@esbuild/android-arm64': 0.24.0
1900 | '@esbuild/android-x64': 0.24.0
1901 | '@esbuild/darwin-arm64': 0.24.0
1902 | '@esbuild/darwin-x64': 0.24.0
1903 | '@esbuild/freebsd-arm64': 0.24.0
1904 | '@esbuild/freebsd-x64': 0.24.0
1905 | '@esbuild/linux-arm': 0.24.0
1906 | '@esbuild/linux-arm64': 0.24.0
1907 | '@esbuild/linux-ia32': 0.24.0
1908 | '@esbuild/linux-loong64': 0.24.0
1909 | '@esbuild/linux-mips64el': 0.24.0
1910 | '@esbuild/linux-ppc64': 0.24.0
1911 | '@esbuild/linux-riscv64': 0.24.0
1912 | '@esbuild/linux-s390x': 0.24.0
1913 | '@esbuild/linux-x64': 0.24.0
1914 | '@esbuild/netbsd-x64': 0.24.0
1915 | '@esbuild/openbsd-arm64': 0.24.0
1916 | '@esbuild/openbsd-x64': 0.24.0
1917 | '@esbuild/sunos-x64': 0.24.0
1918 | '@esbuild/win32-arm64': 0.24.0
1919 | '@esbuild/win32-ia32': 0.24.0
1920 | '@esbuild/win32-x64': 0.24.0
1921 |
1922 | escalade@3.2.0: {}
1923 |
1924 | escape-string-regexp@4.0.0: {}
1925 |
1926 | eslint-scope@7.2.2:
1927 | dependencies:
1928 | esrecurse: 4.3.0
1929 | estraverse: 5.3.0
1930 |
1931 | eslint-visitor-keys@3.4.3: {}
1932 |
1933 | eslint@8.57.1:
1934 | dependencies:
1935 | '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1)
1936 | '@eslint-community/regexpp': 4.12.1
1937 | '@eslint/eslintrc': 2.1.4
1938 | '@eslint/js': 8.57.1
1939 | '@humanwhocodes/config-array': 0.13.0
1940 | '@humanwhocodes/module-importer': 1.0.1
1941 | '@nodelib/fs.walk': 1.2.8
1942 | '@ungap/structured-clone': 1.2.0
1943 | ajv: 6.12.6
1944 | chalk: 4.1.2
1945 | cross-spawn: 7.0.5
1946 | debug: 4.3.7(supports-color@8.1.1)
1947 | doctrine: 3.0.0
1948 | escape-string-regexp: 4.0.0
1949 | eslint-scope: 7.2.2
1950 | eslint-visitor-keys: 3.4.3
1951 | espree: 9.6.1
1952 | esquery: 1.6.0
1953 | esutils: 2.0.3
1954 | fast-deep-equal: 3.1.3
1955 | file-entry-cache: 6.0.1
1956 | find-up: 5.0.0
1957 | glob-parent: 6.0.2
1958 | globals: 13.24.0
1959 | graphemer: 1.4.0
1960 | ignore: 5.3.2
1961 | imurmurhash: 0.1.4
1962 | is-glob: 4.0.3
1963 | is-path-inside: 3.0.3
1964 | js-yaml: 4.1.0
1965 | json-stable-stringify-without-jsonify: 1.0.1
1966 | levn: 0.4.1
1967 | lodash.merge: 4.6.2
1968 | minimatch: 3.1.2
1969 | natural-compare: 1.4.0
1970 | optionator: 0.9.4
1971 | strip-ansi: 6.0.1
1972 | text-table: 0.2.0
1973 | transitivePeerDependencies:
1974 | - supports-color
1975 |
1976 | espree@9.6.1:
1977 | dependencies:
1978 | acorn: 8.14.0
1979 | acorn-jsx: 5.3.2(acorn@8.14.0)
1980 | eslint-visitor-keys: 3.4.3
1981 |
1982 | esquery@1.6.0:
1983 | dependencies:
1984 | estraverse: 5.3.0
1985 |
1986 | esrecurse@4.3.0:
1987 | dependencies:
1988 | estraverse: 5.3.0
1989 |
1990 | estraverse@5.3.0: {}
1991 |
1992 | esutils@2.0.3: {}
1993 |
1994 | extend-shallow@2.0.1:
1995 | dependencies:
1996 | is-extendable: 0.1.1
1997 |
1998 | fast-deep-equal@3.1.3: {}
1999 |
2000 | fast-glob@3.3.2:
2001 | dependencies:
2002 | '@nodelib/fs.stat': 2.0.5
2003 | '@nodelib/fs.walk': 1.2.8
2004 | glob-parent: 5.1.2
2005 | merge2: 1.4.1
2006 | micromatch: 4.0.8
2007 |
2008 | fast-json-stable-stringify@2.1.0: {}
2009 |
2010 | fast-levenshtein@2.0.6: {}
2011 |
2012 | fastq@1.17.1:
2013 | dependencies:
2014 | reusify: 1.0.4
2015 |
2016 | fdir@6.4.2(picomatch@4.0.2):
2017 | optionalDependencies:
2018 | picomatch: 4.0.2
2019 |
2020 | file-entry-cache@6.0.1:
2021 | dependencies:
2022 | flat-cache: 3.2.0
2023 |
2024 | fill-range@6.0.0:
2025 | dependencies:
2026 | is-number: 7.0.0
2027 | to-regex-range: 4.0.3
2028 |
2029 | fill-range@7.1.1:
2030 | dependencies:
2031 | to-regex-range: 5.0.1
2032 |
2033 | find-up@5.0.0:
2034 | dependencies:
2035 | locate-path: 6.0.0
2036 | path-exists: 4.0.0
2037 |
2038 | flat-cache@3.2.0:
2039 | dependencies:
2040 | flatted: 3.3.1
2041 | keyv: 4.5.4
2042 | rimraf: 3.0.2
2043 |
2044 | flat@5.0.2: {}
2045 |
2046 | flatted@3.3.1: {}
2047 |
2048 | foreground-child@3.3.0:
2049 | dependencies:
2050 | cross-spawn: 7.0.5
2051 | signal-exit: 4.1.0
2052 |
2053 | fs.realpath@1.0.0: {}
2054 |
2055 | fsevents@2.3.3:
2056 | optional: true
2057 |
2058 | get-caller-file@2.0.5: {}
2059 |
2060 | gfm-code-block-regex@1.0.0: {}
2061 |
2062 | gfm-code-blocks@1.0.0:
2063 | dependencies:
2064 | gfm-code-block-regex: 1.0.0
2065 |
2066 | glob-parent@5.1.2:
2067 | dependencies:
2068 | is-glob: 4.0.3
2069 |
2070 | glob-parent@6.0.2:
2071 | dependencies:
2072 | is-glob: 4.0.3
2073 |
2074 | glob@10.4.5:
2075 | dependencies:
2076 | foreground-child: 3.3.0
2077 | jackspeak: 3.4.3
2078 | minimatch: 9.0.5
2079 | minipass: 7.1.2
2080 | package-json-from-dist: 1.0.1
2081 | path-scurry: 1.11.1
2082 |
2083 | glob@7.2.3:
2084 | dependencies:
2085 | fs.realpath: 1.0.0
2086 | inflight: 1.0.6
2087 | inherits: 2.0.4
2088 | minimatch: 3.1.2
2089 | once: 1.4.0
2090 | path-is-absolute: 1.0.1
2091 |
2092 | glob@8.1.0:
2093 | dependencies:
2094 | fs.realpath: 1.0.0
2095 | inflight: 1.0.6
2096 | inherits: 2.0.4
2097 | minimatch: 5.1.6
2098 | once: 1.4.0
2099 |
2100 | globals@13.24.0:
2101 | dependencies:
2102 | type-fest: 0.20.2
2103 |
2104 | graphemer@1.4.0: {}
2105 |
2106 | gulp-format-md@2.0.0:
2107 | dependencies:
2108 | pretty-remarkable: 1.0.0
2109 | remarkable: 1.7.4
2110 | sections: 1.0.0
2111 | through2: 2.0.5
2112 |
2113 | gulp-header@1.8.12:
2114 | dependencies:
2115 | concat-with-sourcemaps: 1.1.0
2116 | lodash.template: 4.5.0
2117 | through2: 2.0.5
2118 |
2119 | has-flag@4.0.0: {}
2120 |
2121 | he@1.2.0: {}
2122 |
2123 | ignore@5.3.2: {}
2124 |
2125 | import-fresh@3.3.0:
2126 | dependencies:
2127 | parent-module: 1.0.1
2128 | resolve-from: 4.0.0
2129 |
2130 | imurmurhash@0.1.4: {}
2131 |
2132 | inflight@1.0.6:
2133 | dependencies:
2134 | once: 1.4.0
2135 | wrappy: 1.0.2
2136 |
2137 | inherits@2.0.4: {}
2138 |
2139 | is-binary-path@2.1.0:
2140 | dependencies:
2141 | binary-extensions: 2.3.0
2142 |
2143 | is-extendable@0.1.1: {}
2144 |
2145 | is-extglob@2.1.1: {}
2146 |
2147 | is-fullwidth-code-point@3.0.0: {}
2148 |
2149 | is-glob@4.0.3:
2150 | dependencies:
2151 | is-extglob: 2.1.1
2152 |
2153 | is-number@7.0.0: {}
2154 |
2155 | is-path-inside@3.0.3: {}
2156 |
2157 | is-plain-obj@2.1.0: {}
2158 |
2159 | is-unicode-supported@0.1.0: {}
2160 |
2161 | isarray@1.0.0: {}
2162 |
2163 | isexe@2.0.0: {}
2164 |
2165 | isobject@3.0.1: {}
2166 |
2167 | jackspeak@3.4.3:
2168 | dependencies:
2169 | '@isaacs/cliui': 8.0.2
2170 | optionalDependencies:
2171 | '@pkgjs/parseargs': 0.11.0
2172 |
2173 | joycon@3.1.1: {}
2174 |
2175 | js-yaml@4.1.0:
2176 | dependencies:
2177 | argparse: 2.0.1
2178 |
2179 | json-buffer@3.0.1: {}
2180 |
2181 | json-schema-traverse@0.4.1: {}
2182 |
2183 | json-stable-stringify-without-jsonify@1.0.1: {}
2184 |
2185 | json5@1.0.2:
2186 | dependencies:
2187 | minimist: 1.2.8
2188 | optional: true
2189 |
2190 | json5@2.2.3: {}
2191 |
2192 | keyv@4.5.4:
2193 | dependencies:
2194 | json-buffer: 3.0.1
2195 |
2196 | levn@0.4.1:
2197 | dependencies:
2198 | prelude-ls: 1.2.1
2199 | type-check: 0.4.0
2200 |
2201 | lilconfig@3.1.2: {}
2202 |
2203 | lines-and-columns@1.2.4: {}
2204 |
2205 | list-item@2.0.0:
2206 | dependencies:
2207 | fill-range: 6.0.0
2208 | is-number: 7.0.0
2209 |
2210 | load-tsconfig@0.2.5: {}
2211 |
2212 | locate-path@6.0.0:
2213 | dependencies:
2214 | p-locate: 5.0.0
2215 |
2216 | lodash._reinterpolate@3.0.0: {}
2217 |
2218 | lodash.merge@4.6.2: {}
2219 |
2220 | lodash.sortby@4.7.0: {}
2221 |
2222 | lodash.template@4.5.0:
2223 | dependencies:
2224 | lodash._reinterpolate: 3.0.0
2225 | lodash.templatesettings: 4.2.0
2226 |
2227 | lodash.templatesettings@4.2.0:
2228 | dependencies:
2229 | lodash._reinterpolate: 3.0.0
2230 |
2231 | log-symbols@4.1.0:
2232 | dependencies:
2233 | chalk: 4.1.2
2234 | is-unicode-supported: 0.1.0
2235 |
2236 | lru-cache@10.4.3: {}
2237 |
2238 | make-error@1.3.6: {}
2239 |
2240 | markdown-utils@1.0.0:
2241 | dependencies:
2242 | is-number: 7.0.0
2243 | list-item: 2.0.0
2244 |
2245 | merge2@1.4.1: {}
2246 |
2247 | micromatch@4.0.8:
2248 | dependencies:
2249 | braces: 3.0.3
2250 | picomatch: 2.3.1
2251 |
2252 | minimatch@3.1.2:
2253 | dependencies:
2254 | brace-expansion: 1.1.11
2255 |
2256 | minimatch@5.1.6:
2257 | dependencies:
2258 | brace-expansion: 2.0.1
2259 |
2260 | minimatch@9.0.5:
2261 | dependencies:
2262 | brace-expansion: 2.0.1
2263 |
2264 | minimist@1.2.8: {}
2265 |
2266 | minipass@7.1.2: {}
2267 |
2268 | mkdirp@0.5.6:
2269 | dependencies:
2270 | minimist: 1.2.8
2271 |
2272 | mocha@10.8.2:
2273 | dependencies:
2274 | ansi-colors: 4.1.3
2275 | browser-stdout: 1.3.1
2276 | chokidar: 3.6.0
2277 | debug: 4.3.7(supports-color@8.1.1)
2278 | diff: 5.2.0
2279 | escape-string-regexp: 4.0.0
2280 | find-up: 5.0.0
2281 | glob: 8.1.0
2282 | he: 1.2.0
2283 | js-yaml: 4.1.0
2284 | log-symbols: 4.1.0
2285 | minimatch: 5.1.6
2286 | ms: 2.1.3
2287 | serialize-javascript: 6.0.2
2288 | strip-json-comments: 3.1.1
2289 | supports-color: 8.1.1
2290 | workerpool: 6.5.1
2291 | yargs: 16.2.0
2292 | yargs-parser: 20.2.9
2293 | yargs-unparser: 2.0.0
2294 |
2295 | ms@2.1.3: {}
2296 |
2297 | mz@2.7.0:
2298 | dependencies:
2299 | any-promise: 1.3.0
2300 | object-assign: 4.1.1
2301 | thenify-all: 1.6.0
2302 |
2303 | natural-compare@1.4.0: {}
2304 |
2305 | normalize-path@3.0.0: {}
2306 |
2307 | object-assign@4.1.1: {}
2308 |
2309 | once@1.4.0:
2310 | dependencies:
2311 | wrappy: 1.0.2
2312 |
2313 | optionator@0.9.4:
2314 | dependencies:
2315 | deep-is: 0.1.4
2316 | fast-levenshtein: 2.0.6
2317 | levn: 0.4.1
2318 | prelude-ls: 1.2.1
2319 | type-check: 0.4.0
2320 | word-wrap: 1.2.5
2321 |
2322 | p-limit@3.1.0:
2323 | dependencies:
2324 | yocto-queue: 0.1.0
2325 |
2326 | p-locate@5.0.0:
2327 | dependencies:
2328 | p-limit: 3.1.0
2329 |
2330 | package-json-from-dist@1.0.1: {}
2331 |
2332 | parent-module@1.0.1:
2333 | dependencies:
2334 | callsites: 3.1.0
2335 |
2336 | path-exists@4.0.0: {}
2337 |
2338 | path-is-absolute@1.0.1: {}
2339 |
2340 | path-key@3.1.1: {}
2341 |
2342 | path-scurry@1.11.1:
2343 | dependencies:
2344 | lru-cache: 10.4.3
2345 | minipass: 7.1.2
2346 |
2347 | picocolors@1.1.1: {}
2348 |
2349 | picomatch@2.3.1: {}
2350 |
2351 | picomatch@4.0.2: {}
2352 |
2353 | pirates@4.0.6: {}
2354 |
2355 | postcss-load-config@6.0.1:
2356 | dependencies:
2357 | lilconfig: 3.1.2
2358 |
2359 | prelude-ls@1.2.1: {}
2360 |
2361 | prettier@3.3.3: {}
2362 |
2363 | pretty-remarkable@1.0.0:
2364 | dependencies:
2365 | markdown-utils: 1.0.0
2366 |
2367 | process-nextick-args@2.0.1: {}
2368 |
2369 | punycode@2.3.1: {}
2370 |
2371 | queue-microtask@1.2.3: {}
2372 |
2373 | randombytes@2.1.0:
2374 | dependencies:
2375 | safe-buffer: 5.1.2
2376 |
2377 | readable-stream@2.3.8:
2378 | dependencies:
2379 | core-util-is: 1.0.3
2380 | inherits: 2.0.4
2381 | isarray: 1.0.0
2382 | process-nextick-args: 2.0.1
2383 | safe-buffer: 5.1.2
2384 | string_decoder: 1.1.1
2385 | util-deprecate: 1.0.2
2386 |
2387 | readdirp@3.6.0:
2388 | dependencies:
2389 | picomatch: 2.3.1
2390 |
2391 | readdirp@4.0.2: {}
2392 |
2393 | remarkable@1.7.4:
2394 | dependencies:
2395 | argparse: 1.0.10
2396 | autolinker: 0.28.1
2397 |
2398 | require-directory@2.1.1: {}
2399 |
2400 | resolve-from@4.0.0: {}
2401 |
2402 | resolve-from@5.0.0: {}
2403 |
2404 | reusify@1.0.4: {}
2405 |
2406 | rimraf@3.0.2:
2407 | dependencies:
2408 | glob: 7.2.3
2409 |
2410 | rollup@4.27.2:
2411 | dependencies:
2412 | '@types/estree': 1.0.6
2413 | optionalDependencies:
2414 | '@rollup/rollup-android-arm-eabi': 4.27.2
2415 | '@rollup/rollup-android-arm64': 4.27.2
2416 | '@rollup/rollup-darwin-arm64': 4.27.2
2417 | '@rollup/rollup-darwin-x64': 4.27.2
2418 | '@rollup/rollup-freebsd-arm64': 4.27.2
2419 | '@rollup/rollup-freebsd-x64': 4.27.2
2420 | '@rollup/rollup-linux-arm-gnueabihf': 4.27.2
2421 | '@rollup/rollup-linux-arm-musleabihf': 4.27.2
2422 | '@rollup/rollup-linux-arm64-gnu': 4.27.2
2423 | '@rollup/rollup-linux-arm64-musl': 4.27.2
2424 | '@rollup/rollup-linux-powerpc64le-gnu': 4.27.2
2425 | '@rollup/rollup-linux-riscv64-gnu': 4.27.2
2426 | '@rollup/rollup-linux-s390x-gnu': 4.27.2
2427 | '@rollup/rollup-linux-x64-gnu': 4.27.2
2428 | '@rollup/rollup-linux-x64-musl': 4.27.2
2429 | '@rollup/rollup-win32-arm64-msvc': 4.27.2
2430 | '@rollup/rollup-win32-ia32-msvc': 4.27.2
2431 | '@rollup/rollup-win32-x64-msvc': 4.27.2
2432 | fsevents: 2.3.3
2433 |
2434 | run-parallel@1.2.0:
2435 | dependencies:
2436 | queue-microtask: 1.2.3
2437 |
2438 | safe-buffer@5.1.2: {}
2439 |
2440 | sections@1.0.0:
2441 | dependencies:
2442 | gfm-code-blocks: 1.0.0
2443 | sort-by-value: 0.1.0
2444 |
2445 | semver@7.6.3: {}
2446 |
2447 | serialize-javascript@6.0.2:
2448 | dependencies:
2449 | randombytes: 2.1.0
2450 |
2451 | shebang-command@2.0.0:
2452 | dependencies:
2453 | shebang-regex: 3.0.0
2454 |
2455 | shebang-regex@3.0.0: {}
2456 |
2457 | signal-exit@4.1.0: {}
2458 |
2459 | sort-by-value@0.1.0:
2460 | dependencies:
2461 | extend-shallow: 2.0.1
2462 | isobject: 3.0.1
2463 |
2464 | source-map-support@0.5.21:
2465 | dependencies:
2466 | buffer-from: 1.1.2
2467 | source-map: 0.6.1
2468 |
2469 | source-map@0.6.1: {}
2470 |
2471 | source-map@0.8.0-beta.0:
2472 | dependencies:
2473 | whatwg-url: 7.1.0
2474 |
2475 | sprintf-js@1.0.3: {}
2476 |
2477 | string-width@4.2.3:
2478 | dependencies:
2479 | emoji-regex: 8.0.0
2480 | is-fullwidth-code-point: 3.0.0
2481 | strip-ansi: 6.0.1
2482 |
2483 | string-width@5.1.2:
2484 | dependencies:
2485 | eastasianwidth: 0.2.0
2486 | emoji-regex: 9.2.2
2487 | strip-ansi: 7.1.0
2488 |
2489 | string_decoder@1.1.1:
2490 | dependencies:
2491 | safe-buffer: 5.1.2
2492 |
2493 | strip-ansi@6.0.1:
2494 | dependencies:
2495 | ansi-regex: 5.0.1
2496 |
2497 | strip-ansi@7.1.0:
2498 | dependencies:
2499 | ansi-regex: 6.1.0
2500 |
2501 | strip-bom@3.0.0: {}
2502 |
2503 | strip-json-comments@3.1.1: {}
2504 |
2505 | sucrase@3.35.0:
2506 | dependencies:
2507 | '@jridgewell/gen-mapping': 0.3.5
2508 | commander: 4.1.1
2509 | glob: 10.4.5
2510 | lines-and-columns: 1.2.4
2511 | mz: 2.7.0
2512 | pirates: 4.0.6
2513 | ts-interface-checker: 0.1.13
2514 |
2515 | supports-color@7.2.0:
2516 | dependencies:
2517 | has-flag: 4.0.0
2518 |
2519 | supports-color@8.1.1:
2520 | dependencies:
2521 | has-flag: 4.0.0
2522 |
2523 | text-table@0.2.0: {}
2524 |
2525 | thenify-all@1.6.0:
2526 | dependencies:
2527 | thenify: 3.3.1
2528 |
2529 | thenify@3.3.1:
2530 | dependencies:
2531 | any-promise: 1.3.0
2532 |
2533 | through2@2.0.5:
2534 | dependencies:
2535 | readable-stream: 2.3.8
2536 | xtend: 4.0.2
2537 |
2538 | tinyexec@0.3.1: {}
2539 |
2540 | tinyglobby@0.2.10:
2541 | dependencies:
2542 | fdir: 6.4.2(picomatch@4.0.2)
2543 | picomatch: 4.0.2
2544 |
2545 | to-regex-range@4.0.3:
2546 | dependencies:
2547 | is-number: 7.0.0
2548 |
2549 | to-regex-range@5.0.1:
2550 | dependencies:
2551 | is-number: 7.0.0
2552 |
2553 | tr46@1.0.1:
2554 | dependencies:
2555 | punycode: 2.3.1
2556 |
2557 | tree-kill@1.2.2: {}
2558 |
2559 | ts-api-utils@1.4.0(typescript@5.6.3):
2560 | dependencies:
2561 | typescript: 5.6.3
2562 |
2563 | ts-interface-checker@0.1.13: {}
2564 |
2565 | ts-mocha@10.0.0(mocha@10.8.2):
2566 | dependencies:
2567 | mocha: 10.8.2
2568 | ts-node: 7.0.1
2569 | optionalDependencies:
2570 | tsconfig-paths: 3.15.0
2571 |
2572 | ts-node@10.9.2(@types/node@22.10.10)(typescript@5.6.3):
2573 | dependencies:
2574 | '@cspotcode/source-map-support': 0.8.1
2575 | '@tsconfig/node10': 1.0.11
2576 | '@tsconfig/node12': 1.0.11
2577 | '@tsconfig/node14': 1.0.3
2578 | '@tsconfig/node16': 1.0.4
2579 | '@types/node': 22.10.10
2580 | acorn: 8.14.0
2581 | acorn-walk: 8.3.4
2582 | arg: 4.1.3
2583 | create-require: 1.1.1
2584 | diff: 4.0.2
2585 | make-error: 1.3.6
2586 | typescript: 5.6.3
2587 | v8-compile-cache-lib: 3.0.1
2588 | yn: 3.1.1
2589 |
2590 | ts-node@7.0.1:
2591 | dependencies:
2592 | arrify: 1.0.1
2593 | buffer-from: 1.1.2
2594 | diff: 3.5.0
2595 | make-error: 1.3.6
2596 | minimist: 1.2.8
2597 | mkdirp: 0.5.6
2598 | source-map-support: 0.5.21
2599 | yn: 2.0.0
2600 |
2601 | tsconfig-paths@3.15.0:
2602 | dependencies:
2603 | '@types/json5': 0.0.29
2604 | json5: 1.0.2
2605 | minimist: 1.2.8
2606 | strip-bom: 3.0.0
2607 | optional: true
2608 |
2609 | tsconfig-paths@4.2.0:
2610 | dependencies:
2611 | json5: 2.2.3
2612 | minimist: 1.2.8
2613 | strip-bom: 3.0.0
2614 |
2615 | tsup@8.3.5(typescript@5.6.3):
2616 | dependencies:
2617 | bundle-require: 5.0.0(esbuild@0.24.0)
2618 | cac: 6.7.14
2619 | chokidar: 4.0.1
2620 | consola: 3.2.3
2621 | debug: 4.3.7(supports-color@8.1.1)
2622 | esbuild: 0.24.0
2623 | joycon: 3.1.1
2624 | picocolors: 1.1.1
2625 | postcss-load-config: 6.0.1
2626 | resolve-from: 5.0.0
2627 | rollup: 4.27.2
2628 | source-map: 0.8.0-beta.0
2629 | sucrase: 3.35.0
2630 | tinyexec: 0.3.1
2631 | tinyglobby: 0.2.10
2632 | tree-kill: 1.2.2
2633 | optionalDependencies:
2634 | typescript: 5.6.3
2635 | transitivePeerDependencies:
2636 | - jiti
2637 | - supports-color
2638 | - tsx
2639 | - yaml
2640 |
2641 | type-check@0.4.0:
2642 | dependencies:
2643 | prelude-ls: 1.2.1
2644 |
2645 | type-fest@0.20.2: {}
2646 |
2647 | typescript@5.6.3: {}
2648 |
2649 | undici-types@6.20.0: {}
2650 |
2651 | uri-js@4.4.1:
2652 | dependencies:
2653 | punycode: 2.3.1
2654 |
2655 | util-deprecate@1.0.2: {}
2656 |
2657 | v8-compile-cache-lib@3.0.1: {}
2658 |
2659 | webidl-conversions@4.0.2: {}
2660 |
2661 | whatwg-url@7.1.0:
2662 | dependencies:
2663 | lodash.sortby: 4.7.0
2664 | tr46: 1.0.1
2665 | webidl-conversions: 4.0.2
2666 |
2667 | which@2.0.2:
2668 | dependencies:
2669 | isexe: 2.0.0
2670 |
2671 | word-wrap@1.2.5: {}
2672 |
2673 | workerpool@6.5.1: {}
2674 |
2675 | wrap-ansi@7.0.0:
2676 | dependencies:
2677 | ansi-styles: 4.3.0
2678 | string-width: 4.2.3
2679 | strip-ansi: 6.0.1
2680 |
2681 | wrap-ansi@8.1.0:
2682 | dependencies:
2683 | ansi-styles: 6.2.1
2684 | string-width: 5.1.2
2685 | strip-ansi: 7.1.0
2686 |
2687 | wrappy@1.0.2: {}
2688 |
2689 | xtend@4.0.2: {}
2690 |
2691 | y18n@5.0.8: {}
2692 |
2693 | yargs-parser@20.2.9: {}
2694 |
2695 | yargs-unparser@2.0.0:
2696 | dependencies:
2697 | camelcase: 6.3.0
2698 | decamelize: 4.0.0
2699 | flat: 5.0.2
2700 | is-plain-obj: 2.1.0
2701 |
2702 | yargs@16.2.0:
2703 | dependencies:
2704 | cliui: 7.0.4
2705 | escalade: 3.2.0
2706 | get-caller-file: 2.0.5
2707 | require-directory: 2.1.1
2708 | string-width: 4.2.3
2709 | y18n: 5.0.8
2710 | yargs-parser: 20.2.9
2711 |
2712 | yn@2.0.0: {}
2713 |
2714 | yn@3.1.1: {}
2715 |
2716 | yocto-queue@0.1.0: {}
2717 |
--------------------------------------------------------------------------------
/prettier.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | trailingComma: 'none',
3 | tabWidth: 2,
4 | semi: true,
5 | singleQuote: true,
6 | printWidth: 90,
7 | arrowParens: 'avoid',
8 | bracketSpacing: true,
9 | jsxBracketSameLine: false,
10 | jsxSingleQuote: false,
11 | quoteProps: 'consistent'
12 | };
13 |
--------------------------------------------------------------------------------
/src/Segmenter.ts:
--------------------------------------------------------------------------------
1 | export class Segmenter extends Intl.Segmenter {
2 | constructor(language: string, options: Intl.SegmenterOptions = {}) {
3 | super(language, options);
4 | this.language = language;
5 | this.options = options;
6 | }
7 |
8 | * segment(input: string): Generator {
9 | const { maxChunkLength = 100, ...options } = this.options;
10 | let position = 0;
11 |
12 | while (position < input.length) {
13 | const remainingText = input.slice(position);
14 | const chunkSize = Math.min(maxChunkLength, remainingText.length);
15 | const potentialChunk = remainingText.slice(0, chunkSize);
16 |
17 | // Find a safe position to break the string
18 | const breakPoint = this.findSafeBreakPoint(potentialChunk);
19 | const chunk = potentialChunk.slice(0, breakPoint);
20 |
21 | // Process the chunk with Intl.Segmenter. Using this approach instead
22 | // of super.segment() to avoid any potential side effects.
23 | const segmenter = new Intl.Segmenter(this.language, { ...options });
24 | const segments = segmenter.segment(chunk);
25 |
26 | for (const segment of segments) {
27 | yield segment;
28 | }
29 |
30 | position += breakPoint;
31 | }
32 | }
33 |
34 | findSafeBreakPoint(input: string): number {
35 | // Work backwards from the end of the input
36 | for (let i = input.length - 1; i >= 0; i--) {
37 | // Check for whitespace or simple ASCII characters
38 | if (/\s/.test(input[i]) || /^[\x20-\x7E]$/.test(input[i])) {
39 | return i + 1;
40 | }
41 | }
42 |
43 | // If no safe break points were found, return the full length
44 | return input.length;
45 | }
46 |
47 | getSegments(input: string): Intl.Segment[] {
48 | const array = [];
49 |
50 | // A for loop is much faster than Array.from, it doesn't cause a
51 | // maximum call stack error for large strings. Also, optimizations
52 | // in v8 make using `push` much faster than pre-allocating an array,
53 | // like `Array(input.length)` and setting the values at each index.
54 | for (const segment of this.segment(input)) {
55 | array.push(segment);
56 | }
57 |
58 | return array;
59 | }
60 |
61 | static getSegments(
62 | input: string,
63 | language: string,
64 | options: Intl.SegmenterOptions = {}
65 | ): Intl.Segment[] {
66 | const segmenter = new this(language, options);
67 | return segmenter.getSegments(input);
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/test/Segmenter.test.ts:
--------------------------------------------------------------------------------
1 | import assert from 'node:assert/strict';
2 | import { Segmenter } from '~/Segmenter';
3 |
4 | describe('Segmenter', () => {
5 | describe('constructor', () => {
6 | it('should create instance with default options', () => {
7 | const seg = new Segmenter('en');
8 | assert.strictEqual(seg.language, 'en', 'should set language');
9 | assert.deepStrictEqual(seg.options, {}, 'should use empty options by default');
10 | });
11 |
12 | it('should create instance with custom options', () => {
13 | const opts = { granularity: 'word' as const };
14 | const seg = new Segmenter('en', opts);
15 | assert.deepStrictEqual(seg.options, opts, 'should store provided options');
16 | });
17 | });
18 |
19 | describe('segment', () => {
20 | it('should segment simple text', () => {
21 | const seg = new Segmenter('en', { granularity: 'word' });
22 | const text = 'Hello world';
23 | const segments = Array.from(seg.segment(text));
24 |
25 | assert.strictEqual(segments.length, 3, 'should have three segments');
26 | assert.strictEqual(segments[0].segment, 'Hello', 'should segment first word');
27 | assert.strictEqual(segments[1].segment, ' ', 'should segment space');
28 | assert.strictEqual(segments[2].segment, 'world', 'should segment second word');
29 | });
30 |
31 | it('should handle maxChunkLength', () => {
32 | const seg = new Segmenter('en', { maxChunkLength: 5 });
33 | const text = 'Hello world';
34 | const segments = Array.from(seg.segment(text));
35 |
36 | assert.ok(segments.length > 2, 'should split into multiple chunks');
37 | assert.strictEqual(segments.map(s => s.segment).join(''), text, 'should preserve full text');
38 | });
39 | });
40 |
41 | describe('findSafeBreakPoint', () => {
42 | it('should find space break points', () => {
43 | const seg = new Segmenter('en');
44 | const pos = seg.findSafeBreakPoint('Hello world');
45 | assert.strictEqual(pos, 11, 'should break at end of input with space');
46 | });
47 |
48 | it('should handle ASCII characters', () => {
49 | const input = 'Hello!Worldç';
50 | const seg = new Segmenter('en');
51 | const pos = seg.findSafeBreakPoint(input);
52 | assert.strictEqual(pos, 11, 'should break at then end of input with ASCII character');
53 | });
54 | });
55 |
56 | describe('getSegments', () => {
57 | it('should return array of segments', () => {
58 | const seg = new Segmenter('en', { granularity: 'word' });
59 | const segments = seg.getSegments('Hello world');
60 |
61 | assert.ok(Array.isArray(segments), 'should return array');
62 | assert.strictEqual(segments.length, 3, 'should have three segments');
63 | });
64 |
65 | it('should handle empty input', () => {
66 | const seg = new Segmenter('en');
67 | const segments = seg.getSegments('');
68 | assert.strictEqual(segments.length, 0, 'should return empty array');
69 | });
70 | });
71 |
72 | describe('static getSegments', () => {
73 | it('should segment text with default options', () => {
74 | const segments = Segmenter.getSegments('Hello world', 'en');
75 | assert.ok(segments.length > 0, 'should return segments');
76 | });
77 |
78 | it('should segment text with custom options', () => {
79 | const segments = Segmenter.getSegments('Hello world', 'en', { granularity: 'word' });
80 | assert.strictEqual(segments.length, 3, 'should return word segments');
81 | });
82 | });
83 | });
84 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "baseUrl": ".",
4 | "allowJs": true,
5 | "allowSyntheticDefaultImports": true,
6 | "checkJs": false,
7 | "esModuleInterop": true,
8 | "isolatedModules": true,
9 | "moduleResolution": "NodeNext",
10 | "module": "NodeNext",
11 | "forceConsistentCasingInFileNames": true,
12 | "lib": ["ES2022"],
13 | "resolveJsonModule": true,
14 | "strict": true,
15 | "target": "ES2022",
16 | "types": ["node"],
17 | "paths": { "~/*": ["src/*"] }
18 | },
19 | "ts-node": {
20 | "transpileOnly": true
21 | },
22 | "include": ["src", "examples"],
23 | "exclude": ["node_modules", "build", "public", "dist", "tmp", "temp"]
24 | }
25 |
--------------------------------------------------------------------------------
/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup';
2 |
3 | export default defineConfig({
4 | clean: true,
5 | entry: ['index.ts'],
6 | cjsInterop: true,
7 | format: ['cjs', 'esm'],
8 | keepNames: true,
9 | minify: false,
10 | shims: true,
11 | splitting: false,
12 | sourcemap: true,
13 | target: 'node18'
14 | });
15 |
--------------------------------------------------------------------------------