@workflow/cli 4.0.1-beta.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 (140) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +3 -0
  3. package/bin/run.js +5 -0
  4. package/dist/base.d.ts +8 -0
  5. package/dist/base.d.ts.map +1 -0
  6. package/dist/base.js +14 -0
  7. package/dist/base.js.map +1 -0
  8. package/dist/commands/build.d.ts +14 -0
  9. package/dist/commands/build.d.ts.map +1 -0
  10. package/dist/commands/build.js +78 -0
  11. package/dist/commands/build.js.map +1 -0
  12. package/dist/commands/cancel.d.ts +25 -0
  13. package/dist/commands/cancel.d.ts.map +1 -0
  14. package/dist/commands/cancel.js +30 -0
  15. package/dist/commands/cancel.js.map +1 -0
  16. package/dist/commands/dev.d.ts +11 -0
  17. package/dist/commands/dev.d.ts.map +1 -0
  18. package/dist/commands/dev.js +34 -0
  19. package/dist/commands/dev.js.map +1 -0
  20. package/dist/commands/init.d.ts +11 -0
  21. package/dist/commands/init.d.ts.map +1 -0
  22. package/dist/commands/init.js +42 -0
  23. package/dist/commands/init.js.map +1 -0
  24. package/dist/commands/inspect.d.ts +31 -0
  25. package/dist/commands/inspect.d.ts.map +1 -0
  26. package/dist/commands/inspect.js +209 -0
  27. package/dist/commands/inspect.js.map +1 -0
  28. package/dist/commands/start.d.ts +26 -0
  29. package/dist/commands/start.d.ts.map +1 -0
  30. package/dist/commands/start.js +43 -0
  31. package/dist/commands/start.js.map +1 -0
  32. package/dist/commands/validate.d.ts +12 -0
  33. package/dist/commands/validate.d.ts.map +1 -0
  34. package/dist/commands/validate.js +45 -0
  35. package/dist/commands/validate.js.map +1 -0
  36. package/dist/lib/builders/apply-swc-transform.d.ts +24 -0
  37. package/dist/lib/builders/apply-swc-transform.d.ts.map +1 -0
  38. package/dist/lib/builders/apply-swc-transform.js +38 -0
  39. package/dist/lib/builders/apply-swc-transform.js.map +1 -0
  40. package/dist/lib/builders/base-builder.d.ts +45 -0
  41. package/dist/lib/builders/base-builder.d.ts.map +1 -0
  42. package/dist/lib/builders/base-builder.js +466 -0
  43. package/dist/lib/builders/base-builder.js.map +1 -0
  44. package/dist/lib/builders/discover-entries-esbuild-plugin.d.ts +11 -0
  45. package/dist/lib/builders/discover-entries-esbuild-plugin.d.ts.map +1 -0
  46. package/dist/lib/builders/discover-entries-esbuild-plugin.js +84 -0
  47. package/dist/lib/builders/discover-entries-esbuild-plugin.js.map +1 -0
  48. package/dist/lib/builders/next-build.d.ts +11 -0
  49. package/dist/lib/builders/next-build.d.ts.map +1 -0
  50. package/dist/lib/builders/next-build.js +331 -0
  51. package/dist/lib/builders/next-build.js.map +1 -0
  52. package/dist/lib/builders/node-module-esbuild-plugin.d.ts +3 -0
  53. package/dist/lib/builders/node-module-esbuild-plugin.d.ts.map +1 -0
  54. package/dist/lib/builders/node-module-esbuild-plugin.js +24 -0
  55. package/dist/lib/builders/node-module-esbuild-plugin.js.map +1 -0
  56. package/dist/lib/builders/node-module-esbuild-plugin.test.d.ts +2 -0
  57. package/dist/lib/builders/node-module-esbuild-plugin.test.d.ts.map +1 -0
  58. package/dist/lib/builders/node-module-esbuild-plugin.test.js +128 -0
  59. package/dist/lib/builders/node-module-esbuild-plugin.test.js.map +1 -0
  60. package/dist/lib/builders/swc-esbuild-plugin.d.ts +12 -0
  61. package/dist/lib/builders/swc-esbuild-plugin.d.ts.map +1 -0
  62. package/dist/lib/builders/swc-esbuild-plugin.js +134 -0
  63. package/dist/lib/builders/swc-esbuild-plugin.js.map +1 -0
  64. package/dist/lib/builders/vercel-build-output-api.d.ts +9 -0
  65. package/dist/lib/builders/vercel-build-output-api.d.ts.map +1 -0
  66. package/dist/lib/builders/vercel-build-output-api.js +138 -0
  67. package/dist/lib/builders/vercel-build-output-api.js.map +1 -0
  68. package/dist/lib/builders/vercel-static.d.ts +7 -0
  69. package/dist/lib/builders/vercel-static.d.ts.map +1 -0
  70. package/dist/lib/builders/vercel-static.js +42 -0
  71. package/dist/lib/builders/vercel-static.js.map +1 -0
  72. package/dist/lib/builders/webhook-route.test.d.ts +2 -0
  73. package/dist/lib/builders/webhook-route.test.d.ts.map +1 -0
  74. package/dist/lib/builders/webhook-route.test.js +199 -0
  75. package/dist/lib/builders/webhook-route.test.js.map +1 -0
  76. package/dist/lib/config/log.d.ts +42 -0
  77. package/dist/lib/config/log.d.ts.map +1 -0
  78. package/dist/lib/config/log.js +95 -0
  79. package/dist/lib/config/log.js.map +1 -0
  80. package/dist/lib/config/types.d.ts +28 -0
  81. package/dist/lib/config/types.d.ts.map +1 -0
  82. package/dist/lib/config/types.js +9 -0
  83. package/dist/lib/config/types.js.map +1 -0
  84. package/dist/lib/config/workflow-config.d.ts +6 -0
  85. package/dist/lib/config/workflow-config.d.ts.map +1 -0
  86. package/dist/lib/config/workflow-config.js +16 -0
  87. package/dist/lib/config/workflow-config.js.map +1 -0
  88. package/dist/lib/inspect/auth.d.ts +20 -0
  89. package/dist/lib/inspect/auth.d.ts.map +1 -0
  90. package/dist/lib/inspect/auth.js +54 -0
  91. package/dist/lib/inspect/auth.js.map +1 -0
  92. package/dist/lib/inspect/env.d.ts +25 -0
  93. package/dist/lib/inspect/env.d.ts.map +1 -0
  94. package/dist/lib/inspect/env.js +158 -0
  95. package/dist/lib/inspect/env.js.map +1 -0
  96. package/dist/lib/inspect/flags.d.ts +14 -0
  97. package/dist/lib/inspect/flags.d.ts.map +1 -0
  98. package/dist/lib/inspect/flags.js +110 -0
  99. package/dist/lib/inspect/flags.js.map +1 -0
  100. package/dist/lib/inspect/output.d.ts +31 -0
  101. package/dist/lib/inspect/output.d.ts.map +1 -0
  102. package/dist/lib/inspect/output.js +899 -0
  103. package/dist/lib/inspect/output.js.map +1 -0
  104. package/dist/lib/inspect/pagination.d.ts +55 -0
  105. package/dist/lib/inspect/pagination.d.ts.map +1 -0
  106. package/dist/lib/inspect/pagination.js +193 -0
  107. package/dist/lib/inspect/pagination.js.map +1 -0
  108. package/dist/lib/inspect/run.d.ts +9 -0
  109. package/dist/lib/inspect/run.d.ts.map +1 -0
  110. package/dist/lib/inspect/run.js +30 -0
  111. package/dist/lib/inspect/run.js.map +1 -0
  112. package/dist/lib/inspect/setup.d.ts +10 -0
  113. package/dist/lib/inspect/setup.d.ts.map +1 -0
  114. package/dist/lib/inspect/setup.js +33 -0
  115. package/dist/lib/inspect/setup.js.map +1 -0
  116. package/dist/lib/inspect/stream.d.ts +7 -0
  117. package/dist/lib/inspect/stream.d.ts.map +1 -0
  118. package/dist/lib/inspect/stream.js +50 -0
  119. package/dist/lib/inspect/stream.js.map +1 -0
  120. package/dist/lib/inspect/terminal-utils.d.ts +36 -0
  121. package/dist/lib/inspect/terminal-utils.d.ts.map +1 -0
  122. package/dist/lib/inspect/terminal-utils.js +109 -0
  123. package/dist/lib/inspect/terminal-utils.js.map +1 -0
  124. package/dist/lib/inspect/vercel-api.d.ts +12 -0
  125. package/dist/lib/inspect/vercel-api.d.ts.map +1 -0
  126. package/dist/lib/inspect/vercel-api.js +89 -0
  127. package/dist/lib/inspect/vercel-api.js.map +1 -0
  128. package/dist/lib/inspect/vercel-link.d.ts +98 -0
  129. package/dist/lib/inspect/vercel-link.d.ts.map +1 -0
  130. package/dist/lib/inspect/vercel-link.js +268 -0
  131. package/dist/lib/inspect/vercel-link.js.map +1 -0
  132. package/dist/lib/inspect/web.d.ts +9 -0
  133. package/dist/lib/inspect/web.d.ts.map +1 -0
  134. package/dist/lib/inspect/web.js +305 -0
  135. package/dist/lib/inspect/web.js.map +1 -0
  136. package/dist/lib/runtime.d.ts +2 -0
  137. package/dist/lib/runtime.d.ts.map +1 -0
  138. package/dist/lib/runtime.js +5 -0
  139. package/dist/lib/runtime.js.map +1 -0
  140. package/package.json +67 -0
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Utilities for terminal display and environment detection
3
+ */
4
+ /**
5
+ * Check if running in CI environment
6
+ */
7
+ export const isCI = () => {
8
+ return !!(process.env.CI ||
9
+ process.env.CONTINUOUS_INTEGRATION ||
10
+ process.env.BUILD_NUMBER ||
11
+ process.env.GITHUB_ACTIONS ||
12
+ process.env.GITLAB_CI ||
13
+ process.env.CIRCLECI ||
14
+ process.env.TRAVIS ||
15
+ process.env.JENKINS_URL ||
16
+ process.env.BUILDKITE ||
17
+ process.env.TF_BUILD);
18
+ };
19
+ /**
20
+ * Check if running in an interactive terminal
21
+ */
22
+ export const isInteractive = () => {
23
+ return !isCI() && !!process.stdout.isTTY;
24
+ };
25
+ /**
26
+ * Get the current terminal width
27
+ */
28
+ export const getTerminalWidth = () => {
29
+ return process.stdout.columns || 80; // Default to 80 if not available
30
+ };
31
+ export const getDisplaySettings = (terminalWidth, withData, isRunTable = true) => {
32
+ // Base widths from actual measurements (without data fields)
33
+ const baseWidth = (isRunTable ? 160 : 190) + (withData ? 32 : 0);
34
+ // Initialize with defaults
35
+ const settings = {
36
+ showRelativeDates: !withData, // Disabled by default when withData is true
37
+ dataFieldWidth: 15,
38
+ abbreviateStatus: false,
39
+ namesTruncateLength: 40,
40
+ truncateIdsToLastChars: false,
41
+ hideCompletedAt: false,
42
+ };
43
+ // If terminal width is sufficient, return defaults
44
+ if (terminalWidth >= baseWidth) {
45
+ return settings;
46
+ }
47
+ // Progressive degradation avenues
48
+ let availableWidth = baseWidth;
49
+ // Disable relative dates (save 34 characters)
50
+ if (settings.showRelativeDates && terminalWidth < availableWidth) {
51
+ settings.showRelativeDates = false;
52
+ availableWidth -= 34;
53
+ }
54
+ // Reduce data field width if withData is set (save 20 characters from 2*10)
55
+ if (withData &&
56
+ settings.dataFieldWidth === 15 &&
57
+ terminalWidth < availableWidth) {
58
+ settings.dataFieldWidth = 5;
59
+ availableWidth -= 20;
60
+ }
61
+ // Abbreviate status and set header to "S" (save 8 characters)
62
+ if (terminalWidth < availableWidth) {
63
+ settings.abbreviateStatus = true;
64
+ availableWidth -= 8;
65
+ }
66
+ // Trim names from 40 to 20 characters (save 20 characters)
67
+ if (settings.namesTruncateLength === 40 && terminalWidth < availableWidth) {
68
+ settings.namesTruncateLength = 20;
69
+ availableWidth -= 20;
70
+ }
71
+ // Hide completedAt column (save 23 characters)
72
+ if (terminalWidth < availableWidth) {
73
+ settings.hideCompletedAt = true;
74
+ availableWidth -= 23;
75
+ }
76
+ // Trim IDs to last 4 characters
77
+ if (terminalWidth < availableWidth) {
78
+ settings.truncateIdsToLastChars = true;
79
+ availableWidth -= isRunTable ? 24 : 48;
80
+ }
81
+ return settings;
82
+ };
83
+ /**
84
+ * Format status with optional abbreviation
85
+ */
86
+ export const formatStatus = (status, abbreviated) => {
87
+ if (!abbreviated) {
88
+ return status;
89
+ }
90
+ // Abbreviate to first letter
91
+ const abbrevMap = {
92
+ running: 'R',
93
+ completed: 'C',
94
+ failed: 'F',
95
+ cancelled: 'X',
96
+ pending: 'P',
97
+ paused: 'W', // W for "waiting"
98
+ };
99
+ return abbrevMap[status.toLowerCase()] || status.charAt(0).toUpperCase();
100
+ };
101
+ /**
102
+ * Format ISO date without T and Z characters
103
+ */
104
+ export const formatISODate = (date) => {
105
+ const isoString = date.toISOString();
106
+ // Replace T with space and remove Z
107
+ return isoString.replace('T', ' ').replace('Z', '');
108
+ };
109
+ //# sourceMappingURL=terminal-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-utils.js","sourceRoot":"","sources":["../../../src/lib/inspect/terminal-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Fetch team information from Vercel API
3
+ * Timeout: 5 seconds - falls back to local UI if the request fails or times out
4
+ */
5
+ export declare function fetchTeamInfo(teamId: string, authToken: string): Promise<{
6
+ teamSlug: string;
7
+ } | null>;
8
+ /**
9
+ * Get the Vercel dashboard URL for workflows
10
+ */
11
+ export declare function getVercelDashboardUrl(teamSlug: string, projectName: string, resource: string, id?: string): string;
12
+ //# sourceMappingURL=vercel-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-api.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/vercel-api.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAwDtC;AAmCD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,EAAE,CAAC,EAAE,MAAM,GACV,MAAM,CAWR"}
@@ -0,0 +1,89 @@
1
+ import chalk from 'chalk';
2
+ import { logger } from '../config/log.js';
3
+ /**
4
+ * Fetch team information from Vercel API
5
+ * Timeout: 5 seconds - falls back to local UI if the request fails or times out
6
+ */
7
+ export async function fetchTeamInfo(teamId, authToken) {
8
+ try {
9
+ // Create an AbortController with a 5 second timeout
10
+ const controller = new AbortController();
11
+ const timeoutId = setTimeout(() => controller.abort(), 5000);
12
+ const response = await fetch(`https://api.vercel.com/v2/teams/${teamId}`, {
13
+ headers: {
14
+ Authorization: `Bearer ${authToken}`,
15
+ },
16
+ signal: controller.signal,
17
+ });
18
+ // Clear the timeout if the request completes successfully
19
+ clearTimeout(timeoutId);
20
+ if (response.status === 401 || response.status === 403) {
21
+ logger.error(chalk.red(`Authentication failed (${response.status}): Unable to access team information`));
22
+ logger.warn(chalk.yellow('\nPlease ensure you are logged in and have access to the team:'));
23
+ logger.warn(chalk.yellow(' 1. Run `vercel login` to authenticate'));
24
+ logger.warn(chalk.yellow(' 2. Run `vercel env pull` to sync environment variables'));
25
+ return null;
26
+ }
27
+ if (!response.ok) {
28
+ logger.debug(`Failed to fetch team info: ${response.status} ${response.statusText}`);
29
+ return null;
30
+ }
31
+ const team = (await response.json());
32
+ return {
33
+ teamSlug: team.slug,
34
+ };
35
+ }
36
+ catch (error) {
37
+ // Handle both timeout and other errors - fall back to local UI
38
+ if (error instanceof Error && error.name === 'AbortError') {
39
+ logger.debug('Vercel API request timed out after 5 seconds, falling back to local UI');
40
+ }
41
+ else {
42
+ logger.debug(`Error fetching team info: ${error}`);
43
+ }
44
+ return null;
45
+ }
46
+ }
47
+ // /**
48
+ // * Check if the Vercel dashboard workflows page is available
49
+ // */
50
+ // export async function checkVercelDashboardAvailable(
51
+ // teamSlug: string,
52
+ // projectName: string,
53
+ // authToken: string
54
+ // ): Promise<boolean> {
55
+ // try {
56
+ // const dashboardUrl = `https://vercel.com/${teamSlug}/${projectName}/ai/workflows`;
57
+ // logger.debug(`Checking Vercel dashboard availability: ${dashboardUrl}`);
58
+ // const response = await fetch(dashboardUrl, {
59
+ // method: 'HEAD',
60
+ // redirect: 'follow',
61
+ // headers: {
62
+ // Authorization: `Bearer ${authToken}`,
63
+ // },
64
+ // });
65
+ // // Consider 2xx and 3xx as success
66
+ // const isAvailable = response.status >= 200 && response.status < 400;
67
+ // logger.debug(
68
+ // `Dashboard check result: ${response.status} - ${isAvailable ? 'available' : 'not available'}`
69
+ // );
70
+ // return isAvailable;
71
+ // } catch (error) {
72
+ // logger.debug(`Error checking dashboard availability: ${error}`);
73
+ // return false;
74
+ // }
75
+ // }
76
+ /**
77
+ * Get the Vercel dashboard URL for workflows
78
+ */
79
+ export function getVercelDashboardUrl(teamSlug, projectName, resource, id) {
80
+ let url = `https://vercel.com/${teamSlug}/${projectName}/ai/workflows`;
81
+ // Add resource-specific path segments if needed
82
+ if (id) {
83
+ // For specific resources with IDs, we can add them to the URL
84
+ // The dashboard should handle these
85
+ url += `?${resource}Id=${id}`;
86
+ }
87
+ return url;
88
+ }
89
+ //# sourceMappingURL=vercel-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-api.js","sourceRoot":"","sources":["../../../src/lib/inspect/vercel-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * This file was copied from @vercel/vercel/packages/cli/src/util/projects/link.ts
3
+ * and adapted to work without importing most of the vercel CLI code.
4
+ *
5
+ * It strips:
6
+ * - Network requests for validating whether the org/user/team/project exists
7
+ * - Some vercel-specific environment variable checks and inference
8
+ * that we're not supporting for Workflow CLI for now
9
+ */
10
+ interface RepoProjectConfig {
11
+ id: string;
12
+ name: string;
13
+ directory: string;
14
+ }
15
+ interface RepoProjectsConfig {
16
+ orgId: string;
17
+ remoteName: string;
18
+ projects: RepoProjectConfig[];
19
+ }
20
+ interface RepoLink {
21
+ rootPath: string;
22
+ repoConfigPath: string;
23
+ repoConfig?: RepoProjectsConfig;
24
+ }
25
+ export interface ProjectLink {
26
+ /**
27
+ * ID of the Vercel Project.
28
+ */
29
+ projectId: string;
30
+ /**
31
+ * User or Team ID of the owner of the Vercel Project.
32
+ */
33
+ orgId: string;
34
+ /**
35
+ * When linked as a repository, contains the absolute path
36
+ * to the root directory of the repository.
37
+ */
38
+ repoRoot?: string;
39
+ /**
40
+ * When linked as a repository, contains the relative path
41
+ * to the selected project root directory.
42
+ */
43
+ projectRootDirectory?: string;
44
+ /**
45
+ * Name of the Vercel Project.
46
+ */
47
+ projectName?: string;
48
+ }
49
+ export declare const VERCEL_DIR = ".vercel";
50
+ export declare const VERCEL_DIR_FALLBACK = ".now";
51
+ export declare const VERCEL_DIR_PROJECT = "project.json";
52
+ export declare const VERCEL_DIR_REPO = "repo.json";
53
+ /**
54
+ * A type guard for `try...catch` errors.
55
+ * @deprecated use `require('node:util').types.isNativeError(error)` instead
56
+ */
57
+ export declare const isError: (error: unknown) => error is Error;
58
+ export declare const isErrnoException: (error: unknown) => error is NodeJS.ErrnoException;
59
+ export declare const isOneOfErrNoExceptions: (error: unknown, codes: string[]) => boolean | "" | undefined;
60
+ /**
61
+ * Returns the `<cwd>/.vercel` directory for the current project
62
+ * with a fallback to <cwd>/.now` if it exists.
63
+ *
64
+ * Throws an error if *both* `.vercel` and `.now` directories exist.
65
+ */
66
+ export declare function getVercelDirectory(cwd: string): string;
67
+ export declare function getProjectLink(path: string): Promise<ProjectLink | null>;
68
+ /**
69
+ * Convert Windows separators to Unix separators.
70
+ */
71
+ export declare function normalizeOsPath(p: string): string;
72
+ /**
73
+ * Finds the matching Projects from an array of Project links
74
+ * where the provided relative path is within the Project's
75
+ * root directory.
76
+ */
77
+ export declare function findProjectsFromPath(projects: RepoProjectConfig[], path: string): RepoProjectConfig[];
78
+ export declare function getLinkFromDir(vercelDir: string): Promise<ProjectLink | null>;
79
+ export declare function traverseUpDirectories({ start, base, maxDepth, }: {
80
+ start: string;
81
+ base?: string;
82
+ maxDepth?: number;
83
+ }): Generator<string, void, unknown>;
84
+ /**
85
+ * Given a `start` directory, traverses up the directory hierarchy until
86
+ * the nearest `.git/config` file is found. Returns the directory where
87
+ * the Git config was found, or `undefined` when no Git repo was found.
88
+ */
89
+ export declare function findRepoRoot(cwd: string, start: string): Promise<string | undefined>;
90
+ export declare function isGitWorktreeOrSubmodule(cwd: string): boolean;
91
+ /**
92
+ * Given a directory path `cwd`, finds the root of the Git repository
93
+ * and returns the parsed `.vercel/repo.json` file if the repository
94
+ * has already been linked.
95
+ */
96
+ export declare function getRepoLink(cwd: string): Promise<RepoLink | undefined>;
97
+ export {};
98
+ //# sourceMappingURL=vercel-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-link.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/vercel-link.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,UAAU,QAAQ;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,eAAO,MAAM,UAAU,YAAY,CAAC;AACpC,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAC1C,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,eAAe,cAAc,CAAC;AAW3C;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,KAEjD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,OAAO,KACb,KAAK,IAAI,MAAM,CAAC,cAElB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,OAAO,OAAO,EAAE,OAAO,MAAM,EAAE,6BAOrE,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWtD;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAK7B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGjD;AAWD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,IAAI,EAAE,MAAM,GACX,iBAAiB,EAAE,CAuBrB;AA+BD,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA4B7B;AAED,wBAAiB,qBAAqB,CAAC,EACrC,KAAK,EACL,IAAI,EACJ,QAAa,GACd,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,oCAgBA;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA+C7B;AAmBD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAW7D;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAoB5E"}
@@ -0,0 +1,268 @@
1
+ /**
2
+ * This file was copied from @vercel/vercel/packages/cli/src/util/projects/link.ts
3
+ * and adapted to work without importing most of the vercel CLI code.
4
+ *
5
+ * It strips:
6
+ * - Network requests for validating whether the org/user/team/project exists
7
+ * - Some vercel-specific environment variable checks and inference
8
+ * that we're not supporting for Workflow CLI for now
9
+ */
10
+ import { execSync } from 'node:child_process';
11
+ import fs, { statSync } from 'node:fs';
12
+ import { lstat } from 'node:fs/promises';
13
+ import { homedir } from 'node:os';
14
+ import { join, normalize, posix, relative } from 'node:path';
15
+ import util from 'node:util';
16
+ import { promisify } from 'util';
17
+ import { logger } from '../config/log.js';
18
+ const home = homedir();
19
+ const readFile = promisify(fs.readFile);
20
+ export const VERCEL_DIR = '.vercel';
21
+ export const VERCEL_DIR_FALLBACK = '.now';
22
+ export const VERCEL_DIR_PROJECT = 'project.json';
23
+ export const VERCEL_DIR_REPO = 'repo.json';
24
+ const isDirectory = (dir) => {
25
+ try {
26
+ return statSync(dir).isDirectory();
27
+ }
28
+ catch (err) {
29
+ logger.debug(`${dir} is not a directory: ${err}`);
30
+ return false;
31
+ }
32
+ };
33
+ /**
34
+ * A type guard for `try...catch` errors.
35
+ * @deprecated use `require('node:util').types.isNativeError(error)` instead
36
+ */
37
+ export const isError = (error) => {
38
+ return util.types.isNativeError(error);
39
+ };
40
+ export const isErrnoException = (error) => {
41
+ return isError(error) && 'code' in error;
42
+ };
43
+ export const isOneOfErrNoExceptions = (error, codes) => {
44
+ return (isErrnoException(error) &&
45
+ 'code' in error &&
46
+ error.code &&
47
+ codes.includes(error.code));
48
+ };
49
+ /**
50
+ * Returns the `<cwd>/.vercel` directory for the current project
51
+ * with a fallback to <cwd>/.now` if it exists.
52
+ *
53
+ * Throws an error if *both* `.vercel` and `.now` directories exist.
54
+ */
55
+ export function getVercelDirectory(cwd) {
56
+ logger.debug(`Getting vercel directory for ${cwd}`);
57
+ const possibleDirs = [join(cwd, VERCEL_DIR), join(cwd, VERCEL_DIR_FALLBACK)];
58
+ logger.debug(`Possible vercel directories: ${possibleDirs.join(', ')}`);
59
+ const existingDirs = possibleDirs.filter((d) => isDirectory(d));
60
+ if (existingDirs.length > 1) {
61
+ throw new Error('CONFLICTING_CONFIG_DIRECTORIES: Both `.vercel` and `.now` directories exist. Please remove the `.now` directory.');
62
+ }
63
+ return existingDirs[0] || possibleDirs[0];
64
+ }
65
+ export async function getProjectLink(path) {
66
+ return ((await getProjectLinkFromRepoLink(path)) ||
67
+ (await getLinkFromDir(getVercelDirectory(path))));
68
+ }
69
+ /**
70
+ * Convert Windows separators to Unix separators.
71
+ */
72
+ export function normalizeOsPath(p) {
73
+ const isWin = process.platform === 'win32';
74
+ return isWin ? p.replace(/\\/g, '/') : p;
75
+ }
76
+ function sortByDirectory(a, b) {
77
+ const aParts = a.directory.split('/');
78
+ const bParts = b.directory.split('/');
79
+ return bParts.length - aParts.length;
80
+ }
81
+ /**
82
+ * Finds the matching Projects from an array of Project links
83
+ * where the provided relative path is within the Project's
84
+ * root directory.
85
+ */
86
+ export function findProjectsFromPath(projects, path) {
87
+ logger.debug(`Finding projects ${JSON.stringify(projects)} from path ${path}`);
88
+ const normalizedPath = normalizeOsPath(path);
89
+ const matches = projects
90
+ .slice()
91
+ .sort(sortByDirectory)
92
+ .filter((project) => {
93
+ if (project.directory === '.') {
94
+ // Project has no "Root Directory" setting, so any path is valid
95
+ return true;
96
+ }
97
+ return (normalizedPath === project.directory ||
98
+ normalizedPath.startsWith(`${project.directory}/`));
99
+ });
100
+ // If there are multiple matches, we only want the most relevant
101
+ // selections (with the deepest directory depth), so pick the first
102
+ // one and filter on those matches.
103
+ const firstMatch = matches[0];
104
+ return matches.filter((match) => match.directory === firstMatch.directory);
105
+ }
106
+ async function getProjectLinkFromRepoLink(path) {
107
+ const repoLink = await getRepoLink(path);
108
+ if (!repoLink?.repoConfig) {
109
+ logger.debug('No repo link found');
110
+ return null;
111
+ }
112
+ logger.debug('Repo link', JSON.stringify(repoLink));
113
+ const projects = findProjectsFromPath(repoLink.repoConfig.projects, relative(repoLink.rootPath, path));
114
+ logger.debug(`Found matching repo projects: ${JSON.stringify(projects)}`);
115
+ if (projects.length === 1) {
116
+ const project = projects[0];
117
+ return {
118
+ repoRoot: repoLink.rootPath,
119
+ orgId: repoLink.repoConfig.orgId,
120
+ projectId: project.id,
121
+ projectName: project.name,
122
+ projectRootDirectory: project.directory,
123
+ };
124
+ }
125
+ else if (projects.length > 1) {
126
+ throw new Error('Multiple projects found');
127
+ }
128
+ return null;
129
+ }
130
+ export async function getLinkFromDir(vercelDir) {
131
+ logger.debug(`Getting link from dir ${vercelDir}`);
132
+ try {
133
+ const json = await readFile(join(vercelDir, VERCEL_DIR_PROJECT), 'utf8');
134
+ const link = JSON.parse(json);
135
+ if (!link || !link.projectId || !link.orgId) {
136
+ throw new Error(`Project Settings are invalid. To link your project again, remove the ${vercelDir} directory.`);
137
+ }
138
+ return link;
139
+ }
140
+ catch (err) {
141
+ // link file does not exists, project is not linked
142
+ if (isOneOfErrNoExceptions(err, ['ENOENT', 'ENOTDIR'])) {
143
+ return null;
144
+ }
145
+ // link file can't be read
146
+ if (isError(err) && err.name === 'SyntaxError') {
147
+ throw new Error(`Project Settings could not be retrieved. To link your project again, remove the ${vercelDir} directory.`);
148
+ }
149
+ throw err;
150
+ }
151
+ }
152
+ export function* traverseUpDirectories({ start, base, maxDepth = 10, }) {
153
+ let current = normalize(start);
154
+ const normalizedRoot = base ? normalize(base) : undefined;
155
+ let depth = 0;
156
+ while (current) {
157
+ yield current;
158
+ if (current === normalizedRoot)
159
+ break;
160
+ // Go up one directory
161
+ const next = join(current, '..');
162
+ current = next === current ? undefined : next;
163
+ depth++;
164
+ if (depth > maxDepth) {
165
+ logger.debug(`Max traversal depth of ${maxDepth} reached`);
166
+ break;
167
+ }
168
+ }
169
+ }
170
+ /**
171
+ * Given a `start` directory, traverses up the directory hierarchy until
172
+ * the nearest `.git/config` file is found. Returns the directory where
173
+ * the Git config was found, or `undefined` when no Git repo was found.
174
+ */
175
+ export async function findRepoRoot(cwd, start) {
176
+ const REPO_JSON_PATH = join(VERCEL_DIR, VERCEL_DIR_REPO);
177
+ /**
178
+ * If the current repo is a git submodule or git worktree '.git' is a file
179
+ * with a pointer to the "parent" git repository instead of a directory.
180
+ */
181
+ const GIT_PATH = isGitWorktreeOrSubmodule(cwd)
182
+ ? posix.normalize('.git')
183
+ : posix.normalize('.git/config');
184
+ for (const current of traverseUpDirectories({ start })) {
185
+ if (current === home) {
186
+ // Sometimes the $HOME directory is set up as a Git repo
187
+ // (for dotfiles, etc.). In this case it's safe to say that
188
+ // this isn't the repo we're looking for. Bail.
189
+ logger.debug('Arrived at home directory');
190
+ break;
191
+ }
192
+ // if `.vercel/repo.json` exists (already linked),
193
+ // then consider this the repo root
194
+ const repoConfigPath = join(current, REPO_JSON_PATH);
195
+ let stat = await lstat(repoConfigPath).catch((err) => {
196
+ if (err.code !== 'ENOENT')
197
+ throw err;
198
+ });
199
+ if (stat) {
200
+ logger.debug(`Found repo config "${REPO_JSON_PATH}" - detected "${current}" as repo root`);
201
+ return current;
202
+ }
203
+ // if `.git/config` exists (unlinked),
204
+ // then consider this the repo root
205
+ const gitConfigPath = join(current, GIT_PATH);
206
+ stat = await lstat(gitConfigPath).catch((err) => {
207
+ if (err.code !== 'ENOENT')
208
+ throw err;
209
+ });
210
+ if (stat) {
211
+ logger.debug(`Found git config "${GIT_PATH}" - detected "${current}" as repo root`);
212
+ return current;
213
+ }
214
+ }
215
+ logger.debug('Aborting search for repo root');
216
+ }
217
+ function getGitDirectory(cwd) {
218
+ try {
219
+ const gitConfigPath = execSync('git rev-parse --git-dir', {
220
+ cwd,
221
+ encoding: 'utf8',
222
+ stdio: ['ignore', 'pipe', 'ignore'],
223
+ });
224
+ return gitConfigPath;
225
+ }
226
+ catch (err) {
227
+ if (err instanceof Error) {
228
+ logger.debug(`Failed to get git directory: ${err.message}`);
229
+ }
230
+ return null;
231
+ }
232
+ }
233
+ export function isGitWorktreeOrSubmodule(cwd) {
234
+ const gitDir = getGitDirectory(cwd);
235
+ if (gitDir === null) {
236
+ return false;
237
+ }
238
+ const isGitWorktree = gitDir.includes('.git/worktrees/');
239
+ const isGitSubmodule = gitDir.includes('.git/modules/');
240
+ return isGitWorktree || isGitSubmodule;
241
+ }
242
+ /**
243
+ * Given a directory path `cwd`, finds the root of the Git repository
244
+ * and returns the parsed `.vercel/repo.json` file if the repository
245
+ * has already been linked.
246
+ */
247
+ export async function getRepoLink(cwd) {
248
+ // Determine where the root of the repo is
249
+ logger.debug(`Getting repo link for ${cwd}`);
250
+ const rootPath = await findRepoRoot(cwd, './');
251
+ if (!rootPath) {
252
+ logger.debug('getRepoLink: No repo root found');
253
+ return undefined;
254
+ }
255
+ // Read the `repo.json`, if this repo has already been linked
256
+ const repoConfigPath = join(rootPath, VERCEL_DIR, VERCEL_DIR_REPO);
257
+ logger.debug(`getRepoLink: Reading repo config path "${repoConfigPath}"`);
258
+ try {
259
+ const file = await readFile(repoConfigPath, 'utf8');
260
+ const repoConfig = JSON.parse(file);
261
+ return { rootPath, repoConfig, repoConfigPath };
262
+ }
263
+ catch (err) {
264
+ logger.debug(`Failed to parse ${repoConfigPath}: ${err}`);
265
+ return undefined;
266
+ }
267
+ }
268
+ //# sourceMappingURL=vercel-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-link.js","sourceRoot":"","sources":["../../../src/lib/inspect/vercel-link.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const WEB_PORT = 3456;
2
+ export declare const WEB_PACKAGE_NAME = "@workflow/web";
3
+ export declare const HOST_URL = "http://localhost:3456";
4
+ /**
5
+ * Launch the web UI with the specified configuration
6
+ * This starts the server (if not running), opens the browser, then keeps the server running
7
+ */
8
+ export declare function launchWebUI(resource: string, id: string | undefined, flags: Record<string, any>, _cliVersion: string): Promise<void>;
9
+ //# sourceMappingURL=web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/web.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAChD,eAAO,MAAM,QAAQ,0BAAiC,CAAC;AA8MvD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAoGf"}