@ozyman42/ozy-cli 0.4.8 → 0.4.9-darwin-x64.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/multi-call-binary +0 -0
  2. package/package.json +11 -52
  3. package/bin/ozy +0 -191
  4. package/bin/ozy-signing-agent +0 -191
  5. package/bin/ozy-ssh-keygen +0 -191
  6. package/bin/ozy-virtual-security-key +0 -191
  7. package/dist/commands/git/hosts.js +0 -18
  8. package/dist/commands/git/hosts.js.map +0 -1
  9. package/dist/commands/git/index.js +0 -8
  10. package/dist/commands/git/index.js.map +0 -1
  11. package/dist/commands/git/setup.js +0 -145
  12. package/dist/commands/git/setup.js.map +0 -1
  13. package/dist/commands/index.js +0 -13
  14. package/dist/commands/index.js.map +0 -1
  15. package/dist/commands/npm/index.js +0 -7
  16. package/dist/commands/npm/index.js.map +0 -1
  17. package/dist/commands/npm/setup/git-remote.js +0 -66
  18. package/dist/commands/npm/setup/git-remote.js.map +0 -1
  19. package/dist/commands/npm/setup/index.js +0 -168
  20. package/dist/commands/npm/setup/index.js.map +0 -1
  21. package/dist/commands/npm/setup/npm-auth.js +0 -62
  22. package/dist/commands/npm/setup/npm-auth.js.map +0 -1
  23. package/dist/commands/npm/setup/package-json-validate.js +0 -47
  24. package/dist/commands/npm/setup/package-json-validate.js.map +0 -1
  25. package/dist/commands/npm/setup/package-registry.js +0 -20
  26. package/dist/commands/npm/setup/package-registry.js.map +0 -1
  27. package/dist/commands/npm/setup/setup.test.js +0 -95
  28. package/dist/commands/npm/setup/setup.test.js.map +0 -1
  29. package/dist/commands/npm/setup/trusted-publishing.js +0 -84
  30. package/dist/commands/npm/setup/trusted-publishing.js.map +0 -1
  31. package/dist/commands/npm/setup/workflow.js +0 -19
  32. package/dist/commands/npm/setup/workflow.js.map +0 -1
  33. package/dist/commands/ssh/get-sk-credential.js +0 -104
  34. package/dist/commands/ssh/get-sk-credential.js.map +0 -1
  35. package/dist/commands/ssh/index.js +0 -7
  36. package/dist/commands/ssh/index.js.map +0 -1
  37. package/dist/commands/upgrade.js +0 -199
  38. package/dist/commands/upgrade.js.map +0 -1
  39. package/dist/common/command.js +0 -15
  40. package/dist/common/command.js.map +0 -1
  41. package/dist/common/constants.js +0 -25
  42. package/dist/common/constants.js.map +0 -1
  43. package/dist/common/effective-modules-extensions.js +0 -13
  44. package/dist/common/effective-modules-extensions.js.map +0 -1
  45. package/dist/common/log.js +0 -4
  46. package/dist/common/log.js.map +0 -1
  47. package/dist/common/render-caller-tree.js +0 -20
  48. package/dist/common/render-caller-tree.js.map +0 -1
  49. package/dist/entrypoints/ozy-signing-agent.js +0 -48
  50. package/dist/entrypoints/ozy-signing-agent.js.map +0 -1
  51. package/dist/entrypoints/ozy-ssh-keygen.js +0 -9
  52. package/dist/entrypoints/ozy-ssh-keygen.js.map +0 -1
  53. package/dist/entrypoints/ozy-virtual-security-key.js +0 -18
  54. package/dist/entrypoints/ozy-virtual-security-key.js.map +0 -1
  55. package/dist/entrypoints/ozy.js +0 -3
  56. package/dist/entrypoints/ozy.js.map +0 -1
  57. package/dist/index.js +0 -2
  58. package/dist/index.js.map +0 -1
  59. package/dist/internal/thing.js +0 -4
  60. package/dist/internal/thing.js.map +0 -1
  61. package/dist/modules/cli/agent-client/impl.js +0 -109
  62. package/dist/modules/cli/agent-client/impl.js.map +0 -1
  63. package/dist/modules/cli/agent-client/interface.js +0 -11
  64. package/dist/modules/cli/agent-client/interface.js.map +0 -1
  65. package/dist/modules/cli/git/impl.js +0 -124
  66. package/dist/modules/cli/git/impl.js.map +0 -1
  67. package/dist/modules/cli/git/interface.js +0 -3
  68. package/dist/modules/cli/git/interface.js.map +0 -1
  69. package/dist/modules/cli/git/submodule/fix.js +0 -257
  70. package/dist/modules/cli/git/submodule/fix.js.map +0 -1
  71. package/dist/modules/cli/git/submodule/git-state.js +0 -154
  72. package/dist/modules/cli/git/submodule/git-state.js.map +0 -1
  73. package/dist/modules/cli/git/submodule/gitmodules.js +0 -113
  74. package/dist/modules/cli/git/submodule/gitmodules.js.map +0 -1
  75. package/dist/modules/cli/git/submodule/printer.js +0 -232
  76. package/dist/modules/cli/git/submodule/printer.js.map +0 -1
  77. package/dist/modules/cli/git/submodule/resolve-git-dir.js +0 -16
  78. package/dist/modules/cli/git/submodule/resolve-git-dir.js.map +0 -1
  79. package/dist/modules/cli/github/impl.js +0 -137
  80. package/dist/modules/cli/github/impl.js.map +0 -1
  81. package/dist/modules/cli/github/interface.js +0 -2
  82. package/dist/modules/cli/github/interface.js.map +0 -1
  83. package/dist/modules/cli/index.js +0 -9
  84. package/dist/modules/cli/index.js.map +0 -1
  85. package/dist/modules/common/crypto/impl.js +0 -133
  86. package/dist/modules/common/crypto/impl.js.map +0 -1
  87. package/dist/modules/common/crypto/interface.js +0 -2
  88. package/dist/modules/common/crypto/interface.js.map +0 -1
  89. package/dist/modules/common/index.js +0 -10
  90. package/dist/modules/common/index.js.map +0 -1
  91. package/dist/modules/common/kep-map-store/impl.js +0 -42
  92. package/dist/modules/common/kep-map-store/impl.js.map +0 -1
  93. package/dist/modules/common/kep-map-store/interface.js +0 -2
  94. package/dist/modules/common/kep-map-store/interface.js.map +0 -1
  95. package/dist/modules/common/os-platform/caller-info.js +0 -132
  96. package/dist/modules/common/os-platform/caller-info.js.map +0 -1
  97. package/dist/modules/common/os-platform/impl.js +0 -95
  98. package/dist/modules/common/os-platform/impl.js.map +0 -1
  99. package/dist/modules/common/os-platform/interface.js +0 -2
  100. package/dist/modules/common/os-platform/interface.js.map +0 -1
  101. package/dist/modules/common/os-platform/virtual-hid/index.js +0 -12
  102. package/dist/modules/common/os-platform/virtual-hid/index.js.map +0 -1
  103. package/dist/modules/common/os-platform/virtual-hid/linux.js +0 -5
  104. package/dist/modules/common/os-platform/virtual-hid/linux.js.map +0 -1
  105. package/dist/modules/common/os-platform/virtual-hid/mac.js +0 -119
  106. package/dist/modules/common/os-platform/virtual-hid/mac.js.map +0 -1
  107. package/dist/modules/common/os-platform/virtual-hid/windows.js +0 -5
  108. package/dist/modules/common/os-platform/virtual-hid/windows.js.map +0 -1
  109. package/dist/modules/common/ssh-config/impl.js +0 -116
  110. package/dist/modules/common/ssh-config/impl.js.map +0 -1
  111. package/dist/modules/common/ssh-config/interface.js +0 -10
  112. package/dist/modules/common/ssh-config/interface.js.map +0 -1
  113. package/dist/modules/ssh-agent/index.js +0 -8
  114. package/dist/modules/ssh-agent/index.js.map +0 -1
  115. package/dist/modules/ssh-agent/session/impl.js +0 -265
  116. package/dist/modules/ssh-agent/session/impl.js.map +0 -1
  117. package/dist/modules/ssh-agent/session/interface-rpc.js +0 -20
  118. package/dist/modules/ssh-agent/session/interface-rpc.js.map +0 -1
  119. package/dist/modules/ssh-agent/session/interface.js +0 -32
  120. package/dist/modules/ssh-agent/session/interface.js.map +0 -1
  121. package/dist/modules/ssh-agent/session/passkey-prf-page.js +0 -204
  122. package/dist/modules/ssh-agent/session/passkey-prf-page.js.map +0 -1
  123. package/dist/modules/ssh-agent/session/prf-flow.js +0 -103
  124. package/dist/modules/ssh-agent/session/prf-flow.js.map +0 -1
  125. package/dist/modules/ssh-agent/ssh-agent/impl.js +0 -117
  126. package/dist/modules/ssh-agent/ssh-agent/impl.js.map +0 -1
  127. package/dist/modules/ssh-agent/ssh-agent/interface.js +0 -2
  128. package/dist/modules/ssh-agent/ssh-agent/interface.js.map +0 -1
  129. package/dist/scripts/build.js +0 -410
  130. package/dist/scripts/build.js.map +0 -1
  131. package/dist/scripts/check-npm-version.js +0 -8
  132. package/dist/scripts/check-npm-version.js.map +0 -1
  133. package/dist/scripts/kill-existing-agent.js +0 -21
  134. package/dist/scripts/kill-existing-agent.js.map +0 -1
  135. package/dist/scripts/publish.js +0 -46
  136. package/dist/scripts/publish.js.map +0 -1
  137. package/src/commands/git/hosts.ts +0 -20
  138. package/src/commands/git/index.ts +0 -9
  139. package/src/commands/git/setup.ts +0 -182
  140. package/src/commands/index.ts +0 -15
  141. package/src/commands/npm/index.ts +0 -8
  142. package/src/commands/npm/setup/git-remote.ts +0 -78
  143. package/src/commands/npm/setup/index.ts +0 -189
  144. package/src/commands/npm/setup/npm-auth.ts +0 -58
  145. package/src/commands/npm/setup/package-json-validate.ts +0 -68
  146. package/src/commands/npm/setup/package-registry.ts +0 -24
  147. package/src/commands/npm/setup/publish-workflow.yml +0 -35
  148. package/src/commands/npm/setup/setup.test.ts +0 -117
  149. package/src/commands/npm/setup/trusted-publishing.ts +0 -106
  150. package/src/commands/npm/setup/workflow.ts +0 -20
  151. package/src/commands/ssh/get-sk-credential.ts +0 -110
  152. package/src/commands/ssh/index.ts +0 -8
  153. package/src/commands/upgrade.ts +0 -220
  154. package/src/common/command.ts +0 -16
  155. package/src/common/constants.ts +0 -26
  156. package/src/common/effective-modules-extensions.ts +0 -24
  157. package/src/common/log.ts +0 -3
  158. package/src/common/render-caller-tree.ts +0 -22
  159. package/src/entrypoints/ozy-signing-agent.ts +0 -48
  160. package/src/entrypoints/ozy-ssh-keygen.ts +0 -10
  161. package/src/entrypoints/ozy-virtual-security-key.ts +0 -21
  162. package/src/entrypoints/ozy.ts +0 -2
  163. package/src/index.ts +0 -1
  164. package/src/internal/thing.ts +0 -3
  165. package/src/modules/cli/agent-client/impl.ts +0 -152
  166. package/src/modules/cli/agent-client/interface.ts +0 -17
  167. package/src/modules/cli/git/impl.ts +0 -133
  168. package/src/modules/cli/git/interface.ts +0 -23
  169. package/src/modules/cli/git/submodule/fix.ts +0 -298
  170. package/src/modules/cli/git/submodule/git-state.ts +0 -217
  171. package/src/modules/cli/git/submodule/gitmodules.ts +0 -126
  172. package/src/modules/cli/git/submodule/printer.ts +0 -256
  173. package/src/modules/cli/git/submodule/resolve-git-dir.ts +0 -14
  174. package/src/modules/cli/github/impl.ts +0 -169
  175. package/src/modules/cli/github/interface.ts +0 -29
  176. package/src/modules/cli/index.ts +0 -16
  177. package/src/modules/common/crypto/impl.ts +0 -173
  178. package/src/modules/common/crypto/interface.ts +0 -20
  179. package/src/modules/common/index.ts +0 -19
  180. package/src/modules/common/kep-map-store/impl.ts +0 -47
  181. package/src/modules/common/kep-map-store/interface.ts +0 -9
  182. package/src/modules/common/os-platform/caller-info.ts +0 -152
  183. package/src/modules/common/os-platform/impl.ts +0 -91
  184. package/src/modules/common/os-platform/interface.ts +0 -16
  185. package/src/modules/common/os-platform/virtual-hid/index.ts +0 -12
  186. package/src/modules/common/os-platform/virtual-hid/linux.ts +0 -7
  187. package/src/modules/common/os-platform/virtual-hid/mac.ts +0 -150
  188. package/src/modules/common/os-platform/virtual-hid/windows.ts +0 -7
  189. package/src/modules/common/ssh-config/impl.ts +0 -130
  190. package/src/modules/common/ssh-config/interface.ts +0 -33
  191. package/src/modules/ssh-agent/index.ts +0 -13
  192. package/src/modules/ssh-agent/session/agent-notes.md +0 -210
  193. package/src/modules/ssh-agent/session/design.md +0 -2
  194. package/src/modules/ssh-agent/session/html-refactor.md +0 -23
  195. package/src/modules/ssh-agent/session/impl.ts +0 -328
  196. package/src/modules/ssh-agent/session/interface-rpc.ts +0 -24
  197. package/src/modules/ssh-agent/session/interface.ts +0 -62
  198. package/src/modules/ssh-agent/session/passkey-prf-page.ts +0 -224
  199. package/src/modules/ssh-agent/session/prf-flow.ts +0 -152
  200. package/src/modules/ssh-agent/ssh-agent/impl.ts +0 -136
  201. package/src/modules/ssh-agent/ssh-agent/interface.ts +0 -9
  202. package/src/scripts/build.ts +0 -504
  203. package/src/scripts/check-npm-version.ts +0 -7
  204. package/src/scripts/command-launcher.js.ejs +0 -168
  205. package/src/scripts/kill-existing-agent.ts +0 -22
  206. package/src/scripts/publish.ts +0 -47
  207. package/src/scripts/windows-bin-shims.md +0 -1104
@@ -1,109 +0,0 @@
1
- import { Effect, Layer, Match, Option, pipe, Data, FileSystem, Schedule, Result } from "effect";
2
- import { effunct, implementing } from "effective-modules";
3
- import { FetchHttpClient } from "effect/unstable/http";
4
- import { RpcClient, RpcSerialization } from "effect/unstable/rpc";
5
- import { AgentRpcGroup } from "@/modules/ssh-agent/session/interface-rpc";
6
- import { cliModules } from "..";
7
- import { AgentClientError } from "./interface";
8
- import { AGENT_CMD_PATH, AGENT_PID_FILE_PATH, AGENT_PORT_FILE_PATH, AGENT_SOCK_FILE_PATH, CURRENT_VERSION } from "@/common/constants";
9
- import { readFileSync, rmSync } from "node:fs";
10
- import { log } from "@/common/log";
11
- function makeAgentClientLayer(port) {
12
- return pipe(RpcClient.layerProtocolHttp({ url: `http://localhost:${port}/rpc` }), Layer.provideMerge(RpcSerialization.layerJson), Layer.provideMerge(FetchHttpClient.layer));
13
- }
14
- class NoResponseError extends Data.TaggedError("NoResponseError") {
15
- toString() { return "No response from agent."; }
16
- }
17
- class NonMatchingVersionError extends Data.TaggedError("NonMatchingVersionError") {
18
- toString() {
19
- return `Agent running but with mismatched version ${this.agentVersion} compared to CLI version ${this.cliVersion}`;
20
- }
21
- }
22
- export class AgentClientImpl extends implementing(cliModules.AgentClient).uses(FileSystem.FileSystem) {
23
- *readPortFromFile() {
24
- const result = yield* pipe(this.getDependency(FileSystem.FileSystem).readFileString(AGENT_PORT_FILE_PATH), Effect.result);
25
- if (Result.isFailure(result))
26
- return Option.none();
27
- const port = parseInt(result.success.trim());
28
- if (isNaN(port) || port <= 0 || port > 65535) {
29
- log(`Read out of bounds port ${port}`);
30
- return Option.none();
31
- }
32
- return Option.some(port);
33
- }
34
- *pingAtPort(port) {
35
- yield* Effect.scoped(Effect.gen(function* () {
36
- const client = yield* RpcClient.make(AgentRpcGroup);
37
- const { version } = yield* pipe(client.GetVersion({}), Effect.catchTag("RpcClientError", () => new NoResponseError()));
38
- if (version !== CURRENT_VERSION)
39
- yield* new NonMatchingVersionError({ cliVersion: CURRENT_VERSION, agentVersion: version });
40
- })).pipe(Effect.provide(makeAgentClientLayer(port)));
41
- }
42
- *ping() {
43
- const portOption = yield* effunct(this.readPortFromFile)();
44
- if (Option.isNone(portOption))
45
- return yield* new NoResponseError();
46
- const port = portOption.value;
47
- yield* effunct(this.pingAtPort)(port);
48
- return { port };
49
- }
50
- *waitForPidFile(expectedPid) {
51
- const fs = this.getDependency(FileSystem.FileSystem);
52
- yield* pipe(Effect.retry(pipe(fs.readFileString(AGENT_PID_FILE_PATH), Effect.catchTag("PlatformError", () => Effect.fail("pid file not yet written")), Effect.flatMap(content => {
53
- const pid = parseInt(content.trim());
54
- return pid === expectedPid
55
- ? Effect.void
56
- : Effect.fail(`PID mismatch: expected ${expectedPid}, got ${pid}`);
57
- })), Schedule.spaced("50 millis")), Effect.timeout("5 seconds"), Effect.mapError(() => "Agent did not start within 5 seconds"));
58
- }
59
- *startAgent() {
60
- const proc = Bun.spawn([AGENT_CMD_PATH], { stdout: "ignore", stderr: "ignore" });
61
- yield* effunct(this.waitForPidFile)(proc.pid);
62
- const { port } = yield* effunct(this.ping)();
63
- log(`Started agent at PID ${proc.pid}`);
64
- return { pid: proc.pid, port };
65
- }
66
- *killIfRunning() {
67
- try {
68
- // Throws if file missing
69
- const pidFileContent = readFileSync(AGENT_PID_FILE_PATH, "utf-8");
70
- const PID = parseInt(pidFileContent.trim());
71
- // If doesn't exist, below line throws
72
- process.kill(PID, 0);
73
- log(`Killing agent on PID ${PID}`);
74
- process.kill(PID, "SIGTERM");
75
- yield* Effect.sleep(500);
76
- }
77
- catch { }
78
- try {
79
- rmSync(AGENT_PID_FILE_PATH);
80
- }
81
- catch { }
82
- try {
83
- rmSync(AGENT_PORT_FILE_PATH);
84
- }
85
- catch { }
86
- try {
87
- rmSync(AGENT_SOCK_FILE_PATH);
88
- }
89
- catch { }
90
- }
91
- *ensureRunning() {
92
- const pingResult = yield* pipe(effunct(this.ping)(), Effect.result);
93
- if (Result.isSuccess(pingResult))
94
- return pingResult.success;
95
- log(pingResult.failure.toString());
96
- yield* Match.value(pingResult.failure).pipe(Match.tag("NonMatchingVersionError", () => effunct(this.killIfRunning)()), Match.tag("NoResponseError", () => effunct(this.killIfRunning)()), Match.exhaustive);
97
- return yield* pipe(effunct(this.startAgent)(), Effect.mapError(err => typeof err === "string" ?
98
- err :
99
- `Failed to start agent due to ${err.name}: ${err.toString()}`));
100
- }
101
- *usingClient(use) {
102
- const { port } = yield* pipe(effunct(this.ensureRunning)(), Effect.mapError(reason => new AgentClientError.ClientError({ reason })));
103
- return yield* pipe(Effect.scoped(Effect.gen(function* () {
104
- const client = yield* RpcClient.make(AgentRpcGroup);
105
- return yield* use(client);
106
- })), Effect.provide(makeAgentClientLayer(port)), Effect.mapError(e => new AgentClientError.UsageError({ cause: e })));
107
- }
108
- }
109
- //# sourceMappingURL=impl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"impl.js","sourceRoot":"","sources":["../../../../../../../src/modules/cli/agent-client/impl.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import { Data } from "effect";
2
- export var AgentClientError;
3
- (function (AgentClientError) {
4
- class UsageError extends Data.TaggedError("AgentClientUsageError") {
5
- }
6
- AgentClientError.UsageError = UsageError;
7
- class ClientError extends Data.TaggedError("AgentClientError") {
8
- }
9
- AgentClientError.ClientError = ClientError;
10
- })(AgentClientError || (AgentClientError = {}));
11
- //# sourceMappingURL=interface.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../../../../../src/modules/cli/agent-client/interface.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAI9B,MAAM,KAAW,gBAAgB,CAGhC;AAHD,WAAiB,gBAAgB;IAC/B,MAAa,UAAc,SAAQ,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAwB;KAAG;IAAzF,2BAAU,aAA+E,CAAA;IACtG,MAAa,WAAY,SAAQ,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAA8B;KAAG;IAAxF,4BAAW,cAA6E,CAAA;AACvG,CAAC,EAHgB,gBAAgB,KAAhB,gBAAgB,QAGhC"}
@@ -1,124 +0,0 @@
1
- import { implementing } from "effective-modules";
2
- import { cliModules } from "..";
3
- import { commonModules } from "@/modules/common";
4
- import { $ } from 'bun';
5
- import { Effect, Option, pipe } from "effect";
6
- import { existsSync } from "node:fs";
7
- import { resolve } from "node:path";
8
- import { SSH_KEYGEN_CMD_PATH, STANDARD_REMOTE_PREFIX } from "@/common/constants";
9
- import { Gitmodules } from "./submodule/gitmodules";
10
- import { readGitState } from "./submodule/git-state";
11
- import { fixGitConfig, fixModuleDirs, fixIndexGitlinks } from "./submodule/fix";
12
- import { printSyncState, printFixes } from "./submodule/printer";
13
- export class GitImpl extends implementing(cliModules.Git).uses(commonModules.OSPlatform, commonModules.SSHConfig) {
14
- parseOwnerRepo(remote) {
15
- const sshMatch = remote.match(/^git@[^:]+:([^/]+)\/(.+?)(?:\.git)?$/);
16
- if (sshMatch)
17
- return Effect.succeed({ owner: sshMatch[1], repo: sshMatch[2] });
18
- const httpsMatch = remote.match(/^https?:\/\/[^/]+\/([^/]+)\/(.+?)(?:\.git)?$/);
19
- if (httpsMatch)
20
- return Effect.succeed({ owner: httpsMatch[1], repo: httpsMatch[2] });
21
- return Effect.fail(`Cannot parse owner/repo from remote: ${remote}`);
22
- }
23
- *resolveOwnerAndRepo(maybeOwnerAndRepo) {
24
- if (Option.isSome(maybeOwnerAndRepo)) {
25
- const parts = maybeOwnerAndRepo.value.split('/');
26
- const [owner, repo] = parts;
27
- if (parts.length !== 2 || !owner || !repo)
28
- return yield* Effect.fail(`Cannot parse remote error: Expected "owner/repo", got "${maybeOwnerAndRepo.value}"`);
29
- return { owner, repo };
30
- }
31
- if (!(yield* this.isGitRepository())) {
32
- yield* Effect.fail(`not in git repo: Current directory is not a git repository`);
33
- }
34
- const remoteOption = yield* this.getRemoteOrigin();
35
- if (Option.isNone(remoteOption)) {
36
- return yield* Effect.fail(`no remote origin: No remote.origin.url — pass owner/repo as argument to clone instead`);
37
- }
38
- return yield* this.parseOwnerRepo(remoteOption.value);
39
- }
40
- *isGitRepository() {
41
- return yield* pipe(Effect.tryPromise(async () => {
42
- await $ `git rev-parse --is-inside-work-tree`.quiet();
43
- return true;
44
- }), Effect.catchTag("UnknownError", () => Effect.succeed(false)));
45
- }
46
- *getRemoteOrigin() {
47
- return yield* pipe(Effect.tryPromise(async () => {
48
- return Option.some((await $ `git config --get remote.origin.url`.quiet()).text().trim());
49
- }), Effect.catchTag("UnknownError", () => Effect.succeed(Option.none())));
50
- }
51
- *clone(owner, repo) {
52
- const result = Bun.spawnSync(['git', 'clone', '--recurse-submodules', `${STANDARD_REMOTE_PREFIX}${owner}/${repo}.git`], { stdout: 'inherit', stderr: 'inherit' });
53
- if (result.exitCode !== 0)
54
- return yield* Effect.fail(`git clone failed with exit code ${result.exitCode}`);
55
- process.chdir(`./${repo}`);
56
- }
57
- *setLocalConfig(key, value) {
58
- yield* Effect.tryPromise({
59
- try: async () => { await $ `git config --local ${key} ${value}`.quiet(); },
60
- catch: (e) => `git config ${key}: ${e instanceof Error ? e.message : String(e)}`,
61
- });
62
- }
63
- *configureRepo({ dir, remoteURL, user, pubkeyPath }) {
64
- yield* Effect.log(`Configuring ${dir}`);
65
- yield* Effect.tryPromise({
66
- try: async () => {
67
- const configs = [
68
- ['remote.origin.url', remoteURL],
69
- ['user.name', user.name],
70
- ['user.email', user.email],
71
- ['user.signingkey', pubkeyPath],
72
- ['gpg.format', 'ssh'],
73
- ['gpg.ssh.program', SSH_KEYGEN_CMD_PATH],
74
- ['commit.gpgsign', 'true'],
75
- ['tag.gpgsign', 'true'],
76
- ];
77
- for (const [k, v] of configs) {
78
- const r = Bun.spawnSync(['git', 'config', '--local', k, v], { cwd: dir, stdout: 'pipe', stderr: 'pipe' });
79
- if (r.exitCode !== 0) {
80
- const err = new TextDecoder().decode(r.stderr);
81
- throw new Error(`git config ${k} failed: ${err.trim()}`);
82
- }
83
- }
84
- },
85
- catch: (e) => e instanceof Error ? e.message : String(e),
86
- });
87
- }
88
- *syncSubmoduleState(repoRoot, topLevelRoot) {
89
- const gitmodules = yield* Gitmodules.fromRepoRoot(repoRoot);
90
- if (gitmodules.list.length === 0)
91
- return gitmodules;
92
- const submodulePaths = gitmodules.list.map(m => m.path);
93
- const state = yield* readGitState(repoRoot, submodulePaths);
94
- printSyncState(gitmodules, state);
95
- const fixResults = yield* Effect.all([
96
- fixGitConfig(repoRoot, gitmodules),
97
- fixModuleDirs(repoRoot, gitmodules, state.moduleDirs, state.orphanModuleDirs, topLevelRoot),
98
- fixIndexGitlinks(repoRoot, gitmodules, state.index),
99
- ], { concurrency: "unbounded" });
100
- printFixes(fixResults.flat());
101
- return gitmodules;
102
- }
103
- *setupRepo(input) {
104
- yield* this.setupRepoAt(input, input.dir);
105
- }
106
- *setupRepoAt(input, topLevelRoot) {
107
- yield* this.configureRepo(input);
108
- if (!existsSync(resolve(input.dir, '.gitmodules')))
109
- return;
110
- const gitmodules = yield* this.syncSubmoduleState(input.dir, topLevelRoot);
111
- for (const m of gitmodules.list) {
112
- const subDir = resolve(input.dir, m.path);
113
- if (!existsSync(subDir))
114
- continue;
115
- yield* this.setupRepoAt({
116
- dir: subDir,
117
- remoteURL: m.url,
118
- user: input.user,
119
- pubkeyPath: input.pubkeyPath
120
- }, topLevelRoot);
121
- }
122
- }
123
- }
124
- //# sourceMappingURL=impl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"impl.js","sourceRoot":"","sources":["../../../../../../../src/modules/cli/git/impl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjE,MAAM,OAAO,OAAQ,SAAQ,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC;IACvG,cAAc,CAAC,MAAc;QACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtE,IAAI,QAAQ;YAAE,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC;QACjF,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAChF,IAAI,UAAU;YAAE,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC;QACvF,OAAO,MAAM,CAAC,IAAI,CAAC,wCAAwC,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,CAAC,mBAAmB,CAAC,iBAAwC;QAC3D,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjD,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;YAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;gBACvC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,0DAA0D,iBAAiB,CAAC,KAAK,GAAG,CAAC,CAAC;YAClH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QACnD,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;QACrH,CAAC;QAED,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IACD,CAAC,eAAe;QACd,OAAO,KAAK,CAAC,CAAC,IAAI,CAChB,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,CAAC,CAAA,qCAAqC,CAAC,KAAK,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,EACF,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAC7D,CAAC;IACJ,CAAC;IACD,CAAC,eAAe;QACd,OAAO,KAAK,CAAC,CAAC,IAAI,CAChB,MAAM,CAAC,UAAU,CAAC,KAAK,IAAG,EAAE;YAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAA,oCAAoC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1F,CAAC,CAAC,EACF,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CACrE,CAAA;IACH,CAAC;IACD,CAAC,KAAK,CAAC,KAAa,EAAE,IAAY;QAChC,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,sBAAsB,EAAE,GAAG,sBAAsB,GAAG,KAAK,IAAI,IAAI,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAClK,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;YACvB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7B,CAAC;IACD,CAAC,cAAc,CAAC,GAAW,EAAE,KAAa;QACxC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;YACvB,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,CAAC,CAAA,sBAAsB,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACzE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,GAAG,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;SACjF,CAAC,CAAC;IACL,CAAC;IACO,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAkB;QACzE,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;QACxC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;YACvB,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,MAAM,OAAO,GAAuB;oBAClC,CAAC,mBAAmB,EAAE,SAAS,CAAC;oBAChC,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;oBACxB,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC;oBAC1B,CAAC,iBAAiB,EAAE,UAAU,CAAC;oBAC/B,CAAC,YAAY,EAAE,KAAK,CAAC;oBACrB,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;oBACxC,CAAC,gBAAgB,EAAE,MAAM,CAAC;oBAC1B,CAAC,aAAa,EAAE,MAAM,CAAC;iBACxB,CAAC;gBACF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;oBAC7B,MAAM,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;oBAC1G,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;wBACrB,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBAC/C,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,YAAY,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC3D,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;SACzD,CAAC,CAAC;IACL,CAAC;IACO,CAAC,kBAAkB,CAAC,QAAgB,EAAE,YAAoB;QAChE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC;QACpD,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC5D,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAClC;YACE,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC;YAClC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,gBAAgB,EAAE,YAAY,CAAC;YAC3F,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC;SACpD,EACD,EAAE,WAAW,EAAE,WAAW,EAAE,CAC7B,CAAC;QACF,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9B,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,CAAC,SAAS,CAAC,KAAqB;QAC9B,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IACO,CAAC,WAAW,CAAC,KAAqB,EAAE,YAAoB;QAC9D,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAAE,OAAO;QAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAC3E,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,SAAS;YAClC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;gBACtB,GAAG,EAAE,MAAM;gBACX,SAAS,EAAE,CAAC,CAAC,GAAG;gBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,EAAE,YAAY,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;CACF"}
@@ -1,3 +0,0 @@
1
- import {} from "effective-modules";
2
- import { Option } from "effect";
3
- //# sourceMappingURL=interface.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../../../../../src/modules/cli/git/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC"}
@@ -1,257 +0,0 @@
1
- import { existsSync, statSync } from "node:fs";
2
- import { readFile, writeFile, rename, mkdir, rm } from "node:fs/promises";
3
- import { resolve, join, dirname, relative } from "node:path";
4
- import { Effect } from "effect";
5
- import { resolveGitDir } from "./resolve-git-dir";
6
- function parseConfigSubmoduleValues(content) {
7
- const entries = new Map();
8
- let current = null;
9
- for (const line of content.split("\n")) {
10
- const headerMatch = line.match(/^\[submodule "(.+)"\]$/);
11
- if (headerMatch) {
12
- current = {};
13
- entries.set(headerMatch[1], current);
14
- continue;
15
- }
16
- if (!current)
17
- continue;
18
- const kvMatch = line.match(/^\s+(\w+)\s*=\s*(.+)$/);
19
- if (!kvMatch)
20
- continue;
21
- const [, key, value] = kvMatch;
22
- if (key === "url" || key === "path")
23
- current[key] = value.trim();
24
- }
25
- return entries;
26
- }
27
- // Drops any stanza whose name isn't a valid submodule, is a stale duplicate, or
28
- // has url/path values that no longer match .gitmodules — so it can be re-added fresh.
29
- function removeExtraConfigSubmodules(content, modules) {
30
- const byName = new Map(modules.list.map((m) => [m.name, m]));
31
- const existingValues = parseConfigSubmoduleValues(content);
32
- const staleNames = new Set();
33
- for (const [name, values] of existingValues) {
34
- const m = byName.get(name);
35
- if (!m || values.url !== m.url || values.path !== m.path)
36
- staleNames.add(name);
37
- }
38
- const removed = [];
39
- const seen = new Set();
40
- const output = [];
41
- let dropping = false;
42
- for (const line of content.split("\n")) {
43
- const submoduleMatch = line.match(/^\[submodule "(.+)"\]$/);
44
- if (submoduleMatch) {
45
- const name = submoduleMatch[1];
46
- if (!staleNames.has(name) && !seen.has(name)) {
47
- seen.add(name);
48
- dropping = false;
49
- }
50
- else {
51
- removed.push(name);
52
- dropping = true;
53
- }
54
- }
55
- else if (/^\[/.test(line)) {
56
- dropping = false;
57
- }
58
- if (!dropping)
59
- output.push(line);
60
- }
61
- return { result: output.join("\n"), removed };
62
- }
63
- async function spawnGit(args, cwd) {
64
- const proc = Bun.spawn(["git", ...args], { cwd, stdout: "pipe", stderr: "pipe" });
65
- const code = await proc.exited;
66
- if (code !== 0) {
67
- const err = await new Response(proc.stderr).text();
68
- throw new Error(`git ${args.join(" ")} exited with code ${code}\n${err.trim()}`);
69
- }
70
- }
71
- export function fixGitConfig(repoRoot, modules) {
72
- return Effect.tryPromise({
73
- try: async () => {
74
- const gitDir = await resolveGitDir(repoRoot);
75
- const configPath = resolve(gitDir, "config");
76
- const content = await readFile(configPath, "utf8");
77
- const { result: afterRemoval, removed } = removeExtraConfigSubmodules(content, modules);
78
- const existingNames = new Set([...afterRemoval.matchAll(/^\[submodule "(.+)"\]$/gm)].map((m) => m[1]));
79
- const missing = modules.list.filter((m) => !existingNames.has(m.name));
80
- let result = afterRemoval;
81
- for (const m of missing) {
82
- if (!result.endsWith("\n"))
83
- result += "\n";
84
- result += `[submodule "${m.name}"]\n\tactive = true\n\turl = ${m.url}\n\tpath = ${m.path}\n`;
85
- }
86
- if (removed.length === 0 && missing.length === 0)
87
- return [];
88
- await writeFile(configPath, result, "utf8");
89
- return [
90
- ...removed.map((name) => ({ location: [".git", "config", name], action: "deleted" })),
91
- ...missing.map((m) => ({ location: [".git", "config", m.name], action: "synced" })),
92
- ];
93
- },
94
- catch: (e) => e instanceof Error ? e.message : String(e),
95
- });
96
- }
97
- const GIT_MODULES_MARKER = ".git/modules/";
98
- // A stale redirect's leading "../" prefix can be wrong after a path rename, but the
99
- // suffix starting at ".git/modules/" always describes a location under the single
100
- // top-level .git, at any nesting depth — so anchor on that marker instead of trusting
101
- // the relative resolution.
102
- function recoverStaleGitDirTarget(redirectContent, topLevelRoot) {
103
- const match = redirectContent.match(/^gitdir:\s*(.+)$/m);
104
- if (!match)
105
- return undefined;
106
- const idx = match[1].indexOf(GIT_MODULES_MARKER);
107
- if (idx === -1)
108
- return undefined;
109
- return resolve(topLevelRoot, match[1].slice(idx).trim());
110
- }
111
- // Moves existing git data into moduleGitDir instead of abandoning it, whether it's a
112
- // standalone clone's literal .git directory, or a redirect file (even a stale one
113
- // left over from a path rename) pointing at git data that still exists.
114
- async function migrateExistingGitDir(workingTreeDir, moduleGitDir, topLevelRoot) {
115
- const dotGit = join(workingTreeDir, ".git");
116
- if (!existsSync(dotGit))
117
- return false;
118
- if (statSync(dotGit).isDirectory()) {
119
- await mkdir(dirname(moduleGitDir), { recursive: true });
120
- await rename(dotGit, moduleGitDir);
121
- return true;
122
- }
123
- const content = await readFile(dotGit, "utf8");
124
- const target = recoverStaleGitDirTarget(content, topLevelRoot);
125
- if (!target || target === moduleGitDir || !existsSync(target))
126
- return false;
127
- await mkdir(dirname(moduleGitDir), { recursive: true });
128
- await rename(target, moduleGitDir);
129
- return true;
130
- }
131
- export function fixModuleDirs(repoRoot, modules, moduleDirs, orphanModuleDirs, topLevelRoot) {
132
- return Effect.tryPromise({
133
- try: async () => {
134
- const fixes = [];
135
- const modulesRoot = resolve(await resolveGitDir(repoRoot), "modules");
136
- // Establish each module's git dir (migrating existing data if any exists
137
- // anywhere) before the orphan cleanup below runs, so nothing real gets deleted
138
- // out from under a path rename.
139
- for (const m of modules.list) {
140
- const workingTreeDir = resolve(repoRoot, m.path);
141
- const moduleGitDir = join(modulesRoot, m.path);
142
- if (!existsSync(workingTreeDir))
143
- continue;
144
- const alreadyEstablished = existsSync(moduleGitDir);
145
- let freshlyCloned = false;
146
- if (!alreadyEstablished) {
147
- const migrated = await migrateExistingGitDir(workingTreeDir, moduleGitDir, topLevelRoot);
148
- if (migrated) {
149
- fixes.push({ location: [".git", "modules", ...m.path.split("/")], action: "synced", detail: "migrated" });
150
- }
151
- else {
152
- await mkdir(dirname(moduleGitDir), { recursive: true });
153
- await spawnGit(["clone", "--bare", m.url, moduleGitDir], repoRoot);
154
- fixes.push({ location: [".git", "modules", ...m.path.split("/")], action: "synced", detail: "initialized" });
155
- freshlyCloned = true;
156
- }
157
- }
158
- if (freshlyCloned) {
159
- const configFile = join(moduleGitDir, "config");
160
- const worktree = relative(moduleGitDir, workingTreeDir);
161
- await spawnGit(["config", "-f", configFile, "core.bare", "false"], repoRoot);
162
- await spawnGit(["config", "-f", configFile, "core.worktree", worktree], repoRoot);
163
- }
164
- // A bare clone (whether just made above, or left over from a prior buggy
165
- // run) never gets an index — populate it from HEAD whenever it's missing,
166
- // not only right after we ourselves created it.
167
- if (!existsSync(join(moduleGitDir, "index"))) {
168
- const headCheck = Bun.spawn(["git", "--git-dir", moduleGitDir, "rev-parse", "--verify", "HEAD"], { stdout: "ignore", stderr: "ignore" });
169
- if ((await headCheck.exited) !== 0)
170
- await spawnGit(["--git-dir", moduleGitDir, "fetch", "origin"], repoRoot);
171
- await spawnGit(["--git-dir", moduleGitDir, "read-tree", "HEAD"], repoRoot);
172
- fixes.push({ location: [".git", "modules", ...m.path.split("/")], action: "synced", detail: "populated index" });
173
- }
174
- // Always re-point the working tree's .git redirect — never assume an
175
- // existing file is already correct.
176
- const dotGit = join(workingTreeDir, ".git");
177
- const rel = relative(workingTreeDir, moduleGitDir);
178
- const desired = `gitdir: ${rel}\n`;
179
- const current = existsSync(dotGit) && !statSync(dotGit).isDirectory()
180
- ? await readFile(dotGit, "utf8")
181
- : undefined;
182
- if (current !== desired) {
183
- await writeFile(dotGit, desired, "utf8");
184
- fixes.push({ location: [...m.path.split("/"), ".git"], action: "synced" });
185
- }
186
- }
187
- const gmByPath = new Map(modules.list.map((m) => [m.path, m]));
188
- for (const d of moduleDirs) {
189
- const gm = gmByPath.get(d.relativePath);
190
- if (!gm && existsSync(join(modulesRoot, d.relativePath))) {
191
- await rm(join(modulesRoot, d.relativePath), { recursive: true, force: true });
192
- fixes.push({ location: [".git", "modules", ...d.relativePath.split("/")], action: "deleted" });
193
- }
194
- }
195
- for (const rel of orphanModuleDirs) {
196
- if (existsSync(join(modulesRoot, rel))) {
197
- await rm(join(modulesRoot, rel), { recursive: true, force: true });
198
- fixes.push({ location: [".git", "modules", ...rel.split("/")], action: "deleted" });
199
- }
200
- }
201
- for (const m of modules.list) {
202
- const moduleGitDir = join(modulesRoot, m.path);
203
- if (!existsSync(moduleGitDir))
204
- continue;
205
- const configFile = join(moduleGitDir, "config");
206
- const readConfig = (key) => Bun.spawn(["git", "config", "-f", configFile, key], { cwd: repoRoot, stdout: "pipe", stderr: "pipe" });
207
- const [currentUrl, currentWorktree] = await Promise.all([
208
- new Response(readConfig("remote.origin.url").stdout).text().then(t => t.trim()),
209
- new Response(readConfig("core.worktree").stdout).text().then(t => t.trim()),
210
- ]);
211
- const worktree = relative(moduleGitDir, resolve(repoRoot, m.path));
212
- if (currentUrl !== m.url) {
213
- await spawnGit(["config", "-f", configFile, "remote.origin.url", m.url], repoRoot);
214
- fixes.push({ location: [".git", "modules", ...m.path.split("/"), "config"], action: "synced", detail: "remote.origin.url" });
215
- }
216
- if (currentWorktree !== worktree) {
217
- await spawnGit(["config", "-f", configFile, "core.worktree", worktree], repoRoot);
218
- fixes.push({ location: [".git", "modules", ...m.path.split("/"), "config"], action: "synced", detail: "core.worktree" });
219
- }
220
- }
221
- return fixes;
222
- },
223
- catch: (e) => e instanceof Error ? e.message : String(e),
224
- });
225
- }
226
- export function fixIndexGitlinks(repoRoot, modules, currentIndex) {
227
- return Effect.tryPromise({
228
- try: async () => {
229
- const currentShas = new Map(currentIndex.map((e) => [e.path, e.commit]));
230
- const validPaths = new Set(modules.list.map((m) => m.path));
231
- const fixes = [];
232
- for (const entry of currentIndex) {
233
- if (!validPaths.has(entry.path)) {
234
- await spawnGit(["update-index", "--force-remove", entry.path], repoRoot);
235
- fixes.push({ location: [".git", "index"], action: "deleted", detail: entry.path });
236
- }
237
- }
238
- for (const m of modules.list) {
239
- const workingTree = resolve(repoRoot, m.path);
240
- if (!existsSync(workingTree))
241
- continue;
242
- const shaProc = Bun.spawn(["git", "rev-parse", "HEAD"], { cwd: workingTree, stdout: "pipe", stderr: "pipe" });
243
- const sha = (await new Response(shaProc.stdout).text()).trim();
244
- if (!/^[0-9a-f]{40}$/.test(sha))
245
- continue;
246
- const current = currentShas.get(m.path);
247
- await spawnGit(["update-index", "--add", "--cacheinfo", `160000,${sha},${m.path}`], repoRoot);
248
- if (current !== sha) {
249
- fixes.push({ location: [".git", "index"], action: "synced", detail: `${m.path}: ${sha.slice(0, 8)}` });
250
- }
251
- }
252
- return fixes;
253
- },
254
- catch: (e) => e instanceof Error ? e.message : String(e),
255
- });
256
- }
257
- //# sourceMappingURL=fix.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix.js","sourceRoot":"","sources":["../../../../../../../../src/modules/cli/git/submodule/fix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAQlD,SAAS,0BAA0B,CAAC,OAAe;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2C,CAAC;IACnE,IAAI,OAAO,GAA2C,IAAI,CAAC;IAE3D,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACzD,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,CAAC;YACtC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC;QAC/B,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,KAAM,CAAC,IAAI,EAAE,CAAC;IACpE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAChF,sFAAsF;AACtF,SAAS,2BAA2B,CAAC,OAAe,EAAE,OAAmB;IACvE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,cAAc,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAE3D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5D,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAE,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACf,QAAQ,GAAG,KAAK,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAc,EAAE,GAAW;IACjD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;IAC/B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,OAAmB;IAChE,OAAO,MAAM,CAAC,UAAU,CAAC;QACvB,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,2BAA2B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAExF,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CACzE,CAAC;YACF,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAEvE,IAAI,MAAM,GAAG,YAAY,CAAC;YAC1B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,MAAM,IAAI,IAAI,CAAC;gBAC3C,MAAM,IAAI,eAAe,CAAC,CAAC,IAAI,gCAAgC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC;YAC/F,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC5D,MAAM,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5C,OAAO;gBACL,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAC,CAAC;gBAC9F,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAiB,EAAE,CAAC,CAAC;aAC7F,CAAC;QACJ,CAAC;QACD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KACzD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAE3C,oFAAoF;AACpF,kFAAkF;AAClF,sFAAsF;AACtF,2BAA2B;AAC3B,SAAS,wBAAwB,CAAC,eAAuB,EAAE,YAAoB;IAC7E,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAClD,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,qFAAqF;AACrF,kFAAkF;AAClF,wEAAwE;AACxE,KAAK,UAAU,qBAAqB,CAAC,cAAsB,EAAE,YAAoB,EAAE,YAAoB;IACrG,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAEtC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACnC,MAAM,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,YAAY,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5E,MAAM,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,MAAM,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,OAAmB,EACnB,UAA2B,EAC3B,gBAA0B,EAC1B,YAAoB;IAEpB,OAAO,MAAM,CAAC,UAAU,CAAC;QACvB,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,KAAK,GAAU,EAAE,CAAC;YACxB,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,aAAa,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;YAEtE,yEAAyE;YACzE,+EAA+E;YAC/E,gCAAgC;YAChC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC7B,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBACjD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;oBAAE,SAAS;gBAE1C,MAAM,kBAAkB,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;gBACpD,IAAI,aAAa,GAAG,KAAK,CAAC;gBAE1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACxB,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,cAAc,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;oBACzF,IAAI,QAAQ,EAAE,CAAC;wBACb,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;oBAC5G,CAAC;yBAAM,CAAC;wBACN,MAAM,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;wBACxD,MAAM,QAAQ,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;wBACnE,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;wBAC7G,aAAa,GAAG,IAAI,CAAC;oBACvB,CAAC;gBACH,CAAC;gBAED,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;oBAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;oBACxD,MAAM,QAAQ,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAC7E,MAAM,QAAQ,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACpF,CAAC;gBAED,yEAAyE;gBACzE,0EAA0E;gBAC1E,gDAAgD;gBAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;oBAC7C,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACzI,IAAI,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;wBAAE,MAAM,QAAQ,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAC7G,MAAM,QAAQ,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAC3E,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBACnH,CAAC;gBAED,qEAAqE;gBACrE,oCAAoC;gBACpC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;gBAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;gBACnD,MAAM,OAAO,GAAG,WAAW,GAAG,IAAI,CAAC;gBACnC,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;oBACnE,CAAC,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;oBAChC,CAAC,CAAC,SAAS,CAAC;gBACd,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;oBACxB,MAAM,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;oBACzC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAE/D,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC3B,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBACxC,IAAI,CAAC,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;oBACzD,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC9E,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBACjG,CAAC;YACH,CAAC;YAED,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;gBACnC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;oBACvC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnE,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBACtF,CAAC;YACH,CAAC;YAED,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;oBAAE,SAAS;gBACxC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;gBAEhD,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE,CACjC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAEzG,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACtD,IAAI,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC/E,IAAI,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAC5E,CAAC,CAAC;gBAEH,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAEnE,IAAI,UAAU,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;oBACzB,MAAM,QAAQ,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;oBACnF,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;gBAC/H,CAAC;gBACD,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;oBACjC,MAAM,QAAQ,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAClF,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;gBAC3H,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KACzD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,OAAmB,EACnB,YAA4B;IAE5B,OAAO,MAAM,CAAC,UAAU,CAAC;QACvB,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAU,EAAE,CAAC;YAExB,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;gBACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChC,MAAM,QAAQ,CAAC,CAAC,cAAc,EAAE,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;oBACzE,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC;YAED,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;oBAAE,SAAS;gBAEvC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC9G,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAE1C,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,QAAQ,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAC9F,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;oBACpB,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzG,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KACzD,CAAC,CAAC;AACL,CAAC"}