@optimizely/ocp-cli 1.2.6 → 1.2.8

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.
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const AppUpdater_1 = require("../lib/AppUpdater");
4
+ const packageManagerHandler_1 = require("../lib/packageManagerHandler");
5
+ jest.mock('../lib/packageManagerHandler');
6
+ describe('AppUpdater', () => {
7
+ beforeEach(() => {
8
+ jest.clearAllMocks();
9
+ });
10
+ afterEach(() => {
11
+ jest.restoreAllMocks();
12
+ });
13
+ describe('getPackageDependencies', () => {
14
+ it('should parse dependencies correctly', () => {
15
+ const mockDeps = {
16
+ type: 'tree',
17
+ data: {
18
+ type: 'list',
19
+ trees: [
20
+ {
21
+ name: '@zaiusinc/package1@1.0.0',
22
+ children: [],
23
+ hint: null,
24
+ color: 'bold',
25
+ depth: 0,
26
+ },
27
+ {
28
+ name: '@zaiusinc/package2@2.0.0',
29
+ children: [],
30
+ hint: null,
31
+ color: 'bold',
32
+ depth: 0,
33
+ },
34
+ ],
35
+ },
36
+ };
37
+ packageManagerHandler_1.default.getPackageDependencies.mockReturnValueOnce([true, mockDeps]);
38
+ const result = AppUpdater_1.AppUpdater.getPackageDependencies();
39
+ expect(result).toEqual({
40
+ '@zaiusinc/package1': '1.0.0',
41
+ '@zaiusinc/package2': '2.0.0',
42
+ });
43
+ });
44
+ it('should handle prod dependencies flag', () => {
45
+ const mockDeps = {
46
+ type: 'tree',
47
+ data: {
48
+ type: 'list',
49
+ trees: [
50
+ {
51
+ name: '@zaiusinc/package1@1.0.0',
52
+ children: [],
53
+ hint: null,
54
+ color: 'bold',
55
+ depth: 0,
56
+ },
57
+ ],
58
+ },
59
+ };
60
+ const mockHandler = packageManagerHandler_1.default.getPackageDependencies.mockReturnValueOnce([true, mockDeps]);
61
+ AppUpdater_1.AppUpdater.getPackageDependencies(true);
62
+ expect(mockHandler).toHaveBeenCalledWith(/@zaiusinc\//, true);
63
+ });
64
+ describe('error handling', () => {
65
+ let mockExit;
66
+ let mockConsole;
67
+ let mockConsoleError;
68
+ beforeEach(() => {
69
+ mockExit = jest
70
+ .spyOn(process, 'exit')
71
+ .mockImplementation(() => undefined);
72
+ mockConsole = jest
73
+ .spyOn(console, 'log')
74
+ .mockImplementation(() => undefined);
75
+ mockConsoleError = jest
76
+ .spyOn(console, 'error')
77
+ .mockImplementation(() => undefined);
78
+ });
79
+ afterEach(() => {
80
+ mockExit.mockRestore();
81
+ mockConsole.mockRestore();
82
+ mockConsoleError.mockRestore();
83
+ });
84
+ it('should exit with error on package manager failure', () => {
85
+ packageManagerHandler_1.default.getPackageDependencies.mockReturnValueOnce([false, 'error']);
86
+ AppUpdater_1.AppUpdater.getPackageDependencies();
87
+ expect(mockExit).toHaveBeenCalledWith(1);
88
+ expect(mockConsoleError).toHaveBeenCalledWith('error');
89
+ });
90
+ it('should exit with error on exception', () => {
91
+ packageManagerHandler_1.default.getPackageDependencies.mockImplementation(() => {
92
+ throw new Error('test error');
93
+ });
94
+ AppUpdater_1.AppUpdater.getPackageDependencies();
95
+ expect(mockExit).toHaveBeenCalledWith(1);
96
+ expect(mockConsoleError).toHaveBeenCalledWith(new Error('test error'));
97
+ });
98
+ });
99
+ });
100
+ describe('ensurePublicPackageUsage', () => {
101
+ let mockExit;
102
+ let mockConsoleLog;
103
+ let mockConsoleError;
104
+ beforeEach(() => {
105
+ mockExit = jest
106
+ .spyOn(process, 'exit')
107
+ .mockImplementation(() => undefined);
108
+ mockConsoleLog = jest
109
+ .spyOn(console, 'log')
110
+ .mockImplementation(() => undefined);
111
+ mockConsoleError = jest
112
+ .spyOn(console, 'error')
113
+ .mockImplementation(() => undefined);
114
+ });
115
+ afterEach(() => {
116
+ mockExit.mockRestore();
117
+ mockConsoleLog.mockRestore();
118
+ mockConsoleError.mockRestore();
119
+ });
120
+ it('should allow execution when no deprecated packages are found', () => {
121
+ const mockDeps = {
122
+ type: 'tree',
123
+ data: {
124
+ type: 'list',
125
+ trees: [],
126
+ },
127
+ };
128
+ packageManagerHandler_1.default.getPackageDependencies.mockReturnValueOnce([true, mockDeps]);
129
+ AppUpdater_1.AppUpdater.ensurePublicPackageUsage();
130
+ expect(mockExit).not.toHaveBeenCalled();
131
+ });
132
+ it('should exit when deprecated @zaius packages are found', () => {
133
+ const mockDeps = {
134
+ type: 'tree',
135
+ data: {
136
+ type: 'list',
137
+ trees: [
138
+ {
139
+ name: '@zaius/app-sdk@1.0.0',
140
+ children: [],
141
+ hint: null,
142
+ color: 'bold',
143
+ depth: 0,
144
+ },
145
+ ],
146
+ },
147
+ };
148
+ packageManagerHandler_1.default.getPackageDependencies.mockReturnValueOnce([true, mockDeps]);
149
+ AppUpdater_1.AppUpdater.ensurePublicPackageUsage();
150
+ expect(mockExit).toHaveBeenCalledWith(1);
151
+ expect(mockConsoleLog).toHaveBeenCalledWith(expect.stringContaining('@zaius/app-sdk & @zaius/node-sdk are no longer supported'));
152
+ });
153
+ });
154
+ });
155
+ //# sourceMappingURL=AppUpdater.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppUpdater.test.js","sourceRoot":"","sources":["../../src/test/AppUpdater.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* tslint:disable:max-line-length */
4
+ const packageManagerHandler_1 = require("../lib/packageManagerHandler");
5
+ const TerminalOutput_1 = require("../lib/TerminalOutput");
6
+ jest.mock('../lib/TerminalOutput', () => ({
7
+ TerminalOutput: {
8
+ exec: jest.fn(),
9
+ },
10
+ }));
11
+ describe('PackageManagerHandler', () => {
12
+ let packageManager;
13
+ beforeEach(() => {
14
+ jest.clearAllMocks();
15
+ });
16
+ afterEach(() => {
17
+ jest.restoreAllMocks();
18
+ });
19
+ describe('isLegacyYarnAvailable', () => {
20
+ it('should return true when yarn 1.x is available', () => {
21
+ TerminalOutput_1.TerminalOutput.exec.mockReturnValue({
22
+ status: 0,
23
+ stdout: '1.22.19\n',
24
+ stderr: '',
25
+ });
26
+ expect(packageManagerHandler_1.default.isLegacyYarnAvailable()).toBe(true);
27
+ });
28
+ it('should return false when yarn 2.x is available', () => {
29
+ TerminalOutput_1.TerminalOutput.exec.mockReturnValue({
30
+ status: 0,
31
+ stdout: '2.0.0\n',
32
+ stderr: '',
33
+ });
34
+ expect(packageManagerHandler_1.default.isLegacyYarnAvailable()).toBe(false);
35
+ });
36
+ });
37
+ describe('upgradeGlobalPackageToLatest', () => {
38
+ it('should use yarn when the cli is installed using yarn', () => {
39
+ TerminalOutput_1.TerminalOutput.exec
40
+ .mockReturnValueOnce({
41
+ status: 0,
42
+ stdout: '/foo/bar/yarn/bin/test-cli\n',
43
+ stderr: '',
44
+ }) // yarn check
45
+ .mockReturnValueOnce({ status: 0, stdout: '1.22.0', stderr: '' }) // check for yarn 1.x
46
+ .mockReturnValueOnce({ status: 0, stdout: 'success', stderr: '' }); // upgrade command
47
+ packageManager = new packageManagerHandler_1.default('test-package', 'test-cli');
48
+ const [success, _] = packageManager.upgradeGlobalPackageToLatest();
49
+ expect(success).toBe(true);
50
+ expect(TerminalOutput_1.TerminalOutput.exec).toHaveBeenCalledWith('yarn global upgrade test-package --latest');
51
+ });
52
+ it('should notify failure when the cli is installed using yarn 1.x but current yarn version is newer than 1.x', () => {
53
+ TerminalOutput_1.TerminalOutput.exec
54
+ .mockReturnValueOnce({
55
+ status: 0,
56
+ stdout: '/foo/bar/yarn/bin/test-cli\n',
57
+ stderr: '',
58
+ }) // yarn check
59
+ .mockReturnValueOnce({ status: 0, stdout: '2.22.0', stderr: '' }); // check for yarn 1.x
60
+ packageManager = new packageManagerHandler_1.default('test-package', 'test-cli');
61
+ const [success, message] = packageManager.upgradeGlobalPackageToLatest();
62
+ expect(success).toBe(false);
63
+ expect(message).toContain('not compatible');
64
+ });
65
+ });
66
+ describe('fetchLatestPackage', () => {
67
+ it('should fetch latest version using yarn when cli is installed with it', () => {
68
+ TerminalOutput_1.TerminalOutput.exec
69
+ .mockReturnValueOnce({
70
+ status: 0,
71
+ stdout: '/foo/bar/yarn/bin/test-cli\n',
72
+ stderr: '',
73
+ }) // yarn check
74
+ .mockReturnValueOnce({ status: 0, stdout: '1.0.0', stderr: '' }); // fetch command
75
+ packageManager = new packageManagerHandler_1.default('test-package', 'test-cli');
76
+ const [success, version] = packageManager.fetchLatestPackage();
77
+ expect(success).toBe(true);
78
+ expect(version).toBe('1.0.0');
79
+ });
80
+ });
81
+ describe('getPackageDependencies', () => {
82
+ it('should parse npm dependencies into yarn-like format', () => {
83
+ const mockNpmOutput = JSON.stringify({
84
+ dependencies: {
85
+ 'test-pkg': {
86
+ version: '1.0.0',
87
+ dependencies: {
88
+ 'nested-test': {
89
+ version: '2.0.0',
90
+ },
91
+ },
92
+ },
93
+ 'other-pkg': {
94
+ version: '3.0.0',
95
+ },
96
+ },
97
+ });
98
+ TerminalOutput_1.TerminalOutput.exec.mockReturnValueOnce({
99
+ status: 0,
100
+ stdout: mockNpmOutput,
101
+ stderr: '',
102
+ }); // list command
103
+ const [success, deps] = packageManagerHandler_1.default.getPackageDependencies(/test/);
104
+ expect(success).toBe(true);
105
+ expect(deps).toEqual({
106
+ type: 'tree',
107
+ data: {
108
+ type: 'list',
109
+ trees: [
110
+ {
111
+ name: 'test-pkg@1.0.0',
112
+ children: [],
113
+ hint: null,
114
+ color: 'bold',
115
+ depth: 0,
116
+ },
117
+ {
118
+ name: 'nested-test@2.0.0',
119
+ children: [],
120
+ hint: null,
121
+ color: null,
122
+ depth: 1,
123
+ },
124
+ ],
125
+ },
126
+ });
127
+ });
128
+ });
129
+ describe('getPackageUpgradeCommand', () => {
130
+ it('should return yarn upgrade command when cli is installed with yarn', () => {
131
+ TerminalOutput_1.TerminalOutput.exec
132
+ .mockReturnValueOnce({
133
+ status: 0,
134
+ stdout: '/foo/bar/yarn/bin/test-cli\n',
135
+ stderr: '',
136
+ }) // yarn check
137
+ .mockReturnValueOnce({ status: 0, stdout: '1.22.0', stderr: '' }); // check for yarn 1.x
138
+ packageManager = new packageManagerHandler_1.default('test-package', 'test-cli');
139
+ const [success, command] = packageManager.getPackageUpgradeCommand();
140
+ expect(success).toBe(true);
141
+ expect(command).toBe('yarn global upgrade test-package --latest');
142
+ });
143
+ it('should return npm upgrade command when cli is installed with npm', () => {
144
+ TerminalOutput_1.TerminalOutput.exec.mockReturnValueOnce({
145
+ status: 0,
146
+ stdout: '/usr/local/bin/test-cli\n',
147
+ stderr: '',
148
+ }); // npm check
149
+ packageManager = new packageManagerHandler_1.default('test-package', 'test-cli');
150
+ const [success, command] = packageManager.getPackageUpgradeCommand();
151
+ expect(success).toBe(true);
152
+ expect(command).toBe('npm install --global test-package@latest');
153
+ });
154
+ it('should return error when yarn version is not 1.x', () => {
155
+ TerminalOutput_1.TerminalOutput.exec
156
+ .mockReturnValueOnce({
157
+ status: 0,
158
+ stdout: '/foo/bar/yarn/bin/test-cli\n',
159
+ stderr: '',
160
+ }) // yarn check
161
+ .mockReturnValueOnce({ status: 0, stdout: '2.22.0', stderr: '' }); // check for yarn 1.x
162
+ packageManager = new packageManagerHandler_1.default('test-package', 'test-cli');
163
+ const [success, message] = packageManager.getPackageUpgradeCommand();
164
+ expect(success).toBe(false);
165
+ expect(message).toContain('not compatible');
166
+ });
167
+ });
168
+ });
169
+ //# sourceMappingURL=packageManagerHandler.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageManagerHandler.test.js","sourceRoot":"","sources":["../../src/test/packageManagerHandler.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optimizely/ocp-cli",
3
- "version": "1.2.6",
3
+ "version": "1.2.8",
4
4
  "description": "Optimizely Connect Platform command line interface",
5
5
  "repository": "https://github.com/ZaiusInc/ocp-cli",
6
6
  "license": "Apache-2.0",
@@ -34,7 +34,7 @@
34
34
  "dependencies": {
35
35
  "@aws-sdk/client-s3": "^3.316.0",
36
36
  "@inquirer/prompts": "^7.2.4",
37
- "@zaiusinc/app-sdk": "^1.4.1",
37
+ "@zaiusinc/app-sdk": "^1.5.4",
38
38
  "@zaiusinc/node-sdk": "^1.1.3",
39
39
  "adm-zip": "^0.4.13",
40
40
  "chalk": "^4.1.2",
@@ -80,7 +80,7 @@ export abstract class BaseBuildCommand {
80
80
 
81
81
  console.log(chalk.gray('Performing local validation...'));
82
82
  try {
83
- execSync('yarn --silent validate', {stdio: 'inherit'});
83
+ execSync('yarn validate', {stdio: 'inherit'});
84
84
  } catch (e) {
85
85
  process.exit(1);
86
86
  }
@@ -158,7 +158,7 @@ export class CreateCommand {
158
158
  'Reviews & Ratings', 'Content Management', 'Data Quality & Enrichment', 'Productivity', 'CRM',
159
159
  'Accounting & Finance', 'CDP / DMP', 'Attribution & Linking', 'Testing & Utilities',
160
160
  'Personalization & Content', 'Offers', 'Merchandising & Products', 'Site & Content Experience',
161
- 'Subscriptions'].sort();
161
+ 'Subscriptions', 'Audience Sync'].sort();
162
162
  await this.onAnswer(undefined, (await TerminalMenu.ask(`${this.question}:`, categories)).text);
163
163
  break;
164
164
 
@@ -1,5 +1,4 @@
1
1
  import * as chalk from 'chalk';
2
- import * as child_process from 'child_process';
3
2
  import fetch from 'node-fetch';
4
3
  import {compare, major} from 'semver';
5
4
  import {getDependencyFileUrl} from './Config';
@@ -8,6 +7,7 @@ import {TerminalPassthru} from './TeminalPassthru';
8
7
  import {TerminalConfirm} from './TerminalConfirm';
9
8
  import table = require('text-table');
10
9
  import {DependencyStage} from './DependencyStage';
10
+ import PackageManagerHandler from './packageManagerHandler';
11
11
 
12
12
  export namespace AppUpdater {
13
13
  /**
@@ -127,21 +127,20 @@ export namespace AppUpdater {
127
127
 
128
128
  export function getPackageDependencies(prod: boolean = false): {[name: string]: string} {
129
129
  try {
130
- const result = child_process.spawnSync(
131
- `yarn --no-progress ${prod ? '--prod ' : ''}-s list --json --pattern=@zaiusinc/ --non-interactive`,
132
- {cwd: process.cwd(), shell: true}
130
+ const [success, result] = PackageManagerHandler.getPackageDependencies(
131
+ /@zaiusinc\//,
132
+ prod
133
133
  );
134
134
 
135
- if (result.status === 0) {
136
- const tree = JSON.parse(result.stdout.toString());
135
+ if (success) {
137
136
  const output: {[name: string]: string} = {};
138
- for (const item of tree.data.trees) {
137
+ for (const item of result.data.trees) {
139
138
  const [name, version] = item.name.split(/(?!^)@/);
140
139
  output[name] = version;
141
140
  }
142
141
  return output;
143
142
  } else {
144
- console.error(result.stderr.toString());
143
+ console.error(result);
145
144
  }
146
145
  } catch (e) {
147
146
  console.error(e);
@@ -154,16 +153,16 @@ export namespace AppUpdater {
154
153
  return compare(ocpVersion, projectModuleversion) === 0;
155
154
  }
156
155
 
157
- function ensurePublicPackageUsage() {
156
+ // exported for testing
157
+ export function ensurePublicPackageUsage() {
158
158
  try {
159
- const result = child_process.spawnSync(
160
- 'yarn --no-progress --prod -s list --json --pattern="@zaius/app-sdk|@zaius/node-sdk" --non-interactive',
161
- {cwd: process.cwd(), shell: true}
159
+ const [success, result] = PackageManagerHandler.getPackageDependencies(
160
+ /@zaius\/app-sdk|@zaius\/node-sdk/,
161
+ true
162
162
  );
163
163
 
164
- if (result.status === 0) {
165
- const tree = JSON.parse(result.stdout.toString());
166
- if (!tree.data.trees.length) {
164
+ if (success) {
165
+ if (!result.data.trees.length) {
167
166
  return;
168
167
  }
169
168
 
@@ -4,9 +4,8 @@ import * as os from 'os';
4
4
  import * as path from 'path';
5
5
  import * as semver from 'semver';
6
6
  import { ManifestDefinition } from 'oo-cli/dist/types/manifest';
7
- import { TerminalOutput } from './TerminalOutput';
8
7
  import { TerminalConfirm } from './TerminalConfirm';
9
- import { TerminalPassthru } from './TeminalPassthru';
8
+ import PackageManagerHandler from './packageManagerHandler';
10
9
 
11
10
  interface LastCheck {
12
11
  date: Date;
@@ -20,13 +19,24 @@ export async function checkForUpdate(manifest: ManifestDefinition, noPrompt: boo
20
19
  const installed = manifest.package?.version!;
21
20
  const prerelease = semver.prerelease(installed);
22
21
  const isBeta = prerelease && prerelease[0] === 'beta';
22
+ const packageManagerHandler = new PackageManagerHandler(
23
+ '@optimizely/ocp-cli',
24
+ 'ocp'
25
+ );
23
26
 
24
27
  if (isBeta) {
28
+ const [success, result] = packageManagerHandler.getPackageUpgradeCommand();
29
+ if (!success) {
30
+ console.log(chalk.red(result));
31
+ return;
32
+ }
25
33
  console.log(
26
- chalk.yellow(
27
- `You are running beta version (${installed})'. ` +
28
- `${chalk.italic.grey('yarn global upgrade @optimizely/ocp-cli --latest')} to upgrade to the latest release version`
29
- )
34
+ chalk.yellow(
35
+ `You are running beta version (${installed})'. ` +
36
+ `Run ${chalk.italic.grey(
37
+ `${result}`
38
+ )} to upgrade to the latest release version`
39
+ )
30
40
  );
31
41
  return;
32
42
  }
@@ -41,13 +51,18 @@ export async function checkForUpdate(manifest: ManifestDefinition, noPrompt: boo
41
51
 
42
52
  try {
43
53
  let upToDate = true;
44
- const latest = await fetchLatest();
45
- if (latest) {
54
+ const [success, latest] = packageManagerHandler.fetchLatestPackage();
55
+ if (success && latest) {
46
56
  if (semver.gt(latest, installed)) {
47
57
  upToDate = false;
48
58
  if (await TerminalConfirm.ask(
49
59
  chalk.yellow('A new version of OCP CLI is available. Update now?'), noPrompt, true)) {
50
- TerminalPassthru.exec('yarn global upgrade @optimizely/ocp-cli --latest');
60
+ const [passed, error] =
61
+ packageManagerHandler.upgradeGlobalPackageToLatest();
62
+ if (!passed) {
63
+ console.log(chalk.red(error));
64
+ return;
65
+ }
51
66
  }
52
67
  }
53
68
  }
@@ -57,10 +72,6 @@ export async function checkForUpdate(manifest: ManifestDefinition, noPrompt: boo
57
72
  }
58
73
  }
59
74
 
60
- async function fetchLatest() {
61
- return TerminalOutput.exec('yarn info -s @optimizely/ocp-cli dist-tags.latest').stdout.trim();
62
- }
63
-
64
75
  function getLastCheck(): LastCheck | undefined {
65
76
  const file = path.join(os.homedir(), `.ocp/${LAST_VERSION_CHECK_FILE}`);
66
77
  if (fs.existsSync(file)) {