@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.
- package/build/commands/add/addCredential.d.ts +2 -2
- package/build/commands/add/addCredential.js +26 -28
- package/build/commands/add/internal/input.js +15 -2
- package/build/commands/build/build.d.ts +1 -1
- package/build/commands/build/build.js +67 -56
- package/build/commands/build/internal/getLaunchPageCode.js +2 -1
- package/build/commands/compile/compile.js +18 -22
- package/build/commands/compile/internal/checkCompileStatus.js +6 -8
- package/build/commands/compile/internal/compileServiceFile.js +18 -16
- package/build/commands/compile/internal/spec/compileTestFile.spec.js +16 -4
- package/build/commands/compile/spec/loadDependencies.spec.js +3 -3
- package/build/commands/context/contextCommand.js +5 -5
- package/build/commands/deploy/deploy.d.ts +2 -1
- package/build/commands/deploy/deploy.js +92 -46
- package/build/commands/deploy/spec/cbd.spec.d.ts +1 -0
- package/build/commands/deploy/spec/cbd.spec.js +141 -0
- package/build/commands/deploy/spec/cbd.spec.server.js +6 -57
- package/build/commands/deploy/spec/utils.d.ts +6 -0
- package/build/commands/deploy/spec/utils.js +242 -0
- package/build/commands/docs/internal/getDocConfig.js +8 -3
- package/build/commands/docs/spec/generateDot.spec.js +0 -1
- package/build/commands/docs/spec/getDocConfig.spec.d.ts +1 -0
- package/build/commands/docs/spec/getDocConfig.spec.js +27 -0
- package/build/commands/flow/flowCommand.js +1 -1
- package/build/commands/flow/spec/flow.spec.server.js +1 -1
- package/build/commands/folder/folderCommand.js +2 -2
- package/build/commands/folder/spec/folder.spec.server.js +1 -1
- package/build/commands/job/internal/execute/index.d.ts +2 -0
- package/build/commands/job/internal/execute/index.js +14 -0
- package/build/commands/job/internal/execute/sasjs.d.ts +8 -0
- package/build/commands/job/internal/execute/sasjs.js +69 -0
- package/build/commands/job/{execute.d.ts → internal/execute/viya.d.ts} +1 -1
- package/build/commands/job/{execute.js → internal/execute/viya.js} +29 -68
- package/build/commands/job/internal/utils.d.ts +1 -0
- package/build/commands/job/internal/utils.js +81 -0
- package/build/commands/job/jobCommand.d.ts +2 -1
- package/build/commands/job/jobCommand.js +65 -23
- package/build/commands/job/spec/execute.spec.js +41 -21
- package/build/commands/job/spec/getContextName.spec.js +1 -1
- package/build/commands/job/spec/job.spec.server.js +4 -4
- package/build/commands/job/spec/jobCommand.spec.js +10 -10
- package/build/commands/request/request.js +1 -1
- package/build/commands/run/run.js +2 -2
- package/build/commands/servicepack/spec/servicepack.spec.server.js +0 -1
- package/build/commands/shared/dependencies.js +6 -9
- package/build/commands/shared/deployToSasViyaWithServicePack.js +1 -1
- package/build/commands/testing/test.js +1 -1
- package/build/commands/web/internal/createAssetServices.d.ts +5 -0
- package/build/commands/web/internal/createAssetServices.js +219 -0
- package/build/commands/web/internal/getTags.d.ts +4 -0
- package/build/commands/web/internal/getTags.js +21 -0
- package/build/commands/web/internal/getWebServiceContent.d.ts +2 -0
- package/build/commands/web/internal/getWebServiceContent.js +84 -0
- package/build/commands/web/{spec → internal/spec}/testFiles/script1.d.ts +0 -0
- package/build/commands/web/{spec → internal/spec}/testFiles/script1.js +0 -0
- package/build/commands/web/{spec → internal/spec}/testFiles/script2.d.ts +0 -0
- package/build/commands/web/{spec → internal/spec}/testFiles/script2.js +0 -0
- package/build/commands/web/{spec/updateTagSource.spec.d.ts → internal/spec/updateScriptTag.spec.d.ts} +0 -0
- package/build/commands/web/{spec/updateTagSource.spec.js → internal/spec/updateScriptTag.spec.js} +7 -7
- package/build/commands/web/internal/updateAllTags.d.ts +13 -0
- package/build/commands/web/internal/updateAllTags.js +94 -0
- package/build/commands/web/internal/updateLinkHref.d.ts +4 -0
- package/build/commands/web/internal/updateLinkHref.js +18 -0
- package/build/commands/web/internal/updateScriptTag.d.ts +5 -0
- package/build/commands/web/internal/updateScriptTag.js +85 -0
- package/build/commands/web/web.d.ts +0 -4
- package/build/commands/web/web.js +64 -378
- package/build/config.json +3 -1
- package/build/utils/config.d.ts +1 -1
- package/build/utils/config.js +106 -71
- package/build/utils/file.d.ts +1 -1
- package/build/utils/file.js +1 -1
- package/build/utils/spec/removeComments.spec.d.ts +1 -1
- package/build/utils/spec/removeComments.spec.js +1 -1
- package/build/utils/test.js +1 -1
- package/build/utils/utils.d.ts +1 -0
- package/build/utils/utils.js +8 -2
- package/package.json +13 -13
|
@@ -66,7 +66,7 @@ describe('compileTestFile', function () {
|
|
|
66
66
|
}, utils_1.ServerType.SasViya);
|
|
67
67
|
var target = new utils_1.Target(__assign(__assign({}, temp.toJson()), { jobConfig: {
|
|
68
68
|
jobFolders: [path_1.default.join('sasjs', 'jobs')]
|
|
69
|
-
} }));
|
|
69
|
+
}, macroFolders: ['sasjs/macros'] }));
|
|
70
70
|
var sasjsPath;
|
|
71
71
|
var testBody;
|
|
72
72
|
var buildPath;
|
|
@@ -151,6 +151,9 @@ describe('compileTestFile', function () {
|
|
|
151
151
|
_a.sent();
|
|
152
152
|
return [4 /*yield*/, testContent(path_1.default.join('testteardown.sas'))];
|
|
153
153
|
case 5:
|
|
154
|
+
_a.sent();
|
|
155
|
+
return [4 /*yield*/, testContent(path_1.default.join('macros', 'testMacro.test.sas'))];
|
|
156
|
+
case 6:
|
|
154
157
|
_a.sent();
|
|
155
158
|
return [2 /*return*/];
|
|
156
159
|
}
|
|
@@ -236,6 +239,7 @@ describe('compileTestFile', function () {
|
|
|
236
239
|
expectedTestFlow = {
|
|
237
240
|
tests: [
|
|
238
241
|
['tests', 'jobs', 'jobs', 'testJob.test.sas'].join('/'),
|
|
242
|
+
['tests', 'macros', 'testMacro.test.sas'].join('/'),
|
|
239
243
|
['tests', 'services', 'services', 'admin', 'random.test.sas'].join('/'),
|
|
240
244
|
['tests', 'services', 'services', 'admin', 'random.test.0.sas'].join('/')
|
|
241
245
|
].sort(),
|
|
@@ -290,6 +294,11 @@ describe('compileTestFile', function () {
|
|
|
290
294
|
'test',
|
|
291
295
|
'standalone'
|
|
292
296
|
],
|
|
297
|
+
[
|
|
298
|
+
['tests', 'macros', 'testMacro.test.sas'].join('/'),
|
|
299
|
+
'test',
|
|
300
|
+
'standalone'
|
|
301
|
+
],
|
|
293
302
|
[
|
|
294
303
|
['tests', 'services', 'services', 'admin', 'random.test.sas'].join('/'),
|
|
295
304
|
'test',
|
|
@@ -313,9 +322,9 @@ describe('compileTestFile', function () {
|
|
|
313
322
|
return [4 /*yield*/, compile_1.compile(target)];
|
|
314
323
|
case 1:
|
|
315
324
|
_a.sent();
|
|
316
|
-
expect(process.logger.info).toHaveBeenCalledTimes(
|
|
317
|
-
expect(process.logger.info).toHaveBeenNthCalledWith(
|
|
318
|
-
expect(process.logger.info).toHaveBeenNthCalledWith(
|
|
325
|
+
expect(process.logger.info).toHaveBeenCalledTimes(15);
|
|
326
|
+
expect(process.logger.info).toHaveBeenNthCalledWith(13, "Test coverage:");
|
|
327
|
+
expect(process.logger.info).toHaveBeenNthCalledWith(14, "Services coverage: 0/4 (" + chalk_1.default.greenBright('0%') + ")");
|
|
319
328
|
expect(process.logger.info).toHaveBeenLastCalledWith("Overall coverage: 0/4 (" + chalk_1.default.greenBright('0%') + ")");
|
|
320
329
|
return [2 /*return*/];
|
|
321
330
|
}
|
|
@@ -348,6 +357,9 @@ var copyTestFiles = function (appName) { return __awaiter(void 0, void 0, void 0
|
|
|
348
357
|
_a.sent();
|
|
349
358
|
return [4 /*yield*/, utils_1.copy(path_1.default.join(__dirname, 'testFiles', 'jobs'), path_1.default.join(__dirname, appName, 'sasjs', 'jobs'))];
|
|
350
359
|
case 3:
|
|
360
|
+
_a.sent();
|
|
361
|
+
return [4 /*yield*/, utils_1.copy(path_1.default.join(__dirname, 'testFiles', 'macros'), path_1.default.join(__dirname, appName, 'sasjs', 'macros'))];
|
|
362
|
+
case 4:
|
|
351
363
|
_a.sent();
|
|
352
364
|
return [2 /*return*/];
|
|
353
365
|
}
|
|
@@ -74,8 +74,8 @@ var utils_1 = require("@sasjs/utils");
|
|
|
74
74
|
var internalModule = __importStar(require("../internal/config"));
|
|
75
75
|
var test_1 = require("../../../utils/test");
|
|
76
76
|
var loadDependencies_1 = require("../internal/loadDependencies");
|
|
77
|
-
var fakeInit = "/**\n @file serviceinit.sas\n @brief this file is called with every service\n @details This file is included in *every* service, *after* the macros and *before* the service code.\n\n <h4>
|
|
78
|
-
var fakeTerm = "/**\n @file serviceterm.sas\n @brief this file is called at the end of every service\n @details This file is included at the *end* of every service.\n\n <h4>
|
|
77
|
+
var fakeInit = "/**\n @file serviceinit.sas\n @brief this file is called with every service\n @details This file is included in *every* service, *after* the macros and *before* the service code.\n\n <h4> SAS Macros </h4>\n @li mf_abort.sas\n\n**/\n\noptions\n DATASTMTCHK=ALLKEYWORDS /* some sites have this enabled */\n PS=MAX /* reduce log size slightly */\n;\n%put service is starting!!;";
|
|
78
|
+
var fakeTerm = "/**\n @file serviceterm.sas\n @brief this file is called at the end of every service\n @details This file is included at the *end* of every service.\n\n <h4> SAS Macros </h4>\n @li mf_abort.sas\n @li mf_existds.sas\n\n**/\n\n%put service is finishing. Thanks, SASjs!;";
|
|
79
79
|
var fakeInit2 = "/**\n @file serviceinit.sas\n @brief this file is called with every service\n @details This file is included in *every* service, *after* the macros and *before* the service code.\n\n <h4> SAS Macros </h4>\n @li mf_abort.sas\n\n**/\n\noptions\n DATASTMTCHK=ALLKEYWORDS /* some sites have this enabled */\n PS=MAX /* reduce log size slightly */\n;\n%put service is starting!!;";
|
|
80
80
|
var fakeTerm2 = "/**\n @file serviceterm.sas\n @brief this file is called at the end of every service\n @details This file is included at the *end* of every service.\n\n <h4> SAS Macros </h4>\n @li mf_abort.sas\n @li mf_existds.sas\n\n**/\n\n%put service is finishing. Thanks, SASjs!;";
|
|
81
81
|
var fakeJobInit = "/**\n @file\n @brief This code is inserted into the beginning of each Viya Job.\n @details Inserted during the `sasjs compile` step. Add any code here that\n should go at the beginning of every deployed job.\n\n The path to this file should be listed in the `jobInit` property of the\n sasjsconfig file.\n\n <h4> SAS Programs </h4>\n @li test.sas TEST\n\n <h4> SAS Macros </h4>\n @li examplemacro.sas\n\n**/\n\n%example(Job Init is executing!)\n\n%let mylib=WORK;";
|
|
@@ -188,7 +188,7 @@ describe('loadDependencies', function () {
|
|
|
188
188
|
}
|
|
189
189
|
});
|
|
190
190
|
}); });
|
|
191
|
-
test('it should load dependencies for a job <h4>
|
|
191
|
+
test('it should load dependencies for a job <h4> SAS Macros </h4>', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
192
192
|
var dependencies;
|
|
193
193
|
return __generator(this, function (_a) {
|
|
194
194
|
switch (_a.label) {
|
|
@@ -221,7 +221,7 @@ var ContextCommand = /** @class */ (function (_super) {
|
|
|
221
221
|
target = (_a.sent()).target;
|
|
222
222
|
sasjs = new node_1.default({
|
|
223
223
|
serverUrl: target.serverUrl,
|
|
224
|
-
|
|
224
|
+
httpsAgentOptions: target.httpsAgentOptions,
|
|
225
225
|
appLoc: target.appLoc,
|
|
226
226
|
serverType: target.serverType
|
|
227
227
|
});
|
|
@@ -269,7 +269,7 @@ var ContextCommand = /** @class */ (function (_super) {
|
|
|
269
269
|
target = (_a.sent()).target;
|
|
270
270
|
sasjs = new node_1.default({
|
|
271
271
|
serverUrl: target.serverUrl,
|
|
272
|
-
|
|
272
|
+
httpsAgentOptions: target.httpsAgentOptions,
|
|
273
273
|
appLoc: target.appLoc,
|
|
274
274
|
serverType: target.serverType
|
|
275
275
|
});
|
|
@@ -308,7 +308,7 @@ var ContextCommand = /** @class */ (function (_super) {
|
|
|
308
308
|
target = (_a.sent()).target;
|
|
309
309
|
sasjs = new node_1.default({
|
|
310
310
|
serverUrl: target.serverUrl,
|
|
311
|
-
|
|
311
|
+
httpsAgentOptions: target.httpsAgentOptions,
|
|
312
312
|
appLoc: target.appLoc,
|
|
313
313
|
serverType: target.serverType
|
|
314
314
|
});
|
|
@@ -356,7 +356,7 @@ var ContextCommand = /** @class */ (function (_super) {
|
|
|
356
356
|
target = (_a.sent()).target;
|
|
357
357
|
sasjs = new node_1.default({
|
|
358
358
|
serverUrl: target.serverUrl,
|
|
359
|
-
|
|
359
|
+
httpsAgentOptions: target.httpsAgentOptions,
|
|
360
360
|
appLoc: target.appLoc,
|
|
361
361
|
serverType: target.serverType
|
|
362
362
|
});
|
|
@@ -399,7 +399,7 @@ var ContextCommand = /** @class */ (function (_super) {
|
|
|
399
399
|
}
|
|
400
400
|
sasjs = new node_1.default({
|
|
401
401
|
serverUrl: target.serverUrl,
|
|
402
|
-
|
|
402
|
+
httpsAgentOptions: target.httpsAgentOptions,
|
|
403
403
|
appLoc: target.appLoc,
|
|
404
404
|
serverType: target.serverType
|
|
405
405
|
});
|
|
@@ -49,7 +49,7 @@ var utils_2 = require("@sasjs/utils");
|
|
|
49
49
|
var file_1 = require("../../utils/file");
|
|
50
50
|
var getDeployScripts_1 = require("./internal/getDeployScripts");
|
|
51
51
|
var deployToSasViyaWithServicePack_1 = require("../shared/deployToSasViyaWithServicePack");
|
|
52
|
-
function deploy(target, isLocal) {
|
|
52
|
+
function deploy(target, isLocal, sasjs) {
|
|
53
53
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
54
54
|
return __awaiter(this, void 0, void 0, function () {
|
|
55
55
|
var appLoc, buildDestinationFolder_1, finalFilePathJSON, jsonObject, webIndexFileName, deployScripts, buildDestinationFolder, logFilePath;
|
|
@@ -82,50 +82,58 @@ function deploy(target, isLocal) {
|
|
|
82
82
|
}
|
|
83
83
|
buildDestinationFolder = process.sasjsConstants.buildDestinationFolder;
|
|
84
84
|
logFilePath = buildDestinationFolder;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
var _a, _b, _c;
|
|
88
|
-
return __generator(this, function (_d) {
|
|
89
|
-
switch (_d.label) {
|
|
90
|
-
case 0:
|
|
91
|
-
deployScriptPath = utils_1.getAbsolutePath(deployScript, process.projectDir);
|
|
92
|
-
if (!file_1.isSasFile(deployScript)) return [3 /*break*/, 7];
|
|
93
|
-
(_a = process.logger) === null || _a === void 0 ? void 0 : _a.info("Processing SAS file " + path_1.default.basename(deployScript) + " ...");
|
|
94
|
-
return [4 /*yield*/, utils_2.readFile(deployScriptPath)
|
|
95
|
-
// split into lines
|
|
96
|
-
];
|
|
97
|
-
case 1:
|
|
98
|
-
deployScriptFile = _d.sent();
|
|
99
|
-
linesToExecute = deployScriptFile.replace(/\r\n/g, '\n').split('\n');
|
|
100
|
-
return [4 /*yield*/, config_1.getStreamConfig(target)];
|
|
101
|
-
case 2:
|
|
102
|
-
streamConfig = _d.sent();
|
|
103
|
-
if (!(target.serverType === utils_2.ServerType.SasViya)) return [3 /*break*/, 4];
|
|
104
|
-
return [4 /*yield*/, deployToSasViya(deployScript, target, isLocal, linesToExecute, logFilePath, streamConfig)];
|
|
105
|
-
case 3:
|
|
106
|
-
_d.sent();
|
|
107
|
-
return [3 /*break*/, 6];
|
|
108
|
-
case 4: return [4 /*yield*/, deployToSas9(deployScript, target, linesToExecute, logFilePath, streamConfig)];
|
|
109
|
-
case 5:
|
|
110
|
-
_d.sent();
|
|
111
|
-
_d.label = 6;
|
|
112
|
-
case 6: return [3 /*break*/, 9];
|
|
113
|
-
case 7:
|
|
114
|
-
if (!file_1.isShellScript(deployScript)) return [3 /*break*/, 9];
|
|
115
|
-
(_b = process.logger) === null || _b === void 0 ? void 0 : _b.info("Executing shell script " + deployScript + " ...");
|
|
116
|
-
logPath = path_1.default.join(process.projectDir, 'sasjsbuild', path_1.default.basename(deployScript).replace('.sh', '') + ".log");
|
|
117
|
-
return [4 /*yield*/, utils_1.executeShellScript(deployScriptPath, logPath)];
|
|
118
|
-
case 8:
|
|
119
|
-
_d.sent();
|
|
120
|
-
(_c = process.logger) === null || _c === void 0 ? void 0 : _c.success("Shell script execution completed! Log is here: " + logPath);
|
|
121
|
-
_d.label = 9;
|
|
122
|
-
case 9: return [2 /*return*/];
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
}); })];
|
|
85
|
+
if (!(target.serverType === utils_2.ServerType.Sasjs)) return [3 /*break*/, 5];
|
|
86
|
+
return [4 /*yield*/, deployToSasjs(target, sasjs)];
|
|
126
87
|
case 4:
|
|
127
88
|
_k.sent();
|
|
128
|
-
return [
|
|
89
|
+
return [3 /*break*/, 7];
|
|
90
|
+
case 5: return [4 /*yield*/, utils_2.asyncForEach(deployScripts, function (deployScript) { return __awaiter(_this, void 0, void 0, function () {
|
|
91
|
+
var deployScriptPath, deployScriptFile, linesToExecute, streamConfig, logPath;
|
|
92
|
+
var _a, _b, _c;
|
|
93
|
+
return __generator(this, function (_d) {
|
|
94
|
+
switch (_d.label) {
|
|
95
|
+
case 0:
|
|
96
|
+
deployScriptPath = utils_1.getAbsolutePath(deployScript, process.projectDir);
|
|
97
|
+
if (!file_1.isSasFile(deployScript)) return [3 /*break*/, 7];
|
|
98
|
+
(_a = process.logger) === null || _a === void 0 ? void 0 : _a.info("Processing SAS file " + path_1.default.basename(deployScript) + " ...");
|
|
99
|
+
return [4 /*yield*/, utils_2.readFile(deployScriptPath)
|
|
100
|
+
// split into lines
|
|
101
|
+
];
|
|
102
|
+
case 1:
|
|
103
|
+
deployScriptFile = _d.sent();
|
|
104
|
+
linesToExecute = deployScriptFile
|
|
105
|
+
.replace(/\r\n/g, '\n')
|
|
106
|
+
.split('\n');
|
|
107
|
+
return [4 /*yield*/, config_1.getStreamConfig(target)];
|
|
108
|
+
case 2:
|
|
109
|
+
streamConfig = _d.sent();
|
|
110
|
+
if (!(target.serverType === utils_2.ServerType.SasViya)) return [3 /*break*/, 4];
|
|
111
|
+
return [4 /*yield*/, deployToSasViya(deployScript, target, isLocal, linesToExecute, logFilePath, streamConfig)];
|
|
112
|
+
case 3:
|
|
113
|
+
_d.sent();
|
|
114
|
+
return [3 /*break*/, 6];
|
|
115
|
+
case 4: return [4 /*yield*/, deployToSas9(deployScript, target, linesToExecute, logFilePath, streamConfig)];
|
|
116
|
+
case 5:
|
|
117
|
+
_d.sent();
|
|
118
|
+
_d.label = 6;
|
|
119
|
+
case 6: return [3 /*break*/, 9];
|
|
120
|
+
case 7:
|
|
121
|
+
if (!file_1.isShellScript(deployScript)) return [3 /*break*/, 9];
|
|
122
|
+
(_b = process.logger) === null || _b === void 0 ? void 0 : _b.info("Executing shell script " + deployScript + " ...");
|
|
123
|
+
logPath = path_1.default.join(process.projectDir, 'sasjsbuild', path_1.default.basename(deployScript).replace('.sh', '') + ".log");
|
|
124
|
+
return [4 /*yield*/, utils_1.executeShellScript(deployScriptPath, logPath)];
|
|
125
|
+
case 8:
|
|
126
|
+
_d.sent();
|
|
127
|
+
(_c = process.logger) === null || _c === void 0 ? void 0 : _c.success("Shell script execution completed! Log is here: " + logPath);
|
|
128
|
+
_d.label = 9;
|
|
129
|
+
case 9: return [2 /*return*/];
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}); })];
|
|
133
|
+
case 6:
|
|
134
|
+
_k.sent();
|
|
135
|
+
_k.label = 7;
|
|
136
|
+
case 7: return [2 /*return*/];
|
|
129
137
|
}
|
|
130
138
|
});
|
|
131
139
|
});
|
|
@@ -141,7 +149,7 @@ function getSASjsAndAuthConfig(target, isLocal) {
|
|
|
141
149
|
serverUrl: target.serverUrl,
|
|
142
150
|
appLoc: target.appLoc,
|
|
143
151
|
serverType: target.serverType,
|
|
144
|
-
|
|
152
|
+
httpsAgentOptions: target.httpsAgentOptions,
|
|
145
153
|
debug: true,
|
|
146
154
|
useComputeApi: true
|
|
147
155
|
});
|
|
@@ -233,14 +241,15 @@ function deployToSas9(deployScript, target, linesToExecute, logFilePath, streamC
|
|
|
233
241
|
password = utils_2.decodeFromBase64(password);
|
|
234
242
|
sasjs = new node_1.default({
|
|
235
243
|
serverUrl: target.serverUrl,
|
|
236
|
-
|
|
244
|
+
httpsAgentOptions: target.httpsAgentOptions,
|
|
237
245
|
appLoc: target.appLoc,
|
|
238
246
|
serverType: target.serverType
|
|
239
247
|
});
|
|
240
248
|
return [4 /*yield*/, sasjs
|
|
241
249
|
.executeScriptSAS9(linesToExecute, username, password)
|
|
242
250
|
.catch(function (err) {
|
|
243
|
-
|
|
251
|
+
var _a;
|
|
252
|
+
(_a = process.logger) === null || _a === void 0 ? void 0 : _a.log(formatErrorString(err));
|
|
244
253
|
if (err && err.errorCode === 404) {
|
|
245
254
|
utils_1.displaySasjsRunnerError(username);
|
|
246
255
|
}
|
|
@@ -270,6 +279,43 @@ function deployToSas9(deployScript, target, linesToExecute, logFilePath, streamC
|
|
|
270
279
|
});
|
|
271
280
|
});
|
|
272
281
|
}
|
|
282
|
+
function deployToSasjs(target, sasjs) {
|
|
283
|
+
var _a, _b;
|
|
284
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
285
|
+
var buildDestinationFolder, finalFilePathJSON, jsonContent, payload, result;
|
|
286
|
+
return __generator(this, function (_c) {
|
|
287
|
+
switch (_c.label) {
|
|
288
|
+
case 0:
|
|
289
|
+
buildDestinationFolder = process.sasjsConstants.buildDestinationFolder;
|
|
290
|
+
finalFilePathJSON = path_1.default.join(buildDestinationFolder, target.name + ".json");
|
|
291
|
+
return [4 /*yield*/, utils_2.readFile(finalFilePathJSON)];
|
|
292
|
+
case 1:
|
|
293
|
+
jsonContent = _c.sent();
|
|
294
|
+
payload = JSON.parse(jsonContent);
|
|
295
|
+
sasjs = sasjs
|
|
296
|
+
? sasjs
|
|
297
|
+
: new node_1.default({
|
|
298
|
+
serverType: target.serverType,
|
|
299
|
+
serverUrl: target.serverUrl,
|
|
300
|
+
appLoc: target.appLoc
|
|
301
|
+
});
|
|
302
|
+
return [4 /*yield*/, sasjs.deployToSASjs(payload).catch(function (err) {
|
|
303
|
+
var _a;
|
|
304
|
+
(_a = process.logger) === null || _a === void 0 ? void 0 : _a.error(err);
|
|
305
|
+
})];
|
|
306
|
+
case 2:
|
|
307
|
+
result = _c.sent();
|
|
308
|
+
if ((result === null || result === void 0 ? void 0 : result.status) === 'failure') {
|
|
309
|
+
(_a = process.logger) === null || _a === void 0 ? void 0 : _a.error(result.message);
|
|
310
|
+
if (result.example) {
|
|
311
|
+
(_b = process.logger) === null || _b === void 0 ? void 0 : _b.info("Payload example:\n" + JSON.stringify(result.example, null, 2));
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return [2 /*return*/];
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
}
|
|
273
319
|
/**
|
|
274
320
|
* this function formats the error string to dump error log on console
|
|
275
321
|
* @param error
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,141 @@
|
|
|
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 (_) 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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
var node_1 = __importDefault(require("@sasjs/adapter/node"));
|
|
43
|
+
var utils_1 = require("@sasjs/utils");
|
|
44
|
+
var test_1 = require("../../../utils/test");
|
|
45
|
+
var types_1 = require("../../../types");
|
|
46
|
+
var build_1 = require("../../build/build");
|
|
47
|
+
var deploy_1 = require("../deploy");
|
|
48
|
+
var utils_2 = require("./utils");
|
|
49
|
+
var config_1 = require("../../../utils/config");
|
|
50
|
+
describe('sasjs cbd with server type SASJS', function () {
|
|
51
|
+
var target;
|
|
52
|
+
var appName;
|
|
53
|
+
beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
54
|
+
return __generator(this, function (_a) {
|
|
55
|
+
switch (_a.label) {
|
|
56
|
+
case 0:
|
|
57
|
+
appName = "cli-tests-cbd-sasjs-server-" + utils_1.generateTimestamp();
|
|
58
|
+
return [4 /*yield*/, test_1.createTestMinimalApp(__dirname, appName)];
|
|
59
|
+
case 1:
|
|
60
|
+
_a.sent();
|
|
61
|
+
return [4 /*yield*/, utils_2.createLocalTarget(utils_1.ServerType.Sasjs)];
|
|
62
|
+
case 2:
|
|
63
|
+
target = _a.sent();
|
|
64
|
+
return [2 /*return*/];
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}); });
|
|
68
|
+
afterEach(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
69
|
+
return __generator(this, function (_a) {
|
|
70
|
+
switch (_a.label) {
|
|
71
|
+
case 0: return [4 /*yield*/, test_1.removeTestApp(__dirname, appName)];
|
|
72
|
+
case 1:
|
|
73
|
+
_a.sent();
|
|
74
|
+
jest.resetAllMocks();
|
|
75
|
+
return [2 /*return*/];
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}); });
|
|
79
|
+
it("should deploy compile and build to sasjs/server", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
80
|
+
var sasjs, customTarget;
|
|
81
|
+
return __generator(this, function (_a) {
|
|
82
|
+
switch (_a.label) {
|
|
83
|
+
case 0:
|
|
84
|
+
sasjs = new node_1.default();
|
|
85
|
+
jest.mock('@sasjs/adapter');
|
|
86
|
+
jest.spyOn(sasjs, 'deployToSASjs').mockImplementation(function () {
|
|
87
|
+
return Promise.resolve({
|
|
88
|
+
status: 'success',
|
|
89
|
+
message: 'message'
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
return [4 /*yield*/, utils_2.updateLocalTarget(target.name, {
|
|
93
|
+
jobConfig: undefined,
|
|
94
|
+
serviceConfig: undefined,
|
|
95
|
+
deployConfig: {
|
|
96
|
+
deployServicePack: false,
|
|
97
|
+
deployScripts: ["sasjsbuild/" + target.name + ".sas"]
|
|
98
|
+
}
|
|
99
|
+
})];
|
|
100
|
+
case 1:
|
|
101
|
+
_a.sent();
|
|
102
|
+
return [4 /*yield*/, config_1.findTargetInConfiguration(target.name, types_1.TargetScope.Local)];
|
|
103
|
+
case 2:
|
|
104
|
+
customTarget = (_a.sent()).target;
|
|
105
|
+
return [4 /*yield*/, expect(build_1.build(customTarget)).toResolve()];
|
|
106
|
+
case 3:
|
|
107
|
+
_a.sent();
|
|
108
|
+
return [4 /*yield*/, deploy_1.deploy(customTarget, true, sasjs)];
|
|
109
|
+
case 4:
|
|
110
|
+
_a.sent();
|
|
111
|
+
expect(sasjs.deployToSASjs).toHaveBeenCalledWith({
|
|
112
|
+
members: [
|
|
113
|
+
{
|
|
114
|
+
name: 'services',
|
|
115
|
+
type: 'folder',
|
|
116
|
+
members: [
|
|
117
|
+
{
|
|
118
|
+
name: 'common',
|
|
119
|
+
type: 'folder',
|
|
120
|
+
members: [
|
|
121
|
+
{
|
|
122
|
+
name: 'appinit',
|
|
123
|
+
type: 'service',
|
|
124
|
+
code: '/* 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* Dependencies start;\n* Dependencies end;\n* Programs start;\n*Programs 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;'
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'getdata',
|
|
128
|
+
type: 'service',
|
|
129
|
+
code: '/* 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* Dependencies start;\n* Dependencies end;\n* Programs start;\n*Programs 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;'
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
]
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
});
|
|
137
|
+
return [2 /*return*/];
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}); });
|
|
141
|
+
});
|
|
@@ -70,7 +70,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
70
70
|
};
|
|
71
71
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
72
72
|
var utils_1 = require("@sasjs/utils");
|
|
73
|
-
var dotenv_1 = __importDefault(require("dotenv"));
|
|
74
73
|
var path_1 = __importDefault(require("path"));
|
|
75
74
|
var utils_2 = require("@sasjs/utils");
|
|
76
75
|
var configUtils = __importStar(require("../../../utils/config"));
|
|
@@ -78,18 +77,18 @@ var getDeployScriptsModule = __importStar(require("../internal/getDeployScripts"
|
|
|
78
77
|
var test_1 = require("../../../utils/test");
|
|
79
78
|
var build_1 = require("../../build/build");
|
|
80
79
|
var deploy_1 = require("../deploy");
|
|
81
|
-
var utils_3 = require("
|
|
80
|
+
var utils_3 = require("./utils");
|
|
82
81
|
describe('sasjs cbd with global config', function () {
|
|
83
82
|
var target;
|
|
84
83
|
beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
85
84
|
return __generator(this, function (_a) {
|
|
86
85
|
switch (_a.label) {
|
|
87
86
|
case 0:
|
|
88
|
-
target = generateTarget(false);
|
|
87
|
+
target = utils_3.generateTarget(false);
|
|
89
88
|
return [4 /*yield*/, test_1.createTestMinimalApp(__dirname, target.name)];
|
|
90
89
|
case 1:
|
|
91
90
|
_a.sent();
|
|
92
|
-
return [4 /*yield*/, copyJobsAndServices(target.name)];
|
|
91
|
+
return [4 /*yield*/, utils_3.copyJobsAndServices(target.name)];
|
|
93
92
|
case 2:
|
|
94
93
|
_a.sent();
|
|
95
94
|
return [2 /*return*/];
|
|
@@ -168,8 +167,8 @@ describe('sasjs cbd with local config', function () {
|
|
|
168
167
|
return [4 /*yield*/, test_1.createTestApp(__dirname, appName)];
|
|
169
168
|
case 1:
|
|
170
169
|
_a.sent();
|
|
171
|
-
target = generateTarget(true);
|
|
172
|
-
return [4 /*yield*/, copyJobsAndServices(appName)];
|
|
170
|
+
target = utils_3.generateTarget(true);
|
|
171
|
+
return [4 /*yield*/, utils_3.copyJobsAndServices(appName)];
|
|
173
172
|
case 2:
|
|
174
173
|
_a.sent();
|
|
175
174
|
return [4 /*yield*/, utils_1.copy(path_1.default.join(__dirname, 'testScript', 'copyscript.sh'), path_1.default.join(process.projectDir, 'sasjs', 'build', 'copyscript.sh'))];
|
|
@@ -283,7 +282,7 @@ describe('sasjs cbd having stream app', function () {
|
|
|
283
282
|
return [4 /*yield*/, test_1.createTestMinimalApp(__dirname, appName)];
|
|
284
283
|
case 1:
|
|
285
284
|
_a.sent();
|
|
286
|
-
target = generateTarget(true);
|
|
285
|
+
target = utils_3.generateTarget(true);
|
|
287
286
|
return [2 /*return*/];
|
|
288
287
|
}
|
|
289
288
|
});
|
|
@@ -330,53 +329,3 @@ describe('sasjs cbd having stream app', function () {
|
|
|
330
329
|
});
|
|
331
330
|
}); });
|
|
332
331
|
});
|
|
333
|
-
var generateTarget = function (isLocal) {
|
|
334
|
-
dotenv_1.default.config();
|
|
335
|
-
var timestamp = utils_2.generateTimestamp();
|
|
336
|
-
var targetName = "cli-tests-cbd-" + timestamp;
|
|
337
|
-
var authConfig = isLocal
|
|
338
|
-
? undefined
|
|
339
|
-
: {
|
|
340
|
-
client: process.env.CLIENT,
|
|
341
|
-
secret: process.env.SECRET,
|
|
342
|
-
access_token: process.env.ACCESS_TOKEN,
|
|
343
|
-
refresh_token: process.env.REFRESH_TOKEN
|
|
344
|
-
};
|
|
345
|
-
return new utils_2.Target({
|
|
346
|
-
name: targetName,
|
|
347
|
-
serverType: utils_2.ServerType.SasViya,
|
|
348
|
-
serverUrl: process.env.VIYA_SERVER_URL,
|
|
349
|
-
appLoc: "/Public/app/cli-tests/" + targetName,
|
|
350
|
-
contextName: utils_3.contextName,
|
|
351
|
-
serviceConfig: {
|
|
352
|
-
serviceFolders: ['sasjs/testServices', 'sasjs/testJob', 'sasjs/services'],
|
|
353
|
-
initProgram: 'sasjs/testServices/serviceinit.sas',
|
|
354
|
-
termProgram: 'sasjs/testServices/serviceterm.sas',
|
|
355
|
-
macroVars: {}
|
|
356
|
-
},
|
|
357
|
-
jobConfig: {
|
|
358
|
-
jobFolders: ['sasjs/testJob'],
|
|
359
|
-
initProgram: 'sasjs/testServices/serviceinit.sas',
|
|
360
|
-
termProgram: 'sasjs/testServices/serviceterm.sas',
|
|
361
|
-
macroVars: {}
|
|
362
|
-
},
|
|
363
|
-
authConfig: authConfig,
|
|
364
|
-
deployConfig: {
|
|
365
|
-
deployServicePack: true,
|
|
366
|
-
deployScripts: ['']
|
|
367
|
-
}
|
|
368
|
-
});
|
|
369
|
-
};
|
|
370
|
-
var copyJobsAndServices = function (appName) { return __awaiter(void 0, void 0, void 0, function () {
|
|
371
|
-
return __generator(this, function (_a) {
|
|
372
|
-
switch (_a.label) {
|
|
373
|
-
case 0: return [4 /*yield*/, utils_1.copy(path_1.default.join(__dirname, 'testJob'), path_1.default.join(__dirname, appName, 'sasjs', 'testJob'))];
|
|
374
|
-
case 1:
|
|
375
|
-
_a.sent();
|
|
376
|
-
return [4 /*yield*/, utils_1.copy(path_1.default.join(__dirname, 'testServices'), path_1.default.join(__dirname, appName, 'sasjs', 'testServices'))];
|
|
377
|
-
case 2:
|
|
378
|
-
_a.sent();
|
|
379
|
-
return [2 /*return*/];
|
|
380
|
-
}
|
|
381
|
-
});
|
|
382
|
-
}); };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ServerType, Target } from '@sasjs/utils';
|
|
2
|
+
export declare const createGlobalTarget: (serverType?: ServerType) => Promise<Target>;
|
|
3
|
+
export declare const createLocalTarget: (serverType?: ServerType) => Promise<Target>;
|
|
4
|
+
export declare const updateLocalTarget: (targetName: string, data: any) => Promise<void>;
|
|
5
|
+
export declare const copyJobsAndServices: (appName: string) => Promise<void>;
|
|
6
|
+
export declare const generateTarget: (isLocal: boolean) => Target;
|