@constructor-io/constructorio-connect-cli 1.18.1 → 1.18.2

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 CHANGED
@@ -56,13 +56,14 @@ Deploys all templates defined on the `connectrc.js` file to the specified enviro
56
56
 
57
57
  ```
58
58
  USAGE
59
- $ constructorio-connect-cli deploy ENV [-f]
59
+ $ constructorio-connect-cli deploy ENV [--cloud] [-f]
60
60
 
61
61
  ARGUMENTS
62
62
  ENV (development|qa|production|demo) The target Constructor environment to deploy to.
63
63
 
64
64
  FLAGS
65
65
  -f, --force Skip tests before deploying
66
+ --cloud Use the cloud config (connectrc.js) even if a local config (connectrc.local.js) exists
66
67
 
67
68
  DESCRIPTION
68
69
  Deploys all templates defined on the `connectrc.js` file to the specified environment, after running tests ('--force'
@@ -87,10 +88,11 @@ Execute a template against a connection and fixture to see the resulting transfo
87
88
 
88
89
  ```
89
90
  USAGE
90
- $ constructorio-connect-cli execute [--template-path <value>] [--fixture-path <value>]
91
+ $ constructorio-connect-cli execute [--cloud] [--template-path <value>] [--fixture-path <value>]
91
92
  [--external-data-path <value>] [--connection-id <value>] [--override-date <value>]
92
93
 
93
94
  FLAGS
95
+ --cloud Use the cloud config (connectrc.js) even if a local config (connectrc.local.js) exists
94
96
  --connection-id=<value> The ID of the connection to execute the template against.
95
97
  --external-data-path=<value> The path to the external data to execute the template against. Must be in the
96
98
  'src/fixtures/external_data' directory.
@@ -128,11 +130,12 @@ This command will fetch one fixture from the server and save it into a specified
128
130
 
129
131
  ```
130
132
  USAGE
131
- $ constructorio-connect-cli generate-fixture [--connection <value>] [--type
133
+ $ constructorio-connect-cli generate-fixture [--cloud] [--connection <value>] [--type
132
134
  item|variation|item_group|external_data|mapping] [--filename <value>] [--item-id <value>] [--variation-id <value>]
133
135
  [--replace-file]
134
136
 
135
137
  FLAGS
138
+ --cloud Use the cloud config (connectrc.js) even if a local config (connectrc.local.js) exists
136
139
  --connection=<value> The connection to generate the fixture for
137
140
  --filename=<value> The name of the fixture file to generate
138
141
  --item-id=<value> The ID of the item to generate the fixture for
@@ -210,7 +213,10 @@ Refresh the connections list
210
213
 
211
214
  ```
212
215
  USAGE
213
- $ constructorio-connect-cli refresh-connections
216
+ $ constructorio-connect-cli refresh-connections [--cloud]
217
+
218
+ FLAGS
219
+ --cloud Use the cloud config (connectrc.js) even if a local config (connectrc.local.js) exists
214
220
 
215
221
  DESCRIPTION
216
222
  Refresh the connections list
@@ -223,7 +229,10 @@ Triggers a catalog sync for selected connection.
223
229
 
224
230
  ```
225
231
  USAGE
226
- $ constructorio-connect-cli trigger-catalog-sync
232
+ $ constructorio-connect-cli trigger-catalog-sync [--cloud]
233
+
234
+ FLAGS
235
+ --cloud Use the cloud config (connectrc.js) even if a local config (connectrc.local.js) exists
227
236
 
228
237
  DESCRIPTION
229
238
  Triggers a catalog sync for selected connection.
@@ -1,3 +1,4 @@
1
1
  CONNECT_AUTH_TOKEN=
2
2
  AUTO_REFRESH_CONNECTIONS=true
3
3
  IS_CI=false
4
+ LOCAL_CONNECT_AUTH_TOKEN=
@@ -51,7 +51,7 @@ class Deploy extends refresh_connections_1.RefreshConnectionsCommand {
51
51
  }
52
52
  }
53
53
  const config = await (0, ux_action_1.uxAction)("📡 Reading your config", async () => {
54
- return await (0, config_1.getRepositoryConfigFile)();
54
+ return await (0, config_1.getRepositoryConfigFile)({ useCloud: !this.isLocal });
55
55
  })();
56
56
  const environment = await (0, ux_action_1.uxAction)("✨ Validating your environment", async () => {
57
57
  const env = config.environments.find(({ environment }) => environment === args.env);
@@ -61,7 +61,7 @@ class Execute extends refresh_connections_1.RefreshConnectionsCommand {
61
61
  try {
62
62
  const templateInput = await this.getTemplateExecInput();
63
63
  const config = await (0, ux_action_1.uxAction)("📡 Reading your config", async () => {
64
- return await (0, config_1.getRepositoryConfigFile)();
64
+ return await (0, config_1.getRepositoryConfigFile)({ useCloud: !this.isLocal });
65
65
  })();
66
66
  const result = await (0, send_template_execute_request_1.sendTemplateExecuteRequest)({
67
67
  template: (0, file_loaders_1.getTemplate)(templateInput.templatePath).toString(),
@@ -1,8 +1,20 @@
1
1
  import { Command } from "@oclif/core";
2
2
  export declare abstract class RefreshConnectionsCommand extends Command {
3
3
  static description: string;
4
+ static baseFlags: {
5
+ cloud: import("@oclif/core/interfaces").BooleanFlag<boolean>;
6
+ };
7
+ protected isLocal: boolean;
4
8
  abstract runCommand(): Promise<any>;
5
9
  run(): Promise<any>;
10
+ /**
11
+ * Detects whether a connectrc.local.js file exists and configures
12
+ * the environment accordingly. When in local mode:
13
+ * - Sets HOST to http://localhost:3000 (unless already set)
14
+ * - Uses LOCAL_CONNECT_AUTH_TOKEN as the auth token
15
+ * - Skips auto-refresh of connections
16
+ */
17
+ private resolveLocalMode;
6
18
  /**
7
19
  * Checks if the connections list should be automatically refreshed if
8
20
  * 1) IS_CI environment variable is not true; and
@@ -1 +1 @@
1
- {"version":3,"file":"refresh-connections.d.ts","sourceRoot":"","sources":["../../src/commands/refresh-connections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAKtC,8BAAsB,yBAA0B,SAAQ,OAAO;IAC7D,MAAM,CAAC,WAAW,SAAkC;IAEpD,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IAE7B,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IASzB;;;;;;;OAOG;IACH,OAAO,CAAC,4BAA4B;CAerC"}
1
+ {"version":3,"file":"refresh-connections.d.ts","sourceRoot":"","sources":["../../src/commands/refresh-connections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAQ7C,8BAAsB,yBAA0B,SAAQ,OAAO;IAC7D,MAAM,CAAC,WAAW,SAAkC;IAEpD,MAAM,CAAC,SAAS;;MAMd;IAEF,SAAS,CAAC,OAAO,EAAE,OAAO,CAAS;IAEnC,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IAE7B,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IAYzB;;;;;;OAMG;YACW,gBAAgB;IAoD9B;;;;;;;OAOG;IACH,OAAO,CAAC,4BAA4B;CAerC"}
@@ -2,18 +2,71 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RefreshConnectionsCommand = void 0;
4
4
  const core_1 = require("@oclif/core");
5
+ const errors_1 = require("@oclif/core/errors");
6
+ const config_1 = require("../customer/config");
5
7
  const prepend_file_sync_1 = require("../helpers/prepend-file-sync");
6
8
  const refresh_connections_list_1 = require("../helpers/refresh-connections-list");
9
+ const render_tip_1 = require("../rendering/render-tip");
7
10
  class RefreshConnectionsCommand extends core_1.Command {
8
11
  static description = "Refresh the connections list";
12
+ static baseFlags = {
13
+ cloud: core_1.Flags.boolean({
14
+ description: "Use the cloud config (connectrc.js) even if a local config (connectrc.local.js) exists",
15
+ default: false,
16
+ }),
17
+ };
18
+ isLocal = false;
9
19
  async run() {
10
- if (this.shouldAutoRefreshConnections()) {
20
+ await this.resolveLocalMode();
21
+ if (!this.isLocal && this.shouldAutoRefreshConnections()) {
11
22
  await (0, refresh_connections_list_1.refreshConnectionsList)();
12
23
  }
13
24
  if (this.runCommand) {
14
25
  return await this.runCommand();
15
26
  }
16
27
  }
28
+ /**
29
+ * Detects whether a connectrc.local.js file exists and configures
30
+ * the environment accordingly. When in local mode:
31
+ * - Sets HOST to http://localhost:3000 (unless already set)
32
+ * - Uses LOCAL_CONNECT_AUTH_TOKEN as the auth token
33
+ * - Skips auto-refresh of connections
34
+ */
35
+ async resolveLocalMode() {
36
+ if (process.env.IS_CI === "true") {
37
+ this.isLocal = false;
38
+ return;
39
+ }
40
+ // Check if a local config file exists before parsing flags
41
+ const { isLocal: localExists } = await (0, config_1.resolveConfigFile)(false);
42
+ if (!localExists) {
43
+ this.isLocal = false;
44
+ return;
45
+ }
46
+ // Local config exists — check if --cloud flag overrides it
47
+ const { flags } = await this.parse(this.constructor);
48
+ if (flags.cloud) {
49
+ this.isLocal = false;
50
+ (0, render_tip_1.renderTip)(["--cloud: Using cloud config file (connectrc.js)."], {
51
+ emoji: "☁️",
52
+ });
53
+ return;
54
+ }
55
+ // Local mode is active
56
+ this.isLocal = true;
57
+ (0, render_tip_1.renderTip)([
58
+ "Using local config file (connectrc.local.js). Pass --cloud to override.",
59
+ ], { emoji: "📍" });
60
+ // Enforce LOCAL_CONNECT_AUTH_TOKEN
61
+ if (!process.env.LOCAL_CONNECT_AUTH_TOKEN) {
62
+ throw new errors_1.CLIError("LOCAL_CONNECT_AUTH_TOKEN is required for local deployments. Please set it in your .env file.");
63
+ }
64
+ // Set env vars so all downstream HTTP calls use the local config
65
+ process.env.CONNECT_AUTH_TOKEN = process.env.LOCAL_CONNECT_AUTH_TOKEN;
66
+ if (!process.env.HOST) {
67
+ process.env.HOST = "http://localhost:3000";
68
+ }
69
+ }
17
70
  /**
18
71
  * Checks if the connections list should be automatically refreshed if
19
72
  * 1) IS_CI environment variable is not true; and
@@ -1,11 +1,23 @@
1
1
  import { type Config, type ConnectionConfigDict } from "../types";
2
2
  /**
3
- * @returns The exported config from the connectrc.js file .
4
- * @throws CLIError if the connectrc.js file is not found or contains a syntax error.
5
- * @description This function attempts to load the connectrc.js file from the root directory of the repository.
6
- * If the file is not found, it throws a CLIError with a message indicating the expected path.
3
+ * Checks whether a `connectrc.local.js` file exists and resolves which config file to use.
4
+ *
5
+ * @param useCloud If true, always use the cloud config (connectrc.js) regardless of local file existence.
6
+ * @returns The resolved config path and whether the local config is being used.
7
7
  */
8
- export declare function getRepositoryConfigFile(): Promise<Config>;
8
+ export declare function resolveConfigFile(useCloud?: boolean): Promise<{
9
+ configPath: string;
10
+ isLocal: boolean;
11
+ }>;
12
+ /**
13
+ * @returns The exported config from the connectrc.js file (or connectrc.local.js if present and useCloud is false).
14
+ * @throws CLIError if the config file is not found or contains a syntax error.
15
+ * @description This function attempts to load the config file from the root directory of the repository.
16
+ * If connectrc.local.js exists and useCloud is false, it will be used instead of connectrc.js.
17
+ */
18
+ export declare function getRepositoryConfigFile({ useCloud, }?: {
19
+ useCloud?: boolean;
20
+ }): Promise<Config>;
9
21
  /**
10
22
  * Reads the content of the connectrc.js file and returns the connections object and the content of the file
11
23
  * @returns The connections object and the content of the connectrc.js file in {@link RawConfigContent}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/customer/config.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAIlE;;;;;GAKG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,CAsC/D;AAED;;;GAGG;AACH,wBAAsB,iCAAiC,CAAC,EACtD,4BAAmC,GACpC;;CAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+CjC;AA+HD,UAAU,gBAAgB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,oBAAoB,CAAC;CAC3C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/customer/config.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAIlE;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,GAAE,OAAe,GACxB,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAcnD;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,EAC5C,QAAgB,GACjB,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CA2C/C;AAED;;;GAGG;AACH,wBAAsB,iCAAiC,CAAC,EACtD,4BAAmC,GACpC;;CAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+CjC;AA+HD,UAAU,gBAAgB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,oBAAoB,CAAC;CAC3C"}
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.resolveConfigFile = resolveConfigFile;
36
37
  exports.getRepositoryConfigFile = getRepositoryConfigFile;
37
38
  exports.getRepositoryConnectionsAndConfig = getRepositoryConnectionsAndConfig;
38
39
  const fs = __importStar(require("fs/promises"));
@@ -41,13 +42,36 @@ const errors_1 = require("@oclif/core/errors");
41
42
  const print_warnings_1 = require("../helpers/print-warnings");
42
43
  const path_1 = require("./path");
43
44
  /**
44
- * @returns The exported config from the connectrc.js file .
45
- * @throws CLIError if the connectrc.js file is not found or contains a syntax error.
46
- * @description This function attempts to load the connectrc.js file from the root directory of the repository.
47
- * If the file is not found, it throws a CLIError with a message indicating the expected path.
45
+ * Checks whether a `connectrc.local.js` file exists and resolves which config file to use.
46
+ *
47
+ * @param useCloud If true, always use the cloud config (connectrc.js) regardless of local file existence.
48
+ * @returns The resolved config path and whether the local config is being used.
48
49
  */
49
- async function getRepositoryConfigFile() {
50
- const configPath = (0, path_1.getCustomerOSSpecificPath)("connectrc.js");
50
+ async function resolveConfigFile(useCloud = false) {
51
+ if (!useCloud) {
52
+ const localPath = (0, path_1.getCustomerOSSpecificPath)("connectrc.local.js");
53
+ try {
54
+ await fs.access(localPath);
55
+ return { configPath: localPath, isLocal: true };
56
+ }
57
+ catch {
58
+ // local file doesn't exist, fall through
59
+ }
60
+ }
61
+ return {
62
+ configPath: (0, path_1.getCustomerOSSpecificPath)("connectrc.js"),
63
+ isLocal: false,
64
+ };
65
+ }
66
+ /**
67
+ * @returns The exported config from the connectrc.js file (or connectrc.local.js if present and useCloud is false).
68
+ * @throws CLIError if the config file is not found or contains a syntax error.
69
+ * @description This function attempts to load the config file from the root directory of the repository.
70
+ * If connectrc.local.js exists and useCloud is false, it will be used instead of connectrc.js.
71
+ */
72
+ async function getRepositoryConfigFile({ useCloud = false, } = {}) {
73
+ const { configPath, isLocal } = await resolveConfigFile(useCloud);
74
+ const configFileName = isLocal ? "connectrc.local.js" : "connectrc.js";
51
75
  try {
52
76
  return require(configPath);
53
77
  }
@@ -55,23 +79,23 @@ async function getRepositoryConfigFile() {
55
79
  // To get ux.warn to render properly, we need to stop the action first
56
80
  core_1.ux.action.stop("💥");
57
81
  if (error.code === "MODULE_NOT_FOUND") {
58
- throw new errors_1.CLIError(`💥 Could not find a connectrc.js file in the root directory!\nExpected to be at: ${configPath}`, {
82
+ throw new errors_1.CLIError(`💥 Could not find a ${configFileName} file in the root directory!\nExpected to be at: ${configPath}`, {
59
83
  code: error.code,
60
84
  suggestions: [
61
- "Make sure you have a connectrc.js file in the root directory of your repository.",
85
+ `Make sure you have a ${configFileName} file in the root directory of your repository.`,
62
86
  `If your root directory is not the same as your current working directory,
63
87
  you can set the \`REPOSITORY_ROOT_DIRECTORY\` environment variable as a relative path
64
- pointing to the correct connectrc.js directory.`,
88
+ pointing to the correct ${configFileName} directory.`,
65
89
  ],
66
90
  });
67
91
  }
68
92
  core_1.ux.warn(error.stack);
69
93
  if (error.name?.includes("SyntaxError")) {
70
- throw new errors_1.CLIError("💥 Syntax error found in your connectrc.js file!", {
94
+ throw new errors_1.CLIError(`💥 Syntax error found in your ${configFileName} file!`, {
71
95
  code: "SYNTAX_ERROR",
72
96
  });
73
97
  }
74
- throw new errors_1.CLIError("💥 Could not load your connectrc.js file! \nTake a look at the original error printed above.", {
98
+ throw new errors_1.CLIError(`💥 Could not load your ${configFileName} file! \nTake a look at the original error printed above.`, {
75
99
  code: error.code,
76
100
  });
77
101
  }
package/dist/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- declare const _default: "1.18.1";
1
+ declare const _default: "1.18.2";
2
2
  export default _default;
3
3
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = '1.18.1';
3
+ exports.default = '1.18.2';
@@ -23,6 +23,12 @@
23
23
  "$ <%= config.bin %> deploy production --force"
24
24
  ],
25
25
  "flags": {
26
+ "cloud": {
27
+ "description": "Use the cloud config (connectrc.js) even if a local config (connectrc.local.js) exists",
28
+ "name": "cloud",
29
+ "allowNo": false,
30
+ "type": "boolean"
31
+ },
26
32
  "force": {
27
33
  "char": "f",
28
34
  "description": "Skip tests before deploying",
@@ -61,6 +67,12 @@
61
67
  "$ <%= config.bin %> execute --template-path=mapping/mapping.jsonata"
62
68
  ],
63
69
  "flags": {
70
+ "cloud": {
71
+ "description": "Use the cloud config (connectrc.js) even if a local config (connectrc.local.js) exists",
72
+ "name": "cloud",
73
+ "allowNo": false,
74
+ "type": "boolean"
75
+ },
64
76
  "template-path": {
65
77
  "description": "The path to the template to execute. Must be in the 'src/templates' directory.",
66
78
  "name": "template-path",
@@ -125,6 +137,12 @@
125
137
  "$ <%= config.bin %> generate-fixture --connection=my-connection-id --type=variation --filename=my-fixture.json --replace-file"
126
138
  ],
127
139
  "flags": {
140
+ "cloud": {
141
+ "description": "Use the cloud config (connectrc.js) even if a local config (connectrc.local.js) exists",
142
+ "name": "cloud",
143
+ "allowNo": false,
144
+ "type": "boolean"
145
+ },
128
146
  "connection": {
129
147
  "description": "The connection to generate the fixture for",
130
148
  "name": "connection",
@@ -239,7 +257,14 @@
239
257
  "aliases": [],
240
258
  "args": {},
241
259
  "description": "Refresh the connections list",
242
- "flags": {},
260
+ "flags": {
261
+ "cloud": {
262
+ "description": "Use the cloud config (connectrc.js) even if a local config (connectrc.local.js) exists",
263
+ "name": "cloud",
264
+ "allowNo": false,
265
+ "type": "boolean"
266
+ }
267
+ },
243
268
  "hasDynamicHelp": false,
244
269
  "hiddenAliases": [],
245
270
  "id": "refresh-connections",
@@ -262,7 +287,14 @@
262
287
  "examples": [
263
288
  "$ <%= config.bin %>"
264
289
  ],
265
- "flags": {},
290
+ "flags": {
291
+ "cloud": {
292
+ "description": "Use the cloud config (connectrc.js) even if a local config (connectrc.local.js) exists",
293
+ "name": "cloud",
294
+ "allowNo": false,
295
+ "type": "boolean"
296
+ }
297
+ },
266
298
  "hasDynamicHelp": false,
267
299
  "hiddenAliases": [],
268
300
  "id": "trigger-catalog-sync",
@@ -279,5 +311,5 @@
279
311
  ]
280
312
  }
281
313
  },
282
- "version": "1.18.1"
314
+ "version": "1.18.2"
283
315
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@constructor-io/constructorio-connect-cli",
3
- "version": "1.18.1",
3
+ "version": "1.18.2",
4
4
  "description": "CLI tool to enable users to interface with the Constructor Connect Ecosystem",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",