@sasjs/cli 3.0.1 → 3.1.0
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 +6 -2
- package/build/commands/add/addCredential.js +79 -47
- package/build/commands/add/addTarget.js +32 -20
- package/build/commands/add/internal/input.d.ts +7 -0
- package/build/commands/add/internal/input.js +53 -8
- package/build/commands/add/spec/addTarget.spec.js +78 -0
- package/build/commands/build/build.js +11 -11
- package/build/commands/build/internal/config.d.ts +1 -1
- package/build/commands/build/internal/config.js +5 -6
- package/build/commands/compile/compile.js +4 -4
- package/build/commands/compile/compileCommand.js +2 -1
- package/build/commands/compile/compileSingleFile.d.ts +1 -1
- package/build/commands/compile/compileSingleFile.js +6 -7
- package/build/commands/compile/internal/compareFolders.js +1 -2
- package/build/commands/compile/internal/compileJobFile.js +1 -1
- package/build/commands/compile/internal/compileServiceFile.js +32 -16
- package/build/commands/compile/internal/compileTestFile.d.ts +0 -2
- package/build/commands/compile/internal/compileTestFile.js +11 -15
- package/build/commands/compile/internal/getAllJobFolders.js +1 -1
- package/build/commands/compile/internal/getAllServiceFolders.js +1 -1
- package/build/commands/compile/internal/loadDependencies.d.ts +2 -3
- package/build/commands/compile/internal/loadDependencies.js +43 -230
- package/build/commands/compile/internal/spec/compileTestFile.spec.js +8 -8
- package/build/commands/compile/spec/compile.spec.js +30 -0
- package/build/commands/compile/spec/compileJobFile.spec.js +3 -3
- package/build/commands/compile/spec/compileServiceFile.spec.js +3 -3
- package/build/commands/compile/spec/loadDependencies.spec.js +37 -37
- package/build/commands/create/spec/reactAppFiles.js +5 -5
- package/build/commands/deploy/deploy.js +1 -1
- package/build/commands/deploy/spec/cbd.spec.js +19 -3
- package/build/commands/docs/generateDocs.js +4 -5
- package/build/commands/docs/internal/getFileInputs.d.ts +1 -1
- package/build/commands/docs/internal/getFileInputs.js +2 -2
- package/build/commands/docs/internal/getFileOutputs.d.ts +1 -1
- package/build/commands/docs/internal/getFileOutputs.js +2 -2
- package/build/commands/docs/internal/getFoldersForDocs.d.ts +1 -1
- package/build/commands/docs/internal/getFoldersForDocs.js +1 -1
- package/build/commands/job/internal/execute/viya.js +0 -6
- package/build/commands/job/internal/utils.js +6 -8
- package/build/commands/request/request.js +2 -2
- package/build/commands/run/run.js +1 -1
- package/build/commands/servicepack/deploy.js +1 -1
- package/build/commands/shared/fetchLogFileContent.js +6 -8
- package/build/commands/testing/test.js +1 -1
- package/build/commands/web/internal/getTags.d.ts +2 -1
- package/build/commands/web/internal/getTags.js +10 -12
- package/build/commands/web/internal/getWebServiceContent.js +1 -2
- package/build/commands/web/internal/sasjsout.d.ts +1 -1
- package/build/commands/web/internal/sasjsout.js +1 -1
- package/build/commands/web/internal/spec/updateLinkTag.spec.d.ts +4 -0
- package/build/commands/web/internal/spec/updateLinkTag.spec.js +32 -0
- package/build/commands/web/internal/updateAllTags.js +33 -8
- package/build/commands/web/internal/updateLinkTag.d.ts +4 -0
- package/build/commands/web/internal/updateLinkTag.js +24 -0
- package/build/commands/web/web.js +12 -13
- package/build/utils/auth.d.ts +10 -4
- package/build/utils/auth.js +17 -15
- package/build/utils/config.d.ts +2 -3
- package/build/utils/config.js +14 -16
- package/build/utils/file.d.ts +0 -6
- package/build/utils/file.js +1 -43
- package/build/utils/setConstants.js +1 -1
- package/build/utils/spec/utils.spec.js +31 -5
- package/build/utils/utils.d.ts +0 -2
- package/build/utils/utils.js +2 -21
- package/package.json +8 -14
- package/CHANGELOG.md +0 -30
- package/build/commands/compile/internal/config.d.ts +0 -25
- package/build/commands/compile/internal/config.js +0 -259
- package/build/commands/compile/spec/getDependencyPaths.spec.d.ts +0 -1
- package/build/commands/compile/spec/getDependencyPaths.spec.js +0 -263
- package/build/commands/compile/spec/getProgramDependencies.spec.d.ts +0 -1
- package/build/commands/compile/spec/getProgramDependencies.spec.js +0 -403
- package/build/commands/shared/dependencies.d.ts +0 -12
- package/build/commands/shared/dependencies.js +0 -332
- package/build/commands/web/internal/updateLinkHref.d.ts +0 -4
- package/build/commands/web/internal/updateLinkHref.js +0 -18
- package/build/utils/spec/utils.spec.server.d.ts +0 -1
- package/build/utils/spec/utils.spec.server.js +0 -72
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { 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,10 @@ 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, httpsAgentOptions?: HttpsAgentOptions | undefined) => Promise<
|
|
13
|
+
export declare const getTokens: (target: Target, client: string, secret: string, httpsAgentOptions?: HttpsAgentOptions | undefined) => Promise<{
|
|
14
|
+
access_token: string;
|
|
15
|
+
refresh_token: string;
|
|
16
|
+
}>;
|
|
14
17
|
export declare const createEnvFileForViya: (targetName: string, client: string, secret: string, accessToken: string, refreshToken: string) => Promise<void>;
|
|
15
18
|
export declare const createEnvFileForSas9: (targetName: string, userName: string, password: string) => Promise<void>;
|
|
19
|
+
export declare const createEnvFileForSasjs: (targetName: string, client: string, accessToken: string, refreshToken: string) => Promise<void>;
|
|
@@ -50,7 +50,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
50
50
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
51
|
};
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
-
exports.createEnvFileForSas9 = exports.createEnvFileForViya = exports.getTokens = exports.validateTargetName = exports.addCredential = void 0;
|
|
53
|
+
exports.createEnvFileForSasjs = exports.createEnvFileForSas9 = exports.createEnvFileForViya = exports.getTokens = exports.validateTargetName = exports.addCredential = void 0;
|
|
54
54
|
var path_1 = __importDefault(require("path"));
|
|
55
55
|
var logger_1 = require("@sasjs/utils/logger");
|
|
56
56
|
var types_1 = require("@sasjs/utils/types");
|
|
@@ -69,66 +69,81 @@ 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 httpsAgentOptions, serverUrl,
|
|
73
|
-
var
|
|
74
|
-
return __generator(this, function (
|
|
75
|
-
switch (
|
|
72
|
+
var httpsAgentOptions, serverUrl, filePath_1, _a, _b, client, secret, _c, access_token, refresh_token, _d, userName, password, client, _e, access_token, refresh_token, filePath;
|
|
73
|
+
var _f, _g, _h;
|
|
74
|
+
return __generator(this, function (_j) {
|
|
75
|
+
switch (_j.label) {
|
|
76
76
|
case 0:
|
|
77
77
|
httpsAgentOptions = insecure
|
|
78
78
|
? __assign(__assign({}, target.httpsAgentOptions), { allowInsecureRequests: true, rejectUnauthorized: false }) : target.httpsAgentOptions;
|
|
79
79
|
if (insecure)
|
|
80
|
-
(
|
|
80
|
+
(_f = process.logger) === null || _f === void 0 ? void 0 : _f.warn('Executing with insecure connection.');
|
|
81
81
|
if (!!target.serverUrl) return [3 /*break*/, 3];
|
|
82
82
|
return [4 /*yield*/, input_1.getAndValidateServerUrl(target)];
|
|
83
83
|
case 1:
|
|
84
|
-
serverUrl =
|
|
84
|
+
serverUrl = _j.sent();
|
|
85
85
|
target = new types_1.Target(__assign(__assign({}, target.toJson(false)), { serverUrl: serverUrl }));
|
|
86
86
|
return [4 /*yield*/, saveConfig_1.saveConfig(targetScope, target, false, false)];
|
|
87
87
|
case 2:
|
|
88
|
-
|
|
89
|
-
(
|
|
90
|
-
|
|
88
|
+
filePath_1 = _j.sent();
|
|
89
|
+
(_g = process.logger) === null || _g === void 0 ? void 0 : _g.info("Target configuration has been saved to " + filePath_1 + " .");
|
|
90
|
+
_j.label = 3;
|
|
91
91
|
case 3:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
92
|
+
_a = target.serverType;
|
|
93
|
+
switch (_a) {
|
|
94
|
+
case types_1.ServerType.SasViya: return [3 /*break*/, 4];
|
|
95
|
+
case types_1.ServerType.Sas9: return [3 /*break*/, 10];
|
|
96
|
+
case types_1.ServerType.Sasjs: return [3 /*break*/, 15];
|
|
97
|
+
}
|
|
98
|
+
return [3 /*break*/, 21];
|
|
99
|
+
case 4: return [4 /*yield*/, input_1.getCredentialsInputForViya(target.name)];
|
|
97
100
|
case 5:
|
|
98
|
-
_b =
|
|
99
|
-
|
|
100
|
-
return [4 /*yield*/, exports.createEnvFileForViya(target.name, client, secret, access_token, refresh_token)];
|
|
101
|
+
_b = _j.sent(), client = _b.client, secret = _b.secret;
|
|
102
|
+
return [4 /*yield*/, exports.getTokens(target, client, secret, httpsAgentOptions)];
|
|
101
103
|
case 6:
|
|
102
|
-
|
|
103
|
-
return [3 /*break*/, 8];
|
|
104
|
+
_c = _j.sent(), access_token = _c.access_token, refresh_token = _c.refresh_token;
|
|
105
|
+
if (!(targetScope === targetScope_1.TargetScope.Local)) return [3 /*break*/, 8];
|
|
106
|
+
return [4 /*yield*/, exports.createEnvFileForViya(target.name, client, secret, access_token, refresh_token)];
|
|
104
107
|
case 7:
|
|
108
|
+
_j.sent();
|
|
109
|
+
return [3 /*break*/, 9];
|
|
110
|
+
case 8:
|
|
105
111
|
target = new types_1.Target(__assign(__assign({}, target.toJson(false)), { authConfig: { client: client, secret: secret, access_token: access_token, refresh_token: refresh_token } }));
|
|
106
|
-
|
|
107
|
-
case
|
|
108
|
-
case
|
|
109
|
-
filePath = _h.sent();
|
|
110
|
-
(_f = process.logger) === null || _f === void 0 ? void 0 : _f.info("Target configuration has been saved to " + filePath + " .");
|
|
111
|
-
return [3 /*break*/, 17];
|
|
112
|
-
case 10:
|
|
113
|
-
if (!(target.serverType === types_1.ServerType.Sas9)) return [3 /*break*/, 16];
|
|
114
|
-
return [4 /*yield*/, input_1.getCredentialsInputSas9(target, targetScope)];
|
|
112
|
+
_j.label = 9;
|
|
113
|
+
case 9: return [3 /*break*/, 22];
|
|
114
|
+
case 10: return [4 /*yield*/, input_1.getCredentialsInputSas9(target, targetScope)];
|
|
115
115
|
case 11:
|
|
116
|
-
|
|
116
|
+
_d = _j.sent(), userName = _d.userName, password = _d.password;
|
|
117
117
|
if (!(targetScope === targetScope_1.TargetScope.Local)) return [3 /*break*/, 13];
|
|
118
118
|
return [4 /*yield*/, exports.createEnvFileForSas9(target.name, userName, password)];
|
|
119
119
|
case 12:
|
|
120
|
-
|
|
120
|
+
_j.sent();
|
|
121
121
|
return [3 /*break*/, 14];
|
|
122
122
|
case 13:
|
|
123
123
|
target = new types_1.Target(__assign(__assign({}, target.toJson(false)), { authConfigSas9: { userName: userName, password: password } }));
|
|
124
|
-
|
|
125
|
-
case 14: return [
|
|
126
|
-
case 15:
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
return [
|
|
130
|
-
case
|
|
131
|
-
|
|
124
|
+
_j.label = 14;
|
|
125
|
+
case 14: return [3 /*break*/, 22];
|
|
126
|
+
case 15: return [4 /*yield*/, input_1.getCredentialsInputSasjs(target)];
|
|
127
|
+
case 16:
|
|
128
|
+
client = (_j.sent()).client;
|
|
129
|
+
return [4 /*yield*/, exports.getTokens(target, client, '', httpsAgentOptions)];
|
|
130
|
+
case 17:
|
|
131
|
+
_e = _j.sent(), access_token = _e.access_token, refresh_token = _e.refresh_token;
|
|
132
|
+
if (!(targetScope === targetScope_1.TargetScope.Local)) return [3 /*break*/, 19];
|
|
133
|
+
return [4 /*yield*/, exports.createEnvFileForSasjs(target.name, client, access_token, refresh_token)];
|
|
134
|
+
case 18:
|
|
135
|
+
_j.sent();
|
|
136
|
+
return [3 /*break*/, 20];
|
|
137
|
+
case 19:
|
|
138
|
+
target = new types_1.Target(__assign(__assign({}, target.toJson(false)), { authConfig: { client: client, secret: '', access_token: access_token, refresh_token: refresh_token } }));
|
|
139
|
+
_j.label = 20;
|
|
140
|
+
case 20: return [3 /*break*/, 22];
|
|
141
|
+
case 21: throw new Error('Target contains invalid serverType. Possible types could be SASVIYA, SAS9 and SASJS');
|
|
142
|
+
case 22: return [4 /*yield*/, saveConfig_1.saveConfig(targetScope, target, false, false)];
|
|
143
|
+
case 23:
|
|
144
|
+
filePath = _j.sent();
|
|
145
|
+
(_h = process.logger) === null || _h === void 0 ? void 0 : _h.info("Target configuration has been saved to " + filePath + " .");
|
|
146
|
+
return [2 /*return*/, target];
|
|
132
147
|
}
|
|
133
148
|
});
|
|
134
149
|
}); };
|
|
@@ -146,25 +161,25 @@ var validateTargetName = function (targetName) {
|
|
|
146
161
|
};
|
|
147
162
|
exports.validateTargetName = validateTargetName;
|
|
148
163
|
var getTokens = function (target, client, secret, httpsAgentOptions) { return __awaiter(void 0, void 0, void 0, function () {
|
|
149
|
-
var adapter,
|
|
150
|
-
var
|
|
151
|
-
return __generator(this, function (
|
|
152
|
-
switch (
|
|
164
|
+
var adapter, _a, access_token, refresh_token;
|
|
165
|
+
var _b;
|
|
166
|
+
return __generator(this, function (_c) {
|
|
167
|
+
switch (_c.label) {
|
|
153
168
|
case 0:
|
|
154
169
|
adapter = new node_1.default({
|
|
155
170
|
serverUrl: target.serverUrl,
|
|
156
171
|
serverType: target.serverType,
|
|
157
172
|
httpsAgentOptions: httpsAgentOptions,
|
|
158
|
-
debug: ((
|
|
173
|
+
debug: ((_b = process.logger) === null || _b === void 0 ? void 0 : _b.logLevel) === logger_1.LogLevel.Debug
|
|
159
174
|
});
|
|
160
175
|
return [4 /*yield*/, auth_1.getNewAccessToken(adapter, client, secret, target).catch(function (e) {
|
|
161
176
|
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");
|
|
177
|
+
(_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 " + (target.serverType === types_1.ServerType.Sasjs ? '' : 'and Client Secret ') + "and try again.\n");
|
|
163
178
|
throw e;
|
|
164
179
|
})];
|
|
165
180
|
case 1:
|
|
166
|
-
|
|
167
|
-
return [2 /*return*/,
|
|
181
|
+
_a = _c.sent(), access_token = _a.access_token, refresh_token = _a.refresh_token;
|
|
182
|
+
return [2 /*return*/, { access_token: access_token, refresh_token: refresh_token }];
|
|
168
183
|
}
|
|
169
184
|
});
|
|
170
185
|
}); };
|
|
@@ -203,3 +218,20 @@ var createEnvFileForSas9 = function (targetName, userName, password) { return __
|
|
|
203
218
|
});
|
|
204
219
|
}); };
|
|
205
220
|
exports.createEnvFileForSas9 = createEnvFileForSas9;
|
|
221
|
+
var createEnvFileForSasjs = function (targetName, client, accessToken, refreshToken) { return __awaiter(void 0, void 0, void 0, function () {
|
|
222
|
+
var envFileContent, envFilePath;
|
|
223
|
+
var _a;
|
|
224
|
+
return __generator(this, function (_b) {
|
|
225
|
+
switch (_b.label) {
|
|
226
|
+
case 0:
|
|
227
|
+
envFileContent = "CLIENT=" + client + "\nACCESS_TOKEN=" + accessToken + "\nREFRESH_TOKEN=" + refreshToken + "\n";
|
|
228
|
+
envFilePath = path_1.default.join(process.projectDir, ".env." + targetName);
|
|
229
|
+
return [4 /*yield*/, utils_1.createFile(envFilePath, envFileContent)];
|
|
230
|
+
case 1:
|
|
231
|
+
_b.sent();
|
|
232
|
+
(_a = process.logger) === null || _a === void 0 ? void 0 : _a.success("Environment file saved at " + envFilePath);
|
|
233
|
+
return [2 /*return*/];
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
}); };
|
|
237
|
+
exports.createEnvFileForSasjs = createEnvFileForSasjs;
|
|
@@ -60,26 +60,32 @@ var addCredential_1 = require("./addCredential");
|
|
|
60
60
|
function addTarget(insecure) {
|
|
61
61
|
var _a, _b, _c;
|
|
62
62
|
return __awaiter(this, void 0, void 0, function () {
|
|
63
|
-
var _d, scope, serverType, name, appLoc, serverUrl, existingTarget, saveWithDefaultValues, targetJson, target, filePath, _e, serverName, repositoryName, userName, password,
|
|
64
|
-
return __generator(this, function (
|
|
65
|
-
switch (
|
|
63
|
+
var _d, scope, serverType, name, appLoc, serverUrl, existingTarget, saveWithDefaultValues, targetJson, target, filePath, _e, _f, serverName, repositoryName, userName, password, _g, contextName, updatedViyaTarget, updatedSasjsTarget, isDefault;
|
|
64
|
+
return __generator(this, function (_h) {
|
|
65
|
+
switch (_h.label) {
|
|
66
66
|
case 0:
|
|
67
67
|
if (insecure)
|
|
68
68
|
(_a = process.logger) === null || _a === void 0 ? void 0 : _a.warn('Executing with insecure connection.');
|
|
69
69
|
return [4 /*yield*/, input_1.getCommonFields()];
|
|
70
70
|
case 1:
|
|
71
|
-
_d =
|
|
71
|
+
_d = _h.sent(), scope = _d.scope, serverType = _d.serverType, name = _d.name, appLoc = _d.appLoc, serverUrl = _d.serverUrl, existingTarget = _d.existingTarget;
|
|
72
72
|
saveWithDefaultValues = !existingTarget;
|
|
73
73
|
targetJson = __assign(__assign({}, existingTarget), { name: name, serverType: serverType, serverUrl: serverUrl, appLoc: appLoc });
|
|
74
74
|
target = new types_1.Target(targetJson);
|
|
75
75
|
return [4 /*yield*/, saveConfig_1.saveConfig(scope, target, false, saveWithDefaultValues)];
|
|
76
76
|
case 2:
|
|
77
|
-
filePath =
|
|
77
|
+
filePath = _h.sent();
|
|
78
78
|
(_b = process.logger) === null || _b === void 0 ? void 0 : _b.info("Target configuration has been saved to " + filePath + " .");
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
79
|
+
_e = serverType;
|
|
80
|
+
switch (_e) {
|
|
81
|
+
case types_1.ServerType.Sas9: return [3 /*break*/, 3];
|
|
82
|
+
case types_1.ServerType.SasViya: return [3 /*break*/, 5];
|
|
83
|
+
case types_1.ServerType.Sasjs: return [3 /*break*/, 7];
|
|
84
|
+
}
|
|
85
|
+
return [3 /*break*/, 9];
|
|
86
|
+
case 3: return [4 /*yield*/, input_1.getAndValidateSas9Fields(target, scope)];
|
|
87
|
+
case 4:
|
|
88
|
+
_f = _h.sent(), serverName = _f.serverName, repositoryName = _f.repositoryName, userName = _f.userName, password = _f.password;
|
|
83
89
|
targetJson = __assign(__assign({}, targetJson), { serverName: serverName, repositoryName: repositoryName });
|
|
84
90
|
if (scope === targetScope_1.TargetScope.Local) {
|
|
85
91
|
addCredential_1.createEnvFileForSas9(name, userName, password);
|
|
@@ -87,10 +93,10 @@ function addTarget(insecure) {
|
|
|
87
93
|
else {
|
|
88
94
|
targetJson = __assign(__assign({}, targetJson), { authConfigSas9: { userName: userName, password: password } });
|
|
89
95
|
}
|
|
90
|
-
return [3 /*break*/,
|
|
91
|
-
case
|
|
92
|
-
case
|
|
93
|
-
|
|
96
|
+
return [3 /*break*/, 10];
|
|
97
|
+
case 5: return [4 /*yield*/, input_1.getAndValidateSasViyaFields(target, scope, serverUrl, insecure, addCredential_1.addCredential)];
|
|
98
|
+
case 6:
|
|
99
|
+
_g = _h.sent(), contextName = _g.contextName, updatedViyaTarget = _g.target;
|
|
94
100
|
targetJson = {
|
|
95
101
|
contextName: contextName,
|
|
96
102
|
deployConfig: {
|
|
@@ -98,14 +104,20 @@ function addTarget(insecure) {
|
|
|
98
104
|
deployScripts: []
|
|
99
105
|
}
|
|
100
106
|
};
|
|
101
|
-
targetJson = __assign(__assign({},
|
|
102
|
-
|
|
103
|
-
case
|
|
104
|
-
case 7:
|
|
105
|
-
isDefault = _g.sent();
|
|
106
|
-
return [4 /*yield*/, saveConfig_1.saveConfig(scope, new types_1.Target(targetJson), isDefault, saveWithDefaultValues)];
|
|
107
|
+
targetJson = __assign(__assign({}, updatedViyaTarget.toJson(false)), targetJson);
|
|
108
|
+
return [3 /*break*/, 10];
|
|
109
|
+
case 7: return [4 /*yield*/, input_1.getAndValidateSasjsFields(target, scope, insecure, addCredential_1.addCredential)];
|
|
107
110
|
case 8:
|
|
108
|
-
|
|
111
|
+
updatedSasjsTarget = (_h.sent()).target;
|
|
112
|
+
targetJson = updatedSasjsTarget.toJson(false);
|
|
113
|
+
return [3 /*break*/, 10];
|
|
114
|
+
case 9: throw new Error('Target contains invalid serverType. Possible types could be SASVIYA, SAS9 and SASJS');
|
|
115
|
+
case 10: return [4 /*yield*/, input_1.getIsDefault()];
|
|
116
|
+
case 11:
|
|
117
|
+
isDefault = _h.sent();
|
|
118
|
+
return [4 /*yield*/, saveConfig_1.saveConfig(scope, new types_1.Target(targetJson), isDefault, saveWithDefaultValues)];
|
|
119
|
+
case 12:
|
|
120
|
+
filePath = _h.sent();
|
|
109
121
|
(_c = process.logger) === null || _c === void 0 ? void 0 : _c.info("Target configuration has been saved to " + filePath);
|
|
110
122
|
return [2 /*return*/, true];
|
|
111
123
|
}
|
|
@@ -9,14 +9,21 @@ export declare function getAndValidateSas9Fields(target: Target, scope: TargetSc
|
|
|
9
9
|
userName: string;
|
|
10
10
|
password: string;
|
|
11
11
|
}>;
|
|
12
|
+
export declare const shouldAuthenticate: () => Promise<boolean>;
|
|
12
13
|
export declare function getAndValidateSasViyaFields(target: Target, scope: TargetScope, serverUrl: string, insecure: boolean, authenticateCallback: (target: Target, insecure: boolean, targetScope: TargetScope) => Promise<Target>): Promise<{
|
|
13
14
|
contextName: string;
|
|
14
15
|
target: Target;
|
|
15
16
|
}>;
|
|
17
|
+
export declare function getAndValidateSasjsFields(target: Target, scope: TargetScope, insecure: boolean, authenticateCallback: (target: Target, insecure: boolean, targetScope: TargetScope) => Promise<Target>): Promise<{
|
|
18
|
+
target: Target;
|
|
19
|
+
}>;
|
|
16
20
|
export declare const getCredentialsInputForViya: (targetName: string) => Promise<{
|
|
17
21
|
client: string;
|
|
18
22
|
secret: string;
|
|
19
23
|
}>;
|
|
24
|
+
export declare const getCredentialsInputSasjs: (target: Target) => Promise<{
|
|
25
|
+
client: string;
|
|
26
|
+
}>;
|
|
20
27
|
export declare const getCredentialsInputSas9: (target: Target, scope: TargetScope) => Promise<{
|
|
21
28
|
userName: string;
|
|
22
29
|
password: string;
|
|
@@ -50,7 +50,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
50
50
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
51
|
};
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
-
exports.getIsDefault = exports.getDefaultValues = exports.getCredentialsInputSas9 = exports.getCredentialsInputForViya = exports.getAndValidateSasViyaFields = exports.getAndValidateSas9Fields = exports.getAndValidateServerUrl = exports.getCommonFields = void 0;
|
|
53
|
+
exports.getIsDefault = exports.getDefaultValues = exports.getCredentialsInputSas9 = exports.getCredentialsInputSasjs = exports.getCredentialsInputForViya = exports.getAndValidateSasjsFields = exports.getAndValidateSasViyaFields = exports.shouldAuthenticate = exports.getAndValidateSas9Fields = exports.getAndValidateServerUrl = exports.getCommonFields = void 0;
|
|
54
54
|
var input_1 = require("@sasjs/utils/input");
|
|
55
55
|
var types_1 = require("@sasjs/utils/types");
|
|
56
56
|
var logger_1 = require("@sasjs/utils/logger");
|
|
@@ -134,11 +134,20 @@ function getAndValidateServerType() {
|
|
|
134
134
|
switch (_a.label) {
|
|
135
135
|
case 0: return [4 /*yield*/, input_1.getChoice('Please pick a server type: ', 'Please choose either option 1 or 2.', [
|
|
136
136
|
{ title: '1. SAS Viya', value: 1 },
|
|
137
|
-
{ title: '2. SAS 9', value: 2 }
|
|
137
|
+
{ title: '2. SAS 9', value: 2 },
|
|
138
|
+
{ title: '3. SAS JS', value: 3 }
|
|
138
139
|
])];
|
|
139
140
|
case 1:
|
|
140
141
|
serverType = _a.sent();
|
|
141
|
-
|
|
142
|
+
switch (serverType) {
|
|
143
|
+
case 1:
|
|
144
|
+
return [2 /*return*/, types_1.ServerType.SasViya];
|
|
145
|
+
case 2:
|
|
146
|
+
return [2 /*return*/, types_1.ServerType.Sas9];
|
|
147
|
+
default:
|
|
148
|
+
return [2 /*return*/, types_1.ServerType.Sasjs];
|
|
149
|
+
}
|
|
150
|
+
return [2 /*return*/];
|
|
142
151
|
}
|
|
143
152
|
});
|
|
144
153
|
});
|
|
@@ -177,7 +186,11 @@ function getAndValidateTargetName(serverType) {
|
|
|
177
186
|
return [2 /*return*/, true];
|
|
178
187
|
});
|
|
179
188
|
}); };
|
|
180
|
-
defaultName = serverType === types_1.ServerType.SasViya
|
|
189
|
+
defaultName = serverType === types_1.ServerType.SasViya
|
|
190
|
+
? 'viya'
|
|
191
|
+
: serverType === types_1.ServerType.Sas9
|
|
192
|
+
? 'sas9'
|
|
193
|
+
: 'server';
|
|
181
194
|
return [4 /*yield*/, input_1.getString('Please enter a target name: ', validator, defaultName)];
|
|
182
195
|
case 1:
|
|
183
196
|
targetName = _a.sent();
|
|
@@ -237,18 +250,21 @@ function getAndValidateSas9Fields(target, scope) {
|
|
|
237
250
|
});
|
|
238
251
|
}
|
|
239
252
|
exports.getAndValidateSas9Fields = getAndValidateSas9Fields;
|
|
253
|
+
var shouldAuthenticate = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
254
|
+
return [2 /*return*/, input_1.getConfirmation('Would you like to authenticate against this target?', true)];
|
|
255
|
+
}); }); };
|
|
256
|
+
exports.shouldAuthenticate = shouldAuthenticate;
|
|
240
257
|
function getAndValidateSasViyaFields(target, scope, serverUrl, insecure, authenticateCallback) {
|
|
241
258
|
var _a;
|
|
242
259
|
return __awaiter(this, void 0, void 0, function () {
|
|
243
|
-
var contextName,
|
|
260
|
+
var contextName, httpsAgentOptions, sasjs, contexts, contextNumberErrorMessage, contextNumber;
|
|
244
261
|
return __generator(this, function (_b) {
|
|
245
262
|
switch (_b.label) {
|
|
246
263
|
case 0:
|
|
247
264
|
contextName = 'SAS Job Execution compute context';
|
|
248
|
-
return [4 /*yield*/,
|
|
265
|
+
return [4 /*yield*/, exports.shouldAuthenticate()];
|
|
249
266
|
case 1:
|
|
250
|
-
|
|
251
|
-
if (!shouldAuthenticate) return [3 /*break*/, 8];
|
|
267
|
+
if (!_b.sent()) return [3 /*break*/, 8];
|
|
252
268
|
return [4 /*yield*/, authenticateCallback(target, insecure, scope)];
|
|
253
269
|
case 2:
|
|
254
270
|
target = _b.sent();
|
|
@@ -293,6 +309,23 @@ function getAndValidateSasViyaFields(target, scope, serverUrl, insecure, authent
|
|
|
293
309
|
});
|
|
294
310
|
}
|
|
295
311
|
exports.getAndValidateSasViyaFields = getAndValidateSasViyaFields;
|
|
312
|
+
function getAndValidateSasjsFields(target, scope, insecure, authenticateCallback) {
|
|
313
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
314
|
+
return __generator(this, function (_a) {
|
|
315
|
+
switch (_a.label) {
|
|
316
|
+
case 0: return [4 /*yield*/, exports.shouldAuthenticate()];
|
|
317
|
+
case 1:
|
|
318
|
+
if (!_a.sent()) return [3 /*break*/, 3];
|
|
319
|
+
return [4 /*yield*/, authenticateCallback(target, insecure, scope)];
|
|
320
|
+
case 2:
|
|
321
|
+
target = _a.sent();
|
|
322
|
+
_a.label = 3;
|
|
323
|
+
case 3: return [2 /*return*/, { target: target }];
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
exports.getAndValidateSasjsFields = getAndValidateSasjsFields;
|
|
296
329
|
function getAndValidateAppLoc(targetName, target) {
|
|
297
330
|
var _a;
|
|
298
331
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -326,6 +359,18 @@ var getCredentialsInputForViya = function (targetName) { return __awaiter(void 0
|
|
|
326
359
|
});
|
|
327
360
|
}); };
|
|
328
361
|
exports.getCredentialsInputForViya = getCredentialsInputForViya;
|
|
362
|
+
var getCredentialsInputSasjs = function (target) { return __awaiter(void 0, void 0, void 0, function () {
|
|
363
|
+
var client;
|
|
364
|
+
return __generator(this, function (_a) {
|
|
365
|
+
switch (_a.label) {
|
|
366
|
+
case 0: return [4 /*yield*/, input_1.getString('Please enter your Client ID: ', function (v) { return !!v || 'Client ID is required.'; }, exports.getDefaultValues(target.name).client)];
|
|
367
|
+
case 1:
|
|
368
|
+
client = _a.sent();
|
|
369
|
+
return [2 /*return*/, { client: client }];
|
|
370
|
+
}
|
|
371
|
+
});
|
|
372
|
+
}); };
|
|
373
|
+
exports.getCredentialsInputSasjs = getCredentialsInputSasjs;
|
|
329
374
|
var getCredentialsInputSas9 = function (target, scope) { return __awaiter(void 0, void 0, void 0, function () {
|
|
330
375
|
var targetName, name, result, userName, password;
|
|
331
376
|
var _a, _b, _c, _d;
|
|
@@ -81,6 +81,7 @@ describe('addTarget', function () {
|
|
|
81
81
|
var appName = "cli-tests-add-" + utils_1.generateTimestamp();
|
|
82
82
|
var viyaTargetName = "test-viya-" + utils_1.generateTimestamp();
|
|
83
83
|
var sas9TargetName = "test-sas9-" + utils_1.generateTimestamp();
|
|
84
|
+
var sasjsTargetName = "test-server-" + utils_1.generateTimestamp();
|
|
84
85
|
var globalTestTarget;
|
|
85
86
|
beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
86
87
|
return __generator(this, function (_a) {
|
|
@@ -164,6 +165,42 @@ describe('addTarget', function () {
|
|
|
164
165
|
}
|
|
165
166
|
});
|
|
166
167
|
}); });
|
|
168
|
+
it('should create a SASJS target in the local sasjsconfig.json file', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
169
|
+
var commonFields;
|
|
170
|
+
return __generator(this, function (_a) {
|
|
171
|
+
switch (_a.label) {
|
|
172
|
+
case 0:
|
|
173
|
+
commonFields = {
|
|
174
|
+
scope: targetScope_1.TargetScope.Local,
|
|
175
|
+
serverType: utils_1.ServerType.Sasjs,
|
|
176
|
+
name: sasjsTargetName,
|
|
177
|
+
appLoc: '/Public/app',
|
|
178
|
+
serverUrl: process.env.SASJS_SERVER_URL || '',
|
|
179
|
+
existingTarget: {}
|
|
180
|
+
};
|
|
181
|
+
jest
|
|
182
|
+
.spyOn(inputModule, 'getCommonFields')
|
|
183
|
+
.mockImplementation(function () { return Promise.resolve(commonFields); });
|
|
184
|
+
jest
|
|
185
|
+
.spyOn(inputModule, 'getIsDefault')
|
|
186
|
+
.mockImplementation(function () { return Promise.resolve(false); });
|
|
187
|
+
jest
|
|
188
|
+
.spyOn(inputModule, 'getAndValidateSasjsFields')
|
|
189
|
+
.mockImplementation(function () {
|
|
190
|
+
return Promise.resolve({
|
|
191
|
+
target: new utils_1.Target(commonFields)
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
return [4 /*yield*/, expect(addTarget_1.addTarget(false)).resolves.toEqual(true)];
|
|
195
|
+
case 1:
|
|
196
|
+
_a.sent();
|
|
197
|
+
return [4 /*yield*/, verifyTarget(commonFields, true)];
|
|
198
|
+
case 2:
|
|
199
|
+
_a.sent();
|
|
200
|
+
return [2 /*return*/];
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}); });
|
|
167
204
|
it('should create a SAS9 target in the local sasjsconfig.json file', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
168
205
|
var commonFields;
|
|
169
206
|
return __generator(this, function (_a) {
|
|
@@ -322,6 +359,47 @@ describe('addTarget', function () {
|
|
|
322
359
|
}
|
|
323
360
|
});
|
|
324
361
|
}); });
|
|
362
|
+
it('should update a SASJS target in the local sasjsconfig.json file', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
363
|
+
var buildSourceFolder, config, targetJson, commonFields;
|
|
364
|
+
return __generator(this, function (_a) {
|
|
365
|
+
switch (_a.label) {
|
|
366
|
+
case 0:
|
|
367
|
+
buildSourceFolder = process.sasjsConstants.buildSourceFolder;
|
|
368
|
+
return [4 /*yield*/, config_1.getConfiguration(path_1.default.join(buildSourceFolder, 'sasjs', 'sasjsconfig.json'))];
|
|
369
|
+
case 1:
|
|
370
|
+
config = _a.sent();
|
|
371
|
+
targetJson = (config.targets || []).find(function (t) { return t.name === 'server'; });
|
|
372
|
+
commonFields = {
|
|
373
|
+
scope: targetScope_1.TargetScope.Local,
|
|
374
|
+
serverType: utils_1.ServerType.Sasjs,
|
|
375
|
+
name: 'server',
|
|
376
|
+
appLoc: '/Public/app/new/location/2',
|
|
377
|
+
serverUrl: process.env.SASJS_SERVER_URL || '',
|
|
378
|
+
existingTarget: targetJson
|
|
379
|
+
};
|
|
380
|
+
jest
|
|
381
|
+
.spyOn(inputModule, 'getCommonFields')
|
|
382
|
+
.mockImplementation(function () { return Promise.resolve(commonFields); });
|
|
383
|
+
jest
|
|
384
|
+
.spyOn(inputModule, 'getIsDefault')
|
|
385
|
+
.mockImplementation(function () { return Promise.resolve(false); });
|
|
386
|
+
jest
|
|
387
|
+
.spyOn(inputModule, 'getAndValidateSasjsFields')
|
|
388
|
+
.mockImplementation(function () {
|
|
389
|
+
return Promise.resolve({
|
|
390
|
+
target: new utils_1.Target(__assign(__assign({}, targetJson), commonFields))
|
|
391
|
+
});
|
|
392
|
+
});
|
|
393
|
+
return [4 /*yield*/, expect(addTarget_1.addTarget(false)).resolves.toEqual(true)];
|
|
394
|
+
case 2:
|
|
395
|
+
_a.sent();
|
|
396
|
+
return [4 /*yield*/, verifyTarget(commonFields, true)];
|
|
397
|
+
case 3:
|
|
398
|
+
_a.sent();
|
|
399
|
+
return [2 /*return*/];
|
|
400
|
+
}
|
|
401
|
+
});
|
|
402
|
+
}); });
|
|
325
403
|
it('should update a target in the global .sasjsrc file', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
326
404
|
var commonFields;
|
|
327
405
|
return __generator(this, function (_a) {
|
|
@@ -92,8 +92,6 @@ var config_1 = require("../../utils/config");
|
|
|
92
92
|
var compile_1 = require("../compile/compile");
|
|
93
93
|
var config_2 = require("./internal/config");
|
|
94
94
|
var getLaunchPageCode_1 = require("./internal/getLaunchPageCode");
|
|
95
|
-
var dependencies_1 = require("../shared/dependencies");
|
|
96
|
-
var compileTestFile_1 = require("../compile/internal/compileTestFile");
|
|
97
95
|
function build(target) {
|
|
98
96
|
return __awaiter(this, void 0, void 0, function () {
|
|
99
97
|
return __generator(this, function (_a) {
|
|
@@ -132,7 +130,7 @@ function createFinalSasFiles(target) {
|
|
|
132
130
|
function createFinalSasFile(target, streamConfig) {
|
|
133
131
|
var _a, _b, _c, _d, _e, _f;
|
|
134
132
|
return __awaiter(this, void 0, void 0, function () {
|
|
135
|
-
var streamWeb, buildConfig, serverType, name, macroFolders, buildOutputFileName, buildDestinationFolder, finalSasFileContent, finalFilePath, finalFilePathJSON, buildInfo, buildInit, buildTerm, dependencyFilePaths, dependenciesContent, _g, folderContent, folderContentJSON;
|
|
133
|
+
var streamWeb, buildConfig, serverType, name, macroFolders, buildOutputFileName, buildDestinationFolder, finalSasFileContent, finalFilePath, finalFilePathJSON, buildInfo, buildInit, buildTerm, macroCorePath, dependencyFilePaths, dependenciesContent, _g, folderContent, folderContentJSON;
|
|
136
134
|
return __generator(this, function (_h) {
|
|
137
135
|
switch (_h.label) {
|
|
138
136
|
case 0:
|
|
@@ -156,7 +154,8 @@ function createFinalSasFile(target, streamConfig) {
|
|
|
156
154
|
return [4 /*yield*/, config_2.getBuildTerm(target)];
|
|
157
155
|
case 4:
|
|
158
156
|
buildTerm = _h.sent();
|
|
159
|
-
|
|
157
|
+
macroCorePath = config_1.getMacroCorePath();
|
|
158
|
+
return [4 /*yield*/, utils_1.getDependencyPaths(buildTerm + "\n" + buildInit, macroFolders, macroCorePath)];
|
|
160
159
|
case 5:
|
|
161
160
|
dependencyFilePaths = _h.sent();
|
|
162
161
|
return [4 /*yield*/, getDependencies(dependencyFilePaths)];
|
|
@@ -189,7 +188,7 @@ function createFinalSasFile(target, streamConfig) {
|
|
|
189
188
|
}
|
|
190
189
|
function getBuildInfo(target, streamWeb) {
|
|
191
190
|
return __awaiter(this, void 0, void 0, function () {
|
|
192
|
-
var buildConfig, serverType, appLoc, macroFolders, createWebServiceScript, dependencyFilePaths, createFileScript, dependencyFilePathsForCreateFile, gsubScript, dependencyFilePathsForGsubScript, dependenciesContent, buildVars;
|
|
191
|
+
var buildConfig, serverType, appLoc, macroFolders, createWebServiceScript, macroCorePath, dependencyFilePaths, createFileScript, dependencyFilePathsForCreateFile, gsubScript, dependencyFilePathsForGsubScript, dependenciesContent, buildVars;
|
|
193
192
|
return __generator(this, function (_a) {
|
|
194
193
|
switch (_a.label) {
|
|
195
194
|
case 0:
|
|
@@ -201,8 +200,9 @@ function getBuildInfo(target, streamWeb) {
|
|
|
201
200
|
return [4 /*yield*/, getCreateWebServiceScript(serverType)];
|
|
202
201
|
case 2:
|
|
203
202
|
createWebServiceScript = _a.sent();
|
|
203
|
+
macroCorePath = config_1.getMacroCorePath();
|
|
204
204
|
buildConfig += createWebServiceScript + "\n";
|
|
205
|
-
return [4 /*yield*/,
|
|
205
|
+
return [4 /*yield*/, utils_1.getDependencyPaths(buildConfig, macroFolders, macroCorePath)];
|
|
206
206
|
case 3:
|
|
207
207
|
dependencyFilePaths = _a.sent();
|
|
208
208
|
if (!(target.serverType === utils_1.ServerType.SasViya && streamWeb)) return [3 /*break*/, 8];
|
|
@@ -210,7 +210,7 @@ function getBuildInfo(target, streamWeb) {
|
|
|
210
210
|
case 4:
|
|
211
211
|
createFileScript = _a.sent();
|
|
212
212
|
buildConfig += createFileScript + "\n";
|
|
213
|
-
return [4 /*yield*/,
|
|
213
|
+
return [4 /*yield*/, utils_1.getDependencyPaths(createFileScript, macroFolders, macroCorePath)
|
|
214
214
|
// The gsubScript is used to perform the replacement of the appLoc within
|
|
215
215
|
// the deployed index.html file. This only happens when deploying using the
|
|
216
216
|
// SAS Program (build.sas) approach.
|
|
@@ -221,7 +221,7 @@ function getBuildInfo(target, streamWeb) {
|
|
|
221
221
|
case 6:
|
|
222
222
|
gsubScript = _a.sent();
|
|
223
223
|
buildConfig += gsubScript + "\n";
|
|
224
|
-
return [4 /*yield*/,
|
|
224
|
+
return [4 /*yield*/, utils_1.getDependencyPaths(gsubScript, macroFolders, macroCorePath)];
|
|
225
225
|
case 7:
|
|
226
226
|
dependencyFilePathsForGsubScript = _a.sent();
|
|
227
227
|
dependencyFilePaths = __spreadArray([], __read(new Set(__spreadArray(__spreadArray(__spreadArray([], __read(dependencyFilePaths)), __read(dependencyFilePathsForCreateFile)), __read(dependencyFilePathsForGsubScript)))));
|
|
@@ -482,7 +482,7 @@ function getServiceText(serviceFileName, fileContent, serverType, testPath) {
|
|
|
482
482
|
}
|
|
483
483
|
});
|
|
484
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,
|
|
485
|
+
? getWebServiceScriptInvocation(serverType, utils_1.isTestFile(serviceFileName) && testPath ? "" + testPath : '')
|
|
486
486
|
: '') + "\nfilename sascode clear;\n";
|
|
487
487
|
}
|
|
488
488
|
function getFileText(fileName, fileContent, serverType) {
|
|
@@ -494,7 +494,7 @@ function getFileText(fileName, fileContent, serverType) {
|
|
|
494
494
|
}
|
|
495
495
|
function getWebFileContent(filecontent, type) {
|
|
496
496
|
var parsedContent = '';
|
|
497
|
-
var chunkedLines =
|
|
497
|
+
var chunkedLines = utils_1.chunk(filecontent);
|
|
498
498
|
if (chunkedLines.length === 1) {
|
|
499
499
|
parsedContent = " put '" + chunkedLines[0].split("'").join("''") + "';\n";
|
|
500
500
|
}
|
|
@@ -548,7 +548,7 @@ var convertVarsToSasFormat = function (vars) {
|
|
|
548
548
|
try {
|
|
549
549
|
for (var entries_1 = __values(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {
|
|
550
550
|
var _b = __read(entries_1_1.value, 2), name_1 = _b[0], value = _b[1];
|
|
551
|
-
var chunks =
|
|
551
|
+
var chunks = utils_1.chunk(value);
|
|
552
552
|
var chunkedString = chunks.join('%trim(\n)');
|
|
553
553
|
varsContent += "%let " + name_1 + "=" + chunkedString + ";\n";
|
|
554
554
|
}
|