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