├── .github
├── CODEOWNERS
├── renovate.json
└── workflows
│ ├── analyze-detekt.yml
│ ├── test-publish.yml
│ └── validate-gradle-wrapper.yml
├── .gitignore
├── .idea
└── codeStyles
│ ├── Project.xml
│ └── codeStyleConfig.xml
├── CHANGELOG.md
├── LICENSE.txt
├── README.md
├── SECURITY.md
├── build.gradle.kts
├── buildSrc
├── build.gradle.kts
└── src
│ └── main
│ └── kotlin
│ ├── cinterop.gradle.kts
│ ├── publish.gradle.kts
│ └── targets.gradle.kts
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew-wine
├── gradlew.bat
├── kotlin-js-store
└── yarn.lock
├── settings.gradle.kts
└── src
├── appleMain
└── kotlin
│ └── Normalize.kt
├── commonMain
└── kotlin
│ └── Normalize.kt
├── commonTest
├── kotlin
│ └── NormalizeTest.kt
└── resources
│ └── NormalizationTest.txt
├── jsMain
└── kotlin
│ └── Normalize.kt
├── jvmMain
└── kotlin
│ └── Normalize.kt
├── linuxMain
└── kotlin
│ └── Normalize.kt
├── mingwX64Main
└── kotlin
│ └── Normalize.kt
├── nativeInterop
└── cinterop
│ └── uninorm.def
├── nonWasmTest
└── kotlin
│ └── NormalizeTest.nonWasm.kt
├── wasmJsMain
└── kotlin
│ └── Normalize.kt
└── wasmJsTest
└── kotlin
├── NormalizeTest.wasmJs.kt
└── TestDataString.kt
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | * @goncalossilva
2 |
--------------------------------------------------------------------------------
/.github/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": [
3 | "github>doist/renovate-config:kotlin-base",
4 | ":rebaseStalePrs",
5 | ":disableDependencyDashboard"
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/.github/workflows/analyze-detekt.yml:
--------------------------------------------------------------------------------
1 | name: Scan with detekt
2 |
3 | on:
4 | push:
5 | branches: [ main ]
6 | pull_request:
7 | branches: [ main ]
8 | schedule:
9 | - cron: '00 6 * * 1'
10 |
11 | jobs:
12 | scan:
13 | name: Scan
14 | runs-on: ubuntu-latest
15 | timeout-minutes: 60
16 | steps:
17 | - uses: actions/checkout@v4
18 | - name: Setup detekt
19 | id: setup
20 | run: |
21 | JARFILE="$(mktemp -d)/detekt.jar"
22 | curl --request GET \
23 | --url https://github.com/detekt/detekt/releases/download/v1.23.7/detekt-cli-1.23.7-all.jar \
24 | --silent \
25 | --location \
26 | --output $JARFILE
27 | echo "jarfile=$JARFILE" >> $GITHUB_OUTPUT
28 | - name: Run detekt
29 | continue-on-error: true
30 | run: |
31 | java -jar ${{ steps.setup.outputs.jarfile }} \
32 | --input ${{ github.workspace }} \
33 | --report sarif:${{ github.workspace }}/detekt.sarif.json
34 | - name: Upload results
35 | uses: github/codeql-action/upload-sarif@v3
36 | with:
37 | sarif_file: ${{ github.workspace }}/detekt.sarif.json
38 | checkout_path: ${{ github.workspace }}
39 |
--------------------------------------------------------------------------------
/.github/workflows/test-publish.yml:
--------------------------------------------------------------------------------
1 | name: Test and publish
2 |
3 | on:
4 | push:
5 | branches: [ main ]
6 | tags: [ v* ]
7 | pull_request:
8 | branches: [ main ]
9 |
10 | jobs:
11 | test:
12 | runs-on: ${{ matrix.os }}
13 | timeout-minutes: 15
14 | strategy:
15 | matrix:
16 | include:
17 | - os: ubuntu-latest
18 | targets: native,common
19 | - os: macos-latest
20 | targets: native
21 | - os: windows-latest
22 | targets: native
23 | steps:
24 | - uses: actions/checkout@v4
25 | - uses: actions/setup-java@v3
26 | with:
27 | java-version: '11'
28 | distribution: 'temurin'
29 | - run: |
30 | # azure.archive.ubuntu.com is flaky
31 | sudo sed -i 's/azure.archive.ubuntu.com/archive.ubuntu.com/' /etc/apt/sources.list
32 | sudo apt-get update
33 | sudo apt-get install -y libunistring-dev libc6-dev-i386
34 | if: runner.os == 'Linux'
35 | - run: |
36 | # Avoid "No usable sandbox" errors on Ubuntu, based on the instructions found here:
37 | # https://chromium.googlesource.com/chromium/src/+/main/docs/security/apparmor-userns-restrictions.md
38 | echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns
39 | if: runner.os == 'Linux'
40 | - run: ./gradlew assemble check
41 | env:
42 | ORG_GRADLE_PROJECT_targets: ${{ matrix.targets }}
43 | shell: bash
44 |
45 | publish:
46 | needs: test
47 | if: startsWith(github.ref, 'refs/tags/v')
48 | runs-on: ${{ matrix.os }}
49 | timeout-minutes: 30
50 | strategy:
51 | matrix:
52 | include:
53 | - os: ubuntu-latest
54 | targets: all
55 | publishRootTarget: true
56 | - os: macos-latest
57 | targets: native
58 | publishRootTarget: false
59 | - os: windows-latest
60 | targets: native
61 | publishRootTarget: false
62 | fail-fast: false
63 | steps:
64 | - uses: actions/checkout@v4
65 | - uses: actions/setup-java@v3
66 | with:
67 | java-version: '11'
68 | distribution: 'temurin'
69 | - id: get_tag_version
70 | run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
71 | shell: bash
72 | - run: sudo apt-get install -y libunistring-dev libc6-dev-i386
73 | if: runner.os == 'Linux'
74 | - run: ./gradlew assemble publishToSonatype closeAndReleaseSonatypeStagingRepository
75 | env:
76 | ORG_GRADLE_PROJECT_version: ${{ steps.get_tag_version.outputs.VERSION }}
77 | ORG_GRADLE_PROJECT_targets: ${{ matrix.targets }}
78 | ORG_GRADLE_PROJECT_publishRootTarget: ${{ matrix.publishRootTarget }}
79 | ORG_GRADLE_PROJECT_ossrhUsername: ${{ secrets.OSSRH_USERNAME }}
80 | ORG_GRADLE_PROJECT_ossrhPassword: ${{ secrets.OSSRH_PASSWORD }}
81 | ORG_GRADLE_PROJECT_signingKey: ${{ secrets.SIGNING_SECRET_KEY }}
82 | ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.SIGNING_PASSWORD }}
83 | shell: bash
84 |
85 | release:
86 | needs: publish
87 | runs-on: ubuntu-latest
88 | timeout-minutes: 15
89 | steps:
90 | - uses: actions/checkout@v4
91 | - uses: actions/create-release@v1
92 | env:
93 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
94 | with:
95 | tag_name: ${{ github.ref }}
96 | release_name: ${{ github.ref }}
97 |
--------------------------------------------------------------------------------
/.github/workflows/validate-gradle-wrapper.yml:
--------------------------------------------------------------------------------
1 | name: Validate gradle wrapper
2 |
3 | on:
4 | push:
5 | branches: [ main ]
6 | pull_request:
7 | branches: [ main ]
8 |
9 | jobs:
10 | validate:
11 | runs-on: ubuntu-latest
12 | timeout-minutes: 60
13 | steps:
14 | - uses: actions/checkout@v4
15 | - uses: gradle/wrapper-validation-action@v1
16 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.toptal.com/developers/gitignore/api/java,node,linux,macos,gradle,kotlin,windows,intellij+all
2 | # Edit at https://www.toptal.com/developers/gitignore?templates=java,node,linux,macos,gradle,kotlin,windows,intellij+all
3 |
4 | ### Intellij+all ###
5 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
6 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
7 |
8 | # User-specific stuff
9 | .idea/**/workspace.xml
10 | .idea/**/tasks.xml
11 | .idea/**/usage.statistics.xml
12 | .idea/**/dictionaries
13 | .idea/**/shelf
14 |
15 | # AWS User-specific
16 | .idea/**/aws.xml
17 |
18 | # Generated files
19 | .idea/**/contentModel.xml
20 |
21 | # Sensitive or high-churn files
22 | .idea/**/dataSources/
23 | .idea/**/dataSources.ids
24 | .idea/**/dataSources.local.xml
25 | .idea/**/sqlDataSources.xml
26 | .idea/**/dynamic.xml
27 | .idea/**/uiDesigner.xml
28 | .idea/**/dbnavigator.xml
29 |
30 | # Gradle
31 | .idea/**/gradle.xml
32 | .idea/**/libraries
33 |
34 | # Gradle and Maven with auto-import
35 | # When using Gradle or Maven with auto-import, you should exclude module files,
36 | # since they will be recreated, and may cause churn. Uncomment if using
37 | # auto-import.
38 | # .idea/artifacts
39 | # .idea/compiler.xml
40 | # .idea/jarRepositories.xml
41 | # .idea/modules.xml
42 | # .idea/*.iml
43 | # .idea/modules
44 | # *.iml
45 | # *.ipr
46 |
47 | # CMake
48 | cmake-build-*/
49 |
50 | # Mongo Explorer plugin
51 | .idea/**/mongoSettings.xml
52 |
53 | # File-based project format
54 | *.iws
55 |
56 | # IntelliJ
57 | out/
58 |
59 | # mpeltonen/sbt-idea plugin
60 | .idea_modules/
61 |
62 | # JIRA plugin
63 | atlassian-ide-plugin.xml
64 |
65 | # Cursive Clojure plugin
66 | .idea/replstate.xml
67 |
68 | # SonarLint plugin
69 | .idea/sonarlint/
70 |
71 | # Crashlytics plugin (for Android Studio and IntelliJ)
72 | com_crashlytics_export_strings.xml
73 | crashlytics.properties
74 | crashlytics-build.properties
75 | fabric.properties
76 |
77 | # Editor-based Rest Client
78 | .idea/httpRequests
79 |
80 | # Android studio 3.1+ serialized cache file
81 | .idea/caches/build_file_checksums.ser
82 |
83 | ### Intellij+all Patch ###
84 | # Ignore everything but code style settings and run configurations
85 | # that are supposed to be shared within teams.
86 |
87 | .idea/*
88 |
89 | !.idea/codeStyles
90 | !.idea/runConfigurations
91 |
92 | ### Java ###
93 | # Compiled class file
94 | *.class
95 |
96 | # Log file
97 | *.log
98 |
99 | # BlueJ files
100 | *.ctxt
101 |
102 | # Mobile Tools for Java (J2ME)
103 | .mtj.tmp/
104 |
105 | # Package Files #
106 | *.jar
107 | *.war
108 | *.nar
109 | *.ear
110 | *.zip
111 | *.tar.gz
112 | *.rar
113 |
114 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
115 | hs_err_pid*
116 | replay_pid*
117 |
118 | ### Kotlin ###
119 | # Compiled class file
120 |
121 | # Log file
122 |
123 | # BlueJ files
124 |
125 | # Mobile Tools for Java (J2ME)
126 |
127 | # Package Files #
128 |
129 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
130 |
131 | ### Linux ###
132 | *~
133 |
134 | # temporary files which can be created if a process still has a handle open of a deleted file
135 | .fuse_hidden*
136 |
137 | # KDE directory preferences
138 | .directory
139 |
140 | # Linux trash folder which might appear on any partition or disk
141 | .Trash-*
142 |
143 | # .nfs files are created when an open file is removed but is still being accessed
144 | .nfs*
145 |
146 | ### macOS ###
147 | # General
148 | .DS_Store
149 | .AppleDouble
150 | .LSOverride
151 |
152 | # Icon must end with two \r
153 | Icon
154 |
155 |
156 | # Thumbnails
157 | ._*
158 |
159 | # Files that might appear in the root of a volume
160 | .DocumentRevisions-V100
161 | .fseventsd
162 | .Spotlight-V100
163 | .TemporaryItems
164 | .Trashes
165 | .VolumeIcon.icns
166 | .com.apple.timemachine.donotpresent
167 |
168 | # Directories potentially created on remote AFP share
169 | .AppleDB
170 | .AppleDesktop
171 | Network Trash Folder
172 | Temporary Items
173 | .apdisk
174 |
175 | ### macOS Patch ###
176 | # iCloud generated files
177 | *.icloud
178 |
179 | ### Node ###
180 | # Logs
181 | logs
182 | npm-debug.log*
183 | yarn-debug.log*
184 | yarn-error.log*
185 | lerna-debug.log*
186 | .pnpm-debug.log*
187 |
188 | # Diagnostic reports (https://nodejs.org/api/report.html)
189 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
190 |
191 | # Runtime data
192 | pids
193 | *.pid
194 | *.seed
195 | *.pid.lock
196 |
197 | # Directory for instrumented libs generated by jscoverage/JSCover
198 | lib-cov
199 |
200 | # Coverage directory used by tools like istanbul
201 | coverage
202 | *.lcov
203 |
204 | # nyc test coverage
205 | .nyc_output
206 |
207 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
208 | .grunt
209 |
210 | # Bower dependency directory (https://bower.io/)
211 | bower_components
212 |
213 | # node-waf configuration
214 | .lock-wscript
215 |
216 | # Compiled binary addons (https://nodejs.org/api/addons.html)
217 | build/Release
218 |
219 | # Dependency directories
220 | node_modules/
221 | jspm_packages/
222 |
223 | # Snowpack dependency directory (https://snowpack.dev/)
224 | web_modules/
225 |
226 | # TypeScript cache
227 | *.tsbuildinfo
228 |
229 | # Optional npm cache directory
230 | .npm
231 |
232 | # Optional eslint cache
233 | .eslintcache
234 |
235 | # Optional stylelint cache
236 | .stylelintcache
237 |
238 | # Microbundle cache
239 | .rpt2_cache/
240 | .rts2_cache_cjs/
241 | .rts2_cache_es/
242 | .rts2_cache_umd/
243 |
244 | # Optional REPL history
245 | .node_repl_history
246 |
247 | # Output of 'npm pack'
248 | *.tgz
249 |
250 | # Yarn Integrity file
251 | .yarn-integrity
252 |
253 | # dotenv environment variable files
254 | .env
255 | .env.development.local
256 | .env.test.local
257 | .env.production.local
258 | .env.local
259 |
260 | # parcel-bundler cache (https://parceljs.org/)
261 | .cache
262 | .parcel-cache
263 |
264 | # Next.js build output
265 | .next
266 | out
267 |
268 | # Nuxt.js build / generate output
269 | .nuxt
270 | dist
271 |
272 | # Gatsby files
273 | .cache/
274 | # Comment in the public line in if your project uses Gatsby and not Next.js
275 | # https://nextjs.org/blog/next-9-1#public-directory-support
276 | # public
277 |
278 | # vuepress build output
279 | .vuepress/dist
280 |
281 | # vuepress v2.x temp and cache directory
282 | .temp
283 |
284 | # Docusaurus cache and generated files
285 | .docusaurus
286 |
287 | # Serverless directories
288 | .serverless/
289 |
290 | # FuseBox cache
291 | .fusebox/
292 |
293 | # DynamoDB Local files
294 | .dynamodb/
295 |
296 | # TernJS port file
297 | .tern-port
298 |
299 | # Stores VSCode versions used for testing VSCode extensions
300 | .vscode-test
301 |
302 | # yarn v2
303 | .yarn/cache
304 | .yarn/unplugged
305 | .yarn/build-state.yml
306 | .yarn/install-state.gz
307 | .pnp.*
308 |
309 | ### Node Patch ###
310 | # Serverless Webpack directories
311 | .webpack/
312 |
313 | # Optional stylelint cache
314 |
315 | # SvelteKit build / generate output
316 | .svelte-kit
317 |
318 | ### Windows ###
319 | # Windows thumbnail cache files
320 | Thumbs.db
321 | Thumbs.db:encryptable
322 | ehthumbs.db
323 | ehthumbs_vista.db
324 |
325 | # Dump file
326 | *.stackdump
327 |
328 | # Folder config file
329 | [Dd]esktop.ini
330 |
331 | # Recycle Bin used on file shares
332 | $RECYCLE.BIN/
333 |
334 | # Windows Installer files
335 | *.cab
336 | *.msi
337 | *.msix
338 | *.msm
339 | *.msp
340 |
341 | # Windows shortcuts
342 | *.lnk
343 |
344 | ### Gradle ###
345 | .gradle
346 | **/build/
347 | !src/**/build/
348 |
349 | # Ignore Gradle GUI config
350 | gradle-app.setting
351 |
352 | # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
353 | !gradle-wrapper.jar
354 |
355 | # Avoid ignore Gradle wrappper properties
356 | !gradle-wrapper.properties
357 |
358 | # Cache of project
359 | .gradletasknamecache
360 |
361 | # Eclipse Gradle plugin generated files
362 | # Eclipse Core
363 | .project
364 | # JDT-specific (Eclipse Java Development Tools)
365 | .classpath
366 |
367 | ### Gradle Patch ###
368 | # Java heap dump
369 | *.hprof
370 |
371 | # End of https://www.toptal.com/developers/gitignore/api/java,node,linux,macos,gradle,kotlin,windows,intellij+all
372 |
373 | .kotlin
374 |
--------------------------------------------------------------------------------
/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes are documented in this file. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
4 |
5 | ## [Unreleased]
6 |
7 | ## [1.2.0] - 2025-03-20
8 |
9 | ### Added
10 |
11 | - Support for Wasm - thanks @zsmb13!
12 |
13 | ## [1.1.1] - 2024-07-16
14 |
15 | ### Fixed
16 |
17 | - Ensure root publication is aware of all targets
18 |
19 | ## [1.1.0] - 2024-07-16
20 |
21 | > [!IMPORTANT]
22 | > Version 1.1.0 and higher target Kotlin 2.0 are incompatible with Kotlin 1.9.
23 | > Stick to version 1.0.5 if you still target Kotlin 1.9.
24 |
25 | ### Added
26 |
27 | - Support for Kotlin 2.0
28 |
29 | ## [1.0.5] - 2023-04-22
30 |
31 | ### Fixed
32 |
33 | - Fix normalization being truncated on Windows in some cases
34 |
35 | ## [1.0.4] - 2021-12-13
36 |
37 | ### Added
38 |
39 | - Support for macOS ARM 64-bit
40 | - Support for targeting Apple simulators on macOS ARM 64-bit
41 |
42 | ## [1.0.3] - 2021-07-22
43 |
44 | ### Fixed
45 |
46 | - Apple and Windows targets not being published
47 |
48 | ## [1.0.2] - 2021-07-22
49 |
50 | ### Added
51 |
52 | - Support for watchOS ARM 32-bit, including the Apple Watch Series 3, still supported by watchOS 7
53 | - Support for Linux ARM 64-bit, including the Raspberry Pi 4
54 |
55 | ## [1.0.1] - 2021-05-18
56 |
57 | ### Added
58 |
59 | - Support for watchOS and tvOS (64-bit)
60 |
61 | ## [1.0.0] - 2021-05-17
62 |
63 | ### Added
64 |
65 | - Initial release with support for JVM, Android, JS, iOS, macOS, Windows, Linux
66 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021-2023 Doist
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # doistx-normalize
2 |
3 | [![badge-version]](https://search.maven.org/search?q=g:com.doist.x%20a:normalize*)
4 | ![badge-android][badge-android]
5 | ![badge-jvm][badge-jvm]
6 | ![badge-js][badge-js]
7 | ![badge-ios][badge-ios]
8 | ![badge-ios][badge-watchos]
9 | ![badge-ios][badge-tvos]
10 | ![badge-macos][badge-macos]
11 | ![badge-windows][badge-windows]
12 | ![badge-linux][badge-linux]
13 |
14 | Kotlin Multiplatform (KMP) library that adds support for normalization as described by [Unicode Standard Annex #15 - Unicode Normalization Forms](https://unicode.org/reports/tr15/), by extending the `String` class with a `normalize(Form)` method.
15 |
16 | All normalization forms are supported:
17 | - `Form.NFC`: Normalization Form C, canonical decomposition followed by canonical composition.
18 | - `Form.NFD`: Normalization Form D, canonical decomposition.
19 | - `Form.NFKC`: Normalization Form KC, compatibility decomposition followed by canonical composition.
20 | - `Form.NFKD`: Normalization Form KD, compatibility decomposition.
21 |
22 | ## Usage
23 |
24 | ```kotlin
25 | "Äffin".normalize(Form.NFC) // => "Äffin"
26 | "Äffin".normalize(Form.NFD) // => "A\u0308ffin"
27 | "Äffin".normalize(Form.NFKC) // => "Äffin"
28 | "Äffin".normalize(Form.NFKD) // => "A\u0308ffin"
29 |
30 | "Henry \u2163".normalize(Form.NFC) // => "Henry \u2163"
31 | "Henry \u2163".normalize(Form.NFD) // => "Henry \u2163"
32 | "Henry \u2163".normalize(Form.NFKC) // => "Henry IV"
33 | "Henry \u2163".normalize(Form.NFKD) // => "Henry IV"
34 | ```
35 |
36 | ## Setup
37 |
38 | ```kotlin
39 | repositories {
40 | mavenCentral()
41 | }
42 |
43 | kotlin {
44 | sourceSets {
45 | val commonMain by getting {
46 | dependencies {
47 | implementation("com.doist.x:normalize:1.2.0")
48 | }
49 | }
50 | }
51 | }
52 | ```
53 |
54 | ## Development
55 |
56 | Building this project can be tricky, as cross-compilation in KMP not widely supported. In this case:
57 | - macOS and iOS targets must be built on macOS.
58 | - Windows targets should be built on Windows (or a JDK under [Wine](https://www.winehq.org/)).
59 | - Linux targets must be built on Linux due depending on `libunistring`.
60 | - JVM/Android and JS targets can be cross-compiled.
61 |
62 | The defaults can be adjusted using two [project properties](https://docs.gradle.org/current/userguide/build_environment.html#sec:project_properties):
63 | - `targets` is a string for which targets to build, test, or publish, depending on the task that runs.
64 | - `all` (default): All possible targets in the current host.
65 | - `native`: Native targets only (e.g., on macOS, that's macOS, iOS, watchOS and tvOS).
66 | - `common`: Common targets only (e.g., JVM, JS, Wasm).
67 | - `host`: Host OS only.
68 | - `publishRootTarget` is a boolean that indicates whether the [`kotlinMultiplatform` root publication](https://kotlinlang.org/docs/mpp-publish-lib.html#structure-of-publications) is included when publishing enabled targets (can only be done once).
69 |
70 | When targets are built, tested and published in CI/CD, the Apple host handles Apple-specific targets, the Windows host handles Windows, and Linux handles everything else.
71 |
72 | ## Release
73 |
74 | To release a new version, ensure `CHANGELOG.md` is up-to-date, and push the corresponding tag (e.g., `v1.2.3`). GitHub Actions handles the rest.
75 |
76 | ## License
77 |
78 | Released under the [MIT License](https://opensource.org/licenses/MIT).
79 |
80 | Unicode's normalization test suite is subject to [this license](https://github.com/unicode-org/icu/blob/main/LICENSE).
81 |
82 | [badge-version]: https://img.shields.io/maven-central/v/com.doist.x/normalize?style=flat
83 | [badge-android]: https://img.shields.io/badge/platform-android-6EDB8D.svg?style=flat
84 | [badge-ios]: https://img.shields.io/badge/platform-ios-CDCDCD.svg?style=flat
85 | [badge-js]: https://img.shields.io/badge/platform-js-F8DB5D.svg?style=flat
86 | [badge-jvm]: https://img.shields.io/badge/platform-jvm-DB413D.svg?style=flat
87 | [badge-linux]: https://img.shields.io/badge/platform-linux-2D3F6C.svg?style=flat
88 | [badge-windows]: https://img.shields.io/badge/platform-windows-4D76CD.svg?style=flat
89 | [badge-macos]: https://img.shields.io/badge/platform-macos-111111.svg?style=flat
90 | [badge-watchos]: https://img.shields.io/badge/platform-watchos-C0C0C0.svg?style=flat
91 | [badge-tvos]: https://img.shields.io/badge/platform-tvos-808080.svg?style=flat
92 | [badge-wasm]: httpss://img.shields.io/badge/platform-wasm-624FE8.svg?style=flat
93 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Supported versions
4 |
5 | At the moment, we only officially support the latest version of the project with security updates.
6 |
7 | ## Reporting a vulnerability
8 |
9 | Please report any vulnerabilities by [opening an issue](https://github.com/Doist/doistx-normalize/issues/new) and including as many details as you can. We will prioritize security reports above other issues.
10 |
11 | We don't currently offer a bounty for OSS vulnerabilities, but if it affects [one of the eligible targets, you might qualify for a reward](https://todoist.com/help/articles/doist-bug-bounty-policy).
12 |
--------------------------------------------------------------------------------
/build.gradle.kts:
--------------------------------------------------------------------------------
1 | import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockMismatchReport
2 | import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin
3 | import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnRootExtension
4 |
5 | plugins {
6 | kotlin("multiplatform")
7 | id("targets")
8 | id("cinterop")
9 | id("publish")
10 | id("com.goncalossilva.resources") version "0.10.0"
11 | }
12 |
13 | repositories {
14 | mavenCentral()
15 | }
16 |
17 | kotlin {
18 | explicitApi()
19 |
20 | jvmToolchain(11)
21 |
22 | sourceSets {
23 | all {
24 | languageSettings.optIn("kotlinx.cinterop.ExperimentalForeignApi")
25 | }
26 |
27 | val commonTest by getting {
28 | dependencies {
29 | implementation(kotlin("test"))
30 | }
31 | }
32 |
33 | val nonWasmTest by creating {
34 | dependsOn(commonTest)
35 | dependencies {
36 | implementation("com.goncalossilva:resources:0.10.0")
37 | }
38 | }
39 |
40 | jvmTest { dependsOn(nonWasmTest) }
41 | jsTest { dependsOn(nonWasmTest) }
42 | nativeTest { dependsOn(nonWasmTest) }
43 | }
44 | }
45 |
46 | rootProject.plugins.withType(YarnPlugin::class.java) {
47 | rootProject.configure {
48 | yarnLockMismatchReport = YarnLockMismatchReport.WARNING
49 | yarnLockAutoReplace = true
50 | }
51 | }
52 |
53 | // Sanity check before attempting to publish root target without having all targets enabled.
54 | tasks.matching { it.name.startsWith("publishKotlinMultiplatform") }.configureEach {
55 | doFirst {
56 | require(findProperty("targets") == "all") {
57 | "Configuration is set to publish root target without all targets enabled."
58 | }
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/buildSrc/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | `kotlin-dsl`
3 | }
4 |
5 | repositories {
6 | gradlePluginPortal()
7 | mavenCentral()
8 | }
9 |
10 | dependencies {
11 | implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.21")
12 | implementation("io.github.gradle-nexus:publish-plugin:2.0.0")
13 | }
14 |
--------------------------------------------------------------------------------
/buildSrc/src/main/kotlin/cinterop.gradle.kts:
--------------------------------------------------------------------------------
1 | /*
2 | * Generate stubs before compiling.
3 | */
4 |
5 | tasks.configureEach {
6 | val match = "cinterop.+([A-Z][a-z]+)([A-Z][a-z]*\\d\\d.*)".toRegex().matchEntire(name)
7 | if (match != null) {
8 | val (target) = match.destructured
9 | tasks.findByName("compileKotlin$target")?.mustRunAfter(tasks.getByName(match.value))
10 | }
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/buildSrc/src/main/kotlin/publish.gradle.kts:
--------------------------------------------------------------------------------
1 | /*
2 | * Set up publishing with Maven Central. Useful resources:
3 | * - https://kotlinlang.org/docs/mpp-publish-lib.html
4 | * - https://central.sonatype.org/publish/ (esp. the GPG section)
5 | * - https://getstream.io/blog/publishing-libraries-to-mavencentral-2021/
6 | * - https://dev.to/kotlin/how-to-build-and-publish-a-kotlin-multiplatform-library-going-public-4a8k
7 | */
8 |
9 | import org.gradle.api.publish.maven.MavenPublication
10 | import org.gradle.api.tasks.bundling.Jar
11 | import org.gradle.kotlin.dsl.`maven-publish`
12 | import org.gradle.kotlin.dsl.signing
13 |
14 | plugins {
15 | `maven-publish`
16 | signing
17 | id("io.github.gradle-nexus.publish-plugin")
18 | }
19 |
20 | group = "com.doist.x"
21 | version = property("version") as String
22 |
23 | // TODO: Remove when https://youtrack.jetbrains.com/issue/KT-46466 is fixed.
24 | val signingTasks = tasks.withType()
25 | tasks.withType().configureEach {
26 | dependsOn(signingTasks)
27 | }
28 |
29 | val javadocJar by tasks.registering(Jar::class) {
30 | archiveClassifier.set("javadoc")
31 | }
32 |
33 | // Setup publishing environment.
34 | publishing {
35 | // Configure all publications.
36 | publications.withType {
37 | val pomDescription: String by project
38 | val pomUrl: String by project
39 | val pomLicenseName: String by project
40 | val pomLicenseUrl: String by project
41 | val pomScmUrl: String by project
42 | val pomScmConnection: String by project
43 | val pomScmDeveloperConnection: String by project
44 | val pomDeveloperId: String by project
45 | val pomDeveloperName: String by project
46 |
47 | // Publish docs with each artifact.
48 | artifact(javadocJar)
49 |
50 | // Provide information requited by Maven Central.
51 | pom {
52 | name.set(rootProject.name)
53 | description.set(pomDescription)
54 | url.set(pomUrl)
55 |
56 | licenses {
57 | license {
58 | name.set(pomLicenseName)
59 | url.set(pomLicenseUrl)
60 | }
61 | }
62 |
63 | scm {
64 | url.set(pomScmUrl)
65 | connection.set(pomScmConnection)
66 | developerConnection.set(pomScmDeveloperConnection)
67 | }
68 |
69 | developers {
70 | developer {
71 | id.set(pomDeveloperId)
72 | name.set(pomDeveloperName)
73 | }
74 | }
75 | }
76 | }
77 | }
78 |
79 | // Sign artifacts.
80 | // Use `signingKey` and `signingPassword` properties if provided.
81 | // Otherwise, default to `signing.keyId`, `signing.password` and `signing.secretKeyRingFile`.
82 | signing {
83 | val signingKey: String? by project
84 | val signingPassword: String? by project
85 | if (signingKey != null && signingPassword != null) {
86 | useInMemoryPgpKeys(signingKey, signingPassword)
87 | }
88 | sign(publishing.publications)
89 | }
90 |
91 | // Leverage Gradle Nexus Publish Plugin to create, close and release staging repositories,
92 | // covering the last part of the release process to Maven Central.
93 | nexusPublishing {
94 | repositories {
95 | sonatype {
96 | // Read `ossrhUsername` and `ossrhPassword` properties.
97 | // DO NOT ADD THESE TO SOURCE CONTROL. Store them in your system properties,
98 | // or pass them in using ORG_GRADLE_PROJECT_* environment variables.
99 | val ossrhUsername: String? by project
100 | val ossrhPassword: String? by project
101 | val ossrhStagingProfileId: String? by project
102 | username.set(ossrhUsername)
103 | password.set(ossrhPassword)
104 | stagingProfileId.set(ossrhStagingProfileId)
105 | }
106 | }
107 | }
108 |
109 | // Publish root target only when explicitly specified, since it can only be published once.
110 | tasks.matching { it.name.startsWith("publishKotlinMultiplatform") }
111 | .configureEach { onlyIf { findProperty("publishRootTarget") == "true" } }
112 |
--------------------------------------------------------------------------------
/buildSrc/src/main/kotlin/targets.gradle.kts:
--------------------------------------------------------------------------------
1 | /*
2 | * Set up build and verification targets, depending on what's enabled by the "targets" property.
3 | */
4 |
5 | import org.gradle.api.GradleException
6 | import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
7 | import org.gradle.nativeplatform.platform.internal.DefaultOperatingSystem
8 | import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
9 | import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
10 | import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
11 |
12 | plugins {
13 | kotlin("multiplatform")
14 | }
15 |
16 | kotlin {
17 | applyDefaultHierarchyTemplate()
18 |
19 | val enabledTargets = (property("targets") as String).split(",")
20 | enabledTargets.forEach { enabledTarget ->
21 | when (enabledTarget) {
22 | "all" -> {
23 | configureCommonTargets()
24 | configureAppleTargets()
25 | configureWindowsTargets()
26 | configureLinuxTargets()
27 | }
28 | "common" -> {
29 | configureCommonTargets()
30 | }
31 | "native", "host" -> {
32 | val os: DefaultOperatingSystem = DefaultNativePlatform.getCurrentOperatingSystem()
33 | when {
34 | os.isMacOsX -> configureAppleTargets(enabledTarget == "host")
35 | os.isWindows -> configureWindowsTargets()
36 | os.isLinux -> configureLinuxTargets(enabledTarget == "host")
37 | }
38 | }
39 | else -> {
40 | throw GradleException(
41 | "Property 'targets' must be a comma-separated list of " +
42 | "'all', 'native', 'common', or 'host'; found '$targets'"
43 | )
44 | }
45 | }
46 | }
47 | }
48 |
49 | fun KotlinMultiplatformExtension.configureCommonTargets() {
50 | jvm {
51 | testRuns["test"].executionTask.configure {
52 | useJUnit()
53 | }
54 | }
55 |
56 | js(IR) {
57 | browser {
58 | testTask {
59 | useKarma {
60 | useChromiumHeadless()
61 | }
62 | }
63 | }
64 | }
65 |
66 | @OptIn(ExperimentalWasmDsl::class)
67 | wasmJs {
68 | browser()
69 | nodejs()
70 | }
71 |
72 | sourceSets {
73 | val webMain by creating {
74 | dependsOn(commonMain.get())
75 | }
76 | jsMain {
77 | dependsOn(webMain)
78 | }
79 | wasmJsMain {
80 | dependsOn(webMain)
81 | }
82 |
83 | jvmTest.dependencies {
84 | implementation(kotlin("test-junit"))
85 | }
86 | jsTest.dependencies {
87 | implementation(kotlin("test-js"))
88 | }
89 | }
90 | }
91 |
92 | fun KotlinMultiplatformExtension.configureAppleTargets(hostOnly: Boolean = false) {
93 | macosX64()
94 | macosArm64()
95 |
96 | if (!hostOnly) {
97 | iosX64()
98 | iosArm64()
99 | iosSimulatorArm64()
100 |
101 | watchosX64()
102 | watchosArm32()
103 | watchosArm64()
104 | watchosSimulatorArm64()
105 |
106 | tvosX64()
107 | tvosArm64()
108 | tvosSimulatorArm64()
109 | }
110 | }
111 |
112 | fun KotlinMultiplatformExtension.configureWindowsTargets() {
113 | mingwX64()
114 | }
115 |
116 | fun KotlinMultiplatformExtension.configureLinuxTargets(hostOnly: Boolean = false) {
117 | val linuxTargets = mutableListOf()
118 |
119 | val arch = System.getProperty("os.arch")
120 | if (!hostOnly || arch == "amd64" || arch == "x86_64") {
121 | linuxTargets.add(linuxX64())
122 | }
123 | if (!hostOnly || arch == "aarch64") {
124 | linuxTargets.add(linuxArm64())
125 | }
126 |
127 | linuxTargets.forEach { linuxTarget ->
128 | linuxTarget.compilations.getByName("main") {
129 | @Suppress("UNUSED_VARIABLE")
130 | val uninorm by cinterops.creating
131 | }
132 | }
133 | }
134 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Targets to build, test, and publish.
2 | # One or more of "all", "common", "native", or "host", separated by comma.
3 | targets=common,native
4 |
5 | # Whether to enable the root "kotlinMultiplatform" publication. It can only be uploaded once.
6 | publishRootTarget=false
7 |
8 | # Publication properties.
9 | pomDescription=KMP library for string unicode normalization
10 | pomUrl=https://github.com/Doist/doistx-normalize
11 | pomLicenseName=MIT
12 | pomLicenseUrl=https://opensource.org/licenses/MIT
13 | pomScmUrl=https://github.com/Doist/doistx-normalize
14 | pomScmConnection=scm:git:git://github.com/Doist/doistx-normalize.git
15 | pomScmDeveloperConnection=scm:git:ssh://git@github.com/Doist/doistx-normalize.git
16 | pomDeveloperId=doist
17 | pomDeveloperName=Doist Inc.
18 |
19 | ossrhUsername=
20 | ossrhPassword=
21 | ossrhStagingProfileId=28f59cc72c4fe0
22 |
23 | # Build properties.
24 | org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m
25 | kotlin.code.style=official
26 | kotlin.mpp.applyDefaultHierarchyTemplate=false
27 | kotlin.mpp.enableCInteropCommonization=true
28 | kotlin.native.ignoreDisabledTargets=true
29 | kotlin.apple.xcodeCompatibility.nowarn=true
30 | kotlin.js.generate.executable.default=false
31 |
32 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Doist/doistx-normalize/954a5714a35abaa87c416730d0754116d2b8ce7a/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | #
4 | # Copyright © 2015-2021 the original authors.
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # https://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 | # SPDX-License-Identifier: Apache-2.0
19 | #
20 |
21 | ##############################################################################
22 | #
23 | # Gradle start up script for POSIX generated by Gradle.
24 | #
25 | # Important for running:
26 | #
27 | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
28 | # noncompliant, but you have some other compliant shell such as ksh or
29 | # bash, then to run this script, type that shell name before the whole
30 | # command line, like:
31 | #
32 | # ksh Gradle
33 | #
34 | # Busybox and similar reduced shells will NOT work, because this script
35 | # requires all of these POSIX shell features:
36 | # * functions;
37 | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
38 | # «${var#prefix}», «${var%suffix}», and «$( cmd )»;
39 | # * compound commands having a testable exit status, especially «case»;
40 | # * various built-in commands including «command», «set», and «ulimit».
41 | #
42 | # Important for patching:
43 | #
44 | # (2) This script targets any POSIX shell, so it avoids extensions provided
45 | # by Bash, Ksh, etc; in particular arrays are avoided.
46 | #
47 | # The "traditional" practice of packing multiple parameters into a
48 | # space-separated string is a well documented source of bugs and security
49 | # problems, so this is (mostly) avoided, by progressively accumulating
50 | # options in "$@", and eventually passing that to Java.
51 | #
52 | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
53 | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
54 | # see the in-line comments for details.
55 | #
56 | # There are tweaks for specific operating systems such as AIX, CygWin,
57 | # Darwin, MinGW, and NonStop.
58 | #
59 | # (3) This script is generated from the Groovy template
60 | # https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
61 | # within the Gradle project.
62 | #
63 | # You can find Gradle at https://github.com/gradle/gradle/.
64 | #
65 | ##############################################################################
66 |
67 | # Attempt to set APP_HOME
68 |
69 | # Resolve links: $0 may be a link
70 | app_path=$0
71 |
72 | # Need this for daisy-chained symlinks.
73 | while
74 | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
75 | [ -h "$app_path" ]
76 | do
77 | ls=$( ls -ld "$app_path" )
78 | link=${ls#*' -> '}
79 | case $link in #(
80 | /*) app_path=$link ;; #(
81 | *) app_path=$APP_HOME$link ;;
82 | esac
83 | done
84 |
85 | # This is normally unused
86 | # shellcheck disable=SC2034
87 | APP_BASE_NAME=${0##*/}
88 | # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
89 | APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
90 |
91 | # Use the maximum available, or set MAX_FD != -1 to use that value.
92 | MAX_FD=maximum
93 |
94 | warn () {
95 | echo "$*"
96 | } >&2
97 |
98 | die () {
99 | echo
100 | echo "$*"
101 | echo
102 | exit 1
103 | } >&2
104 |
105 | # OS specific support (must be 'true' or 'false').
106 | cygwin=false
107 | msys=false
108 | darwin=false
109 | nonstop=false
110 | case "$( uname )" in #(
111 | CYGWIN* ) cygwin=true ;; #(
112 | Darwin* ) darwin=true ;; #(
113 | MSYS* | MINGW* ) msys=true ;; #(
114 | NONSTOP* ) nonstop=true ;;
115 | esac
116 |
117 | CLASSPATH="\\\"\\\""
118 |
119 |
120 | # Determine the Java command to use to start the JVM.
121 | if [ -n "$JAVA_HOME" ] ; then
122 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
123 | # IBM's JDK on AIX uses strange locations for the executables
124 | JAVACMD=$JAVA_HOME/jre/sh/java
125 | else
126 | JAVACMD=$JAVA_HOME/bin/java
127 | fi
128 | if [ ! -x "$JAVACMD" ] ; then
129 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
130 |
131 | Please set the JAVA_HOME variable in your environment to match the
132 | location of your Java installation."
133 | fi
134 | else
135 | JAVACMD=java
136 | if ! command -v java >/dev/null 2>&1
137 | then
138 | die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
139 |
140 | Please set the JAVA_HOME variable in your environment to match the
141 | location of your Java installation."
142 | fi
143 | fi
144 |
145 | # Increase the maximum file descriptors if we can.
146 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
147 | case $MAX_FD in #(
148 | max*)
149 | # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
150 | # shellcheck disable=SC2039,SC3045
151 | MAX_FD=$( ulimit -H -n ) ||
152 | warn "Could not query maximum file descriptor limit"
153 | esac
154 | case $MAX_FD in #(
155 | '' | soft) :;; #(
156 | *)
157 | # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
158 | # shellcheck disable=SC2039,SC3045
159 | ulimit -n "$MAX_FD" ||
160 | warn "Could not set maximum file descriptor limit to $MAX_FD"
161 | esac
162 | fi
163 |
164 | # Collect all arguments for the java command, stacking in reverse order:
165 | # * args from the command line
166 | # * the main class name
167 | # * -classpath
168 | # * -D...appname settings
169 | # * --module-path (only if needed)
170 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
171 |
172 | # For Cygwin or MSYS, switch paths to Windows format before running java
173 | if "$cygwin" || "$msys" ; then
174 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
175 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
176 |
177 | JAVACMD=$( cygpath --unix "$JAVACMD" )
178 |
179 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
180 | for arg do
181 | if
182 | case $arg in #(
183 | -*) false ;; # don't mess with options #(
184 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
185 | [ -e "$t" ] ;; #(
186 | *) false ;;
187 | esac
188 | then
189 | arg=$( cygpath --path --ignore --mixed "$arg" )
190 | fi
191 | # Roll the args list around exactly as many times as the number of
192 | # args, so each arg winds up back in the position where it started, but
193 | # possibly modified.
194 | #
195 | # NB: a `for` loop captures its iteration list before it begins, so
196 | # changing the positional parameters here affects neither the number of
197 | # iterations, nor the values presented in `arg`.
198 | shift # remove old arg
199 | set -- "$@" "$arg" # push replacement arg
200 | done
201 | fi
202 |
203 |
204 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
205 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
206 |
207 | # Collect all arguments for the java command:
208 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
209 | # and any embedded shellness will be escaped.
210 | # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
211 | # treated as '${Hostname}' itself on the command line.
212 |
213 | set -- \
214 | "-Dorg.gradle.appname=$APP_BASE_NAME" \
215 | -classpath "$CLASSPATH" \
216 | -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
217 | "$@"
218 |
219 | # Stop when "xargs" is not available.
220 | if ! command -v xargs >/dev/null 2>&1
221 | then
222 | die "xargs is not available"
223 | fi
224 |
225 | # Use "xargs" to parse quoted args.
226 | #
227 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed.
228 | #
229 | # In Bash we could simply go:
230 | #
231 | # readarray ARGS < <( xargs -n1 <<<"$var" ) &&
232 | # set -- "${ARGS[@]}" "$@"
233 | #
234 | # but POSIX shell has neither arrays nor command substitution, so instead we
235 | # post-process each arg (as a line of input to sed) to backslash-escape any
236 | # character that might be a shell metacharacter, then use eval to reverse
237 | # that process (while maintaining the separation between arguments), and wrap
238 | # the whole thing up as a single "set" statement.
239 | #
240 | # This will of course break if any of these variables contains a newline or
241 | # an unmatched quote.
242 | #
243 |
244 | eval "set -- $(
245 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
246 | xargs -n1 |
247 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
248 | tr '\n' ' '
249 | )" '"$@"'
250 |
251 | exec "$JAVACMD" "$@"
252 |
--------------------------------------------------------------------------------
/gradlew-wine:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | #
3 | # Use this to build and/or test Windows targets on a Unix system.
4 | #
5 | # Before using this, you need to:
6 | # 1. Install Wine.
7 | # 2. Install JDK under Wine.
8 | #
9 | # You *might* also need to:
10 | # 1. Specify the path to JAVA_HOME, e.g.:
11 | # $ JAVA_HOME=~/.wine/drive_c/Program\ Files/Java/jdk1.8.0_291/ ./gradlew-wine clean windowsTest
12 | # Do this if instructed by the console output.
13 | # 2. Change the Z: drive under winecfg, using `/home/USERNAME` instead of `/`.
14 | # Do this if you run into issues with file system permissions.
15 | #
16 | WINEDEBUG=-all wine cmd /c gradlew.bat $*
17 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 | @rem SPDX-License-Identifier: Apache-2.0
17 | @rem
18 |
19 | @if "%DEBUG%"=="" @echo off
20 | @rem ##########################################################################
21 | @rem
22 | @rem Gradle startup script for Windows
23 | @rem
24 | @rem ##########################################################################
25 |
26 | @rem Set local scope for the variables with windows NT shell
27 | if "%OS%"=="Windows_NT" setlocal
28 |
29 | set DIRNAME=%~dp0
30 | if "%DIRNAME%"=="" set DIRNAME=.
31 | @rem This is normally unused
32 | set APP_BASE_NAME=%~n0
33 | set APP_HOME=%DIRNAME%
34 |
35 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
36 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
37 |
38 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
39 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
40 |
41 | @rem Find java.exe
42 | if defined JAVA_HOME goto findJavaFromJavaHome
43 |
44 | set JAVA_EXE=java.exe
45 | %JAVA_EXE% -version >NUL 2>&1
46 | if %ERRORLEVEL% equ 0 goto execute
47 |
48 | echo. 1>&2
49 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
50 | echo. 1>&2
51 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
52 | echo location of your Java installation. 1>&2
53 |
54 | goto fail
55 |
56 | :findJavaFromJavaHome
57 | set JAVA_HOME=%JAVA_HOME:"=%
58 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
59 |
60 | if exist "%JAVA_EXE%" goto execute
61 |
62 | echo. 1>&2
63 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
64 | echo. 1>&2
65 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
66 | echo location of your Java installation. 1>&2
67 |
68 | goto fail
69 |
70 | :execute
71 | @rem Setup the command line
72 |
73 | set CLASSPATH=
74 |
75 |
76 | @rem Execute Gradle
77 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
78 |
79 | :end
80 | @rem End local scope for the variables with windows NT shell
81 | if %ERRORLEVEL% equ 0 goto mainEnd
82 |
83 | :fail
84 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
85 | rem the _cmd.exe /c_ return code!
86 | set EXIT_CODE=%ERRORLEVEL%
87 | if %EXIT_CODE% equ 0 set EXIT_CODE=1
88 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
89 | exit /b %EXIT_CODE%
90 |
91 | :mainEnd
92 | if "%OS%"=="Windows_NT" endlocal
93 |
94 | :omega
95 |
--------------------------------------------------------------------------------
/kotlin-js-store/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@colors/colors@1.5.0":
6 | version "1.5.0"
7 | resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
8 | integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
9 |
10 | "@discoveryjs/json-ext@^0.5.0":
11 | version "0.5.7"
12 | resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
13 | integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
14 |
15 | "@jridgewell/gen-mapping@^0.3.0":
16 | version "0.3.3"
17 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
18 | integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
19 | dependencies:
20 | "@jridgewell/set-array" "^1.0.1"
21 | "@jridgewell/sourcemap-codec" "^1.4.10"
22 | "@jridgewell/trace-mapping" "^0.3.9"
23 |
24 | "@jridgewell/resolve-uri@3.1.0":
25 | version "3.1.0"
26 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
27 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
28 |
29 | "@jridgewell/resolve-uri@^3.1.0":
30 | version "3.1.2"
31 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
32 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
33 |
34 | "@jridgewell/set-array@^1.0.1":
35 | version "1.1.2"
36 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
37 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
38 |
39 | "@jridgewell/source-map@^0.3.3":
40 | version "0.3.5"
41 | resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91"
42 | integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==
43 | dependencies:
44 | "@jridgewell/gen-mapping" "^0.3.0"
45 | "@jridgewell/trace-mapping" "^0.3.9"
46 |
47 | "@jridgewell/sourcemap-codec@1.4.14":
48 | version "1.4.14"
49 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
50 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
51 |
52 | "@jridgewell/sourcemap-codec@^1.4.10":
53 | version "1.4.15"
54 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
55 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
56 |
57 | "@jridgewell/sourcemap-codec@^1.4.14":
58 | version "1.5.0"
59 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
60 | integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
61 |
62 | "@jridgewell/trace-mapping@^0.3.20":
63 | version "0.3.25"
64 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
65 | integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
66 | dependencies:
67 | "@jridgewell/resolve-uri" "^3.1.0"
68 | "@jridgewell/sourcemap-codec" "^1.4.14"
69 |
70 | "@jridgewell/trace-mapping@^0.3.9":
71 | version "0.3.18"
72 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
73 | integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
74 | dependencies:
75 | "@jridgewell/resolve-uri" "3.1.0"
76 | "@jridgewell/sourcemap-codec" "1.4.14"
77 |
78 | "@socket.io/component-emitter@~3.1.0":
79 | version "3.1.0"
80 | resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553"
81 | integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==
82 |
83 | "@types/cookie@^0.4.1":
84 | version "0.4.1"
85 | resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d"
86 | integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==
87 |
88 | "@types/cors@^2.8.12":
89 | version "2.8.13"
90 | resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.13.tgz#b8ade22ba455a1b8cb3b5d3f35910fd204f84f94"
91 | integrity sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==
92 | dependencies:
93 | "@types/node" "*"
94 |
95 | "@types/estree@^1.0.5":
96 | version "1.0.5"
97 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
98 | integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
99 |
100 | "@types/json-schema@^7.0.8":
101 | version "7.0.11"
102 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
103 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
104 |
105 | "@types/node@*", "@types/node@>=10.0.0":
106 | version "18.15.13"
107 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469"
108 | integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==
109 |
110 | "@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1":
111 | version "1.12.1"
112 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb"
113 | integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==
114 | dependencies:
115 | "@webassemblyjs/helper-numbers" "1.11.6"
116 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
117 |
118 | "@webassemblyjs/floating-point-hex-parser@1.11.6":
119 | version "1.11.6"
120 | resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431"
121 | integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==
122 |
123 | "@webassemblyjs/helper-api-error@1.11.6":
124 | version "1.11.6"
125 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768"
126 | integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==
127 |
128 | "@webassemblyjs/helper-buffer@1.12.1":
129 | version "1.12.1"
130 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6"
131 | integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==
132 |
133 | "@webassemblyjs/helper-numbers@1.11.6":
134 | version "1.11.6"
135 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5"
136 | integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==
137 | dependencies:
138 | "@webassemblyjs/floating-point-hex-parser" "1.11.6"
139 | "@webassemblyjs/helper-api-error" "1.11.6"
140 | "@xtuc/long" "4.2.2"
141 |
142 | "@webassemblyjs/helper-wasm-bytecode@1.11.6":
143 | version "1.11.6"
144 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9"
145 | integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==
146 |
147 | "@webassemblyjs/helper-wasm-section@1.12.1":
148 | version "1.12.1"
149 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf"
150 | integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==
151 | dependencies:
152 | "@webassemblyjs/ast" "1.12.1"
153 | "@webassemblyjs/helper-buffer" "1.12.1"
154 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
155 | "@webassemblyjs/wasm-gen" "1.12.1"
156 |
157 | "@webassemblyjs/ieee754@1.11.6":
158 | version "1.11.6"
159 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a"
160 | integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==
161 | dependencies:
162 | "@xtuc/ieee754" "^1.2.0"
163 |
164 | "@webassemblyjs/leb128@1.11.6":
165 | version "1.11.6"
166 | resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7"
167 | integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==
168 | dependencies:
169 | "@xtuc/long" "4.2.2"
170 |
171 | "@webassemblyjs/utf8@1.11.6":
172 | version "1.11.6"
173 | resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a"
174 | integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==
175 |
176 | "@webassemblyjs/wasm-edit@^1.12.1":
177 | version "1.12.1"
178 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b"
179 | integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==
180 | dependencies:
181 | "@webassemblyjs/ast" "1.12.1"
182 | "@webassemblyjs/helper-buffer" "1.12.1"
183 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
184 | "@webassemblyjs/helper-wasm-section" "1.12.1"
185 | "@webassemblyjs/wasm-gen" "1.12.1"
186 | "@webassemblyjs/wasm-opt" "1.12.1"
187 | "@webassemblyjs/wasm-parser" "1.12.1"
188 | "@webassemblyjs/wast-printer" "1.12.1"
189 |
190 | "@webassemblyjs/wasm-gen@1.12.1":
191 | version "1.12.1"
192 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547"
193 | integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==
194 | dependencies:
195 | "@webassemblyjs/ast" "1.12.1"
196 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
197 | "@webassemblyjs/ieee754" "1.11.6"
198 | "@webassemblyjs/leb128" "1.11.6"
199 | "@webassemblyjs/utf8" "1.11.6"
200 |
201 | "@webassemblyjs/wasm-opt@1.12.1":
202 | version "1.12.1"
203 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5"
204 | integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==
205 | dependencies:
206 | "@webassemblyjs/ast" "1.12.1"
207 | "@webassemblyjs/helper-buffer" "1.12.1"
208 | "@webassemblyjs/wasm-gen" "1.12.1"
209 | "@webassemblyjs/wasm-parser" "1.12.1"
210 |
211 | "@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1":
212 | version "1.12.1"
213 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937"
214 | integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==
215 | dependencies:
216 | "@webassemblyjs/ast" "1.12.1"
217 | "@webassemblyjs/helper-api-error" "1.11.6"
218 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
219 | "@webassemblyjs/ieee754" "1.11.6"
220 | "@webassemblyjs/leb128" "1.11.6"
221 | "@webassemblyjs/utf8" "1.11.6"
222 |
223 | "@webassemblyjs/wast-printer@1.12.1":
224 | version "1.12.1"
225 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac"
226 | integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==
227 | dependencies:
228 | "@webassemblyjs/ast" "1.12.1"
229 | "@xtuc/long" "4.2.2"
230 |
231 | "@webpack-cli/configtest@^2.1.1":
232 | version "2.1.1"
233 | resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646"
234 | integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==
235 |
236 | "@webpack-cli/info@^2.0.2":
237 | version "2.0.2"
238 | resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd"
239 | integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==
240 |
241 | "@webpack-cli/serve@^2.0.5":
242 | version "2.0.5"
243 | resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e"
244 | integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==
245 |
246 | "@xtuc/ieee754@^1.2.0":
247 | version "1.2.0"
248 | resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
249 | integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
250 |
251 | "@xtuc/long@4.2.2":
252 | version "4.2.2"
253 | resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
254 | integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
255 |
256 | accepts@~1.3.4:
257 | version "1.3.8"
258 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
259 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
260 | dependencies:
261 | mime-types "~2.1.34"
262 | negotiator "0.6.3"
263 |
264 | acorn-import-attributes@^1.9.5:
265 | version "1.9.5"
266 | resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef"
267 | integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==
268 |
269 | acorn@^8.7.1:
270 | version "8.8.2"
271 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
272 | integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
273 |
274 | acorn@^8.8.2:
275 | version "8.10.0"
276 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
277 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
278 |
279 | ajv-keywords@^3.5.2:
280 | version "3.5.2"
281 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
282 | integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
283 |
284 | ajv@^6.12.5:
285 | version "6.12.6"
286 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
287 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
288 | dependencies:
289 | fast-deep-equal "^3.1.1"
290 | fast-json-stable-stringify "^2.0.0"
291 | json-schema-traverse "^0.4.1"
292 | uri-js "^4.2.2"
293 |
294 | ansi-colors@^4.1.3:
295 | version "4.1.3"
296 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
297 | integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
298 |
299 | ansi-regex@^5.0.1:
300 | version "5.0.1"
301 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
302 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
303 |
304 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
305 | version "4.3.0"
306 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
307 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
308 | dependencies:
309 | color-convert "^2.0.1"
310 |
311 | anymatch@~3.1.2:
312 | version "3.1.3"
313 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
314 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
315 | dependencies:
316 | normalize-path "^3.0.0"
317 | picomatch "^2.0.4"
318 |
319 | argparse@^2.0.1:
320 | version "2.0.1"
321 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
322 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
323 |
324 | balanced-match@^1.0.0:
325 | version "1.0.2"
326 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
327 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
328 |
329 | base64id@2.0.0, base64id@~2.0.0:
330 | version "2.0.0"
331 | resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6"
332 | integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==
333 |
334 | binary-extensions@^2.0.0:
335 | version "2.2.0"
336 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
337 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
338 |
339 | body-parser@^1.19.0:
340 | version "1.20.2"
341 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
342 | integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
343 | dependencies:
344 | bytes "3.1.2"
345 | content-type "~1.0.5"
346 | debug "2.6.9"
347 | depd "2.0.0"
348 | destroy "1.2.0"
349 | http-errors "2.0.0"
350 | iconv-lite "0.4.24"
351 | on-finished "2.4.1"
352 | qs "6.11.0"
353 | raw-body "2.5.2"
354 | type-is "~1.6.18"
355 | unpipe "1.0.0"
356 |
357 | brace-expansion@^1.1.7:
358 | version "1.1.11"
359 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
360 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
361 | dependencies:
362 | balanced-match "^1.0.0"
363 | concat-map "0.0.1"
364 |
365 | brace-expansion@^2.0.1:
366 | version "2.0.1"
367 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
368 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
369 | dependencies:
370 | balanced-match "^1.0.0"
371 |
372 | braces@^3.0.2, braces@~3.0.2:
373 | version "3.0.2"
374 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
375 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
376 | dependencies:
377 | fill-range "^7.0.1"
378 |
379 | browser-stdout@^1.3.1:
380 | version "1.3.1"
381 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
382 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
383 |
384 | browserslist@^4.21.10:
385 | version "4.23.2"
386 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.2.tgz#244fe803641f1c19c28c48c4b6ec9736eb3d32ed"
387 | integrity sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==
388 | dependencies:
389 | caniuse-lite "^1.0.30001640"
390 | electron-to-chromium "^1.4.820"
391 | node-releases "^2.0.14"
392 | update-browserslist-db "^1.1.0"
393 |
394 | buffer-from@^1.0.0:
395 | version "1.1.2"
396 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
397 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
398 |
399 | bytes@3.1.2:
400 | version "3.1.2"
401 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
402 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
403 |
404 | call-bind@^1.0.0:
405 | version "1.0.2"
406 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
407 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
408 | dependencies:
409 | function-bind "^1.1.1"
410 | get-intrinsic "^1.0.2"
411 |
412 | camelcase@^6.0.0:
413 | version "6.3.0"
414 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
415 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
416 |
417 | caniuse-lite@^1.0.30001640:
418 | version "1.0.30001642"
419 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz#6aa6610eb24067c246d30c57f055a9d0a7f8d05f"
420 | integrity sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==
421 |
422 | chalk@^4.1.0:
423 | version "4.1.2"
424 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
425 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
426 | dependencies:
427 | ansi-styles "^4.1.0"
428 | supports-color "^7.1.0"
429 |
430 | chokidar@^3.5.1:
431 | version "3.5.3"
432 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
433 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
434 | dependencies:
435 | anymatch "~3.1.2"
436 | braces "~3.0.2"
437 | glob-parent "~5.1.2"
438 | is-binary-path "~2.1.0"
439 | is-glob "~4.0.1"
440 | normalize-path "~3.0.0"
441 | readdirp "~3.6.0"
442 | optionalDependencies:
443 | fsevents "~2.3.2"
444 |
445 | chokidar@^3.5.3:
446 | version "3.6.0"
447 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
448 | integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
449 | dependencies:
450 | anymatch "~3.1.2"
451 | braces "~3.0.2"
452 | glob-parent "~5.1.2"
453 | is-binary-path "~2.1.0"
454 | is-glob "~4.0.1"
455 | normalize-path "~3.0.0"
456 | readdirp "~3.6.0"
457 | optionalDependencies:
458 | fsevents "~2.3.2"
459 |
460 | chrome-trace-event@^1.0.2:
461 | version "1.0.3"
462 | resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
463 | integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
464 |
465 | cliui@^7.0.2:
466 | version "7.0.4"
467 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
468 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
469 | dependencies:
470 | string-width "^4.2.0"
471 | strip-ansi "^6.0.0"
472 | wrap-ansi "^7.0.0"
473 |
474 | clone-deep@^4.0.1:
475 | version "4.0.1"
476 | resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
477 | integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
478 | dependencies:
479 | is-plain-object "^2.0.4"
480 | kind-of "^6.0.2"
481 | shallow-clone "^3.0.0"
482 |
483 | color-convert@^2.0.1:
484 | version "2.0.1"
485 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
486 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
487 | dependencies:
488 | color-name "~1.1.4"
489 |
490 | color-name@~1.1.4:
491 | version "1.1.4"
492 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
493 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
494 |
495 | colorette@^2.0.14:
496 | version "2.0.20"
497 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
498 | integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
499 |
500 | commander@^10.0.1:
501 | version "10.0.1"
502 | resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
503 | integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
504 |
505 | commander@^2.20.0:
506 | version "2.20.3"
507 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
508 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
509 |
510 | concat-map@0.0.1:
511 | version "0.0.1"
512 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
513 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
514 |
515 | connect@^3.7.0:
516 | version "3.7.0"
517 | resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8"
518 | integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==
519 | dependencies:
520 | debug "2.6.9"
521 | finalhandler "1.1.2"
522 | parseurl "~1.3.3"
523 | utils-merge "1.0.1"
524 |
525 | content-type@~1.0.5:
526 | version "1.0.5"
527 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
528 | integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
529 |
530 | cookie@~0.4.1:
531 | version "0.4.2"
532 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
533 | integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
534 |
535 | cors@~2.8.5:
536 | version "2.8.5"
537 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
538 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
539 | dependencies:
540 | object-assign "^4"
541 | vary "^1"
542 |
543 | cross-spawn@^7.0.3:
544 | version "7.0.3"
545 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
546 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
547 | dependencies:
548 | path-key "^3.1.0"
549 | shebang-command "^2.0.0"
550 | which "^2.0.1"
551 |
552 | custom-event@~1.0.0:
553 | version "1.0.1"
554 | resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425"
555 | integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==
556 |
557 | date-format@^4.0.14:
558 | version "4.0.14"
559 | resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400"
560 | integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==
561 |
562 | debug@2.6.9:
563 | version "2.6.9"
564 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
565 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
566 | dependencies:
567 | ms "2.0.0"
568 |
569 | debug@^4.3.4, debug@~4.3.1, debug@~4.3.2:
570 | version "4.3.4"
571 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
572 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
573 | dependencies:
574 | ms "2.1.2"
575 |
576 | debug@^4.3.5:
577 | version "4.4.0"
578 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
579 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
580 | dependencies:
581 | ms "^2.1.3"
582 |
583 | decamelize@^4.0.0:
584 | version "4.0.0"
585 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
586 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
587 |
588 | depd@2.0.0:
589 | version "2.0.0"
590 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
591 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
592 |
593 | destroy@1.2.0:
594 | version "1.2.0"
595 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
596 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
597 |
598 | di@^0.0.1:
599 | version "0.0.1"
600 | resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c"
601 | integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==
602 |
603 | diff@^5.2.0:
604 | version "5.2.0"
605 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531"
606 | integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==
607 |
608 | dom-serialize@^2.2.1:
609 | version "2.2.1"
610 | resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b"
611 | integrity sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==
612 | dependencies:
613 | custom-event "~1.0.0"
614 | ent "~2.2.0"
615 | extend "^3.0.0"
616 | void-elements "^2.0.0"
617 |
618 | ee-first@1.1.1:
619 | version "1.1.1"
620 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
621 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
622 |
623 | electron-to-chromium@^1.4.820:
624 | version "1.4.828"
625 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.828.tgz#a1ee8cd8847448b2898d3f2d9db02113f9c5b35c"
626 | integrity sha512-QOIJiWpQJDHAVO4P58pwb133Cwee0nbvy/MV1CwzZVGpkH1RX33N3vsaWRCpR6bF63AAq366neZrRTu7Qlsbbw==
627 |
628 | emoji-regex@^8.0.0:
629 | version "8.0.0"
630 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
631 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
632 |
633 | encodeurl@~1.0.2:
634 | version "1.0.2"
635 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
636 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
637 |
638 | engine.io-parser@~5.2.1:
639 | version "5.2.3"
640 | resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz#00dc5b97b1f233a23c9398d0209504cf5f94d92f"
641 | integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==
642 |
643 | engine.io@~6.5.2:
644 | version "6.5.5"
645 | resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.5.tgz#430b80d8840caab91a50e9e23cb551455195fc93"
646 | integrity sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==
647 | dependencies:
648 | "@types/cookie" "^0.4.1"
649 | "@types/cors" "^2.8.12"
650 | "@types/node" ">=10.0.0"
651 | accepts "~1.3.4"
652 | base64id "2.0.0"
653 | cookie "~0.4.1"
654 | cors "~2.8.5"
655 | debug "~4.3.1"
656 | engine.io-parser "~5.2.1"
657 | ws "~8.17.1"
658 |
659 | enhanced-resolve@^5.17.1:
660 | version "5.17.1"
661 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15"
662 | integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==
663 | dependencies:
664 | graceful-fs "^4.2.4"
665 | tapable "^2.2.0"
666 |
667 | ent@~2.2.0:
668 | version "2.2.0"
669 | resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
670 | integrity sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==
671 |
672 | envinfo@^7.7.3:
673 | version "7.8.1"
674 | resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
675 | integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==
676 |
677 | es-module-lexer@^1.2.1:
678 | version "1.3.0"
679 | resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f"
680 | integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==
681 |
682 | escalade@^3.1.1:
683 | version "3.1.1"
684 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
685 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
686 |
687 | escalade@^3.1.2:
688 | version "3.1.2"
689 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
690 | integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
691 |
692 | escape-html@~1.0.3:
693 | version "1.0.3"
694 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
695 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
696 |
697 | escape-string-regexp@^4.0.0:
698 | version "4.0.0"
699 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
700 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
701 |
702 | eslint-scope@5.1.1:
703 | version "5.1.1"
704 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
705 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
706 | dependencies:
707 | esrecurse "^4.3.0"
708 | estraverse "^4.1.1"
709 |
710 | esrecurse@^4.3.0:
711 | version "4.3.0"
712 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
713 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
714 | dependencies:
715 | estraverse "^5.2.0"
716 |
717 | estraverse@^4.1.1:
718 | version "4.3.0"
719 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
720 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
721 |
722 | estraverse@^5.2.0:
723 | version "5.3.0"
724 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
725 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
726 |
727 | eventemitter3@^4.0.0:
728 | version "4.0.7"
729 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
730 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
731 |
732 | events@^3.2.0:
733 | version "3.3.0"
734 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
735 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
736 |
737 | extend@^3.0.0:
738 | version "3.0.2"
739 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
740 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
741 |
742 | fast-deep-equal@^3.1.1:
743 | version "3.1.3"
744 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
745 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
746 |
747 | fast-json-stable-stringify@^2.0.0:
748 | version "2.1.0"
749 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
750 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
751 |
752 | fastest-levenshtein@^1.0.12:
753 | version "1.0.16"
754 | resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5"
755 | integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==
756 |
757 | fill-range@^7.0.1:
758 | version "7.0.1"
759 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
760 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
761 | dependencies:
762 | to-regex-range "^5.0.1"
763 |
764 | finalhandler@1.1.2:
765 | version "1.1.2"
766 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
767 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
768 | dependencies:
769 | debug "2.6.9"
770 | encodeurl "~1.0.2"
771 | escape-html "~1.0.3"
772 | on-finished "~2.3.0"
773 | parseurl "~1.3.3"
774 | statuses "~1.5.0"
775 | unpipe "~1.0.0"
776 |
777 | find-up@^4.0.0:
778 | version "4.1.0"
779 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
780 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
781 | dependencies:
782 | locate-path "^5.0.0"
783 | path-exists "^4.0.0"
784 |
785 | find-up@^5.0.0:
786 | version "5.0.0"
787 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
788 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
789 | dependencies:
790 | locate-path "^6.0.0"
791 | path-exists "^4.0.0"
792 |
793 | flat@^5.0.2:
794 | version "5.0.2"
795 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
796 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
797 |
798 | flatted@^3.2.7:
799 | version "3.2.7"
800 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
801 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
802 |
803 | follow-redirects@^1.0.0:
804 | version "1.15.2"
805 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
806 | integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
807 |
808 | format-util@^1.0.5:
809 | version "1.0.5"
810 | resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271"
811 | integrity sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==
812 |
813 | fs-extra@^8.1.0:
814 | version "8.1.0"
815 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
816 | integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
817 | dependencies:
818 | graceful-fs "^4.2.0"
819 | jsonfile "^4.0.0"
820 | universalify "^0.1.0"
821 |
822 | fs.realpath@^1.0.0:
823 | version "1.0.0"
824 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
825 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
826 |
827 | fsevents@~2.3.2:
828 | version "2.3.2"
829 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
830 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
831 |
832 | function-bind@^1.1.1:
833 | version "1.1.1"
834 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
835 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
836 |
837 | get-caller-file@^2.0.5:
838 | version "2.0.5"
839 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
840 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
841 |
842 | get-intrinsic@^1.0.2:
843 | version "1.2.0"
844 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f"
845 | integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==
846 | dependencies:
847 | function-bind "^1.1.1"
848 | has "^1.0.3"
849 | has-symbols "^1.0.3"
850 |
851 | glob-parent@~5.1.2:
852 | version "5.1.2"
853 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
854 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
855 | dependencies:
856 | is-glob "^4.0.1"
857 |
858 | glob-to-regexp@^0.4.1:
859 | version "0.4.1"
860 | resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
861 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
862 |
863 | glob@^7.1.3, glob@^7.1.7:
864 | version "7.2.3"
865 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
866 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
867 | dependencies:
868 | fs.realpath "^1.0.0"
869 | inflight "^1.0.4"
870 | inherits "2"
871 | minimatch "^3.1.1"
872 | once "^1.3.0"
873 | path-is-absolute "^1.0.0"
874 |
875 | glob@^8.1.0:
876 | version "8.1.0"
877 | resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
878 | integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==
879 | dependencies:
880 | fs.realpath "^1.0.0"
881 | inflight "^1.0.4"
882 | inherits "2"
883 | minimatch "^5.0.1"
884 | once "^1.3.0"
885 |
886 | graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6:
887 | version "4.2.11"
888 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
889 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
890 |
891 | has-flag@^4.0.0:
892 | version "4.0.0"
893 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
894 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
895 |
896 | has-symbols@^1.0.3:
897 | version "1.0.3"
898 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
899 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
900 |
901 | has@^1.0.3:
902 | version "1.0.3"
903 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
904 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
905 | dependencies:
906 | function-bind "^1.1.1"
907 |
908 | he@^1.2.0:
909 | version "1.2.0"
910 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
911 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
912 |
913 | http-errors@2.0.0:
914 | version "2.0.0"
915 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
916 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
917 | dependencies:
918 | depd "2.0.0"
919 | inherits "2.0.4"
920 | setprototypeof "1.2.0"
921 | statuses "2.0.1"
922 | toidentifier "1.0.1"
923 |
924 | http-proxy@^1.18.1:
925 | version "1.18.1"
926 | resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
927 | integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
928 | dependencies:
929 | eventemitter3 "^4.0.0"
930 | follow-redirects "^1.0.0"
931 | requires-port "^1.0.0"
932 |
933 | iconv-lite@0.4.24:
934 | version "0.4.24"
935 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
936 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
937 | dependencies:
938 | safer-buffer ">= 2.1.2 < 3"
939 |
940 | iconv-lite@^0.6.3:
941 | version "0.6.3"
942 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
943 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
944 | dependencies:
945 | safer-buffer ">= 2.1.2 < 3.0.0"
946 |
947 | import-local@^3.0.2:
948 | version "3.1.0"
949 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
950 | integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
951 | dependencies:
952 | pkg-dir "^4.2.0"
953 | resolve-cwd "^3.0.0"
954 |
955 | inflight@^1.0.4:
956 | version "1.0.6"
957 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
958 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
959 | dependencies:
960 | once "^1.3.0"
961 | wrappy "1"
962 |
963 | inherits@2, inherits@2.0.4:
964 | version "2.0.4"
965 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
966 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
967 |
968 | interpret@^3.1.1:
969 | version "3.1.1"
970 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4"
971 | integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==
972 |
973 | is-binary-path@~2.1.0:
974 | version "2.1.0"
975 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
976 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
977 | dependencies:
978 | binary-extensions "^2.0.0"
979 |
980 | is-core-module@^2.11.0:
981 | version "2.12.0"
982 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4"
983 | integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==
984 | dependencies:
985 | has "^1.0.3"
986 |
987 | is-extglob@^2.1.1:
988 | version "2.1.1"
989 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
990 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
991 |
992 | is-fullwidth-code-point@^3.0.0:
993 | version "3.0.0"
994 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
995 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
996 |
997 | is-glob@^4.0.1, is-glob@~4.0.1:
998 | version "4.0.3"
999 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
1000 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
1001 | dependencies:
1002 | is-extglob "^2.1.1"
1003 |
1004 | is-number@^7.0.0:
1005 | version "7.0.0"
1006 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1007 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1008 |
1009 | is-plain-obj@^2.1.0:
1010 | version "2.1.0"
1011 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
1012 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
1013 |
1014 | is-plain-object@^2.0.4:
1015 | version "2.0.4"
1016 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
1017 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
1018 | dependencies:
1019 | isobject "^3.0.1"
1020 |
1021 | is-unicode-supported@^0.1.0:
1022 | version "0.1.0"
1023 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
1024 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
1025 |
1026 | isbinaryfile@^4.0.8:
1027 | version "4.0.10"
1028 | resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3"
1029 | integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==
1030 |
1031 | isexe@^2.0.0:
1032 | version "2.0.0"
1033 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1034 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
1035 |
1036 | isobject@^3.0.1:
1037 | version "3.0.1"
1038 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
1039 | integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
1040 |
1041 | jest-worker@^27.4.5:
1042 | version "27.5.1"
1043 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
1044 | integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
1045 | dependencies:
1046 | "@types/node" "*"
1047 | merge-stream "^2.0.0"
1048 | supports-color "^8.0.0"
1049 |
1050 | js-yaml@^4.1.0:
1051 | version "4.1.0"
1052 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
1053 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
1054 | dependencies:
1055 | argparse "^2.0.1"
1056 |
1057 | json-parse-even-better-errors@^2.3.1:
1058 | version "2.3.1"
1059 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
1060 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
1061 |
1062 | json-schema-traverse@^0.4.1:
1063 | version "0.4.1"
1064 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1065 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1066 |
1067 | jsonfile@^4.0.0:
1068 | version "4.0.0"
1069 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
1070 | integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
1071 | optionalDependencies:
1072 | graceful-fs "^4.1.6"
1073 |
1074 | karma-chrome-launcher@3.2.0:
1075 | version "3.2.0"
1076 | resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz#eb9c95024f2d6dfbb3748d3415ac9b381906b9a9"
1077 | integrity sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==
1078 | dependencies:
1079 | which "^1.2.1"
1080 |
1081 | karma-mocha@2.0.1:
1082 | version "2.0.1"
1083 | resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-2.0.1.tgz#4b0254a18dfee71bdbe6188d9a6861bf86b0cd7d"
1084 | integrity sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==
1085 | dependencies:
1086 | minimist "^1.2.3"
1087 |
1088 | karma-sourcemap-loader@0.4.0:
1089 | version "0.4.0"
1090 | resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.4.0.tgz#b01d73f8f688f533bcc8f5d273d43458e13b5488"
1091 | integrity sha512-xCRL3/pmhAYF3I6qOrcn0uhbQevitc2DERMPH82FMnG+4WReoGcGFZb1pURf2a5apyrOHRdvD+O6K7NljqKHyA==
1092 | dependencies:
1093 | graceful-fs "^4.2.10"
1094 |
1095 | karma-webpack@5.0.1:
1096 | version "5.0.1"
1097 | resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-5.0.1.tgz#4eafd31bbe684a747a6e8f3e4ad373e53979ced4"
1098 | integrity sha512-oo38O+P3W2mSPCSUrQdySSPv1LvPpXP+f+bBimNomS5sW+1V4SuhCuW8TfJzV+rDv921w2fDSDw0xJbPe6U+kQ==
1099 | dependencies:
1100 | glob "^7.1.3"
1101 | minimatch "^9.0.3"
1102 | webpack-merge "^4.1.5"
1103 |
1104 | karma@6.4.4:
1105 | version "6.4.4"
1106 | resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.4.tgz#dfa5a426cf5a8b53b43cd54ef0d0d09742351492"
1107 | integrity sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==
1108 | dependencies:
1109 | "@colors/colors" "1.5.0"
1110 | body-parser "^1.19.0"
1111 | braces "^3.0.2"
1112 | chokidar "^3.5.1"
1113 | connect "^3.7.0"
1114 | di "^0.0.1"
1115 | dom-serialize "^2.2.1"
1116 | glob "^7.1.7"
1117 | graceful-fs "^4.2.6"
1118 | http-proxy "^1.18.1"
1119 | isbinaryfile "^4.0.8"
1120 | lodash "^4.17.21"
1121 | log4js "^6.4.1"
1122 | mime "^2.5.2"
1123 | minimatch "^3.0.4"
1124 | mkdirp "^0.5.5"
1125 | qjobs "^1.2.0"
1126 | range-parser "^1.2.1"
1127 | rimraf "^3.0.2"
1128 | socket.io "^4.7.2"
1129 | source-map "^0.6.1"
1130 | tmp "^0.2.1"
1131 | ua-parser-js "^0.7.30"
1132 | yargs "^16.1.1"
1133 |
1134 | kind-of@^6.0.2:
1135 | version "6.0.3"
1136 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
1137 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
1138 |
1139 | kotlin-web-helpers@2.0.0:
1140 | version "2.0.0"
1141 | resolved "https://registry.yarnpkg.com/kotlin-web-helpers/-/kotlin-web-helpers-2.0.0.tgz#b112096b273c1e733e0b86560998235c09a19286"
1142 | integrity sha512-xkVGl60Ygn/zuLkDPx+oHj7jeLR7hCvoNF99nhwXMn8a3ApB4lLiC9pk4ol4NHPjyoCbvQctBqvzUcp8pkqyWw==
1143 | dependencies:
1144 | format-util "^1.0.5"
1145 |
1146 | loader-runner@^4.2.0:
1147 | version "4.3.0"
1148 | resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
1149 | integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
1150 |
1151 | locate-path@^5.0.0:
1152 | version "5.0.0"
1153 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
1154 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
1155 | dependencies:
1156 | p-locate "^4.1.0"
1157 |
1158 | locate-path@^6.0.0:
1159 | version "6.0.0"
1160 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
1161 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
1162 | dependencies:
1163 | p-locate "^5.0.0"
1164 |
1165 | lodash@^4.17.15, lodash@^4.17.21:
1166 | version "4.17.21"
1167 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
1168 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
1169 |
1170 | log-symbols@^4.1.0:
1171 | version "4.1.0"
1172 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
1173 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
1174 | dependencies:
1175 | chalk "^4.1.0"
1176 | is-unicode-supported "^0.1.0"
1177 |
1178 | log4js@^6.4.1:
1179 | version "6.9.1"
1180 | resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6"
1181 | integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==
1182 | dependencies:
1183 | date-format "^4.0.14"
1184 | debug "^4.3.4"
1185 | flatted "^3.2.7"
1186 | rfdc "^1.3.0"
1187 | streamroller "^3.1.5"
1188 |
1189 | media-typer@0.3.0:
1190 | version "0.3.0"
1191 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
1192 | integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
1193 |
1194 | merge-stream@^2.0.0:
1195 | version "2.0.0"
1196 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
1197 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
1198 |
1199 | mime-db@1.52.0:
1200 | version "1.52.0"
1201 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
1202 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
1203 |
1204 | mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34:
1205 | version "2.1.35"
1206 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
1207 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
1208 | dependencies:
1209 | mime-db "1.52.0"
1210 |
1211 | mime@^2.5.2:
1212 | version "2.6.0"
1213 | resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
1214 | integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
1215 |
1216 | minimatch@^3.0.4, minimatch@^3.1.1:
1217 | version "3.1.2"
1218 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
1219 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
1220 | dependencies:
1221 | brace-expansion "^1.1.7"
1222 |
1223 | minimatch@^5.0.1, minimatch@^5.1.6:
1224 | version "5.1.6"
1225 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
1226 | integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
1227 | dependencies:
1228 | brace-expansion "^2.0.1"
1229 |
1230 | minimatch@^9.0.3:
1231 | version "9.0.5"
1232 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
1233 | integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
1234 | dependencies:
1235 | brace-expansion "^2.0.1"
1236 |
1237 | minimist@^1.2.3, minimist@^1.2.6:
1238 | version "1.2.8"
1239 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
1240 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
1241 |
1242 | mkdirp@^0.5.5:
1243 | version "0.5.6"
1244 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
1245 | integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
1246 | dependencies:
1247 | minimist "^1.2.6"
1248 |
1249 | mocha@10.7.3:
1250 | version "10.7.3"
1251 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.7.3.tgz#ae32003cabbd52b59aece17846056a68eb4b0752"
1252 | integrity sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==
1253 | dependencies:
1254 | ansi-colors "^4.1.3"
1255 | browser-stdout "^1.3.1"
1256 | chokidar "^3.5.3"
1257 | debug "^4.3.5"
1258 | diff "^5.2.0"
1259 | escape-string-regexp "^4.0.0"
1260 | find-up "^5.0.0"
1261 | glob "^8.1.0"
1262 | he "^1.2.0"
1263 | js-yaml "^4.1.0"
1264 | log-symbols "^4.1.0"
1265 | minimatch "^5.1.6"
1266 | ms "^2.1.3"
1267 | serialize-javascript "^6.0.2"
1268 | strip-json-comments "^3.1.1"
1269 | supports-color "^8.1.1"
1270 | workerpool "^6.5.1"
1271 | yargs "^16.2.0"
1272 | yargs-parser "^20.2.9"
1273 | yargs-unparser "^2.0.0"
1274 |
1275 | ms@2.0.0:
1276 | version "2.0.0"
1277 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1278 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
1279 |
1280 | ms@2.1.2:
1281 | version "2.1.2"
1282 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1283 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1284 |
1285 | ms@^2.1.3:
1286 | version "2.1.3"
1287 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
1288 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1289 |
1290 | negotiator@0.6.3:
1291 | version "0.6.3"
1292 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
1293 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
1294 |
1295 | neo-async@^2.6.2:
1296 | version "2.6.2"
1297 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
1298 | integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
1299 |
1300 | node-releases@^2.0.14:
1301 | version "2.0.14"
1302 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
1303 | integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
1304 |
1305 | normalize-path@^3.0.0, normalize-path@~3.0.0:
1306 | version "3.0.0"
1307 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
1308 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
1309 |
1310 | object-assign@^4:
1311 | version "4.1.1"
1312 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1313 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
1314 |
1315 | object-inspect@^1.9.0:
1316 | version "1.12.3"
1317 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
1318 | integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
1319 |
1320 | on-finished@2.4.1:
1321 | version "2.4.1"
1322 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
1323 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
1324 | dependencies:
1325 | ee-first "1.1.1"
1326 |
1327 | on-finished@~2.3.0:
1328 | version "2.3.0"
1329 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
1330 | integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==
1331 | dependencies:
1332 | ee-first "1.1.1"
1333 |
1334 | once@^1.3.0:
1335 | version "1.4.0"
1336 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1337 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
1338 | dependencies:
1339 | wrappy "1"
1340 |
1341 | p-limit@^2.2.0:
1342 | version "2.3.0"
1343 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
1344 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
1345 | dependencies:
1346 | p-try "^2.0.0"
1347 |
1348 | p-limit@^3.0.2:
1349 | version "3.1.0"
1350 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
1351 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
1352 | dependencies:
1353 | yocto-queue "^0.1.0"
1354 |
1355 | p-locate@^4.1.0:
1356 | version "4.1.0"
1357 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
1358 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
1359 | dependencies:
1360 | p-limit "^2.2.0"
1361 |
1362 | p-locate@^5.0.0:
1363 | version "5.0.0"
1364 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
1365 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
1366 | dependencies:
1367 | p-limit "^3.0.2"
1368 |
1369 | p-try@^2.0.0:
1370 | version "2.2.0"
1371 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
1372 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
1373 |
1374 | parseurl@~1.3.3:
1375 | version "1.3.3"
1376 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
1377 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
1378 |
1379 | path-exists@^4.0.0:
1380 | version "4.0.0"
1381 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1382 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1383 |
1384 | path-is-absolute@^1.0.0:
1385 | version "1.0.1"
1386 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1387 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
1388 |
1389 | path-key@^3.1.0:
1390 | version "3.1.1"
1391 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1392 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1393 |
1394 | path-parse@^1.0.7:
1395 | version "1.0.7"
1396 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
1397 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
1398 |
1399 | picocolors@^1.0.1:
1400 | version "1.0.1"
1401 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1"
1402 | integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==
1403 |
1404 | picomatch@^2.0.4, picomatch@^2.2.1:
1405 | version "2.3.1"
1406 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
1407 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1408 |
1409 | pkg-dir@^4.2.0:
1410 | version "4.2.0"
1411 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
1412 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
1413 | dependencies:
1414 | find-up "^4.0.0"
1415 |
1416 | punycode@^2.1.0:
1417 | version "2.3.0"
1418 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
1419 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
1420 |
1421 | qjobs@^1.2.0:
1422 | version "1.2.0"
1423 | resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071"
1424 | integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==
1425 |
1426 | qs@6.11.0:
1427 | version "6.11.0"
1428 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
1429 | integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
1430 | dependencies:
1431 | side-channel "^1.0.4"
1432 |
1433 | randombytes@^2.1.0:
1434 | version "2.1.0"
1435 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
1436 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
1437 | dependencies:
1438 | safe-buffer "^5.1.0"
1439 |
1440 | range-parser@^1.2.1:
1441 | version "1.2.1"
1442 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
1443 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
1444 |
1445 | raw-body@2.5.2:
1446 | version "2.5.2"
1447 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
1448 | integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
1449 | dependencies:
1450 | bytes "3.1.2"
1451 | http-errors "2.0.0"
1452 | iconv-lite "0.4.24"
1453 | unpipe "1.0.0"
1454 |
1455 | readdirp@~3.6.0:
1456 | version "3.6.0"
1457 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
1458 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
1459 | dependencies:
1460 | picomatch "^2.2.1"
1461 |
1462 | rechoir@^0.8.0:
1463 | version "0.8.0"
1464 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22"
1465 | integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==
1466 | dependencies:
1467 | resolve "^1.20.0"
1468 |
1469 | require-directory@^2.1.1:
1470 | version "2.1.1"
1471 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
1472 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
1473 |
1474 | requires-port@^1.0.0:
1475 | version "1.0.0"
1476 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
1477 | integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
1478 |
1479 | resolve-cwd@^3.0.0:
1480 | version "3.0.0"
1481 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
1482 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
1483 | dependencies:
1484 | resolve-from "^5.0.0"
1485 |
1486 | resolve-from@^5.0.0:
1487 | version "5.0.0"
1488 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
1489 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
1490 |
1491 | resolve@^1.20.0:
1492 | version "1.22.2"
1493 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
1494 | integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
1495 | dependencies:
1496 | is-core-module "^2.11.0"
1497 | path-parse "^1.0.7"
1498 | supports-preserve-symlinks-flag "^1.0.0"
1499 |
1500 | rfdc@^1.3.0:
1501 | version "1.3.0"
1502 | resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b"
1503 | integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==
1504 |
1505 | rimraf@^3.0.0, rimraf@^3.0.2:
1506 | version "3.0.2"
1507 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
1508 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
1509 | dependencies:
1510 | glob "^7.1.3"
1511 |
1512 | safe-buffer@^5.1.0:
1513 | version "5.2.1"
1514 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1515 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1516 |
1517 | "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
1518 | version "2.1.2"
1519 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
1520 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
1521 |
1522 | schema-utils@^3.1.1:
1523 | version "3.1.2"
1524 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99"
1525 | integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==
1526 | dependencies:
1527 | "@types/json-schema" "^7.0.8"
1528 | ajv "^6.12.5"
1529 | ajv-keywords "^3.5.2"
1530 |
1531 | schema-utils@^3.2.0:
1532 | version "3.3.0"
1533 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe"
1534 | integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==
1535 | dependencies:
1536 | "@types/json-schema" "^7.0.8"
1537 | ajv "^6.12.5"
1538 | ajv-keywords "^3.5.2"
1539 |
1540 | serialize-javascript@^6.0.1:
1541 | version "6.0.1"
1542 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c"
1543 | integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==
1544 | dependencies:
1545 | randombytes "^2.1.0"
1546 |
1547 | serialize-javascript@^6.0.2:
1548 | version "6.0.2"
1549 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2"
1550 | integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==
1551 | dependencies:
1552 | randombytes "^2.1.0"
1553 |
1554 | setprototypeof@1.2.0:
1555 | version "1.2.0"
1556 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
1557 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
1558 |
1559 | shallow-clone@^3.0.0:
1560 | version "3.0.1"
1561 | resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
1562 | integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
1563 | dependencies:
1564 | kind-of "^6.0.2"
1565 |
1566 | shebang-command@^2.0.0:
1567 | version "2.0.0"
1568 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
1569 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
1570 | dependencies:
1571 | shebang-regex "^3.0.0"
1572 |
1573 | shebang-regex@^3.0.0:
1574 | version "3.0.0"
1575 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
1576 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
1577 |
1578 | side-channel@^1.0.4:
1579 | version "1.0.4"
1580 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
1581 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
1582 | dependencies:
1583 | call-bind "^1.0.0"
1584 | get-intrinsic "^1.0.2"
1585 | object-inspect "^1.9.0"
1586 |
1587 | socket.io-adapter@~2.5.2:
1588 | version "2.5.2"
1589 | resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz#5de9477c9182fdc171cd8c8364b9a8894ec75d12"
1590 | integrity sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==
1591 | dependencies:
1592 | ws "~8.11.0"
1593 |
1594 | socket.io-parser@~4.2.4:
1595 | version "4.2.4"
1596 | resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83"
1597 | integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==
1598 | dependencies:
1599 | "@socket.io/component-emitter" "~3.1.0"
1600 | debug "~4.3.1"
1601 |
1602 | socket.io@^4.7.2:
1603 | version "4.7.5"
1604 | resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.5.tgz#56eb2d976aef9d1445f373a62d781a41c7add8f8"
1605 | integrity sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==
1606 | dependencies:
1607 | accepts "~1.3.4"
1608 | base64id "~2.0.0"
1609 | cors "~2.8.5"
1610 | debug "~4.3.2"
1611 | engine.io "~6.5.2"
1612 | socket.io-adapter "~2.5.2"
1613 | socket.io-parser "~4.2.4"
1614 |
1615 | source-map-js@^1.0.2:
1616 | version "1.0.2"
1617 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
1618 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
1619 |
1620 | source-map-loader@5.0.0:
1621 | version "5.0.0"
1622 | resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-5.0.0.tgz#f593a916e1cc54471cfc8851b905c8a845fc7e38"
1623 | integrity sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==
1624 | dependencies:
1625 | iconv-lite "^0.6.3"
1626 | source-map-js "^1.0.2"
1627 |
1628 | source-map-support@~0.5.20:
1629 | version "0.5.21"
1630 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
1631 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
1632 | dependencies:
1633 | buffer-from "^1.0.0"
1634 | source-map "^0.6.0"
1635 |
1636 | source-map@^0.6.0, source-map@^0.6.1:
1637 | version "0.6.1"
1638 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
1639 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
1640 |
1641 | statuses@2.0.1:
1642 | version "2.0.1"
1643 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
1644 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
1645 |
1646 | statuses@~1.5.0:
1647 | version "1.5.0"
1648 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
1649 | integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
1650 |
1651 | streamroller@^3.1.5:
1652 | version "3.1.5"
1653 | resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.5.tgz#1263182329a45def1ffaef58d31b15d13d2ee7ff"
1654 | integrity sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==
1655 | dependencies:
1656 | date-format "^4.0.14"
1657 | debug "^4.3.4"
1658 | fs-extra "^8.1.0"
1659 |
1660 | string-width@^4.1.0, string-width@^4.2.0:
1661 | version "4.2.3"
1662 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
1663 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
1664 | dependencies:
1665 | emoji-regex "^8.0.0"
1666 | is-fullwidth-code-point "^3.0.0"
1667 | strip-ansi "^6.0.1"
1668 |
1669 | strip-ansi@^6.0.0, strip-ansi@^6.0.1:
1670 | version "6.0.1"
1671 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1672 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
1673 | dependencies:
1674 | ansi-regex "^5.0.1"
1675 |
1676 | strip-json-comments@^3.1.1:
1677 | version "3.1.1"
1678 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1679 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1680 |
1681 | supports-color@^7.1.0:
1682 | version "7.2.0"
1683 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1684 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1685 | dependencies:
1686 | has-flag "^4.0.0"
1687 |
1688 | supports-color@^8.0.0, supports-color@^8.1.1:
1689 | version "8.1.1"
1690 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
1691 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
1692 | dependencies:
1693 | has-flag "^4.0.0"
1694 |
1695 | supports-preserve-symlinks-flag@^1.0.0:
1696 | version "1.0.0"
1697 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
1698 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
1699 |
1700 | tapable@^2.1.1, tapable@^2.2.0:
1701 | version "2.2.1"
1702 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
1703 | integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
1704 |
1705 | terser-webpack-plugin@^5.3.10:
1706 | version "5.3.10"
1707 | resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199"
1708 | integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==
1709 | dependencies:
1710 | "@jridgewell/trace-mapping" "^0.3.20"
1711 | jest-worker "^27.4.5"
1712 | schema-utils "^3.1.1"
1713 | serialize-javascript "^6.0.1"
1714 | terser "^5.26.0"
1715 |
1716 | terser@^5.26.0:
1717 | version "5.31.3"
1718 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.3.tgz#b24b7beb46062f4653f049eea4f0cd165d0f0c38"
1719 | integrity sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==
1720 | dependencies:
1721 | "@jridgewell/source-map" "^0.3.3"
1722 | acorn "^8.8.2"
1723 | commander "^2.20.0"
1724 | source-map-support "~0.5.20"
1725 |
1726 | tmp@^0.2.1:
1727 | version "0.2.1"
1728 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
1729 | integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
1730 | dependencies:
1731 | rimraf "^3.0.0"
1732 |
1733 | to-regex-range@^5.0.1:
1734 | version "5.0.1"
1735 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1736 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1737 | dependencies:
1738 | is-number "^7.0.0"
1739 |
1740 | toidentifier@1.0.1:
1741 | version "1.0.1"
1742 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
1743 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
1744 |
1745 | type-is@~1.6.18:
1746 | version "1.6.18"
1747 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
1748 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
1749 | dependencies:
1750 | media-typer "0.3.0"
1751 | mime-types "~2.1.24"
1752 |
1753 | typescript@5.5.4:
1754 | version "5.5.4"
1755 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba"
1756 | integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==
1757 |
1758 | ua-parser-js@^0.7.30:
1759 | version "0.7.35"
1760 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.35.tgz#8bda4827be4f0b1dda91699a29499575a1f1d307"
1761 | integrity sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==
1762 |
1763 | universalify@^0.1.0:
1764 | version "0.1.2"
1765 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
1766 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
1767 |
1768 | unpipe@1.0.0, unpipe@~1.0.0:
1769 | version "1.0.0"
1770 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
1771 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
1772 |
1773 | update-browserslist-db@^1.1.0:
1774 | version "1.1.0"
1775 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e"
1776 | integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==
1777 | dependencies:
1778 | escalade "^3.1.2"
1779 | picocolors "^1.0.1"
1780 |
1781 | uri-js@^4.2.2:
1782 | version "4.4.1"
1783 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
1784 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
1785 | dependencies:
1786 | punycode "^2.1.0"
1787 |
1788 | utils-merge@1.0.1:
1789 | version "1.0.1"
1790 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
1791 | integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
1792 |
1793 | vary@^1:
1794 | version "1.1.2"
1795 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
1796 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
1797 |
1798 | void-elements@^2.0.0:
1799 | version "2.0.1"
1800 | resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
1801 | integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==
1802 |
1803 | watchpack@^2.4.1:
1804 | version "2.4.1"
1805 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff"
1806 | integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==
1807 | dependencies:
1808 | glob-to-regexp "^0.4.1"
1809 | graceful-fs "^4.1.2"
1810 |
1811 | webpack-cli@5.1.4:
1812 | version "5.1.4"
1813 | resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b"
1814 | integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==
1815 | dependencies:
1816 | "@discoveryjs/json-ext" "^0.5.0"
1817 | "@webpack-cli/configtest" "^2.1.1"
1818 | "@webpack-cli/info" "^2.0.2"
1819 | "@webpack-cli/serve" "^2.0.5"
1820 | colorette "^2.0.14"
1821 | commander "^10.0.1"
1822 | cross-spawn "^7.0.3"
1823 | envinfo "^7.7.3"
1824 | fastest-levenshtein "^1.0.12"
1825 | import-local "^3.0.2"
1826 | interpret "^3.1.1"
1827 | rechoir "^0.8.0"
1828 | webpack-merge "^5.7.3"
1829 |
1830 | webpack-merge@^4.1.5:
1831 | version "4.2.2"
1832 | resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d"
1833 | integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==
1834 | dependencies:
1835 | lodash "^4.17.15"
1836 |
1837 | webpack-merge@^5.7.3:
1838 | version "5.8.0"
1839 | resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61"
1840 | integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==
1841 | dependencies:
1842 | clone-deep "^4.0.1"
1843 | wildcard "^2.0.0"
1844 |
1845 | webpack-sources@^3.2.3:
1846 | version "3.2.3"
1847 | resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
1848 | integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
1849 |
1850 | webpack@5.94.0:
1851 | version "5.94.0"
1852 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.94.0.tgz#77a6089c716e7ab90c1c67574a28da518a20970f"
1853 | integrity sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==
1854 | dependencies:
1855 | "@types/estree" "^1.0.5"
1856 | "@webassemblyjs/ast" "^1.12.1"
1857 | "@webassemblyjs/wasm-edit" "^1.12.1"
1858 | "@webassemblyjs/wasm-parser" "^1.12.1"
1859 | acorn "^8.7.1"
1860 | acorn-import-attributes "^1.9.5"
1861 | browserslist "^4.21.10"
1862 | chrome-trace-event "^1.0.2"
1863 | enhanced-resolve "^5.17.1"
1864 | es-module-lexer "^1.2.1"
1865 | eslint-scope "5.1.1"
1866 | events "^3.2.0"
1867 | glob-to-regexp "^0.4.1"
1868 | graceful-fs "^4.2.11"
1869 | json-parse-even-better-errors "^2.3.1"
1870 | loader-runner "^4.2.0"
1871 | mime-types "^2.1.27"
1872 | neo-async "^2.6.2"
1873 | schema-utils "^3.2.0"
1874 | tapable "^2.1.1"
1875 | terser-webpack-plugin "^5.3.10"
1876 | watchpack "^2.4.1"
1877 | webpack-sources "^3.2.3"
1878 |
1879 | which@^1.2.1:
1880 | version "1.3.1"
1881 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
1882 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
1883 | dependencies:
1884 | isexe "^2.0.0"
1885 |
1886 | which@^2.0.1:
1887 | version "2.0.2"
1888 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
1889 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
1890 | dependencies:
1891 | isexe "^2.0.0"
1892 |
1893 | wildcard@^2.0.0:
1894 | version "2.0.0"
1895 | resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec"
1896 | integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==
1897 |
1898 | workerpool@^6.5.1:
1899 | version "6.5.1"
1900 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544"
1901 | integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==
1902 |
1903 | wrap-ansi@^7.0.0:
1904 | version "7.0.0"
1905 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
1906 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
1907 | dependencies:
1908 | ansi-styles "^4.0.0"
1909 | string-width "^4.1.0"
1910 | strip-ansi "^6.0.0"
1911 |
1912 | wrappy@1:
1913 | version "1.0.2"
1914 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1915 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
1916 |
1917 | ws@~8.11.0:
1918 | version "8.11.0"
1919 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143"
1920 | integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==
1921 |
1922 | ws@~8.17.1:
1923 | version "8.17.1"
1924 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b"
1925 | integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==
1926 |
1927 | y18n@^5.0.5:
1928 | version "5.0.8"
1929 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
1930 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
1931 |
1932 | yargs-parser@^20.2.2, yargs-parser@^20.2.9:
1933 | version "20.2.9"
1934 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
1935 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
1936 |
1937 | yargs-unparser@^2.0.0:
1938 | version "2.0.0"
1939 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
1940 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
1941 | dependencies:
1942 | camelcase "^6.0.0"
1943 | decamelize "^4.0.0"
1944 | flat "^5.0.2"
1945 | is-plain-obj "^2.1.0"
1946 |
1947 | yargs@^16.1.1, yargs@^16.2.0:
1948 | version "16.2.0"
1949 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
1950 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
1951 | dependencies:
1952 | cliui "^7.0.2"
1953 | escalade "^3.1.1"
1954 | get-caller-file "^2.0.5"
1955 | require-directory "^2.1.1"
1956 | string-width "^4.2.0"
1957 | y18n "^5.0.5"
1958 | yargs-parser "^20.2.2"
1959 |
1960 | yocto-queue@^0.1.0:
1961 | version "0.1.0"
1962 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
1963 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
1964 |
--------------------------------------------------------------------------------
/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | rootProject.name = "normalize"
2 |
--------------------------------------------------------------------------------
/src/appleMain/kotlin/Normalize.kt:
--------------------------------------------------------------------------------
1 | package doist.x.normalize
2 |
3 | import platform.Foundation.NSString
4 | import platform.Foundation.decomposedStringWithCanonicalMapping
5 | import platform.Foundation.decomposedStringWithCompatibilityMapping
6 | import platform.Foundation.precomposedStringWithCanonicalMapping
7 | import platform.Foundation.precomposedStringWithCompatibilityMapping
8 |
9 | public actual fun String.normalize(form: Form): String {
10 | @Suppress("CAST_NEVER_SUCCEEDS")
11 | val str = this as NSString
12 | return when (form) {
13 | Form.NFC -> str.precomposedStringWithCanonicalMapping
14 | Form.NFD -> str.decomposedStringWithCanonicalMapping
15 | Form.NFKC -> str.precomposedStringWithCompatibilityMapping
16 | Form.NFKD -> str.decomposedStringWithCompatibilityMapping
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/commonMain/kotlin/Normalize.kt:
--------------------------------------------------------------------------------
1 | package doist.x.normalize
2 |
3 | /**
4 | * Normalize the string according to the specified normalization form.
5 | *
6 | * Note: This method does not change the original string.
7 | */
8 | public expect fun String.normalize(form: Form): String
9 |
10 | /**
11 | * Unicode normalization form as described in
12 | * [Unicode® Standard Annex #15](https://unicode.org/reports/tr15/).
13 | */
14 | public enum class Form {
15 | /**
16 | * Canonical decomposition, followed by canonical composition.
17 | */
18 | NFC,
19 |
20 | /**
21 | * Canonical decomposition.
22 | */
23 | NFD,
24 |
25 | /**
26 | * Compatibility decomposition, followed by canonical composition.
27 | */
28 | NFKC,
29 |
30 | /**
31 | * Compatibility decomposition.
32 | */
33 | NFKD
34 | }
35 |
--------------------------------------------------------------------------------
/src/commonTest/kotlin/NormalizeTest.kt:
--------------------------------------------------------------------------------
1 | import doist.x.normalize.Form
2 | import doist.x.normalize.normalize
3 | import kotlin.test.Test
4 | import kotlin.test.assertEquals
5 | import kotlin.test.assertFails
6 | import kotlin.test.assertTrue
7 |
8 | expect fun loadTestData(): String
9 |
10 | class NormalizeTest {
11 | @Test
12 | fun formValues() {
13 | val forms = Form.values()
14 | assertEquals(4, forms.size)
15 | assertTrue(forms.contains(Form.NFC))
16 | assertTrue(forms.contains(Form.NFD))
17 | assertTrue(forms.contains(Form.NFKC))
18 | assertTrue(forms.contains(Form.NFKD))
19 | }
20 |
21 | @Test
22 | fun testFormValueOf() {
23 | assertEquals(Form.NFC, Form.valueOf("NFC"))
24 | assertEquals(Form.NFD, Form.valueOf("NFD"))
25 | assertEquals(Form.NFKC, Form.valueOf("NFKC"))
26 | assertEquals(Form.NFKD, Form.valueOf("NFKD"))
27 |
28 | assertFails { Form.valueOf("nope") }
29 | assertFails { Form.valueOf("nfc") }
30 | assertFails { Form.valueOf("NFC ") }
31 | }
32 |
33 | @Test
34 | @Suppress("DestructuringDeclarationWithTooManyEntries")
35 | fun normalizeAnnex15() {
36 | // Ref: https://www.unicode.org/Public/10.0.0/ucd/NormalizationTest.txt
37 | // Version 10.0.0 is the latest version of the Unicode Standard that is mostly supported across all platforms,
38 | // except for a couple of lines skipped below. JDK 11 is especially problematic in newer versions.
39 | val fixtures = loadTestData()
40 | val skipLines = arrayOf(
41 | // Fails on all Darwin platforms.
42 | 67, 68,
43 | )
44 | fixtures.lines().forEachIndexed { i, line ->
45 | if (line.startsWith("#") || line.startsWith("@") || line.isEmpty()) {
46 | return@forEachIndexed
47 | }
48 |
49 | val lineno = i + 1
50 | if (skipLines.contains(lineno)) {
51 | return@forEachIndexed
52 | }
53 |
54 | val (source, nfc, nfd, nfkc, nfkd) =
55 | line.split(";", limit = 6).dropLast(1).map { column ->
56 | column.split(" ").flatMap { codepoint ->
57 | val codePointInt = codepoint.toInt(radix = 16)
58 | if (codePointInt <= 0xFFFF) {
59 | sequenceOf(codePointInt.toChar())
60 | } else {
61 | val high = (codePointInt - 0x10000) / 0x400 + 0xD800
62 | val low = (codePointInt - 0x10000) % 0x400 + 0xDC00
63 | sequenceOf(high.toChar(), low.toChar())
64 | }
65 | }.joinToString(separator = "")
66 | }
67 |
68 | assertEquals(nfc, source.normalize(Form.NFC), "Line $lineno: NFC: $source: ")
69 | assertEquals(nfc, nfc.normalize(Form.NFC), "Line $lineno: NFC: $nfc: ")
70 | assertEquals(nfc, nfd.normalize(Form.NFC), "Line $lineno: NFC: $nfd: ")
71 | assertEquals(nfkc, nfkc.normalize(Form.NFC), "Line $lineno: NFC: $nfkc: ")
72 | assertEquals(nfkc, nfkd.normalize(Form.NFC), "Line $lineno: NFC: $nfkd: ")
73 |
74 | assertEquals(nfd, source.normalize(Form.NFD), "Line $lineno: NFD: $source: ")
75 | assertEquals(nfd, nfc.normalize(Form.NFD), "Line $lineno: NFD: $nfc: ")
76 | assertEquals(nfd, nfd.normalize(Form.NFD), "Line $lineno: NFD: $nfd: ")
77 | assertEquals(nfkd, nfkc.normalize(Form.NFD), "Line $lineno: NFD: $nfkc: ")
78 | assertEquals(nfkd, nfkd.normalize(Form.NFD), "Line $lineno: NFD: $nfkd: ")
79 |
80 | assertEquals(nfkc, source.normalize(Form.NFKC), "Line $lineno: NFKC: $source: ")
81 | assertEquals(nfkc, nfc.normalize(Form.NFKC), "Line $lineno: NFKC: $nfc: ")
82 | assertEquals(nfkc, nfd.normalize(Form.NFKC), "Line $lineno: NFKC: $nfd: ")
83 | assertEquals(nfkc, nfkc.normalize(Form.NFKC), "Line $lineno: NFKC: $nfkc: ")
84 | assertEquals(nfkc, nfkd.normalize(Form.NFKC), "Line $lineno: NFKC: $nfkd: ")
85 |
86 | assertEquals(nfkd, source.normalize(Form.NFKD), "Line $lineno: NFKD: $source: ")
87 | assertEquals(nfkd, nfc.normalize(Form.NFKD), "Line $lineno: NFKD: $nfc: ")
88 | assertEquals(nfkd, nfd.normalize(Form.NFKD), "Line $lineno: NFKD: $nfd: ")
89 | assertEquals(nfkd, nfkc.normalize(Form.NFKD), "Line $lineno: NFKD: $nfkc: ")
90 | assertEquals(nfkd, nfkd.normalize(Form.NFKD), "Line $lineno: NFKD: $nfkd: ")
91 | }
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/src/jsMain/kotlin/Normalize.kt:
--------------------------------------------------------------------------------
1 | package doist.x.normalize
2 |
3 | public actual fun String.normalize(form: Form): String {
4 | return asDynamic().normalize(form.name) as String
5 | }
6 |
--------------------------------------------------------------------------------
/src/jvmMain/kotlin/Normalize.kt:
--------------------------------------------------------------------------------
1 | package doist.x.normalize
2 |
3 | import java.text.Normalizer
4 |
5 | public actual fun String.normalize(form: Form): String {
6 | return Normalizer.normalize(this, when (form) {
7 | Form.NFC -> Normalizer.Form.NFC
8 | Form.NFD -> Normalizer.Form.NFD
9 | Form.NFKC -> Normalizer.Form.NFKC
10 | Form.NFKD -> Normalizer.Form.NFKD
11 | })
12 | }
13 |
--------------------------------------------------------------------------------
/src/linuxMain/kotlin/Normalize.kt:
--------------------------------------------------------------------------------
1 | package doist.x.normalize
2 |
3 | import kotlinx.cinterop.ByteVar
4 | import kotlinx.cinterop.alloc
5 | import kotlinx.cinterop.convert
6 | import kotlinx.cinterop.memScoped
7 | import kotlinx.cinterop.ptr
8 | import kotlinx.cinterop.reinterpret
9 | import kotlinx.cinterop.toKString
10 | import kotlinx.cinterop.utf8
11 | import platform.posix.size_tVar
12 | import uninorm.UNINORM_NFC
13 | import uninorm.UNINORM_NFD
14 | import uninorm.UNINORM_NFKC
15 | import uninorm.UNINORM_NFKD
16 | import uninorm.u8_normalize
17 |
18 | public actual fun String.normalize(form: Form): String = memScoped {
19 | val str = this@normalize.utf8
20 | val uninormForm = when (form) {
21 | Form.NFC -> UNINORM_NFC
22 | Form.NFD -> UNINORM_NFD
23 | Form.NFKC -> UNINORM_NFKC
24 | Form.NFKD -> UNINORM_NFKD
25 | }
26 | val result = u8_normalize(
27 | uninormForm, str.ptr.reinterpret(), str.size.convert(), null, alloc().ptr
28 | )!!
29 | result.reinterpret().toKString()
30 | }
31 |
--------------------------------------------------------------------------------
/src/mingwX64Main/kotlin/Normalize.kt:
--------------------------------------------------------------------------------
1 | package doist.x.normalize
2 |
3 | import kotlinx.cinterop.allocArray
4 | import kotlinx.cinterop.convert
5 | import kotlinx.cinterop.memScoped
6 | import kotlinx.cinterop.toKString
7 | import platform.windows.GetLastError
8 | import platform.windows.NormalizationC
9 | import platform.windows.NormalizationD
10 | import platform.windows.NormalizationKC
11 | import platform.windows.NormalizationKD
12 | import platform.windows.NormalizeString
13 | import platform.windows.WCHARVar
14 | import platform.windows.ERROR_INSUFFICIENT_BUFFER
15 |
16 | public actual fun String.normalize(form: Form): String = memScoped {
17 | val winForm = when (form) {
18 | Form.NFC -> NormalizationC
19 | Form.NFD -> NormalizationD
20 | Form.NFKC -> NormalizationKC
21 | Form.NFKD -> NormalizationKD
22 | }
23 | var sizeEstimate = NormalizeString(winForm, this@normalize, -1, null, 0)
24 | while (sizeEstimate > 0) {
25 | val result = allocArray(sizeEstimate)
26 | val size = NormalizeString(winForm, this@normalize, -1, result, sizeEstimate)
27 | if (size <= 0 && GetLastError() == ERROR_INSUFFICIENT_BUFFER.convert()) {
28 | // Updated size estimate is `-size`.
29 | // See: https://learn.microsoft.com/en-us/windows/win32/intl/nls--unicode-normalization-sample
30 | sizeEstimate = -size
31 | } else {
32 | return result.toKString()
33 | }
34 | }
35 | return this@normalize
36 | }
37 |
--------------------------------------------------------------------------------
/src/nativeInterop/cinterop/uninorm.def:
--------------------------------------------------------------------------------
1 | # Install libunistring-dev, and generate with:
2 | # $ ./gradlew cinteropUninorm*
3 | # OR
4 | # $ cinterop -def uninorm.def
5 |
6 | package = uninorm
7 | headers = uninorm.h
8 | headerFilter = uninorm.h
9 |
10 | compilerOpts.linux = -I/usr/include -I/usr/include/x86_64-linux-gnu -I/usr/include/arm-linux-gnueabihf
11 | linkerOpts.linux = -L/usr/lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/arm-linux-gnueabihf -lunistring --allow-shlib-undefined
12 |
--------------------------------------------------------------------------------
/src/nonWasmTest/kotlin/NormalizeTest.nonWasm.kt:
--------------------------------------------------------------------------------
1 | import com.goncalossilva.resources.Resource
2 |
3 | actual fun loadTestData(): String =
4 | Resource("src/commonTest/resources/NormalizationTest.txt").readText()
5 |
--------------------------------------------------------------------------------
/src/wasmJsMain/kotlin/Normalize.kt:
--------------------------------------------------------------------------------
1 | package doist.x.normalize
2 |
3 | public actual fun String.normalize(form: Form): String = normalizeImpl(this, form.name)
4 |
5 | private fun normalizeImpl(str: String, form: String): String = js("""str.normalize(form)""")
6 |
--------------------------------------------------------------------------------
/src/wasmJsTest/kotlin/NormalizeTest.wasmJs.kt:
--------------------------------------------------------------------------------
1 |
2 | actual fun loadTestData(): String {
3 | // TODO load data from src/commonTest/resources/NormalizationTest.txt instead
4 | return testDataString
5 | }
6 |
--------------------------------------------------------------------------------