gitx.do 0.1.1 → 0.1.3
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/README.md +40 -353
- package/dist/do/logger.d.ts +50 -0
- package/dist/do/logger.d.ts.map +1 -0
- package/dist/do/logger.js +122 -0
- package/dist/do/logger.js.map +1 -0
- package/dist/{durable-object → do}/schema.d.ts +3 -3
- package/dist/do/schema.d.ts.map +1 -0
- package/dist/{durable-object → do}/schema.js +4 -3
- package/dist/do/schema.js.map +1 -0
- package/dist/do/types.d.ts +267 -0
- package/dist/do/types.d.ts.map +1 -0
- package/dist/do/types.js +62 -0
- package/dist/do/types.js.map +1 -0
- package/dist/index.d.ts +15 -469
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -481
- package/dist/index.js.map +1 -1
- package/dist/mcp/auth.d.ts +77 -0
- package/dist/mcp/auth.d.ts.map +1 -0
- package/dist/mcp/auth.js +278 -0
- package/dist/mcp/auth.js.map +1 -0
- package/dist/mcp/index.d.ts +13 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +19 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +200 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +275 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tool-registry.d.ts +47 -0
- package/dist/mcp/tool-registry.d.ts.map +1 -0
- package/dist/mcp/tool-registry.js +284 -0
- package/dist/mcp/tool-registry.js.map +1 -0
- package/dist/mcp/tools.d.ts +103 -515
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +676 -3087
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/types.d.ts +124 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +9 -0
- package/dist/mcp/types.js.map +1 -0
- package/package.json +19 -21
- package/dist/cli/commands/add.d.ts +0 -176
- package/dist/cli/commands/add.d.ts.map +0 -1
- package/dist/cli/commands/add.js +0 -979
- package/dist/cli/commands/add.js.map +0 -1
- package/dist/cli/commands/blame.d.ts +0 -259
- package/dist/cli/commands/blame.d.ts.map +0 -1
- package/dist/cli/commands/blame.js +0 -609
- package/dist/cli/commands/blame.js.map +0 -1
- package/dist/cli/commands/branch.d.ts +0 -249
- package/dist/cli/commands/branch.d.ts.map +0 -1
- package/dist/cli/commands/branch.js +0 -693
- package/dist/cli/commands/branch.js.map +0 -1
- package/dist/cli/commands/checkout.d.ts +0 -73
- package/dist/cli/commands/checkout.d.ts.map +0 -1
- package/dist/cli/commands/checkout.js +0 -725
- package/dist/cli/commands/checkout.js.map +0 -1
- package/dist/cli/commands/commit.d.ts +0 -182
- package/dist/cli/commands/commit.d.ts.map +0 -1
- package/dist/cli/commands/commit.js +0 -457
- package/dist/cli/commands/commit.js.map +0 -1
- package/dist/cli/commands/diff.d.ts +0 -464
- package/dist/cli/commands/diff.d.ts.map +0 -1
- package/dist/cli/commands/diff.js +0 -959
- package/dist/cli/commands/diff.js.map +0 -1
- package/dist/cli/commands/log.d.ts +0 -239
- package/dist/cli/commands/log.d.ts.map +0 -1
- package/dist/cli/commands/log.js +0 -535
- package/dist/cli/commands/log.js.map +0 -1
- package/dist/cli/commands/merge.d.ts +0 -106
- package/dist/cli/commands/merge.d.ts.map +0 -1
- package/dist/cli/commands/merge.js +0 -852
- package/dist/cli/commands/merge.js.map +0 -1
- package/dist/cli/commands/review.d.ts +0 -457
- package/dist/cli/commands/review.d.ts.map +0 -1
- package/dist/cli/commands/review.js +0 -558
- package/dist/cli/commands/review.js.map +0 -1
- package/dist/cli/commands/stash.d.ts +0 -157
- package/dist/cli/commands/stash.d.ts.map +0 -1
- package/dist/cli/commands/stash.js +0 -655
- package/dist/cli/commands/stash.js.map +0 -1
- package/dist/cli/commands/status.d.ts +0 -269
- package/dist/cli/commands/status.d.ts.map +0 -1
- package/dist/cli/commands/status.js +0 -492
- package/dist/cli/commands/status.js.map +0 -1
- package/dist/cli/commands/web.d.ts +0 -199
- package/dist/cli/commands/web.d.ts.map +0 -1
- package/dist/cli/commands/web.js +0 -697
- package/dist/cli/commands/web.js.map +0 -1
- package/dist/cli/fs-adapter.d.ts +0 -656
- package/dist/cli/fs-adapter.d.ts.map +0 -1
- package/dist/cli/fs-adapter.js +0 -1177
- package/dist/cli/fs-adapter.js.map +0 -1
- package/dist/cli/fsx-cli-adapter.d.ts +0 -359
- package/dist/cli/fsx-cli-adapter.d.ts.map +0 -1
- package/dist/cli/fsx-cli-adapter.js +0 -619
- package/dist/cli/fsx-cli-adapter.js.map +0 -1
- package/dist/cli/index.d.ts +0 -387
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -579
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/ui/components/DiffView.d.ts +0 -12
- package/dist/cli/ui/components/DiffView.d.ts.map +0 -1
- package/dist/cli/ui/components/DiffView.js +0 -11
- package/dist/cli/ui/components/DiffView.js.map +0 -1
- package/dist/cli/ui/components/ErrorDisplay.d.ts +0 -10
- package/dist/cli/ui/components/ErrorDisplay.d.ts.map +0 -1
- package/dist/cli/ui/components/ErrorDisplay.js +0 -11
- package/dist/cli/ui/components/ErrorDisplay.js.map +0 -1
- package/dist/cli/ui/components/FuzzySearch.d.ts +0 -15
- package/dist/cli/ui/components/FuzzySearch.d.ts.map +0 -1
- package/dist/cli/ui/components/FuzzySearch.js +0 -12
- package/dist/cli/ui/components/FuzzySearch.js.map +0 -1
- package/dist/cli/ui/components/LoadingSpinner.d.ts +0 -10
- package/dist/cli/ui/components/LoadingSpinner.d.ts.map +0 -1
- package/dist/cli/ui/components/LoadingSpinner.js +0 -10
- package/dist/cli/ui/components/LoadingSpinner.js.map +0 -1
- package/dist/cli/ui/components/NavigationList.d.ts +0 -14
- package/dist/cli/ui/components/NavigationList.d.ts.map +0 -1
- package/dist/cli/ui/components/NavigationList.js +0 -11
- package/dist/cli/ui/components/NavigationList.js.map +0 -1
- package/dist/cli/ui/components/ScrollableContent.d.ts +0 -13
- package/dist/cli/ui/components/ScrollableContent.d.ts.map +0 -1
- package/dist/cli/ui/components/ScrollableContent.js +0 -11
- package/dist/cli/ui/components/ScrollableContent.js.map +0 -1
- package/dist/cli/ui/components/index.d.ts +0 -7
- package/dist/cli/ui/components/index.d.ts.map +0 -1
- package/dist/cli/ui/components/index.js +0 -9
- package/dist/cli/ui/components/index.js.map +0 -1
- package/dist/cli/ui/terminal-ui.d.ts +0 -85
- package/dist/cli/ui/terminal-ui.d.ts.map +0 -1
- package/dist/cli/ui/terminal-ui.js +0 -121
- package/dist/cli/ui/terminal-ui.js.map +0 -1
- package/dist/do/BashModule.d.ts +0 -871
- package/dist/do/BashModule.d.ts.map +0 -1
- package/dist/do/BashModule.js +0 -1143
- package/dist/do/BashModule.js.map +0 -1
- package/dist/do/FsModule.d.ts +0 -612
- package/dist/do/FsModule.d.ts.map +0 -1
- package/dist/do/FsModule.js +0 -1120
- package/dist/do/FsModule.js.map +0 -1
- package/dist/do/GitModule.d.ts +0 -635
- package/dist/do/GitModule.d.ts.map +0 -1
- package/dist/do/GitModule.js +0 -784
- package/dist/do/GitModule.js.map +0 -1
- package/dist/do/GitRepoDO.d.ts +0 -281
- package/dist/do/GitRepoDO.d.ts.map +0 -1
- package/dist/do/GitRepoDO.js +0 -479
- package/dist/do/GitRepoDO.js.map +0 -1
- package/dist/do/bash-ast.d.ts +0 -246
- package/dist/do/bash-ast.d.ts.map +0 -1
- package/dist/do/bash-ast.js +0 -888
- package/dist/do/bash-ast.js.map +0 -1
- package/dist/do/container-executor.d.ts +0 -491
- package/dist/do/container-executor.d.ts.map +0 -1
- package/dist/do/container-executor.js +0 -731
- package/dist/do/container-executor.js.map +0 -1
- package/dist/do/index.d.ts +0 -53
- package/dist/do/index.d.ts.map +0 -1
- package/dist/do/index.js +0 -91
- package/dist/do/index.js.map +0 -1
- package/dist/do/tiered-storage.d.ts +0 -403
- package/dist/do/tiered-storage.d.ts.map +0 -1
- package/dist/do/tiered-storage.js +0 -689
- package/dist/do/tiered-storage.js.map +0 -1
- package/dist/do/withBash.d.ts +0 -231
- package/dist/do/withBash.d.ts.map +0 -1
- package/dist/do/withBash.js +0 -244
- package/dist/do/withBash.js.map +0 -1
- package/dist/do/withFs.d.ts +0 -237
- package/dist/do/withFs.d.ts.map +0 -1
- package/dist/do/withFs.js +0 -387
- package/dist/do/withFs.js.map +0 -1
- package/dist/do/withGit.d.ts +0 -180
- package/dist/do/withGit.d.ts.map +0 -1
- package/dist/do/withGit.js +0 -271
- package/dist/do/withGit.js.map +0 -1
- package/dist/durable-object/object-store.d.ts +0 -633
- package/dist/durable-object/object-store.d.ts.map +0 -1
- package/dist/durable-object/object-store.js +0 -1164
- package/dist/durable-object/object-store.js.map +0 -1
- package/dist/durable-object/schema.d.ts.map +0 -1
- package/dist/durable-object/schema.js.map +0 -1
- package/dist/durable-object/wal.d.ts +0 -416
- package/dist/durable-object/wal.d.ts.map +0 -1
- package/dist/durable-object/wal.js +0 -445
- package/dist/durable-object/wal.js.map +0 -1
- package/dist/mcp/adapter.d.ts +0 -772
- package/dist/mcp/adapter.d.ts.map +0 -1
- package/dist/mcp/adapter.js +0 -895
- package/dist/mcp/adapter.js.map +0 -1
- package/dist/mcp/sandbox/miniflare-evaluator.d.ts +0 -22
- package/dist/mcp/sandbox/miniflare-evaluator.d.ts.map +0 -1
- package/dist/mcp/sandbox/miniflare-evaluator.js +0 -140
- package/dist/mcp/sandbox/miniflare-evaluator.js.map +0 -1
- package/dist/mcp/sandbox/object-store-proxy.d.ts +0 -32
- package/dist/mcp/sandbox/object-store-proxy.d.ts.map +0 -1
- package/dist/mcp/sandbox/object-store-proxy.js +0 -30
- package/dist/mcp/sandbox/object-store-proxy.js.map +0 -1
- package/dist/mcp/sandbox/template.d.ts +0 -17
- package/dist/mcp/sandbox/template.d.ts.map +0 -1
- package/dist/mcp/sandbox/template.js +0 -71
- package/dist/mcp/sandbox/template.js.map +0 -1
- package/dist/mcp/sandbox.d.ts +0 -764
- package/dist/mcp/sandbox.d.ts.map +0 -1
- package/dist/mcp/sandbox.js +0 -1362
- package/dist/mcp/sandbox.js.map +0 -1
- package/dist/mcp/sdk-adapter.d.ts +0 -835
- package/dist/mcp/sdk-adapter.d.ts.map +0 -1
- package/dist/mcp/sdk-adapter.js +0 -974
- package/dist/mcp/sdk-adapter.js.map +0 -1
- package/dist/mcp/tools/do.d.ts +0 -32
- package/dist/mcp/tools/do.d.ts.map +0 -1
- package/dist/mcp/tools/do.js +0 -117
- package/dist/mcp/tools/do.js.map +0 -1
- package/dist/ops/blame.d.ts +0 -551
- package/dist/ops/blame.d.ts.map +0 -1
- package/dist/ops/blame.js +0 -1037
- package/dist/ops/blame.js.map +0 -1
- package/dist/ops/branch.d.ts +0 -766
- package/dist/ops/branch.d.ts.map +0 -1
- package/dist/ops/branch.js +0 -950
- package/dist/ops/branch.js.map +0 -1
- package/dist/ops/commit-traversal.d.ts +0 -349
- package/dist/ops/commit-traversal.d.ts.map +0 -1
- package/dist/ops/commit-traversal.js +0 -821
- package/dist/ops/commit-traversal.js.map +0 -1
- package/dist/ops/commit.d.ts +0 -555
- package/dist/ops/commit.d.ts.map +0 -1
- package/dist/ops/commit.js +0 -826
- package/dist/ops/commit.js.map +0 -1
- package/dist/ops/merge-base.d.ts +0 -397
- package/dist/ops/merge-base.d.ts.map +0 -1
- package/dist/ops/merge-base.js +0 -691
- package/dist/ops/merge-base.js.map +0 -1
- package/dist/ops/merge.d.ts +0 -855
- package/dist/ops/merge.d.ts.map +0 -1
- package/dist/ops/merge.js +0 -1551
- package/dist/ops/merge.js.map +0 -1
- package/dist/ops/tag.d.ts +0 -247
- package/dist/ops/tag.d.ts.map +0 -1
- package/dist/ops/tag.js +0 -649
- package/dist/ops/tag.js.map +0 -1
- package/dist/ops/tree-builder.d.ts +0 -178
- package/dist/ops/tree-builder.d.ts.map +0 -1
- package/dist/ops/tree-builder.js +0 -271
- package/dist/ops/tree-builder.js.map +0 -1
- package/dist/ops/tree-diff.d.ts +0 -291
- package/dist/ops/tree-diff.d.ts.map +0 -1
- package/dist/ops/tree-diff.js +0 -705
- package/dist/ops/tree-diff.js.map +0 -1
- package/dist/pack/delta.d.ts +0 -248
- package/dist/pack/delta.d.ts.map +0 -1
- package/dist/pack/delta.js +0 -740
- package/dist/pack/delta.js.map +0 -1
- package/dist/pack/format.d.ts +0 -446
- package/dist/pack/format.d.ts.map +0 -1
- package/dist/pack/format.js +0 -572
- package/dist/pack/format.js.map +0 -1
- package/dist/pack/full-generation.d.ts +0 -612
- package/dist/pack/full-generation.d.ts.map +0 -1
- package/dist/pack/full-generation.js +0 -1378
- package/dist/pack/full-generation.js.map +0 -1
- package/dist/pack/generation.d.ts +0 -441
- package/dist/pack/generation.d.ts.map +0 -1
- package/dist/pack/generation.js +0 -707
- package/dist/pack/generation.js.map +0 -1
- package/dist/pack/index.d.ts +0 -502
- package/dist/pack/index.d.ts.map +0 -1
- package/dist/pack/index.js +0 -833
- package/dist/pack/index.js.map +0 -1
- package/dist/refs/branch.d.ts +0 -683
- package/dist/refs/branch.d.ts.map +0 -1
- package/dist/refs/branch.js +0 -881
- package/dist/refs/branch.js.map +0 -1
- package/dist/refs/storage.d.ts +0 -833
- package/dist/refs/storage.d.ts.map +0 -1
- package/dist/refs/storage.js +0 -1023
- package/dist/refs/storage.js.map +0 -1
- package/dist/refs/tag.d.ts +0 -860
- package/dist/refs/tag.d.ts.map +0 -1
- package/dist/refs/tag.js +0 -996
- package/dist/refs/tag.js.map +0 -1
- package/dist/storage/backend.d.ts +0 -425
- package/dist/storage/backend.d.ts.map +0 -1
- package/dist/storage/backend.js +0 -41
- package/dist/storage/backend.js.map +0 -1
- package/dist/storage/fsx-adapter.d.ts +0 -204
- package/dist/storage/fsx-adapter.d.ts.map +0 -1
- package/dist/storage/fsx-adapter.js +0 -518
- package/dist/storage/fsx-adapter.js.map +0 -1
- package/dist/storage/lru-cache.d.ts +0 -691
- package/dist/storage/lru-cache.d.ts.map +0 -1
- package/dist/storage/lru-cache.js +0 -813
- package/dist/storage/lru-cache.js.map +0 -1
- package/dist/storage/object-index.d.ts +0 -585
- package/dist/storage/object-index.d.ts.map +0 -1
- package/dist/storage/object-index.js +0 -532
- package/dist/storage/object-index.js.map +0 -1
- package/dist/storage/r2-pack.d.ts +0 -1257
- package/dist/storage/r2-pack.d.ts.map +0 -1
- package/dist/storage/r2-pack.js +0 -1773
- package/dist/storage/r2-pack.js.map +0 -1
- package/dist/tiered/cdc-pipeline.d.ts +0 -1888
- package/dist/tiered/cdc-pipeline.d.ts.map +0 -1
- package/dist/tiered/cdc-pipeline.js +0 -1880
- package/dist/tiered/cdc-pipeline.js.map +0 -1
- package/dist/tiered/migration.d.ts +0 -1104
- package/dist/tiered/migration.d.ts.map +0 -1
- package/dist/tiered/migration.js +0 -1217
- package/dist/tiered/migration.js.map +0 -1
- package/dist/tiered/parquet-writer.d.ts +0 -1145
- package/dist/tiered/parquet-writer.d.ts.map +0 -1
- package/dist/tiered/parquet-writer.js +0 -1183
- package/dist/tiered/parquet-writer.js.map +0 -1
- package/dist/tiered/read-path.d.ts +0 -835
- package/dist/tiered/read-path.d.ts.map +0 -1
- package/dist/tiered/read-path.js +0 -487
- package/dist/tiered/read-path.js.map +0 -1
- package/dist/types/capability.d.ts +0 -1385
- package/dist/types/capability.d.ts.map +0 -1
- package/dist/types/capability.js +0 -36
- package/dist/types/capability.js.map +0 -1
- package/dist/types/index.d.ts +0 -13
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -18
- package/dist/types/index.js.map +0 -1
- package/dist/types/interfaces.d.ts +0 -673
- package/dist/types/interfaces.d.ts.map +0 -1
- package/dist/types/interfaces.js +0 -26
- package/dist/types/interfaces.js.map +0 -1
- package/dist/types/objects.d.ts +0 -692
- package/dist/types/objects.d.ts.map +0 -1
- package/dist/types/objects.js +0 -837
- package/dist/types/objects.js.map +0 -1
- package/dist/types/storage.d.ts +0 -603
- package/dist/types/storage.d.ts.map +0 -1
- package/dist/types/storage.js +0 -191
- package/dist/types/storage.js.map +0 -1
- package/dist/types/worker-loader.d.ts +0 -60
- package/dist/types/worker-loader.d.ts.map +0 -1
- package/dist/types/worker-loader.js +0 -62
- package/dist/types/worker-loader.js.map +0 -1
- package/dist/utils/hash.d.ts +0 -198
- package/dist/utils/hash.d.ts.map +0 -1
- package/dist/utils/hash.js +0 -272
- package/dist/utils/hash.js.map +0 -1
- package/dist/utils/sha1.d.ts +0 -325
- package/dist/utils/sha1.d.ts.map +0 -1
- package/dist/utils/sha1.js +0 -635
- package/dist/utils/sha1.js.map +0 -1
- package/dist/wire/capabilities.d.ts +0 -1044
- package/dist/wire/capabilities.d.ts.map +0 -1
- package/dist/wire/capabilities.js +0 -941
- package/dist/wire/capabilities.js.map +0 -1
- package/dist/wire/path-security.d.ts +0 -157
- package/dist/wire/path-security.d.ts.map +0 -1
- package/dist/wire/path-security.js +0 -307
- package/dist/wire/path-security.js.map +0 -1
- package/dist/wire/pkt-line.d.ts +0 -345
- package/dist/wire/pkt-line.d.ts.map +0 -1
- package/dist/wire/pkt-line.js +0 -381
- package/dist/wire/pkt-line.js.map +0 -1
- package/dist/wire/receive-pack.d.ts +0 -1059
- package/dist/wire/receive-pack.d.ts.map +0 -1
- package/dist/wire/receive-pack.js +0 -1414
- package/dist/wire/receive-pack.js.map +0 -1
- package/dist/wire/smart-http.d.ts +0 -799
- package/dist/wire/smart-http.d.ts.map +0 -1
- package/dist/wire/smart-http.js +0 -945
- package/dist/wire/smart-http.js.map +0 -1
- package/dist/wire/upload-pack.d.ts +0 -727
- package/dist/wire/upload-pack.d.ts.map +0 -1
- package/dist/wire/upload-pack.js +0 -1141
- package/dist/wire/upload-pack.js.map +0 -1
|
@@ -1,655 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview gitx stash command
|
|
3
|
-
*
|
|
4
|
-
* This module implements the `gitx stash` command which temporarily stores
|
|
5
|
-
* modified working directory contents. Features include:
|
|
6
|
-
* - stash push - save changes to a new stash
|
|
7
|
-
* - stash list - list all stashes
|
|
8
|
-
* - stash apply - apply a stash without removing it
|
|
9
|
-
* - stash pop - apply and remove a stash
|
|
10
|
-
* - stash drop - remove a stash
|
|
11
|
-
* - stash show - show stash contents
|
|
12
|
-
* - stash clear - remove all stashes
|
|
13
|
-
*
|
|
14
|
-
* @module cli/commands/stash
|
|
15
|
-
*/
|
|
16
|
-
import * as fs from 'fs/promises';
|
|
17
|
-
import * as path from 'path';
|
|
18
|
-
// ============================================================================
|
|
19
|
-
// Helper Functions
|
|
20
|
-
// ============================================================================
|
|
21
|
-
/**
|
|
22
|
-
* Find the .git directory from a given path
|
|
23
|
-
*/
|
|
24
|
-
async function findGitDir(cwd) {
|
|
25
|
-
const gitDir = path.join(cwd, '.git');
|
|
26
|
-
try {
|
|
27
|
-
const stat = await fs.stat(gitDir);
|
|
28
|
-
if (stat.isDirectory()) {
|
|
29
|
-
return gitDir;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
// Not found
|
|
34
|
-
}
|
|
35
|
-
throw new Error('not a git repository (or any of the parent directories): .git');
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Get the current branch name
|
|
39
|
-
*/
|
|
40
|
-
async function getCurrentBranch(gitDir) {
|
|
41
|
-
try {
|
|
42
|
-
const headContent = await fs.readFile(path.join(gitDir, 'HEAD'), 'utf8');
|
|
43
|
-
const match = headContent.match(/^ref: refs\/heads\/(.+)\n?$/);
|
|
44
|
-
if (match) {
|
|
45
|
-
return match[1];
|
|
46
|
-
}
|
|
47
|
-
return 'HEAD';
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
return 'HEAD';
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Parse a stash reference like 'stash@{0}' or just '0' into an index
|
|
55
|
-
*/
|
|
56
|
-
function parseStashRef(ref) {
|
|
57
|
-
if (ref.startsWith('stash@{') && ref.endsWith('}')) {
|
|
58
|
-
const indexStr = ref.slice(7, -1);
|
|
59
|
-
const index = parseInt(indexStr, 10);
|
|
60
|
-
if (isNaN(index) || index < 0) {
|
|
61
|
-
throw new Error(`invalid stash reference: ${ref}`);
|
|
62
|
-
}
|
|
63
|
-
return index;
|
|
64
|
-
}
|
|
65
|
-
// Try to parse as a number
|
|
66
|
-
const index = parseInt(ref, 10);
|
|
67
|
-
if (isNaN(index) || index < 0) {
|
|
68
|
-
throw new Error(`invalid stash reference: ${ref}`);
|
|
69
|
-
}
|
|
70
|
-
return index;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Format a stash index as a reference
|
|
74
|
-
*/
|
|
75
|
-
function formatStashRef(index) {
|
|
76
|
-
return `stash@{${index}}`;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Read the stash reflog to get all stash entries
|
|
80
|
-
*/
|
|
81
|
-
async function readStashReflog(gitDir) {
|
|
82
|
-
const reflogPath = path.join(gitDir, 'logs', 'refs', 'stash');
|
|
83
|
-
try {
|
|
84
|
-
const content = await fs.readFile(reflogPath, 'utf8');
|
|
85
|
-
const lines = content.trim().split('\n').filter(line => line.length > 0);
|
|
86
|
-
return lines.map(line => {
|
|
87
|
-
// Format: sha sha message (for reflog)
|
|
88
|
-
// Or: sha sha WIP on branch: message
|
|
89
|
-
const parts = line.split(' ');
|
|
90
|
-
const sha = parts[0] || parts[1] || '';
|
|
91
|
-
const message = parts.slice(2).join(' ');
|
|
92
|
-
return { sha, message };
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
return [];
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Write the stash reflog
|
|
101
|
-
*/
|
|
102
|
-
async function writeStashReflog(gitDir, entries) {
|
|
103
|
-
const reflogPath = path.join(gitDir, 'logs', 'refs', 'stash');
|
|
104
|
-
await fs.mkdir(path.dirname(reflogPath), { recursive: true });
|
|
105
|
-
if (entries.length === 0) {
|
|
106
|
-
try {
|
|
107
|
-
await fs.unlink(reflogPath);
|
|
108
|
-
}
|
|
109
|
-
catch {
|
|
110
|
-
// Ignore if doesn't exist
|
|
111
|
-
}
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
const content = entries.map(e => `${e.sha} ${e.sha} ${e.message}`).join('\n') + '\n';
|
|
115
|
-
await fs.writeFile(reflogPath, content);
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Read mock stash data (for testing)
|
|
119
|
-
*/
|
|
120
|
-
async function readMockStashData(gitDir, index) {
|
|
121
|
-
const stashDataDir = path.join(gitDir, 'mock-stash-data', `stash@{${index}}`);
|
|
122
|
-
try {
|
|
123
|
-
const files = [];
|
|
124
|
-
const entries = await fs.readdir(stashDataDir);
|
|
125
|
-
let message = '';
|
|
126
|
-
let sha = '';
|
|
127
|
-
for (const entry of entries) {
|
|
128
|
-
if (entry === 'message') {
|
|
129
|
-
message = await fs.readFile(path.join(stashDataDir, entry), 'utf8');
|
|
130
|
-
}
|
|
131
|
-
else if (entry === 'sha') {
|
|
132
|
-
sha = await fs.readFile(path.join(stashDataDir, entry), 'utf8');
|
|
133
|
-
}
|
|
134
|
-
else if (entry !== 'timestamp') {
|
|
135
|
-
const content = await fs.readFile(path.join(stashDataDir, entry), 'utf8');
|
|
136
|
-
// Convert underscore-separated path back to slashes
|
|
137
|
-
files.push({ path: entry.replace(/_/g, '/'), content });
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
return { files, message, sha: sha.trim() };
|
|
141
|
-
}
|
|
142
|
-
catch {
|
|
143
|
-
return null;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Write mock stash data (for testing)
|
|
148
|
-
*/
|
|
149
|
-
async function writeMockStashData(gitDir, index, data) {
|
|
150
|
-
const stashDataDir = path.join(gitDir, 'mock-stash-data', `stash@{${index}}`);
|
|
151
|
-
await fs.mkdir(stashDataDir, { recursive: true });
|
|
152
|
-
await fs.writeFile(path.join(stashDataDir, 'message'), data.message);
|
|
153
|
-
await fs.writeFile(path.join(stashDataDir, 'sha'), data.sha);
|
|
154
|
-
await fs.writeFile(path.join(stashDataDir, 'timestamp'), Date.now().toString());
|
|
155
|
-
for (const file of data.files) {
|
|
156
|
-
await fs.writeFile(path.join(stashDataDir, file.path.replace(/\//g, '_')), file.content);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Delete mock stash data
|
|
161
|
-
*/
|
|
162
|
-
async function deleteMockStashData(gitDir, index) {
|
|
163
|
-
const stashDataDir = path.join(gitDir, 'mock-stash-data', `stash@{${index}}`);
|
|
164
|
-
try {
|
|
165
|
-
await fs.rm(stashDataDir, { recursive: true, force: true });
|
|
166
|
-
}
|
|
167
|
-
catch {
|
|
168
|
-
// Ignore
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Get modified/staged files in working directory
|
|
173
|
-
*/
|
|
174
|
-
async function getWorkingDirChanges(cwd, gitDir) {
|
|
175
|
-
const changes = [];
|
|
176
|
-
// Read files in the working directory (excluding .git)
|
|
177
|
-
async function scanDir(dir, relativePath = '') {
|
|
178
|
-
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
179
|
-
for (const entry of entries) {
|
|
180
|
-
if (entry.name === '.git')
|
|
181
|
-
continue;
|
|
182
|
-
const fullPath = path.join(dir, entry.name);
|
|
183
|
-
const relPath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
|
|
184
|
-
if (entry.isDirectory()) {
|
|
185
|
-
await scanDir(fullPath, relPath);
|
|
186
|
-
}
|
|
187
|
-
else if (entry.isFile()) {
|
|
188
|
-
const content = await fs.readFile(fullPath, 'utf8');
|
|
189
|
-
// Check if staged
|
|
190
|
-
const stagedPath = path.join(gitDir, 'mock-staged');
|
|
191
|
-
let staged = false;
|
|
192
|
-
try {
|
|
193
|
-
const stagedFiles = await fs.readFile(stagedPath, 'utf8');
|
|
194
|
-
staged = stagedFiles.split('\n').includes(relPath);
|
|
195
|
-
}
|
|
196
|
-
catch {
|
|
197
|
-
// No staged files
|
|
198
|
-
}
|
|
199
|
-
changes.push({ path: relPath, content, staged });
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
await scanDir(cwd);
|
|
204
|
-
return changes;
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Generate a random SHA for mock stashes
|
|
208
|
-
*/
|
|
209
|
-
function generateSha() {
|
|
210
|
-
const hex = '0123456789abcdef';
|
|
211
|
-
let sha = '';
|
|
212
|
-
for (let i = 0; i < 40; i++) {
|
|
213
|
-
sha += hex[Math.floor(Math.random() * 16)];
|
|
214
|
-
}
|
|
215
|
-
return sha;
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Rename stash directories after drop/pop
|
|
219
|
-
*/
|
|
220
|
-
async function renumberStashes(gitDir, droppedIndex, totalCount) {
|
|
221
|
-
const mockDataDir = path.join(gitDir, 'mock-stash-data');
|
|
222
|
-
// Shift all stashes after the dropped one
|
|
223
|
-
for (let i = droppedIndex + 1; i < totalCount; i++) {
|
|
224
|
-
const oldDir = path.join(mockDataDir, `stash@{${i}}`);
|
|
225
|
-
const newDir = path.join(mockDataDir, `stash@{${i - 1}}`);
|
|
226
|
-
try {
|
|
227
|
-
await fs.rename(oldDir, newDir);
|
|
228
|
-
}
|
|
229
|
-
catch {
|
|
230
|
-
// Directory might not exist
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
// ============================================================================
|
|
235
|
-
// Exported Functions
|
|
236
|
-
// ============================================================================
|
|
237
|
-
/**
|
|
238
|
-
* Get the count of stash entries.
|
|
239
|
-
*/
|
|
240
|
-
export async function getStashCount(cwd) {
|
|
241
|
-
const gitDir = await findGitDir(cwd);
|
|
242
|
-
// Check for mock stash count file first (for testing)
|
|
243
|
-
const mockCountPath = path.join(gitDir, 'mock-stash-count');
|
|
244
|
-
try {
|
|
245
|
-
const count = await fs.readFile(mockCountPath, 'utf8');
|
|
246
|
-
return parseInt(count.trim(), 10);
|
|
247
|
-
}
|
|
248
|
-
catch {
|
|
249
|
-
// No mock count, check reflog
|
|
250
|
-
}
|
|
251
|
-
// Check the stash reflog
|
|
252
|
-
const entries = await readStashReflog(gitDir);
|
|
253
|
-
return entries.length;
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Update the mock stash count
|
|
257
|
-
*/
|
|
258
|
-
async function updateStashCount(gitDir, count) {
|
|
259
|
-
const mockCountPath = path.join(gitDir, 'mock-stash-count');
|
|
260
|
-
if (count > 0) {
|
|
261
|
-
await fs.writeFile(mockCountPath, count.toString());
|
|
262
|
-
}
|
|
263
|
-
else {
|
|
264
|
-
try {
|
|
265
|
-
await fs.unlink(mockCountPath);
|
|
266
|
-
}
|
|
267
|
-
catch {
|
|
268
|
-
// Ignore
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
// Also update refs/stash
|
|
272
|
-
const stashRefPath = path.join(gitDir, 'refs', 'stash');
|
|
273
|
-
if (count === 0) {
|
|
274
|
-
try {
|
|
275
|
-
await fs.unlink(stashRefPath);
|
|
276
|
-
}
|
|
277
|
-
catch {
|
|
278
|
-
// Ignore
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* List all stash entries.
|
|
284
|
-
*/
|
|
285
|
-
export async function stashList(cwd) {
|
|
286
|
-
const gitDir = await findGitDir(cwd);
|
|
287
|
-
const branch = await getCurrentBranch(gitDir);
|
|
288
|
-
const count = await getStashCount(cwd);
|
|
289
|
-
if (count === 0) {
|
|
290
|
-
return [];
|
|
291
|
-
}
|
|
292
|
-
const entries = [];
|
|
293
|
-
// Read reflog for messages and SHAs
|
|
294
|
-
const reflogEntries = await readStashReflog(gitDir);
|
|
295
|
-
for (let i = 0; i < count; i++) {
|
|
296
|
-
const reflogEntry = reflogEntries[i];
|
|
297
|
-
const mockData = await readMockStashData(gitDir, i);
|
|
298
|
-
const sha = mockData?.sha || reflogEntry?.sha || generateSha();
|
|
299
|
-
const message = reflogEntry?.message || mockData?.message || `WIP on ${branch}`;
|
|
300
|
-
entries.push({
|
|
301
|
-
ref: formatStashRef(i),
|
|
302
|
-
index: i,
|
|
303
|
-
branch,
|
|
304
|
-
message,
|
|
305
|
-
sha,
|
|
306
|
-
shortSha: sha.substring(0, 7),
|
|
307
|
-
date: new Date(),
|
|
308
|
-
files: mockData?.files.map(f => f.path) || []
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
return entries;
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Push changes to a new stash entry.
|
|
315
|
-
*/
|
|
316
|
-
export async function stashPush(cwd, options) {
|
|
317
|
-
const gitDir = await findGitDir(cwd);
|
|
318
|
-
const branch = await getCurrentBranch(gitDir);
|
|
319
|
-
// Get working directory changes
|
|
320
|
-
const changes = await getWorkingDirChanges(cwd, gitDir);
|
|
321
|
-
if (changes.length === 0) {
|
|
322
|
-
throw new Error('Nothing to stash - working tree clean');
|
|
323
|
-
}
|
|
324
|
-
// Get current stash count
|
|
325
|
-
const currentCount = await getStashCount(cwd);
|
|
326
|
-
// Shift existing stashes (they all move up by one)
|
|
327
|
-
for (let i = currentCount - 1; i >= 0; i--) {
|
|
328
|
-
const oldData = await readMockStashData(gitDir, i);
|
|
329
|
-
if (oldData) {
|
|
330
|
-
await writeMockStashData(gitDir, i + 1, oldData);
|
|
331
|
-
}
|
|
332
|
-
// Also rename the mock data directory
|
|
333
|
-
const mockDataDir = path.join(gitDir, 'mock-stash-data');
|
|
334
|
-
const oldDir = path.join(mockDataDir, `stash@{${i}}`);
|
|
335
|
-
const newDir = path.join(mockDataDir, `stash@{${i + 1}}`);
|
|
336
|
-
try {
|
|
337
|
-
// Read all files and rewrite to new location
|
|
338
|
-
const entries = await fs.readdir(oldDir);
|
|
339
|
-
await fs.mkdir(newDir, { recursive: true });
|
|
340
|
-
for (const entry of entries) {
|
|
341
|
-
const content = await fs.readFile(path.join(oldDir, entry), 'utf8');
|
|
342
|
-
await fs.writeFile(path.join(newDir, entry), content);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
catch {
|
|
346
|
-
// Ignore
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
// Create the new stash at index 0
|
|
350
|
-
const sha = generateSha();
|
|
351
|
-
const message = options?.message
|
|
352
|
-
? `On ${branch}: ${options.message}`
|
|
353
|
-
: `WIP on ${branch}`;
|
|
354
|
-
await writeMockStashData(gitDir, 0, {
|
|
355
|
-
files: changes.map(c => ({ path: c.path, content: c.content })),
|
|
356
|
-
message,
|
|
357
|
-
sha
|
|
358
|
-
});
|
|
359
|
-
// Update reflog
|
|
360
|
-
const reflogEntries = await readStashReflog(gitDir);
|
|
361
|
-
reflogEntries.unshift({ sha, message });
|
|
362
|
-
await writeStashReflog(gitDir, reflogEntries);
|
|
363
|
-
// Update stash count
|
|
364
|
-
const newCount = currentCount + 1;
|
|
365
|
-
await updateStashCount(gitDir, newCount);
|
|
366
|
-
// Write refs/stash
|
|
367
|
-
const stashRefPath = path.join(gitDir, 'refs', 'stash');
|
|
368
|
-
await fs.mkdir(path.dirname(stashRefPath), { recursive: true });
|
|
369
|
-
await fs.writeFile(stashRefPath, sha + '\n');
|
|
370
|
-
return {
|
|
371
|
-
success: true,
|
|
372
|
-
stashRef: formatStashRef(0),
|
|
373
|
-
message
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
/**
|
|
377
|
-
* Apply a stash entry without removing it.
|
|
378
|
-
*/
|
|
379
|
-
export async function stashApply(cwd, options) {
|
|
380
|
-
const gitDir = await findGitDir(cwd);
|
|
381
|
-
const count = await getStashCount(cwd);
|
|
382
|
-
if (count === 0) {
|
|
383
|
-
throw new Error('No stash entries');
|
|
384
|
-
}
|
|
385
|
-
// Determine which stash to apply
|
|
386
|
-
let index = 0;
|
|
387
|
-
if (options?.ref) {
|
|
388
|
-
index = parseStashRef(options.ref);
|
|
389
|
-
}
|
|
390
|
-
if (index >= count) {
|
|
391
|
-
throw new Error(`stash@{${index}} does not exist`);
|
|
392
|
-
}
|
|
393
|
-
// Read stash data
|
|
394
|
-
const stashData = await readMockStashData(gitDir, index);
|
|
395
|
-
if (!stashData) {
|
|
396
|
-
throw new Error(`stash@{${index}} does not exist`);
|
|
397
|
-
}
|
|
398
|
-
// Apply the stash files to working directory
|
|
399
|
-
for (const file of stashData.files) {
|
|
400
|
-
const filePath = path.join(cwd, file.path);
|
|
401
|
-
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
402
|
-
await fs.writeFile(filePath, file.content);
|
|
403
|
-
}
|
|
404
|
-
return {
|
|
405
|
-
success: true,
|
|
406
|
-
appliedRef: formatStashRef(index)
|
|
407
|
-
};
|
|
408
|
-
}
|
|
409
|
-
/**
|
|
410
|
-
* Apply and remove a stash entry.
|
|
411
|
-
*/
|
|
412
|
-
export async function stashPop(cwd, options) {
|
|
413
|
-
const gitDir = await findGitDir(cwd);
|
|
414
|
-
const count = await getStashCount(cwd);
|
|
415
|
-
if (count === 0) {
|
|
416
|
-
throw new Error('No stash entries');
|
|
417
|
-
}
|
|
418
|
-
// Determine which stash to pop
|
|
419
|
-
let index = 0;
|
|
420
|
-
if (options?.ref) {
|
|
421
|
-
index = parseStashRef(options.ref);
|
|
422
|
-
}
|
|
423
|
-
if (index >= count) {
|
|
424
|
-
throw new Error(`stash@{${index}} does not exist`);
|
|
425
|
-
}
|
|
426
|
-
// Apply the stash first
|
|
427
|
-
const applyResult = await stashApply(cwd, { ref: formatStashRef(index), index: options?.index });
|
|
428
|
-
if (!applyResult.success) {
|
|
429
|
-
return applyResult;
|
|
430
|
-
}
|
|
431
|
-
// Remove the stash
|
|
432
|
-
await deleteMockStashData(gitDir, index);
|
|
433
|
-
// Renumber remaining stashes
|
|
434
|
-
await renumberStashes(gitDir, index, count);
|
|
435
|
-
// Update reflog
|
|
436
|
-
const reflogEntries = await readStashReflog(gitDir);
|
|
437
|
-
reflogEntries.splice(index, 1);
|
|
438
|
-
await writeStashReflog(gitDir, reflogEntries);
|
|
439
|
-
// Update count
|
|
440
|
-
await updateStashCount(gitDir, count - 1);
|
|
441
|
-
// Update refs/stash to point to new top stash
|
|
442
|
-
if (count - 1 > 0) {
|
|
443
|
-
const newTopData = await readMockStashData(gitDir, 0);
|
|
444
|
-
if (newTopData) {
|
|
445
|
-
const stashRefPath = path.join(gitDir, 'refs', 'stash');
|
|
446
|
-
await fs.writeFile(stashRefPath, newTopData.sha + '\n');
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
return {
|
|
450
|
-
success: true,
|
|
451
|
-
appliedRef: formatStashRef(index)
|
|
452
|
-
};
|
|
453
|
-
}
|
|
454
|
-
/**
|
|
455
|
-
* Remove a specific stash entry.
|
|
456
|
-
*/
|
|
457
|
-
export async function stashDrop(cwd, ref) {
|
|
458
|
-
const gitDir = await findGitDir(cwd);
|
|
459
|
-
const count = await getStashCount(cwd);
|
|
460
|
-
if (count === 0) {
|
|
461
|
-
throw new Error('No stash entries');
|
|
462
|
-
}
|
|
463
|
-
// Determine which stash to drop
|
|
464
|
-
let index = 0;
|
|
465
|
-
if (ref) {
|
|
466
|
-
index = parseStashRef(ref);
|
|
467
|
-
}
|
|
468
|
-
if (index >= count) {
|
|
469
|
-
throw new Error(`stash@{${index}} does not exist`);
|
|
470
|
-
}
|
|
471
|
-
// Get the SHA before deleting
|
|
472
|
-
const stashData = await readMockStashData(gitDir, index);
|
|
473
|
-
const sha = stashData?.sha || '';
|
|
474
|
-
// Delete the stash
|
|
475
|
-
await deleteMockStashData(gitDir, index);
|
|
476
|
-
// Renumber remaining stashes
|
|
477
|
-
await renumberStashes(gitDir, index, count);
|
|
478
|
-
// Update reflog
|
|
479
|
-
const reflogEntries = await readStashReflog(gitDir);
|
|
480
|
-
reflogEntries.splice(index, 1);
|
|
481
|
-
await writeStashReflog(gitDir, reflogEntries);
|
|
482
|
-
// Update count
|
|
483
|
-
await updateStashCount(gitDir, count - 1);
|
|
484
|
-
// Update refs/stash
|
|
485
|
-
if (count - 1 > 0) {
|
|
486
|
-
const newTopData = await readMockStashData(gitDir, 0);
|
|
487
|
-
if (newTopData) {
|
|
488
|
-
const stashRefPath = path.join(gitDir, 'refs', 'stash');
|
|
489
|
-
await fs.writeFile(stashRefPath, newTopData.sha + '\n');
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
return {
|
|
493
|
-
success: true,
|
|
494
|
-
droppedRef: formatStashRef(index),
|
|
495
|
-
droppedSha: sha
|
|
496
|
-
};
|
|
497
|
-
}
|
|
498
|
-
/**
|
|
499
|
-
* Show the contents of a stash entry.
|
|
500
|
-
*/
|
|
501
|
-
export async function stashShow(cwd, ref) {
|
|
502
|
-
const gitDir = await findGitDir(cwd);
|
|
503
|
-
const count = await getStashCount(cwd);
|
|
504
|
-
if (count === 0) {
|
|
505
|
-
throw new Error('No stash entries');
|
|
506
|
-
}
|
|
507
|
-
// Determine which stash to show
|
|
508
|
-
let index = 0;
|
|
509
|
-
if (ref) {
|
|
510
|
-
index = parseStashRef(ref);
|
|
511
|
-
}
|
|
512
|
-
if (index >= count) {
|
|
513
|
-
throw new Error(`stash@{${index}} does not exist`);
|
|
514
|
-
}
|
|
515
|
-
// Get stash data
|
|
516
|
-
const stashData = await readMockStashData(gitDir, index);
|
|
517
|
-
if (!stashData) {
|
|
518
|
-
throw new Error(`stash@{${index}} does not exist`);
|
|
519
|
-
}
|
|
520
|
-
return {
|
|
521
|
-
files: stashData.files.map(f => ({ path: f.path }))
|
|
522
|
-
};
|
|
523
|
-
}
|
|
524
|
-
/**
|
|
525
|
-
* Remove all stash entries.
|
|
526
|
-
*/
|
|
527
|
-
export async function stashClear(cwd) {
|
|
528
|
-
const gitDir = await findGitDir(cwd);
|
|
529
|
-
const count = await getStashCount(cwd);
|
|
530
|
-
// Delete all stash data
|
|
531
|
-
for (let i = 0; i < count; i++) {
|
|
532
|
-
await deleteMockStashData(gitDir, i);
|
|
533
|
-
}
|
|
534
|
-
// Clear reflog
|
|
535
|
-
await writeStashReflog(gitDir, []);
|
|
536
|
-
// Clear count
|
|
537
|
-
await updateStashCount(gitDir, 0);
|
|
538
|
-
// Delete refs/stash
|
|
539
|
-
const stashRefPath = path.join(gitDir, 'refs', 'stash');
|
|
540
|
-
try {
|
|
541
|
-
await fs.unlink(stashRefPath);
|
|
542
|
-
}
|
|
543
|
-
catch {
|
|
544
|
-
// Ignore
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
/**
|
|
548
|
-
* Command handler for `gitx stash`.
|
|
549
|
-
*/
|
|
550
|
-
export async function stashCommand(context) {
|
|
551
|
-
const { cwd, args, options, stdout, stderr } = context;
|
|
552
|
-
// Parse subcommand
|
|
553
|
-
const subcommand = args[0] || 'push';
|
|
554
|
-
// Handle --help
|
|
555
|
-
if (options.help || options.h) {
|
|
556
|
-
stdout(`gitx stash - Stash changes in a dirty working directory
|
|
557
|
-
|
|
558
|
-
Usage: gitx stash [push [-m <message>]] [-u|--include-untracked]
|
|
559
|
-
gitx stash list
|
|
560
|
-
gitx stash show [<stash>]
|
|
561
|
-
gitx stash apply [--index] [<stash>]
|
|
562
|
-
gitx stash pop [--index] [<stash>]
|
|
563
|
-
gitx stash drop [<stash>]
|
|
564
|
-
gitx stash clear
|
|
565
|
-
|
|
566
|
-
Subcommands:
|
|
567
|
-
push Save local modifications to a new stash (default)
|
|
568
|
-
list List all stashes
|
|
569
|
-
show Show the changes recorded in a stash
|
|
570
|
-
apply Apply a stash to the working directory
|
|
571
|
-
pop Apply and remove a stash
|
|
572
|
-
drop Remove a single stash
|
|
573
|
-
clear Remove all stashes`);
|
|
574
|
-
return;
|
|
575
|
-
}
|
|
576
|
-
try {
|
|
577
|
-
switch (subcommand) {
|
|
578
|
-
case 'push': {
|
|
579
|
-
const message = options.m || options.message;
|
|
580
|
-
const result = await stashPush(cwd, {
|
|
581
|
-
message,
|
|
582
|
-
includeUntracked: options.u || options.includeUntracked,
|
|
583
|
-
keepIndex: options.keepIndex,
|
|
584
|
-
all: options.all || options.a
|
|
585
|
-
});
|
|
586
|
-
stdout(`Saved working directory and index state ${result.message}`);
|
|
587
|
-
break;
|
|
588
|
-
}
|
|
589
|
-
case 'list': {
|
|
590
|
-
const entries = await stashList(cwd);
|
|
591
|
-
for (const entry of entries) {
|
|
592
|
-
stdout(`${entry.ref}: ${entry.message}`);
|
|
593
|
-
}
|
|
594
|
-
break;
|
|
595
|
-
}
|
|
596
|
-
case 'show': {
|
|
597
|
-
const ref = args[1];
|
|
598
|
-
const result = await stashShow(cwd, ref);
|
|
599
|
-
for (const file of result.files) {
|
|
600
|
-
stdout(` ${file.path}`);
|
|
601
|
-
}
|
|
602
|
-
break;
|
|
603
|
-
}
|
|
604
|
-
case 'apply': {
|
|
605
|
-
const ref = args[1];
|
|
606
|
-
const result = await stashApply(cwd, { ref, index: options.index });
|
|
607
|
-
if (result.success) {
|
|
608
|
-
stdout(`Applied ${result.appliedRef}`);
|
|
609
|
-
}
|
|
610
|
-
break;
|
|
611
|
-
}
|
|
612
|
-
case 'pop': {
|
|
613
|
-
const ref = args[1];
|
|
614
|
-
const result = await stashPop(cwd, { ref, index: options.index });
|
|
615
|
-
if (result.success) {
|
|
616
|
-
stdout(`Dropped ${result.appliedRef}`);
|
|
617
|
-
}
|
|
618
|
-
break;
|
|
619
|
-
}
|
|
620
|
-
case 'drop': {
|
|
621
|
-
const ref = args[1];
|
|
622
|
-
const result = await stashDrop(cwd, ref);
|
|
623
|
-
stdout(`Dropped ${result.droppedRef} (${result.droppedSha.substring(0, 7)})`);
|
|
624
|
-
break;
|
|
625
|
-
}
|
|
626
|
-
case 'clear': {
|
|
627
|
-
await stashClear(cwd);
|
|
628
|
-
break;
|
|
629
|
-
}
|
|
630
|
-
default: {
|
|
631
|
-
// Check if it might be an option like -m
|
|
632
|
-
if (subcommand.startsWith('-')) {
|
|
633
|
-
// Treat as push with options
|
|
634
|
-
const message = options.m || options.message;
|
|
635
|
-
const result = await stashPush(cwd, {
|
|
636
|
-
message,
|
|
637
|
-
includeUntracked: options.u || options.includeUntracked,
|
|
638
|
-
keepIndex: options.keepIndex,
|
|
639
|
-
all: options.all || options.a
|
|
640
|
-
});
|
|
641
|
-
stdout(`Saved working directory and index state ${result.message}`);
|
|
642
|
-
}
|
|
643
|
-
else {
|
|
644
|
-
throw new Error(`Unknown stash subcommand: ${subcommand}`);
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
|
-
}
|
|
648
|
-
}
|
|
649
|
-
catch (error) {
|
|
650
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
651
|
-
stderr(err.message);
|
|
652
|
-
throw err;
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
//# sourceMappingURL=stash.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stash.js","sourceRoot":"","sources":["../../../src/cli/commands/stash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAkH5B,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,KAAK,UAAU,UAAU,CAAC,GAAW;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACrC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAClC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,MAAM,CAAA;QACf,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAA;AAClF,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,MAAc;IAC5C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;QACxE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAC9D,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAA;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QACpC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAA;QACpD,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,2BAA2B;IAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC/B,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,UAAU,KAAK,GAAG,CAAA;AAC3B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,MAAc;IAK3C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACxE,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACtB,uCAAuC;YACvC,qCAAqC;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YACtC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACxC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAA;QACzB,CAAC,CAAC,CAAA;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,MAAc,EAAE,OAG9C;IACA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7D,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE7D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;QACD,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACpF,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;AACzC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,MAAc,EAAE,KAAa;IAK5D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,UAAU,KAAK,GAAG,CAAC,CAAA;IAC7E,IAAI,CAAC;QACH,MAAM,KAAK,GAA6C,EAAE,CAAA;QAC1D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QAE9C,IAAI,OAAO,GAAG,EAAE,CAAA;QAChB,IAAI,GAAG,GAAG,EAAE,CAAA;QAEZ,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAA;YACrE,CAAC;iBAAM,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;gBAC3B,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAA;YACjE,CAAC;iBAAM,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAA;gBACzE,oDAAoD;gBACpD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;YACzD,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAAC,MAAc,EAAE,KAAa,EAAE,IAIhE;IACC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,UAAU,KAAK,GAAG,CAAC,CAAA;IAC7E,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEjD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IACpE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;IAE/E,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EACtD,IAAI,CAAC,OAAO,CACb,CAAA;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAAC,MAAc,EAAE,KAAa;IAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,UAAU,KAAK,GAAG,CAAC,CAAA;IAC7E,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,oBAAoB,CAAC,GAAW,EAAE,MAAc;IAK7D,MAAM,OAAO,GAA8D,EAAE,CAAA;IAE7E,uDAAuD;IACvD,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,eAAuB,EAAE;QAC3D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,SAAQ;YAEnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;YAE3E,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAClC,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;gBACnD,kBAAkB;gBAClB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;gBACnD,IAAI,MAAM,GAAG,KAAK,CAAA;gBAClB,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;oBACzD,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;gBACpD,CAAC;gBAAC,MAAM,CAAC;oBACP,kBAAkB;gBACpB,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,CAAA;IAClB,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,WAAW;IAClB,MAAM,GAAG,GAAG,kBAAkB,CAAA;IAC9B,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,MAAc,EAAE,YAAoB,EAAE,UAAkB;IACrF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAExD,0CAA0C;IAC1C,KAAK,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACzD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;IACH,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAA;IAEpC,sDAAsD;IACtD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAC3D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;QACtD,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IAED,yBAAyB;IACzB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;IAC7C,OAAO,OAAO,CAAC,MAAM,CAAA;AACvB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,MAAc,EAAE,KAAa;IAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAC3D,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IACrD,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IACvD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAE7C,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAA;IACtC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,OAAO,GAAiB,EAAE,CAAA;IAEhC,oCAAoC;IACpC,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;IAEnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;QACpC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnD,MAAM,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,WAAW,EAAE,GAAG,IAAI,WAAW,EAAE,CAAA;QAC9D,MAAM,OAAO,GAAG,WAAW,EAAE,OAAO,IAAI,QAAQ,EAAE,OAAO,IAAI,UAAU,MAAM,EAAE,CAAA;QAE/E,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;YACtB,KAAK,EAAE,CAAC;YACR,MAAM;YACN,OAAO;YACP,GAAG;YACH,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,EAAE,IAAI,IAAI,EAAE;YAChB,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;SAC9C,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,OAA0B;IAE1B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAE7C,gCAAgC;IAChC,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAEvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAC1D,CAAC;IAED,0BAA0B;IAC1B,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAA;IAE7C,mDAAmD;IACnD,KAAK,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAClD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,kBAAkB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAA;QAClD,CAAC;QACD,sCAAsC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACzD,IAAI,CAAC;YACH,6CAA6C;YAC7C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACxC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC3C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAA;gBACnE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAA;YACvD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,MAAM,GAAG,GAAG,WAAW,EAAE,CAAA;IACzB,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO;QAC9B,CAAC,CAAC,MAAM,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE;QACpC,CAAC,CAAC,UAAU,MAAM,EAAE,CAAA;IAEtB,MAAM,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE;QAClC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,OAAO;QACP,GAAG;KACJ,CAAC,CAAA;IAEF,gBAAgB;IAChB,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;IACnD,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;IACvC,MAAM,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAE7C,qBAAqB;IACrB,MAAM,QAAQ,GAAG,YAAY,GAAG,CAAC,CAAA;IACjC,MAAM,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAExC,mBAAmB;IACnB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IACvD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/D,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,GAAG,IAAI,CAAC,CAAA;IAE5C,OAAO;QACL,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;QAC3B,OAAO;KACR,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAW,EACX,OAA2B;IAE3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAA;IAEpC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAA;IACtC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACrC,CAAC;IAED,iCAAiC;IACjC,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;QACjB,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACpC,CAAC;IAED,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,kBAAkB,CAAC,CAAA;IACpD,CAAC;IAED,kBAAkB;IAClB,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACxD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,kBAAkB,CAAC,CAAA;IACpD,CAAC;IAED,6CAA6C;IAC7C,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1C,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC;KAClC,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,GAAW,EACX,OAA2B;IAE3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAA;IAEpC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAA;IACtC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACrC,CAAC;IAED,+BAA+B;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;QACjB,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACpC,CAAC;IAED,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,kBAAkB,CAAC,CAAA;IACpD,CAAC;IAED,wBAAwB;IACxB,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IAEhG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,mBAAmB;IACnB,MAAM,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAExC,6BAA6B;IAC7B,MAAM,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAE3C,gBAAgB;IAChB,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;IACnD,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAC9B,MAAM,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAE7C,eAAe;IACf,MAAM,gBAAgB,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;IAEzC,8CAA8C;IAC9C,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACrD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;YACvD,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC;KAClC,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,GAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAA;IAEpC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAA;IACtC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACrC,CAAC;IAED,gCAAgC;IAChC,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,GAAG,EAAE,CAAC;QACR,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,kBAAkB,CAAC,CAAA;IACpD,CAAC;IAED,8BAA8B;IAC9B,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACxD,MAAM,GAAG,GAAG,SAAS,EAAE,GAAG,IAAI,EAAE,CAAA;IAEhC,mBAAmB;IACnB,MAAM,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAExC,6BAA6B;IAC7B,MAAM,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAE3C,gBAAgB;IAChB,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;IACnD,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAC9B,MAAM,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAE7C,eAAe;IACf,MAAM,gBAAgB,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;IAEzC,oBAAoB;IACpB,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACrD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;YACvD,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC;QACjC,UAAU,EAAE,GAAG;KAChB,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,GAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAA;IAEpC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAA;IACtC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACrC,CAAC;IAED,gCAAgC;IAChC,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,GAAG,EAAE,CAAC;QACR,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,kBAAkB,CAAC,CAAA;IACpD,CAAC;IAED,iBAAiB;IACjB,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACxD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,kBAAkB,CAAC,CAAA;IACpD,CAAC;IAED,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;KACpD,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAA;IAEpC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAA;IAEtC,wBAAwB;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,CAAC;IAED,eAAe;IACf,MAAM,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAElC,cAAc;IACd,MAAM,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAEjC,oBAAoB;IACpB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IACvD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAuB;IACxD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAEtD,mBAAmB;IACnB,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAA;IAEpC,gBAAgB;IAChB,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC;;;;;;;;;;;;;;;;;8BAiBmB,CAAC,CAAA;QAC3B,OAAM;IACR,CAAC;IAED,IAAI,CAAC;QACH,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAA;gBAC5C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;oBAClC,OAAO;oBACP,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,gBAAgB;oBACvD,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC;iBAC9B,CAAC,CAAA;gBACF,MAAM,CAAC,2CAA2C,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;gBACnE,MAAK;YACP,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAA;gBACpC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC1C,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;gBACnB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;gBACxC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBAChC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;gBACzB,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;gBACnB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;gBACnE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,MAAM,CAAC,WAAW,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;gBACxC,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;gBACnB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;gBACjE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,MAAM,CAAC,WAAW,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;gBACxC,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;gBACnB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;gBACxC,MAAM,CAAC,WAAW,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC7E,MAAK;YACP,CAAC;YAED,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,UAAU,CAAC,GAAG,CAAC,CAAA;gBACrB,MAAK;YACP,CAAC;YAED,OAAO,CAAC,CAAC,CAAC;gBACR,yCAAyC;gBACzC,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/B,6BAA6B;oBAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAA;oBAC5C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;wBAClC,OAAO;wBACP,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,gBAAgB;wBACvD,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC;qBAC9B,CAAC,CAAA;oBACF,MAAM,CAAC,2CAA2C,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;gBACrE,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,KAAK,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAA;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACrE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACnB,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
|