@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.
- package/README.md +3 -0
- package/build/commands/add/addCredential.js +25 -18
- package/build/commands/add/addTarget.js +14 -9
- package/build/commands/add/spec/addTarget.spec.js +7 -0
- package/build/commands/build/build.js +4 -4
- package/build/commands/compile/internal/spec/compileTestFile.spec.js +5 -3
- package/build/commands/deploy/spec/cbd.spec.js +38 -17
- package/build/commands/testing/spec/testing.spec.js +5 -0
- package/build/commands/web/internal/createAssetServices.d.ts +11 -2
- package/build/commands/web/internal/createAssetServices.js +83 -92
- package/build/commands/web/internal/getAssetPath.d.ts +2 -0
- package/build/commands/web/internal/getAssetPath.js +17 -0
- package/build/commands/web/internal/modifyLinksInContent.d.ts +2 -0
- package/build/commands/web/internal/modifyLinksInContent.js +11 -0
- package/build/commands/web/internal/sas9/createClickMeService.d.ts +6 -0
- package/build/commands/web/internal/sas9/createClickMeService.js +91 -0
- package/build/commands/web/internal/sas9/generateAssetService.d.ts +7 -0
- package/build/commands/web/internal/sas9/generateAssetService.js +75 -0
- package/build/commands/web/internal/sas9/getWebServiceContent.d.ts +7 -0
- package/build/commands/web/internal/{getWebServiceContent.js → sas9/getWebServiceContent.js} +12 -8
- package/build/commands/web/internal/sas9/index.d.ts +3 -0
- package/build/commands/web/internal/sas9/index.js +15 -0
- package/build/commands/web/internal/sasViya/createClickMeFile.d.ts +6 -0
- package/build/commands/web/internal/sasViya/createClickMeFile.js +63 -0
- package/build/commands/web/internal/sasViya/index.d.ts +1 -0
- package/build/commands/web/internal/sasViya/index.js +13 -0
- package/build/commands/web/internal/sasjsout.d.ts +1 -1
- package/build/commands/web/internal/sasjsout.js +2 -1
- package/build/commands/web/internal/updateAllTags.d.ts +7 -4
- package/build/commands/web/internal/updateAllTags.js +5 -0
- package/build/commands/web/internal/updateLinkTag.d.ts +2 -4
- package/build/commands/web/internal/updateScriptTag.d.ts +2 -4
- package/build/commands/web/internal/updateScriptTag.js +32 -32
- package/build/commands/web/internal/updateStyleTag.d.ts +2 -4
- package/build/commands/web/internal/updateStyleTag.js +32 -32
- package/build/commands/web/web.js +30 -79
- package/build/constants.d.ts +1 -0
- package/build/utils/setConstants.js +4 -2
- package/build/utils/utils.d.ts +1 -0
- package/build/utils/utils.js +22 -1
- package/package.json +1 -1
- 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("
|
|
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*/,
|
|
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*/,
|
|
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*/,
|
|
145
|
-
case 15: return [4 /*yield*/, (0,
|
|
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
|
|
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*/,
|
|
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 =
|
|
159
|
-
case
|
|
160
|
-
case
|
|
161
|
-
case
|
|
162
|
-
case
|
|
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,
|
|
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,
|
|
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,
|
|
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*/,
|
|
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*/,
|
|
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*/,
|
|
104
|
-
case 7: return [4 /*yield*/, (0,
|
|
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
|
-
|
|
109
|
-
case
|
|
110
|
-
case
|
|
111
|
-
case
|
|
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
|
|
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=
|
|
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
|
-
|
|
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).
|
|
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,
|
|
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
|
|
110
|
+
case 2:
|
|
102
111
|
_a.sent();
|
|
103
112
|
return [4 /*yield*/, (0, config_1.findTargetInConfiguration)(target.name, types_1.TargetScope.Local)];
|
|
104
|
-
case
|
|
113
|
+
case 3:
|
|
105
114
|
customTarget = (_a.sent()).target;
|
|
106
115
|
return [4 /*yield*/, expect((0, build_1.build)(customTarget)).toResolve()];
|
|
107
|
-
case
|
|
116
|
+
case 4:
|
|
108
117
|
_a.sent();
|
|
109
118
|
return [4 /*yield*/, (0, deploy_1.deploy)(customTarget, true, sasjs)];
|
|
110
|
-
case
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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
|
|
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
|
|
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
|
|
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[]>;
|