@nx-extend/vercel 1.2.0 → 1.3.1

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/CHANGELOG.md CHANGED
@@ -1,4 +1,17 @@
1
1
 
2
+ ## [1.3.1](https://github.com/TriPSs/nx-extend/compare/vercel@1.3.0...vercel@1.3.1) (2022-09-14)
3
+
4
+
5
+
6
+ # [1.3.0](https://github.com/TriPSs/nx-extend/compare/vercel@1.2.0...vercel@1.3.0) (2022-09-13)
7
+
8
+
9
+ ### Features
10
+
11
+ * **vercel:** Added support for `envVars` option ([55e8e14](https://github.com/TriPSs/nx-extend/commit/55e8e14d2f7304a6833bc49881cfd3554a051192))
12
+
13
+
14
+
2
15
  # [1.2.0](https://github.com/TriPSs/nx-extend/compare/vercel@1.1.1...vercel@1.2.0) (2022-09-06)
3
16
 
4
17
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx-extend/vercel",
3
- "version": "1.2.0",
3
+ "version": "1.3.1",
4
4
  "keywords": [
5
5
  "nx",
6
6
  "vercel"
@@ -19,7 +19,7 @@
19
19
  "generators": "./generators.json",
20
20
  "typings": "./src/index.d.ts",
21
21
  "dependencies": {
22
- "@nx-extend/core": "1.2.2",
22
+ "@nx-extend/core": "1.3.1",
23
23
  "shelljs": "^0.8.5"
24
24
  },
25
25
  "peerDependencies": {}
@@ -3,6 +3,7 @@ export interface ExecutorSchema {
3
3
  projectId: string;
4
4
  orgId: string;
5
5
  debug?: boolean;
6
+ envVars?: Record<string, string>;
6
7
  }
7
8
  export declare function buildExecutor(options: ExecutorSchema, context: ExecutorContext): Promise<{
8
9
  success: boolean;
@@ -3,9 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildExecutor = void 0;
4
4
  const devkit_1 = require("@nrwl/devkit");
5
5
  const core_1 = require("@nx-extend/core");
6
+ const path_1 = require("path");
7
+ const add_env_variables_to_file_1 = require("../../utils/add-env-variables-to-file");
8
+ const get_env_vars_1 = require("../../utils/get-env-vars");
6
9
  function buildExecutor(options, context) {
7
10
  var _a, _b, _c, _d, _e, _f, _g, _h;
8
11
  const { targets } = context.workspace.projects[context.projectName];
12
+ if (!options.orgId) {
13
+ throw new Error(`"orgId" option is required!`);
14
+ }
15
+ if (!options.projectId) {
16
+ throw new Error(`"projectId" option is required!`);
17
+ }
9
18
  if (!targets['build-next']) {
10
19
  throw new Error(`"${context.projectName}" is missing the original "build-next" target!`);
11
20
  }
@@ -22,10 +31,23 @@ function buildExecutor(options, context) {
22
31
  (0, core_1.execCommand)((0, core_1.buildCommand)([
23
32
  'npx vercel pull --yes',
24
33
  context.configurationName === 'production' && '--environment=production',
34
+ context.configurationName !== 'production' && '--environment=preview',
25
35
  options.debug && '--debug'
26
36
  ]));
37
+ const vercelDirectory = '.vercel';
38
+ const vercelProjectJson = `./${vercelDirectory}/project.json`;
39
+ const outputDirectory = (_d = (_c = targets['build-next']) === null || _c === void 0 ? void 0 : _c.options) === null || _d === void 0 ? void 0 : _d.outputPath;
40
+ const vercelEnironment = context.configurationName === 'production'
41
+ ? 'production'
42
+ : 'preview';
43
+ const vercelEnvFile = `.env.${vercelEnironment}.local`;
44
+ const vercelEnvFileLocation = (0, path_1.join)(context.root, vercelDirectory);
45
+ const envVars = (0, get_env_vars_1.getEnvVars)(options.envVars, true);
46
+ if (envVars.length > 0) {
47
+ (0, add_env_variables_to_file_1.addEnvVariablesToFile)((0, path_1.join)(vercelEnvFileLocation, vercelEnvFile), envVars);
48
+ }
27
49
  // Update the project json with the correct settings
28
- (0, devkit_1.writeJsonFile)('./.vercel/project.json', {
50
+ (0, devkit_1.writeJsonFile)(vercelProjectJson, {
29
51
  projectId: options.projectId,
30
52
  orgId: options.orgId,
31
53
  settings: {
@@ -33,8 +55,8 @@ function buildExecutor(options, context) {
33
55
  framework: 'nextjs',
34
56
  devCommand: null,
35
57
  installCommand: 'echo \'\'',
36
- buildCommand: `nx build-next ${context.projectName} --prod`,
37
- outputDirectory: `${(_d = (_c = targets['build-next']) === null || _c === void 0 ? void 0 : _c.options) === null || _d === void 0 ? void 0 : _d.outputPath}/.next`,
58
+ buildCommand: `nx build-next ${context.projectName}${context.configurationName === 'production' ? ' --prod' : ''}`,
59
+ outputDirectory: `${(_f = (_e = targets['build-next']) === null || _e === void 0 ? void 0 : _e.options) === null || _f === void 0 ? void 0 : _f.outputPath}/.next`,
38
60
  rootDirectory: null,
39
61
  directoryListing: false,
40
62
  nodeVersion: '16.x'
@@ -42,11 +64,14 @@ function buildExecutor(options, context) {
42
64
  });
43
65
  const { success } = (0, core_1.execCommand)((0, core_1.buildCommand)([
44
66
  'npx vercel build',
45
- `--output ${(_f = (_e = targets['build-next']) === null || _e === void 0 ? void 0 : _e.options) === null || _f === void 0 ? void 0 : _f.outputPath}/.vercel/output`,
67
+ `--output ${(_h = (_g = targets['build-next']) === null || _g === void 0 ? void 0 : _g.options) === null || _h === void 0 ? void 0 : _h.outputPath}/.vercel/output`,
46
68
  options.debug && '--debug'
47
69
  ]));
48
70
  if (success) {
49
- (0, devkit_1.writeJsonFile)(`${(_h = (_g = targets['build-next']) === null || _g === void 0 ? void 0 : _g.options) === null || _h === void 0 ? void 0 : _h.outputPath}/.vercel/project.json`, (0, devkit_1.readJsonFile)('./.vercel/project.json'));
71
+ // Write the project.json to the .vercel directory
72
+ (0, devkit_1.writeJsonFile)((0, path_1.join)(outputDirectory, vercelDirectory, 'project.json'), (0, devkit_1.readJsonFile)(vercelProjectJson));
73
+ // Also copy over the env files
74
+ (0, core_1.copyFile)(vercelEnvFileLocation, (0, path_1.join)(outputDirectory, vercelDirectory), vercelEnvFile);
50
75
  }
51
76
  return Promise.resolve({ success });
52
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"build.impl.js","sourceRoot":"","sources":["../../../../../../packages/vercel/src/executors/build/build.impl.ts"],"names":[],"mappings":";;;AAAA,yCAA0D;AAC1D,0CAA2D;AAU3D,SAAgB,aAAa,CAC3B,OAAuB,EACvB,OAAwB;;IAExB,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAEnE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;QAC1B,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,WAAW,gDAAgD,CAAC,CAAA;KACzF;IAED,IAAI,CAAC,CAAA,MAAA,MAAA,OAAO,CAAC,YAAY,CAAC,0CAAE,OAAO,0CAAE,UAAU,CAAA,EAAE;QAC/C,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;KACvE;IAED,kDAAkD;IAClD,IAAA,sBAAa,EAAC,wBAAwB,EAAE;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,EAAE;KACb,CAAC,CAAA;IAEF,cAAc;IACd,IAAA,kBAAW,EAAC,IAAA,mBAAY,EAAC;QACvB,uBAAuB;QACvB,OAAO,CAAC,iBAAiB,KAAK,YAAY,IAAI,0BAA0B;QAExE,OAAO,CAAC,KAAK,IAAI,SAAS;KAC3B,CAAC,CAAC,CAAA;IAEH,oDAAoD;IACpD,IAAA,sBAAa,EAAC,wBAAwB,EAAE;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE;YACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;YAC/B,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,WAAW;YAC3B,YAAY,EAAE,iBAAiB,OAAO,CAAC,WAAW,SAAS;YAC3D,eAAe,EAAE,GAAG,MAAA,MAAA,OAAO,CAAC,YAAY,CAAC,0CAAE,OAAO,0CAAE,UAAU,QAAQ;YACtE,aAAa,EAAE,IAAI;YACnB,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,MAAM;SACpB;KACF,CAAC,CAAA;IAEF,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,kBAAW,EAAC,IAAA,mBAAY,EAAC;QAC3C,kBAAkB;QAClB,YAAY,MAAA,MAAA,OAAO,CAAC,YAAY,CAAC,0CAAE,OAAO,0CAAE,UAAU,iBAAiB;QAEvE,OAAO,CAAC,KAAK,IAAI,SAAS;KAC3B,CAAC,CAAC,CAAA;IAEH,IAAI,OAAO,EAAE;QACX,IAAA,sBAAa,EAAC,GAAG,MAAA,MAAA,OAAO,CAAC,YAAY,CAAC,0CAAE,OAAO,0CAAE,UAAU,uBAAuB,EAAE,IAAA,qBAAY,EAAC,wBAAwB,CAAC,CAAC,CAAA;KAC5H;IAED,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;AACrC,CAAC;AA1DD,sCA0DC;AAED,kBAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"build.impl.js","sourceRoot":"","sources":["../../../../../../packages/vercel/src/executors/build/build.impl.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,17 @@
1
1
  import { readJsonFile, writeJsonFile } from '@nrwl/devkit'
2
- import { buildCommand, execCommand } from '@nx-extend/core'
2
+ import { buildCommand, copyFile, execCommand } from '@nx-extend/core'
3
+ import { join } from 'path'
3
4
 
4
5
  import type { ExecutorContext } from '@nrwl/devkit'
5
6
 
7
+ import { addEnvVariablesToFile } from '../../utils/add-env-variables-to-file'
8
+ import { getEnvVars } from '../../utils/get-env-vars'
9
+
6
10
  export interface ExecutorSchema {
7
11
  projectId: string
8
12
  orgId: string
9
13
  debug?: boolean
14
+ envVars?: Record<string, string>
10
15
  }
11
16
 
12
17
  export function buildExecutor(
@@ -15,6 +20,14 @@ export function buildExecutor(
15
20
  ): Promise<{ success: boolean }> {
16
21
  const { targets } = context.workspace.projects[context.projectName]
17
22
 
23
+ if (!options.orgId) {
24
+ throw new Error(`"orgId" option is required!`)
25
+ }
26
+
27
+ if (!options.projectId) {
28
+ throw new Error(`"projectId" option is required!`)
29
+ }
30
+
18
31
  if (!targets['build-next']) {
19
32
  throw new Error(`"${context.projectName}" is missing the original "build-next" target!`)
20
33
  }
@@ -34,12 +47,29 @@ export function buildExecutor(
34
47
  execCommand(buildCommand([
35
48
  'npx vercel pull --yes',
36
49
  context.configurationName === 'production' && '--environment=production',
50
+ context.configurationName !== 'production' && '--environment=preview',
37
51
 
38
52
  options.debug && '--debug'
39
53
  ]))
40
54
 
55
+ const vercelDirectory = '.vercel'
56
+ const vercelProjectJson = `./${vercelDirectory}/project.json`
57
+ const outputDirectory = targets['build-next']?.options?.outputPath
58
+
59
+ const vercelEnironment = context.configurationName === 'production'
60
+ ? 'production'
61
+ : 'preview'
62
+
63
+ const vercelEnvFile = `.env.${vercelEnironment}.local`
64
+ const vercelEnvFileLocation = join(context.root, vercelDirectory)
65
+
66
+ const envVars = getEnvVars(options.envVars, true)
67
+ if (envVars.length > 0) {
68
+ addEnvVariablesToFile(join(vercelEnvFileLocation, vercelEnvFile), envVars)
69
+ }
70
+
41
71
  // Update the project json with the correct settings
42
- writeJsonFile('./.vercel/project.json', {
72
+ writeJsonFile(vercelProjectJson, {
43
73
  projectId: options.projectId,
44
74
  orgId: options.orgId,
45
75
  settings: {
@@ -47,7 +77,7 @@ export function buildExecutor(
47
77
  framework: 'nextjs',
48
78
  devCommand: null,
49
79
  installCommand: 'echo \'\'',
50
- buildCommand: `nx build-next ${context.projectName} --prod`,
80
+ buildCommand: `nx build-next ${context.projectName}${context.configurationName === 'production' ? ' --prod' : ''}`,
51
81
  outputDirectory: `${targets['build-next']?.options?.outputPath}/.next`,
52
82
  rootDirectory: null,
53
83
  directoryListing: false,
@@ -63,7 +93,10 @@ export function buildExecutor(
63
93
  ]))
64
94
 
65
95
  if (success) {
66
- writeJsonFile(`${targets['build-next']?.options?.outputPath}/.vercel/project.json`, readJsonFile('./.vercel/project.json'))
96
+ // Write the project.json to the .vercel directory
97
+ writeJsonFile(join(outputDirectory, vercelDirectory, 'project.json'), readJsonFile(vercelProjectJson))
98
+ // Also copy over the env files
99
+ copyFile(vercelEnvFileLocation, join(outputDirectory, vercelDirectory), vercelEnvFile)
67
100
  }
68
101
 
69
102
  return Promise.resolve({ success })
@@ -3,15 +3,15 @@
3
3
  "type": "object",
4
4
  "cli": "nx",
5
5
  "title": "Deploy executor",
6
- "description": "Deploy to Firebase Hosting",
6
+ "description": "Deploy to Vercel",
7
7
  "properties": {
8
8
  "projectId": {
9
9
  "type": "string",
10
- "description": "Site name in Firebase Hosting"
10
+ "description": "Project ID in Vercel"
11
11
  },
12
12
  "orgId": {
13
13
  "type": "string",
14
- "description": "Site name in Firebase Hosting"
14
+ "description": "Origination ID in Vercel"
15
15
  }
16
16
  }
17
17
  }
@@ -0,0 +1 @@
1
+ export declare const addEnvVariablesToFile: (envFile: string, envVars: string[]) => void;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addEnvVariablesToFile = void 0;
4
+ const fs_1 = require("fs");
5
+ const addEnvVariablesToFile = (envFile, envVars) => {
6
+ if ((0, fs_1.existsSync)(envFile)) {
7
+ (0, fs_1.appendFileSync)(envFile, envVars.join('\r\n'));
8
+ }
9
+ };
10
+ exports.addEnvVariablesToFile = addEnvVariablesToFile;
11
+ //# sourceMappingURL=add-env-variables-to-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-env-variables-to-file.js","sourceRoot":"","sources":["../../../../../packages/vercel/src/utils/add-env-variables-to-file.ts"],"names":[],"mappings":";;;AAAA,2BAA+C;AAExC,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAE,OAAiB,EAAE,EAAE;IAC1E,IAAI,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE;QACvB,IAAA,mBAAc,EAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;KAC9C;AACH,CAAC,CAAA;AAJY,QAAA,qBAAqB,yBAIjC"}
@@ -0,0 +1 @@
1
+ export declare const getEnvVars: (envVars?: Record<string, string>, escape?: boolean, isProduction?: boolean) => string[];
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEnvVars = void 0;
4
+ const getEnvVars = (envVars = {}, escape, isProduction) => {
5
+ return Object.keys(envVars).reduce((env, envVar) => {
6
+ env.push(`${envVar}=${escape ? '"' : ''}${envVars[envVar]}${escape ? '"' : ''}`);
7
+ return env;
8
+ }, [
9
+ isProduction && 'NODE_ENV=production'
10
+ ]).filter(Boolean);
11
+ };
12
+ exports.getEnvVars = getEnvVars;
13
+ //# sourceMappingURL=get-env-vars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-env-vars.js","sourceRoot":"","sources":["../../../../../packages/vercel/src/utils/get-env-vars.ts"],"names":[],"mappings":";;;AAAO,MAAM,UAAU,GAAG,CAAC,UAAkC,EAAE,EAAE,MAAgB,EAAE,YAAsB,EAAE,EAAE;IAC3G,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QACjD,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAEhF,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE;QACD,YAAY,IAAI,qBAAqB;KACtC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AACpB,CAAC,CAAA;AARY,QAAA,UAAU,cAQtB"}