@sasjs/cli 3.15.2 → 3.16.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.
Files changed (42) hide show
  1. package/README.md +3 -0
  2. package/build/commands/add/addCredential.js +25 -18
  3. package/build/commands/add/addTarget.js +14 -9
  4. package/build/commands/add/spec/addTarget.spec.js +7 -0
  5. package/build/commands/build/build.js +4 -4
  6. package/build/commands/compile/internal/spec/compileTestFile.spec.js +5 -3
  7. package/build/commands/deploy/spec/cbd.spec.js +38 -17
  8. package/build/commands/testing/spec/testing.spec.js +5 -0
  9. package/build/commands/web/internal/createAssetServices.d.ts +11 -2
  10. package/build/commands/web/internal/createAssetServices.js +83 -92
  11. package/build/commands/web/internal/getAssetPath.d.ts +2 -0
  12. package/build/commands/web/internal/getAssetPath.js +17 -0
  13. package/build/commands/web/internal/modifyLinksInContent.d.ts +2 -0
  14. package/build/commands/web/internal/modifyLinksInContent.js +11 -0
  15. package/build/commands/web/internal/sas9/createClickMeService.d.ts +6 -0
  16. package/build/commands/web/internal/sas9/createClickMeService.js +91 -0
  17. package/build/commands/web/internal/sas9/generateAssetService.d.ts +7 -0
  18. package/build/commands/web/internal/sas9/generateAssetService.js +75 -0
  19. package/build/commands/web/internal/sas9/getWebServiceContent.d.ts +7 -0
  20. package/build/commands/web/internal/{getWebServiceContent.js → sas9/getWebServiceContent.js} +12 -8
  21. package/build/commands/web/internal/sas9/index.d.ts +3 -0
  22. package/build/commands/web/internal/sas9/index.js +15 -0
  23. package/build/commands/web/internal/sasViya/createClickMeFile.d.ts +6 -0
  24. package/build/commands/web/internal/sasViya/createClickMeFile.js +63 -0
  25. package/build/commands/web/internal/sasViya/index.d.ts +1 -0
  26. package/build/commands/web/internal/sasViya/index.js +13 -0
  27. package/build/commands/web/internal/sasjsout.d.ts +1 -1
  28. package/build/commands/web/internal/sasjsout.js +2 -1
  29. package/build/commands/web/internal/updateAllTags.d.ts +7 -4
  30. package/build/commands/web/internal/updateAllTags.js +5 -0
  31. package/build/commands/web/internal/updateLinkTag.d.ts +2 -4
  32. package/build/commands/web/internal/updateScriptTag.d.ts +2 -4
  33. package/build/commands/web/internal/updateScriptTag.js +32 -32
  34. package/build/commands/web/internal/updateStyleTag.d.ts +2 -4
  35. package/build/commands/web/internal/updateStyleTag.js +32 -32
  36. package/build/commands/web/web.js +30 -79
  37. package/build/constants.d.ts +1 -0
  38. package/build/utils/setConstants.js +4 -2
  39. package/build/utils/utils.d.ts +1 -0
  40. package/build/utils/utils.js +22 -1
  41. package/package.json +1 -1
  42. package/build/commands/web/internal/getWebServiceContent.d.ts +0 -2
package/README.md CHANGED
@@ -78,6 +78,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
78
78
  <td align="center"><a href="https://github.com/sabhas"><img src="https://avatars.githubusercontent.com/u/82647447?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sabir Hassan</b></sub></a><br /><a href="https://github.com/sasjs/cli/commits?author=sabhas" title="Code">💻</a> <a href="https://github.com/sasjs/cli/pulls?q=is%3Apr+reviewed-by%3Asabhas" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/sasjs/cli/commits?author=sabhas" title="Tests">⚠️</a> <a href="#ideas-sabhas" title="Ideas, Planning, & Feedback">🤔</a></td>
79
79
  <td align="center"><a href="https://github.com/VladislavParhomchik"><img src="https://avatars.githubusercontent.com/u/83717836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>VladislavParhomchik</b></sub></a><br /><a href="https://github.com/sasjs/cli/commits?author=VladislavParhomchik" title="Tests">⚠️</a> <a href="https://github.com/sasjs/cli/pulls?q=is%3Apr+reviewed-by%3AVladislavParhomchik" title="Reviewed Pull Requests">👀</a></td>
80
80
  </tr>
81
+ <tr>
82
+ <td align="center"><a href="http://rudvfaden.github.io/"><img src="https://avatars.githubusercontent.com/u/2445577?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Rud Faden</b></sub></a><br /><a href="https://github.com/sasjs/cli/issues?q=author%3Arudvfaden" title="Bug reports">🐛</a></td>
83
+ </tr>
81
84
  </table>
82
85
 
83
86
  <!-- markdownlint-restore -->
@@ -75,7 +75,8 @@ var logger_1 = require("@sasjs/utils/logger");
75
75
  var types_1 = require("@sasjs/utils/types");
76
76
  var node_1 = __importStar(require("@sasjs/adapter/node"));
77
77
  var auth_1 = require("../../utils/auth");
78
- var utils_1 = require("@sasjs/utils");
78
+ var utils_1 = require("../../utils");
79
+ var utils_2 = require("@sasjs/utils");
79
80
  var input_1 = require("./internal/input");
80
81
  var targetScope_1 = require("../../types/targetScope");
81
82
  var saveConfig_1 = require("./internal/saveConfig");
@@ -114,7 +115,7 @@ var addCredential = function (target, insecure, targetScope) { return __awaiter(
114
115
  case types_1.ServerType.Sas9: return [3 /*break*/, 10];
115
116
  case types_1.ServerType.Sasjs: return [3 /*break*/, 15];
116
117
  }
117
- return [3 /*break*/, 21];
118
+ return [3 /*break*/, 22];
118
119
  case 4: return [4 /*yield*/, (0, input_1.getCredentialsInputForViya)(target.name)];
119
120
  case 5:
120
121
  _b = _j.sent(), client = _b.client, secret = _b.secret;
@@ -129,7 +130,7 @@ var addCredential = function (target, insecure, targetScope) { return __awaiter(
129
130
  case 8:
130
131
  target = new types_1.Target(__assign(__assign({}, target.toJson(false)), { authConfig: { client: client, secret: secret, access_token: access_token, refresh_token: refresh_token } }));
131
132
  _j.label = 9;
132
- case 9: return [3 /*break*/, 22];
133
+ case 9: return [3 /*break*/, 23];
133
134
  case 10: return [4 /*yield*/, (0, input_1.getCredentialsInputSas9)(target, targetScope)];
134
135
  case 11:
135
136
  _d = _j.sent(), userName = _d.userName, password = _d.password;
@@ -141,25 +142,31 @@ var addCredential = function (target, insecure, targetScope) { return __awaiter(
141
142
  case 13:
142
143
  target = new types_1.Target(__assign(__assign({}, target.toJson(false)), { authConfigSas9: { userName: userName, password: password } }));
143
144
  _j.label = 14;
144
- case 14: return [3 /*break*/, 22];
145
- case 15: return [4 /*yield*/, (0, input_1.getCredentialsInputSasjs)(target)];
145
+ case 14: return [3 /*break*/, 23];
146
+ case 15: return [4 /*yield*/, (0, utils_1.isSasJsServerInServerMode)(target)];
146
147
  case 16:
148
+ if (!(_j.sent())) {
149
+ process.logger.info('No need to authenticate against the sasjs server running in desktop mode.');
150
+ return [2 /*return*/, target];
151
+ }
152
+ return [4 /*yield*/, (0, input_1.getCredentialsInputSasjs)(target)];
153
+ case 17:
147
154
  client = (_j.sent()).client;
148
155
  return [4 /*yield*/, (0, exports.getTokens)(target, client, '', httpsAgentOptions)];
149
- case 17:
156
+ case 18:
150
157
  _e = _j.sent(), access_token = _e.access_token, refresh_token = _e.refresh_token;
151
- if (!(targetScope === targetScope_1.TargetScope.Local)) return [3 /*break*/, 19];
158
+ if (!(targetScope === targetScope_1.TargetScope.Local)) return [3 /*break*/, 20];
152
159
  return [4 /*yield*/, (0, exports.createEnvFileForSasjs)(target.name, client, access_token, refresh_token)];
153
- case 18:
154
- _j.sent();
155
- return [3 /*break*/, 20];
156
160
  case 19:
161
+ _j.sent();
162
+ return [3 /*break*/, 21];
163
+ case 20:
157
164
  target = new types_1.Target(__assign(__assign({}, target.toJson(false)), { authConfig: { client: client, secret: '', access_token: access_token, refresh_token: refresh_token } }));
158
- _j.label = 20;
159
- case 20: return [3 /*break*/, 22];
160
- case 21: throw new Error('Target contains invalid serverType. Possible types could be SASVIYA, SAS9 and SASJS');
161
- case 22: return [4 /*yield*/, (0, saveConfig_1.saveConfig)(targetScope, target, false, false)];
162
- case 23:
165
+ _j.label = 21;
166
+ case 21: return [3 /*break*/, 23];
167
+ case 22: throw new Error('Target contains invalid serverType. Possible types could be SASVIYA, SAS9 and SASJS');
168
+ case 23: return [4 /*yield*/, (0, saveConfig_1.saveConfig)(targetScope, target, false, false)];
169
+ case 24:
163
170
  filePath = _j.sent();
164
171
  (_h = process.logger) === null || _h === void 0 ? void 0 : _h.info("Target configuration has been saved to ".concat(filePath, " ."));
165
172
  return [2 /*return*/, target];
@@ -216,7 +223,7 @@ var createEnvFileForViya = function (targetName, client, secret, accessToken, re
216
223
  case 0:
217
224
  envFileContent = "CLIENT=".concat(client, "\nSECRET=").concat(secret, "\nACCESS_TOKEN=").concat(accessToken, "\nREFRESH_TOKEN=").concat(refreshToken, "\n");
218
225
  envFilePath = path_1.default.join(process.projectDir, ".env.".concat(targetName));
219
- return [4 /*yield*/, (0, utils_1.createFile)(envFilePath, envFileContent)];
226
+ return [4 /*yield*/, (0, utils_2.createFile)(envFilePath, envFileContent)];
220
227
  case 1:
221
228
  _b.sent();
222
229
  (_a = process.logger) === null || _a === void 0 ? void 0 : _a.success("Environment file saved at ".concat(envFilePath));
@@ -233,7 +240,7 @@ var createEnvFileForSas9 = function (targetName, userName, password) { return __
233
240
  case 0:
234
241
  envFileContent = "SAS_USERNAME=".concat(userName, "\nSAS_PASSWORD=").concat(password, "\n");
235
242
  envFilePath = path_1.default.join(process.projectDir, ".env.".concat(targetName));
236
- return [4 /*yield*/, (0, utils_1.createFile)(envFilePath, envFileContent)];
243
+ return [4 /*yield*/, (0, utils_2.createFile)(envFilePath, envFileContent)];
237
244
  case 1:
238
245
  _b.sent();
239
246
  (_a = process.logger) === null || _a === void 0 ? void 0 : _a.success("Environment file saved at ".concat(envFilePath));
@@ -250,7 +257,7 @@ var createEnvFileForSasjs = function (targetName, client, accessToken, refreshTo
250
257
  case 0:
251
258
  envFileContent = "CLIENT=".concat(client, "\nACCESS_TOKEN=").concat(accessToken, "\nREFRESH_TOKEN=").concat(refreshToken, "\n");
252
259
  envFilePath = path_1.default.join(process.projectDir, ".env.".concat(targetName));
253
- return [4 /*yield*/, (0, utils_1.createFile)(envFilePath, envFileContent)];
260
+ return [4 /*yield*/, (0, utils_2.createFile)(envFilePath, envFileContent)];
254
261
  case 1:
255
262
  _b.sent();
256
263
  (_a = process.logger) === null || _a === void 0 ? void 0 : _a.success("Environment file saved at ".concat(envFilePath));
@@ -53,6 +53,7 @@ var targetScope_1 = require("../../types/targetScope");
53
53
  var input_1 = require("./internal/input");
54
54
  var saveConfig_1 = require("./internal/saveConfig");
55
55
  var addCredential_1 = require("./addCredential");
56
+ var utils_1 = require("../../utils");
56
57
  /**
57
58
  * Creates new target/ updates current target(if found) for either local config or global config file.
58
59
  * @param {boolean} insecure- boolean to use insecure connection, default is false. lf true the server will not reject any connection which is not authorized with the list of supplied CAs
@@ -81,7 +82,7 @@ function addTarget(insecure) {
81
82
  case types_1.ServerType.SasViya: return [3 /*break*/, 5];
82
83
  case types_1.ServerType.Sasjs: return [3 /*break*/, 7];
83
84
  }
84
- return [3 /*break*/, 9];
85
+ return [3 /*break*/, 11];
85
86
  case 3: return [4 /*yield*/, (0, input_1.getAndValidateSas9Fields)(target, scope)];
86
87
  case 4:
87
88
  _f = _h.sent(), serverName = _f.serverName, repositoryName = _f.repositoryName, userName = _f.userName, password = _f.password;
@@ -92,7 +93,7 @@ function addTarget(insecure) {
92
93
  else {
93
94
  targetJson = __assign(__assign({}, targetJson), { authConfigSas9: { userName: userName, password: password } });
94
95
  }
95
- return [3 /*break*/, 10];
96
+ return [3 /*break*/, 12];
96
97
  case 5: return [4 /*yield*/, (0, input_1.getAndValidateSasViyaFields)(target, scope, serverUrl, insecure, addCredential_1.addCredential)];
97
98
  case 6:
98
99
  _g = _h.sent(), contextName = _g.contextName, updatedViyaTarget = _g.target;
@@ -100,18 +101,22 @@ function addTarget(insecure) {
100
101
  contextName: contextName
101
102
  };
102
103
  targetJson = __assign(__assign({}, updatedViyaTarget.toJson(false)), targetJson);
103
- return [3 /*break*/, 10];
104
- case 7: return [4 /*yield*/, (0, input_1.getAndValidateSasjsFields)(target, scope, insecure, addCredential_1.addCredential)];
104
+ return [3 /*break*/, 12];
105
+ case 7: return [4 /*yield*/, (0, utils_1.isSasJsServerInServerMode)(target)];
105
106
  case 8:
107
+ if (!_h.sent()) return [3 /*break*/, 10];
108
+ return [4 /*yield*/, (0, input_1.getAndValidateSasjsFields)(target, scope, insecure, addCredential_1.addCredential)];
109
+ case 9:
106
110
  updatedSasjsTarget = (_h.sent()).target;
107
111
  targetJson = updatedSasjsTarget.toJson(false);
108
- return [3 /*break*/, 10];
109
- case 9: throw new Error('Target contains invalid serverType. Possible types could be SASVIYA, SAS9 and SASJS');
110
- case 10: return [4 /*yield*/, (0, input_1.getIsDefault)()];
111
- case 11:
112
+ _h.label = 10;
113
+ case 10: return [3 /*break*/, 12];
114
+ case 11: throw new Error('Target contains invalid serverType. Possible types could be SASVIYA, SAS9 and SASJS');
115
+ case 12: return [4 /*yield*/, (0, input_1.getIsDefault)()];
116
+ case 13:
112
117
  isDefault = _h.sent();
113
118
  return [4 /*yield*/, (0, saveConfig_1.saveConfig)(scope, new types_1.Target(targetJson), isDefault, false)];
114
- case 12:
119
+ case 14:
115
120
  filePath = _h.sent();
116
121
  (_c = process.logger) === null || _c === void 0 ? void 0 : _c.info("Target configuration has been saved to ".concat(filePath));
117
122
  return [2 /*return*/, true];
@@ -73,6 +73,7 @@ var utils_1 = require("@sasjs/utils");
73
73
  var dotenv_1 = __importDefault(require("dotenv"));
74
74
  var path_1 = __importDefault(require("path"));
75
75
  var inputModule = __importStar(require("../internal/input"));
76
+ var utilsModule = __importStar(require("../../../utils/utils"));
76
77
  var addTarget_1 = require("../addTarget");
77
78
  var config_1 = require("../../../utils/config");
78
79
  var targetScope_1 = require("../../../types/targetScope");
@@ -192,6 +193,9 @@ describe('addTarget', function () {
192
193
  target: new utils_1.Target(commonFields)
193
194
  });
194
195
  });
196
+ jest
197
+ .spyOn(utilsModule, 'isSasJsServerInServerMode')
198
+ .mockImplementation(function () { return Promise.resolve(true); });
195
199
  return [4 /*yield*/, expect((0, addTarget_1.addTarget)(false)).resolves.toEqual(true)];
196
200
  case 1:
197
201
  _a.sent();
@@ -392,6 +396,9 @@ describe('addTarget', function () {
392
396
  target: new utils_1.Target(__assign(__assign({}, targetJson), commonFields))
393
397
  });
394
398
  });
399
+ jest
400
+ .spyOn(utilsModule, 'isSasJsServerInServerMode')
401
+ .mockImplementation(function () { return Promise.resolve(true); });
395
402
  return [4 /*yield*/, expect((0, addTarget_1.addTarget)(false)).resolves.toEqual(true)];
396
403
  case 2:
397
404
  _a.sent();
@@ -200,12 +200,12 @@ function createFinalSasFiles(target) {
200
200
  }
201
201
  function getBuildInfo(target, streamWeb) {
202
202
  return __awaiter(this, void 0, void 0, function () {
203
- var buildConfig, serverType, appLoc, macroFolders, createWebServiceScript, macroCorePath, dependencyFilePaths, createFileScript, dependencyFilePathsForCreateFile, gsubScript, dependencyFilePathsForGsubScript, dependenciesContent, buildVars;
203
+ var buildConfig, serverType, appLoc, serverName, macroFolders, createWebServiceScript, macroCorePath, dependencyFilePaths, createFileScript, dependencyFilePathsForCreateFile, gsubScript, dependencyFilePathsForGsubScript, dependenciesContent, buildVars;
204
204
  return __generator(this, function (_a) {
205
205
  switch (_a.label) {
206
206
  case 0:
207
207
  buildConfig = '';
208
- serverType = target.serverType, appLoc = target.appLoc;
208
+ serverType = target.serverType, appLoc = target.appLoc, serverName = target.serverName;
209
209
  return [4 /*yield*/, (0, config_1.getMacroFolders)(target)];
210
210
  case 1:
211
211
  macroFolders = _a.sent();
@@ -244,7 +244,7 @@ function getBuildInfo(target, streamWeb) {
244
244
  return [4 /*yield*/, getBuildVars(target)];
245
245
  case 10:
246
246
  buildVars = _a.sent();
247
- return [2 /*return*/, "\n/**\n * The appLoc represents the metadata or SAS Drive location of the app you\n * are about to deploy\n *\n * To set an alternative appLoc, simply populate the appLoc variable prior\n * to running this program, eg:\n *\n * %let apploc=/my/apploc;\n * %inc thisfile;\n *\n */\n\n%global appLoc;\n%let compiled_apploc=".concat(appLoc, ";\n\n%let appLoc=%sysfunc(coalescec(&appLoc,&compiled_apploc));\n\n%let sasjs_clickmeservice=clickme;\n%let syscc=0;\noptions ps=max nonotes nosgen nomprint nomlogic nosource2 nosource noquotelenmax;\n/* user supplied build vars */\n").concat(buildVars, "\n/* user supplied build vars end */\n/* system macro dependencies for build process */\n").concat(dependenciesContent, "\n/* system macro dependencies for build process end*/\n/* system macros for build process */\n").concat(buildConfig, "\n/* system macros for build process end */\n")];
247
+ return [2 /*return*/, "\n/**\n * The appLoc represents the metadata or SAS Drive location of the app you\n * are about to deploy\n *\n * To set an alternative appLoc, simply populate the appLoc variable prior\n * to running this program, eg:\n *\n * %let apploc=/my/apploc;\n * %inc thisfile;\n *\n */\n\n%global appLoc serverName;\n%let compiled_apploc=".concat(appLoc, ";\n\n").concat(serverType === utils_1.ServerType.Sas9 ? "%let serverName=".concat(serverName, ";") : '', "\n\n%let appLoc=%sysfunc(coalescec(&appLoc,&compiled_apploc));\n\n%let sasjs_clickmeservice=clickme;\n%let syscc=0;\noptions ps=max nonotes nosgen nomprint nomlogic nosource2 nosource noquotelenmax;\n/* user supplied build vars */\n").concat(buildVars, "\n/* user supplied build vars end */\n/* system macro dependencies for build process */\n").concat(dependenciesContent, "\n/* system macro dependencies for build process end*/\n/* system macros for build process */\n").concat(buildConfig, "\n/* system macros for build process end */\n")];
248
248
  }
249
249
  });
250
250
  });
@@ -314,7 +314,7 @@ function getWebServiceScriptInvocation(serverType, isSASFile, encoded) {
314
314
  ? "%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode ,replace=yes)"
315
315
  : "%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode".concat(encodedParam, ")");
316
316
  case utils_1.ServerType.Sas9:
317
- return "%mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode ,replace=yes)";
317
+ return "%mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes)";
318
318
  case utils_1.ServerType.Sasjs:
319
319
  return isSASFile
320
320
  ? "%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode ,replace=yes)"
@@ -131,7 +131,7 @@ describe('compileTestFile', function () {
131
131
  testVar = replaceLineBreaks("* Test Variables start;\n\n%let ".concat(Object.keys(target.testConfig.macroVars)[0], "=").concat(Object.values(target.testConfig.macroVars)[0], ";\n\n* Test Variables end;"));
132
132
  testInit = replaceLineBreaks("* TestInit start;\n\n\n%put testing, init;\n* TestInit end;");
133
133
  testTerm = replaceLineBreaks("* TestTerm start;\n\n\n%put testing, termed;\n* TestTerm end;");
134
- mvWebout = "%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=Y,stream=Y,missing=NULL<br> ,showmeta=NO<br>);";
134
+ mvWebout = "%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=Y,stream=Y,missing=NULL<br> ,showmeta=N";
135
135
  expect(testFileContent.indexOf(testVar)).toBeGreaterThan(-1);
136
136
  expect(testFileContent.indexOf(testInit)).toBeGreaterThan(-1);
137
137
  expect(testFileContent.indexOf(testTerm)).toBeGreaterThan(-1);
@@ -315,6 +315,7 @@ describe('compileTestFile', function () {
315
315
  });
316
316
  }); });
317
317
  it('should not log 0/0 coverage', function () { return __awaiter(void 0, void 0, void 0, function () {
318
+ var totalCalls;
318
319
  return __generator(this, function (_a) {
319
320
  switch (_a.label) {
320
321
  case 0:
@@ -322,10 +323,11 @@ describe('compileTestFile', function () {
322
323
  return [4 /*yield*/, (0, compile_1.compile)(target)];
323
324
  case 1:
324
325
  _a.sent();
325
- expect(process.logger.info).toHaveBeenCalledTimes(15);
326
+ totalCalls = 16;
327
+ expect(process.logger.info).toHaveBeenCalledTimes(totalCalls);
326
328
  expect(process.logger.info).toHaveBeenNthCalledWith(13, "Test coverage:");
327
329
  expect(process.logger.info).toHaveBeenNthCalledWith(14, "Services coverage: 0/4 (".concat(chalk_1.default.greenBright('0%'), ")"));
328
- expect(process.logger.info).toHaveBeenLastCalledWith("Overall coverage: 0/4 (".concat(chalk_1.default.greenBright('0%'), ")"));
330
+ expect(process.logger.info).toHaveBeenNthCalledWith(totalCalls - 1, "Overall coverage: 0/4 (".concat(chalk_1.default.greenBright('0%'), ")"));
329
331
  return [2 /*return*/];
330
332
  }
331
333
  });
@@ -39,7 +39,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
39
39
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
40
  };
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
+ var path_1 = __importDefault(require("path"));
42
43
  var node_1 = __importDefault(require("@sasjs/adapter/node"));
44
+ var js_base64_1 = require("js-base64");
43
45
  var utils_1 = require("@sasjs/utils");
44
46
  var test_1 = require("../../../utils/test");
45
47
  var types_1 = require("../../../types");
@@ -78,7 +80,7 @@ describe('sasjs cbd with server type SASJS', function () {
78
80
  });
79
81
  }); });
80
82
  it("should deploy compile and build to sasjs/server", function () { return __awaiter(void 0, void 0, void 0, function () {
81
- var sasjs, customTarget, macroCorePath, mf_getuser, mp_jsonout, ms_webout, webout, streamConfig;
83
+ var sasjs, customTarget, macroCorePath, mf_getuser, mp_jsonout, ms_webout, webout, mocksPath, appinitJSPath, getdataJSPath, appinitJSContents, getdataJSContents;
82
84
  return __generator(this, function (_a) {
83
85
  switch (_a.label) {
84
86
  case 0:
@@ -90,6 +92,13 @@ describe('sasjs cbd with server type SASJS', function () {
90
92
  message: 'message'
91
93
  });
92
94
  });
95
+ return [4 /*yield*/, (0, test_1.updateConfig)({
96
+ serviceConfig: {
97
+ serviceFolders: ['sasjs/services/common']
98
+ }
99
+ })];
100
+ case 1:
101
+ _a.sent();
93
102
  return [4 /*yield*/, (0, utils_2.updateLocalTarget)(target.name, {
94
103
  jobConfig: undefined,
95
104
  serviceConfig: undefined,
@@ -98,26 +107,26 @@ describe('sasjs cbd with server type SASJS', function () {
98
107
  deployScripts: ["sasjsbuild/".concat(target.name, ".sas")]
99
108
  }
100
109
  })];
101
- case 1:
110
+ case 2:
102
111
  _a.sent();
103
112
  return [4 /*yield*/, (0, config_1.findTargetInConfiguration)(target.name, types_1.TargetScope.Local)];
104
- case 2:
113
+ case 3:
105
114
  customTarget = (_a.sent()).target;
106
115
  return [4 /*yield*/, expect((0, build_1.build)(customTarget)).toResolve()];
107
- case 3:
116
+ case 4:
108
117
  _a.sent();
109
118
  return [4 /*yield*/, (0, deploy_1.deploy)(customTarget, true, sasjs)];
110
- case 4:
119
+ case 5:
111
120
  _a.sent();
112
121
  macroCorePath = process.sasjsConstants.macroCorePath;
113
122
  return [4 /*yield*/, (0, utils_1.readFile)("".concat(macroCorePath, "/base/mf_getuser.sas"))];
114
- case 5:
123
+ case 6:
115
124
  mf_getuser = _a.sent();
116
125
  return [4 /*yield*/, (0, utils_1.readFile)("".concat(macroCorePath, "/base/mp_jsonout.sas"))];
117
- case 6:
126
+ case 7:
118
127
  mp_jsonout = _a.sent();
119
128
  return [4 /*yield*/, (0, utils_1.readFile)("".concat(macroCorePath, "/server/ms_webout.sas"))];
120
- case 7:
129
+ case 8:
121
130
  ms_webout = _a.sent();
122
131
  webout = ' %macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO);\n' +
123
132
  ' %ms_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt\n' +
@@ -125,13 +134,15 @@ describe('sasjs cbd with server type SASJS', function () {
125
134
  ' ,showmeta=&showmeta\n' +
126
135
  ' )' +
127
136
  ' %mend;\n';
128
- streamConfig = {
129
- assetPaths: [],
130
- streamServiceName: 'clickme',
131
- streamWeb: false,
132
- streamWebFolder: '',
133
- webSourcePath: ''
134
- };
137
+ mocksPath = path_1.default.join(__dirname, appName, 'sasjs', 'mocks');
138
+ appinitJSPath = path_1.default.join(mocksPath, 'services', 'common', 'appinit.js');
139
+ getdataJSPath = path_1.default.join(mocksPath, 'services', 'common', 'getdata.js');
140
+ return [4 /*yield*/, (0, utils_1.readFile)(appinitJSPath)];
141
+ case 9:
142
+ appinitJSContents = _a.sent();
143
+ return [4 /*yield*/, (0, utils_1.readFile)(getdataJSPath)];
144
+ case 10:
145
+ getdataJSContents = _a.sent();
135
146
  expect(sasjs.deployToSASjs).toHaveBeenCalledWith({
136
147
  appLoc: target.appLoc,
137
148
  fileTree: {
@@ -144,17 +155,27 @@ describe('sasjs cbd with server type SASJS', function () {
144
155
  name: 'common',
145
156
  type: 'folder',
146
157
  members: [
158
+ {
159
+ name: 'appinit.js',
160
+ type: 'file',
161
+ code: (0, js_base64_1.encode)(appinitJSContents)
162
+ },
147
163
  {
148
164
  name: 'appinit',
149
165
  type: 'service',
150
166
  code: (0, utils_3.removeComments)("".concat(mf_getuser).concat(mp_jsonout).concat(ms_webout).concat(webout) +
151
- '/* provide additional debug info */\n%global _program;\n%put &=syscc;\n%put user=%mf_getuser();\n%put pgm=&_program;\n%put timestamp=%sysfunc(datetime(),datetime19.);\n* Service Variables start;\n* Service Variables end;\n* SAS Macros start;\n* SAS Macros end;\n* SAS Includes start;\n* SAS Includes end;\n* Binary Files start;\n* Binary Files end;\n* Service start;\nproc sql;\ncreate table areas as select distinct area\n from sashelp.springs;\n%webout(OPEN)\n%webout(OBJ,areas)\n%webout(CLOSE)\n* Service end;')
167
+ '/* provide additional debug info */\n%global _program;\n%put &=syscc;\n%put user=%mf_getuser();\n%put pgm=&_program;\n%put timestamp=%sysfunc(datetime(),datetime19.);\n* Service Variables start;\n* Service Variables end;\n* SAS Macros start;\n* SAS Macros end;\n* SAS Includes start;\n* SAS Includes end;\n* Binary Files start;\n* Binary Files end;\n* Service start;\nproc sql;\ncreate table areas as select distinct area\n from mydb.springs;\n%webout(OPEN)\n%webout(OBJ,areas)\n%webout(CLOSE)\n* Service end;')
168
+ },
169
+ {
170
+ name: 'getdata.js',
171
+ type: 'file',
172
+ code: (0, js_base64_1.encode)(getdataJSContents)
152
173
  },
153
174
  {
154
175
  name: 'getdata',
155
176
  type: 'service',
156
177
  code: (0, utils_3.removeComments)("".concat(mf_getuser).concat(mp_jsonout).concat(ms_webout).concat(webout) +
157
- '/* provide additional debug info */\n%global _program;\n%put &=syscc;\n%put user=%mf_getuser();\n%put pgm=&_program;\n%put timestamp=%sysfunc(datetime(),datetime19.);\n* Service Variables start;\n* Service Variables end;\n* SAS Macros start;\n* SAS Macros end;\n* SAS Includes start;\n* SAS Includes end;\n* Binary Files start;\n* Binary Files end;\n* Service start;\n%webout(FETCH)\nproc sql;\ncreate table springs as select * from sashelp.springs\n where area in (select area from work.areas);\n%webout(OPEN)\n%webout(OBJ,springs)\n%webout(CLOSE)\n* Service end;')
178
+ '/* provide additional debug info */\n%global _program;\n%put &=syscc;\n%put user=%mf_getuser();\n%put pgm=&_program;\n%put timestamp=%sysfunc(datetime(),datetime19.);\n* Service Variables start;\n* Service Variables end;\n* SAS Macros start;\n* SAS Macros end;\n* SAS Includes start;\n* SAS Includes end;\n* Binary Files start;\n* Binary Files end;\n* Service start;\n%webout(FETCH)\nproc sql;\ncreate table springs as select * from mydb.springs\n where area in (select area from work.areas);\n%webout(OPEN)\n%webout(OBJ,springs)\n%webout(CLOSE)\n* Service end;')
158
179
  }
159
180
  ]
160
181
  }
@@ -81,7 +81,9 @@ var sasJsModules = __importStar(require("../../../utils/createSASjsInstance"));
81
81
  var testResponses_1 = require("./mockedAdapter/testResponses");
82
82
  var fileModule = __importStar(require("@sasjs/utils/file"));
83
83
  var utilsModule = __importStar(require("@sasjs/utils/utils"));
84
+ var configUtils = __importStar(require("../../../utils/config"));
84
85
  var chalk_1 = __importDefault(require("chalk"));
86
+ var mocks_1 = require("../../context/spec/mocks");
85
87
  describe('sasjs test', function () {
86
88
  var expectedCoverageLcov = "TN:testsetup.sas\nSF:standalone\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:exampleprogram.test.sas\nSF:jobs/jobs/exampleprogram.sas\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:standalone.test.sas\nSF:standalone\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:examplemacro.test.sas\nSF:standalone\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:shouldFail.test.sas\nSF:standalone\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:dostuff.test.0.sas\nSF:services/admin/dostuff.sas\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:dostuff.test.1.sas\nSF:services/admin/dostuff.sas\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:testteardown.sas\nSF:standalone\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record";
87
89
  describe('SASVIYA', function () {
@@ -701,6 +703,9 @@ var copyTestFiles = function (appName) { return __awaiter(void 0, void 0, void 0
701
703
  });
702
704
  }); };
703
705
  var setupMocksForSASVIYA = function () {
706
+ jest
707
+ .spyOn(configUtils, 'getAuthConfig')
708
+ .mockImplementation(function () { return Promise.resolve(mocks_1.mockAuthConfig); });
704
709
  jest
705
710
  .spyOn(sasJsModules, 'createSASjsInstance')
706
711
  .mockImplementation(function (config) {
@@ -1,5 +1,14 @@
1
1
  import { StreamConfig, Target } from '@sasjs/utils';
2
- export declare const createAssetServices: (target: Target, destinationPath: string, streamConfig: StreamConfig) => Promise<{
2
+ export interface AssetPathMap {
3
3
  source: string;
4
4
  target: string;
5
- }[]>;
5
+ }
6
+ /**
7
+ * Creates all the asset services for web streaming.
8
+ * Also prepares an asset-path Map based on server type.
9
+ * @param {Target} target the target to create asset service.
10
+ * @param {string} destinationPath the location of web streaming files.
11
+ * @param {StreamConfig} streamConfig stream configuration to be used.
12
+ * @returns {AssetPathMap[]} list of all the sources specified along server based paths.
13
+ */
14
+ export declare const createAssetServices: (target: Target, destinationPath: string, { webSourcePath, streamWebFolder, assetPaths }: StreamConfig) => Promise<AssetPathMap[]>;