@sasjs/cli 4.3.0 → 4.4.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.
@@ -156,7 +156,7 @@ var AddCommand = /** @class */ (function (_super) {
156
156
  })
157
157
  .catch(function (err) {
158
158
  var _a;
159
- (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error('Error adding credentials: ', err.toString());
159
+ (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error('Error adding credentials.', err.toString());
160
160
  return command_1.ReturnCode.InternalError;
161
161
  })];
162
162
  case 2: return [2 /*return*/, _b.sent()];
@@ -176,7 +176,7 @@ var AddCommand = /** @class */ (function (_super) {
176
176
  })
177
177
  .catch(function (err) {
178
178
  var _a;
179
- (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error('Error adding target: ', err);
179
+ (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error('Error adding target.', err);
180
180
  return command_1.ReturnCode.InternalError;
181
181
  })];
182
182
  case 1: return [2 /*return*/, _a.sent()];
@@ -10,29 +10,6 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- var desc = Object.getOwnPropertyDescriptor(m, k);
16
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
- desc = { enumerable: true, get: function() { return m[k]; } };
18
- }
19
- Object.defineProperty(o, k2, desc);
20
- }) : (function(o, m, k, k2) {
21
- if (k2 === undefined) k2 = k;
22
- o[k2] = m[k];
23
- }));
24
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
- Object.defineProperty(o, "default", { enumerable: true, value: v });
26
- }) : function(o, v) {
27
- o["default"] = v;
28
- });
29
- var __importStar = (this && this.__importStar) || function (mod) {
30
- if (mod && mod.__esModule) return mod;
31
- var result = {};
32
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
- __setModuleDefault(result, mod);
34
- return result;
35
- };
36
13
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
14
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
15
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -77,7 +54,7 @@ exports.createEnvFileForSasjs = exports.createEnvFileForSas9 = exports.createEnv
77
54
  var path_1 = __importDefault(require("path"));
78
55
  var logger_1 = require("@sasjs/utils/logger");
79
56
  var types_1 = require("@sasjs/utils/types");
80
- var node_1 = __importStar(require("@sasjs/adapter/node"));
57
+ var node_1 = __importDefault(require("@sasjs/adapter/node"));
81
58
  var auth_1 = require("../../utils/auth");
82
59
  var utils_1 = require("../../utils");
83
60
  var utils_2 = require("@sasjs/utils");
@@ -123,7 +100,9 @@ var addCredential = function (target, insecure, targetScope) { return __awaiter(
123
100
  case 4: return [4 /*yield*/, (0, input_1.getCredentialsInputForViya)(target.name)];
124
101
  case 5:
125
102
  _b = _j.sent(), client = _b.client, secret = _b.secret;
126
- return [4 /*yield*/, (0, exports.getTokens)(target, client, secret, httpsAgentOptions)];
103
+ return [4 /*yield*/, (0, exports.getTokens)(target, client, secret, httpsAgentOptions).catch(function (err) {
104
+ throw err;
105
+ })];
127
106
  case 6:
128
107
  _c = _j.sent(), access_token = _c.access_token, refresh_token = _c.refresh_token;
129
108
  if (!(targetScope === targetScope_1.TargetScope.Local)) return [3 /*break*/, 8];
@@ -202,15 +181,8 @@ var getTokens = function (target, client, secret, httpsAgentOptions) { return __
202
181
  httpsAgentOptions: httpsAgentOptions,
203
182
  debug: ((_b = process.logger) === null || _b === void 0 ? void 0 : _b.logLevel) === logger_1.LogLevel.Debug
204
183
  });
205
- return [4 /*yield*/, (0, auth_1.getNewAccessToken)(adapter, client, secret, target).catch(function (e) {
206
- var _a;
207
- var errorMessage = "An error has occurred while validating your credentials: ".concat(e);
208
- var checkCredentialsMessage = "Please check your Client ID ".concat(target.serverType === types_1.ServerType.Sasjs ? '' : 'and Client Secret ', "and try again.\n");
209
- var errorMessageToDisplay = e instanceof node_1.CertificateError
210
- ? errorMessage
211
- : "".concat(errorMessage, "\n").concat(checkCredentialsMessage);
212
- (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error(errorMessageToDisplay);
213
- throw e;
184
+ return [4 /*yield*/, (0, auth_1.getNewAccessToken)(adapter, client, secret, target).catch(function (err) {
185
+ throw err;
214
186
  })];
215
187
  case 1:
216
188
  _a = _c.sent(), access_token = _a.access_token, refresh_token = _a.refresh_token;
@@ -92,6 +92,7 @@ var setConstantsUtils = __importStar(require("../../../utils/setConstants"));
92
92
  var utils_1 = require("@sasjs/utils");
93
93
  var types_1 = require("../../../types");
94
94
  var command_1 = require("../../../types/command");
95
+ var node_1 = require("@sasjs/adapter/node");
95
96
  describe('AddCommand', function () {
96
97
  var defaultArgs = ['node', 'sasjs'];
97
98
  beforeEach(function () {
@@ -252,20 +253,21 @@ describe('AddCommand - cred', function () {
252
253
  });
253
254
  }); });
254
255
  it('should return the error code when execution was unsuccessful', function () { return __awaiter(void 0, void 0, void 0, function () {
255
- var args, command, returnCode;
256
+ var args, loginError, command, returnCode;
256
257
  return __generator(this, function (_a) {
257
258
  switch (_a.label) {
258
259
  case 0:
259
260
  args = __spreadArray(__spreadArray([], __read(defaultArgs), false), ['add', 'cred', '-t', 'test'], false);
261
+ loginError = new node_1.LoginRequiredError("Error while fetching access token from /SASLogon/oauth/token\nThrown by the @sasjs/adapter getAccessTokenForViya function.\nPayload:\n{\n \"grant_type\": \"authorization_code\",\n \"code\": \"hD8O7b7t6i\"\n}\nHeaders:\n{\n \"Authorization\": \"Basic NEdMQXBwOjRHTEFwcDE=\",\n \"Accept\": \"application/json\"\n}\nClientId: 4GLApp\nClientSecret: 4GLApp1\n\nResponse from Viya is below.\nAuth error: {\n \"error\": \"invalid_token\",\n \"error_description\": \"No scopes were granted\"\n}\nPlease check your Client ID and Client Secret and try again.");
260
262
  jest
261
263
  .spyOn(addCredentialModule, 'addCredential')
262
- .mockImplementation(function () { return Promise.reject(new Error('Test Error')); });
264
+ .mockImplementation(function () { return Promise.reject(loginError); });
263
265
  command = new addCommand_1.AddCommand(args);
264
266
  return [4 /*yield*/, command.execute()];
265
267
  case 1:
266
268
  returnCode = _a.sent();
267
269
  expect(returnCode).toEqual(command_1.ReturnCode.InternalError);
268
- expect(process.logger.error).toHaveBeenCalledWith('Error adding credentials: ', new Error('Test Error').toString());
270
+ expect(process.logger.error).toHaveBeenCalledWith('Error adding credentials.', loginError.toString());
269
271
  return [2 /*return*/];
270
272
  }
271
273
  });
@@ -42,8 +42,7 @@ exports.angularAppFiles = {
42
42
  { fileName: 'index.html' },
43
43
  { fileName: 'main.ts' },
44
44
  { fileName: 'polyfills.ts' },
45
- { fileName: 'styles.scss' },
46
- { fileName: 'test.ts' }
45
+ { fileName: 'styles.scss' }
47
46
  ],
48
47
  subFolders: [
49
48
  {
@@ -88,9 +88,7 @@ function executeDeployScriptSasViya(deployScriptName, target, linesToExecute, lo
88
88
  log = executionResult.log;
89
89
  }
90
90
  else if (executionResult.log.items) {
91
- log = executionResult.log.items
92
- .map(function (i) { return i.line; })
93
- .join(os_1.default.EOL);
91
+ log = executionResult.log.items.map(function (i) { return i.line; }).join(os_1.default.EOL);
94
92
  }
95
93
  else {
96
94
  log = JSON.stringify(executionResult.log).replace(/\\n/g, os_1.default.EOL);
@@ -118,13 +118,18 @@ function runSasJob(target, isLocal, sasJobLocation, dataFilePath, configFilePath
118
118
  return __generator(this, function (_a) {
119
119
  switch (_a.label) {
120
120
  case 0:
121
- if (!((res && res.errorCode) || res.error)) return [3 /*break*/, 2];
121
+ if (!((res && res.errorCode) || (res && res.error))) return [3 /*break*/, 2];
122
122
  (0, displayResult_1.displayError)('Request finished with errors.');
123
123
  return [4 /*yield*/, saveLogFile(sasjs, sasJobLocation, logFile, jobPath)];
124
124
  case 1:
125
125
  _a.sent();
126
126
  return [2 /*return*/];
127
127
  case 2:
128
+ if (res === undefined) {
129
+ process.logger.warn('WEBOUT is not present in response payload.');
130
+ }
131
+ _a.label = 3;
132
+ case 3:
128
133
  output = '';
129
134
  if (res === null || res === void 0 ? void 0 : res.result)
130
135
  res = res.result;
@@ -146,13 +151,13 @@ function runSasJob(target, isLocal, sasJobLocation, dataFilePath, configFilePath
146
151
  else {
147
152
  output = res;
148
153
  }
149
- if (!!!output) return [3 /*break*/, 4];
154
+ if (!!!output) return [3 /*break*/, 5];
150
155
  return [4 /*yield*/, writeOutput(outputPathParam, output, sasJobLocation)];
151
- case 3:
156
+ case 4:
152
157
  _a.sent();
153
- _a.label = 4;
154
- case 4: return [4 /*yield*/, saveLogFile(sasjs, sasJobLocation, logFile, jobPath)];
155
- case 5:
158
+ _a.label = 5;
159
+ case 5: return [4 /*yield*/, saveLogFile(sasjs, sasJobLocation, logFile, jobPath)];
160
+ case 6:
156
161
  _a.sent();
157
162
  result = true;
158
163
  return [2 /*return*/];
@@ -382,7 +382,7 @@ describe('sasjs run with Viya', function () {
382
382
  return __generator(this, function (_a) {
383
383
  switch (_a.label) {
384
384
  case 0:
385
- logPart = "SASjs Streaming App Created! Check it out here:\n \n \n \n \n sas.analytium.co.uk/SASJobExecution?_FILE=".concat(target.appLoc, "/services/clickme.html&_debug=2\n");
385
+ logPart = "SASjs Streaming App Created! Check it out here:\n \n \n \n \n your-sas-server.com/SASJobExecution?_FILE=".concat(target.appLoc, "/services/clickme.html&_debug=2\n");
386
386
  return [4 /*yield*/, (0, build_1.build)(target)];
387
387
  case 1:
388
388
  _a.sent();
@@ -1,9 +1,5 @@
1
1
  import SASjs from '@sasjs/adapter/node';
2
- interface LogJson {
3
- items: {
4
- line: string;
5
- }[];
6
- }
2
+ import { LogJson } from '../../types';
7
3
  /**
8
4
  * Fetches content of the log file
9
5
  * @param {object} sasjs - configuration object of SAS adapter.
@@ -13,4 +9,3 @@ interface LogJson {
13
9
  * @returns an object containing log lines in 'items' array.
14
10
  */
15
11
  export declare const fetchLogFileContent: (sasjs: SASjs, accessToken: string, logUrl: string, logCount: number) => Promise<LogJson>;
16
- export {};
@@ -4,3 +4,4 @@ export { Folder } from './folder';
4
4
  export { TargetScope } from './targetScope';
5
5
  export { TestFlow, Coverage, CoverageType, CoverageState, TestResults, TestResultStatus, TestDescription, TestResult, TestResultDescription, TestResultCsv } from './testing';
6
6
  export { Flow, FlowWave, FlowWaveJob } from './flow';
7
+ export * from './log';
@@ -1,4 +1,18 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
17
  exports.TestResultStatus = exports.CoverageState = exports.CoverageType = exports.TargetScope = exports.CommandBase = void 0;
4
18
  var commandBase_1 = require("./command/commandBase");
@@ -9,3 +23,4 @@ var testing_1 = require("./testing");
9
23
  Object.defineProperty(exports, "CoverageType", { enumerable: true, get: function () { return testing_1.CoverageType; } });
10
24
  Object.defineProperty(exports, "CoverageState", { enumerable: true, get: function () { return testing_1.CoverageState; } });
11
25
  Object.defineProperty(exports, "TestResultStatus", { enumerable: true, get: function () { return testing_1.TestResultStatus; } });
26
+ __exportStar(require("./log"), exports);
@@ -0,0 +1,7 @@
1
+ export interface LogLine {
2
+ line: string;
3
+ }
4
+ export interface LogJson {
5
+ items: LogLine[];
6
+ error?: object;
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -42,6 +42,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
42
42
  exports.getNewAccessToken = exports.refreshTokens = exports.isRefreshTokenExpiring = exports.isAccessTokenExpiring = exports.getAuthCode = exports.getAuthUrl = void 0;
43
43
  var utils_1 = require("@sasjs/utils");
44
44
  var jwt_decode_1 = __importDefault(require("jwt-decode"));
45
+ var node_1 = require("@sasjs/adapter/node");
45
46
  var getAuthUrl = function (serverType, serverUrl, clientId) {
46
47
  return serverType === utils_1.ServerType.Sasjs
47
48
  ? "".concat(serverUrl, "/#/SASjsLogon?client_id=").concat(clientId, "&response_type=code")
@@ -124,7 +125,16 @@ function getNewAccessToken(sasjsInstance, clientId, clientSecret, target) {
124
125
  return [4 /*yield*/, getAuthCode(authUrl)];
125
126
  case 1:
126
127
  authCode = _b.sent();
127
- return [4 /*yield*/, sasjsInstance.getAccessToken(clientId, clientSecret, authCode)];
128
+ return [4 /*yield*/, sasjsInstance
129
+ .getAccessToken(clientId, clientSecret, authCode)
130
+ .catch(function (err) {
131
+ var errorMessage = "An error has occurred while validating your credentials.\n".concat(err);
132
+ var checkCredentialsMessage = "Please check your Client ID ".concat(target.serverType === utils_1.ServerType.Sasjs ? '' : 'and Client Secret ', "and try again.\n");
133
+ var errorMessageToDisplay = err instanceof node_1.CertificateError
134
+ ? errorMessage
135
+ : "".concat(errorMessage, "\n").concat(checkCredentialsMessage);
136
+ throw errorMessageToDisplay;
137
+ })];
128
138
  case 2:
129
139
  _a = _b.sent(), access_token = _a.access_token, refresh_token = _a.refresh_token;
130
140
  return [2 /*return*/, { access_token: access_token, refresh_token: refresh_token }];
@@ -1 +1,2 @@
1
- export declare const saveLog: (logData: any, logFile: string | undefined, jobPath: string, returnStatusOnly: boolean, silent?: boolean) => Promise<void>;
1
+ import { LogJson } from '../types';
2
+ export declare const saveLog: (logData: LogJson | string, logFile: string | undefined, jobPath: string, returnStatusOnly: boolean, silent?: boolean) => Promise<void>;
@@ -46,17 +46,18 @@ var _1 = require(".");
46
46
  var saveLog = function (logData, logFile, jobPath, returnStatusOnly, silent) {
47
47
  if (silent === void 0) { silent = false; }
48
48
  return __awaiter(void 0, void 0, void 0, function () {
49
- var logPath, folderPath, parentFolderPath, logLines;
49
+ var error, logPath, folderPath, parentFolderPath, logLines;
50
50
  var _a;
51
51
  return __generator(this, function (_b) {
52
52
  switch (_b.label) {
53
53
  case 0:
54
- if (logFile) {
55
- logPath = logFile;
56
- }
57
- else {
58
- logPath = path_1.default.join(process.projectDir, "".concat(jobPath.split(path_1.default.sep).slice(-1).pop(), ".log"));
54
+ if (typeof logData !== 'string') {
55
+ error = logData.error;
56
+ if (error)
57
+ throw JSON.stringify(error, null, 2);
59
58
  }
59
+ logPath = logFile ||
60
+ path_1.default.join(process.projectDir, "".concat(jobPath.split(path_1.default.sep).slice(-1).pop(), ".log"));
60
61
  folderPath = logPath.split(path_1.default.sep);
61
62
  folderPath.pop();
62
63
  parentFolderPath = folderPath.join(path_1.default.sep);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ var saveLog_1 = require("../saveLog");
40
+ describe('saveLog', function () {
41
+ it('should throw an error if there is an error in logData', function () { return __awaiter(void 0, void 0, void 0, function () {
42
+ var errorObject, expectedError, logData;
43
+ return __generator(this, function (_a) {
44
+ switch (_a.label) {
45
+ case 0:
46
+ errorObject = {
47
+ errorCode: 5737,
48
+ message: 'This is the root node of a diagnostic error.',
49
+ details: ['Details are available from the nested error objects.'],
50
+ errors: [
51
+ {
52
+ errorCode: 5738,
53
+ message: 'The Compute provider for the Job Execution service failed to create job log file "4A3C0C80-87F3-4B44-A94A-68AF37E32521.log".',
54
+ details: [
55
+ 'Log or listing output could not be streamed to the Files service.'
56
+ ],
57
+ errors: [
58
+ {
59
+ errorCode: 5208,
60
+ message: 'Log or listing output could not be streamed to the Files service.',
61
+ details: [
62
+ 'The file "FileResource1684161631532" cannot be uploaded because it is larger than 100 megabytes.',
63
+ 'Files service errorCode=124009 httpStatusCode=400.'
64
+ ],
65
+ links: [],
66
+ version: 2,
67
+ httpStatusCode: 500
68
+ }
69
+ ],
70
+ links: [],
71
+ version: 2,
72
+ httpStatusCode: 500
73
+ }
74
+ ],
75
+ links: [],
76
+ version: 2,
77
+ httpStatusCode: 207
78
+ };
79
+ expectedError = JSON.stringify(errorObject, null, 2);
80
+ logData = { items: [], error: errorObject };
81
+ return [4 /*yield*/, expect(function () { return (0, saveLog_1.saveLog)(logData, undefined, '', true); }).rejects.toEqual(expectedError)];
82
+ case 1:
83
+ _a.sent();
84
+ return [2 /*return*/];
85
+ }
86
+ });
87
+ }); });
88
+ });
@@ -1,5 +1,6 @@
1
1
  import { Target, MacroVars } from '@sasjs/utils';
2
2
  import SASjs from '@sasjs/adapter/node';
3
+ import { LogJson } from '../types';
3
4
  export declare function inExistingProject(folderPath: string): Promise<boolean>;
4
5
  export declare function diff(a: any[], b: any[]): any[];
5
6
  export declare function createReactApp(folderPath: string): Promise<void>;
@@ -16,11 +17,7 @@ export declare function executePowerShellScript(filePath: string, logFilePath: s
16
17
  * Extracts plain text job log from fetched json log
17
18
  * @param {object} logJson
18
19
  */
19
- export declare function parseLogLines(logJson: {
20
- items: {
21
- line: string;
22
- }[];
23
- }): string;
20
+ export declare function parseLogLines(logJson: LogJson): string;
24
21
  /**
25
22
  * Converts MacroVars JSON from command source param to sas statements
26
23
  * The JSON must have the following structure:
package/package.json CHANGED
@@ -50,7 +50,7 @@
50
50
  "access": "public"
51
51
  },
52
52
  "dependencies": {
53
- "@sasjs/adapter": "4.3.4",
53
+ "@sasjs/adapter": "4.5.1",
54
54
  "@sasjs/core": "4.45.4",
55
55
  "@sasjs/lint": "2.3.0",
56
56
  "@sasjs/utils": "3.3.0",
@@ -60,7 +60,7 @@
60
60
  "esm": "3.2.25",
61
61
  "find": "0.3.0",
62
62
  "js-base64": "3.7.2",
63
- "jsdom": "21.1.0",
63
+ "jsdom": "22.1.0",
64
64
  "jwt-decode": "3.1.2",
65
65
  "lodash.groupby": "4.6.0",
66
66
  "lodash.uniqby": "4.7.0",
@@ -81,7 +81,7 @@
81
81
  "@types/debug": "4.1.7",
82
82
  "@types/find": "0.2.1",
83
83
  "@types/jest": "29.4.0",
84
- "@types/jsdom": "21.1.0",
84
+ "@types/jsdom": "21.1.1",
85
85
  "@types/lodash.groupby": "4.6.6",
86
86
  "@types/lodash.uniqby": "4.7.6",
87
87
  "@types/node": "18.14.1",
@@ -102,5 +102,5 @@
102
102
  "typescript": "4.9.5",
103
103
  "util": "0.12.4"
104
104
  },
105
- "version": "4.3.0"
105
+ "version": "4.4.1"
106
106
  }