@shopify/cli-kit 3.45.0-pre.2 → 3.45.0-pre.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/assets/cli-ruby/lib/shopify_cli/constants.rb +2 -1
- package/assets/cli-ruby/lib/shopify_cli/environment.rb +3 -2
- package/dist/private/node/api.js +11 -8
- package/dist/private/node/api.js.map +1 -1
- package/dist/private/node/themes/generate-theme-name.d.ts +1 -0
- package/dist/private/node/themes/generate-theme-name.js +2 -2
- package/dist/private/node/themes/generate-theme-name.js.map +1 -1
- package/dist/private/node/ui/components/Alert.test.js +7 -4
- package/dist/private/node/ui/components/Alert.test.js.map +1 -1
- package/dist/private/node/ui/components/Banner.js +32 -5
- package/dist/private/node/ui/components/Banner.js.map +1 -1
- package/dist/private/node/ui/components/ConcurrentOutput.js +5 -3
- package/dist/private/node/ui/components/ConcurrentOutput.js.map +1 -1
- package/dist/private/node/ui/components/ConcurrentOutput.test.js +8 -8
- package/dist/private/node/ui/components/ConcurrentOutput.test.js.map +1 -1
- package/dist/private/node/ui/components/FatalError.test.js +2 -2
- package/dist/private/node/ui/components/FatalError.test.js.map +1 -1
- package/dist/private/node/ui/components/Link.js +19 -7
- package/dist/private/node/ui/components/Link.js.map +1 -1
- package/dist/private/node/ui/components/SelectPrompt.js +1 -1
- package/dist/private/node/ui/components/SelectPrompt.js.map +1 -1
- package/dist/private/node/ui/components/Tasks.d.ts +2 -1
- package/dist/private/node/ui/components/Tasks.js +6 -2
- package/dist/private/node/ui/components/Tasks.js.map +1 -1
- package/dist/private/node/ui/components/Tasks.test.js +16 -0
- package/dist/private/node/ui/components/Tasks.test.js.map +1 -1
- package/dist/private/node/ui/components/TextPrompt.d.ts +1 -0
- package/dist/private/node/ui/components/TextPrompt.js +3 -3
- package/dist/private/node/ui/components/TextPrompt.js.map +1 -1
- package/dist/private/node/ui/contexts/LinksContext.d.ts +12 -0
- package/dist/private/node/ui/contexts/LinksContext.js +3 -0
- package/dist/private/node/ui/contexts/LinksContext.js.map +1 -0
- package/dist/public/common/version.d.ts +1 -1
- package/dist/public/common/version.js +1 -1
- package/dist/public/common/version.js.map +1 -1
- package/dist/public/node/ruby.js +15 -8
- package/dist/public/node/ruby.js.map +1 -1
- package/dist/public/node/tcp.d.ts +6 -0
- package/dist/public/node/tcp.js +8 -0
- package/dist/public/node/tcp.js.map +1 -1
- package/dist/public/node/ui.d.ts +26 -18
- package/dist/public/node/ui.js +31 -20
- package/dist/public/node/ui.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../../src/public/node/tcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AACjC,OAAO,EAAC,UAAU,EAAC,MAAM,YAAY,CAAA;AACrC,OAAO,EAAC,WAAW,EAAE,aAAa,EAAE,WAAW,EAAC,MAAM,6BAA6B,CAAA;AACnF,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AAEvC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,WAAW,CAAC,aAAa,CAAA,0BAA0B,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;IACjE,WAAW,CAAC,aAAa,CAAA,yBAAyB,WAAW,CAAC,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,CAAC,CAAA;IACrF,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,YAAY,CAAI,OAAgB,EAAE,QAAQ,GAAG,CAAC,EAAE,iBAAiB,GAAG,CAAC;IAClF,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,OAAO,IAAI,EAAE;QACX,IAAI;YACF,4CAA4C;YAC5C,OAAO,MAAM,OAAO,EAAE,CAAA;YACtB,8DAA8D;SAC/D;QAAC,OAAO,KAAU,EAAE;YACnB,IAAI,UAAU,EAAE,GAAG,QAAQ,EAAE;gBAC3B,WAAW,CAAC,aAAa,CAAA,0CAA0C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;gBACnF,4CAA4C;gBAC5C,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAA;aAC/B;iBAAM;gBACL,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;aACpC;SACF;KACF;AACH,CAAC","sourcesContent":["import {sleep} from './system.js'\nimport {AbortError} from './error.js'\nimport {outputDebug, outputContent, outputToken} from '../../public/node/output.js'\nimport * as port from 'get-port-please'\n\n/**\n * Returns an available port in the current environment.\n *\n * @returns A promise that resolves with an availabe port.\n * @example\n */\nexport async function getAvailableTCPPort(): Promise<number> {\n outputDebug(outputContent`Getting a random port...`)\n const randomPort = await retryOnError(() => port.getRandomPort())\n outputDebug(outputContent`Random port obtained: ${outputToken.raw(`${randomPort}`)}`)\n return randomPort\n}\n\n/**\n * Given a function, it runs it and retries in case of failiure up to the provided number of times.\n *\n * @param execute - The function to execute.\n * @param maxTries - The maximum retries.\n * @param waitTimeInSeconds - The time to wait between retries.\n */\nasync function retryOnError<T>(execute: () => T, maxTries = 5, waitTimeInSeconds = 1) {\n let retryCount = 1\n while (true) {\n try {\n // eslint-disable-next-line no-await-in-loop\n return await execute()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n if (retryCount++ < maxTries) {\n outputDebug(outputContent`Unknown problem getting a random port: ${error.message}`)\n // eslint-disable-next-line no-await-in-loop\n await sleep(waitTimeInSeconds)\n } else {\n throw new AbortError(error.message)\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../../src/public/node/tcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AACjC,OAAO,EAAC,UAAU,EAAC,MAAM,YAAY,CAAA;AACrC,OAAO,EAAC,WAAW,EAAE,aAAa,EAAE,WAAW,EAAC,MAAM,6BAA6B,CAAA;AACnF,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AAEvC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,WAAW,CAAC,aAAa,CAAA,0BAA0B,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;IACjE,WAAW,CAAC,aAAa,CAAA,yBAAyB,WAAW,CAAC,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,CAAC,CAAA;IACrF,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAkB;IAC5D,OAAO,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,UAAU,CAAA;AAC1D,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,YAAY,CAAI,OAAgB,EAAE,QAAQ,GAAG,CAAC,EAAE,iBAAiB,GAAG,CAAC;IAClF,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,OAAO,IAAI,EAAE;QACX,IAAI;YACF,4CAA4C;YAC5C,OAAO,MAAM,OAAO,EAAE,CAAA;YACtB,8DAA8D;SAC/D;QAAC,OAAO,KAAU,EAAE;YACnB,IAAI,UAAU,EAAE,GAAG,QAAQ,EAAE;gBAC3B,WAAW,CAAC,aAAa,CAAA,0CAA0C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;gBACnF,4CAA4C;gBAC5C,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAA;aAC/B;iBAAM;gBACL,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;aACpC;SACF;KACF;AACH,CAAC","sourcesContent":["import {sleep} from './system.js'\nimport {AbortError} from './error.js'\nimport {outputDebug, outputContent, outputToken} from '../../public/node/output.js'\nimport * as port from 'get-port-please'\n\n/**\n * Returns an available port in the current environment.\n *\n * @returns A promise that resolves with an availabe port.\n * @example\n */\nexport async function getAvailableTCPPort(): Promise<number> {\n outputDebug(outputContent`Getting a random port...`)\n const randomPort = await retryOnError(() => port.getRandomPort())\n outputDebug(outputContent`Random port obtained: ${outputToken.raw(`${randomPort}`)}`)\n return randomPort\n}\n\n/**\n * Checks if a port is available.\n *\n * @param portNumber - The port number to check.\n */\nexport async function checkPortAvailability(portNumber: number): Promise<boolean> {\n return (await port.checkPort(portNumber)) === portNumber\n}\n\n/**\n * Given a function, it runs it and retries in case of failiure up to the provided number of times.\n *\n * @param execute - The function to execute.\n * @param maxTries - The maximum retries.\n * @param waitTimeInSeconds - The time to wait between retries.\n */\nasync function retryOnError<T>(execute: () => T, maxTries = 5, waitTimeInSeconds = 1) {\n let retryCount = 1\n while (true) {\n try {\n // eslint-disable-next-line no-await-in-loop\n return await execute()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n if (retryCount++ < maxTries) {\n outputDebug(outputContent`Unknown problem getting a random port: ${error.message}`)\n // eslint-disable-next-line no-await-in-loop\n await sleep(waitTimeInSeconds)\n } else {\n throw new AbortError(error.message)\n }\n }\n }\n}\n"]}
|
package/dist/public/node/ui.d.ts
CHANGED
|
@@ -18,15 +18,15 @@ export interface RenderConcurrentOptions extends PartialBy<ConcurrentOutputProps
|
|
|
18
18
|
/**
|
|
19
19
|
* Renders output from concurrent processes to the terminal with {@link ConcurrentOutput}.
|
|
20
20
|
* @example
|
|
21
|
-
* 0000-00-00 00:00:00
|
|
22
|
-
* 0000-00-00 00:00:00
|
|
23
|
-
* 0000-00-00 00:00:00
|
|
24
|
-
* 0000-00-00 00:00:00
|
|
25
|
-
* 0000-00-00 00:00:00
|
|
26
|
-
* 0000-00-00 00:00:00
|
|
21
|
+
* 0000-00-00 00:00:00 │ backend │ first backend message
|
|
22
|
+
* 0000-00-00 00:00:00 │ backend │ second backend message
|
|
23
|
+
* 0000-00-00 00:00:00 │ backend │ third backend message
|
|
24
|
+
* 0000-00-00 00:00:00 │ frontend │ first frontend message
|
|
25
|
+
* 0000-00-00 00:00:00 │ frontend │ second frontend message
|
|
26
|
+
* 0000-00-00 00:00:00 │ frontend │ third frontend message
|
|
27
27
|
*
|
|
28
|
-
* › Press p
|
|
29
|
-
* › Press q
|
|
28
|
+
* › Press p │ open your browser
|
|
29
|
+
* › Press q │ quit.
|
|
30
30
|
*
|
|
31
31
|
* Preview URL: https://shopify.com
|
|
32
32
|
*
|
|
@@ -57,14 +57,20 @@ export type RenderAlertOptions = Omit<AlertOptions, 'type'>;
|
|
|
57
57
|
* │ │
|
|
58
58
|
* │ Reference │
|
|
59
59
|
* │ • Run `npm shopify help` │
|
|
60
|
-
* │ • Dev docs
|
|
60
|
+
* │ • Dev docs [1] │
|
|
61
61
|
* │ │
|
|
62
62
|
* │ Custom section │
|
|
63
|
-
* │ • Item 1
|
|
63
|
+
* │ • Item 1 [2] │
|
|
64
64
|
* │ • Item 2 │
|
|
65
|
-
* │ • Item 3
|
|
65
|
+
* │ • Item 3 [3] │
|
|
66
66
|
* │ │
|
|
67
67
|
* ╰──────────────────────────────────────────────────────────╯
|
|
68
|
+
* [1] https://shopify.dev
|
|
69
|
+
* [2] https://www.google.com/search?q=jh56t9l34kpo35tw8s28hn7s
|
|
70
|
+
* 9s2xvzla01d8cn6j7yq&rlz=1C1GCEU_enUS832US832&oq=jh56t9l34kpo
|
|
71
|
+
* 35tw8s28hn7s9s2xvzla01d8cn6j7yq&aqs=chrome.0.35i39l2j0l4j46j
|
|
72
|
+
* 69i60.2711j0j7&sourceid=chrome&ie=UTF-8
|
|
73
|
+
* [3] https://shopify.com
|
|
68
74
|
*
|
|
69
75
|
*/
|
|
70
76
|
export declare function renderInfo(options: RenderAlertOptions): string | undefined;
|
|
@@ -88,11 +94,11 @@ export declare function renderInfo(options: RenderAlertOptions): string | undefi
|
|
|
88
94
|
* │ Partners Dashboard. │
|
|
89
95
|
* │ │
|
|
90
96
|
* │ Next steps │
|
|
91
|
-
* │ • See your deployment and set it live
|
|
92
|
-
* │ ners.shopify.com/1797046/apps/4523695/deployments │
|
|
93
|
-
* │ ) │
|
|
97
|
+
* │ • See your deployment and set it live [1] │
|
|
94
98
|
* │ │
|
|
95
99
|
* ╰──────────────────────────────────────────────────────────╯
|
|
100
|
+
* [1] https://partners.shopify.com/1797046/apps/4523695/deploy
|
|
101
|
+
* ments
|
|
96
102
|
*
|
|
97
103
|
*/
|
|
98
104
|
export declare function renderSuccess(options: RenderAlertOptions): string | undefined;
|
|
@@ -118,9 +124,10 @@ export declare function renderSuccess(options: RenderAlertOptions): string | und
|
|
|
118
124
|
* │ 1, 2022. │
|
|
119
125
|
* │ │
|
|
120
126
|
* │ Reference │
|
|
121
|
-
* │ • Dev docs
|
|
127
|
+
* │ • Dev docs [1] │
|
|
122
128
|
* │ │
|
|
123
129
|
* ╰──────────────────────────────────────────────────────────╯
|
|
130
|
+
* [1] https://shopify.dev/app/scopes
|
|
124
131
|
*
|
|
125
132
|
*/
|
|
126
133
|
export declare function renderWarning(options: RenderAlertOptions): string | undefined;
|
|
@@ -148,14 +155,15 @@ interface RenderFatalErrorOptions {
|
|
|
148
155
|
* │ No Organization found │
|
|
149
156
|
* │ │
|
|
150
157
|
* │ Next steps │
|
|
151
|
-
* │ • Have you created a Shopify Partners organization
|
|
152
|
-
* │
|
|
158
|
+
* │ • Have you created a Shopify Partners organization │
|
|
159
|
+
* │ [1]? │
|
|
153
160
|
* │ • Have you confirmed your accounts from the emails │
|
|
154
161
|
* │ you received? │
|
|
155
162
|
* │ • Need to connect to a different App or │
|
|
156
163
|
* │ organization? Run the command again with `--reset` │
|
|
157
164
|
* │ │
|
|
158
165
|
* ╰──────────────────────────────────────────────────────────╯
|
|
166
|
+
* [1] https://partners.shopify.com/signup
|
|
159
167
|
*
|
|
160
168
|
*/
|
|
161
169
|
export declare function renderFatalError(error: Fatal, { renderOptions }?: RenderFatalErrorOptions): string | undefined;
|
|
@@ -272,7 +280,7 @@ interface RenderTasksOptions {
|
|
|
272
280
|
* ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
|
|
273
281
|
* Installing dependencies ...
|
|
274
282
|
*/
|
|
275
|
-
export declare function renderTasks<TContext>(tasks: Task<TContext>[], { renderOptions }?: RenderTasksOptions): Promise<
|
|
283
|
+
export declare function renderTasks<TContext>(tasks: Task<TContext>[], { renderOptions }?: RenderTasksOptions): Promise<TContext>;
|
|
276
284
|
export interface RenderTextPromptOptions extends Omit<TextPromptProps, 'onSubmit'> {
|
|
277
285
|
renderOptions?: RenderOptions;
|
|
278
286
|
}
|
package/dist/public/node/ui.js
CHANGED
|
@@ -16,15 +16,15 @@ import React from 'react';
|
|
|
16
16
|
/**
|
|
17
17
|
* Renders output from concurrent processes to the terminal with {@link ConcurrentOutput}.
|
|
18
18
|
* @example
|
|
19
|
-
* 0000-00-00 00:00:00
|
|
20
|
-
* 0000-00-00 00:00:00
|
|
21
|
-
* 0000-00-00 00:00:00
|
|
22
|
-
* 0000-00-00 00:00:00
|
|
23
|
-
* 0000-00-00 00:00:00
|
|
24
|
-
* 0000-00-00 00:00:00
|
|
19
|
+
* 0000-00-00 00:00:00 │ backend │ first backend message
|
|
20
|
+
* 0000-00-00 00:00:00 │ backend │ second backend message
|
|
21
|
+
* 0000-00-00 00:00:00 │ backend │ third backend message
|
|
22
|
+
* 0000-00-00 00:00:00 │ frontend │ first frontend message
|
|
23
|
+
* 0000-00-00 00:00:00 │ frontend │ second frontend message
|
|
24
|
+
* 0000-00-00 00:00:00 │ frontend │ third frontend message
|
|
25
25
|
*
|
|
26
|
-
* › Press p
|
|
27
|
-
* › Press q
|
|
26
|
+
* › Press p │ open your browser
|
|
27
|
+
* › Press q │ quit.
|
|
28
28
|
*
|
|
29
29
|
* Preview URL: https://shopify.com
|
|
30
30
|
*
|
|
@@ -62,14 +62,20 @@ export async function renderConcurrent({ renderOptions, ...props }) {
|
|
|
62
62
|
* │ │
|
|
63
63
|
* │ Reference │
|
|
64
64
|
* │ • Run `npm shopify help` │
|
|
65
|
-
* │ • Dev docs
|
|
65
|
+
* │ • Dev docs [1] │
|
|
66
66
|
* │ │
|
|
67
67
|
* │ Custom section │
|
|
68
|
-
* │ • Item 1
|
|
68
|
+
* │ • Item 1 [2] │
|
|
69
69
|
* │ • Item 2 │
|
|
70
|
-
* │ • Item 3
|
|
70
|
+
* │ • Item 3 [3] │
|
|
71
71
|
* │ │
|
|
72
72
|
* ╰──────────────────────────────────────────────────────────╯
|
|
73
|
+
* [1] https://shopify.dev
|
|
74
|
+
* [2] https://www.google.com/search?q=jh56t9l34kpo35tw8s28hn7s
|
|
75
|
+
* 9s2xvzla01d8cn6j7yq&rlz=1C1GCEU_enUS832US832&oq=jh56t9l34kpo
|
|
76
|
+
* 35tw8s28hn7s9s2xvzla01d8cn6j7yq&aqs=chrome.0.35i39l2j0l4j46j
|
|
77
|
+
* 69i60.2711j0j7&sourceid=chrome&ie=UTF-8
|
|
78
|
+
* [3] https://shopify.com
|
|
73
79
|
*
|
|
74
80
|
*/
|
|
75
81
|
export function renderInfo(options) {
|
|
@@ -95,11 +101,11 @@ export function renderInfo(options) {
|
|
|
95
101
|
* │ Partners Dashboard. │
|
|
96
102
|
* │ │
|
|
97
103
|
* │ Next steps │
|
|
98
|
-
* │ • See your deployment and set it live
|
|
99
|
-
* │ ners.shopify.com/1797046/apps/4523695/deployments │
|
|
100
|
-
* │ ) │
|
|
104
|
+
* │ • See your deployment and set it live [1] │
|
|
101
105
|
* │ │
|
|
102
106
|
* ╰──────────────────────────────────────────────────────────╯
|
|
107
|
+
* [1] https://partners.shopify.com/1797046/apps/4523695/deploy
|
|
108
|
+
* ments
|
|
103
109
|
*
|
|
104
110
|
*/
|
|
105
111
|
export function renderSuccess(options) {
|
|
@@ -127,9 +133,10 @@ export function renderSuccess(options) {
|
|
|
127
133
|
* │ 1, 2022. │
|
|
128
134
|
* │ │
|
|
129
135
|
* │ Reference │
|
|
130
|
-
* │ • Dev docs
|
|
136
|
+
* │ • Dev docs [1] │
|
|
131
137
|
* │ │
|
|
132
138
|
* ╰──────────────────────────────────────────────────────────╯
|
|
139
|
+
* [1] https://shopify.dev/app/scopes
|
|
133
140
|
*
|
|
134
141
|
*/
|
|
135
142
|
export function renderWarning(options) {
|
|
@@ -156,14 +163,15 @@ export function renderWarning(options) {
|
|
|
156
163
|
* │ No Organization found │
|
|
157
164
|
* │ │
|
|
158
165
|
* │ Next steps │
|
|
159
|
-
* │ • Have you created a Shopify Partners organization
|
|
160
|
-
* │
|
|
166
|
+
* │ • Have you created a Shopify Partners organization │
|
|
167
|
+
* │ [1]? │
|
|
161
168
|
* │ • Have you confirmed your accounts from the emails │
|
|
162
169
|
* │ you received? │
|
|
163
170
|
* │ • Need to connect to a different App or │
|
|
164
171
|
* │ organization? Run the command again with `--reset` │
|
|
165
172
|
* │ │
|
|
166
173
|
* ╰──────────────────────────────────────────────────────────╯
|
|
174
|
+
* [1] https://partners.shopify.com/signup
|
|
167
175
|
*
|
|
168
176
|
*/
|
|
169
177
|
// eslint-disable-next-line max-params
|
|
@@ -314,9 +322,12 @@ export function renderTable({ renderOptions, ...props }) {
|
|
|
314
322
|
*/
|
|
315
323
|
// eslint-disable-next-line max-params
|
|
316
324
|
export async function renderTasks(tasks, { renderOptions } = {}) {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
325
|
+
// eslint-disable-next-line max-params
|
|
326
|
+
return new Promise((resolve, reject) => {
|
|
327
|
+
render(React.createElement(Tasks, { tasks: tasks, onComplete: resolve }), {
|
|
328
|
+
...renderOptions,
|
|
329
|
+
exitOnCtrlC: false,
|
|
330
|
+
}).catch(reject);
|
|
320
331
|
});
|
|
321
332
|
}
|
|
322
333
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/public/node/ui.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable tsdoc/syntax */\nimport {AbortSilentError, FatalError as Fatal} from './error.js'\nimport {collectLog, consoleError, consoleLog, Logger, LogLevel, outputDebug, outputWhereAppropriate} from './output.js'\nimport {isUnitTest} from './context/local.js'\nimport {AbortController} from './abort.js'\nimport {ConcurrentOutput, ConcurrentOutputProps} from '../../private/node/ui/components/ConcurrentOutput.js'\nimport {render, renderOnce} from '../../private/node/ui.js'\nimport {alert, AlertOptions} from '../../private/node/ui/alert.js'\nimport {CustomSection} from '../../private/node/ui/components/Alert.js'\nimport {FatalError} from '../../private/node/ui/components/FatalError.js'\nimport ScalarDict from '../../private/node/ui/components/Table/ScalarDict.js'\nimport {Table, TableColumn, TableProps} from '../../private/node/ui/components/Table/Table.js'\nimport {SelectPrompt, SelectPromptProps} from '../../private/node/ui/components/SelectPrompt.js'\nimport {Tasks, Task} from '../../private/node/ui/components/Tasks.js'\nimport {TextPrompt, TextPromptProps} from '../../private/node/ui/components/TextPrompt.js'\nimport {AutocompletePromptProps, AutocompletePrompt} from '../../private/node/ui/components/AutocompletePrompt.js'\nimport {InlineToken, LinkToken, TokenItem} from '../../private/node/ui/components/TokenizedText.js'\nimport React from 'react'\nimport {Key as InkKey, RenderOptions} from 'ink'\n\ntype PartialBy<T, TKey extends keyof T> = Omit<T, TKey> & Partial<Pick<T, TKey>>\n\nexport interface RenderConcurrentOptions extends PartialBy<ConcurrentOutputProps, 'abortController'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders output from concurrent processes to the terminal with {@link ConcurrentOutput}.\n * @example\n * 0000-00-00 00:00:00 | backend | first backend message\n * 0000-00-00 00:00:00 | backend | second backend message\n * 0000-00-00 00:00:00 | backend | third backend message\n * 0000-00-00 00:00:00 | frontend | first frontend message\n * 0000-00-00 00:00:00 | frontend | second frontend message\n * 0000-00-00 00:00:00 | frontend | third frontend message\n *\n * › Press p | open your browser\n * › Press q | quit.\n *\n * Preview URL: https://shopify.com\n *\n */\nexport async function renderConcurrent({renderOptions, ...props}: RenderConcurrentOptions) {\n const newProps = {\n abortController: new AbortController(),\n ...props,\n }\n\n return render(<ConcurrentOutput {...newProps} />, {\n ...renderOptions,\n exitOnCtrlC: typeof props.onInput === 'undefined',\n })\n}\n\nexport type AlertCustomSection = CustomSection\nexport type RenderAlertOptions = Omit<AlertOptions, 'type'>\n\n/**\n * Renders an information banner to the console.\n * @example Basic\n * ╭─ info ───────────────────────────────────────────────────╮\n * │ │\n * │ CLI update available │\n * │ │\n * │ Run `npm run shopify upgrade`. │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ info ───────────────────────────────────────────────────╮\n * │ │\n * │ my-app initialized and ready to build. │\n * │ │\n * │ Next steps │\n * │ • Run `cd verification-app` │\n * │ • To preview your project, run `npm app dev` │\n * │ • To add extensions, run `npm generate extension` │\n * │ │\n * │ Reference │\n * │ • Run `npm shopify help` │\n * │ • Dev docs ( https://shopify.dev ) │\n * │ │\n * │ Custom section │\n * │ • Item 1 │\n * │ • Item 2 │\n * │ • Item 3 │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n */\nexport function renderInfo(options: RenderAlertOptions) {\n return alert({...options, type: 'info'})\n}\n\n/**\n * Renders a success banner to the console.\n * @example Basic\n * ╭─ success ────────────────────────────────────────────────╮\n * │ │\n * │ CLI updated. │\n * │ │\n * │ You are now running version 3.47. │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ success ────────────────────────────────────────────────╮\n * │ │\n * │ Deployment successful. │\n * │ │\n * │ Your extensions have been uploaded to your Shopify │\n * │ Partners Dashboard. │\n * │ │\n * │ Next steps │\n * │ • See your deployment and set it live ( https://part │\n * │ ners.shopify.com/1797046/apps/4523695/deployments │\n * │ ) │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n */\nexport function renderSuccess(options: RenderAlertOptions) {\n return alert({...options, type: 'success'})\n}\n\n/**\n * Renders a warning banner to the console.\n * @example Basic\n * ╭─ warning ────────────────────────────────────────────────╮\n * │ │\n * │ You have reached your limit of checkout extensions for │\n * │ this app. │\n * │ │\n * │ You can free up space for a new one by deleting an │\n * │ existing one. │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ warning ────────────────────────────────────────────────╮\n * │ │\n * │ Required access scope update. │\n * │ │\n * │ The deadline for re-selecting your app scopes is May │\n * │ 1, 2022. │\n * │ │\n * │ Reference │\n * │ • Dev docs ( https://shopify.dev/app/scopes ) │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n */\nexport function renderWarning(options: RenderAlertOptions) {\n return alert({...options, type: 'warning'})\n}\n\ninterface RenderFatalErrorOptions {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a Fatal error to the console inside a banner.\n * @example Basic\n * ╭─ error ──────────────────────────────────────────────────╮\n * │ │\n * │ Something went wrong. │\n * │ │\n * │ To investigate the issue, examine this stack trace: │\n * │ at _compile (internal/modules/cjs/loader.js:1137) │\n * │ at js (internal/modules/cjs/loader.js:1157) │\n * │ at load (internal/modules/cjs/loader.js:985) │\n * │ at _load (internal/modules/cjs/loader.js:878) │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ error ──────────────────────────────────────────────────╮\n * │ │\n * │ No Organization found │\n * │ │\n * │ Next steps │\n * │ • Have you created a Shopify Partners organization ( │\n * │ https://partners.shopify.com/signup )? │\n * │ • Have you confirmed your accounts from the emails │\n * │ you received? │\n * │ • Need to connect to a different App or │\n * │ organization? Run the command again with `--reset` │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n */\n// eslint-disable-next-line max-params\nexport function renderFatalError(error: Fatal, {renderOptions}: RenderFatalErrorOptions = {}) {\n return renderOnce(<FatalError error={error} />, {logLevel: 'error', logger: consoleError, renderOptions})\n}\n\nexport interface RenderSeletPromptOptions<T> extends Omit<SelectPromptProps<T>, 'onSubmit'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a select prompt to the console.\n * @example\n * ? Associate your project with the org Castile Ventures?\n *\n * Add: • new-ext\n *\n * Remove: • integrated-demand-ext\n * • order-discount\n *\n * Automations\n * > (a) fifth\n * (2) sixth\n *\n * Merchant Admin\n * (3) eighth\n * (4) ninth\n *\n * Other\n * (f) first\n * (s) second\n * (7) third\n * (8) fourth\n * (9) seventh\n * (10) tenth\n *\n * Press ↑↓ arrows to select, enter to confirm\n *\n */\nexport function renderSelectPrompt<T>({renderOptions, ...props}: RenderSeletPromptOptions<T>): Promise<T> {\n // eslint-disable-next-line max-params\n return new Promise((resolve, reject) => {\n render(<SelectPrompt {...props} onSubmit={(value: T) => resolve(value)} />, {\n ...renderOptions,\n exitOnCtrlC: false,\n }).catch(reject)\n })\n}\n\nexport interface RenderConfirmationPromptOptions extends Pick<SelectPromptProps<boolean>, 'message' | 'infoTable'> {\n confirmationMessage?: string\n cancellationMessage?: string\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a confirmation prompt to the console.\n * @example\n * ? Delete the following themes from the store?\n *\n * • first theme (#1)\n * • second theme (#2)\n *\n * > (y) Yes, confirm changes\n * (n) Cancel\n *\n * Press ↑↓ arrows to select, enter or a shortcut to confirm\n *\n */\nexport function renderConfirmationPrompt({\n message,\n infoTable,\n confirmationMessage = 'Yes, confirm',\n cancellationMessage = 'No, cancel',\n renderOptions,\n}: RenderConfirmationPromptOptions): Promise<boolean> {\n const choices = [\n {\n label: confirmationMessage,\n value: true,\n key: 'y',\n },\n {\n label: cancellationMessage,\n value: false,\n key: 'n',\n },\n ]\n\n return renderSelectPrompt({\n choices,\n message,\n infoTable,\n submitWithShortcuts: true,\n renderOptions,\n })\n}\n\nexport interface RenderAutocompleteOptions<T>\n extends PartialBy<Omit<AutocompletePromptProps<T>, 'onSubmit'>, 'search'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders an autocomplete prompt to the console.\n * @example\n * ? Select a template: Type to search...\n *\n * > first\n * second\n * third\n * fourth\n * fifth\n * sixth\n * seventh\n * eighth\n * ninth\n * tenth\n * eleventh\n * twelfth\n * thirteenth\n * fourteenth\n * fifteenth\n * sixteenth\n * seventeenth\n * eighteenth\n * nineteenth\n * twentieth\n * twenty-first\n * twenty-second\n * twenty-third\n * twenty-fourth\n * twenty-fifth\n *\n * Press ↑↓ arrows to select, enter to confirm\n *\n */\nexport function renderAutocompletePrompt<T>({renderOptions, ...props}: RenderAutocompleteOptions<T>): Promise<T> {\n const newProps = {\n search(term: string) {\n return Promise.resolve({\n data: props.choices.filter((item) => item.label.toLowerCase().includes(term.toLowerCase())),\n })\n },\n ...props,\n }\n\n // eslint-disable-next-line max-params\n return new Promise((resolve, reject) => {\n render(<AutocompletePrompt {...newProps} onSubmit={(value: T) => resolve(value)} />, {\n ...renderOptions,\n exitOnCtrlC: false,\n }).catch(reject)\n })\n}\n\ninterface RenderTableOptions<T extends ScalarDict> extends TableProps<T> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a table to the console.\n * @example\n * ID Name email\n * ── ────────── ─────────────\n * 1 John Doe jon@doe.com\n * 2 Jane Doe jane@doe.com\n * 3 John Smith jon@smith.com\n */\nexport function renderTable<T extends ScalarDict>({renderOptions, ...props}: RenderTableOptions<T>) {\n return renderOnce(<Table {...props} />, {renderOptions})\n}\n\ninterface RenderTasksOptions {\n renderOptions?: RenderOptions\n}\n\n/**\n * Runs async tasks and displays their progress to the console.\n * @example\n * ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n * Installing dependencies ...\n */\n// eslint-disable-next-line max-params\nexport async function renderTasks<TContext>(tasks: Task<TContext>[], {renderOptions}: RenderTasksOptions = {}) {\n return render(<Tasks tasks={tasks} />, {\n ...renderOptions,\n exitOnCtrlC: false,\n })\n}\n\nexport interface RenderTextPromptOptions extends Omit<TextPromptProps, 'onSubmit'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a text prompt to the console.\n * @example\n * ? App project name (can be changed later):\n * > expansive commerce app\n * ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔\n *\n */\nexport function renderTextPrompt({renderOptions, ...props}: RenderTextPromptOptions): Promise<string> {\n // eslint-disable-next-line max-params\n return new Promise((resolve, reject) => {\n render(<TextPrompt {...props} onSubmit={(value: string) => resolve(value)} />, {\n ...renderOptions,\n exitOnCtrlC: false,\n }).catch(reject)\n })\n}\n\ninterface RenderTextOptions {\n text: string\n logLevel?: LogLevel\n logger?: Logger\n}\n\n/** Renders a text string to the console.\n * Using this function makes sure that correct spacing is applied among the various components.\n * @example\n * Hello world!\n *\n */\nexport function renderText({text, logLevel = 'info', logger = consoleLog}: RenderTextOptions) {\n let textWithLineReturn = text\n if (!text.endsWith('\\n')) textWithLineReturn += '\\n'\n\n if (isUnitTest()) collectLog(logLevel, textWithLineReturn)\n outputWhereAppropriate(logLevel, logger, textWithLineReturn)\n return textWithLineReturn\n}\n\n/** Waits for any key to be pressed except Ctrl+C which will terminate the process. */\nexport const keypress = async () => {\n // eslint-disable-next-line max-params\n return new Promise((resolve, reject) => {\n const handler = (buffer: Buffer) => {\n process.stdin.setRawMode(false)\n process.stdin.pause()\n\n const bytes = Array.from(buffer)\n\n if (bytes.length && bytes[0] === 3) {\n outputDebug('Canceled keypress, User pressed CTRL+C')\n reject(new AbortSilentError())\n }\n process.nextTick(resolve)\n }\n\n process.stdin.resume()\n process.stdin.setRawMode(true)\n process.stdin.once('data', handler)\n })\n}\n\nexport type Key = InkKey\nexport {Task, TokenItem, InlineToken, LinkToken, TableColumn}\n"]}
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/public/node/ui.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable tsdoc/syntax */\nimport {AbortSilentError, FatalError as Fatal} from './error.js'\nimport {collectLog, consoleError, consoleLog, Logger, LogLevel, outputDebug, outputWhereAppropriate} from './output.js'\nimport {isUnitTest} from './context/local.js'\nimport {AbortController} from './abort.js'\nimport {ConcurrentOutput, ConcurrentOutputProps} from '../../private/node/ui/components/ConcurrentOutput.js'\nimport {render, renderOnce} from '../../private/node/ui.js'\nimport {alert, AlertOptions} from '../../private/node/ui/alert.js'\nimport {CustomSection} from '../../private/node/ui/components/Alert.js'\nimport {FatalError} from '../../private/node/ui/components/FatalError.js'\nimport ScalarDict from '../../private/node/ui/components/Table/ScalarDict.js'\nimport {Table, TableColumn, TableProps} from '../../private/node/ui/components/Table/Table.js'\nimport {SelectPrompt, SelectPromptProps} from '../../private/node/ui/components/SelectPrompt.js'\nimport {Tasks, Task} from '../../private/node/ui/components/Tasks.js'\nimport {TextPrompt, TextPromptProps} from '../../private/node/ui/components/TextPrompt.js'\nimport {AutocompletePromptProps, AutocompletePrompt} from '../../private/node/ui/components/AutocompletePrompt.js'\nimport {InlineToken, LinkToken, TokenItem} from '../../private/node/ui/components/TokenizedText.js'\nimport React from 'react'\nimport {Key as InkKey, RenderOptions} from 'ink'\n\ntype PartialBy<T, TKey extends keyof T> = Omit<T, TKey> & Partial<Pick<T, TKey>>\n\nexport interface RenderConcurrentOptions extends PartialBy<ConcurrentOutputProps, 'abortController'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders output from concurrent processes to the terminal with {@link ConcurrentOutput}.\n * @example\n * 0000-00-00 00:00:00 │ backend │ first backend message\n * 0000-00-00 00:00:00 │ backend │ second backend message\n * 0000-00-00 00:00:00 │ backend │ third backend message\n * 0000-00-00 00:00:00 │ frontend │ first frontend message\n * 0000-00-00 00:00:00 │ frontend │ second frontend message\n * 0000-00-00 00:00:00 │ frontend │ third frontend message\n *\n * › Press p │ open your browser\n * › Press q │ quit.\n *\n * Preview URL: https://shopify.com\n *\n */\nexport async function renderConcurrent({renderOptions, ...props}: RenderConcurrentOptions) {\n const newProps = {\n abortController: new AbortController(),\n ...props,\n }\n\n return render(<ConcurrentOutput {...newProps} />, {\n ...renderOptions,\n exitOnCtrlC: typeof props.onInput === 'undefined',\n })\n}\n\nexport type AlertCustomSection = CustomSection\nexport type RenderAlertOptions = Omit<AlertOptions, 'type'>\n\n/**\n * Renders an information banner to the console.\n * @example Basic\n * ╭─ info ───────────────────────────────────────────────────╮\n * │ │\n * │ CLI update available │\n * │ │\n * │ Run `npm run shopify upgrade`. │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ info ───────────────────────────────────────────────────╮\n * │ │\n * │ my-app initialized and ready to build. │\n * │ │\n * │ Next steps │\n * │ • Run `cd verification-app` │\n * │ • To preview your project, run `npm app dev` │\n * │ • To add extensions, run `npm generate extension` │\n * │ │\n * │ Reference │\n * │ • Run `npm shopify help` │\n * │ • Dev docs [1] │\n * │ │\n * │ Custom section │\n * │ • Item 1 [2] │\n * │ • Item 2 │\n * │ • Item 3 [3] │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n * [1] https://shopify.dev\n * [2] https://www.google.com/search?q=jh56t9l34kpo35tw8s28hn7s\n * 9s2xvzla01d8cn6j7yq&rlz=1C1GCEU_enUS832US832&oq=jh56t9l34kpo\n * 35tw8s28hn7s9s2xvzla01d8cn6j7yq&aqs=chrome.0.35i39l2j0l4j46j\n * 69i60.2711j0j7&sourceid=chrome&ie=UTF-8\n * [3] https://shopify.com\n *\n */\nexport function renderInfo(options: RenderAlertOptions) {\n return alert({...options, type: 'info'})\n}\n\n/**\n * Renders a success banner to the console.\n * @example Basic\n * ╭─ success ────────────────────────────────────────────────╮\n * │ │\n * │ CLI updated. │\n * │ │\n * │ You are now running version 3.47. │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ success ────────────────────────────────────────────────╮\n * │ │\n * │ Deployment successful. │\n * │ │\n * │ Your extensions have been uploaded to your Shopify │\n * │ Partners Dashboard. │\n * │ │\n * │ Next steps │\n * │ • See your deployment and set it live [1] │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n * [1] https://partners.shopify.com/1797046/apps/4523695/deploy\n * ments\n *\n */\nexport function renderSuccess(options: RenderAlertOptions) {\n return alert({...options, type: 'success'})\n}\n\n/**\n * Renders a warning banner to the console.\n * @example Basic\n * ╭─ warning ────────────────────────────────────────────────╮\n * │ │\n * │ You have reached your limit of checkout extensions for │\n * │ this app. │\n * │ │\n * │ You can free up space for a new one by deleting an │\n * │ existing one. │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ warning ────────────────────────────────────────────────╮\n * │ │\n * │ Required access scope update. │\n * │ │\n * │ The deadline for re-selecting your app scopes is May │\n * │ 1, 2022. │\n * │ │\n * │ Reference │\n * │ • Dev docs [1] │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n * [1] https://shopify.dev/app/scopes\n *\n */\nexport function renderWarning(options: RenderAlertOptions) {\n return alert({...options, type: 'warning'})\n}\n\ninterface RenderFatalErrorOptions {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a Fatal error to the console inside a banner.\n * @example Basic\n * ╭─ error ──────────────────────────────────────────────────╮\n * │ │\n * │ Something went wrong. │\n * │ │\n * │ To investigate the issue, examine this stack trace: │\n * │ at _compile (internal/modules/cjs/loader.js:1137) │\n * │ at js (internal/modules/cjs/loader.js:1157) │\n * │ at load (internal/modules/cjs/loader.js:985) │\n * │ at _load (internal/modules/cjs/loader.js:878) │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ error ──────────────────────────────────────────────────╮\n * │ │\n * │ No Organization found │\n * │ │\n * │ Next steps │\n * │ • Have you created a Shopify Partners organization │\n * │ [1]? │\n * │ • Have you confirmed your accounts from the emails │\n * │ you received? │\n * │ • Need to connect to a different App or │\n * │ organization? Run the command again with `--reset` │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n * [1] https://partners.shopify.com/signup\n *\n */\n// eslint-disable-next-line max-params\nexport function renderFatalError(error: Fatal, {renderOptions}: RenderFatalErrorOptions = {}) {\n return renderOnce(<FatalError error={error} />, {logLevel: 'error', logger: consoleError, renderOptions})\n}\n\nexport interface RenderSeletPromptOptions<T> extends Omit<SelectPromptProps<T>, 'onSubmit'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a select prompt to the console.\n * @example\n * ? Associate your project with the org Castile Ventures?\n *\n * Add: • new-ext\n *\n * Remove: • integrated-demand-ext\n * • order-discount\n *\n * Automations\n * > (a) fifth\n * (2) sixth\n *\n * Merchant Admin\n * (3) eighth\n * (4) ninth\n *\n * Other\n * (f) first\n * (s) second\n * (7) third\n * (8) fourth\n * (9) seventh\n * (10) tenth\n *\n * Press ↑↓ arrows to select, enter to confirm\n *\n */\nexport function renderSelectPrompt<T>({renderOptions, ...props}: RenderSeletPromptOptions<T>): Promise<T> {\n // eslint-disable-next-line max-params\n return new Promise((resolve, reject) => {\n render(<SelectPrompt {...props} onSubmit={(value: T) => resolve(value)} />, {\n ...renderOptions,\n exitOnCtrlC: false,\n }).catch(reject)\n })\n}\n\nexport interface RenderConfirmationPromptOptions extends Pick<SelectPromptProps<boolean>, 'message' | 'infoTable'> {\n confirmationMessage?: string\n cancellationMessage?: string\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a confirmation prompt to the console.\n * @example\n * ? Delete the following themes from the store?\n *\n * • first theme (#1)\n * • second theme (#2)\n *\n * > (y) Yes, confirm changes\n * (n) Cancel\n *\n * Press ↑↓ arrows to select, enter or a shortcut to confirm\n *\n */\nexport function renderConfirmationPrompt({\n message,\n infoTable,\n confirmationMessage = 'Yes, confirm',\n cancellationMessage = 'No, cancel',\n renderOptions,\n}: RenderConfirmationPromptOptions): Promise<boolean> {\n const choices = [\n {\n label: confirmationMessage,\n value: true,\n key: 'y',\n },\n {\n label: cancellationMessage,\n value: false,\n key: 'n',\n },\n ]\n\n return renderSelectPrompt({\n choices,\n message,\n infoTable,\n submitWithShortcuts: true,\n renderOptions,\n })\n}\n\nexport interface RenderAutocompleteOptions<T>\n extends PartialBy<Omit<AutocompletePromptProps<T>, 'onSubmit'>, 'search'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders an autocomplete prompt to the console.\n * @example\n * ? Select a template: Type to search...\n *\n * > first\n * second\n * third\n * fourth\n * fifth\n * sixth\n * seventh\n * eighth\n * ninth\n * tenth\n * eleventh\n * twelfth\n * thirteenth\n * fourteenth\n * fifteenth\n * sixteenth\n * seventeenth\n * eighteenth\n * nineteenth\n * twentieth\n * twenty-first\n * twenty-second\n * twenty-third\n * twenty-fourth\n * twenty-fifth\n *\n * Press ↑↓ arrows to select, enter to confirm\n *\n */\nexport function renderAutocompletePrompt<T>({renderOptions, ...props}: RenderAutocompleteOptions<T>): Promise<T> {\n const newProps = {\n search(term: string) {\n return Promise.resolve({\n data: props.choices.filter((item) => item.label.toLowerCase().includes(term.toLowerCase())),\n })\n },\n ...props,\n }\n\n // eslint-disable-next-line max-params\n return new Promise((resolve, reject) => {\n render(<AutocompletePrompt {...newProps} onSubmit={(value: T) => resolve(value)} />, {\n ...renderOptions,\n exitOnCtrlC: false,\n }).catch(reject)\n })\n}\n\ninterface RenderTableOptions<T extends ScalarDict> extends TableProps<T> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a table to the console.\n * @example\n * ID Name email\n * ── ────────── ─────────────\n * 1 John Doe jon@doe.com\n * 2 Jane Doe jane@doe.com\n * 3 John Smith jon@smith.com\n */\nexport function renderTable<T extends ScalarDict>({renderOptions, ...props}: RenderTableOptions<T>) {\n return renderOnce(<Table {...props} />, {renderOptions})\n}\n\ninterface RenderTasksOptions {\n renderOptions?: RenderOptions\n}\n\n/**\n * Runs async tasks and displays their progress to the console.\n * @example\n * ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n * Installing dependencies ...\n */\n// eslint-disable-next-line max-params\nexport async function renderTasks<TContext>(tasks: Task<TContext>[], {renderOptions}: RenderTasksOptions = {}) {\n // eslint-disable-next-line max-params\n return new Promise<TContext>((resolve, reject) => {\n render(<Tasks tasks={tasks} onComplete={resolve} />, {\n ...renderOptions,\n exitOnCtrlC: false,\n }).catch(reject)\n })\n}\n\nexport interface RenderTextPromptOptions extends Omit<TextPromptProps, 'onSubmit'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a text prompt to the console.\n * @example\n * ? App project name (can be changed later):\n * > expansive commerce app\n * ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔\n *\n */\nexport function renderTextPrompt({renderOptions, ...props}: RenderTextPromptOptions): Promise<string> {\n // eslint-disable-next-line max-params\n return new Promise((resolve, reject) => {\n render(<TextPrompt {...props} onSubmit={(value: string) => resolve(value)} />, {\n ...renderOptions,\n exitOnCtrlC: false,\n }).catch(reject)\n })\n}\n\ninterface RenderTextOptions {\n text: string\n logLevel?: LogLevel\n logger?: Logger\n}\n\n/** Renders a text string to the console.\n * Using this function makes sure that correct spacing is applied among the various components.\n * @example\n * Hello world!\n *\n */\nexport function renderText({text, logLevel = 'info', logger = consoleLog}: RenderTextOptions) {\n let textWithLineReturn = text\n if (!text.endsWith('\\n')) textWithLineReturn += '\\n'\n\n if (isUnitTest()) collectLog(logLevel, textWithLineReturn)\n outputWhereAppropriate(logLevel, logger, textWithLineReturn)\n return textWithLineReturn\n}\n\n/** Waits for any key to be pressed except Ctrl+C which will terminate the process. */\nexport const keypress = async () => {\n // eslint-disable-next-line max-params\n return new Promise((resolve, reject) => {\n const handler = (buffer: Buffer) => {\n process.stdin.setRawMode(false)\n process.stdin.pause()\n\n const bytes = Array.from(buffer)\n\n if (bytes.length && bytes[0] === 3) {\n outputDebug('Canceled keypress, User pressed CTRL+C')\n reject(new AbortSilentError())\n }\n process.nextTick(resolve)\n }\n\n process.stdin.resume()\n process.stdin.setRawMode(true)\n process.stdin.once('data', handler)\n })\n}\n\nexport type Key = InkKey\nexport {Task, TokenItem, InlineToken, LinkToken, TableColumn}\n"]}
|