ph-cmd 5.0.0-staging.9 → 5.0.1-staging.10

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 (85) hide show
  1. package/README.md +7 -2
  2. package/dist/src/cli.js +12 -0
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/commands/__tests__/update.test.js.map +1 -1
  5. package/dist/src/commands/__tests__/use.test.js +43 -24
  6. package/dist/src/commands/__tests__/use.test.js.map +1 -1
  7. package/dist/src/commands/checkout.d.ts +9 -0
  8. package/dist/src/commands/checkout.d.ts.map +1 -0
  9. package/dist/src/commands/checkout.js +37 -0
  10. package/dist/src/commands/checkout.js.map +1 -0
  11. package/dist/src/commands/forward.d.ts.map +1 -1
  12. package/dist/src/commands/forward.js +5 -2
  13. package/dist/src/commands/forward.js.map +1 -1
  14. package/dist/src/commands/help.d.ts +1 -1
  15. package/dist/src/commands/help.d.ts.map +1 -1
  16. package/dist/src/commands/index.d.ts +8 -1
  17. package/dist/src/commands/index.d.ts.map +1 -1
  18. package/dist/src/commands/index.js +3 -0
  19. package/dist/src/commands/index.js.map +1 -1
  20. package/dist/src/commands/init.d.ts +4 -2
  21. package/dist/src/commands/init.d.ts.map +1 -1
  22. package/dist/src/commands/init.js +44 -8
  23. package/dist/src/commands/init.js.map +1 -1
  24. package/dist/src/commands/setup-globals.d.ts +3 -2
  25. package/dist/src/commands/setup-globals.d.ts.map +1 -1
  26. package/dist/src/commands/setup-globals.js +2 -1
  27. package/dist/src/commands/setup-globals.js.map +1 -1
  28. package/dist/src/commands/update.d.ts +2 -2
  29. package/dist/src/commands/update.d.ts.map +1 -1
  30. package/dist/src/commands/update.js +1 -1
  31. package/dist/src/commands/update.js.map +1 -1
  32. package/dist/src/commands/use.d.ts +3 -3
  33. package/dist/src/commands/use.d.ts.map +1 -1
  34. package/dist/src/commands/use.js +2 -1
  35. package/dist/src/commands/use.js.map +1 -1
  36. package/dist/src/commands/version.d.ts +1 -1
  37. package/dist/src/commands/version.d.ts.map +1 -1
  38. package/dist/src/commands/version.js +1 -0
  39. package/dist/src/commands/version.js.map +1 -1
  40. package/dist/src/help.d.ts +5 -1
  41. package/dist/src/help.d.ts.map +1 -1
  42. package/dist/src/help.js +37 -4
  43. package/dist/src/help.js.map +1 -1
  44. package/dist/src/utils/constants.d.ts +53 -0
  45. package/dist/src/utils/constants.d.ts.map +1 -0
  46. package/dist/src/utils/constants.js +72 -0
  47. package/dist/src/utils/constants.js.map +1 -0
  48. package/dist/src/utils/dependencies.d.ts +4 -0
  49. package/dist/src/utils/dependencies.d.ts.map +1 -0
  50. package/dist/src/utils/dependencies.js +61 -0
  51. package/dist/src/utils/dependencies.js.map +1 -0
  52. package/dist/src/utils/help-formatting.d.ts +1 -1
  53. package/dist/src/utils/help-formatting.d.ts.map +1 -1
  54. package/dist/src/utils/help-formatting.js +1 -1
  55. package/dist/src/utils/help-formatting.js.map +1 -1
  56. package/dist/src/utils/help.d.ts +31 -0
  57. package/dist/src/utils/help.d.ts.map +1 -0
  58. package/dist/src/utils/help.js +72 -0
  59. package/dist/src/utils/help.js.map +1 -0
  60. package/dist/src/utils/index.d.ts +6 -130
  61. package/dist/src/utils/index.d.ts.map +1 -1
  62. package/dist/src/utils/index.js +5 -367
  63. package/dist/src/utils/index.js.map +1 -1
  64. package/dist/src/utils/package-manager.d.ts +34 -0
  65. package/dist/src/utils/package-manager.d.ts.map +1 -0
  66. package/dist/src/utils/package-manager.js +175 -0
  67. package/dist/src/utils/package-manager.js.map +1 -0
  68. package/dist/src/utils/types.d.ts +21 -0
  69. package/dist/src/utils/types.d.ts.map +1 -0
  70. package/dist/src/utils/types.js +2 -0
  71. package/dist/src/utils/types.js.map +1 -0
  72. package/dist/src/utils/validate-remote-drive-checkout.d.ts +7 -0
  73. package/dist/src/utils/validate-remote-drive-checkout.d.ts.map +1 -0
  74. package/dist/src/utils/validate-remote-drive-checkout.js +45 -0
  75. package/dist/src/utils/validate-remote-drive-checkout.js.map +1 -0
  76. package/dist/src/utils/validate-remote-drive.d.ts +6 -0
  77. package/dist/src/utils/validate-remote-drive.d.ts.map +1 -0
  78. package/dist/src/utils/validate-remote-drive.js +37 -0
  79. package/dist/src/utils/validate-remote-drive.js.map +1 -0
  80. package/dist/tsconfig.tsbuildinfo +1 -1
  81. package/package.json +10 -11
  82. package/dist/src/version.d.ts +0 -2
  83. package/dist/src/version.d.ts.map +0 -1
  84. package/dist/src/version.js +0 -3
  85. package/dist/src/version.js.map +0 -1
@@ -0,0 +1,175 @@
1
+ import { createProject, parseTag } from "@powerhousedao/codegen";
2
+ import { execSync } from "node:child_process";
3
+ import { existsSync } from "node:fs";
4
+ import path, { dirname } from "node:path";
5
+ import { HOME_DIR, PH_BIN_PATH, PH_GLOBAL_PROJECT_NAME, POWERHOUSE_CONFIG_FILE, POWERHOUSE_GLOBAL_DIR, packageManagers, } from "./constants.js";
6
+ export function resolvePackageManagerOptions(options) {
7
+ if (options.packageManager) {
8
+ return options.packageManager;
9
+ }
10
+ if (options.npm) {
11
+ return "npm";
12
+ }
13
+ if (options.pnpm) {
14
+ return "pnpm";
15
+ }
16
+ if (options.yarn) {
17
+ return "yarn";
18
+ }
19
+ if (options.bun) {
20
+ return "bun";
21
+ }
22
+ return undefined;
23
+ }
24
+ export function defaultPathValidation() {
25
+ return true;
26
+ }
27
+ export function isPowerhouseProject(dir) {
28
+ const powerhouseConfigPath = path.join(dir, POWERHOUSE_CONFIG_FILE);
29
+ return existsSync(powerhouseConfigPath);
30
+ }
31
+ export function findNodeProjectRoot(dir, pathValidation = defaultPathValidation) {
32
+ const packageJsonPath = path.join(dir, "package.json");
33
+ if (existsSync(packageJsonPath) && pathValidation(dir)) {
34
+ return dir;
35
+ }
36
+ const parentDir = dirname(dir);
37
+ if (parentDir === dir) {
38
+ return null;
39
+ }
40
+ return findNodeProjectRoot(parentDir, pathValidation);
41
+ }
42
+ export function getPackageManagerFromPath(dir) {
43
+ const lowerCasePath = dir.toLowerCase();
44
+ if (packageManagers.bun.globalPathRegexp.test(lowerCasePath)) {
45
+ return "bun";
46
+ }
47
+ else if (packageManagers.pnpm.globalPathRegexp.test(lowerCasePath)) {
48
+ return "pnpm";
49
+ }
50
+ else if (packageManagers.yarn.globalPathRegexp.test(lowerCasePath)) {
51
+ return "yarn";
52
+ }
53
+ return "npm";
54
+ }
55
+ export function getPackageManagerFromLockfile(dir) {
56
+ if (existsSync(path.join(dir, packageManagers.pnpm.lockfile))) {
57
+ return "pnpm";
58
+ }
59
+ else if (existsSync(path.join(dir, packageManagers.yarn.lockfile))) {
60
+ return "yarn";
61
+ }
62
+ else if (existsSync(path.join(dir, packageManagers.bun.lockfile))) {
63
+ return "bun";
64
+ }
65
+ return "npm";
66
+ }
67
+ export async function getProjectInfo(debug, generateGlobalProject = true) {
68
+ const currentPath = process.cwd();
69
+ if (debug) {
70
+ console.log(">>> currentPath:", currentPath);
71
+ }
72
+ const projectPath = findNodeProjectRoot(currentPath, isPowerhouseProject);
73
+ if (!projectPath) {
74
+ let available = existsSync(POWERHOUSE_GLOBAL_DIR);
75
+ if (generateGlobalProject) {
76
+ await createGlobalProject();
77
+ available = true;
78
+ }
79
+ return {
80
+ available,
81
+ isGlobal: true,
82
+ path: POWERHOUSE_GLOBAL_DIR,
83
+ };
84
+ }
85
+ return {
86
+ isGlobal: false,
87
+ available: true,
88
+ path: projectPath,
89
+ };
90
+ }
91
+ export function forwardPHCommand(packageManager, projectPath, args, debug, captureOutput = false) {
92
+ const manager = packageManagers[packageManager];
93
+ const command = manager.execCommand;
94
+ const execCommand = command.replace("{{arguments}}", args);
95
+ const commandOptions = { cwd: projectPath };
96
+ if (debug) {
97
+ console.log(">>> execCommand:", execCommand);
98
+ console.log(">>> commandOptions:", commandOptions);
99
+ console.log(">>> projectPath:", projectPath);
100
+ console.log(">>> packageManager:", packageManager);
101
+ }
102
+ if (captureOutput) {
103
+ // Capture output and return it
104
+ try {
105
+ return execSync(execCommand, {
106
+ stdio: "pipe",
107
+ encoding: "utf8",
108
+ ...commandOptions,
109
+ });
110
+ }
111
+ catch (error) {
112
+ throw new Error(`Failed to execute command: ${execCommand}\nError: ${error instanceof Error ? error.message : String(error)}`);
113
+ }
114
+ }
115
+ else {
116
+ // Original behavior - pipe directly to stdout/stderr
117
+ execSync(execCommand, {
118
+ stdio: "inherit",
119
+ ...commandOptions,
120
+ });
121
+ return "";
122
+ }
123
+ }
124
+ /**
125
+ * Recursively searches for a specific file by traversing up the directory tree.
126
+ * Starting from the given path, it checks each parent directory until it finds
127
+ * the target file or reaches the root directory.
128
+ *
129
+ * @param startPath - The absolute path of the directory to start searching from
130
+ * @param targetFile - The name of the file to search for (e.g., 'package.json', 'pnpm-workspace.yaml')
131
+ * @returns The absolute path of the directory containing the target file, or null if not found
132
+ *
133
+ * @example
134
+ * // Find the workspace root directory
135
+ * const workspaceRoot = findContainerDirectory('/path/to/project/src', 'pnpm-workspace.yaml');
136
+ *
137
+ * // Find the nearest package.json
138
+ * const packageDir = findContainerDirectory('/path/to/project/src/components', 'package.json');
139
+ */
140
+ export const findContainerDirectory = (startPath, targetFile) => {
141
+ const filePath = path.join(startPath, targetFile);
142
+ if (existsSync(filePath)) {
143
+ return startPath;
144
+ }
145
+ const parentDir = path.dirname(startPath);
146
+ //reached the root directory and haven't found the file
147
+ if (parentDir === startPath) {
148
+ return null;
149
+ }
150
+ return findContainerDirectory(parentDir, targetFile);
151
+ };
152
+ export const createGlobalProject = async (projectName, options = {}) => {
153
+ // check if the global project already exists
154
+ const globalProjectExists = existsSync(POWERHOUSE_GLOBAL_DIR);
155
+ if (globalProjectExists) {
156
+ console.log(`📦 Using global project: ${POWERHOUSE_GLOBAL_DIR}`);
157
+ return;
158
+ }
159
+ console.log("📦 Initializing global project...");
160
+ process.chdir(HOME_DIR);
161
+ try {
162
+ await createProject({
163
+ name: PH_GLOBAL_PROJECT_NAME,
164
+ interactive: false,
165
+ tag: parseTag(options),
166
+ packageManager: resolvePackageManagerOptions(options) ??
167
+ getPackageManagerFromPath(PH_BIN_PATH),
168
+ });
169
+ console.log(`🚀 Global project initialized successfully: ${POWERHOUSE_GLOBAL_DIR}`);
170
+ }
171
+ catch (error) {
172
+ console.error("❌ Failed to initialize the global project", error);
173
+ }
174
+ };
175
+ //# sourceMappingURL=package-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/utils/package-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export type ProjectInfo = {
2
+ isGlobal: boolean;
3
+ available: boolean;
4
+ path: string;
5
+ };
6
+ export type PackageManager = "npm" | "yarn" | "pnpm" | "bun";
7
+ export type PathValidation = (dir: string) => boolean;
8
+ export interface PackageJson {
9
+ dependencies?: Record<string, string>;
10
+ devDependencies?: Record<string, string>;
11
+ [key: string]: unknown;
12
+ }
13
+ export type GlobalProjectOptions = {
14
+ project?: string;
15
+ interactive?: boolean;
16
+ tag?: string;
17
+ dev?: boolean;
18
+ staging?: boolean;
19
+ packageManager?: string;
20
+ };
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export interface PackageDocumentResult {
2
+ isValid: boolean;
3
+ githubUrl?: string;
4
+ error?: string;
5
+ }
6
+ export declare function getPackageDocument(remoteDriveUrl: string): Promise<PackageDocumentResult>;
7
+ //# sourceMappingURL=validate-remote-drive-checkout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-remote-drive-checkout.d.ts","sourceRoot":"","sources":["../../../src/utils/validate-remote-drive-checkout.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,kBAAkB,CACtC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,qBAAqB,CAAC,CAoDhC"}
@@ -0,0 +1,45 @@
1
+ import { getVetraDocuments } from "@powerhousedao/common/utils";
2
+ export async function getPackageDocument(remoteDriveUrl) {
3
+ try {
4
+ const driveId = remoteDriveUrl.split("/").pop();
5
+ const url = new URL(remoteDriveUrl);
6
+ const graphqlEndpoint = `${url.protocol}//${url.host}/graphql`;
7
+ if (!driveId) {
8
+ return {
9
+ isValid: false,
10
+ error: "❌ Invalid remote drive URL: unable to extract drive ID",
11
+ };
12
+ }
13
+ const documents = await getVetraDocuments(graphqlEndpoint, driveId);
14
+ // Check if no documents found
15
+ if (documents.length === 0) {
16
+ return {
17
+ isValid: false,
18
+ error: "❌ No Vetra package documents found in the remote drive. Use 'ph init --remote-drive' to create a new project first.",
19
+ };
20
+ }
21
+ // Find documents with githubUrl
22
+ const documentsWithUrl = documents.filter((doc) => doc.githubUrl);
23
+ if (documentsWithUrl.length === 0) {
24
+ return {
25
+ isValid: false,
26
+ error: "❌ No GitHub URL configured in the Vetra package. Use 'ph init --remote-drive' to create a new project first.",
27
+ };
28
+ }
29
+ // Warn if multiple documents found
30
+ if (documents.length > 1) {
31
+ console.warn(`⚠️ Warning: Multiple Vetra package documents found (${documents.length}). Using first document with GitHub URL.`);
32
+ }
33
+ return {
34
+ isValid: true,
35
+ githubUrl: documentsWithUrl[0].githubUrl,
36
+ };
37
+ }
38
+ catch (error) {
39
+ return {
40
+ isValid: false,
41
+ error: `❌ Unable to fetch remote drive info: ${error instanceof Error ? error.message : String(error)}`,
42
+ };
43
+ }
44
+ }
45
+ //# sourceMappingURL=validate-remote-drive-checkout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-remote-drive-checkout.js","sourceRoot":"","sources":["../../../src/utils/validate-remote-drive-checkout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAQhE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,cAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;QACpC,MAAM,eAAe,GAAG,GAAG,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,UAAU,CAAC;QAE/D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,wDAAwD;aAChE,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAEpE,8BAA8B;QAC9B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EACH,qHAAqH;aACxH,CAAC;QACJ,CAAC;QAED,gCAAgC;QAChC,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAElE,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EACH,8GAA8G;aACjH,CAAC;QACJ,CAAC;QAED,mCAAmC;QACnC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CACV,wDAAwD,SAAS,CAAC,MAAM,0CAA0C,CACnH,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS;SACzC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,wCAAwC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACxG,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Validates a remote drive for initialization.
3
+ * Returns true if validation passes, false if it should stop execution.
4
+ */
5
+ export declare function validateRemoteDrive(remoteDriveUrl: string): Promise<boolean>;
6
+ //# sourceMappingURL=validate-remote-drive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-remote-drive.d.ts","sourceRoot":"","sources":["../../../src/utils/validate-remote-drive.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CA2ClB"}
@@ -0,0 +1,37 @@
1
+ import { getVetraDocuments } from "@powerhousedao/common/utils";
2
+ /**
3
+ * Validates a remote drive for initialization.
4
+ * Returns true if validation passes, false if it should stop execution.
5
+ */
6
+ export async function validateRemoteDrive(remoteDriveUrl) {
7
+ try {
8
+ // Parse driveId from URL
9
+ const driveId = remoteDriveUrl.split("/").pop();
10
+ if (!remoteDriveUrl || remoteDriveUrl.trim() === "") {
11
+ console.error("❌ Remote drive URL is required");
12
+ return false;
13
+ }
14
+ // Construct GraphQL endpoint from base URL
15
+ const url = new URL(remoteDriveUrl);
16
+ const graphqlEndpoint = `${url.protocol}//${url.host}/graphql`;
17
+ const documents = await getVetraDocuments(graphqlEndpoint, driveId);
18
+ if (documents.length === 0) {
19
+ console.error("❌ No vetra package document were found in the provided drive");
20
+ return false;
21
+ }
22
+ if (documents.length > 1) {
23
+ console.warn("⚠️ Multiple vetra package documents were found in the provided remote drive, this might be an error in your remote drive");
24
+ }
25
+ const hasGithubUrl = documents.some((doc) => doc.githubUrl);
26
+ if (hasGithubUrl) {
27
+ console.error("❌ The remote drive provided already has been configured with a github url, please use the checkout command instead: ph checkout --remote-drive <remote drive url>");
28
+ return false;
29
+ }
30
+ return true;
31
+ }
32
+ catch (error) {
33
+ console.error("❌ Unable to fetch remote drive info:", error);
34
+ return false;
35
+ }
36
+ }
37
+ //# sourceMappingURL=validate-remote-drive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-remote-drive.js","sourceRoot":"","sources":["../../../src/utils/validate-remote-drive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,cAAsB;IAEtB,IAAI,CAAC;QACH,yBAAyB;QACzB,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAEhD,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,2CAA2C;QAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;QACpC,MAAM,eAAe,GAAG,GAAG,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,UAAU,CAAC;QAE/D,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,eAAe,EAAE,OAAQ,CAAC,CAAC;QAErE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CACX,8DAA8D,CAC/D,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CACV,2HAA2H,CAC5H,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE5D,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CACX,mKAAmK,CACpK,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}