@sasjs/cli 2.38.7 → 3.0.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.
Files changed (78) hide show
  1. package/build/commands/add/addCredential.d.ts +2 -2
  2. package/build/commands/add/addCredential.js +26 -28
  3. package/build/commands/add/internal/input.js +15 -2
  4. package/build/commands/build/build.d.ts +1 -1
  5. package/build/commands/build/build.js +67 -56
  6. package/build/commands/build/internal/getLaunchPageCode.js +2 -1
  7. package/build/commands/compile/compile.js +18 -22
  8. package/build/commands/compile/internal/checkCompileStatus.js +6 -8
  9. package/build/commands/compile/internal/compileServiceFile.js +18 -16
  10. package/build/commands/compile/internal/spec/compileTestFile.spec.js +16 -4
  11. package/build/commands/compile/spec/loadDependencies.spec.js +3 -3
  12. package/build/commands/context/contextCommand.js +5 -5
  13. package/build/commands/deploy/deploy.d.ts +2 -1
  14. package/build/commands/deploy/deploy.js +92 -46
  15. package/build/commands/deploy/spec/cbd.spec.d.ts +1 -0
  16. package/build/commands/deploy/spec/cbd.spec.js +141 -0
  17. package/build/commands/deploy/spec/cbd.spec.server.js +6 -57
  18. package/build/commands/deploy/spec/utils.d.ts +6 -0
  19. package/build/commands/deploy/spec/utils.js +242 -0
  20. package/build/commands/docs/internal/getDocConfig.js +8 -3
  21. package/build/commands/docs/spec/generateDot.spec.js +0 -1
  22. package/build/commands/docs/spec/getDocConfig.spec.d.ts +1 -0
  23. package/build/commands/docs/spec/getDocConfig.spec.js +27 -0
  24. package/build/commands/flow/flowCommand.js +1 -1
  25. package/build/commands/flow/spec/flow.spec.server.js +1 -1
  26. package/build/commands/folder/folderCommand.js +2 -2
  27. package/build/commands/folder/spec/folder.spec.server.js +1 -1
  28. package/build/commands/job/internal/execute/index.d.ts +2 -0
  29. package/build/commands/job/internal/execute/index.js +14 -0
  30. package/build/commands/job/internal/execute/sasjs.d.ts +8 -0
  31. package/build/commands/job/internal/execute/sasjs.js +69 -0
  32. package/build/commands/job/{execute.d.ts → internal/execute/viya.d.ts} +1 -1
  33. package/build/commands/job/{execute.js → internal/execute/viya.js} +29 -68
  34. package/build/commands/job/internal/utils.d.ts +1 -0
  35. package/build/commands/job/internal/utils.js +81 -0
  36. package/build/commands/job/jobCommand.d.ts +2 -1
  37. package/build/commands/job/jobCommand.js +65 -23
  38. package/build/commands/job/spec/execute.spec.js +41 -21
  39. package/build/commands/job/spec/getContextName.spec.js +1 -1
  40. package/build/commands/job/spec/job.spec.server.js +4 -4
  41. package/build/commands/job/spec/jobCommand.spec.js +10 -10
  42. package/build/commands/request/request.js +1 -1
  43. package/build/commands/run/run.js +2 -2
  44. package/build/commands/servicepack/spec/servicepack.spec.server.js +0 -1
  45. package/build/commands/shared/dependencies.js +6 -9
  46. package/build/commands/shared/deployToSasViyaWithServicePack.js +1 -1
  47. package/build/commands/testing/test.js +1 -1
  48. package/build/commands/web/internal/createAssetServices.d.ts +5 -0
  49. package/build/commands/web/internal/createAssetServices.js +219 -0
  50. package/build/commands/web/internal/getTags.d.ts +4 -0
  51. package/build/commands/web/internal/getTags.js +21 -0
  52. package/build/commands/web/internal/getWebServiceContent.d.ts +2 -0
  53. package/build/commands/web/internal/getWebServiceContent.js +84 -0
  54. package/build/commands/web/{spec → internal/spec}/testFiles/script1.d.ts +0 -0
  55. package/build/commands/web/{spec → internal/spec}/testFiles/script1.js +0 -0
  56. package/build/commands/web/{spec → internal/spec}/testFiles/script2.d.ts +0 -0
  57. package/build/commands/web/{spec → internal/spec}/testFiles/script2.js +0 -0
  58. package/build/commands/web/{spec/updateTagSource.spec.d.ts → internal/spec/updateScriptTag.spec.d.ts} +0 -0
  59. package/build/commands/web/{spec/updateTagSource.spec.js → internal/spec/updateScriptTag.spec.js} +7 -7
  60. package/build/commands/web/internal/updateAllTags.d.ts +13 -0
  61. package/build/commands/web/internal/updateAllTags.js +94 -0
  62. package/build/commands/web/internal/updateLinkHref.d.ts +4 -0
  63. package/build/commands/web/internal/updateLinkHref.js +18 -0
  64. package/build/commands/web/internal/updateScriptTag.d.ts +5 -0
  65. package/build/commands/web/internal/updateScriptTag.js +85 -0
  66. package/build/commands/web/web.d.ts +0 -4
  67. package/build/commands/web/web.js +64 -378
  68. package/build/config.json +3 -1
  69. package/build/utils/config.d.ts +1 -1
  70. package/build/utils/config.js +106 -71
  71. package/build/utils/file.d.ts +1 -1
  72. package/build/utils/file.js +1 -1
  73. package/build/utils/spec/removeComments.spec.d.ts +1 -1
  74. package/build/utils/spec/removeComments.spec.js +1 -1
  75. package/build/utils/test.js +1 -1
  76. package/build/utils/utils.d.ts +1 -0
  77. package/build/utils/utils.js +8 -2
  78. package/package.json +13 -13
@@ -1,4 +1,4 @@
1
- import { SasAuthResponse, Target } from '@sasjs/utils/types';
1
+ import { SasAuthResponse, Target, HttpsAgentOptions } from '@sasjs/utils/types';
2
2
  import { TargetScope } from '../../types/targetScope';
3
3
  /**
4
4
  * Creates a .env file for the specified target.
@@ -10,6 +10,6 @@ import { TargetScope } from '../../types/targetScope';
10
10
  */
11
11
  export declare const addCredential: (target: Target, insecure: boolean, targetScope: TargetScope) => Promise<Target>;
12
12
  export declare const validateTargetName: (targetName: string) => string;
13
- export declare const getTokens: (target: Target, client: string, secret: string, insecure?: boolean) => Promise<SasAuthResponse>;
13
+ export declare const getTokens: (target: Target, client: string, secret: string, httpsAgentOptions?: HttpsAgentOptions | undefined) => Promise<SasAuthResponse>;
14
14
  export declare const createEnvFileForViya: (targetName: string, client: string, secret: string, accessToken: string, refreshToken: string) => Promise<void>;
15
15
  export declare const createEnvFileForSas9: (targetName: string, userName: string, password: string) => Promise<void>;
@@ -69,12 +69,13 @@ var saveConfig_1 = require("./internal/saveConfig");
69
69
  * @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
70
70
  */
71
71
  var addCredential = function (target, insecure, targetScope) { return __awaiter(void 0, void 0, void 0, function () {
72
- var serverUrl, filePath, _a, client, secret, _b, access_token, refresh_token, filePath, _c, userName, password, filePath;
72
+ var httpsAgentOptions, serverUrl, filePath, _a, client, secret, _b, access_token, refresh_token, filePath, _c, userName, password, filePath;
73
73
  var _d, _e, _f, _g;
74
74
  return __generator(this, function (_h) {
75
75
  switch (_h.label) {
76
76
  case 0:
77
- insecure = insecure || target.allowInsecureRequests;
77
+ httpsAgentOptions = insecure
78
+ ? __assign(__assign({}, target.httpsAgentOptions), { allowInsecureRequests: true, rejectUnauthorized: false }) : target.httpsAgentOptions;
78
79
  if (insecure)
79
80
  (_d = process.logger) === null || _d === void 0 ? void 0 : _d.warn('Executing with insecure connection.');
80
81
  if (!!target.serverUrl) return [3 /*break*/, 3];
@@ -92,7 +93,7 @@ var addCredential = function (target, insecure, targetScope) { return __awaiter(
92
93
  return [4 /*yield*/, input_1.getCredentialsInputForViya(target.name)];
93
94
  case 4:
94
95
  _a = _h.sent(), client = _a.client, secret = _a.secret;
95
- return [4 /*yield*/, exports.getTokens(target, client, secret, insecure)];
96
+ return [4 /*yield*/, exports.getTokens(target, client, secret, httpsAgentOptions)];
96
97
  case 5:
97
98
  _b = _h.sent(), access_token = _b.access_token, refresh_token = _b.refresh_token;
98
99
  if (!(targetScope === targetScope_1.TargetScope.Local)) return [3 /*break*/, 7];
@@ -144,32 +145,29 @@ var validateTargetName = function (targetName) {
144
145
  return targetName;
145
146
  };
146
147
  exports.validateTargetName = validateTargetName;
147
- var getTokens = function (target, client, secret, insecure) {
148
- if (insecure === void 0) { insecure = false; }
149
- return __awaiter(void 0, void 0, void 0, function () {
150
- var adapter, authResponse;
151
- var _a;
152
- return __generator(this, function (_b) {
153
- switch (_b.label) {
154
- case 0:
155
- adapter = new node_1.default({
156
- serverUrl: target.serverUrl,
157
- serverType: target.serverType,
158
- allowInsecureRequests: insecure,
159
- debug: ((_a = process.logger) === null || _a === void 0 ? void 0 : _a.logLevel) === logger_1.LogLevel.Debug
160
- });
161
- return [4 /*yield*/, auth_1.getNewAccessToken(adapter, client, secret, target).catch(function (e) {
162
- var _a;
163
- (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error("An error has occurred while validating your credentials: " + e + "\nPlease check your Client ID and Client Secret and try again.\n");
164
- throw e;
165
- })];
166
- case 1:
167
- authResponse = _b.sent();
168
- return [2 /*return*/, authResponse];
169
- }
170
- });
148
+ var getTokens = function (target, client, secret, httpsAgentOptions) { return __awaiter(void 0, void 0, void 0, function () {
149
+ var adapter, authResponse;
150
+ var _a;
151
+ return __generator(this, function (_b) {
152
+ switch (_b.label) {
153
+ case 0:
154
+ adapter = new node_1.default({
155
+ serverUrl: target.serverUrl,
156
+ serverType: target.serverType,
157
+ httpsAgentOptions: httpsAgentOptions,
158
+ debug: ((_a = process.logger) === null || _a === void 0 ? void 0 : _a.logLevel) === logger_1.LogLevel.Debug
159
+ });
160
+ return [4 /*yield*/, auth_1.getNewAccessToken(adapter, client, secret, target).catch(function (e) {
161
+ var _a;
162
+ (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error("An error has occurred while validating your credentials: " + e + "\nPlease check your Client ID and Client Secret and try again.\n");
163
+ throw e;
164
+ })];
165
+ case 1:
166
+ authResponse = _b.sent();
167
+ return [2 /*return*/, authResponse];
168
+ }
171
169
  });
172
- };
170
+ }); };
173
171
  exports.getTokens = getTokens;
174
172
  var createEnvFileForViya = function (targetName, client, secret, accessToken, refreshToken) { return __awaiter(void 0, void 0, void 0, function () {
175
173
  var envFileContent, envFilePath;
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
14
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
15
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -229,7 +240,7 @@ exports.getAndValidateSas9Fields = getAndValidateSas9Fields;
229
240
  function getAndValidateSasViyaFields(target, scope, serverUrl, insecure, authenticateCallback) {
230
241
  var _a;
231
242
  return __awaiter(this, void 0, void 0, function () {
232
- var contextName, shouldAuthenticate, sasjs, contexts, contextNumberErrorMessage, contextNumber;
243
+ var contextName, shouldAuthenticate, httpsAgentOptions, sasjs, contexts, contextNumberErrorMessage, contextNumber;
233
244
  return __generator(this, function (_b) {
234
245
  switch (_b.label) {
235
246
  case 0:
@@ -241,10 +252,12 @@ function getAndValidateSasViyaFields(target, scope, serverUrl, insecure, authent
241
252
  return [4 /*yield*/, authenticateCallback(target, insecure, scope)];
242
253
  case 2:
243
254
  target = _b.sent();
255
+ httpsAgentOptions = insecure
256
+ ? __assign(__assign({}, target.httpsAgentOptions), { allowInsecureRequests: true, rejectUnauthorized: false }) : target.httpsAgentOptions;
244
257
  sasjs = new node_1.default({
245
258
  serverUrl: serverUrl,
246
259
  serverType: types_1.ServerType.SasViya,
247
- allowInsecureRequests: insecure,
260
+ httpsAgentOptions: httpsAgentOptions,
248
261
  debug: ((_a = process.logger) === null || _a === void 0 ? void 0 : _a.logLevel) === logger_1.LogLevel.Debug
249
262
  });
250
263
  contexts = [];
@@ -1,3 +1,3 @@
1
- import { Target } from '@sasjs/utils/types';
1
+ import { Target } from '@sasjs/utils';
2
2
  export declare function build(target: Target): Promise<void>;
3
3
  export declare function getBuildVars(target: Target): Promise<string>;
@@ -84,8 +84,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
84
84
  Object.defineProperty(exports, "__esModule", { value: true });
85
85
  exports.getBuildVars = exports.build = void 0;
86
86
  var path_1 = __importDefault(require("path"));
87
- var types_1 = require("@sasjs/utils/types");
88
87
  var utils_1 = require("@sasjs/utils");
88
+ var error_1 = require("@sasjs/utils/error");
89
89
  var utils_2 = require("../../utils/utils");
90
90
  var file_1 = require("../../utils/file");
91
91
  var config_1 = require("../../utils/config");
@@ -189,26 +189,26 @@ function createFinalSasFile(target, streamConfig) {
189
189
  }
190
190
  function getBuildInfo(target, streamWeb) {
191
191
  return __awaiter(this, void 0, void 0, function () {
192
- var buildConfig, serverType, appLoc, macroFolders, createWebServiceScript, dependencyFilePaths, createFileScript, dependencyFilePathsForCreateFile, gsubScript, _a, dependencyFilePathsForGsubScript, dependenciesContent, buildVars;
193
- return __generator(this, function (_b) {
194
- switch (_b.label) {
192
+ var buildConfig, serverType, appLoc, macroFolders, createWebServiceScript, dependencyFilePaths, createFileScript, dependencyFilePathsForCreateFile, gsubScript, dependencyFilePathsForGsubScript, dependenciesContent, buildVars;
193
+ return __generator(this, function (_a) {
194
+ switch (_a.label) {
195
195
  case 0:
196
196
  buildConfig = '';
197
197
  serverType = target.serverType, appLoc = target.appLoc;
198
198
  return [4 /*yield*/, config_1.getMacroFolders(target)];
199
199
  case 1:
200
- macroFolders = _b.sent();
200
+ macroFolders = _a.sent();
201
201
  return [4 /*yield*/, getCreateWebServiceScript(serverType)];
202
202
  case 2:
203
- createWebServiceScript = _b.sent();
203
+ createWebServiceScript = _a.sent();
204
204
  buildConfig += createWebServiceScript + "\n";
205
205
  return [4 /*yield*/, dependencies_1.getDependencyPaths(buildConfig, macroFolders)];
206
206
  case 3:
207
- dependencyFilePaths = _b.sent();
208
- if (!(target.serverType === types_1.ServerType.SasViya && streamWeb)) return [3 /*break*/, 9];
207
+ dependencyFilePaths = _a.sent();
208
+ if (!(target.serverType === utils_1.ServerType.SasViya && streamWeb)) return [3 /*break*/, 8];
209
209
  return [4 /*yield*/, getCreateFileScript(serverType)];
210
210
  case 4:
211
- createFileScript = _b.sent();
211
+ createFileScript = _a.sent();
212
212
  buildConfig += createFileScript + "\n";
213
213
  return [4 /*yield*/, dependencies_1.getDependencyPaths(createFileScript, macroFolders)
214
214
  // The gsubScript is used to perform the replacement of the appLoc within
@@ -216,24 +216,22 @@ function getBuildInfo(target, streamWeb) {
216
216
  // SAS Program (build.sas) approach.
217
217
  ];
218
218
  case 5:
219
- dependencyFilePathsForCreateFile = _b.sent();
220
- _a = utils_1.readFile;
221
- return [4 /*yield*/, config_1.getMacroCorePath()];
222
- case 6: return [4 /*yield*/, _a.apply(void 0, [(_b.sent()) + "/base/mp_gsubfile.sas"])];
223
- case 7:
224
- gsubScript = _b.sent();
219
+ dependencyFilePathsForCreateFile = _a.sent();
220
+ return [4 /*yield*/, utils_1.readFile(config_1.getMacroCorePath() + "/base/mp_gsubfile.sas")];
221
+ case 6:
222
+ gsubScript = _a.sent();
225
223
  buildConfig += gsubScript + "\n";
226
224
  return [4 /*yield*/, dependencies_1.getDependencyPaths(gsubScript, macroFolders)];
227
- case 8:
228
- dependencyFilePathsForGsubScript = _b.sent();
225
+ case 7:
226
+ dependencyFilePathsForGsubScript = _a.sent();
229
227
  dependencyFilePaths = __spreadArray([], __read(new Set(__spreadArray(__spreadArray(__spreadArray([], __read(dependencyFilePaths)), __read(dependencyFilePathsForCreateFile)), __read(dependencyFilePathsForGsubScript)))));
230
- _b.label = 9;
231
- case 9: return [4 /*yield*/, getDependencies(dependencyFilePaths)];
232
- case 10:
233
- dependenciesContent = _b.sent();
228
+ _a.label = 8;
229
+ case 8: return [4 /*yield*/, getDependencies(dependencyFilePaths)];
230
+ case 9:
231
+ dependenciesContent = _a.sent();
234
232
  return [4 /*yield*/, getBuildVars(target)];
235
- case 11:
236
- buildVars = _b.sent();
233
+ case 10:
234
+ buildVars = _a.sent();
237
235
  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=" + 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" + buildVars + "\n/* user supplied build vars end */\n/* system macro dependencies for build process */\n" + dependenciesContent + "\n/* system macro dependencies for build process end*/\n/* system macros for build process */\n" + buildConfig + "\n/* system macros for build process end */\n"];
238
236
  }
239
237
  });
@@ -241,48 +239,53 @@ function getBuildInfo(target, streamWeb) {
241
239
  }
242
240
  function getCreateWebServiceScript(serverType) {
243
241
  return __awaiter(this, void 0, void 0, function () {
244
- var _a, _b, _c;
245
- return __generator(this, function (_d) {
246
- switch (_d.label) {
242
+ var _a;
243
+ return __generator(this, function (_b) {
244
+ switch (_b.label) {
247
245
  case 0:
248
246
  _a = serverType;
249
247
  switch (_a) {
250
- case types_1.ServerType.SasViya: return [3 /*break*/, 1];
251
- case types_1.ServerType.Sas9: return [3 /*break*/, 4];
248
+ case utils_1.ServerType.SasViya: return [3 /*break*/, 1];
249
+ case utils_1.ServerType.Sas9: return [3 /*break*/, 3];
250
+ case utils_1.ServerType.Sasjs: return [3 /*break*/, 5];
252
251
  }
253
252
  return [3 /*break*/, 7];
254
- case 1:
255
- _b = utils_1.readFile;
256
- return [4 /*yield*/, config_1.getMacroCorePath()];
257
- case 2: return [4 /*yield*/, _b.apply(void 0, [(_d.sent()) + "/viya/mv_createwebservice.sas"])];
258
- case 3: return [2 /*return*/, _d.sent()];
259
- case 4:
260
- _c = utils_1.readFile;
261
- return [4 /*yield*/, config_1.getMacroCorePath()];
262
- case 5: return [4 /*yield*/, _c.apply(void 0, [(_d.sent()) + "/meta/mm_createwebservice.sas"])];
263
- case 6: return [2 /*return*/, _d.sent()];
264
- case 7: throw new Error("Invalid server type: valid options are " + types_1.ServerType.SasViya + " and " + types_1.ServerType.Sas9);
253
+ case 1: return [4 /*yield*/, utils_1.readFile(config_1.getMacroCorePath() + "/viya/mv_createwebservice.sas")];
254
+ case 2: return [2 /*return*/, _b.sent()];
255
+ case 3: return [4 /*yield*/, utils_1.readFile(config_1.getMacroCorePath() + "/meta/mm_createwebservice.sas")
256
+ // FIXME: use sasjs/mv_createwebservice.sas ones created
257
+ ];
258
+ case 4: return [2 /*return*/, _b.sent()
259
+ // FIXME: use sasjs/mv_createwebservice.sas ones created
260
+ ];
261
+ case 5: return [4 /*yield*/, utils_1.readFile(config_1.getMacroCorePath() + "/viya/mv_createwebservice.sas")];
262
+ case 6: return [2 /*return*/, _b.sent()];
263
+ case 7: throw new error_1.ServerTypeError();
265
264
  }
266
265
  });
267
266
  });
268
267
  }
269
268
  function getCreateFileScript(serverType) {
270
269
  return __awaiter(this, void 0, void 0, function () {
271
- var _a, _b;
272
- return __generator(this, function (_c) {
273
- switch (_c.label) {
270
+ var _a;
271
+ return __generator(this, function (_b) {
272
+ switch (_b.label) {
274
273
  case 0:
275
274
  _a = serverType;
276
275
  switch (_a) {
277
- case types_1.ServerType.SasViya: return [3 /*break*/, 1];
276
+ case utils_1.ServerType.SasViya: return [3 /*break*/, 1];
277
+ case utils_1.ServerType.Sasjs: return [3 /*break*/, 3];
278
278
  }
279
- return [3 /*break*/, 4];
280
- case 1:
281
- _b = utils_1.readFile;
282
- return [4 /*yield*/, config_1.getMacroCorePath()];
283
- case 2: return [4 /*yield*/, _b.apply(void 0, [(_c.sent()) + "/viya/mv_createfile.sas"])];
284
- case 3: return [2 /*return*/, _c.sent()];
285
- case 4: throw new Error("Invalid server type: valid option is " + types_1.ServerType.SasViya);
279
+ return [3 /*break*/, 5];
280
+ case 1: return [4 /*yield*/, utils_1.readFile(config_1.getMacroCorePath() + "/viya/mv_createfile.sas")
281
+ // FIXME: use sasjs/mv_createfile.sas ones created
282
+ ];
283
+ case 2: return [2 /*return*/, _b.sent()
284
+ // FIXME: use sasjs/mv_createfile.sas ones created
285
+ ];
286
+ case 3: return [4 /*yield*/, utils_1.readFile(config_1.getMacroCorePath() + "/viya/mv_createfile.sas")];
287
+ case 4: return [2 /*return*/, _b.sent()];
288
+ case 5: throw new error_1.ServerTypeError([utils_1.ServerType.SasViya, utils_1.ServerType.Sasjs]);
286
289
  }
287
290
  });
288
291
  });
@@ -292,16 +295,20 @@ function getWebServiceScriptInvocation(serverType, filePath, isSASFile, encoded)
292
295
  if (isSASFile === void 0) { isSASFile = true; }
293
296
  if (encoded === void 0) { encoded = false; }
294
297
  var loc = filePath === '' ? 'services' : 'tests';
298
+ var encodedParam = encoded ? ', intype=BASE64' : '';
295
299
  switch (serverType) {
296
- case types_1.ServerType.SasViya:
297
- var encodedParam = encoded ? ', intype=BASE64' : '';
300
+ case utils_1.ServerType.SasViya:
298
301
  return isSASFile
299
302
  ? "%mv_createwebservice(path=&appLoc/" + loc + "/&path, name=&service, code=sascode ,replace=yes)"
300
303
  : "%mv_createfile(path=&appLoc/" + loc + "/&path, name=&filename, inref=filecode" + encodedParam + ")";
301
- case types_1.ServerType.Sas9:
304
+ case utils_1.ServerType.Sas9:
302
305
  return "%mm_createwebservice(path=&appLoc/" + loc + "/&path, name=&service, code=sascode ,replace=yes)";
306
+ case utils_1.ServerType.Sasjs:
307
+ return isSASFile
308
+ ? "%mv_createwebservice(path=&appLoc/" + loc + "/&path, name=&service, code=sascode ,replace=yes)"
309
+ : "%mv_createfile(path=&appLoc/" + loc + "/&path, name=&filename, inref=filecode" + encodedParam + ")";
303
310
  default:
304
- throw new Error("Invalid server type: valid options are " + types_1.ServerType.SasViya + " and " + types_1.ServerType.Sas9);
311
+ throw new error_1.ServerTypeError();
305
312
  }
306
313
  }
307
314
  /**
@@ -474,12 +481,16 @@ function getServiceText(serviceFileName, fileContent, serverType, testPath) {
474
481
  content += "\n put '" + escapedLine.trim() + "';";
475
482
  }
476
483
  });
477
- return "%let service=" + serviceName + ";\nfilename sascode temp lrecl=32767;\ndata _null_;\nfile sascode;\n" + content + "\n\nrun;\n" + getWebServiceScriptInvocation(serverType, compileTestFile_1.isTestFile(serviceFileName) && testPath ? "" + testPath : '') + "\nfilename sascode clear;\n";
484
+ return "%let service=" + serviceName + ";\nfilename sascode temp lrecl=32767;\ndata _null_;\nfile sascode;\n" + content + "\n\nrun;\n" + (serverType !== utils_1.ServerType.Sasjs
485
+ ? getWebServiceScriptInvocation(serverType, compileTestFile_1.isTestFile(serviceFileName) && testPath ? "" + testPath : '')
486
+ : '') + "\nfilename sascode clear;\n";
478
487
  }
479
488
  function getFileText(fileName, fileContent, serverType) {
480
489
  var fileExtension = path_1.default.extname(fileName).substring(1).toUpperCase();
481
490
  var _a = getWebFileContent(fileContent, fileExtension), content = _a.content, maxLineLength = _a.maxLineLength;
482
- return "%let filename=" + fileName + ";\nfilename filecode temp lrecl=" + maxLineLength + ";\ndata _null_;\nfile filecode;\n" + content + "\n\nrun;\n" + getWebServiceScriptInvocation(serverType, undefined, false, true) + "\nfilename filecode clear;\n";
491
+ return "%let filename=" + fileName + ";\nfilename filecode temp lrecl=" + maxLineLength + ";\ndata _null_;\nfile filecode;\n" + content + "\n\nrun;\n" + (serverType !== utils_1.ServerType.Sasjs
492
+ ? getWebServiceScriptInvocation(serverType, undefined, false, true)
493
+ : '') + "\nfilename filecode clear;\n";
483
494
  }
484
495
  function getWebFileContent(filecontent, type) {
485
496
  var parsedContent = '';
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getLaunchPageCode = void 0;
4
+ var error_1 = require("@sasjs/utils/error");
4
5
  var types_1 = require("@sasjs/utils/types");
5
6
  var SAS9Code = function (streamServiceName) { return "\noptions notes;\ndata _null_;\n format url $256.;\n rc=METADATA_GETURI(\"Stored Process Web App\",url);\n url=coalescec(url,\"localhost/SASStoredProcess\");\n urlEscaped = tranwrd(trim(url),\" \",\"%20\");\n putlog \"NOTE: SASjs Streaming App Created! Check it out here:\" ;\n putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";\n putlog \"NOTE- \" urlEscaped +(-1) \"?_program=&appLoc/services/" + streamServiceName + "\" ;\n putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";\nrun;\n"; };
6
7
  var SASViyaCode = function (streamServiceName) { return "\n\n/**\n * The streamService we just deployed (as a _FILE) had the compile-time appLoc\n * In this section we replace with the deploy-time appLoc\n */\n\nfilename _homein filesrvc\n folderPath=\"&apploc/services\"\n filename=\"" + streamServiceName + ".html\"\n recfm=v\n lrecl=1048544;\n\n%let local_file=%sysfunc(pathname(work))/service.html;\nfilename _homeout \"&local_file\";\n\ndata _null_;\n rc=fcopy('_homein','_homeout');\n put rc=;\nrun;\n\n%mp_gsubfile(file=&local_file, patternvar=compiled_apploc, replacevar=apploc)\n\ndata _null_;\n rc=fcopy('_homeout','_homein');\n put rc=;\nrun;\n\n/* Tell the user where the app was deployed so they can open it */\noptions notes;\ndata _null_;\n if symexist('_baseurl') then do;\n url=symget('_baseurl');\n if subpad(url,length(url)-9,9)='SASStudio'\n then url=substr(url,1,length(url)-11);\n else url=\"&systcpiphostname\";\n end;\n else url=\"&systcpiphostname\";\n url=cats(url,\"/SASJobExecution?_FILE=&appLoc/services/\");\n urlEscaped = tranwrd(trim(url),\" \",\"%20\");\n putlog \"NOTE: SASjs Streaming App Created! Check it out here:\" ;\n putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";\n putlog \"NOTE- \" urlEscaped +(-1) '" + streamServiceName + ".html&_debug=2' ;\n putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";\nrun;\n"; };
@@ -11,7 +12,7 @@ var getLaunchPageCode = function (serverType, streamServiceName) {
11
12
  case types_1.ServerType.Sas9:
12
13
  return SAS9Code(streamServiceName);
13
14
  default:
14
- throw new Error("Invalid server type: valid options are " + types_1.ServerType.SasViya + " and " + types_1.ServerType.Sas9);
15
+ throw new error_1.ServerTypeError([types_1.ServerType.SasViya, types_1.ServerType.Sas9]);
15
16
  }
16
17
  };
17
18
  exports.getLaunchPageCode = getLaunchPageCode;
@@ -184,11 +184,10 @@ function copyFilesToBuildFolder(target) {
184
184
  var destinationPath;
185
185
  return __generator(this, function (_a) {
186
186
  switch (_a.label) {
187
- case 0: return [4 /*yield*/, getDestinationPath_1.getDestinationServicePath(serviceFolder)];
188
- case 1:
189
- destinationPath = _a.sent();
187
+ case 0:
188
+ destinationPath = getDestinationPath_1.getDestinationServicePath(serviceFolder);
190
189
  return [4 /*yield*/, utils_1.copy(serviceFolder, destinationPath)];
191
- case 2:
190
+ case 1:
192
191
  _a.sent();
193
192
  return [2 /*return*/];
194
193
  }
@@ -201,11 +200,10 @@ function copyFilesToBuildFolder(target) {
201
200
  var destinationPath;
202
201
  return __generator(this, function (_a) {
203
202
  switch (_a.label) {
204
- case 0: return [4 /*yield*/, getDestinationPath_1.getDestinationJobPath(jobFolder)];
205
- case 1:
206
- destinationPath = _a.sent();
203
+ case 0:
204
+ destinationPath = getDestinationPath_1.getDestinationJobPath(jobFolder);
207
205
  return [4 /*yield*/, utils_1.copy(jobFolder, destinationPath)];
208
- case 2:
206
+ case 1:
209
207
  _a.sent();
210
208
  return [2 /*return*/];
211
209
  }
@@ -326,14 +324,13 @@ var compileServiceFolder = function (target, serviceFolder, macroFolders, progra
326
324
  var destinationPath, subFolders, filesNamesInPath;
327
325
  return __generator(this, function (_a) {
328
326
  switch (_a.label) {
329
- case 0: return [4 /*yield*/, getDestinationPath_1.getDestinationServicePath(serviceFolder)];
330
- case 1:
331
- destinationPath = _a.sent();
327
+ case 0:
328
+ destinationPath = getDestinationPath_1.getDestinationServicePath(serviceFolder);
332
329
  return [4 /*yield*/, utils_1.listSubFoldersInFolder(destinationPath)];
333
- case 2:
330
+ case 1:
334
331
  subFolders = _a.sent();
335
332
  return [4 /*yield*/, utils_1.listFilesInFolder(destinationPath)];
336
- case 3:
333
+ case 2:
337
334
  filesNamesInPath = _a.sent();
338
335
  return [4 /*yield*/, utils_1.asyncForEach(filesNamesInPath, function (fileName) { return __awaiter(void 0, void 0, void 0, function () {
339
336
  var filePath;
@@ -354,7 +351,7 @@ var compileServiceFolder = function (target, serviceFolder, macroFolders, progra
354
351
  }
355
352
  });
356
353
  }); })];
357
- case 4:
354
+ case 3:
358
355
  _a.sent();
359
356
  return [4 /*yield*/, utils_1.asyncForEach(subFolders, function (subFolder) { return __awaiter(void 0, void 0, void 0, function () {
360
357
  var fileNames;
@@ -388,7 +385,7 @@ var compileServiceFolder = function (target, serviceFolder, macroFolders, progra
388
385
  }
389
386
  });
390
387
  }); })];
391
- case 5:
388
+ case 4:
392
389
  _a.sent();
393
390
  return [2 /*return*/];
394
391
  }
@@ -398,14 +395,13 @@ var compileJobFolder = function (target, jobFolder, macroFolders, programFolders
398
395
  var destinationPath, subFolders, filesNamesInPath;
399
396
  return __generator(this, function (_a) {
400
397
  switch (_a.label) {
401
- case 0: return [4 /*yield*/, getDestinationPath_1.getDestinationJobPath(jobFolder)];
402
- case 1:
403
- destinationPath = _a.sent();
398
+ case 0:
399
+ destinationPath = getDestinationPath_1.getDestinationJobPath(jobFolder);
404
400
  return [4 /*yield*/, utils_1.listSubFoldersInFolder(destinationPath)];
405
- case 2:
401
+ case 1:
406
402
  subFolders = _a.sent();
407
403
  return [4 /*yield*/, utils_1.listFilesInFolder(destinationPath)];
408
- case 3:
404
+ case 2:
409
405
  filesNamesInPath = _a.sent();
410
406
  return [4 /*yield*/, utils_1.asyncForEach(filesNamesInPath, function (fileName) { return __awaiter(void 0, void 0, void 0, function () {
411
407
  var filePath;
@@ -426,7 +422,7 @@ var compileJobFolder = function (target, jobFolder, macroFolders, programFolders
426
422
  }
427
423
  });
428
424
  }); })];
429
- case 4:
425
+ case 3:
430
426
  _a.sent();
431
427
  return [4 /*yield*/, utils_1.asyncForEach(subFolders, function (subFolder) { return __awaiter(void 0, void 0, void 0, function () {
432
428
  var fileNames;
@@ -460,7 +456,7 @@ var compileJobFolder = function (target, jobFolder, macroFolders, programFolders
460
456
  }
461
457
  });
462
458
  }); })];
463
- case 5:
459
+ case 4:
464
460
  _a.sent();
465
461
  return [2 /*return*/];
466
462
  }
@@ -96,11 +96,10 @@ var checkServiceFolders = function (target, exceptions) { return __awaiter(void
96
96
  var destinationPath, _a, equal, reason;
97
97
  return __generator(this, function (_b) {
98
98
  switch (_b.label) {
99
- case 0: return [4 /*yield*/, getDestinationPath_1.getDestinationServicePath(serviceFolder)];
100
- case 1:
101
- destinationPath = _b.sent();
99
+ case 0:
100
+ destinationPath = getDestinationPath_1.getDestinationServicePath(serviceFolder);
102
101
  return [4 /*yield*/, compareFolders_1.compareFolders(serviceFolder, destinationPath, exceptions)];
103
- case 2:
102
+ case 1:
104
103
  _a = _b.sent(), equal = _a.equal, reason = _a.reason;
105
104
  areServiceFoldersMatching = areServiceFoldersMatching && equal;
106
105
  if (!equal) {
@@ -136,11 +135,10 @@ var checkJobFolders = function (target, exceptions) { return __awaiter(void 0, v
136
135
  var destinationPath, _a, equal, reason;
137
136
  return __generator(this, function (_b) {
138
137
  switch (_b.label) {
139
- case 0: return [4 /*yield*/, getDestinationPath_1.getDestinationJobPath(jobFolder)];
140
- case 1:
141
- destinationPath = _b.sent();
138
+ case 0:
139
+ destinationPath = getDestinationPath_1.getDestinationJobPath(jobFolder);
142
140
  return [4 /*yield*/, compareFolders_1.compareFolders(jobFolder, destinationPath, exceptions)];
143
- case 2:
141
+ case 1:
144
142
  _a = _b.sent(), equal = _a.equal, reason = _a.reason;
145
143
  areJobFoldersMatching = areJobFoldersMatching && equal;
146
144
  if (!equal) {
@@ -37,18 +37,20 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.getPreCodeForServicePack = exports.compileServiceFile = void 0;
40
- var types_1 = require("@sasjs/utils/types");
41
40
  var config_1 = require("../../../utils/config");
42
41
  var utils_1 = require("@sasjs/utils");
42
+ var types_1 = require("@sasjs/utils/types");
43
+ var error_1 = require("@sasjs/utils/error");
43
44
  var loadDependencies_1 = require("./loadDependencies");
44
45
  var getServerType_1 = require("./getServerType");
46
+ var compileTestFile_1 = require("./compileTestFile");
45
47
  function compileServiceFile(target, filePath, macroFolders, programFolders, programVar) {
46
48
  if (programVar === void 0) { programVar = ''; }
47
49
  return __awaiter(this, void 0, void 0, function () {
48
50
  var dependencies, serverType, preCode;
49
51
  return __generator(this, function (_a) {
50
52
  switch (_a.label) {
51
- case 0: return [4 /*yield*/, loadDependencies_1.loadDependencies(target, filePath, macroFolders, programFolders)];
53
+ case 0: return [4 /*yield*/, loadDependencies_1.loadDependencies(target, filePath, macroFolders, programFolders, compileTestFile_1.isTestFile(filePath) ? 'test' : undefined)];
52
54
  case 1:
53
55
  dependencies = _a.sent();
54
56
  return [4 /*yield*/, getServerType_1.getServerType(target)];
@@ -74,27 +76,26 @@ function getPreCodeForServicePack(serverType) {
74
76
  switch (_h.label) {
75
77
  case 0:
76
78
  content = '';
77
- return [4 /*yield*/, config_1.getMacroCorePath()];
78
- case 1:
79
- macroCorePath = _h.sent();
79
+ macroCorePath = config_1.getMacroCorePath();
80
80
  _a = serverType;
81
81
  switch (_a) {
82
- case types_1.ServerType.SasViya: return [3 /*break*/, 2];
83
- case types_1.ServerType.Sas9: return [3 /*break*/, 6];
82
+ case types_1.ServerType.SasViya: return [3 /*break*/, 1];
83
+ case types_1.ServerType.Sas9: return [3 /*break*/, 5];
84
+ case types_1.ServerType.Sasjs: return [3 /*break*/, 9];
84
85
  }
85
86
  return [3 /*break*/, 10];
86
- case 2:
87
+ case 1:
87
88
  _b = content;
88
89
  return [4 /*yield*/, utils_1.readFile(macroCorePath + "/base/mf_getuser.sas")];
89
- case 3:
90
+ case 2:
90
91
  content = _b + _h.sent();
91
92
  _c = content;
92
93
  return [4 /*yield*/, utils_1.readFile(macroCorePath + "/base/mp_jsonout.sas")];
93
- case 4:
94
+ case 3:
94
95
  content = _c + _h.sent();
95
96
  _d = content;
96
97
  return [4 /*yield*/, utils_1.readFile(macroCorePath + "/viya/mv_webout.sas")];
97
- case 5:
98
+ case 4:
98
99
  content = _d + _h.sent();
99
100
  content +=
100
101
  '/* if calling viya service with _job param, _program will conflict */\n' +
@@ -105,25 +106,26 @@ function getPreCodeForServicePack(serverType) {
105
106
  '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt)\n' +
106
107
  '%mend;\n';
107
108
  return [3 /*break*/, 11];
108
- case 6:
109
+ case 5:
109
110
  _e = content;
110
111
  return [4 /*yield*/, utils_1.readFile(macroCorePath + "/base/mf_getuser.sas")];
111
- case 7:
112
+ case 6:
112
113
  content = _e + _h.sent();
113
114
  _f = content;
114
115
  return [4 /*yield*/, utils_1.readFile(macroCorePath + "/base/mp_jsonout.sas")];
115
- case 8:
116
+ case 7:
116
117
  content = _f + _h.sent();
117
118
  _g = content;
118
119
  return [4 /*yield*/, utils_1.readFile(macroCorePath + "/meta/mm_webout.sas")];
119
- case 9:
120
+ case 8:
120
121
  content = _g + _h.sent();
121
122
  content +=
122
123
  ' %macro webout(action,ds,dslabel=,fmt=);\n' +
123
124
  ' %mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt)\n' +
124
125
  ' %mend;\n';
125
126
  return [3 /*break*/, 11];
126
- case 10: throw new Error("Invalid server type: valid options are 'SASVIYA' and 'SAS9'.");
127
+ case 9: return [3 /*break*/, 11];
128
+ case 10: throw new error_1.ServerTypeError();
127
129
  case 11:
128
130
  content +=
129
131
  '/* provide additional debug info */\n' +