netlify-cli 17.3.1 → 17.4.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 (210) hide show
  1. package/README.md +3 -139
  2. package/npm-shrinkwrap.json +82 -82
  3. package/package.json +16 -15
  4. package/src/commands/addons/addons-auth.mjs +27 -30
  5. package/src/commands/addons/addons-config.mjs +145 -154
  6. package/src/commands/addons/addons-create.mjs +94 -108
  7. package/src/commands/addons/addons-delete.mjs +36 -41
  8. package/src/commands/addons/addons-list.mjs +38 -42
  9. package/src/commands/addons/addons.mjs +26 -28
  10. package/src/commands/addons/index.mjs +1 -1
  11. package/src/commands/api/api.mjs +45 -53
  12. package/src/commands/api/index.mjs +1 -1
  13. package/src/commands/base-command.mjs +597 -684
  14. package/src/commands/blobs/blobs-delete.mjs +35 -0
  15. package/src/commands/blobs/blobs-get.mjs +44 -0
  16. package/src/commands/blobs/blobs-list.mjs +48 -0
  17. package/src/commands/blobs/blobs-set.mjs +54 -0
  18. package/src/commands/blobs/blobs.mjs +32 -0
  19. package/src/commands/blobs/index.mjs +1 -0
  20. package/src/commands/build/build.mjs +55 -67
  21. package/src/commands/build/index.mjs +1 -1
  22. package/src/commands/completion/completion.mjs +41 -46
  23. package/src/commands/completion/index.mjs +1 -1
  24. package/src/commands/deploy/deploy.mjs +675 -710
  25. package/src/commands/deploy/index.mjs +1 -1
  26. package/src/commands/dev/dev-exec.mjs +20 -32
  27. package/src/commands/dev/dev.mjs +217 -302
  28. package/src/commands/dev/index.mjs +1 -1
  29. package/src/commands/dev/types.d.ts +30 -0
  30. package/src/commands/env/env-clone.mjs +157 -184
  31. package/src/commands/env/env-get.mjs +49 -68
  32. package/src/commands/env/env-import.mjs +100 -119
  33. package/src/commands/env/env-list.mjs +104 -129
  34. package/src/commands/env/env-set.mjs +160 -185
  35. package/src/commands/env/env-unset.mjs +104 -122
  36. package/src/commands/env/env.mjs +28 -30
  37. package/src/commands/env/index.mjs +1 -1
  38. package/src/commands/functions/functions-build.mjs +29 -41
  39. package/src/commands/functions/functions-create.mjs +533 -601
  40. package/src/commands/functions/functions-invoke.mjs +193 -216
  41. package/src/commands/functions/functions-list.mjs +45 -55
  42. package/src/commands/functions/functions-serve.mjs +51 -61
  43. package/src/commands/functions/functions.mjs +26 -32
  44. package/src/commands/functions/index.mjs +1 -1
  45. package/src/commands/index.mjs +2 -2
  46. package/src/commands/init/index.mjs +1 -1
  47. package/src/commands/init/init.mjs +138 -167
  48. package/src/commands/integration/deploy.mjs +337 -399
  49. package/src/commands/integration/index.mjs +12 -13
  50. package/src/commands/link/index.mjs +1 -1
  51. package/src/commands/link/link.mjs +298 -317
  52. package/src/commands/lm/index.mjs +1 -1
  53. package/src/commands/lm/lm-info.mjs +23 -31
  54. package/src/commands/lm/lm-install.mjs +13 -17
  55. package/src/commands/lm/lm-setup.mjs +80 -84
  56. package/src/commands/lm/lm-uninstall.mjs +7 -12
  57. package/src/commands/lm/lm.mjs +18 -22
  58. package/src/commands/login/index.mjs +1 -1
  59. package/src/commands/login/login.mjs +35 -41
  60. package/src/commands/logout/index.mjs +1 -1
  61. package/src/commands/logout/logout.mjs +25 -31
  62. package/src/commands/main.mjs +166 -201
  63. package/src/commands/open/index.mjs +1 -1
  64. package/src/commands/open/open-admin.mjs +15 -18
  65. package/src/commands/open/open-site.mjs +16 -19
  66. package/src/commands/open/open.mjs +24 -27
  67. package/src/commands/recipes/common.mjs +23 -34
  68. package/src/commands/recipes/index.mjs +1 -1
  69. package/src/commands/recipes/recipes-list.mjs +13 -20
  70. package/src/commands/recipes/recipes.mjs +59 -72
  71. package/src/commands/serve/index.mjs +1 -1
  72. package/src/commands/serve/serve.mjs +142 -189
  73. package/src/commands/sites/index.mjs +2 -2
  74. package/src/commands/sites/sites-create-template.mjs +214 -236
  75. package/src/commands/sites/sites-create.mjs +145 -157
  76. package/src/commands/sites/sites-delete.mjs +75 -81
  77. package/src/commands/sites/sites-list.mjs +63 -66
  78. package/src/commands/sites/sites.mjs +18 -20
  79. package/src/commands/status/index.mjs +1 -1
  80. package/src/commands/status/status-hooks.mjs +32 -34
  81. package/src/commands/status/status.mjs +99 -106
  82. package/src/commands/switch/index.mjs +1 -1
  83. package/src/commands/switch/switch.mjs +32 -37
  84. package/src/commands/types.d.ts +31 -0
  85. package/src/commands/unlink/index.mjs +1 -1
  86. package/src/commands/unlink/unlink.mjs +23 -29
  87. package/src/commands/watch/index.mjs +1 -1
  88. package/src/commands/watch/watch.mjs +91 -105
  89. package/src/functions-templates/javascript/hello/{{name}}.js +2 -3
  90. package/src/lib/account.mjs +4 -5
  91. package/src/lib/api.mjs +22 -20
  92. package/src/lib/blobs/blobs.mjs +36 -45
  93. package/src/lib/build.mjs +82 -85
  94. package/src/lib/completion/constants.mjs +2 -4
  95. package/src/lib/completion/generate-autocompletion.mjs +33 -36
  96. package/src/lib/completion/get-autocompletion.mjs +31 -35
  97. package/src/lib/completion/index.mjs +1 -1
  98. package/src/lib/completion/script.mjs +12 -19
  99. package/src/lib/edge-functions/bootstrap.mjs +3 -5
  100. package/src/lib/edge-functions/consts.mjs +9 -10
  101. package/src/lib/edge-functions/deploy.mjs +28 -34
  102. package/src/lib/edge-functions/editor-helper.mjs +29 -42
  103. package/src/lib/edge-functions/headers.mjs +24 -26
  104. package/src/lib/edge-functions/internal.mjs +38 -44
  105. package/src/lib/edge-functions/proxy.mjs +229 -228
  106. package/src/lib/edge-functions/registry.mjs +473 -574
  107. package/src/lib/exec-fetcher.mjs +115 -122
  108. package/src/lib/fs.mjs +28 -27
  109. package/src/lib/functions/background.mjs +16 -20
  110. package/src/lib/functions/config.mjs +12 -9
  111. package/src/lib/functions/form-submissions-handler.mjs +143 -149
  112. package/src/lib/functions/local-proxy.mjs +40 -44
  113. package/src/lib/functions/memoized-build.mjs +19 -21
  114. package/src/lib/functions/netlify-function.mjs +269 -249
  115. package/src/lib/functions/registry.mjs +509 -568
  116. package/src/lib/functions/runtimes/go/index.mjs +62 -71
  117. package/src/lib/functions/runtimes/index.mjs +8 -15
  118. package/src/lib/functions/runtimes/js/builders/netlify-lambda.mjs +55 -64
  119. package/src/lib/functions/runtimes/js/builders/zisi.mjs +135 -154
  120. package/src/lib/functions/runtimes/js/constants.mjs +1 -1
  121. package/src/lib/functions/runtimes/js/index.mjs +92 -109
  122. package/src/lib/functions/runtimes/js/worker.mjs +43 -45
  123. package/src/lib/functions/runtimes/rust/index.mjs +64 -73
  124. package/src/lib/functions/scheduled.mjs +70 -88
  125. package/src/lib/functions/server.mjs +269 -327
  126. package/src/lib/functions/synchronous.mjs +118 -147
  127. package/src/lib/functions/utils.mjs +38 -46
  128. package/src/lib/geo-location.mjs +69 -81
  129. package/src/lib/http-agent.mjs +87 -90
  130. package/src/lib/images/proxy.mjs +97 -89
  131. package/src/lib/log.mjs +6 -9
  132. package/src/lib/path.mjs +2 -1
  133. package/src/lib/render-error-template.mjs +19 -20
  134. package/src/lib/settings.mjs +17 -19
  135. package/src/lib/spinner.mjs +21 -23
  136. package/src/lib/string.mjs +4 -2
  137. package/src/recipes/vscode/index.mjs +69 -85
  138. package/src/recipes/vscode/settings.mjs +53 -58
  139. package/src/utils/addons/compare.mjs +31 -32
  140. package/src/utils/addons/diffs/index.mjs +16 -17
  141. package/src/utils/addons/diffs/options.mjs +99 -101
  142. package/src/utils/addons/prepare.mjs +100 -97
  143. package/src/utils/addons/prompts.mjs +73 -76
  144. package/src/utils/addons/render.mjs +33 -36
  145. package/src/utils/addons/validation.mjs +19 -15
  146. package/src/utils/banner.mjs +11 -16
  147. package/src/utils/build-info.mjs +65 -66
  148. package/src/utils/command-helpers.mjs +185 -199
  149. package/src/utils/create-deferred.mjs +9 -12
  150. package/src/utils/create-stream-promise.mjs +54 -47
  151. package/src/utils/deploy/constants.mjs +9 -11
  152. package/src/utils/deploy/deploy-site.mjs +162 -182
  153. package/src/utils/deploy/hash-config.mjs +21 -21
  154. package/src/utils/deploy/hash-files.mjs +34 -38
  155. package/src/utils/deploy/hash-fns.mjs +149 -154
  156. package/src/utils/deploy/hasher-segments.mjs +58 -52
  157. package/src/utils/deploy/upload-files.mjs +99 -113
  158. package/src/utils/deploy/util.mjs +85 -91
  159. package/src/utils/detect-server-settings.mjs +236 -268
  160. package/src/utils/dev.mjs +163 -178
  161. package/src/utils/dot-env.mjs +37 -42
  162. package/src/utils/env/index.mjs +148 -148
  163. package/src/utils/execa.mjs +9 -13
  164. package/src/utils/feature-flags.mjs +6 -5
  165. package/src/utils/framework-server.mjs +43 -52
  166. package/src/utils/functions/constants.mjs +1 -1
  167. package/src/utils/functions/functions.mjs +30 -40
  168. package/src/utils/functions/get-functions.mjs +28 -29
  169. package/src/utils/functions/index.mjs +3 -3
  170. package/src/utils/get-global-config.mjs +33 -36
  171. package/src/utils/get-package-json.mjs +14 -15
  172. package/src/utils/get-repo-data.mjs +54 -64
  173. package/src/utils/get-site.mjs +14 -14
  174. package/src/utils/gh-auth.mjs +79 -100
  175. package/src/utils/gitignore.mjs +37 -40
  176. package/src/utils/headers.mjs +33 -35
  177. package/src/utils/hooks/requires-site-info.mjs +26 -22
  178. package/src/utils/init/config-github.mjs +207 -219
  179. package/src/utils/init/config-manual.mjs +83 -100
  180. package/src/utils/init/config.mjs +25 -26
  181. package/src/utils/init/node-version.mjs +23 -30
  182. package/src/utils/init/plugins.mjs +12 -8
  183. package/src/utils/init/utils.mjs +152 -172
  184. package/src/utils/live-tunnel.mjs +118 -141
  185. package/src/utils/lm/install.mjs +220 -259
  186. package/src/utils/lm/requirements.mjs +54 -63
  187. package/src/utils/lm/steps.mjs +31 -31
  188. package/src/utils/lm/ui.mjs +13 -20
  189. package/src/utils/open-browser.mjs +31 -32
  190. package/src/utils/parse-raw-flags.mjs +39 -35
  191. package/src/utils/proxy-server.mjs +84 -71
  192. package/src/utils/proxy.mjs +696 -750
  193. package/src/utils/read-repo-url.mjs +48 -47
  194. package/src/utils/redirects.mjs +49 -49
  195. package/src/utils/request-id.mjs +2 -4
  196. package/src/utils/rules-proxy.mjs +96 -100
  197. package/src/utils/run-build.mjs +109 -132
  198. package/src/utils/shell.mjs +99 -106
  199. package/src/utils/sign-redirect.mjs +14 -14
  200. package/src/utils/sites/utils.mjs +48 -55
  201. package/src/utils/state-config.mjs +101 -101
  202. package/src/utils/static-server.mjs +28 -34
  203. package/src/utils/telemetry/index.mjs +2 -2
  204. package/src/utils/telemetry/report-error.mjs +45 -49
  205. package/src/utils/telemetry/request.mjs +36 -43
  206. package/src/utils/telemetry/telemetry.mjs +90 -105
  207. package/src/utils/telemetry/utils.mjs +5 -6
  208. package/src/utils/telemetry/validation.mjs +55 -53
  209. package/src/utils/types.d.ts +46 -0
  210. package/src/utils/validation.mjs +10 -13
@@ -1,85 +1,90 @@
1
- // @ts-check
2
- import { chalk, error, exit, log, warn } from '../command-helpers.mjs'
3
-
1
+ import { chalk, error, exit, log, warn } from '../command-helpers.mjs';
4
2
  export const ADDON_VALIDATION = {
5
- EXISTS: 'EXISTS',
6
- NOT_EXISTS: 'NOT_EXISTS',
7
- }
8
-
3
+ EXISTS: 'EXISTS',
4
+ NOT_EXISTS: 'NOT_EXISTS',
5
+ };
6
+ // @ts-expect-error TS(7031) FIXME: Binding element 'addon' implicitly has an 'any' ty... Remove this comment to see the full error message
9
7
  const validateExists = ({ addon, addonName, siteData }) => {
10
- if (!addon || !addon.id) {
11
- log(`Add-on ${addonName} doesn't exist for ${siteData.name}`)
12
- log(`> Run \`netlify addons:create ${addonName}\` to create an instance for this site`)
13
- exit(1)
14
- }
15
- }
16
-
17
- const validateNotExists = ({ addon, addonName, siteData }) => {
18
- if (addon && addon.id) {
19
- log(`The "${addonName} add-on" already exists for ${siteData.name}`)
20
- log()
21
- const cmd = chalk.cyan(`\`netlify addons:config ${addonName}\``)
22
- log(`- To update this add-on run: ${cmd}`)
23
- const deleteCmd = chalk.cyan(`\`netlify addons:delete ${addonName}\``)
24
- log(`- To remove this add-on run: ${deleteCmd}`)
25
- log()
26
- exit(1)
27
- }
28
- }
29
-
30
- export const getCurrentAddon = ({ addonName, addons }) => addons.find((addon) => addon.service_slug === addonName)
31
-
32
- const validateCurrentAddon = ({ addon, addonName, siteData, validation }) => {
33
- switch (validation) {
34
- case ADDON_VALIDATION.EXISTS: {
35
- validateExists({ addon, addonName, siteData })
36
- break
8
+ if (!addon || !addon.id) {
9
+ log(`Add-on ${addonName} doesn't exist for ${siteData.name}`);
10
+ log(`> Run \`netlify addons:create ${addonName}\` to create an instance for this site`);
11
+ exit(1);
37
12
  }
38
- case ADDON_VALIDATION.NOT_EXISTS: {
39
- validateNotExists({ addon, addonName, siteData })
40
- break
13
+ };
14
+ // @ts-expect-error TS(7031) FIXME: Binding element 'addon' implicitly has an 'any' ty... Remove this comment to see the full error message
15
+ const validateNotExists = ({ addon, addonName, siteData }) => {
16
+ if (addon && addon.id) {
17
+ log(`The "${addonName} add-on" already exists for ${siteData.name}`);
18
+ log();
19
+ const cmd = chalk.cyan(`\`netlify addons:config ${addonName}\``);
20
+ log(`- To update this add-on run: ${cmd}`);
21
+ const deleteCmd = chalk.cyan(`\`netlify addons:delete ${addonName}\``);
22
+ log(`- To remove this add-on run: ${deleteCmd}`);
23
+ log();
24
+ exit(1);
41
25
  }
42
- default: {
43
- warn(`Unknown addons validation: ${validation}`)
44
- break
26
+ };
27
+ // @ts-expect-error TS(7031) FIXME: Binding element 'addonName' implicitly has an 'any... Remove this comment to see the full error message
28
+ export const getCurrentAddon = ({ addonName, addons }) => addons.find((addon) => addon.service_slug === addonName);
29
+ // @ts-expect-error TS(7031) FIXME: Binding element 'addon' implicitly has an 'any' ty... Remove this comment to see the full error message
30
+ const validateCurrentAddon = ({ addon, addonName, siteData, validation }) => {
31
+ switch (validation) {
32
+ case ADDON_VALIDATION.EXISTS: {
33
+ validateExists({ addon, addonName, siteData });
34
+ break;
35
+ }
36
+ case ADDON_VALIDATION.NOT_EXISTS: {
37
+ validateNotExists({ addon, addonName, siteData });
38
+ break;
39
+ }
40
+ default: {
41
+ warn(`Unknown addons validation: ${validation}`);
42
+ break;
43
+ }
45
44
  }
46
- }
47
- }
48
-
45
+ };
46
+ // @ts-expect-error TS(7031) FIXME: Binding element 'addonName' implicitly has an 'any... Remove this comment to see the full error message
49
47
  export const getAddonManifest = async ({ addonName, api }) => {
50
- let manifest
51
- try {
52
- manifest = await api.showServiceManifest({ addonName })
53
- } catch (error_) {
54
- if (typeof error_.message === 'string' && error_.message.includes('Not Found')) {
55
- error(`No add-on "${addonName}" found. Please double check your add-on name and try again`)
56
- } else {
57
- error(error_.message)
48
+ let manifest;
49
+ try {
50
+ manifest = await api.showServiceManifest({ addonName });
51
+ }
52
+ catch (error_) {
53
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
54
+ if (typeof error_.message === 'string' && error_.message.includes('Not Found')) {
55
+ error(`No add-on "${addonName}" found. Please double check your add-on name and try again`);
56
+ }
57
+ else {
58
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
59
+ error(error_.message);
60
+ }
58
61
  }
59
- }
60
- return manifest
61
- }
62
-
62
+ return manifest;
63
+ };
64
+ // @ts-expect-error TS(7031) FIXME: Binding element 'api' implicitly has an 'any' type... Remove this comment to see the full error message
63
65
  export const getSiteData = async ({ api, siteId }) => {
64
- let siteData
65
- try {
66
- siteData = await api.getSite({ siteId })
67
- } catch (error_) {
68
- error(`Failed getting list of site data: ${error_.message}`)
69
- }
70
- return siteData
71
- }
72
-
66
+ let siteData;
67
+ try {
68
+ siteData = await api.getSite({ siteId });
69
+ }
70
+ catch (error_) {
71
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
72
+ error(`Failed getting list of site data: ${error_.message}`);
73
+ }
74
+ return siteData;
75
+ };
76
+ // @ts-expect-error TS(7031) FIXME: Binding element 'api' implicitly has an 'any' type... Remove this comment to see the full error message
73
77
  export const getAddons = async ({ api, siteId }) => {
74
- let addons
75
- try {
76
- addons = await api.listServiceInstancesForSite({ siteId })
77
- } catch (error_) {
78
- error(`Failed getting list of addons: ${error_.message}`)
79
- }
80
- return addons
81
- }
82
-
78
+ let addons;
79
+ try {
80
+ addons = await api.listServiceInstancesForSite({ siteId });
81
+ }
82
+ catch (error_) {
83
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
84
+ error(`Failed getting list of addons: ${error_.message}`);
85
+ }
86
+ return addons;
87
+ };
83
88
  /**
84
89
  *
85
90
  * @param {object} config
@@ -87,28 +92,26 @@ export const getAddons = async ({ api, siteId }) => {
87
92
  * @param {string} [config.addonName]
88
93
  * @param {keyof ADDON_VALIDATION} [config.validation]
89
94
  */
95
+ // @ts-expect-error TS(7031) FIXME: Binding element 'addonName' implicitly has an 'any... Remove this comment to see the full error message
90
96
  export const prepareAddonCommand = async ({ addonName, command, validation }) => {
91
- const { netlify } = command
92
- const { api, site } = netlify
93
- const siteId = site.id
94
- if (!siteId) {
95
- error('No site id found, please run inside a site folder or `netlify link`')
96
- }
97
-
98
- await command.authenticate()
99
-
100
- const [manifest, siteData, addons] = await Promise.all([
101
- // TODO: check as `getAddonManifest` did not accept a parameter error
102
- addonName ? getAddonManifest({ api, addonName, error }) : Promise.resolve(),
103
- getSiteData({ api, siteId }),
104
- getAddons({ api, siteId }),
105
- ])
106
-
107
- let addon
108
- if (addonName) {
109
- addon = getCurrentAddon({ addons, addonName })
110
- validateCurrentAddon({ addon, validation, addonName, siteData })
111
- }
112
-
113
- return { manifest, addons, addon, siteData }
114
- }
97
+ const { netlify } = command;
98
+ const { api, site } = netlify;
99
+ const siteId = site.id;
100
+ if (!siteId) {
101
+ error('No site id found, please run inside a site folder or `netlify link`');
102
+ }
103
+ await command.authenticate();
104
+ const [manifest, siteData, addons] = await Promise.all([
105
+ // TODO: check as `getAddonManifest` did not accept a parameter error
106
+ // @ts-expect-error TS(2345) FIXME: Argument of type '{ api: any; addonName: any; erro... Remove this comment to see the full error message
107
+ addonName ? getAddonManifest({ api, addonName, error }) : Promise.resolve(),
108
+ getSiteData({ api, siteId }),
109
+ getAddons({ api, siteId }),
110
+ ]);
111
+ let addon;
112
+ if (addonName) {
113
+ addon = getCurrentAddon({ addons, addonName });
114
+ validateCurrentAddon({ addon, validation, addonName, siteData });
115
+ }
116
+ return { manifest, addons, addon, siteData };
117
+ };
@@ -1,78 +1,74 @@
1
- // @ts-check
2
- import { chalk } from '../command-helpers.mjs'
3
-
1
+ import { chalk } from '../command-helpers.mjs';
4
2
  /* programmatically generate CLI prompts */
3
+ // @ts-expect-error TS(7006) FIXME: Parameter 'settings' implicitly has an 'any' type.
5
4
  export default function generatePrompts(settings) {
6
- const { config, configValues } = settings
7
- const configItems = Object.keys(config)
8
-
9
- return configItems
10
- .map((key, index) => {
11
- const setting = config[key]
12
- // const { type, displayName } = setting
13
- let prompt
14
- // Tell user to use types
15
- if (!setting.type) {
16
- console.log(`⚠️ ${chalk.yellowBright(`Warning: no \`type\` is set for config key: ${configItems[index]}`)}`)
17
- console.log(
18
- `It's highly recommended that you type your configuration values. It will help with automatic documentation, sharing of your services, and make your services configurable through a GUI`,
19
- )
20
- console.log('')
21
- }
22
-
23
- // Handle shorthand config. Probably will be removed. Severely limited + not great UX
24
- if (typeof setting === 'string' || typeof setting === 'boolean') {
25
- if (typeof setting === 'string') {
26
- prompt = {
27
- type: 'input',
28
- name: key,
29
- message: `Enter string value for '${key}':`,
30
- }
31
- // if current stage value set show as default
32
- if (configValues[key]) {
33
- prompt.default = configValues[key]
34
- }
35
- } else if (typeof setting === 'boolean') {
36
- prompt = {
37
- type: 'confirm',
38
- name: key,
39
- message: `Do you want '${key}':`,
40
- }
5
+ const { config, configValues } = settings;
6
+ const configItems = Object.keys(config);
7
+ return configItems
8
+ .map((key, index) => {
9
+ const setting = config[key];
10
+ // const { type, displayName } = setting
11
+ let prompt;
12
+ // Tell user to use types
13
+ if (!setting.type) {
14
+ console.log(`⚠️ ${chalk.yellowBright(`Warning: no \`type\` is set for config key: ${configItems[index]}`)}`);
15
+ console.log(`It's highly recommended that you type your configuration values. It will help with automatic documentation, sharing of your services, and make your services configurable through a GUI`);
16
+ console.log('');
41
17
  }
42
- return prompt
43
- }
44
-
45
- // For future use. Once UX is decided
46
- // const defaultValidation = (setting.required) ? validateRequired : noValidate
47
- const defaultValidation = noValidate
48
- const validateFunction = setting.pattern ? validate(setting.pattern) : defaultValidation
49
- const isRequiredText = setting.required ? ` (${chalk.yellow('required')})` : ''
50
- if (setting.type === 'string' || /string/.test(setting.type)) {
51
- prompt = {
52
- type: 'input',
53
- name: key,
54
- message: `${chalk.white(key)}${isRequiredText} - ${setting.displayName}` || `Please enter value for ${key}`,
55
- validate: validateFunction,
18
+ // Handle shorthand config. Probably will be removed. Severely limited + not great UX
19
+ if (typeof setting === 'string' || typeof setting === 'boolean') {
20
+ if (typeof setting === 'string') {
21
+ prompt = {
22
+ type: 'input',
23
+ name: key,
24
+ message: `Enter string value for '${key}':`,
25
+ };
26
+ // if current stage value set show as default
27
+ if (configValues[key]) {
28
+ // @ts-expect-error TS(2339) FIXME: Property 'default' does not exist on type '{ type:... Remove this comment to see the full error message
29
+ prompt.default = configValues[key];
30
+ }
31
+ }
32
+ else if (typeof setting === 'boolean') {
33
+ prompt = {
34
+ type: 'confirm',
35
+ name: key,
36
+ message: `Do you want '${key}':`,
37
+ };
38
+ }
39
+ return prompt;
56
40
  }
57
- // if value previously set show it
58
- if (configValues[key]) {
59
- prompt.default = configValues[key]
60
- // else show default value if provided
61
- } else if (setting.default) {
62
- prompt.default = setting.default
41
+ // For future use. Once UX is decided
42
+ // const defaultValidation = (setting.required) ? validateRequired : noValidate
43
+ const defaultValidation = noValidate;
44
+ const validateFunction = setting.pattern ? validate(setting.pattern) : defaultValidation;
45
+ const isRequiredText = setting.required ? ` (${chalk.yellow('required')})` : '';
46
+ if (setting.type === 'string' || /string/.test(setting.type)) {
47
+ prompt = {
48
+ type: 'input',
49
+ name: key,
50
+ message: `${chalk.white(key)}${isRequiredText} - ${setting.displayName}` || `Please enter value for ${key}`,
51
+ validate: validateFunction,
52
+ };
53
+ // if value previously set show it
54
+ if (configValues[key]) {
55
+ // @ts-expect-error TS(2339) FIXME: Property 'default' does not exist on type '{ type:... Remove this comment to see the full error message
56
+ prompt.default = configValues[key];
57
+ // else show default value if provided
58
+ }
59
+ else if (setting.default) {
60
+ // @ts-expect-error TS(2339) FIXME: Property 'default' does not exist on type '{ type:... Remove this comment to see the full error message
61
+ prompt.default = setting.default;
62
+ }
63
+ return prompt;
63
64
  }
64
- return prompt
65
- }
66
-
67
- return false
65
+ return false;
68
66
  })
69
- .filter(Boolean)
67
+ .filter(Boolean);
70
68
  }
71
-
72
69
  const noValidate = function () {
73
- return true
74
- }
75
-
70
+ return true;
71
+ };
76
72
  // Will use this soon
77
73
  // function validateRequired(value) {
78
74
  // // eslint-disable-line
@@ -81,13 +77,14 @@ const noValidate = function () {
81
77
  // }
82
78
  // return `Please enter a value this field is required`
83
79
  // }
84
-
80
+ // @ts-expect-error TS(7006) FIXME: Parameter 'pattern' implicitly has an 'any' type.
85
81
  const validate = function (pattern) {
86
- return function validateValue(value) {
87
- const regex = new RegExp(pattern)
88
- if (regex.test(value)) {
89
- return true
90
- }
91
- return `Please enter a value matching regex pattern: /${chalk.yellowBright(pattern)}/`
92
- }
93
- }
82
+ // @ts-expect-error TS(7006) FIXME: Parameter 'value' implicitly has an 'any' type.
83
+ return function validateValue(value) {
84
+ const regex = new RegExp(pattern);
85
+ if (regex.test(value)) {
86
+ return true;
87
+ }
88
+ return `Please enter a value matching regex pattern: /${chalk.yellowBright(pattern)}/`;
89
+ };
90
+ };
@@ -1,39 +1,36 @@
1
- // @ts-check
2
- import AsciiTable from 'ascii-table'
3
-
4
- import { chalk } from '../command-helpers.mjs'
5
-
1
+ import AsciiTable from 'ascii-table';
2
+ import { chalk } from '../command-helpers.mjs';
3
+ // @ts-expect-error TS(7006) FIXME: Parameter 'values' implicitly has an 'any' type.
6
4
  export const renderMissingValues = function (values, manifest) {
7
- const display = values
8
- .map((item) => {
9
- const itemDisplay = chalk.redBright.bold(`${item}`)
10
- const niceNameDisplay = manifest.config[item].displayName
11
- return ` - ${itemDisplay} ${niceNameDisplay}`
5
+ const display = values
6
+ // @ts-expect-error TS(7006) FIXME: Parameter 'item' implicitly has an 'any' type.
7
+ .map((item) => {
8
+ const itemDisplay = chalk.redBright.bold(`${item}`);
9
+ const niceNameDisplay = manifest.config[item].displayName;
10
+ return ` - ${itemDisplay} ${niceNameDisplay}`;
12
11
  })
13
- .join('\n')
14
- console.log(display)
15
- }
16
-
12
+ .join('\n');
13
+ console.log(display);
14
+ };
15
+ // @ts-expect-error TS(7006) FIXME: Parameter 'addonName' implicitly has an 'any' type... Remove this comment to see the full error message
17
16
  export const renderConfigValues = function (addonName, values, currentValue) {
18
- const table = new AsciiTable(`${addonName} add-on settings`)
19
-
20
- const tableHeader = currentValue
21
- ? ['Setting Name', 'Current Value', 'Description']
22
- : ['Setting Name', 'Description', 'Type', 'Required']
23
-
24
- table.setHeading(...tableHeader)
25
-
26
- Object.keys(values).forEach((key) => {
27
- const { displayName, required, type } = values[key]
28
- const requiredText = required ? `true` : `false`
29
- const typeInfo = type || ''
30
- const description = displayName || ''
31
- if (currentValue) {
32
- const value = currentValue[key] || 'Not supplied'
33
- table.addRow(key, value, description)
34
- } else {
35
- table.addRow(key, description, typeInfo, requiredText)
36
- }
37
- })
38
- console.log(table.toString())
39
- }
17
+ const table = new AsciiTable(`${addonName} add-on settings`);
18
+ const tableHeader = currentValue
19
+ ? ['Setting Name', 'Current Value', 'Description']
20
+ : ['Setting Name', 'Description', 'Type', 'Required'];
21
+ table.setHeading(...tableHeader);
22
+ Object.keys(values).forEach((key) => {
23
+ const { displayName, required, type } = values[key];
24
+ const requiredText = required ? `true` : `false`;
25
+ const typeInfo = type || '';
26
+ const description = displayName || '';
27
+ if (currentValue) {
28
+ const value = currentValue[key] || 'Not supplied';
29
+ table.addRow(key, value, description);
30
+ }
31
+ else {
32
+ table.addRow(key, description, typeInfo, requiredText);
33
+ }
34
+ });
35
+ console.log(table.toString());
36
+ };
@@ -1,18 +1,22 @@
1
+ // @ts-expect-error TS(7006) FIXME: Parameter 'config' implicitly has an 'any' type.
1
2
  export const requiredConfigValues = function (config) {
2
- return Object.keys(config).filter((key) => config[key].required)
3
- }
4
-
3
+ return Object.keys(config).filter((key) => config[key].required);
4
+ };
5
+ // @ts-expect-error TS(7006) FIXME: Parameter 'requiredConfig' implicitly has an 'any'... Remove this comment to see the full error message
5
6
  export const missingConfigValues = function (requiredConfig, providedConfig) {
6
- return requiredConfig.filter((key) => !providedConfig[key])
7
- }
8
-
7
+ // @ts-expect-error TS(7006) FIXME: Parameter 'key' implicitly has an 'any' type.
8
+ return requiredConfig.filter((key) => !providedConfig[key]);
9
+ };
10
+ // @ts-expect-error TS(7006) FIXME: Parameter 'allowedConfig' implicitly has an 'any' ... Remove this comment to see the full error message
9
11
  export const updateConfigValues = function (allowedConfig, currentConfig, newConfig) {
10
- return Object.keys(allowedConfig).reduce((acc, key) => {
11
- if (newConfig[key]) {
12
- acc[key] = newConfig[key]
13
- return acc
14
- }
15
- acc[key] = currentConfig[key]
16
- return acc
17
- }, {})
18
- }
12
+ return Object.keys(allowedConfig).reduce((acc, key) => {
13
+ if (newConfig[key]) {
14
+ // @ts-expect-error TS(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
15
+ acc[key] = newConfig[key];
16
+ return acc;
17
+ }
18
+ // @ts-expect-error TS(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
19
+ acc[key] = currentConfig[key];
20
+ return acc;
21
+ }, {});
22
+ };
@@ -1,17 +1,12 @@
1
- // @ts-check
2
- import boxen from 'boxen'
3
-
4
- import { chalk, log, NETLIFYDEVLOG } from './command-helpers.mjs'
5
-
1
+ import boxen from 'boxen';
2
+ import { chalk, log, NETLIFYDEVLOG } from './command-helpers.mjs';
3
+ // @ts-expect-error TS(7031) FIXME: Binding element 'url' implicitly has an 'any' type... Remove this comment to see the full error message
6
4
  export const printBanner = ({ url }) => {
7
- const banner = chalk.bold(`${NETLIFYDEVLOG} Server now ready on ${url}`)
8
-
9
- log(
10
- boxen(banner, {
11
- padding: 1,
12
- margin: 1,
13
- align: 'center',
14
- borderColor: '#00c7b7',
15
- }),
16
- )
17
- }
5
+ const banner = chalk.bold(`${NETLIFYDEVLOG} Server now ready on ${url}`);
6
+ log(boxen(banner, {
7
+ padding: 1,
8
+ margin: 1,
9
+ align: 'center',
10
+ borderColor: '#00c7b7',
11
+ }));
12
+ };