netlify-cli 17.3.2 → 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 +2 -138
  2. package/npm-shrinkwrap.json +76 -76
  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 -99
  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
@@ -0,0 +1,35 @@
1
+ import { getStore } from '@netlify/blobs';
2
+ import { chalk, error as printError } from '../../utils/command-helpers.mjs';
3
+ import requiresSiteInfo from '../../utils/hooks/requires-site-info.mjs';
4
+ /**
5
+ * The blobs:delete command
6
+ */
7
+ const blobsDelete = async (storeName, key, _options, command) => {
8
+ const { api, siteInfo } = command.netlify;
9
+ const store = getStore({
10
+ apiURL: `${api.scheme}://${api.host}`,
11
+ name: storeName,
12
+ siteID: siteInfo.id ?? '',
13
+ token: api.accessToken ?? '',
14
+ });
15
+ try {
16
+ await store.delete(key);
17
+ }
18
+ catch {
19
+ return printError(`Could not delete blob ${chalk.yellow(key)} from store ${chalk.yellow(storeName)}`);
20
+ }
21
+ };
22
+ /**
23
+ * Creates the `netlify blobs:delete` command
24
+ * @param {import('../base-command.mjs').default} program
25
+ * @returns
26
+ */
27
+ // @ts-expect-error TS(7006) FIXME: Parameter 'program' implicitly has an 'any' type.
28
+ export const createBlobsDeleteCommand = (program) => program
29
+ .command('blobs:delete')
30
+ .description(`(Beta) Deletes an object with a given key, if it exists, from a Netlify Blobs store`)
31
+ .argument('<store>', 'Name of the store')
32
+ .argument('<key>', 'Object key')
33
+ .alias('blob:delete')
34
+ .hook('preAction', requiresSiteInfo)
35
+ .action(blobsDelete);
@@ -0,0 +1,44 @@
1
+ import { promises as fs } from 'fs';
2
+ import { resolve } from 'path';
3
+ import { getStore } from '@netlify/blobs';
4
+ import { chalk, error as printError } from '../../utils/command-helpers.mjs';
5
+ import requiresSiteInfo from '../../utils/hooks/requires-site-info.mjs';
6
+ const blobsGet = async (storeName, key, options, command) => {
7
+ const { api, siteInfo } = command.netlify;
8
+ const { output } = options;
9
+ const store = getStore({
10
+ apiURL: `${api.scheme}://${api.host}`,
11
+ name: storeName,
12
+ siteID: siteInfo?.id ?? '',
13
+ token: api.accessToken ?? '',
14
+ });
15
+ let blob;
16
+ try {
17
+ blob = await store.get(key);
18
+ }
19
+ catch {
20
+ return printError(`Could not retrieve blob ${chalk.yellow(key)} from store ${chalk.yellow(storeName)}`);
21
+ }
22
+ if (blob === null) {
23
+ return printError(`Blob ${chalk.yellow(key)} does not exist in store ${chalk.yellow(storeName)}`);
24
+ }
25
+ if (output) {
26
+ const path = resolve(output);
27
+ await fs.writeFile(path, blob);
28
+ }
29
+ else {
30
+ console.log(blob);
31
+ }
32
+ };
33
+ /**
34
+ * Creates the `netlify blobs:get` command
35
+ */
36
+ export const createBlobsGetCommand = (program) => program
37
+ .command('blobs:get')
38
+ .description(`(Beta) Reads an object with a given key from a Netlify Blobs store and, if it exists, prints the content to the terminal or saves it to a file`)
39
+ .argument('<store>', 'Name of the store')
40
+ .argument('<key>', 'Object key')
41
+ .option('-o, --output <path>', 'Defines the filesystem path where the blob data should be persisted')
42
+ .alias('blob:get')
43
+ .hook('preAction', requiresSiteInfo)
44
+ .action(blobsGet);
@@ -0,0 +1,48 @@
1
+ import { getStore } from '@netlify/blobs';
2
+ import AsciiTable from 'ascii-table';
3
+ import { chalk, error as printError, log, logJson } from '../../utils/command-helpers.mjs';
4
+ import requiresSiteInfo from '../../utils/hooks/requires-site-info.mjs';
5
+ const blobsList = async (storeName, options, command) => {
6
+ const { api, siteInfo } = command.netlify;
7
+ const store = getStore({
8
+ apiURL: `${api.scheme}://${api.host}`,
9
+ name: storeName,
10
+ siteID: siteInfo?.id ?? '',
11
+ token: api.accessToken ?? '',
12
+ });
13
+ try {
14
+ const { blobs, directories } = await store.list({
15
+ directories: Boolean(options.directories),
16
+ prefix: options.prefix,
17
+ });
18
+ if (options.json) {
19
+ logJson({ blobs, directories });
20
+ return;
21
+ }
22
+ const table = new AsciiTable(`Netlify Blobs (${storeName})`);
23
+ table.setHeading('Key', 'ETag');
24
+ directories.forEach((directory) => {
25
+ table.addRow(directory, '(directory)');
26
+ });
27
+ blobs.forEach((blob) => {
28
+ table.addRow(blob.key, blob.etag);
29
+ });
30
+ log(table.toString());
31
+ }
32
+ catch {
33
+ return printError(`Could not list blobs from store ${chalk.yellow(storeName)}`);
34
+ }
35
+ };
36
+ /**
37
+ * Creates the `netlify blobs:list` command
38
+ */
39
+ export const createBlobsListCommand = (program) => program
40
+ .command('blobs:list')
41
+ .description(`(Beta) Lists objects in a Netlify Blobs store`)
42
+ .argument('<store>', 'Name of the store')
43
+ .option('-d, --directories', `Indicates that keys with the '/' character should be treated as directories, returning a list of sub-directories at a given level rather than all the keys inside them`)
44
+ .option('-p, --prefix <prefix>', `A string for filtering down the entries; when specified, only the entries whose key starts with that prefix are returned`)
45
+ .option('--json', `Output list contents as JSON`)
46
+ .alias('blob:list')
47
+ .hook('preAction', requiresSiteInfo)
48
+ .action(blobsList);
@@ -0,0 +1,54 @@
1
+ import { promises as fs } from 'fs';
2
+ import { resolve } from 'path';
3
+ import { getStore } from '@netlify/blobs';
4
+ import { chalk, error as printError, isNodeError } from '../../utils/command-helpers.mjs';
5
+ import requiresSiteInfo from '../../utils/hooks/requires-site-info.mjs';
6
+ // eslint-disable-next-line max-params
7
+ const blobsSet = async (storeName, key, valueParts, options, command) => {
8
+ const { api, siteInfo } = command.netlify;
9
+ const { input } = options;
10
+ const store = getStore({
11
+ apiURL: `${api.scheme}://${api.host}`,
12
+ name: storeName,
13
+ siteID: siteInfo.id ?? '',
14
+ token: api.accessToken ?? '',
15
+ });
16
+ let value = valueParts.join(' ');
17
+ if (input) {
18
+ const inputPath = resolve(input);
19
+ try {
20
+ value = await fs.readFile(inputPath, 'utf8');
21
+ }
22
+ catch (error) {
23
+ if (isNodeError(error) && error.code === 'ENOENT') {
24
+ return printError(`Could not set blob ${chalk.yellow(key)} because the file ${chalk.underline(inputPath)} does not exist`);
25
+ }
26
+ if (isNodeError(error) && error.code === 'EISDIR') {
27
+ return printError(`Could not set blob ${chalk.yellow(key)} because the path ${chalk.underline(inputPath)} is a directory`);
28
+ }
29
+ return printError(`Could not set blob ${chalk.yellow(key)} because the path ${chalk.underline(inputPath)} could not be read`);
30
+ }
31
+ }
32
+ else if (!value) {
33
+ return printError(`You must provide a value as a command-line parameter (e.g. 'netlify blobs:set my-store my-key my value') or specify the path to a file from where the value should be read (e.g. 'netlify blobs:set my-store my-key --input ./my-file.txt')`);
34
+ }
35
+ try {
36
+ await store.set(key, value);
37
+ }
38
+ catch {
39
+ return printError(`Could not set blob ${chalk.yellow(key)} in store ${chalk.yellow(storeName)}`);
40
+ }
41
+ };
42
+ /**
43
+ * Creates the `netlify blobs:set` command
44
+ */
45
+ export const createBlobsSetCommand = (program) => program
46
+ .command('blobs:set')
47
+ .description(`(Beta) Writes to a Netlify Blobs store an object with the data provided in the command or the contents of a file defined by the 'input' parameter`)
48
+ .argument('<store>', 'Name of the store')
49
+ .argument('<key>', 'Object key')
50
+ .argument('[value...]', 'Object value')
51
+ .option('-i, --input <path>', 'Defines the filesystem path where the blob data should be read from')
52
+ .alias('blob:set')
53
+ .hook('preAction', requiresSiteInfo)
54
+ .action(blobsSet);
@@ -0,0 +1,32 @@
1
+ import { createBlobsDeleteCommand } from './blobs-delete.mjs';
2
+ import { createBlobsGetCommand } from './blobs-get.mjs';
3
+ import { createBlobsListCommand } from './blobs-list.mjs';
4
+ import { createBlobsSetCommand } from './blobs-set.mjs';
5
+ /**
6
+ * The blobs command
7
+ */
8
+ const blobs = (_options, command) => {
9
+ command.help();
10
+ };
11
+ /**
12
+ * Creates the `netlify blobs` command
13
+ */
14
+ export const createBlobsCommand = (program) => {
15
+ createBlobsDeleteCommand(program);
16
+ createBlobsGetCommand(program);
17
+ createBlobsListCommand(program);
18
+ createBlobsSetCommand(program);
19
+ return program
20
+ .command('blobs')
21
+ .alias('blob')
22
+ .description(`(Beta) Manage objects in Netlify Blobs`)
23
+ .addExamples([
24
+ 'netlify blobs:get my-store my-key',
25
+ 'netlify blobs:set my-store my-key This will go in a blob',
26
+ 'netlify blobs:set my-store my-key --input ./some-file.txt',
27
+ 'netlify blobs:delete my-store my-key',
28
+ 'netlify blobs:list my-store',
29
+ 'netlify blobs:list my-store --json',
30
+ ])
31
+ .action(blobs);
32
+ };
@@ -0,0 +1 @@
1
+ export { createBlobsCommand } from './blobs.mjs';
@@ -1,88 +1,76 @@
1
- // @ts-check
2
- import process from 'process'
3
-
4
- import { getBuildOptions, runBuild } from '../../lib/build.mjs'
5
- import { detectFrameworkSettings } from '../../utils/build-info.mjs'
6
- import { error, exit, getToken } from '../../utils/command-helpers.mjs'
7
- import { getEnvelopeEnv, normalizeContext } from '../../utils/env/index.mjs'
8
-
1
+ import process from 'process';
2
+ import { getBuildOptions, runBuild } from '../../lib/build.mjs';
3
+ import { detectFrameworkSettings } from '../../utils/build-info.mjs';
4
+ import { error, exit, getToken } from '../../utils/command-helpers.mjs';
5
+ import { getEnvelopeEnv, normalizeContext } from '../../utils/env/index.mjs';
9
6
  /**
10
7
  * @param {import('../../lib/build.mjs').BuildConfig} options
11
8
  */
9
+ // @ts-expect-error TS(7031) FIXME: Binding element 'token' implicitly has an 'any' ty... Remove this comment to see the full error message
12
10
  export const checkOptions = ({ cachedConfig: { siteInfo = {} }, token }) => {
13
- if (!siteInfo.id) {
14
- error(
15
- 'Could not find the site ID. If your site is not on Netlify, please run `netlify init` or `netlify deploy` first. If it is, please run `netlify link`.',
16
- )
17
- }
18
-
19
- if (!token) {
20
- error('Could not find the access token. Please run netlify login.')
21
- }
22
- }
23
-
11
+ // @ts-expect-error TS(2339) FIXME: Property 'id' does not exist on type '{}'.
12
+ if (!siteInfo.id) {
13
+ error('Could not find the site ID. If your site is not on Netlify, please run `netlify init` or `netlify deploy` first. If it is, please run `netlify link`.');
14
+ }
15
+ if (!token) {
16
+ error('Could not find the access token. Please run netlify login.');
17
+ }
18
+ };
19
+ // @ts-expect-error TS(7006) FIXME: Parameter 'command' implicitly has an 'any' type.
24
20
  const injectEnv = async function (command, { api, buildOptions, context, siteInfo }) {
25
- const isUsingEnvelope = siteInfo && siteInfo.use_envelope
26
-
27
- const { env } = buildOptions.cachedConfig
28
- if (isUsingEnvelope) {
29
- buildOptions.cachedConfig.env = await getEnvelopeEnv({ api, context, env, siteInfo })
30
- }
31
- }
32
-
21
+ const isUsingEnvelope = siteInfo && siteInfo.use_envelope;
22
+ const { env } = buildOptions.cachedConfig;
23
+ if (isUsingEnvelope) {
24
+ buildOptions.cachedConfig.env = await getEnvelopeEnv({ api, context, env, siteInfo });
25
+ }
26
+ };
33
27
  /**
34
28
  * The build command
35
29
  * @param {import('commander').OptionValues} options
36
30
  * @param {import('../base-command.mjs').default} command
37
31
  */
32
+ // @ts-expect-error TS(7006) FIXME: Parameter 'options' implicitly has an 'any' type.
38
33
  const build = async (options, command) => {
39
- const { cachedConfig, siteInfo } = command.netlify
40
- command.setAnalyticsPayload({ dry: options.dry })
41
- // Retrieve Netlify Build options
42
- const [token] = await getToken()
43
- const settings = await detectFrameworkSettings(command, 'build')
44
-
45
- // override the build command with the detection result if no command is specified through the config
46
- if (!cachedConfig.config.build.command) {
47
- cachedConfig.config.build.command = settings?.buildCommand
48
- cachedConfig.config.build.commandOrigin = 'heuristics'
49
- }
50
-
51
- const buildOptions = await getBuildOptions({
52
- cachedConfig,
53
- packagePath: command.workspacePackage,
54
- currentDir: command.workingDir,
55
- token,
56
- options,
57
- })
58
-
59
- if (!options.offline) {
60
- checkOptions(buildOptions)
61
- const { api, site } = command.netlify
62
- const { context } = options
63
- await injectEnv(command, { api, buildOptions, context, site, siteInfo })
64
- }
65
-
66
- const { exitCode } = await runBuild(buildOptions)
67
- exit(exitCode)
68
- }
69
-
34
+ const { cachedConfig, siteInfo } = command.netlify;
35
+ command.setAnalyticsPayload({ dry: options.dry });
36
+ // Retrieve Netlify Build options
37
+ // @ts-expect-error TS(2554) FIXME: Expected 1 arguments, but got 0.
38
+ const [token] = await getToken();
39
+ const settings = await detectFrameworkSettings(command, 'build');
40
+ // override the build command with the detection result if no command is specified through the config
41
+ if (!cachedConfig.config.build.command) {
42
+ cachedConfig.config.build.command = settings?.buildCommand;
43
+ cachedConfig.config.build.commandOrigin = 'heuristics';
44
+ }
45
+ // @ts-expect-error TS(2345) FIXME: Argument of type '{ cachedConfig: any; packagePath... Remove this comment to see the full error message
46
+ const buildOptions = await getBuildOptions({
47
+ cachedConfig,
48
+ packagePath: command.workspacePackage,
49
+ currentDir: command.workingDir,
50
+ token,
51
+ options,
52
+ });
53
+ if (!options.offline) {
54
+ checkOptions(buildOptions);
55
+ const { api, site } = command.netlify;
56
+ const { context } = options;
57
+ // @ts-expect-error TS(2345) FIXME: Argument of type '{ api: any; buildOptions: { cach... Remove this comment to see the full error message
58
+ await injectEnv(command, { api, buildOptions, context, site, siteInfo });
59
+ }
60
+ const { exitCode } = await runBuild(buildOptions);
61
+ exit(exitCode);
62
+ };
70
63
  /**
71
64
  * Creates the `netlify build` command
72
65
  * @param {import('../base-command.mjs').default} program
73
66
  * @returns
74
67
  */
75
- export const createBuildCommand = (program) =>
76
- program
68
+ // @ts-expect-error TS(7006) FIXME: Parameter 'program' implicitly has an 'any' type.
69
+ export const createBuildCommand = (program) => program
77
70
  .command('build')
78
71
  .description('Build on your local machine')
79
- .option(
80
- '--context <context>',
81
- 'Specify a build context or branch (contexts: "production", "deploy-preview", "branch-deploy", "dev")',
82
- normalizeContext,
83
- process.env.CONTEXT || 'production',
84
- )
72
+ .option('--context <context>', 'Specify a build context or branch (contexts: "production", "deploy-preview", "branch-deploy", "dev")', normalizeContext, process.env.CONTEXT || 'production')
85
73
  .option('--dry', 'Dry run: show instructions without running them', false)
86
74
  .option('-o, --offline', 'disables any features that require network access', false)
87
75
  .addExamples(['netlify build'])
88
- .action(build)
76
+ .action(build);
@@ -1 +1 @@
1
- export { createBuildCommand } from './build.mjs'
1
+ export { createBuildCommand } from './build.mjs';
@@ -1,58 +1,53 @@
1
- import { dirname, join } from 'path'
2
- import { fileURLToPath } from 'url'
3
-
4
- import { install, uninstall } from 'tabtab'
5
-
6
- import { generateAutocompletion } from '../../lib/completion/index.mjs'
7
-
8
- const completer = join(dirname(fileURLToPath(import.meta.url)), '../../lib/completion/script.mjs')
9
-
1
+ import { dirname, join } from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ // @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'tabt... Remove this comment to see the full error message
4
+ import { install, uninstall } from 'tabtab';
5
+ import { generateAutocompletion } from '../../lib/completion/index.mjs';
6
+ const completer = join(dirname(fileURLToPath(import.meta.url)), '../../lib/completion/script.mjs');
10
7
  /**
11
8
  * The completion:generate command
12
9
  * @param {import('commander').OptionValues} options
13
10
  * @param {import('../base-command.mjs').default} command
14
11
  */
12
+ // @ts-expect-error TS(7006) FIXME: Parameter 'options' implicitly has an 'any' type.
15
13
  const completionGenerate = async (options, command) => {
16
- const { parent } = command
17
-
18
- generateAutocompletion(parent)
19
-
20
- await install({
21
- name: parent.name(),
22
- completer,
23
- })
24
-
25
- console.log(`Completion for ${parent.name()} successful installed!`)
26
- }
27
-
14
+ const { parent } = command;
15
+ generateAutocompletion(parent);
16
+ await install({
17
+ name: parent.name(),
18
+ completer,
19
+ });
20
+ console.log(`Completion for ${parent.name()} successful installed!`);
21
+ };
28
22
  /**
29
23
  * Creates the `netlify completion` command
30
24
  * @param {import('../base-command.mjs').default} program
31
25
  * @returns
32
26
  */
27
+ // @ts-expect-error TS(7006) FIXME: Parameter 'program' implicitly has an 'any' type.
33
28
  export const createCompletionCommand = (program) => {
34
- program
35
- .command('completion:install')
36
- .alias('completion:generate')
37
- .description('Generates completion script for your preferred shell')
38
- .action(completionGenerate)
39
-
40
- program
41
- .command('completion:uninstall', { hidden: true })
42
- .alias('completion:remove')
43
- .description('Uninstalls the installed completions')
44
- .addExamples(['netlify completion:uninstall'])
45
- .action(async (options, command) => {
46
- await uninstall({
47
- name: command.parent.name(),
48
- })
49
- })
50
-
51
- return program
52
- .command('completion')
53
- .description('Generate shell completion script\nRun this command to see instructions for your shell.')
54
- .addExamples(['netlify completion:install'])
55
- .action((options, command) => {
56
- command.help()
57
- })
58
- }
29
+ program
30
+ .command('completion:install')
31
+ .alias('completion:generate')
32
+ .description('Generates completion script for your preferred shell')
33
+ .action(completionGenerate);
34
+ program
35
+ .command('completion:uninstall', { hidden: true })
36
+ .alias('completion:remove')
37
+ .description('Uninstalls the installed completions')
38
+ .addExamples(['netlify completion:uninstall'])
39
+ // @ts-expect-error TS(7006) FIXME: Parameter 'options' implicitly has an 'any' type.
40
+ .action(async (options, command) => {
41
+ await uninstall({
42
+ name: command.parent.name(),
43
+ });
44
+ });
45
+ return program
46
+ .command('completion')
47
+ .description('Generate shell completion script\nRun this command to see instructions for your shell.')
48
+ .addExamples(['netlify completion:install'])
49
+ // @ts-expect-error TS(7006) FIXME: Parameter 'options' implicitly has an 'any' type.
50
+ .action((options, command) => {
51
+ command.help();
52
+ });
53
+ };
@@ -1 +1 @@
1
- export { createCompletionCommand } from './completion.mjs'
1
+ export { createCompletionCommand } from './completion.mjs';