@cartanova/qgrid-cli 2.10.10 → 2.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/dist/_virtual/_rolldown/runtime.js +1 -10
- package/bundle/dist/application/monit/log-buffer.js +12 -6
- package/bundle/dist/application/monit/monit.frame.js +11 -3
- package/bundle/dist/application/monit/monit.types.js +1 -1
- package/bundle/dist/application/qgrid/conv-routing.js +9 -6
- package/bundle/dist/application/qgrid/expired-token-reminder.js +2 -2
- package/bundle/dist/application/qgrid/oauth.js +31 -4
- package/bundle/dist/application/qgrid/qgrid-image-generation.js +1 -1
- package/bundle/dist/application/qgrid/qgrid-response-format.js +21 -19
- package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +40 -33
- package/bundle/dist/application/qgrid/qgrid.dispatcher.js +128 -93
- package/bundle/dist/application/qgrid/qgrid.frame.js +930 -49
- package/bundle/dist/application/qgrid/qgrid.types.js +212 -5
- package/bundle/dist/application/qgrid/schema-prompt.js +75 -48
- package/bundle/dist/application/qgrid/slack-user-map.js +1 -1
- package/bundle/dist/application/qgrid/token-death.js +1 -1
- package/bundle/dist/application/qgrid/token-subscriber.js +83 -30
- package/bundle/dist/application/qgrid/token-trigger-setup.js +1 -1
- package/bundle/dist/application/qgrid/token-window-keepalive.js +8 -6
- package/bundle/dist/application/qgrid/tool-emulation-schema.js +13 -13
- package/bundle/dist/application/qgrid/tool-emulation.js +19 -15
- package/bundle/dist/application/request-log/json-schema-type-text.js +29 -12
- package/bundle/dist/application/request-log/request-log.model.js +83 -70
- package/bundle/dist/application/request-log/request-log.types.js +1 -1
- package/bundle/dist/application/request-log/zod-code-format.js +1 -1
- package/bundle/dist/application/request-log-step/request-log-step.model.js +1 -1
- package/bundle/dist/application/request-log-step/request-log-step.types.js +1 -1
- package/bundle/dist/application/setting/setting.constant.js +1 -1
- package/bundle/dist/application/setting/setting.model.js +2 -2
- package/bundle/dist/application/setting/setting.store.js +2 -2
- package/bundle/dist/application/setting/setting.types.js +1 -1
- package/bundle/dist/application/sonamu.generated.js +32 -16
- package/bundle/dist/application/sonamu.generated.sso.js +1 -1
- package/bundle/dist/application/token/token.model.js +26 -9
- package/bundle/dist/application/token/token.types.js +20 -3
- package/bundle/dist/i18n/en.js +15 -1
- package/bundle/dist/i18n/ko.js +15 -1
- package/bundle/dist/i18n/sd.generated.js +1 -1
- package/bundle/dist/migrations/20260807133553_manual__backfill_request_log_cost.js +8 -6
- package/bundle/dist/server-bootstrap.js +4 -2
- package/bundle/dist/server-error-handler.js +1 -1
- package/bundle/dist/sonamu.config.js +37 -8
- package/bundle/dist/startup-migrations.js +17 -7
- package/bundle/dist/testing/global.js +1 -1
- package/bundle/dist/testing/schema-bench.js +0 -0
- package/bundle/dist/testing/test-database-name.js +1 -1
- package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +1 -1
- package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +11 -5
- package/bundle/dist/utils/providers/anthropic/anthropic-quota.js +4 -4
- package/bundle/dist/utils/providers/anthropic/anthropic-thinking.js +1 -1
- package/bundle/dist/utils/providers/anthropic/claude-session.js +20 -19
- package/bundle/dist/utils/providers/anthropic/fence-strip.js +1 -1
- package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +49 -23
- package/bundle/dist/utils/providers/common/credentials.js +5 -1
- package/bundle/dist/utils/providers/common/effort.js +3 -3
- package/bundle/dist/utils/providers/common/model-cost.js +69 -14
- package/bundle/dist/utils/providers/common/provider-types.js +29 -1
- package/bundle/dist/utils/providers/common/schema-validation.js +78 -40
- package/bundle/dist/utils/providers/common/smooth-weighted-round-robin.js +1 -1
- package/bundle/dist/utils/providers/common/strictifier.js +62 -43
- package/bundle/dist/utils/providers/common/thinking.js +3 -2
- package/bundle/dist/utils/providers/common/ttft.js +1 -1
- package/bundle/dist/utils/providers/grok/grok-backend-protocol.js +427 -0
- package/bundle/dist/utils/providers/grok/grok-constants.js +55 -0
- package/bundle/dist/utils/providers/grok/grok-direct-client.js +196 -0
- package/bundle/dist/utils/providers/grok/grok-dispatcher.js +1313 -0
- package/bundle/dist/utils/providers/grok/grok-headers.js +118 -0
- package/bundle/dist/utils/providers/grok/grok-media-client.js +420 -0
- package/bundle/dist/utils/providers/grok/grok-models.js +114 -0
- package/bundle/dist/utils/providers/grok/grok-oauth.js +455 -0
- package/bundle/dist/utils/providers/grok/grok-quota.js +119 -0
- package/bundle/dist/utils/providers/grok/grok-refresh.js +192 -0
- package/bundle/dist/utils/providers/grok/grok-types.js +186 -0
- package/bundle/dist/utils/providers/grok/grok-voice-client.js +199 -0
- package/bundle/dist/utils/providers/grok/index.js +11 -0
- package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +111 -83
- package/bundle/dist/utils/providers/openai/openai-callback-relay.js +3 -2
- package/bundle/dist/utils/providers/openai/openai-constants.js +1 -1
- package/bundle/dist/utils/providers/openai/openai-direct-client.js +23 -7
- package/bundle/dist/utils/providers/openai/openai-dispatcher.js +143 -106
- package/bundle/dist/utils/providers/openai/openai-image-generation.js +48 -33
- package/bundle/dist/utils/providers/openai/openai-oauth.js +28 -13
- package/bundle/dist/utils/providers/openai/openai-quota.js +38 -27
- package/bundle/dist/utils/providers/openai/openai-refresh.js +17 -9
- package/bundle/dist/utils/providers/openai/openai-sse.js +1 -1
- package/bundle/dist/utils/providers/openai/openai-transport-config.js +1 -1
- package/bundle/dist/utils/quiet-hours.js +1 -1
- package/bundle/dist/utils/slack-notify.js +14 -8
- package/bundle/dist/utils/subset-loaders.js +4 -5
- package/bundle/src/application/monit/log-buffer.ts +23 -9
- package/bundle/src/application/monit/monit.frame.ts +22 -5
- package/bundle/src/application/monit/monit.types.ts +6 -0
- package/bundle/src/application/qgrid/conv-routing.test.ts +76 -4
- package/bundle/src/application/qgrid/conv-routing.ts +35 -9
- package/bundle/src/application/qgrid/expired-token-reminder.ts +9 -1
- package/bundle/src/application/qgrid/oauth.ts +51 -15
- package/bundle/src/application/qgrid/qgrid-image-generation.ts +9 -0
- package/bundle/src/application/qgrid/qgrid-response-format.ts +50 -25
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +19 -0
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +84 -40
- package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +97 -0
- package/bundle/src/application/qgrid/qgrid.dispatcher.ts +274 -126
- package/bundle/src/application/qgrid/qgrid.frame.test.ts +1013 -3
- package/bundle/src/application/qgrid/qgrid.frame.ts +1415 -60
- package/bundle/src/application/qgrid/qgrid.types.ts +335 -0
- package/bundle/src/application/qgrid/schema-prompt.ts +105 -41
- package/bundle/src/application/qgrid/slack-user-map.ts +5 -0
- package/bundle/src/application/qgrid/token-death.ts +4 -0
- package/bundle/src/application/qgrid/token-subscriber.test.ts +21 -19
- package/bundle/src/application/qgrid/token-subscriber.ts +186 -53
- package/bundle/src/application/qgrid/token-trigger-setup.ts +2 -0
- package/bundle/src/application/qgrid/token-window-keepalive.ts +49 -6
- package/bundle/src/application/qgrid/tool-emulation-schema.ts +33 -29
- package/bundle/src/application/qgrid/tool-emulation.ts +52 -27
- package/bundle/src/application/request-log/json-schema-type-text.test.ts +5 -5
- package/bundle/src/application/request-log/json-schema-type-text.ts +81 -26
- package/bundle/src/application/request-log/request-log.model.test.ts +111 -4
- package/bundle/src/application/request-log/request-log.model.ts +277 -146
- package/bundle/src/application/request-log/request-log.types.ts +6 -0
- package/bundle/src/application/request-log/zod-code-format.ts +11 -0
- package/bundle/src/application/request-log-step/request-log-step.model.ts +1 -0
- package/bundle/src/application/request-log-step/request-log-step.types.ts +2 -0
- package/bundle/src/application/setting/setting.constant.ts +9 -0
- package/bundle/src/application/setting/setting.model.ts +12 -2
- package/bundle/src/application/setting/setting.store.ts +5 -1
- package/bundle/src/application/setting/setting.types.ts +8 -0
- package/bundle/src/application/sonamu.generated.http +133 -0
- package/bundle/src/application/sonamu.generated.sso.ts +2 -0
- package/bundle/src/application/sonamu.generated.ts +15 -0
- package/bundle/src/application/token/token.identity.test.ts +20 -0
- package/bundle/src/application/token/token.model.ts +66 -7
- package/bundle/src/application/token/token.types.ts +24 -1
- package/bundle/src/i18n/en.ts +19 -0
- package/bundle/src/i18n/ko.ts +21 -0
- package/bundle/src/i18n/sd.generated.ts +23 -2
- package/bundle/src/migrations/20260807133553_manual__backfill_request_log_cost.ts +16 -8
- package/bundle/src/server-bootstrap.ts +4 -2
- package/bundle/src/server-error-handler.ts +1 -0
- package/bundle/src/sonamu.config.ts +69 -7
- package/bundle/src/startup-migrations.ts +27 -9
- package/bundle/src/testing/global.ts +20 -0
- package/bundle/src/testing/schema-bench.ts +105 -30
- package/bundle/src/testing/test-database-name.ts +2 -0
- package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +8 -0
- package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +41 -6
- package/bundle/src/utils/providers/anthropic/anthropic-quota.ts +7 -3
- package/bundle/src/utils/providers/anthropic/anthropic-thinking.ts +6 -0
- package/bundle/src/utils/providers/anthropic/claude-session.ts +58 -24
- package/bundle/src/utils/providers/anthropic/fence-strip.ts +11 -0
- package/bundle/src/utils/providers/anthropic/stream-json-adapter.ts +110 -45
- package/bundle/src/utils/providers/common/credentials.ts +8 -0
- package/bundle/src/utils/providers/common/effort.ts +9 -2
- package/bundle/src/utils/providers/common/model-cost.test.ts +48 -1
- package/bundle/src/utils/providers/common/model-cost.ts +259 -158
- package/bundle/src/utils/providers/common/provider-dispatcher.ts +98 -2
- package/bundle/src/utils/providers/common/provider-types.ts +46 -3
- package/bundle/src/utils/providers/common/schema-validation.test.ts +5 -1
- package/bundle/src/utils/providers/common/schema-validation.ts +124 -56
- package/bundle/src/utils/providers/common/smooth-weighted-round-robin.ts +4 -0
- package/bundle/src/utils/providers/common/strictifier.ts +185 -59
- package/bundle/src/utils/providers/common/thinking.ts +2 -2
- package/bundle/src/utils/providers/common/ttft.ts +4 -2
- package/bundle/src/utils/providers/grok/__fixtures__/golden-responses-1.0.60.json +164 -0
- package/bundle/src/utils/providers/grok/grok-backend-protocol.test.ts +325 -0
- package/bundle/src/utils/providers/grok/grok-backend-protocol.ts +721 -0
- package/bundle/src/utils/providers/grok/grok-constants.ts +105 -0
- package/bundle/src/utils/providers/grok/grok-direct-client.test.ts +179 -0
- package/bundle/src/utils/providers/grok/grok-direct-client.ts +313 -0
- package/bundle/src/utils/providers/grok/grok-dispatcher.test.ts +1395 -0
- package/bundle/src/utils/providers/grok/grok-dispatcher.ts +2105 -0
- package/bundle/src/utils/providers/grok/grok-headers.test.ts +149 -0
- package/bundle/src/utils/providers/grok/grok-headers.ts +199 -0
- package/bundle/src/utils/providers/grok/grok-media-client.test.ts +446 -0
- package/bundle/src/utils/providers/grok/grok-media-client.ts +703 -0
- package/bundle/src/utils/providers/grok/grok-models.test.ts +96 -0
- package/bundle/src/utils/providers/grok/grok-models.ts +161 -0
- package/bundle/src/utils/providers/grok/grok-oauth.test.ts +406 -0
- package/bundle/src/utils/providers/grok/grok-oauth.ts +771 -0
- package/bundle/src/utils/providers/grok/grok-quota.test.ts +142 -0
- package/bundle/src/utils/providers/grok/grok-quota.ts +198 -0
- package/bundle/src/utils/providers/grok/grok-refresh.test.ts +239 -0
- package/bundle/src/utils/providers/grok/grok-refresh.ts +325 -0
- package/bundle/src/utils/providers/grok/grok-types.test.ts +252 -0
- package/bundle/src/utils/providers/grok/grok-types.ts +374 -0
- package/bundle/src/utils/providers/grok/grok-voice-client.test.ts +321 -0
- package/bundle/src/utils/providers/grok/grok-voice-client.ts +284 -0
- package/bundle/src/utils/providers/grok/index.ts +20 -0
- package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +221 -137
- package/bundle/src/utils/providers/openai/openai-callback-relay.ts +12 -1
- package/bundle/src/utils/providers/openai/openai-constants.ts +2 -0
- package/bundle/src/utils/providers/openai/openai-direct-client.ts +111 -21
- package/bundle/src/utils/providers/openai/openai-dispatcher.ts +322 -169
- package/bundle/src/utils/providers/openai/openai-image-generation.ts +116 -36
- package/bundle/src/utils/providers/openai/openai-oauth.ts +48 -20
- package/bundle/src/utils/providers/openai/openai-quota.ts +77 -46
- package/bundle/src/utils/providers/openai/openai-refresh.ts +42 -18
- package/bundle/src/utils/providers/openai/openai-sse.ts +27 -3
- package/bundle/src/utils/providers/openai/openai-transport-config.ts +2 -0
- package/bundle/src/utils/quiet-hours.ts +12 -1
- package/bundle/src/utils/slack-notify.ts +44 -13
- package/bundle/src/utils/subset-loaders.ts +7 -7
- package/bundle/web-dist/client/assets/clsx-5XM_pHvN.js +1 -0
- package/bundle/web-dist/client/assets/index-Be2qCZmI.css +1 -0
- package/bundle/web-dist/client/assets/index-C96h3feE.js +32 -0
- package/bundle/web-dist/client/assets/logs-DBM6U0QD.js +1 -0
- package/bundle/web-dist/client/assets/monit-BBjXa7vB.js +1 -0
- package/bundle/web-dist/client/assets/routes-Crz_PQzi.js +5 -0
- package/bundle/web-dist/client/assets/{services.generated-NP-ValHd.js → services.generated-B5lc3aIC.js} +5 -5
- package/bundle/web-dist/client/assets/settings-Cdwm3OBB.js +1 -0
- package/bundle/web-dist/client/assets/show-DBUhALT1.js +2 -0
- package/bundle/web-dist/client/assets/tokens-CVQAVJTo.js +1 -0
- package/bundle/web-dist/client/assets/total-cost-MnfKU8IN.js +1 -0
- package/bundle/web-dist/client/assets/use-oauth-login-flow-BfxYI4Oh.js +1 -0
- package/bundle/web-dist/client/assets/use-update-token-mutation-qKBC2sn7.js +1 -0
- package/bundle/web-dist/client/assets/{vendor-tanstack-DJRQAbrY.js → vendor-tanstack-DRPs09ai.js} +1 -1
- package/bundle/web-dist/client/index.html +5 -5
- package/bundle/web-dist/server/assets/clsx-D_N5PN_2.js +16 -0
- package/bundle/web-dist/server/assets/{lazyRouteComponent-CgBdabgd.js → lazyRouteComponent-AKiHfZWp.js} +129 -2
- package/bundle/web-dist/server/assets/{logs-BMyR98rU.js → logs-B7QmGJq3.js} +18 -14
- package/bundle/web-dist/server/assets/{monit-ZPt66W5M.js → monit-DFt7x3bh.js} +13 -12
- package/bundle/web-dist/server/assets/{plus-BZ9I0VgC.js → plus-DaYQRpBt.js} +1 -1
- package/bundle/web-dist/server/assets/{react-dom-Ds75e4Jl.js → react-dom-Cv23mm1K.js} +2 -129
- package/bundle/web-dist/server/assets/{refresh-cw-CztCFis-.js → refresh-cw-BpXNsAy-.js} +1 -1
- package/bundle/web-dist/server/assets/{request-model-DjGldb-h.js → request-model-eHE6YbaF.js} +1 -1
- package/bundle/web-dist/server/assets/{routes-Ct-k7nBA.js → routes-_Y-PJfgO.js} +110 -39
- package/bundle/web-dist/server/assets/{services.generated-BA4AcAf5.js → services.generated-CMJ8AHbO.js} +582 -172
- package/bundle/web-dist/server/assets/{settings-CBUZ47Xx.js → settings-JwJKxn2e.js} +14 -14
- package/bundle/web-dist/server/assets/{show-LSFIzvO2.js → show-BEv6z1v_.js} +90 -60
- package/bundle/web-dist/server/assets/{tokens-DxrBW512.js → tokens-CNT4mI-f.js} +162 -50
- package/bundle/web-dist/server/assets/total-cost-fTE9Xy82.js +18 -0
- package/bundle/web-dist/server/assets/use-oauth-login-flow-jkAkT3X6.js +2345 -0
- package/bundle/web-dist/server/assets/{use-update-token-mutation-pkArIzCP.js → use-update-token-mutation-Sm6kh02m.js} +1 -1
- package/bundle/web-dist/server/entry-server.generated.js +1644 -21655
- package/dist/cli.js +9 -9
- package/package.json +4 -11
- package/postinstall.mjs +12 -0
- package/skills/qgrid/SKILL.md +1 -0
- package/skills/qgrid/references/cli-env-and-server-boot.md +4 -1
- package/skills/qgrid/references/decision-rationale.md +23 -0
- package/skills/qgrid/references/grok-runtime.md +89 -0
- package/skills/qgrid/references/provider-runtime-differences.md +30 -29
- package/skills/qgrid/references/repo-map.md +10 -0
- package/skills/qgrid/references/token-auth-quota-lifecycle.md +56 -3
- package/bundle/dist/node_modules/.pnpm/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +0 -406
- package/bundle/dist/node_modules/.pnpm/@vitest_expect@4.1.10/node_modules/@vitest/expect/dist/index.js +0 -1507
- package/bundle/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.10/node_modules/@vitest/pretty-format/dist/index.js +0 -887
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/chunk-artifact.js +0 -2756
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/index.js +0 -8
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/utils.js +0 -8
- package/bundle/dist/node_modules/.pnpm/@vitest_snapshot@4.1.10/node_modules/@vitest/snapshot/dist/index.js +0 -922
- package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.10/node_modules/@vitest/spy/dist/index.js +0 -386
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +0 -121
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/constants.js +0 -51
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/diff.js +0 -1317
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/display.js +0 -561
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/error.js +0 -40
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/helpers.js +0 -272
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/offset.js +0 -27
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/serialize.js +0 -77
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/source-map.js +0 -381
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/timers.js +0 -51
- package/bundle/dist/node_modules/.pnpm/chai@6.2.2/node_modules/chai/index.js +0 -2986
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.js +0 -10
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.js +0 -109
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.js +0 -10
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.js +0 -10
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.js +0 -10
- package/bundle/dist/node_modules/.pnpm/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.js +0 -1126
- package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.js +0 -21
- package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +0 -432
- package/bundle/dist/node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.js +0 -517
- package/bundle/dist/node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.js +0 -101
- package/bundle/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.11.2_@emnapi_runtime@1.11.2_@types_node@25.0.7_esbuild@0.27.4_5b35fc1fb85d2af4d105e0d74f940f50/node_modules/vite/dist/node/module-runner.js +0 -1265
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +0 -9
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +0 -41
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +0 -19
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +0 -202
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +0 -46
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +0 -119
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +0 -3044
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +0 -59
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/index.js +0 -28
- package/bundle/dist/testing/setup-mocks.js +0 -16
- package/bundle/src/testing/setup-mocks.ts +0 -44
- package/bundle/web-dist/client/assets/index-Bw2s88Ot.css +0 -1
- package/bundle/web-dist/client/assets/index-DZwzUfI-.js +0 -106
- package/bundle/web-dist/client/assets/logs-Cog79DU5.js +0 -1
- package/bundle/web-dist/client/assets/monit-2auznBys.js +0 -1
- package/bundle/web-dist/client/assets/routes-B0lTeLK-.js +0 -5
- package/bundle/web-dist/client/assets/settings-D8ZxZGSJ.js +0 -1
- package/bundle/web-dist/client/assets/show-CFSERlnM.js +0 -2
- package/bundle/web-dist/client/assets/tokens-CZXUyI7O.js +0 -1
- package/bundle/web-dist/client/assets/use-oauth-login-flow-hboOs3wG.js +0 -1
- package/bundle/web-dist/client/assets/use-update-token-mutation-BQHS0byG.js +0 -1
- package/bundle/web-dist/server/assets/use-oauth-login-flow-Gn8flMK5.js +0 -178
- package/dist/cli.d.ts +0 -10
- /package/bundle/web-dist/client/assets/{cost-DH2jZbrw.js → cost-DB3HbU7T.js} +0 -0
- /package/bundle/web-dist/client/assets/{plus-B62CuqT8.js → plus-BsQdY7PS.js} +0 -0
- /package/bundle/web-dist/client/assets/{preload-helper-ca-nBW7U.js → preload-helper-DWTEM3RW.js} +0 -0
- /package/bundle/web-dist/client/assets/{refresh-cw-NNcU0Cmq.js → refresh-cw-D9IUmT23.js} +0 -0
- /package/bundle/web-dist/client/assets/{request-model-CojtinqK.js → request-model-Bpp_rkK8.js} +0 -0
- /package/bundle/web-dist/server/assets/{cost-eEHeTRT5.js → cost-BC9yzyA9.js} +0 -0
package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.10/node_modules/@vitest/spy/dist/index.js
DELETED
|
@@ -1,386 +0,0 @@
|
|
|
1
|
-
//#region ../../node_modules/.pnpm/@vitest+spy@4.1.10/node_modules/@vitest/spy/dist/index.js
|
|
2
|
-
function isMockFunction(fn) {
|
|
3
|
-
return typeof fn === "function" && "_isMockFunction" in fn && fn._isMockFunction === true;
|
|
4
|
-
}
|
|
5
|
-
const MOCK_RESTORE = /* @__PURE__ */ new Set();
|
|
6
|
-
const REGISTERED_MOCKS = /* @__PURE__ */ new Set();
|
|
7
|
-
const MOCK_CONFIGS = /* @__PURE__ */ new WeakMap();
|
|
8
|
-
function createMockInstance(options = {}) {
|
|
9
|
-
const { originalImplementation, restore, mockImplementation, resetToMockImplementation, resetToMockName } = options;
|
|
10
|
-
if (restore) MOCK_RESTORE.add(restore);
|
|
11
|
-
const config = getDefaultConfig(originalImplementation);
|
|
12
|
-
const state = getDefaultState();
|
|
13
|
-
const mock = createMock({
|
|
14
|
-
config,
|
|
15
|
-
state,
|
|
16
|
-
...options
|
|
17
|
-
});
|
|
18
|
-
const mockLength = (mockImplementation || originalImplementation)?.length ?? 0;
|
|
19
|
-
Object.defineProperty(mock, "length", {
|
|
20
|
-
writable: true,
|
|
21
|
-
enumerable: false,
|
|
22
|
-
value: mockLength,
|
|
23
|
-
configurable: true
|
|
24
|
-
});
|
|
25
|
-
if (resetToMockName) config.mockName = mock.name || "vi.fn()";
|
|
26
|
-
MOCK_CONFIGS.set(mock, config);
|
|
27
|
-
REGISTERED_MOCKS.add(mock);
|
|
28
|
-
mock._isMockFunction = true;
|
|
29
|
-
mock.getMockImplementation = () => {
|
|
30
|
-
return config.onceMockImplementations[0] || config.mockImplementation;
|
|
31
|
-
};
|
|
32
|
-
Object.defineProperty(mock, "mock", {
|
|
33
|
-
configurable: false,
|
|
34
|
-
enumerable: true,
|
|
35
|
-
writable: false,
|
|
36
|
-
value: state
|
|
37
|
-
});
|
|
38
|
-
mock.mockImplementation = function mockImplementation(implementation) {
|
|
39
|
-
config.mockImplementation = implementation;
|
|
40
|
-
return mock;
|
|
41
|
-
};
|
|
42
|
-
mock.mockImplementationOnce = function mockImplementationOnce(implementation) {
|
|
43
|
-
config.onceMockImplementations.push(implementation);
|
|
44
|
-
return mock;
|
|
45
|
-
};
|
|
46
|
-
mock.withImplementation = function withImplementation(implementation, callback) {
|
|
47
|
-
const previousImplementation = config.mockImplementation;
|
|
48
|
-
const previousOnceImplementations = config.onceMockImplementations;
|
|
49
|
-
const reset = () => {
|
|
50
|
-
config.mockImplementation = previousImplementation;
|
|
51
|
-
config.onceMockImplementations = previousOnceImplementations;
|
|
52
|
-
};
|
|
53
|
-
config.mockImplementation = implementation;
|
|
54
|
-
config.onceMockImplementations = [];
|
|
55
|
-
const returnValue = callback();
|
|
56
|
-
if (typeof returnValue === "object" && typeof returnValue?.then === "function") return returnValue.then(() => {
|
|
57
|
-
reset();
|
|
58
|
-
return mock;
|
|
59
|
-
});
|
|
60
|
-
else reset();
|
|
61
|
-
return mock;
|
|
62
|
-
};
|
|
63
|
-
mock.mockReturnThis = function mockReturnThis() {
|
|
64
|
-
return mock.mockImplementation(function() {
|
|
65
|
-
return this;
|
|
66
|
-
});
|
|
67
|
-
};
|
|
68
|
-
mock.mockReturnValue = function mockReturnValue(value) {
|
|
69
|
-
return mock.mockImplementation(function() {
|
|
70
|
-
if (new.target) throwConstructorError("mockReturnValue");
|
|
71
|
-
return value;
|
|
72
|
-
});
|
|
73
|
-
};
|
|
74
|
-
mock.mockReturnValueOnce = function mockReturnValueOnce(value) {
|
|
75
|
-
return mock.mockImplementationOnce(function() {
|
|
76
|
-
if (new.target) throwConstructorError("mockReturnValueOnce");
|
|
77
|
-
return value;
|
|
78
|
-
});
|
|
79
|
-
};
|
|
80
|
-
mock.mockThrow = function mockThrow(value) {
|
|
81
|
-
return mock.mockImplementation(function() {
|
|
82
|
-
throw value;
|
|
83
|
-
});
|
|
84
|
-
};
|
|
85
|
-
mock.mockThrowOnce = function mockThrowOnce(value) {
|
|
86
|
-
return mock.mockImplementationOnce(function() {
|
|
87
|
-
throw value;
|
|
88
|
-
});
|
|
89
|
-
};
|
|
90
|
-
mock.mockResolvedValue = function mockResolvedValue(value) {
|
|
91
|
-
return mock.mockImplementation(function() {
|
|
92
|
-
if (new.target) throwConstructorError("mockResolvedValue");
|
|
93
|
-
return Promise.resolve(value);
|
|
94
|
-
});
|
|
95
|
-
};
|
|
96
|
-
mock.mockResolvedValueOnce = function mockResolvedValueOnce(value) {
|
|
97
|
-
return mock.mockImplementationOnce(function() {
|
|
98
|
-
if (new.target) throwConstructorError("mockResolvedValueOnce");
|
|
99
|
-
return Promise.resolve(value);
|
|
100
|
-
});
|
|
101
|
-
};
|
|
102
|
-
mock.mockRejectedValue = function mockRejectedValue(value) {
|
|
103
|
-
return mock.mockImplementation(function() {
|
|
104
|
-
if (new.target) throwConstructorError("mockRejectedValue");
|
|
105
|
-
return Promise.reject(value);
|
|
106
|
-
});
|
|
107
|
-
};
|
|
108
|
-
mock.mockRejectedValueOnce = function mockRejectedValueOnce(value) {
|
|
109
|
-
return mock.mockImplementationOnce(function() {
|
|
110
|
-
if (new.target) throwConstructorError("mockRejectedValueOnce");
|
|
111
|
-
return Promise.reject(value);
|
|
112
|
-
});
|
|
113
|
-
};
|
|
114
|
-
mock.mockClear = function mockClear() {
|
|
115
|
-
state.calls = [];
|
|
116
|
-
state.contexts = [];
|
|
117
|
-
state.instances = [];
|
|
118
|
-
state.invocationCallOrder = [];
|
|
119
|
-
state.results = [];
|
|
120
|
-
state.settledResults = [];
|
|
121
|
-
return mock;
|
|
122
|
-
};
|
|
123
|
-
mock.mockReset = function mockReset() {
|
|
124
|
-
mock.mockClear();
|
|
125
|
-
config.mockImplementation = resetToMockImplementation ? mockImplementation : void 0;
|
|
126
|
-
config.mockName = resetToMockName ? mock.name || "vi.fn()" : "vi.fn()";
|
|
127
|
-
config.onceMockImplementations = [];
|
|
128
|
-
return mock;
|
|
129
|
-
};
|
|
130
|
-
mock.mockRestore = function mockRestore() {
|
|
131
|
-
mock.mockReset();
|
|
132
|
-
return restore?.();
|
|
133
|
-
};
|
|
134
|
-
mock.mockName = function mockName(name) {
|
|
135
|
-
if (typeof name === "string") config.mockName = name;
|
|
136
|
-
return mock;
|
|
137
|
-
};
|
|
138
|
-
mock.getMockName = function getMockName() {
|
|
139
|
-
return config.mockName || "vi.fn()";
|
|
140
|
-
};
|
|
141
|
-
if (Symbol.dispose) mock[Symbol.dispose] = () => mock.mockRestore();
|
|
142
|
-
if (mockImplementation) mock.mockImplementation(mockImplementation);
|
|
143
|
-
return mock;
|
|
144
|
-
}
|
|
145
|
-
function fn(originalImplementation) {
|
|
146
|
-
if (originalImplementation != null && isMockFunction(originalImplementation)) return originalImplementation;
|
|
147
|
-
return createMockInstance({
|
|
148
|
-
mockImplementation: originalImplementation,
|
|
149
|
-
resetToMockImplementation: true
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
function spyOn(object, key, accessor) {
|
|
153
|
-
assert(object != null, "The vi.spyOn() function could not find an object to spy upon. The first argument must be defined.");
|
|
154
|
-
assert(typeof object === "object" || typeof object === "function", "Vitest cannot spy on a primitive value.");
|
|
155
|
-
const [originalDescriptorObject, originalDescriptor] = getDescriptor(object, key) || [];
|
|
156
|
-
assert(originalDescriptor || key in object, `The property "${String(key)}" is not defined on the ${typeof object}.`);
|
|
157
|
-
let accessType = accessor || "value";
|
|
158
|
-
let ssr = false;
|
|
159
|
-
if (accessType === "value" && originalDescriptor && originalDescriptor.value == null && originalDescriptor.get) {
|
|
160
|
-
accessType = "get";
|
|
161
|
-
ssr = true;
|
|
162
|
-
}
|
|
163
|
-
let original;
|
|
164
|
-
if (originalDescriptor) {
|
|
165
|
-
original = originalDescriptor[accessType];
|
|
166
|
-
if (original == null && accessType === "value") original = object[key];
|
|
167
|
-
} else if (accessType !== "value") original = () => object[key];
|
|
168
|
-
else original = object[key];
|
|
169
|
-
const originalImplementation = ssr && original ? original() : original;
|
|
170
|
-
const originalType = typeof originalImplementation;
|
|
171
|
-
assert(originalType === "function" || accessType !== "value" && original == null, `vi.spyOn() can only spy on a function. Received ${originalType}.`);
|
|
172
|
-
if (isMockFunction(originalImplementation)) return originalImplementation;
|
|
173
|
-
const reassign = (cb) => {
|
|
174
|
-
const { value, ...desc } = originalDescriptor || {
|
|
175
|
-
configurable: true,
|
|
176
|
-
writable: true
|
|
177
|
-
};
|
|
178
|
-
if (accessType !== "value") delete desc.writable;
|
|
179
|
-
desc[accessType] = cb;
|
|
180
|
-
Object.defineProperty(object, key, desc);
|
|
181
|
-
};
|
|
182
|
-
const restore = () => {
|
|
183
|
-
if (originalDescriptorObject !== object) Reflect.deleteProperty(object, key);
|
|
184
|
-
else if (originalDescriptor && !original) Object.defineProperty(object, key, originalDescriptor);
|
|
185
|
-
else reassign(original);
|
|
186
|
-
};
|
|
187
|
-
const mock = createMockInstance({
|
|
188
|
-
restore,
|
|
189
|
-
originalImplementation,
|
|
190
|
-
resetToMockName: true
|
|
191
|
-
});
|
|
192
|
-
try {
|
|
193
|
-
reassign(ssr ? () => mock : mock);
|
|
194
|
-
} catch (error) {
|
|
195
|
-
if (error instanceof TypeError && Symbol.toStringTag && object[Symbol.toStringTag] === "Module" && (error.message.includes("Cannot redefine property") || error.message.includes("Cannot replace module namespace") || error.message.includes("can't redefine non-configurable property"))) throw new TypeError(`Cannot spy on export "${String(key)}". Module namespace is not configurable in ESM. See: https://vitest.dev/guide/browser/#limitations`, { cause: error });
|
|
196
|
-
throw error;
|
|
197
|
-
}
|
|
198
|
-
return mock;
|
|
199
|
-
}
|
|
200
|
-
function getDescriptor(obj, method) {
|
|
201
|
-
const objDescriptor = Object.getOwnPropertyDescriptor(obj, method);
|
|
202
|
-
if (objDescriptor) return [obj, objDescriptor];
|
|
203
|
-
let currentProto = Object.getPrototypeOf(obj);
|
|
204
|
-
while (currentProto !== null) {
|
|
205
|
-
const descriptor = Object.getOwnPropertyDescriptor(currentProto, method);
|
|
206
|
-
if (descriptor) return [currentProto, descriptor];
|
|
207
|
-
currentProto = Object.getPrototypeOf(currentProto);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
function assert(condition, message) {
|
|
211
|
-
if (!condition) throw new Error(message);
|
|
212
|
-
}
|
|
213
|
-
let invocationCallCounter = 1;
|
|
214
|
-
function createMock({ state, config, name: mockName, prototypeState, prototypeConfig, keepMembersImplementation, mockImplementation, prototypeMembers = [] }) {
|
|
215
|
-
const original = config.mockOriginal;
|
|
216
|
-
const pseudoOriginal = mockImplementation;
|
|
217
|
-
const name = mockName || original?.name || "Mock";
|
|
218
|
-
const namedObject = { [name]: (function(...args) {
|
|
219
|
-
registerCalls(args, state, prototypeState);
|
|
220
|
-
registerInvocationOrder(invocationCallCounter++, state, prototypeState);
|
|
221
|
-
const result = {
|
|
222
|
-
type: "incomplete",
|
|
223
|
-
value: void 0
|
|
224
|
-
};
|
|
225
|
-
const settledResult = {
|
|
226
|
-
type: "incomplete",
|
|
227
|
-
value: void 0
|
|
228
|
-
};
|
|
229
|
-
registerResult(result, state, prototypeState);
|
|
230
|
-
registerSettledResult(settledResult, state, prototypeState);
|
|
231
|
-
const context = new.target ? void 0 : this;
|
|
232
|
-
const [instanceIndex, instancePrototypeIndex] = registerInstance(context, state, prototypeState);
|
|
233
|
-
const [contextIndex, contextPrototypeIndex] = registerContext(context, state, prototypeState);
|
|
234
|
-
const implementation = config.onceMockImplementations.shift() || config.mockImplementation || prototypeConfig?.onceMockImplementations.shift() || prototypeConfig?.mockImplementation || original || function() {};
|
|
235
|
-
let returnValue;
|
|
236
|
-
let thrownValue;
|
|
237
|
-
let didThrow = false;
|
|
238
|
-
try {
|
|
239
|
-
if (new.target) {
|
|
240
|
-
returnValue = Reflect.construct(implementation, args, new.target);
|
|
241
|
-
for (const prop of prototypeMembers) {
|
|
242
|
-
const prototypeMock = returnValue[prop];
|
|
243
|
-
if (prototypeMock !== mock.prototype[prop]) continue;
|
|
244
|
-
const isMock = isMockFunction(prototypeMock);
|
|
245
|
-
const prototypeState = isMock ? prototypeMock.mock : void 0;
|
|
246
|
-
const prototypeConfig = isMock ? MOCK_CONFIGS.get(prototypeMock) : void 0;
|
|
247
|
-
returnValue[prop] = createMockInstance({
|
|
248
|
-
originalImplementation: keepMembersImplementation ? prototypeConfig?.mockOriginal : void 0,
|
|
249
|
-
prototypeState,
|
|
250
|
-
prototypeConfig,
|
|
251
|
-
keepMembersImplementation
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
} else returnValue = implementation.apply(this, args);
|
|
255
|
-
} catch (error) {
|
|
256
|
-
thrownValue = error;
|
|
257
|
-
didThrow = true;
|
|
258
|
-
if (error instanceof TypeError && error.message.includes("is not a constructor")) console.warn(`[vitest] The ${namedObject[name].getMockName()} mock did not use 'function' or 'class' in its implementation, see https://vitest.dev/api/vi#vi-spyon for examples.`);
|
|
259
|
-
throw error;
|
|
260
|
-
} finally {
|
|
261
|
-
if (didThrow) {
|
|
262
|
-
result.type = "throw";
|
|
263
|
-
result.value = thrownValue;
|
|
264
|
-
settledResult.type = "rejected";
|
|
265
|
-
settledResult.value = thrownValue;
|
|
266
|
-
} else {
|
|
267
|
-
result.type = "return";
|
|
268
|
-
result.value = returnValue;
|
|
269
|
-
if (new.target) {
|
|
270
|
-
state.contexts[contextIndex - 1] = returnValue;
|
|
271
|
-
state.instances[instanceIndex - 1] = returnValue;
|
|
272
|
-
if (contextPrototypeIndex != null && prototypeState) prototypeState.contexts[contextPrototypeIndex - 1] = returnValue;
|
|
273
|
-
if (instancePrototypeIndex != null && prototypeState) prototypeState.instances[instancePrototypeIndex - 1] = returnValue;
|
|
274
|
-
}
|
|
275
|
-
if (returnValue instanceof Promise) returnValue.then((settledValue) => {
|
|
276
|
-
settledResult.type = "fulfilled";
|
|
277
|
-
settledResult.value = settledValue;
|
|
278
|
-
}, (rejectedValue) => {
|
|
279
|
-
settledResult.type = "rejected";
|
|
280
|
-
settledResult.value = rejectedValue;
|
|
281
|
-
});
|
|
282
|
-
else {
|
|
283
|
-
settledResult.type = "fulfilled";
|
|
284
|
-
settledResult.value = returnValue;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
return returnValue;
|
|
289
|
-
}) };
|
|
290
|
-
const mock = namedObject[name];
|
|
291
|
-
const copyPropertiesFrom = original || pseudoOriginal;
|
|
292
|
-
if (copyPropertiesFrom) copyOriginalStaticProperties(mock, copyPropertiesFrom);
|
|
293
|
-
return mock;
|
|
294
|
-
}
|
|
295
|
-
function registerCalls(args, state, prototypeState) {
|
|
296
|
-
state.calls.push(args);
|
|
297
|
-
prototypeState?.calls.push(args);
|
|
298
|
-
}
|
|
299
|
-
function registerInvocationOrder(order, state, prototypeState) {
|
|
300
|
-
state.invocationCallOrder.push(order);
|
|
301
|
-
prototypeState?.invocationCallOrder.push(order);
|
|
302
|
-
}
|
|
303
|
-
function registerResult(result, state, prototypeState) {
|
|
304
|
-
state.results.push(result);
|
|
305
|
-
prototypeState?.results.push(result);
|
|
306
|
-
}
|
|
307
|
-
function registerSettledResult(result, state, prototypeState) {
|
|
308
|
-
state.settledResults.push(result);
|
|
309
|
-
prototypeState?.settledResults.push(result);
|
|
310
|
-
}
|
|
311
|
-
function registerInstance(instance, state, prototypeState) {
|
|
312
|
-
return [state.instances.push(instance), prototypeState?.instances.push(instance)];
|
|
313
|
-
}
|
|
314
|
-
function registerContext(context, state, prototypeState) {
|
|
315
|
-
return [state.contexts.push(context), prototypeState?.contexts.push(context)];
|
|
316
|
-
}
|
|
317
|
-
function copyOriginalStaticProperties(mock, original) {
|
|
318
|
-
const { properties, descriptors } = getAllProperties(original);
|
|
319
|
-
for (const key of properties) {
|
|
320
|
-
const descriptor = descriptors[key];
|
|
321
|
-
if (getDescriptor(mock, key)) continue;
|
|
322
|
-
Object.defineProperty(mock, key, descriptor);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
const ignoreProperties = /* @__PURE__ */ new Set([
|
|
326
|
-
"length",
|
|
327
|
-
"name",
|
|
328
|
-
"prototype",
|
|
329
|
-
Symbol.for("nodejs.util.promisify.custom")
|
|
330
|
-
]);
|
|
331
|
-
function getAllProperties(original) {
|
|
332
|
-
const properties = /* @__PURE__ */ new Set();
|
|
333
|
-
const descriptors = {};
|
|
334
|
-
while (original && original !== Object.prototype && original !== Function.prototype) {
|
|
335
|
-
const ownProperties = [...Object.getOwnPropertyNames(original), ...Object.getOwnPropertySymbols(original)];
|
|
336
|
-
for (const prop of ownProperties) {
|
|
337
|
-
if (descriptors[prop] || ignoreProperties.has(prop)) continue;
|
|
338
|
-
properties.add(prop);
|
|
339
|
-
descriptors[prop] = Object.getOwnPropertyDescriptor(original, prop);
|
|
340
|
-
}
|
|
341
|
-
original = Object.getPrototypeOf(original);
|
|
342
|
-
}
|
|
343
|
-
return {
|
|
344
|
-
properties,
|
|
345
|
-
descriptors
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
function getDefaultConfig(original) {
|
|
349
|
-
return {
|
|
350
|
-
mockImplementation: void 0,
|
|
351
|
-
mockOriginal: original,
|
|
352
|
-
mockName: "vi.fn()",
|
|
353
|
-
onceMockImplementations: []
|
|
354
|
-
};
|
|
355
|
-
}
|
|
356
|
-
function getDefaultState() {
|
|
357
|
-
const state = {
|
|
358
|
-
calls: [],
|
|
359
|
-
contexts: [],
|
|
360
|
-
instances: [],
|
|
361
|
-
invocationCallOrder: [],
|
|
362
|
-
settledResults: [],
|
|
363
|
-
results: [],
|
|
364
|
-
get lastCall() {
|
|
365
|
-
return state.calls.at(-1);
|
|
366
|
-
}
|
|
367
|
-
};
|
|
368
|
-
return state;
|
|
369
|
-
}
|
|
370
|
-
function restoreAllMocks() {
|
|
371
|
-
for (const restore of MOCK_RESTORE) restore();
|
|
372
|
-
MOCK_RESTORE.clear();
|
|
373
|
-
}
|
|
374
|
-
function clearAllMocks() {
|
|
375
|
-
REGISTERED_MOCKS.forEach((mock) => mock.mockClear());
|
|
376
|
-
}
|
|
377
|
-
function resetAllMocks() {
|
|
378
|
-
REGISTERED_MOCKS.forEach((mock) => mock.mockReset());
|
|
379
|
-
}
|
|
380
|
-
function throwConstructorError(shorthand) {
|
|
381
|
-
throw new TypeError(`Cannot use \`${shorthand}\` when called with \`new\`. Use \`mockImplementation\` with a \`class\` keyword instead. See https://vitest.dev/api/mock#class-support for more information.`);
|
|
382
|
-
}
|
|
383
|
-
//#endregion
|
|
384
|
-
export { clearAllMocks, createMockInstance, fn, isMockFunction, resetAllMocks, restoreAllMocks, spyOn };
|
|
385
|
-
|
|
386
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B2aXRlc3Qrc3B5QDQuMS4xMC9ub2RlX21vZHVsZXMvQHZpdGVzdC9zcHkvZGlzdC9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBpc01vY2tGdW5jdGlvbihmbikge1xuXHRyZXR1cm4gdHlwZW9mIGZuID09PSBcImZ1bmN0aW9uXCIgJiYgXCJfaXNNb2NrRnVuY3Rpb25cIiBpbiBmbiAmJiBmbi5faXNNb2NrRnVuY3Rpb24gPT09IHRydWU7XG59XG5jb25zdCBNT0NLX1JFU1RPUkUgPSBuZXcgU2V0KCk7XG4vLyBKZXN0IGtlZXBzIHRoZSBzdGF0ZSBpbiBhIHNlcGFyYXRlIFdlYWtNYXAgd2hpY2ggaXMgZ29vZCBmb3IgbWVtb3J5LFxuLy8gYnV0IGl0IG1ha2VzIHRoZSBzdGF0ZSBzbG93ZXIgdG8gYWNjZXNzIGFuZCByZXR1cm4gZGlmZmVyZW50IHZhbHVlc1xuLy8gaWYgeW91IHN0b3JlZCBpdCBiZWZvcmUgY2FsbGluZyBgbW9ja0NsZWFyYCB3aGVyZSBpdCB3aWxsIGJlIHJlY3JlYXRlZFxuY29uc3QgUkVHSVNURVJFRF9NT0NLUyA9IG5ldyBTZXQoKTtcbmNvbnN0IE1PQ0tfQ09ORklHUyA9IG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBjcmVhdGVNb2NrSW5zdGFuY2Uob3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IHsgb3JpZ2luYWxJbXBsZW1lbnRhdGlvbiwgcmVzdG9yZSwgbW9ja0ltcGxlbWVudGF0aW9uLCByZXNldFRvTW9ja0ltcGxlbWVudGF0aW9uLCByZXNldFRvTW9ja05hbWUgfSA9IG9wdGlvbnM7XG5cdGlmIChyZXN0b3JlKSB7XG5cdFx0TU9DS19SRVNUT1JFLmFkZChyZXN0b3JlKTtcblx0fVxuXHRjb25zdCBjb25maWcgPSBnZXREZWZhdWx0Q29uZmlnKG9yaWdpbmFsSW1wbGVtZW50YXRpb24pO1xuXHRjb25zdCBzdGF0ZSA9IGdldERlZmF1bHRTdGF0ZSgpO1xuXHRjb25zdCBtb2NrID0gY3JlYXRlTW9jayh7XG5cdFx0Y29uZmlnLFxuXHRcdHN0YXRlLFxuXHRcdC4uLm9wdGlvbnNcblx0fSk7XG5cdGNvbnN0IG1vY2tMZW5ndGggPSAobW9ja0ltcGxlbWVudGF0aW9uIHx8IG9yaWdpbmFsSW1wbGVtZW50YXRpb24pPy5sZW5ndGggPz8gMDtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vY2ssIFwibGVuZ3RoXCIsIHtcblx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR2YWx1ZTogbW9ja0xlbmd0aCxcblx0XHRjb25maWd1cmFibGU6IHRydWVcblx0fSk7XG5cdC8vIGluaGVyaXQgdGhlIGRlZmF1bHQgbmFtZSBzbyBpdCBhcHBlYXJzIGluIHNuYXBzaG90cyBhbmQgbG9nc1xuXHQvLyB0aGlzIGlzIHVzZWQgYnkgYHZpLnNweU9uKClgIGZvciBiZXR0ZXIgZGVidWdnaW5nLlxuXHQvLyB3aGVuIGB2aS5mbigpYCBpcyBjYWxsZWQsIHdlIGp1c3QgdXNlIHRoZSBkZWZhdWx0IHN0cmluZ1xuXHRpZiAocmVzZXRUb01vY2tOYW1lKSB7XG5cdFx0Y29uZmlnLm1vY2tOYW1lID0gbW9jay5uYW1lIHx8IFwidmkuZm4oKVwiO1xuXHR9XG5cdE1PQ0tfQ09ORklHUy5zZXQobW9jaywgY29uZmlnKTtcblx0UkVHSVNURVJFRF9NT0NLUy5hZGQobW9jayk7XG5cdG1vY2suX2lzTW9ja0Z1bmN0aW9uID0gdHJ1ZTtcblx0bW9jay5nZXRNb2NrSW1wbGVtZW50YXRpb24gPSAoKSA9PiB7XG5cdFx0Ly8gSmVzdCBvbmx5IHJldHVybnMgYGNvbmZpZy5tb2NrSW1wbGVtZW50YXRpb25gIGhlcmUsXG5cdFx0Ly8gYnV0IHdlIHRoaW5rIGl0IG1ha2VzIHNlbnNlIHRvIHJldHVybiB3aGF0IHRoZSBuZXh0IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkXG5cdFx0cmV0dXJuIGNvbmZpZy5vbmNlTW9ja0ltcGxlbWVudGF0aW9uc1swXSB8fCBjb25maWcubW9ja0ltcGxlbWVudGF0aW9uO1xuXHR9O1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9jaywgXCJtb2NrXCIsIHtcblx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0d3JpdGFibGU6IGZhbHNlLFxuXHRcdHZhbHVlOiBzdGF0ZVxuXHR9KTtcblx0bW9jay5tb2NrSW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiBtb2NrSW1wbGVtZW50YXRpb24oaW1wbGVtZW50YXRpb24pIHtcblx0XHRjb25maWcubW9ja0ltcGxlbWVudGF0aW9uID0gaW1wbGVtZW50YXRpb247XG5cdFx0cmV0dXJuIG1vY2s7XG5cdH07XG5cdG1vY2subW9ja0ltcGxlbWVudGF0aW9uT25jZSA9IGZ1bmN0aW9uIG1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoaW1wbGVtZW50YXRpb24pIHtcblx0XHRjb25maWcub25jZU1vY2tJbXBsZW1lbnRhdGlvbnMucHVzaChpbXBsZW1lbnRhdGlvbik7XG5cdFx0cmV0dXJuIG1vY2s7XG5cdH07XG5cdG1vY2sud2l0aEltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24gd2l0aEltcGxlbWVudGF0aW9uKGltcGxlbWVudGF0aW9uLCBjYWxsYmFjaykge1xuXHRcdGNvbnN0IHByZXZpb3VzSW1wbGVtZW50YXRpb24gPSBjb25maWcubW9ja0ltcGxlbWVudGF0aW9uO1xuXHRcdGNvbnN0IHByZXZpb3VzT25jZUltcGxlbWVudGF0aW9ucyA9IGNvbmZpZy5vbmNlTW9ja0ltcGxlbWVudGF0aW9ucztcblx0XHRjb25zdCByZXNldCA9ICgpID0+IHtcblx0XHRcdGNvbmZpZy5tb2NrSW1wbGVtZW50YXRpb24gPSBwcmV2aW91c0ltcGxlbWVudGF0aW9uO1xuXHRcdFx0Y29uZmlnLm9uY2VNb2NrSW1wbGVtZW50YXRpb25zID0gcHJldmlvdXNPbmNlSW1wbGVtZW50YXRpb25zO1xuXHRcdH07XG5cdFx0Y29uZmlnLm1vY2tJbXBsZW1lbnRhdGlvbiA9IGltcGxlbWVudGF0aW9uO1xuXHRcdGNvbmZpZy5vbmNlTW9ja0ltcGxlbWVudGF0aW9ucyA9IFtdO1xuXHRcdGNvbnN0IHJldHVyblZhbHVlID0gY2FsbGJhY2soKTtcblx0XHRpZiAodHlwZW9mIHJldHVyblZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZXR1cm5WYWx1ZT8udGhlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRyZXR1cm4gcmV0dXJuVmFsdWUudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJlc2V0KCk7XG5cdFx0XHRcdHJldHVybiBtb2NrO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc2V0KCk7XG5cdFx0fVxuXHRcdHJldHVybiBtb2NrO1xuXHR9O1xuXHRtb2NrLm1vY2tSZXR1cm5UaGlzID0gZnVuY3Rpb24gbW9ja1JldHVyblRoaXMoKSB7XG5cdFx0cmV0dXJuIG1vY2subW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSk7XG5cdH07XG5cdG1vY2subW9ja1JldHVyblZhbHVlID0gZnVuY3Rpb24gbW9ja1JldHVyblZhbHVlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIG1vY2subW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKG5ldy50YXJnZXQpIHtcblx0XHRcdFx0dGhyb3dDb25zdHJ1Y3RvckVycm9yKFwibW9ja1JldHVyblZhbHVlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH0pO1xuXHR9O1xuXHRtb2NrLm1vY2tSZXR1cm5WYWx1ZU9uY2UgPSBmdW5jdGlvbiBtb2NrUmV0dXJuVmFsdWVPbmNlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIG1vY2subW9ja0ltcGxlbWVudGF0aW9uT25jZShmdW5jdGlvbigpIHtcblx0XHRcdGlmIChuZXcudGFyZ2V0KSB7XG5cdFx0XHRcdHRocm93Q29uc3RydWN0b3JFcnJvcihcIm1vY2tSZXR1cm5WYWx1ZU9uY2VcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSk7XG5cdH07XG5cdG1vY2subW9ja1Rocm93ID0gZnVuY3Rpb24gbW9ja1Rocm93KHZhbHVlKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdHJldHVybiBtb2NrLm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbigpIHtcblx0XHRcdHRocm93IHZhbHVlO1xuXHRcdH0pO1xuXHR9O1xuXHRtb2NrLm1vY2tUaHJvd09uY2UgPSBmdW5jdGlvbiBtb2NrVGhyb3dPbmNlKHZhbHVlKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdHJldHVybiBtb2NrLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoZnVuY3Rpb24oKSB7XG5cdFx0XHR0aHJvdyB2YWx1ZTtcblx0XHR9KTtcblx0fTtcblx0bW9jay5tb2NrUmVzb2x2ZWRWYWx1ZSA9IGZ1bmN0aW9uIG1vY2tSZXNvbHZlZFZhbHVlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIG1vY2subW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKG5ldy50YXJnZXQpIHtcblx0XHRcdFx0dGhyb3dDb25zdHJ1Y3RvckVycm9yKFwibW9ja1Jlc29sdmVkVmFsdWVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcblx0XHR9KTtcblx0fTtcblx0bW9jay5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UgPSBmdW5jdGlvbiBtb2NrUmVzb2x2ZWRWYWx1ZU9uY2UodmFsdWUpIHtcblx0XHRyZXR1cm4gbW9jay5tb2NrSW1wbGVtZW50YXRpb25PbmNlKGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKG5ldy50YXJnZXQpIHtcblx0XHRcdFx0dGhyb3dDb25zdHJ1Y3RvckVycm9yKFwibW9ja1Jlc29sdmVkVmFsdWVPbmNlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG5cdFx0fSk7XG5cdH07XG5cdG1vY2subW9ja1JlamVjdGVkVmFsdWUgPSBmdW5jdGlvbiBtb2NrUmVqZWN0ZWRWYWx1ZSh2YWx1ZSkge1xuXHRcdHJldHVybiBtb2NrLm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbigpIHtcblx0XHRcdGlmIChuZXcudGFyZ2V0KSB7XG5cdFx0XHRcdHRocm93Q29uc3RydWN0b3JFcnJvcihcIm1vY2tSZWplY3RlZFZhbHVlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0XHR9KTtcblx0fTtcblx0bW9jay5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UgPSBmdW5jdGlvbiBtb2NrUmVqZWN0ZWRWYWx1ZU9uY2UodmFsdWUpIHtcblx0XHRyZXR1cm4gbW9jay5tb2NrSW1wbGVtZW50YXRpb25PbmNlKGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKG5ldy50YXJnZXQpIHtcblx0XHRcdFx0dGhyb3dDb25zdHJ1Y3RvckVycm9yKFwibW9ja1JlamVjdGVkVmFsdWVPbmNlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0XHR9KTtcblx0fTtcblx0bW9jay5tb2NrQ2xlYXIgPSBmdW5jdGlvbiBtb2NrQ2xlYXIoKSB7XG5cdFx0c3RhdGUuY2FsbHMgPSBbXTtcblx0XHRzdGF0ZS5jb250ZXh0cyA9IFtdO1xuXHRcdHN0YXRlLmluc3RhbmNlcyA9IFtdO1xuXHRcdHN0YXRlLmludm9jYXRpb25DYWxsT3JkZXIgPSBbXTtcblx0XHRzdGF0ZS5yZXN1bHRzID0gW107XG5cdFx0c3RhdGUuc2V0dGxlZFJlc3VsdHMgPSBbXTtcblx0XHRyZXR1cm4gbW9jaztcblx0fTtcblx0bW9jay5tb2NrUmVzZXQgPSBmdW5jdGlvbiBtb2NrUmVzZXQoKSB7XG5cdFx0bW9jay5tb2NrQ2xlYXIoKTtcblx0XHRjb25maWcubW9ja0ltcGxlbWVudGF0aW9uID0gcmVzZXRUb01vY2tJbXBsZW1lbnRhdGlvbiA/IG1vY2tJbXBsZW1lbnRhdGlvbiA6IHVuZGVmaW5lZDtcblx0XHRjb25maWcubW9ja05hbWUgPSByZXNldFRvTW9ja05hbWUgPyBtb2NrLm5hbWUgfHwgXCJ2aS5mbigpXCIgOiBcInZpLmZuKClcIjtcblx0XHRjb25maWcub25jZU1vY2tJbXBsZW1lbnRhdGlvbnMgPSBbXTtcblx0XHRyZXR1cm4gbW9jaztcblx0fTtcblx0bW9jay5tb2NrUmVzdG9yZSA9IGZ1bmN0aW9uIG1vY2tSZXN0b3JlKCkge1xuXHRcdG1vY2subW9ja1Jlc2V0KCk7XG5cdFx0cmV0dXJuIHJlc3RvcmU/LigpO1xuXHR9O1xuXHRtb2NrLm1vY2tOYW1lID0gZnVuY3Rpb24gbW9ja05hbWUobmFtZSkge1xuXHRcdGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0Y29uZmlnLm1vY2tOYW1lID0gbmFtZTtcblx0XHR9XG5cdFx0cmV0dXJuIG1vY2s7XG5cdH07XG5cdG1vY2suZ2V0TW9ja05hbWUgPSBmdW5jdGlvbiBnZXRNb2NrTmFtZSgpIHtcblx0XHRyZXR1cm4gY29uZmlnLm1vY2tOYW1lIHx8IFwidmkuZm4oKVwiO1xuXHR9O1xuXHRpZiAoU3ltYm9sLmRpc3Bvc2UpIHtcblx0XHRtb2NrW1N5bWJvbC5kaXNwb3NlXSA9ICgpID0+IG1vY2subW9ja1Jlc3RvcmUoKTtcblx0fVxuXHRpZiAobW9ja0ltcGxlbWVudGF0aW9uKSB7XG5cdFx0bW9jay5tb2NrSW1wbGVtZW50YXRpb24obW9ja0ltcGxlbWVudGF0aW9uKTtcblx0fVxuXHRyZXR1cm4gbW9jaztcbn1cbmZ1bmN0aW9uIGZuKG9yaWdpbmFsSW1wbGVtZW50YXRpb24pIHtcblx0Ly8gaWYgdGhlIGZ1bmN0aW9uIGlzIGFscmVhZHkgYSBtb2NrLCBqdXN0IHJldHVybiB0aGUgc2FtZSBmdW5jdGlvbixcblx0Ly8gc2ltaWxhcmx5IHRvIGhvdyB2aS5zcHlPbigpIHdvcmtzXG5cdGlmIChvcmlnaW5hbEltcGxlbWVudGF0aW9uICE9IG51bGwgJiYgaXNNb2NrRnVuY3Rpb24ob3JpZ2luYWxJbXBsZW1lbnRhdGlvbikpIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxJbXBsZW1lbnRhdGlvbjtcblx0fVxuXHRyZXR1cm4gY3JlYXRlTW9ja0luc3RhbmNlKHtcblx0XHRtb2NrSW1wbGVtZW50YXRpb246IG9yaWdpbmFsSW1wbGVtZW50YXRpb24sXG5cdFx0cmVzZXRUb01vY2tJbXBsZW1lbnRhdGlvbjogdHJ1ZVxuXHR9KTtcbn1cbmZ1bmN0aW9uIHNweU9uKG9iamVjdCwga2V5LCBhY2Nlc3Nvcikge1xuXHRhc3NlcnQob2JqZWN0ICE9IG51bGwsIFwiVGhlIHZpLnNweU9uKCkgZnVuY3Rpb24gY291bGQgbm90IGZpbmQgYW4gb2JqZWN0IHRvIHNweSB1cG9uLiBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBkZWZpbmVkLlwiKTtcblx0YXNzZXJ0KHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iamVjdCA9PT0gXCJmdW5jdGlvblwiLCBcIlZpdGVzdCBjYW5ub3Qgc3B5IG9uIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcblx0Y29uc3QgW29yaWdpbmFsRGVzY3JpcHRvck9iamVjdCwgb3JpZ2luYWxEZXNjcmlwdG9yXSA9IGdldERlc2NyaXB0b3Iob2JqZWN0LCBrZXkpIHx8IFtdO1xuXHRhc3NlcnQob3JpZ2luYWxEZXNjcmlwdG9yIHx8IGtleSBpbiBvYmplY3QsIGBUaGUgcHJvcGVydHkgXCIke1N0cmluZyhrZXkpfVwiIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSAke3R5cGVvZiBvYmplY3R9LmApO1xuXHRsZXQgYWNjZXNzVHlwZSA9IGFjY2Vzc29yIHx8IFwidmFsdWVcIjtcblx0bGV0IHNzciA9IGZhbHNlO1xuXHQvLyB2aXRlIHNzciBzdXBwb3J0IC0gYWN0dWFsIGZ1bmN0aW9uIGlzIHN0b3JlZCBpbnNpZGUgYSBnZXR0ZXJcblx0aWYgKGFjY2Vzc1R5cGUgPT09IFwidmFsdWVcIiAmJiBvcmlnaW5hbERlc2NyaXB0b3IgJiYgb3JpZ2luYWxEZXNjcmlwdG9yLnZhbHVlID09IG51bGwgJiYgb3JpZ2luYWxEZXNjcmlwdG9yLmdldCkge1xuXHRcdGFjY2Vzc1R5cGUgPSBcImdldFwiO1xuXHRcdHNzciA9IHRydWU7XG5cdH1cblx0bGV0IG9yaWdpbmFsO1xuXHRpZiAob3JpZ2luYWxEZXNjcmlwdG9yKSB7XG5cdFx0b3JpZ2luYWwgPSBvcmlnaW5hbERlc2NyaXB0b3JbYWNjZXNzVHlwZV07XG5cdFx0Ly8gd2VpcmQgUHJveHkgZWRnZSBjYXNlIHdoZXJlIGRlc2NyaXB0b3IncyB2YWx1ZSBpcyB1bmRlZmluZWQsXG5cdFx0Ly8gYnV0IHRoZXJlJ3Mgc3RpbGwgYSB2YWx1ZSBvbiB0aGUgb2JqZWN0IHdoZW4gY2FsbGVkXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3ZpdGVzdC1kZXYvdml0ZXN0L2lzc3Vlcy85NDM5XG5cdFx0aWYgKG9yaWdpbmFsID09IG51bGwgJiYgYWNjZXNzVHlwZSA9PT0gXCJ2YWx1ZVwiKSB7XG5cdFx0XHRvcmlnaW5hbCA9IG9iamVjdFtrZXldO1xuXHRcdH1cblx0fSBlbHNlIGlmIChhY2Nlc3NUeXBlICE9PSBcInZhbHVlXCIpIHtcblx0XHRvcmlnaW5hbCA9ICgpID0+IG9iamVjdFtrZXldO1xuXHR9IGVsc2Uge1xuXHRcdG9yaWdpbmFsID0gb2JqZWN0W2tleV07XG5cdH1cblx0Y29uc3Qgb3JpZ2luYWxJbXBsZW1lbnRhdGlvbiA9IHNzciAmJiBvcmlnaW5hbCA/IG9yaWdpbmFsKCkgOiBvcmlnaW5hbDtcblx0Y29uc3Qgb3JpZ2luYWxUeXBlID0gdHlwZW9mIG9yaWdpbmFsSW1wbGVtZW50YXRpb247XG5cdGFzc2VydChcblx0XHQvLyBhbGxvdyBvbmx5IGZ1bmN0aW9uc1xuXHRcdG9yaWdpbmFsVHlwZSA9PT0gXCJmdW5jdGlvblwiIHx8IGFjY2Vzc1R5cGUgIT09IFwidmFsdWVcIiAmJiBvcmlnaW5hbCA9PSBudWxsLFxuXHRcdGB2aS5zcHlPbigpIGNhbiBvbmx5IHNweSBvbiBhIGZ1bmN0aW9uLiBSZWNlaXZlZCAke29yaWdpbmFsVHlwZX0uYFxuXHQpO1xuXHRpZiAoaXNNb2NrRnVuY3Rpb24ob3JpZ2luYWxJbXBsZW1lbnRhdGlvbikpIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxJbXBsZW1lbnRhdGlvbjtcblx0fVxuXHRjb25zdCByZWFzc2lnbiA9IChjYikgPT4ge1xuXHRcdGNvbnN0IHsgdmFsdWUsIC4uLmRlc2MgfSA9IG9yaWdpbmFsRGVzY3JpcHRvciB8fCB7XG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH07XG5cdFx0aWYgKGFjY2Vzc1R5cGUgIT09IFwidmFsdWVcIikge1xuXHRcdFx0ZGVsZXRlIGRlc2Mud3JpdGFibGU7XG5cdFx0fVxuXHRcdGRlc2NbYWNjZXNzVHlwZV0gPSBjYjtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIGRlc2MpO1xuXHR9O1xuXHRjb25zdCByZXN0b3JlID0gKCkgPT4ge1xuXHRcdC8vIGlmIG1ldGhvZCBpcyBkZWZpbmVkIG9uIHRoZSBwcm90b3R5cGUsIHdlIGNhbiBqdXN0IHJlbW92ZSBpdCBmcm9tXG5cdFx0Ly8gdGhlIGN1cnJlbnQgb2JqZWN0IGluc3RlYWQgb2YgcmVkZWZpbmluZyBhIGNvcHkgb2YgaXRcblx0XHRpZiAob3JpZ2luYWxEZXNjcmlwdG9yT2JqZWN0ICE9PSBvYmplY3QpIHtcblx0XHRcdFJlZmxlY3QuZGVsZXRlUHJvcGVydHkob2JqZWN0LCBrZXkpO1xuXHRcdH0gZWxzZSBpZiAob3JpZ2luYWxEZXNjcmlwdG9yICYmICFvcmlnaW5hbCkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCBvcmlnaW5hbERlc2NyaXB0b3IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWFzc2lnbihvcmlnaW5hbCk7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBtb2NrID0gY3JlYXRlTW9ja0luc3RhbmNlKHtcblx0XHRyZXN0b3JlLFxuXHRcdG9yaWdpbmFsSW1wbGVtZW50YXRpb24sXG5cdFx0cmVzZXRUb01vY2tOYW1lOiB0cnVlXG5cdH0pO1xuXHR0cnkge1xuXHRcdHJlYXNzaWduKHNzciA/ICgpID0+IG1vY2sgOiBtb2NrKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRpZiAoZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3IgJiYgU3ltYm9sLnRvU3RyaW5nVGFnICYmIG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID09PSBcIk1vZHVsZVwiICYmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiQ2Fubm90IHJlZGVmaW5lIHByb3BlcnR5XCIpIHx8IGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJDYW5ub3QgcmVwbGFjZSBtb2R1bGUgbmFtZXNwYWNlXCIpIHx8IGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJjYW4ndCByZWRlZmluZSBub24tY29uZmlndXJhYmxlIHByb3BlcnR5XCIpKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgQ2Fubm90IHNweSBvbiBleHBvcnQgXCIke1N0cmluZyhrZXkpfVwiLiBNb2R1bGUgbmFtZXNwYWNlIGlzIG5vdCBjb25maWd1cmFibGUgaW4gRVNNLiBTZWU6IGh0dHBzOi8vdml0ZXN0LmRldi9ndWlkZS9icm93c2VyLyNsaW1pdGF0aW9uc2AsIHsgY2F1c2U6IGVycm9yIH0pO1xuXHRcdH1cblx0XHR0aHJvdyBlcnJvcjtcblx0fVxuXHRyZXR1cm4gbW9jaztcbn1cbmZ1bmN0aW9uIGdldERlc2NyaXB0b3Iob2JqLCBtZXRob2QpIHtcblx0Y29uc3Qgb2JqRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBtZXRob2QpO1xuXHRpZiAob2JqRGVzY3JpcHRvcikge1xuXHRcdHJldHVybiBbb2JqLCBvYmpEZXNjcmlwdG9yXTtcblx0fVxuXHRsZXQgY3VycmVudFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG5cdHdoaWxlIChjdXJyZW50UHJvdG8gIT09IG51bGwpIHtcblx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdXJyZW50UHJvdG8sIG1ldGhvZCk7XG5cdFx0aWYgKGRlc2NyaXB0b3IpIHtcblx0XHRcdHJldHVybiBbY3VycmVudFByb3RvLCBkZXNjcmlwdG9yXTtcblx0XHR9XG5cdFx0Y3VycmVudFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGN1cnJlbnRQcm90byk7XG5cdH1cbn1cbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHtcblx0aWYgKCFjb25kaXRpb24pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG5cdH1cbn1cbmxldCBpbnZvY2F0aW9uQ2FsbENvdW50ZXIgPSAxO1xuZnVuY3Rpb24gY3JlYXRlTW9jayh7IHN0YXRlLCBjb25maWcsIG5hbWU6IG1vY2tOYW1lLCBwcm90b3R5cGVTdGF0ZSwgcHJvdG90eXBlQ29uZmlnLCBrZWVwTWVtYmVyc0ltcGxlbWVudGF0aW9uLCBtb2NrSW1wbGVtZW50YXRpb24sIHByb3RvdHlwZU1lbWJlcnMgPSBbXSB9KSB7XG5cdGNvbnN0IG9yaWdpbmFsID0gY29uZmlnLm1vY2tPcmlnaW5hbDtcblx0Y29uc3QgcHNldWRvT3JpZ2luYWwgPSBtb2NrSW1wbGVtZW50YXRpb247XG5cdGNvbnN0IG5hbWUgPSBtb2NrTmFtZSB8fCBvcmlnaW5hbD8ubmFtZSB8fCBcIk1vY2tcIjtcblx0Y29uc3QgbmFtZWRPYmplY3QgPSB7IFtuYW1lXTogKGZ1bmN0aW9uKC4uLmFyZ3MpIHtcblx0XHRyZWdpc3RlckNhbGxzKGFyZ3MsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSk7XG5cdFx0cmVnaXN0ZXJJbnZvY2F0aW9uT3JkZXIoaW52b2NhdGlvbkNhbGxDb3VudGVyKyssIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSk7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge1xuXHRcdFx0dHlwZTogXCJpbmNvbXBsZXRlXCIsXG5cdFx0XHR2YWx1ZTogdW5kZWZpbmVkXG5cdFx0fTtcblx0XHRjb25zdCBzZXR0bGVkUmVzdWx0ID0ge1xuXHRcdFx0dHlwZTogXCJpbmNvbXBsZXRlXCIsXG5cdFx0XHR2YWx1ZTogdW5kZWZpbmVkXG5cdFx0fTtcblx0XHRyZWdpc3RlclJlc3VsdChyZXN1bHQsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSk7XG5cdFx0cmVnaXN0ZXJTZXR0bGVkUmVzdWx0KHNldHRsZWRSZXN1bHQsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSk7XG5cdFx0Y29uc3QgY29udGV4dCA9IG5ldy50YXJnZXQgPyB1bmRlZmluZWQgOiB0aGlzO1xuXHRcdGNvbnN0IFtpbnN0YW5jZUluZGV4LCBpbnN0YW5jZVByb3RvdHlwZUluZGV4XSA9IHJlZ2lzdGVySW5zdGFuY2UoY29udGV4dCwgc3RhdGUsIHByb3RvdHlwZVN0YXRlKTtcblx0XHRjb25zdCBbY29udGV4dEluZGV4LCBjb250ZXh0UHJvdG90eXBlSW5kZXhdID0gcmVnaXN0ZXJDb250ZXh0KGNvbnRleHQsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSk7XG5cdFx0Y29uc3QgaW1wbGVtZW50YXRpb24gPSBjb25maWcub25jZU1vY2tJbXBsZW1lbnRhdGlvbnMuc2hpZnQoKSB8fCBjb25maWcubW9ja0ltcGxlbWVudGF0aW9uIHx8IHByb3RvdHlwZUNvbmZpZz8ub25jZU1vY2tJbXBsZW1lbnRhdGlvbnMuc2hpZnQoKSB8fCBwcm90b3R5cGVDb25maWc/Lm1vY2tJbXBsZW1lbnRhdGlvbiB8fCBvcmlnaW5hbCB8fCBmdW5jdGlvbigpIHt9O1xuXHRcdGxldCByZXR1cm5WYWx1ZTtcblx0XHRsZXQgdGhyb3duVmFsdWU7XG5cdFx0bGV0IGRpZFRocm93ID0gZmFsc2U7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChuZXcudGFyZ2V0KSB7XG5cdFx0XHRcdHJldHVyblZhbHVlID0gUmVmbGVjdC5jb25zdHJ1Y3QoaW1wbGVtZW50YXRpb24sIGFyZ3MsIG5ldy50YXJnZXQpO1xuXHRcdFx0XHQvLyBqZXN0IGNhbGxzIHRoaXMgYmVmb3JlIHRoZSBpbXBsZW1lbnRhdGlvbiwgYnV0IHdlIGhhdmUgdG8gcmVzb2x2ZSB0aGlzIF9hZnRlcl9cblx0XHRcdFx0Ly8gYmVjYXVzZSB3ZSBjYW5ub3QgZG8gaXQgYmVmb3JlIHRoZSBgUmVmbGVjdC5jb25zdHJ1Y3RgIGNhbGxlZCB0aGUgY3VzdG9tIGltcGxlbWVudGF0aW9uLlxuXHRcdFx0XHQvLyBmb3J0dW5hdGVseSwgdGhlIGNvbnN0cnVjdG9yIGlzIGFsd2F5cyBhbiBlbXB0eSBmdW5jdGlvbiBiZWNhdXNlIGBwcm90b3R5cGVNZXRob2RzYFxuXHRcdFx0XHQvLyBhcmUgb25seSB1c2VkIGJ5IHRoZSBhdXRvbW9ja2VyLCBzbyB0aGlzIGRvZXNuJ3QgbWF0dGVyXG5cdFx0XHRcdGZvciAoY29uc3QgcHJvcCBvZiBwcm90b3R5cGVNZW1iZXJzKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvdG90eXBlTW9jayA9IHJldHVyblZhbHVlW3Byb3BdO1xuXHRcdFx0XHRcdC8vIHRoZSBtZXRob2Qgd2FzIG92ZXJyaWRkZW4gYmVjYXVzZSBvZiBpbmhlcml0YW5jZSwgaWdub3JlIGl0XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHRzL25vLXVzZS1iZWZvcmUtZGVmaW5lXG5cdFx0XHRcdFx0aWYgKHByb3RvdHlwZU1vY2sgIT09IG1vY2sucHJvdG90eXBlW3Byb3BdKSB7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgaXNNb2NrID0gaXNNb2NrRnVuY3Rpb24ocHJvdG90eXBlTW9jayk7XG5cdFx0XHRcdFx0Y29uc3QgcHJvdG90eXBlU3RhdGUgPSBpc01vY2sgPyBwcm90b3R5cGVNb2NrLm1vY2sgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0Y29uc3QgcHJvdG90eXBlQ29uZmlnID0gaXNNb2NrID8gTU9DS19DT05GSUdTLmdldChwcm90b3R5cGVNb2NrKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRyZXR1cm5WYWx1ZVtwcm9wXSA9IGNyZWF0ZU1vY2tJbnN0YW5jZSh7XG5cdFx0XHRcdFx0XHRvcmlnaW5hbEltcGxlbWVudGF0aW9uOiBrZWVwTWVtYmVyc0ltcGxlbWVudGF0aW9uID8gcHJvdG90eXBlQ29uZmlnPy5tb2NrT3JpZ2luYWwgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRwcm90b3R5cGVTdGF0ZSxcblx0XHRcdFx0XHRcdHByb3RvdHlwZUNvbmZpZyxcblx0XHRcdFx0XHRcdGtlZXBNZW1iZXJzSW1wbGVtZW50YXRpb25cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgPSBpbXBsZW1lbnRhdGlvbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0dGhyb3duVmFsdWUgPSBlcnJvcjtcblx0XHRcdGRpZFRocm93ID0gdHJ1ZTtcblx0XHRcdGlmIChlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiaXMgbm90IGEgY29uc3RydWN0b3JcIikpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKGBbdml0ZXN0XSBUaGUgJHtuYW1lZE9iamVjdFtuYW1lXS5nZXRNb2NrTmFtZSgpfSBtb2NrIGRpZCBub3QgdXNlICdmdW5jdGlvbicgb3IgJ2NsYXNzJyBpbiBpdHMgaW1wbGVtZW50YXRpb24sIHNlZSBodHRwczovL3ZpdGVzdC5kZXYvYXBpL3ZpI3ZpLXNweW9uIGZvciBleGFtcGxlcy5gKTtcblx0XHRcdH1cblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoZGlkVGhyb3cpIHtcblx0XHRcdFx0cmVzdWx0LnR5cGUgPSBcInRocm93XCI7XG5cdFx0XHRcdHJlc3VsdC52YWx1ZSA9IHRocm93blZhbHVlO1xuXHRcdFx0XHRzZXR0bGVkUmVzdWx0LnR5cGUgPSBcInJlamVjdGVkXCI7XG5cdFx0XHRcdHNldHRsZWRSZXN1bHQudmFsdWUgPSB0aHJvd25WYWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdC50eXBlID0gXCJyZXR1cm5cIjtcblx0XHRcdFx0cmVzdWx0LnZhbHVlID0gcmV0dXJuVmFsdWU7XG5cdFx0XHRcdGlmIChuZXcudGFyZ2V0KSB7XG5cdFx0XHRcdFx0c3RhdGUuY29udGV4dHNbY29udGV4dEluZGV4IC0gMV0gPSByZXR1cm5WYWx1ZTtcblx0XHRcdFx0XHRzdGF0ZS5pbnN0YW5jZXNbaW5zdGFuY2VJbmRleCAtIDFdID0gcmV0dXJuVmFsdWU7XG5cdFx0XHRcdFx0aWYgKGNvbnRleHRQcm90b3R5cGVJbmRleCAhPSBudWxsICYmIHByb3RvdHlwZVN0YXRlKSB7XG5cdFx0XHRcdFx0XHRwcm90b3R5cGVTdGF0ZS5jb250ZXh0c1tjb250ZXh0UHJvdG90eXBlSW5kZXggLSAxXSA9IHJldHVyblZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoaW5zdGFuY2VQcm90b3R5cGVJbmRleCAhPSBudWxsICYmIHByb3RvdHlwZVN0YXRlKSB7XG5cdFx0XHRcdFx0XHRwcm90b3R5cGVTdGF0ZS5pbnN0YW5jZXNbaW5zdGFuY2VQcm90b3R5cGVJbmRleCAtIDFdID0gcmV0dXJuVmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZXR1cm5WYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdFx0XHRyZXR1cm5WYWx1ZS50aGVuKChzZXR0bGVkVmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdHNldHRsZWRSZXN1bHQudHlwZSA9IFwiZnVsZmlsbGVkXCI7XG5cdFx0XHRcdFx0XHRzZXR0bGVkUmVzdWx0LnZhbHVlID0gc2V0dGxlZFZhbHVlO1xuXHRcdFx0XHRcdH0sIChyZWplY3RlZFZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRzZXR0bGVkUmVzdWx0LnR5cGUgPSBcInJlamVjdGVkXCI7XG5cdFx0XHRcdFx0XHRzZXR0bGVkUmVzdWx0LnZhbHVlID0gcmVqZWN0ZWRWYWx1ZTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzZXR0bGVkUmVzdWx0LnR5cGUgPSBcImZ1bGZpbGxlZFwiO1xuXHRcdFx0XHRcdHNldHRsZWRSZXN1bHQudmFsdWUgPSByZXR1cm5WYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmV0dXJuVmFsdWU7XG5cdH0pIH07XG5cdGNvbnN0IG1vY2sgPSBuYW1lZE9iamVjdFtuYW1lXTtcblx0Y29uc3QgY29weVByb3BlcnRpZXNGcm9tID0gb3JpZ2luYWwgfHwgcHNldWRvT3JpZ2luYWw7XG5cdGlmIChjb3B5UHJvcGVydGllc0Zyb20pIHtcblx0XHRjb3B5T3JpZ2luYWxTdGF0aWNQcm9wZXJ0aWVzKG1vY2ssIGNvcHlQcm9wZXJ0aWVzRnJvbSk7XG5cdH1cblx0cmV0dXJuIG1vY2s7XG59XG5mdW5jdGlvbiByZWdpc3RlckNhbGxzKGFyZ3MsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSkge1xuXHRzdGF0ZS5jYWxscy5wdXNoKGFyZ3MpO1xuXHRwcm90b3R5cGVTdGF0ZT8uY2FsbHMucHVzaChhcmdzKTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVySW52b2NhdGlvbk9yZGVyKG9yZGVyLCBzdGF0ZSwgcHJvdG90eXBlU3RhdGUpIHtcblx0c3RhdGUuaW52b2NhdGlvbkNhbGxPcmRlci5wdXNoKG9yZGVyKTtcblx0cHJvdG90eXBlU3RhdGU/Lmludm9jYXRpb25DYWxsT3JkZXIucHVzaChvcmRlcik7XG59XG5mdW5jdGlvbiByZWdpc3RlclJlc3VsdChyZXN1bHQsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSkge1xuXHRzdGF0ZS5yZXN1bHRzLnB1c2gocmVzdWx0KTtcblx0cHJvdG90eXBlU3RhdGU/LnJlc3VsdHMucHVzaChyZXN1bHQpO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJTZXR0bGVkUmVzdWx0KHJlc3VsdCwgc3RhdGUsIHByb3RvdHlwZVN0YXRlKSB7XG5cdHN0YXRlLnNldHRsZWRSZXN1bHRzLnB1c2gocmVzdWx0KTtcblx0cHJvdG90eXBlU3RhdGU/LnNldHRsZWRSZXN1bHRzLnB1c2gocmVzdWx0KTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVySW5zdGFuY2UoaW5zdGFuY2UsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSkge1xuXHRjb25zdCBpbnN0YW5jZUluZGV4ID0gc3RhdGUuaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuXHRjb25zdCBpbnN0YW5jZVByb3RvdHlwZUluZGV4ID0gcHJvdG90eXBlU3RhdGU/Lmluc3RhbmNlcy5wdXNoKGluc3RhbmNlKTtcblx0cmV0dXJuIFtpbnN0YW5jZUluZGV4LCBpbnN0YW5jZVByb3RvdHlwZUluZGV4XTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyQ29udGV4dChjb250ZXh0LCBzdGF0ZSwgcHJvdG90eXBlU3RhdGUpIHtcblx0Y29uc3QgY29udGV4dEluZGV4ID0gc3RhdGUuY29udGV4dHMucHVzaChjb250ZXh0KTtcblx0Y29uc3QgY29udGV4dFByb3RvdHlwZUluZGV4ID0gcHJvdG90eXBlU3RhdGU/LmNvbnRleHRzLnB1c2goY29udGV4dCk7XG5cdHJldHVybiBbY29udGV4dEluZGV4LCBjb250ZXh0UHJvdG90eXBlSW5kZXhdO1xufVxuZnVuY3Rpb24gY29weU9yaWdpbmFsU3RhdGljUHJvcGVydGllcyhtb2NrLCBvcmlnaW5hbCkge1xuXHRjb25zdCB7IHByb3BlcnRpZXMsIGRlc2NyaXB0b3JzIH0gPSBnZXRBbGxQcm9wZXJ0aWVzKG9yaWdpbmFsKTtcblx0Zm9yIChjb25zdCBrZXkgb2YgcHJvcGVydGllcykge1xuXHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yc1trZXldO1xuXHRcdGNvbnN0IG1vY2tEZXNjcmlwdG9yID0gZ2V0RGVzY3JpcHRvcihtb2NrLCBrZXkpO1xuXHRcdGlmIChtb2NrRGVzY3JpcHRvcikge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2NrLCBrZXksIGRlc2NyaXB0b3IpO1xuXHR9XG59XG5jb25zdCBpZ25vcmVQcm9wZXJ0aWVzID0gbmV3IFNldChbXG5cdFwibGVuZ3RoXCIsXG5cdFwibmFtZVwiLFxuXHRcInByb3RvdHlwZVwiLFxuXHRTeW1ib2wuZm9yKFwibm9kZWpzLnV0aWwucHJvbWlzaWZ5LmN1c3RvbVwiKVxuXSk7XG5mdW5jdGlvbiBnZXRBbGxQcm9wZXJ0aWVzKG9yaWdpbmFsKSB7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cdGNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cdHdoaWxlIChvcmlnaW5hbCAmJiBvcmlnaW5hbCAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBvcmlnaW5hbCAhPT0gRnVuY3Rpb24ucHJvdG90eXBlKSB7XG5cdFx0Y29uc3Qgb3duUHJvcGVydGllcyA9IFsuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvcmlnaW5hbCksIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob3JpZ2luYWwpXTtcblx0XHRmb3IgKGNvbnN0IHByb3Agb2Ygb3duUHJvcGVydGllcykge1xuXHRcdFx0aWYgKGRlc2NyaXB0b3JzW3Byb3BdIHx8IGlnbm9yZVByb3BlcnRpZXMuaGFzKHByb3ApKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0cHJvcGVydGllcy5hZGQocHJvcCk7XG5cdFx0XHRkZXNjcmlwdG9yc1twcm9wXSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob3JpZ2luYWwsIHByb3ApO1xuXHRcdH1cblx0XHRvcmlnaW5hbCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvcmlnaW5hbCk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRwcm9wZXJ0aWVzLFxuXHRcdGRlc2NyaXB0b3JzXG5cdH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0Q29uZmlnKG9yaWdpbmFsKSB7XG5cdHJldHVybiB7XG5cdFx0bW9ja0ltcGxlbWVudGF0aW9uOiB1bmRlZmluZWQsXG5cdFx0bW9ja09yaWdpbmFsOiBvcmlnaW5hbCxcblx0XHRtb2NrTmFtZTogXCJ2aS5mbigpXCIsXG5cdFx0b25jZU1vY2tJbXBsZW1lbnRhdGlvbnM6IFtdXG5cdH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUoKSB7XG5cdGNvbnN0IHN0YXRlID0ge1xuXHRcdGNhbGxzOiBbXSxcblx0XHRjb250ZXh0czogW10sXG5cdFx0aW5zdGFuY2VzOiBbXSxcblx0XHRpbnZvY2F0aW9uQ2FsbE9yZGVyOiBbXSxcblx0XHRzZXR0bGVkUmVzdWx0czogW10sXG5cdFx0cmVzdWx0czogW10sXG5cdFx0Z2V0IGxhc3RDYWxsKCkge1xuXHRcdFx0cmV0dXJuIHN0YXRlLmNhbGxzLmF0KC0xKTtcblx0XHR9XG5cdH07XG5cdHJldHVybiBzdGF0ZTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVBbGxNb2NrcygpIHtcblx0Zm9yIChjb25zdCByZXN0b3JlIG9mIE1PQ0tfUkVTVE9SRSkge1xuXHRcdHJlc3RvcmUoKTtcblx0fVxuXHRNT0NLX1JFU1RPUkUuY2xlYXIoKTtcbn1cbmZ1bmN0aW9uIGNsZWFyQWxsTW9ja3MoKSB7XG5cdFJFR0lTVEVSRURfTU9DS1MuZm9yRWFjaCgobW9jaykgPT4gbW9jay5tb2NrQ2xlYXIoKSk7XG59XG5mdW5jdGlvbiByZXNldEFsbE1vY2tzKCkge1xuXHRSRUdJU1RFUkVEX01PQ0tTLmZvckVhY2goKG1vY2spID0+IG1vY2subW9ja1Jlc2V0KCkpO1xufVxuZnVuY3Rpb24gdGhyb3dDb25zdHJ1Y3RvckVycm9yKHNob3J0aGFuZCkge1xuXHR0aHJvdyBuZXcgVHlwZUVycm9yKGBDYW5ub3QgdXNlIFxcYCR7c2hvcnRoYW5kfVxcYCB3aGVuIGNhbGxlZCB3aXRoIFxcYG5ld1xcYC4gVXNlIFxcYG1vY2tJbXBsZW1lbnRhdGlvblxcYCB3aXRoIGEgXFxgY2xhc3NcXGAga2V5d29yZCBpbnN0ZWFkLiBTZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2FwaS9tb2NrI2NsYXNzLXN1cHBvcnQgZm9yIG1vcmUgaW5mb3JtYXRpb24uYCk7XG59XG5cbmV4cG9ydCB7IGNsZWFyQWxsTW9ja3MsIGNyZWF0ZU1vY2tJbnN0YW5jZSwgZm4sIGlzTW9ja0Z1bmN0aW9uLCByZXNldEFsbE1vY2tzLCByZXN0b3JlQWxsTW9ja3MsIHNweU9uIH07XG4iXSwieF9nb29nbGVfaWdub3JlTGlzdCI6WzBdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVMsZUFBZSxJQUFJO0NBQzNCLE9BQU8sT0FBTyxPQUFPLGNBQWMscUJBQXFCLE1BQU0sR0FBRyxvQkFBb0I7QUFDdEY7QUFDQSxNQUFNLCtCQUFlLElBQUksSUFBSTtBQUk3QixNQUFNLG1DQUFtQixJQUFJLElBQUk7QUFDakMsTUFBTSwrQkFBZSxJQUFJLFFBQVE7QUFDakMsU0FBUyxtQkFBbUIsVUFBVSxDQUFDLEdBQUc7Q0FDekMsTUFBTSxFQUFFLHdCQUF3QixTQUFTLG9CQUFvQiwyQkFBMkIsb0JBQW9CO0NBQzVHLElBQUksU0FDSCxhQUFhLElBQUksT0FBTztDQUV6QixNQUFNLFNBQVMsaUJBQWlCLHNCQUFzQjtDQUN0RCxNQUFNLFFBQVEsZ0JBQWdCO0NBQzlCLE1BQU0sT0FBTyxXQUFXO0VBQ3ZCO0VBQ0E7RUFDQSxHQUFHO0NBQ0osQ0FBQztDQUNELE1BQU0sY0FBYyxzQkFBc0IsdUJBQUEsRUFBeUIsVUFBVTtDQUM3RSxPQUFPLGVBQWUsTUFBTSxVQUFVO0VBQ3JDLFVBQVU7RUFDVixZQUFZO0VBQ1osT0FBTztFQUNQLGNBQWM7Q0FDZixDQUFDO0NBSUQsSUFBSSxpQkFDSCxPQUFPLFdBQVcsS0FBSyxRQUFRO0NBRWhDLGFBQWEsSUFBSSxNQUFNLE1BQU07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
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
//#region ../../node_modules/.pnpm/@vitest+utils@4.1.10/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js
|
|
2
|
-
const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
|
|
3
|
-
function normalizeWindowsPath(input = "") {
|
|
4
|
-
if (!input) return input;
|
|
5
|
-
return input.replace(/\\/g, "/").replace(_DRIVE_LETTER_START_RE, (r) => r.toUpperCase());
|
|
6
|
-
}
|
|
7
|
-
const _UNC_REGEX = /^[/\\]{2}/;
|
|
8
|
-
const _IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/;
|
|
9
|
-
const _DRIVE_LETTER_RE = /^[A-Za-z]:$/;
|
|
10
|
-
const normalize = function(path) {
|
|
11
|
-
if (path.length === 0) return ".";
|
|
12
|
-
path = normalizeWindowsPath(path);
|
|
13
|
-
const isUNCPath = path.match(_UNC_REGEX);
|
|
14
|
-
const isPathAbsolute = isAbsolute(path);
|
|
15
|
-
const trailingSeparator = path[path.length - 1] === "/";
|
|
16
|
-
path = normalizeString(path, !isPathAbsolute);
|
|
17
|
-
if (path.length === 0) {
|
|
18
|
-
if (isPathAbsolute) return "/";
|
|
19
|
-
return trailingSeparator ? "./" : ".";
|
|
20
|
-
}
|
|
21
|
-
if (trailingSeparator) path += "/";
|
|
22
|
-
if (_DRIVE_LETTER_RE.test(path)) path += "/";
|
|
23
|
-
if (isUNCPath) {
|
|
24
|
-
if (!isPathAbsolute) return `//./${path}`;
|
|
25
|
-
return `//${path}`;
|
|
26
|
-
}
|
|
27
|
-
return isPathAbsolute && !isAbsolute(path) ? `/${path}` : path;
|
|
28
|
-
};
|
|
29
|
-
const join = function(...segments) {
|
|
30
|
-
let path = "";
|
|
31
|
-
for (const seg of segments) {
|
|
32
|
-
if (!seg) continue;
|
|
33
|
-
if (path.length > 0) {
|
|
34
|
-
const pathTrailing = path[path.length - 1] === "/";
|
|
35
|
-
const segLeading = seg[0] === "/";
|
|
36
|
-
if (pathTrailing && segLeading) path += seg.slice(1);
|
|
37
|
-
else path += pathTrailing || segLeading ? seg : `/${seg}`;
|
|
38
|
-
} else path += seg;
|
|
39
|
-
}
|
|
40
|
-
return normalize(path);
|
|
41
|
-
};
|
|
42
|
-
function cwd() {
|
|
43
|
-
if (typeof process !== "undefined" && typeof process.cwd === "function") return process.cwd().replace(/\\/g, "/");
|
|
44
|
-
return "/";
|
|
45
|
-
}
|
|
46
|
-
const resolve = function(...arguments_) {
|
|
47
|
-
arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument));
|
|
48
|
-
let resolvedPath = "";
|
|
49
|
-
let resolvedAbsolute = false;
|
|
50
|
-
for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {
|
|
51
|
-
const path = index >= 0 ? arguments_[index] : cwd();
|
|
52
|
-
if (!path || path.length === 0) continue;
|
|
53
|
-
resolvedPath = `${path}/${resolvedPath}`;
|
|
54
|
-
resolvedAbsolute = isAbsolute(path);
|
|
55
|
-
}
|
|
56
|
-
resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);
|
|
57
|
-
if (resolvedAbsolute && !isAbsolute(resolvedPath)) return `/${resolvedPath}`;
|
|
58
|
-
return resolvedPath.length > 0 ? resolvedPath : ".";
|
|
59
|
-
};
|
|
60
|
-
function normalizeString(path, allowAboveRoot) {
|
|
61
|
-
let res = "";
|
|
62
|
-
let lastSegmentLength = 0;
|
|
63
|
-
let lastSlash = -1;
|
|
64
|
-
let dots = 0;
|
|
65
|
-
let char = null;
|
|
66
|
-
for (let index = 0; index <= path.length; ++index) {
|
|
67
|
-
if (index < path.length) char = path[index];
|
|
68
|
-
else if (char === "/") break;
|
|
69
|
-
else char = "/";
|
|
70
|
-
if (char === "/") {
|
|
71
|
-
if (lastSlash === index - 1 || dots === 1);
|
|
72
|
-
else if (dots === 2) {
|
|
73
|
-
if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") {
|
|
74
|
-
if (res.length > 2) {
|
|
75
|
-
const lastSlashIndex = res.lastIndexOf("/");
|
|
76
|
-
if (lastSlashIndex === -1) {
|
|
77
|
-
res = "";
|
|
78
|
-
lastSegmentLength = 0;
|
|
79
|
-
} else {
|
|
80
|
-
res = res.slice(0, lastSlashIndex);
|
|
81
|
-
lastSegmentLength = res.length - 1 - res.lastIndexOf("/");
|
|
82
|
-
}
|
|
83
|
-
lastSlash = index;
|
|
84
|
-
dots = 0;
|
|
85
|
-
continue;
|
|
86
|
-
} else if (res.length > 0) {
|
|
87
|
-
res = "";
|
|
88
|
-
lastSegmentLength = 0;
|
|
89
|
-
lastSlash = index;
|
|
90
|
-
dots = 0;
|
|
91
|
-
continue;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
if (allowAboveRoot) {
|
|
95
|
-
res += res.length > 0 ? "/.." : "..";
|
|
96
|
-
lastSegmentLength = 2;
|
|
97
|
-
}
|
|
98
|
-
} else {
|
|
99
|
-
if (res.length > 0) res += `/${path.slice(lastSlash + 1, index)}`;
|
|
100
|
-
else res = path.slice(lastSlash + 1, index);
|
|
101
|
-
lastSegmentLength = index - lastSlash - 1;
|
|
102
|
-
}
|
|
103
|
-
lastSlash = index;
|
|
104
|
-
dots = 0;
|
|
105
|
-
} else if (char === "." && dots !== -1) ++dots;
|
|
106
|
-
else dots = -1;
|
|
107
|
-
}
|
|
108
|
-
return res;
|
|
109
|
-
}
|
|
110
|
-
const isAbsolute = function(p) {
|
|
111
|
-
return _IS_ABSOLUTE_RE.test(p);
|
|
112
|
-
};
|
|
113
|
-
const dirname = function(p) {
|
|
114
|
-
const segments = normalizeWindowsPath(p).replace(/\/$/, "").split("/").slice(0, -1);
|
|
115
|
-
if (segments.length === 1 && _DRIVE_LETTER_RE.test(segments[0])) segments[0] += "/";
|
|
116
|
-
return segments.join("/") || (isAbsolute(p) ? "/" : ".");
|
|
117
|
-
};
|
|
118
|
-
//#endregion
|
|
119
|
-
export { dirname as d, join as j, resolve as r };
|
|
120
|
-
|
|
121
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2h1bmstcGF0aGUuTS1lVGh0TlouanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B2aXRlc3QrdXRpbHNANC4xLjEwL25vZGVfbW9kdWxlcy9Adml0ZXN0L3V0aWxzL2Rpc3QvY2h1bmstcGF0aGUuTS1lVGh0TlouanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgX0RSSVZFX0xFVFRFUl9TVEFSVF9SRSA9IC9eW0EtWmEtel06XFwvLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZVdpbmRvd3NQYXRoKGlucHV0ID0gXCJcIikge1xuICBpZiAoIWlucHV0KSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKS5yZXBsYWNlKF9EUklWRV9MRVRURVJfU1RBUlRfUkUsIChyKSA9PiByLnRvVXBwZXJDYXNlKCkpO1xufVxuXG5jb25zdCBfVU5DX1JFR0VYID0gL15bL1xcXFxdezJ9LztcbmNvbnN0IF9JU19BQlNPTFVURV9SRSA9IC9eWy9cXFxcXSg/IVsvXFxcXF0pfF5bL1xcXFxdezJ9KD8hXFwuKXxeW0EtWmEtel06Wy9cXFxcXS87XG5jb25zdCBfRFJJVkVfTEVUVEVSX1JFID0gL15bQS1aYS16XTokLztcbmNvbnN0IG5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwiLlwiO1xuICB9XG4gIHBhdGggPSBub3JtYWxpemVXaW5kb3dzUGF0aChwYXRoKTtcbiAgY29uc3QgaXNVTkNQYXRoID0gcGF0aC5tYXRjaChfVU5DX1JFR0VYKTtcbiAgY29uc3QgaXNQYXRoQWJzb2x1dGUgPSBpc0Fic29sdXRlKHBhdGgpO1xuICBjb25zdCB0cmFpbGluZ1NlcGFyYXRvciA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXSA9PT0gXCIvXCI7XG4gIHBhdGggPSBub3JtYWxpemVTdHJpbmcocGF0aCwgIWlzUGF0aEFic29sdXRlKTtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGlzUGF0aEFic29sdXRlKSB7XG4gICAgICByZXR1cm4gXCIvXCI7XG4gICAgfVxuICAgIHJldHVybiB0cmFpbGluZ1NlcGFyYXRvciA/IFwiLi9cIiA6IFwiLlwiO1xuICB9XG4gIGlmICh0cmFpbGluZ1NlcGFyYXRvcikge1xuICAgIHBhdGggKz0gXCIvXCI7XG4gIH1cbiAgaWYgKF9EUklWRV9MRVRURVJfUkUudGVzdChwYXRoKSkge1xuICAgIHBhdGggKz0gXCIvXCI7XG4gIH1cbiAgaWYgKGlzVU5DUGF0aCkge1xuICAgIGlmICghaXNQYXRoQWJzb2x1dGUpIHtcbiAgICAgIHJldHVybiBgLy8uLyR7cGF0aH1gO1xuICAgIH1cbiAgICByZXR1cm4gYC8vJHtwYXRofWA7XG4gIH1cbiAgcmV0dXJuIGlzUGF0aEFic29sdXRlICYmICFpc0Fic29sdXRlKHBhdGgpID8gYC8ke3BhdGh9YCA6IHBhdGg7XG59O1xuY29uc3Qgam9pbiA9IGZ1bmN0aW9uKC4uLnNlZ21lbnRzKSB7XG4gIGxldCBwYXRoID0gXCJcIjtcbiAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudHMpIHtcbiAgICBpZiAoIXNlZykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChwYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBhdGhUcmFpbGluZyA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXSA9PT0gXCIvXCI7XG4gICAgICBjb25zdCBzZWdMZWFkaW5nID0gc2VnWzBdID09PSBcIi9cIjtcbiAgICAgIGNvbnN0IGJvdGggPSBwYXRoVHJhaWxpbmcgJiYgc2VnTGVhZGluZztcbiAgICAgIGlmIChib3RoKSB7XG4gICAgICAgIHBhdGggKz0gc2VnLnNsaWNlKDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0aCArPSBwYXRoVHJhaWxpbmcgfHwgc2VnTGVhZGluZyA/IHNlZyA6IGAvJHtzZWd9YDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCArPSBzZWc7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemUocGF0aCk7XG59O1xuZnVuY3Rpb24gY3dkKCkge1xuICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHByb2Nlc3MuY3dkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5jd2QoKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbiAgfVxuICByZXR1cm4gXCIvXCI7XG59XG5jb25zdCByZXNvbHZlID0gZnVuY3Rpb24oLi4uYXJndW1lbnRzXykge1xuICBhcmd1bWVudHNfID0gYXJndW1lbnRzXy5tYXAoKGFyZ3VtZW50KSA9PiBub3JtYWxpemVXaW5kb3dzUGF0aChhcmd1bWVudCkpO1xuICBsZXQgcmVzb2x2ZWRQYXRoID0gXCJcIjtcbiAgbGV0IHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTtcbiAgZm9yIChsZXQgaW5kZXggPSBhcmd1bWVudHNfLmxlbmd0aCAtIDE7IGluZGV4ID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpbmRleC0tKSB7XG4gICAgY29uc3QgcGF0aCA9IGluZGV4ID49IDAgPyBhcmd1bWVudHNfW2luZGV4XSA6IGN3ZCgpO1xuICAgIGlmICghcGF0aCB8fCBwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJlc29sdmVkUGF0aCA9IGAke3BhdGh9LyR7cmVzb2x2ZWRQYXRofWA7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGlzQWJzb2x1dGUocGF0aCk7XG4gIH1cbiAgcmVzb2x2ZWRQYXRoID0gbm9ybWFsaXplU3RyaW5nKHJlc29sdmVkUGF0aCwgIXJlc29sdmVkQWJzb2x1dGUpO1xuICBpZiAocmVzb2x2ZWRBYnNvbHV0ZSAmJiAhaXNBYnNvbHV0ZShyZXNvbHZlZFBhdGgpKSB7XG4gICAgcmV0dXJuIGAvJHtyZXNvbHZlZFBhdGh9YDtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWRQYXRoLmxlbmd0aCA+IDAgPyByZXNvbHZlZFBhdGggOiBcIi5cIjtcbn07XG5mdW5jdGlvbiBub3JtYWxpemVTdHJpbmcocGF0aCwgYWxsb3dBYm92ZVJvb3QpIHtcbiAgbGV0IHJlcyA9IFwiXCI7XG4gIGxldCBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gIGxldCBsYXN0U2xhc2ggPSAtMTtcbiAgbGV0IGRvdHMgPSAwO1xuICBsZXQgY2hhciA9IG51bGw7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPD0gcGF0aC5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPCBwYXRoLmxlbmd0aCkge1xuICAgICAgY2hhciA9IHBhdGhbaW5kZXhdO1xuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gXCIvXCIpIHtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFyID0gXCIvXCI7XG4gICAgfVxuICAgIGlmIChjaGFyID09PSBcIi9cIikge1xuICAgICAgaWYgKGxhc3RTbGFzaCA9PT0gaW5kZXggLSAxIHx8IGRvdHMgPT09IDEpIDsgZWxzZSBpZiAoZG90cyA9PT0gMikge1xuICAgICAgICBpZiAocmVzLmxlbmd0aCA8IDIgfHwgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHwgcmVzW3Jlcy5sZW5ndGggLSAxXSAhPT0gXCIuXCIgfHwgcmVzW3Jlcy5sZW5ndGggLSAyXSAhPT0gXCIuXCIpIHtcbiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RTbGFzaEluZGV4ID0gcmVzLmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgcmVzID0gXCJcIjtcbiAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzID0gcmVzLnNsaWNlKDAsIGxhc3RTbGFzaEluZGV4KTtcbiAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSByZXMubGVuZ3RoIC0gMSAtIHJlcy5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0U2xhc2ggPSBpbmRleDtcbiAgICAgICAgICAgIGRvdHMgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVzID0gXCJcIjtcbiAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGxhc3RTbGFzaCA9IGluZGV4O1xuICAgICAgICAgICAgZG90cyA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgICAgICAgcmVzICs9IHJlcy5sZW5ndGggPiAwID8gXCIvLi5cIiA6IFwiLi5cIjtcbiAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChyZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlcyArPSBgLyR7cGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpbmRleCl9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXMgPSBwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IGluZGV4IC0gbGFzdFNsYXNoIC0gMTtcbiAgICAgIH1cbiAgICAgIGxhc3RTbGFzaCA9IGluZGV4O1xuICAgICAgZG90cyA9IDA7XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSBcIi5cIiAmJiBkb3RzICE9PSAtMSkge1xuICAgICAgKytkb3RzO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb3RzID0gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5jb25zdCBpc0Fic29sdXRlID0gZnVuY3Rpb24ocCkge1xuICByZXR1cm4gX0lTX0FCU09MVVRFX1JFLnRlc3QocCk7XG59O1xuY29uc3QgZGlybmFtZSA9IGZ1bmN0aW9uKHApIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBub3JtYWxpemVXaW5kb3dzUGF0aChwKS5yZXBsYWNlKC9cXC8kLywgXCJcIikuc3BsaXQoXCIvXCIpLnNsaWNlKDAsIC0xKTtcbiAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMSAmJiBfRFJJVkVfTEVUVEVSX1JFLnRlc3Qoc2VnbWVudHNbMF0pKSB7XG4gICAgc2VnbWVudHNbMF0gKz0gXCIvXCI7XG4gIH1cbiAgcmV0dXJuIHNlZ21lbnRzLmpvaW4oXCIvXCIpIHx8IChpc0Fic29sdXRlKHApID8gXCIvXCIgOiBcIi5cIik7XG59O1xuXG5leHBvcnQgeyBkaXJuYW1lIGFzIGQsIGpvaW4gYXMgaiwgcmVzb2x2ZSBhcyByIH07XG4iXSwieF9nb29nbGVfaWdub3JlTGlzdCI6WzBdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQU0seUJBQXlCO0FBQy9CLFNBQVMscUJBQXFCLFFBQVEsSUFBSTtDQUN4QyxJQUFJLENBQUMsT0FDSCxPQUFPO0NBRVQsT0FBTyxNQUFNLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQyxRQUFRLHlCQUF5QixNQUFNLEVBQUUsWUFBWSxDQUFDO0FBQ3pGO0FBRUEsTUFBTSxhQUFhO0FBQ25CLE1BQU0sa0JBQWtCO0FBQ3hCLE1BQU0sbUJBQW1CO0FBQ3pCLE1BQU0sWUFBWSxTQUFTLE1BQU07Q0FDL0IsSUFBSSxLQUFLLFdBQVcsR0FDbEIsT0FBTztDQUVULE9BQU8scUJBQXFCLElBQUk7Q0FDaEMsTUFBTSxZQUFZLEtBQUssTUFBTSxVQUFVO0NBQ3ZDLE1BQU0saUJBQWlCLFdBQVcsSUFBSTtDQUN0QyxNQUFNLG9CQUFvQixLQUFLLEtB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
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
//#region ../../node_modules/.pnpm/@vitest+utils@4.1.10/node_modules/@vitest/utils/dist/constants.js
|
|
2
|
-
const KNOWN_ASSET_TYPES = [
|
|
3
|
-
"apng",
|
|
4
|
-
"bmp",
|
|
5
|
-
"png",
|
|
6
|
-
"jpe?g",
|
|
7
|
-
"jfif",
|
|
8
|
-
"pjpeg",
|
|
9
|
-
"pjp",
|
|
10
|
-
"gif",
|
|
11
|
-
"svg",
|
|
12
|
-
"ico",
|
|
13
|
-
"webp",
|
|
14
|
-
"avif",
|
|
15
|
-
"mp4",
|
|
16
|
-
"webm",
|
|
17
|
-
"ogg",
|
|
18
|
-
"mp3",
|
|
19
|
-
"wav",
|
|
20
|
-
"flac",
|
|
21
|
-
"aac",
|
|
22
|
-
"woff2?",
|
|
23
|
-
"eot",
|
|
24
|
-
"ttf",
|
|
25
|
-
"otf",
|
|
26
|
-
"webmanifest",
|
|
27
|
-
"pdf",
|
|
28
|
-
"txt"
|
|
29
|
-
];
|
|
30
|
-
const KNOWN_ASSET_RE = new RegExp(`\\.(${KNOWN_ASSET_TYPES.join("|")})$`);
|
|
31
|
-
const CSS_LANGS_RE = /\.(css|less|sass|scss|styl|stylus|pcss|postcss|sss)(?:$|\?)/;
|
|
32
|
-
/**
|
|
33
|
-
* Prefix for resolved Ids that are not valid browser import specifiers
|
|
34
|
-
*/
|
|
35
|
-
const VALID_ID_PREFIX = `/@id/`;
|
|
36
|
-
/**
|
|
37
|
-
* Plugins that use 'virtual modules' (e.g. for helper functions), prefix the
|
|
38
|
-
* module ID with `\0`, a convention from the rollup ecosystem.
|
|
39
|
-
* This prevents other plugins from trying to process the id (like node resolution),
|
|
40
|
-
* and core features like sourcemaps can use this info to differentiate between
|
|
41
|
-
* virtual modules and regular files.
|
|
42
|
-
* `\0` is not a permitted char in import URLs so we have to replace them during
|
|
43
|
-
* import analysis. The id will be decoded back before entering the plugins pipeline.
|
|
44
|
-
* These encoded virtual ids are also prefixed by the VALID_ID_PREFIX, so virtual
|
|
45
|
-
* modules in the browser end up encoded as `/@id/__x00__{id}`
|
|
46
|
-
*/
|
|
47
|
-
const NULL_BYTE_PLACEHOLDER = `__x00__`;
|
|
48
|
-
//#endregion
|
|
49
|
-
export { CSS_LANGS_RE, KNOWN_ASSET_RE, KNOWN_ASSET_TYPES, NULL_BYTE_PLACEHOLDER, VALID_ID_PREFIX };
|
|
50
|
-
|
|
51
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Adml0ZXN0K3V0aWxzQDQuMS4xMC9ub2RlX21vZHVsZXMvQHZpdGVzdC91dGlscy9kaXN0L2NvbnN0YW50cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPOiB0aGlzIGlzIGFsbCBjb3B5IHBhc3RlZCBmcm9tIFZpdGUgLSBjYW4gdGhleSBleHBvc2UgYSBtb2R1bGUgdGhhdCBleHBvcnRzIG9ubHkgY29uc3RhbnRzP1xuY29uc3QgS05PV05fQVNTRVRfVFlQRVMgPSBbXG5cdFwiYXBuZ1wiLFxuXHRcImJtcFwiLFxuXHRcInBuZ1wiLFxuXHRcImpwZT9nXCIsXG5cdFwiamZpZlwiLFxuXHRcInBqcGVnXCIsXG5cdFwicGpwXCIsXG5cdFwiZ2lmXCIsXG5cdFwic3ZnXCIsXG5cdFwiaWNvXCIsXG5cdFwid2VicFwiLFxuXHRcImF2aWZcIixcblx0XCJtcDRcIixcblx0XCJ3ZWJtXCIsXG5cdFwib2dnXCIsXG5cdFwibXAzXCIsXG5cdFwid2F2XCIsXG5cdFwiZmxhY1wiLFxuXHRcImFhY1wiLFxuXHRcIndvZmYyP1wiLFxuXHRcImVvdFwiLFxuXHRcInR0ZlwiLFxuXHRcIm90ZlwiLFxuXHRcIndlYm1hbmlmZXN0XCIsXG5cdFwicGRmXCIsXG5cdFwidHh0XCJcbl07XG5jb25zdCBLTk9XTl9BU1NFVF9SRSA9IG5ldyBSZWdFeHAoYFxcXFwuKCR7S05PV05fQVNTRVRfVFlQRVMuam9pbihcInxcIil9KSRgKTtcbmNvbnN0IENTU19MQU5HU19SRSA9IC9cXC4oY3NzfGxlc3N8c2Fzc3xzY3NzfHN0eWx8c3R5bHVzfHBjc3N8cG9zdGNzc3xzc3MpKD86JHxcXD8pLztcbi8qKlxuKiBQcmVmaXggZm9yIHJlc29sdmVkIElkcyB0aGF0IGFyZSBub3QgdmFsaWQgYnJvd3NlciBpbXBvcnQgc3BlY2lmaWVyc1xuKi9cbmNvbnN0IFZBTElEX0lEX1BSRUZJWCA9IGAvQGlkL2A7XG4vKipcbiogUGx1Z2lucyB0aGF0IHVzZSAndmlydHVhbCBtb2R1bGVzJyAoZS5nLiBmb3IgaGVscGVyIGZ1bmN0aW9ucyksIHByZWZpeCB0aGVcbiogbW9kdWxlIElEIHdpdGggYFxcMGAsIGEgY29udmVudGlvbiBmcm9tIHRoZSByb2xsdXAgZWNvc3lzdGVtLlxuKiBUaGlzIHByZXZlbnRzIG90aGVyIHBsdWdpbnMgZnJvbSB0cnlpbmcgdG8gcHJvY2VzcyB0aGUgaWQgKGxpa2Ugbm9kZSByZXNvbHV0aW9uKSxcbiogYW5kIGNvcmUgZmVhdHVyZXMgbGlrZSBzb3VyY2VtYXBzIGNhbiB1c2UgdGhpcyBpbmZvIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlblxuKiB2aXJ0dWFsIG1vZHVsZXMgYW5kIHJlZ3VsYXIgZmlsZXMuXG4qIGBcXDBgIGlzIG5vdCBhIHBlcm1pdHRlZCBjaGFyIGluIGltcG9ydCBVUkxzIHNvIHdlIGhhdmUgdG8gcmVwbGFjZSB0aGVtIGR1cmluZ1xuKiBpbXBvcnQgYW5hbHlzaXMuIFRoZSBpZCB3aWxsIGJlIGRlY29kZWQgYmFjayBiZWZvcmUgZW50ZXJpbmcgdGhlIHBsdWdpbnMgcGlwZWxpbmUuXG4qIFRoZXNlIGVuY29kZWQgdmlydHVhbCBpZHMgYXJlIGFsc28gcHJlZml4ZWQgYnkgdGhlIFZBTElEX0lEX1BSRUZJWCwgc28gdmlydHVhbFxuKiBtb2R1bGVzIGluIHRoZSBicm93c2VyIGVuZCB1cCBlbmNvZGVkIGFzIGAvQGlkL19feDAwX197aWR9YFxuKi9cbmNvbnN0IE5VTExfQllURV9QTEFDRUhPTERFUiA9IGBfX3gwMF9fYDtcblxuZXhwb3J0IHsgQ1NTX0xBTkdTX1JFLCBLTk9XTl9BU1NFVF9SRSwgS05PV05fQVNTRVRfVFlQRVMsIE5VTExfQllURV9QTEFDRUhPTERFUiwgVkFMSURfSURfUFJFRklYIH07XG4iXSwieF9nb29nbGVfaWdub3JlTGlzdCI6WzBdLCJtYXBwaW5ncyI6IjtBQUNBLE1BQU0sb0JBQW9CO0NBQ3pCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDRDtBQUNBLE1BQU0saUJBQWlCLElBQUksT0FBTyxPQUFPLGtCQUFrQixLQUFLLEdBQUcsRUFBRSxHQUFHO0FBQ3hFLE1BQU0sZUFBZTs7OztBQUlyQixNQUFNLGtCQUFrQjs7Ozs7Ozs7Ozs7O0FBWXhCLE1BQU0sd0JBQXdCIn0=
|