@speedkit/cli 2.14.3 → 2.15.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/CHANGELOG.md +9 -0
- package/README.md +5 -2
- package/dist/commands/generate-pop-config.js +6 -5
- package/dist/dummy.spec.js +4 -4
- package/dist/helpers/build-query-helper.js +49 -35
- package/dist/helpers/file-helper.d.ts +2 -8
- package/dist/helpers/file-helper.js +6 -41
- package/dist/helpers/get-parsed-config.js +7 -7
- package/dist/helpers/getChromePath.js +11 -7
- package/dist/helpers/isDirectory.js +1 -1
- package/dist/helpers/isFile.js +1 -1
- package/dist/helpers/normalize.d.ts +2 -0
- package/dist/helpers/normalize.js +14 -12
- package/dist/helpers/race.js +3 -1
- package/dist/helpers/scrape.js +3 -2
- package/dist/helpers/speedKitRuleToRegExp.js +2 -2
- package/dist/models/cli-parameters.d.ts +2 -2
- package/dist/models/cli-parameters.js +8 -2
- package/dist/models/files.js +13 -13
- package/dist/services/athena/athena-service-factory.d.ts +13 -0
- package/dist/services/athena/athena-service-factory.js +40 -0
- package/dist/services/athena/athena-service-model.d.ts +4 -0
- package/dist/services/athena/athena-service-model.js +7 -0
- package/dist/services/{athena-service.d.ts → athena/athena-service.d.ts} +4 -8
- package/dist/services/{athena-service.js → athena/athena-service.js} +12 -36
- package/dist/services/athena/error/fetch-credentials-error.d.ts +2 -0
- package/dist/services/athena/error/fetch-credentials-error.js +6 -0
- package/dist/services/athena/index.d.ts +4 -0
- package/dist/services/athena/index.js +7 -0
- package/dist/services/bundler/bundle-service-factory.d.ts +1 -1
- package/dist/services/bundler/bundle-service.d.ts +2 -2
- package/dist/services/bundler/bundle-service.js +29 -23
- package/dist/services/bundler/index.d.ts +2 -2
- package/dist/services/cli/cli-service.js +5 -5
- package/dist/services/cli/hooks.js +2 -2
- package/dist/services/cli/index.d.ts +3 -3
- package/dist/services/config-api/client.d.ts +1 -1
- package/dist/services/config-api/client.js +9 -7
- package/dist/services/config-api/config-api-service.js +20 -8
- package/dist/services/config-api/factory/config-api-service-factory.js +1 -1
- package/dist/services/config-api/interface/request-extension-interface.d.ts +2 -2
- package/dist/services/customer-config/customer-config-service-context.js +1 -1
- package/dist/services/customer-config/customer-config-service.d.ts +1 -0
- package/dist/services/customer-config/customer-config-service.js +68 -57
- package/dist/services/customer-config/index.d.ts +4 -4
- package/dist/services/deploy/builder/install-resource-builder.js +9 -7
- package/dist/services/deploy/checks/post-deploy/revalidated-module-check.js +2 -2
- package/dist/services/deploy/checks/post-deploy/save-files-check.js +2 -2
- package/dist/services/deploy/deploy-service.js +7 -7
- package/dist/services/deploy/handler/customer-config-handler.js +12 -11
- package/dist/services/deploy/handler/install-resource-handler.js +14 -12
- package/dist/services/deploy/handler/install-resource-modifier/deleted-file-check.js +10 -10
- package/dist/services/deploy/handler/module-handler.js +9 -9
- package/dist/services/deploy/handler/module-modifier/deployment-detection-modifier.js +2 -2
- package/dist/services/deploy/handler/server-config-handler.js +4 -4
- package/dist/services/deploy/interface/install.d.ts +1 -1
- package/dist/services/document-handler-runtime/context/document-handler-runtime-context.js +37 -18
- package/dist/services/document-handler-runtime/document-handler-runtime-service.js +45 -35
- package/dist/services/document-handler-runtime/document-handler-server.js +56 -33
- package/dist/services/document-handler-runtime/error/handler/required-file-not-found-handler.js +1 -1
- package/dist/services/document-handler-runtime/factory/document-handler-runtime-service-factory.js +20 -16
- package/dist/services/document-handler-runtime/templates/abstract-template.d.ts +1 -1
- package/dist/services/document-handler-runtime/templates/abstract-template.js +1 -1
- package/dist/services/error-handling/abstract/abstract-async-error-handling-factory.js +1 -1
- package/dist/services/error-handling/abstract/abstract-async-error-handling-service.js +1 -1
- package/dist/services/error-handling/abstract/abstract-error-handling-factory.js +1 -1
- package/dist/services/error-handling/abstract/abstract-error-handling-service.js +1 -1
- package/dist/services/error-handling/error/handler/default-error-handler.d.ts +1 -1
- package/dist/services/error-handling/error/handler/default-error-handler.js +1 -1
- package/dist/services/error-handling/error-handling-service.js +2 -2
- package/dist/services/integration-api/context/integration-api-context.js +1 -1
- package/dist/services/integration-api/external/external-file-reader.js +1 -1
- package/dist/services/integration-api/factory/integration-api-service-factory.js +3 -3
- package/dist/services/integration-api/file-list.js +6 -4
- package/dist/services/integration-api/file-reader.js +17 -12
- package/dist/services/integration-api/handler/file-handler.d.ts +1 -1
- package/dist/services/integration-api/handler/file-handler.js +8 -4
- package/dist/services/integration-api/handler/install-resource-handler.js +21 -20
- package/dist/services/integration-api/handler/server-config-handler.js +1 -3
- package/dist/services/integration-api/integration-api-model.d.ts +2 -2
- package/dist/services/integration-api/integration-api-service.js +10 -7
- package/dist/services/integration-api/struct/customer-config.js +3 -2
- package/dist/services/integration-api/struct/file.js +4 -4
- package/dist/services/integration-api/struct/module-file.d.ts +1 -1
- package/dist/services/integration-api/struct/module-file.js +3 -1
- package/dist/services/integration-api/struct/server-config-file.d.ts +1 -1
- package/dist/services/integration-api/validator/customer-config-validator.js +13 -4
- package/dist/services/integration-api/validator/mandatory-files-validator.js +9 -5
- package/dist/services/integration-api/virtual/virtual-file-handler.js +1 -1
- package/dist/services/onboarding/dashboard/frontend-dist/assets/{index-87b53ed4.css → index-e3bd4f6e.css} +1 -1
- package/dist/services/onboarding/dashboard/frontend-dist/assets/{main-274b5625.js → main-215271c2.js} +3 -3
- package/dist/services/onboarding/dashboard/frontend-dist/index.html +2 -2
- package/dist/services/onboarding/dashboard/index.d.ts +2 -1
- package/dist/services/onboarding/dashboard/index.js +6 -5
- package/dist/services/onboarding/dashboard/request-diff-service.d.ts +4 -2
- package/dist/services/onboarding/dashboard/request-diff-service.js +23 -14
- package/dist/services/onboarding/onboarding-service-factory.d.ts +0 -1
- package/dist/services/onboarding/onboarding-service-factory.js +9 -34
- package/dist/services/pop-config/index.d.ts +3 -0
- package/dist/services/pop-config/index.js +6 -0
- package/dist/services/pop-config/pop-config-factory.d.ts +4 -0
- package/dist/services/pop-config/pop-config-factory.js +12 -0
- package/dist/services/pop-config/pop-config-model.d.ts +6 -0
- package/dist/services/pop-config/pop-config-model.js +2 -0
- package/dist/services/pop-config/pop-config-service.d.ts +7 -0
- package/dist/services/pop-config/pop-config-service.js +39 -0
- package/dist/services/prewarm-service.js +22 -16
- package/oclif.manifest.json +1 -1
- package/package.json +2 -4
- package/dist/services/onboarding/dashboard/athena-service.d.ts +0 -11
- package/dist/services/onboarding/dashboard/athena-service.js +0 -75
|
@@ -10,7 +10,7 @@ class ExternalFileReader {
|
|
|
10
10
|
if (!response.ok) {
|
|
11
11
|
throw new Error(`Could not retrieve asset "${assetName}". Server respond with ${response.status} ${response.statusText}`);
|
|
12
12
|
}
|
|
13
|
-
const [fileName
|
|
13
|
+
const [fileName] = assetName.split("/").pop().split(".");
|
|
14
14
|
return new ro_file_1.RoFile(fileName, assetName, await response.text());
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -30,13 +30,13 @@ class IntegrationApiServiceFactory {
|
|
|
30
30
|
}
|
|
31
31
|
build() {
|
|
32
32
|
if (!this.context.basePath) {
|
|
33
|
-
throw new context_runtime_error_1.default({ message:
|
|
33
|
+
throw new context_runtime_error_1.default({ message: "basePath is undefined" });
|
|
34
34
|
}
|
|
35
35
|
if (!this.context.configName) {
|
|
36
|
-
throw new context_runtime_error_1.default({ message:
|
|
36
|
+
throw new context_runtime_error_1.default({ message: "configName is undefined" });
|
|
37
37
|
}
|
|
38
38
|
const fileReader = this.getFileReader();
|
|
39
|
-
const cli =
|
|
39
|
+
const cli = new cli_1.CliServiceFactory().getService();
|
|
40
40
|
const virtualFileHandler = new virtual_file_handler_1.VirtualFileHandler(cli);
|
|
41
41
|
this.service = new integration_api_service_1.default(fileReader, virtualFileHandler, new mandatory_files_validator_1.default(), [
|
|
42
42
|
new customer_config_handler_1.default(fileReader, cli, new customer_config_validator_1.default(), this.context.configName, this.cliConfig.testApp),
|
|
@@ -12,7 +12,7 @@ class FileList {
|
|
|
12
12
|
}
|
|
13
13
|
hasFile(fileName) {
|
|
14
14
|
for (let iteration = 0; iteration < this.files.length; iteration++) {
|
|
15
|
-
|
|
15
|
+
const file = this.files[iteration];
|
|
16
16
|
if (file.name === fileName) {
|
|
17
17
|
return true;
|
|
18
18
|
}
|
|
@@ -42,9 +42,11 @@ class FileList {
|
|
|
42
42
|
return configFiles.shift();
|
|
43
43
|
}
|
|
44
44
|
getTypes() {
|
|
45
|
-
const types = this.files
|
|
45
|
+
const types = this.files
|
|
46
|
+
.map((file) => {
|
|
46
47
|
return file.type;
|
|
47
|
-
})
|
|
48
|
+
})
|
|
49
|
+
.sort();
|
|
48
50
|
return [...new Set(types)];
|
|
49
51
|
}
|
|
50
52
|
getByType(type) {
|
|
@@ -62,7 +64,7 @@ class FileList {
|
|
|
62
64
|
this.files = this.files.filter((file) => callback(file));
|
|
63
65
|
}
|
|
64
66
|
concat(fileList) {
|
|
65
|
-
fileList.files.forEach(file => this.files.push(file));
|
|
67
|
+
fileList.files.forEach((file) => this.files.push(file));
|
|
66
68
|
}
|
|
67
69
|
replace(replaceWith) {
|
|
68
70
|
const files = [];
|
|
@@ -4,14 +4,14 @@ const tslib_1 = require("tslib");
|
|
|
4
4
|
const fs_1 = require("fs");
|
|
5
5
|
const path_1 = tslib_1.__importDefault(require("path"));
|
|
6
6
|
const promises_1 = require("fs/promises");
|
|
7
|
-
const CUSTOMER_CONFIG_FILE =
|
|
8
|
-
const DEFAULT_ENV =
|
|
7
|
+
const CUSTOMER_CONFIG_FILE = "config_customer";
|
|
8
|
+
const DEFAULT_ENV = "production";
|
|
9
9
|
class FileReader {
|
|
10
10
|
configName;
|
|
11
11
|
basePath;
|
|
12
12
|
whiteList;
|
|
13
13
|
blockedFolders;
|
|
14
|
-
allowedExtensions = [
|
|
14
|
+
allowedExtensions = ["js", "es6", "json", "css"];
|
|
15
15
|
constructor(configName, basePath, whiteList = [], blockedFolders = []) {
|
|
16
16
|
this.configName = configName;
|
|
17
17
|
this.basePath = basePath;
|
|
@@ -38,7 +38,7 @@ class FileReader {
|
|
|
38
38
|
return this.mapEnvironment(files);
|
|
39
39
|
}
|
|
40
40
|
async getContent(path) {
|
|
41
|
-
return (0, promises_1.readFile)(path,
|
|
41
|
+
return (0, promises_1.readFile)(path, "utf-8");
|
|
42
42
|
}
|
|
43
43
|
isAllowedFolder(folderName) {
|
|
44
44
|
return !this.blockedFolders.some((entry) => {
|
|
@@ -47,10 +47,11 @@ class FileReader {
|
|
|
47
47
|
}
|
|
48
48
|
isAllowedFile(fileName) {
|
|
49
49
|
const extension = this.getFileExtension(fileName);
|
|
50
|
-
return this.allowedExtensions.indexOf(extension) !== -1 &&
|
|
50
|
+
return (this.allowedExtensions.indexOf(extension) !== -1 &&
|
|
51
|
+
this.isWhiteListed(fileName));
|
|
51
52
|
}
|
|
52
53
|
getFileExtension(fileName) {
|
|
53
|
-
return fileName.slice((fileName.lastIndexOf(".") - 1 >>> 0) + 2);
|
|
54
|
+
return fileName.slice(((fileName.lastIndexOf(".") - 1) >>> 0) + 2);
|
|
54
55
|
}
|
|
55
56
|
isWhiteListed(fileName) {
|
|
56
57
|
// always true if whitelist is empty
|
|
@@ -61,7 +62,7 @@ class FileReader {
|
|
|
61
62
|
if (fileName.includes(CUSTOMER_CONFIG_FILE)) {
|
|
62
63
|
return true;
|
|
63
64
|
}
|
|
64
|
-
return this.whiteList.some(entry => {
|
|
65
|
+
return this.whiteList.some((entry) => {
|
|
65
66
|
return fileName.includes(entry);
|
|
66
67
|
});
|
|
67
68
|
}
|
|
@@ -71,16 +72,19 @@ class FileReader {
|
|
|
71
72
|
for (let index = 0; index < fileList.length; index++) {
|
|
72
73
|
const shortFileName = path_1.default.basename(fileList[index]);
|
|
73
74
|
const fullFileName = fileList[index];
|
|
74
|
-
|
|
75
|
-
let env = fileName.split(
|
|
75
|
+
const fileName = shortFileName.split(".").slice(0, -1).join(".");
|
|
76
|
+
let env = fileName.split(".").pop();
|
|
76
77
|
if (env === fileName) {
|
|
77
78
|
env = DEFAULT_ENV;
|
|
78
79
|
}
|
|
79
|
-
const fileKey =
|
|
80
|
+
const fileKey = env === DEFAULT_ENV
|
|
81
|
+
? fileName
|
|
82
|
+
: fileName.split(".").slice(0, -1).join(".");
|
|
80
83
|
envFileList[fileKey] = { ...envFileList[fileKey], [env]: fullFileName };
|
|
81
84
|
}
|
|
82
85
|
// map object to current environment with fallback on production
|
|
83
|
-
return Array.from(Object.values(envFileList))
|
|
86
|
+
return Array.from(Object.values(envFileList))
|
|
87
|
+
.map((envFile) => {
|
|
84
88
|
if (this.configName in envFile) {
|
|
85
89
|
return envFile[this.configName];
|
|
86
90
|
}
|
|
@@ -91,7 +95,8 @@ class FileReader {
|
|
|
91
95
|
for (const key in envFile) {
|
|
92
96
|
return envFile[key];
|
|
93
97
|
}
|
|
94
|
-
})
|
|
98
|
+
})
|
|
99
|
+
.filter((value) => !!value);
|
|
95
100
|
}
|
|
96
101
|
}
|
|
97
102
|
exports.default = FileReader;
|
|
@@ -3,7 +3,7 @@ import { FileInterface, IntegrationApiHandler } from "../integration-api-model";
|
|
|
3
3
|
export default abstract class FileHandler implements IntegrationApiHandler {
|
|
4
4
|
protected fileReader: FileReader;
|
|
5
5
|
constructor(fileReader: FileReader);
|
|
6
|
-
canHandle(
|
|
6
|
+
canHandle(_filePath: string): boolean;
|
|
7
7
|
abstract handle(filePath: string): Promise<FileInterface>;
|
|
8
8
|
protected getFileName(path: string): string;
|
|
9
9
|
}
|
|
@@ -5,14 +5,18 @@ class FileHandler {
|
|
|
5
5
|
constructor(fileReader) {
|
|
6
6
|
this.fileReader = fileReader;
|
|
7
7
|
}
|
|
8
|
-
canHandle(
|
|
8
|
+
canHandle(_filePath) {
|
|
9
9
|
return false;
|
|
10
10
|
}
|
|
11
11
|
getFileName(path) {
|
|
12
|
-
let fileName = path
|
|
12
|
+
let fileName = path
|
|
13
|
+
.replace(/^.*[\\/]/, "")
|
|
14
|
+
.split(".")
|
|
15
|
+
.slice(0, -1)
|
|
16
|
+
.join(".");
|
|
13
17
|
// remove environmentName for internal references
|
|
14
|
-
if (fileName.split(
|
|
15
|
-
fileName = fileName.split(
|
|
18
|
+
if (fileName.split(".").pop() === this.fileReader.configName) {
|
|
19
|
+
fileName = fileName.split(".").slice(0, -1).join(".");
|
|
16
20
|
}
|
|
17
21
|
return fileName;
|
|
18
22
|
}
|
|
@@ -4,29 +4,29 @@ const tslib_1 = require("tslib");
|
|
|
4
4
|
const file_handler_1 = tslib_1.__importDefault(require("./file-handler"));
|
|
5
5
|
const install_resource_file_1 = tslib_1.__importDefault(require("../struct/install-resource-file"));
|
|
6
6
|
const application_error_1 = tslib_1.__importDefault(require("../../error-handling/error/application-error"));
|
|
7
|
-
const PREDICTIVE_PRELOADING =
|
|
7
|
+
const PREDICTIVE_PRELOADING = "predictive-preloading";
|
|
8
8
|
class InstallResourceHandler extends file_handler_1.default {
|
|
9
9
|
allowedFiles = [
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
10
|
+
"config_SpeedKit",
|
|
11
|
+
"config_documentHandler",
|
|
12
|
+
"config_dynamicBlocks",
|
|
13
|
+
"config_loadHandler",
|
|
14
|
+
"custom_loader",
|
|
15
|
+
"custom_sw",
|
|
16
|
+
"custom_documentHandler",
|
|
17
|
+
"custom_dynamicFetcher",
|
|
18
|
+
"config_dynamicStyles",
|
|
19
19
|
];
|
|
20
20
|
remoteKeyMapping = {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
21
|
+
config_SpeedKit: "config",
|
|
22
|
+
config_documentHandler: "documentHandlerConfig",
|
|
23
|
+
config_dynamicBlocks: "dynamicFetcherConfig",
|
|
24
|
+
config_loadHandler: "custom",
|
|
25
|
+
custom_loader: "loader",
|
|
26
|
+
custom_sw: "sw",
|
|
27
|
+
custom_documentHandler: "documentHandler",
|
|
28
|
+
custom_dynamicFetcher: "dynamicFetcher",
|
|
29
|
+
config_dynamicStyles: "customStyle",
|
|
30
30
|
};
|
|
31
31
|
canHandle(filePath) {
|
|
32
32
|
return this.allowedFiles.indexOf(this.getFileName(filePath)) !== -1;
|
|
@@ -49,7 +49,8 @@ class InstallResourceHandler extends file_handler_1.default {
|
|
|
49
49
|
*/
|
|
50
50
|
async getFileContent(fileName, filePath) {
|
|
51
51
|
const content = await this.fileReader.getContent(filePath);
|
|
52
|
-
if (fileName ===
|
|
52
|
+
if (fileName === "config_loadHandler" &&
|
|
53
|
+
content.includes(PREDICTIVE_PRELOADING)) {
|
|
53
54
|
return this.replaceWithDebugPackage(content);
|
|
54
55
|
}
|
|
55
56
|
return content;
|
|
@@ -4,9 +4,7 @@ const tslib_1 = require("tslib");
|
|
|
4
4
|
const file_handler_1 = tslib_1.__importDefault(require("./file-handler"));
|
|
5
5
|
const server_config_file_1 = tslib_1.__importDefault(require("../struct/server-config-file"));
|
|
6
6
|
class ServerConfigHandler extends file_handler_1.default {
|
|
7
|
-
allowedFiles = [
|
|
8
|
-
'orestes_config',
|
|
9
|
-
];
|
|
7
|
+
allowedFiles = ["orestes_config"];
|
|
10
8
|
canHandle(filePath) {
|
|
11
9
|
return this.allowedFiles.indexOf(this.getFileName(filePath)) !== -1;
|
|
12
10
|
}
|
|
@@ -28,7 +28,7 @@ export interface FileListInterface {
|
|
|
28
28
|
hasFile(fileName: string): boolean;
|
|
29
29
|
getByName<T>(name: string): T;
|
|
30
30
|
concat(fileList: FileListInterface): void;
|
|
31
|
-
replace(replace:
|
|
31
|
+
replace(replace: InstallResourceInterface | ModuleInterface | ServerConfigInterface | FileInterface | RoFile | VirtualFile): void;
|
|
32
32
|
}
|
|
33
33
|
export interface IntegrationApiContextInterface {
|
|
34
34
|
basePath: string;
|
|
@@ -66,7 +66,7 @@ export interface ConfigFileInterface extends FileInterface {
|
|
|
66
66
|
export interface ModuleInterface extends ConfigFileInterface, FileInterface {
|
|
67
67
|
}
|
|
68
68
|
export interface ServerConfigInterface extends ConfigFileInterface, FileInterface {
|
|
69
|
-
config:
|
|
69
|
+
config: NonNullable<unknown>;
|
|
70
70
|
}
|
|
71
71
|
export interface InstallResourceInterface extends ConfigFileInterface, FileInterface {
|
|
72
72
|
readonly remoteKey: string;
|
|
@@ -24,10 +24,10 @@ class IntegrationApiService {
|
|
|
24
24
|
}
|
|
25
25
|
return fileList;
|
|
26
26
|
}
|
|
27
|
-
fileExists(fileName, extension =
|
|
27
|
+
fileExists(fileName, extension = "js") {
|
|
28
28
|
return this.fileWriter.hasFile(fileName, extension);
|
|
29
29
|
}
|
|
30
|
-
writeFile(fileName, extension =
|
|
30
|
+
writeFile(fileName, extension = "js", content = "") {
|
|
31
31
|
this.fileWriter.writeFile(fileName, extension, content);
|
|
32
32
|
}
|
|
33
33
|
createFolder(path) {
|
|
@@ -37,7 +37,7 @@ class IntegrationApiService {
|
|
|
37
37
|
const files = await this.fileReader.getFileList();
|
|
38
38
|
const fileList = new file_list_1.default();
|
|
39
39
|
for (let iteration = 0; iteration < files.length; iteration++) {
|
|
40
|
-
|
|
40
|
+
const file = files[iteration];
|
|
41
41
|
fileList.addFile(await this.processFile(file));
|
|
42
42
|
}
|
|
43
43
|
if (this.shouldValidate) {
|
|
@@ -48,7 +48,7 @@ class IntegrationApiService {
|
|
|
48
48
|
}
|
|
49
49
|
async processFile(file) {
|
|
50
50
|
for (let iterator = 0; iterator < this.handlers.length; iterator++) {
|
|
51
|
-
|
|
51
|
+
const handler = this.handlers[iterator];
|
|
52
52
|
if (handler.canHandle(file)) {
|
|
53
53
|
return await handler.handle(file);
|
|
54
54
|
}
|
|
@@ -58,15 +58,18 @@ class IntegrationApiService {
|
|
|
58
58
|
filterFilesToProcess(fileList) {
|
|
59
59
|
fileList.filter((file) => {
|
|
60
60
|
// if we have a documentHandlerConfig we don't need an assetHandler
|
|
61
|
-
if (file.name ===
|
|
61
|
+
if (file.name === "speedKit.Asset" &&
|
|
62
|
+
fileList.hasFile("config_documentHandler")) {
|
|
62
63
|
return false;
|
|
63
64
|
}
|
|
64
65
|
// if we don't have a documentHandlerConfig we don't need styles
|
|
65
|
-
if (file.name ===
|
|
66
|
+
if (file.name === "config_dynamicStyles" &&
|
|
67
|
+
!fileList.hasFile("config_documentHandler")) {
|
|
66
68
|
return false;
|
|
67
69
|
}
|
|
68
70
|
// if we don't have a documentHandlerConfig we don't need dynamicBlocks
|
|
69
|
-
if (file.name ===
|
|
71
|
+
if (file.name === "config_dynamicBlocks" &&
|
|
72
|
+
!fileList.hasFile("config_documentHandler")) {
|
|
70
73
|
return false;
|
|
71
74
|
}
|
|
72
75
|
return true;
|
|
@@ -34,8 +34,9 @@ class CustomerConfig {
|
|
|
34
34
|
this.skCliPost = skCliPost;
|
|
35
35
|
}
|
|
36
36
|
static createFrom(configFile, configName) {
|
|
37
|
-
const { app, origins, domain, swPath, scope, appDomain, installPath, installParams, name, forceInstall, chromeFlags, dependencies, skCliPre, skCliPost } = configFile;
|
|
38
|
-
return new CustomerConfig(new RequiredParam(
|
|
37
|
+
const { app, origins, domain, swPath, scope, appDomain, installPath, installParams, name, forceInstall, chromeFlags, dependencies, skCliPre, skCliPost, } = configFile;
|
|
38
|
+
return new CustomerConfig(new RequiredParam("app", app).isString().getValue(), new RequiredParam("origins", origins).isArray().getValue(), new RequiredParam("domain", domain).isString().getValue(), new RequiredParam("swPath", swPath).isString().getValue(), new RequiredParam("scope", scope).isString().getValue(), appDomain || `${app}.app.baqend.com`, installPath ||
|
|
39
|
+
`https://${app}.app.baqend.com/v1/speedkit/install.js?d=${name || configName}`, installParams || 'async="" crossorigin="anonymous"', name, forceInstall, chromeFlags, dependencies, skCliPre, skCliPost);
|
|
39
40
|
}
|
|
40
41
|
}
|
|
41
42
|
exports.default = CustomerConfig;
|
|
@@ -39,18 +39,18 @@ class File {
|
|
|
39
39
|
this.updated = false;
|
|
40
40
|
}
|
|
41
41
|
async updateIfChanged() {
|
|
42
|
-
const content = await (0, promises_1.readFile)(this.path,
|
|
42
|
+
const content = await (0, promises_1.readFile)(this.path, "utf-8");
|
|
43
43
|
if (content !== this.content) {
|
|
44
44
|
await this.updateFile();
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
async onChange(callback) {
|
|
48
|
-
const watcher = (0, promises_1.watch)(this.path, { encoding:
|
|
48
|
+
const watcher = (0, promises_1.watch)(this.path, { encoding: "utf-8" });
|
|
49
49
|
for await (const info of watcher) {
|
|
50
|
-
if (info.eventType !==
|
|
50
|
+
if (info.eventType !== "change") {
|
|
51
51
|
continue;
|
|
52
52
|
}
|
|
53
|
-
this.setContent(await (0, promises_1.readFile)(this.path,
|
|
53
|
+
this.setContent(await (0, promises_1.readFile)(this.path, "utf-8"));
|
|
54
54
|
await callback(this);
|
|
55
55
|
}
|
|
56
56
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import File from "./file";
|
|
2
2
|
import { ModuleInterface } from "../integration-api-model";
|
|
3
3
|
export default class ModuleFile extends File implements ModuleInterface {
|
|
4
|
-
constructor(name: string, path: string, content: string, config:
|
|
4
|
+
constructor(name: string, path: string, content: string, config: NonNullable<unknown>);
|
|
5
5
|
}
|
|
@@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
const file_1 = tslib_1.__importDefault(require("./file"));
|
|
5
5
|
class ModuleFile extends file_1.default {
|
|
6
|
-
constructor(name, path, content,
|
|
6
|
+
constructor(name, path, content,
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8
|
+
config) {
|
|
7
9
|
super(name, path, content, ModuleFile);
|
|
8
10
|
}
|
|
9
11
|
}
|
|
@@ -2,7 +2,7 @@ import File from "./file";
|
|
|
2
2
|
import { ServerConfigInterface } from "../integration-api-model";
|
|
3
3
|
export default class ServerConfigFile extends File implements ServerConfigInterface {
|
|
4
4
|
config: any;
|
|
5
|
-
constructor(name: string, path: string, content: string, config:
|
|
5
|
+
constructor(name: string, path: string, content: string, config: NonNullable<unknown>);
|
|
6
6
|
getContent(): string;
|
|
7
7
|
setContent(content: string): void;
|
|
8
8
|
private getConfigAsString;
|
|
@@ -4,16 +4,25 @@ const tslib_1 = require("tslib");
|
|
|
4
4
|
const origin_error_1 = tslib_1.__importDefault(require("../error/origin-error"));
|
|
5
5
|
class CustomerConfigValidator {
|
|
6
6
|
validate(config) {
|
|
7
|
-
const withoutProtocol = config.origins.filter(origin => !origin.startsWith(
|
|
7
|
+
const withoutProtocol = config.origins.filter((origin) => !origin.startsWith("http"));
|
|
8
8
|
// There was at least one origin not having a protocol => Do not allow creation of install resource.
|
|
9
9
|
if (withoutProtocol.length > 0) {
|
|
10
|
-
throw new origin_error_1.default({
|
|
10
|
+
throw new origin_error_1.default({
|
|
11
|
+
app: config.app,
|
|
12
|
+
message: "There was at least one origin configured in the local customer_config.js not having a protocol.",
|
|
13
|
+
});
|
|
11
14
|
}
|
|
12
15
|
if (config.origins.length === 0) {
|
|
13
|
-
throw new origin_error_1.default({
|
|
16
|
+
throw new origin_error_1.default({
|
|
17
|
+
app: config.app,
|
|
18
|
+
message: "No origins were found in local config_customer.js! Add origins and restart deploy!",
|
|
19
|
+
});
|
|
14
20
|
}
|
|
15
21
|
if (this.checkIfDuplicateExists(config.origins)) {
|
|
16
|
-
throw new origin_error_1.default({
|
|
22
|
+
throw new origin_error_1.default({
|
|
23
|
+
app: config.app,
|
|
24
|
+
message: "Duplicate origins found! Remove duplicates and restart deploy!",
|
|
25
|
+
});
|
|
17
26
|
}
|
|
18
27
|
}
|
|
19
28
|
checkIfDuplicateExists(arr) {
|
|
@@ -4,11 +4,15 @@ const tslib_1 = require("tslib");
|
|
|
4
4
|
const mandatory_file_missing_error_1 = tslib_1.__importDefault(require("../error/mandatory-file-missing-error"));
|
|
5
5
|
class MandatoryFilesValidator {
|
|
6
6
|
mandatoryFilesConfig = {
|
|
7
|
-
required: [
|
|
7
|
+
required: ["config_customer", "config_SpeedKit"],
|
|
8
8
|
conditionallyRequired: {
|
|
9
|
-
this: [
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
this: [
|
|
10
|
+
"config_documentHandler",
|
|
11
|
+
"config_dynamicBlocks",
|
|
12
|
+
"config_dynamicStyles",
|
|
13
|
+
],
|
|
14
|
+
or: ["speedKit.Asset"],
|
|
15
|
+
},
|
|
12
16
|
};
|
|
13
17
|
validate(files) {
|
|
14
18
|
this.mandatoryFilesConfig.required.forEach((fileName) => {
|
|
@@ -32,7 +36,7 @@ class MandatoryFilesValidator {
|
|
|
32
36
|
}
|
|
33
37
|
});
|
|
34
38
|
if (!hasRequiredFiles && !hasConditionallyRequiredFiles) {
|
|
35
|
-
throw new Error(`Please implement ${this.mandatoryFilesConfig.conditionallyRequired.this.join(
|
|
39
|
+
throw new Error(`Please implement ${this.mandatoryFilesConfig.conditionallyRequired.this.join(", ")} or ${this.mandatoryFilesConfig.conditionallyRequired.or.join(", ")}`);
|
|
36
40
|
}
|
|
37
41
|
}
|
|
38
42
|
}
|
|
@@ -11,7 +11,7 @@ class VirtualFileHandler {
|
|
|
11
11
|
}
|
|
12
12
|
async processFiles(fileList, virtualFiles) {
|
|
13
13
|
for (const fileConfig of virtualFiles) {
|
|
14
|
-
const [fileName
|
|
14
|
+
const [fileName] = fileConfig.name.split("/").pop().split(".");
|
|
15
15
|
if (!fileConfig.overrideLocalFile && fileList.hasFile(fileName)) {
|
|
16
16
|
this.cli.write(`use localFile for ${fileName}`);
|
|
17
17
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins-Regular;font-feature-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}:root{--red: #ff4c3f;--red-dimmed: #bb382e;--green: #10af80;--greenOpacity: RGBA(12, 217, 149, .16);--blue: #0568fd;--blue-dimmed: #034cb9;--disabled: #6b7c96;--disabled-dimmed: #525f73;--fontPrimary: #282c39;--fontSecondary: #6b7c96;--backgroundPrimary: #fff;--backgroundSecondary: #eef2f7;--borderPrimary: #d8e1ed;--borderSecondary: #d8e1ed;--whiteOpacity: RGBA(255, 255, 255, .6);--tableFontPrimary: var(--fontPrimary);--tableFontSecondary: var(--fontSecondary);--tableBackgroundPrimary: var(--backgroundPrimary);--tableBackgroundSecondary: #f7f8fb;--tableBackgroundTernary: var(--backgroundSecondary);--tableBorder: #d8e1ed;--hover: var(--backgroundSecondary);--input-background: var(--backgroundPrimary);font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;font-weight:400;color-scheme:light dark;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%;--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}@media (prefers-contrast: more){:root{--fontSecondary: #282c39;--backgroundPrimary: #fff;--backgroundSecondary: #d8e1ed;--borderPrimary: #6b7c96;--borderSecondary: #6b7c96;--buttonPrimary: #0568fd;--buttonSecondary: #282c39;--whiteOpacity: RGBA(255, 255, 255, 1)}}@font-face{font-family:Lato;font-style:normal;font-weight:400;src:local("Lato Regular"),local("Lato-Regular"),url(/fonts/Lato-Regular.ttf) format("truetype")}@font-face{font-family:Lato-Bold;font-style:normal;font-weight:700;src:local("Lato Bold"),local("Lato-Bold"),url(/fonts/Lato-Bold.ttf) format("truetype")}@font-face{font-family:Poppins-Regular;font-style:normal;font-weight:400;src:local("Poppins Regular"),local("Poppins-Regular"),url(/fonts/Poppins-Regular.ttf) format("truetype")}@font-face{font-family:Poppins-SemiBold;font-style:normal;font-weight:600;src:local("Poppins SemiBold"),local("Poppins-SemiBold"),url(/fonts/Poppins-SemiBold.ttf) format("truetype")}a{font-weight:500;text-decoration:inherit}a:hover{color:var(--blue-dimmed)}body{margin:0;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none}.visible{visibility:visible}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-y-\[0\.185rem\]{top:.185rem;bottom:.185rem}.left-1\/2-2{left:calc(50% - 2px)}.left-\[2px\]{left:2px}.top-\[0\]{top:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.-ml-8{margin-left:-2rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-4{margin-right:1rem}.mr-auto{margin-right:auto}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.hidden{display:none}.min-h-screen{min-height:100vh}.w-1\/12{width:8.333333%}.w-1\/2{width:50%}.w-2\/12{width:16.666667%}.w-7\/12{width:58.333333%}.w-full{width:100%}.w-sidebar{width:clamp(60px,80px,130px)}.min-w-full{min-width:100%}.max-w-full{max-width:100%}.flex-auto{flex:1 1 auto}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.scale-110{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.content-between{align-content:space-between}.content-evenly{align-content:space-evenly}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-evenly{justify-content:space-evenly}.overflow-hidden{overflow:hidden}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-bq-blue{border-color:var(--blue)}.border-bq-sec-border{border-color:var(--borderSecondary)}.border-bq-table-border{border-color:var(--tableBorder)}.border-b-bq-table-border{border-bottom-color:var(--tableBorder)}.bg-bq-blue{background-color:var(--blue)}.bg-bq-grey-light{--tw-bg-opacity: 1;background-color:rgb(242 244 246 / var(--tw-bg-opacity))}.bg-bq-prim-background{background-color:var(--backgroundPrimary)}.bg-bq-sec-background{background-color:var(--backgroundSecondary)}.bg-bq-table-background-prim{background-color:var(--tableBackgroundPrimary)}.bg-bq-table-background-sec{background-color:var(--tableBackgroundSecondary)}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-\[0\.185rem\]{padding:.185rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pl-4{padding-left:1rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.font-bold{font-family:Poppins-SemiBold}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-clamp font-size{-d-e-f-a-u-l-t:clamp(.8rem,.425rem + 3vw,2rem);s:clamp(.3rem,.3438rem + 1.25vw,.8rem);m:clamp(.5rem,.3438rem + 1.25vw,1rem);xl:clamp(1rem,.6875rem + 2.5vw,2rem)}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.capitalize{text-transform:capitalize}.text-bq-blue{color:var(--blue)}.text-bq-prim-font{color:var(--fontPrimary)}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.opacity-60{opacity:.6}.shadow{--tw-shadow: 0px 1px 4px 0px #282C3914;--tw-shadow-colored: 0px 1px 4px 0px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}*:disabled{cursor:default}*:disabled:disabled{opacity:.5}.\[key\:string\]{key:string}@media (prefers-color-scheme: dark){html{--fontPrimary: #e1e8f0;--fontSecondary: #8493ad;--backgroundPrimary: #282c39;--backgroundSecondary: #121212;--borderPrimary: #2e373e;--borderSecondary: #4a5a65;--buttonPrimary: #0568fd;--buttonSecondary: #d8e1ed;--whiteOpacity: RGBA(255, 255, 255, .06);--hover: #393f51;--tableFontPrimary: #d8e1ed;--tableFontSecondary: rgba(216 225 237, .6);--tableBackgroundPrimary: var(--backgroundPrimary);--tableBackgroundSecondary: #21242d;--tableBackgroundTernary: #1d1f26;--tableBorder: #333a4b;--input-background: var(--backgroundSecondary);color-scheme:dark}}.g-input:focus-within{margin:-1px;border-width:2px;border-color:var(--blue)}.g-content-divider{margin-top:1.25rem;margin-bottom:1.25rem;border-width:1px;border-left-width:0px;border-right-width:0px;border-bottom-width:0px;border-color:var(--borderPrimary)}#app{height:100%;width:100%}.tabs-component{margin-bottom:1rem;display:flex;flex-direction:column;padding-left:.5rem;padding-right:.5rem}.tabs-component-tabs{margin-bottom:-.5rem;display:flex}.tabs-component-tabs .tabs-component-tab-a{display:block;background-color:var(--backgroundSecondary);padding:.5rem .75rem;color:var(--fontSecondary)}.tabs-component-tabs .tabs-component-tab-a.is-active,.tabs-component-tabs .tabs-component-tab-a:hover{background-color:var(--backgroundPrimary);color:var(--fontPrimary)}.tabs-component-panels{padding:.5rem;color:var(--fontPrimary)}.router-link-exact-active{background-color:var(--tableBackgroundSecondary)}.hover\:scale-95:hover{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:bg-blue-200:hover{--tw-bg-opacity: 1;background-color:rgb(191 219 254 / var(--tw-bg-opacity))}.hover\:outline:hover{outline-style:solid}.hover\:outline-bq-blue-dimmed:hover{outline-color:var(--blue-dimmed)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.datatable{border-collapse:collapse;table-layout:fixed}.data-table th{text-align:left}.datatable tr:nth-child(odd) textarea,.datatable tr:nth-child(odd) input,.datatable tr:nth-child(odd){background-color:var(--tableBackgroundPrimary)}.datatable tr:nth-child(2n) textarea,.datatable tr:nth-child(2n) input,.datatable tr:nth-child(2n){background-color:var(--tableBackgroundSecondary)}.datatable td{padding:.25rem}
|
|
1
|
+
*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins-Regular;font-feature-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}:root{--red: #ff4c3f;--red-dimmed: #bb382e;--green: #10af80;--greenOpacity: RGBA(12, 217, 149, .16);--blue: #0568fd;--blue-dimmed: #034cb9;--disabled: #6b7c96;--disabled-dimmed: #525f73;--fontPrimary: #282c39;--fontSecondary: #6b7c96;--backgroundPrimary: #fff;--backgroundSecondary: #eef2f7;--borderPrimary: #d8e1ed;--borderSecondary: #d8e1ed;--whiteOpacity: RGBA(255, 255, 255, .6);--tableFontPrimary: var(--fontPrimary);--tableFontSecondary: var(--fontSecondary);--tableBackgroundPrimary: var(--backgroundPrimary);--tableBackgroundSecondary: #f7f8fb;--tableBackgroundTernary: var(--backgroundSecondary);--tableBorder: #d8e1ed;--hover: var(--backgroundSecondary);--input-background: var(--backgroundPrimary);font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;font-weight:400;color-scheme:light dark;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%;--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}@media (prefers-contrast: more){:root{--fontSecondary: #282c39;--backgroundPrimary: #fff;--backgroundSecondary: #d8e1ed;--borderPrimary: #6b7c96;--borderSecondary: #6b7c96;--buttonPrimary: #0568fd;--buttonSecondary: #282c39;--whiteOpacity: RGBA(255, 255, 255, 1)}}@font-face{font-family:Lato;font-style:normal;font-weight:400;src:local("Lato Regular"),local("Lato-Regular"),url(/fonts/Lato-Regular.ttf) format("truetype")}@font-face{font-family:Lato-Bold;font-style:normal;font-weight:700;src:local("Lato Bold"),local("Lato-Bold"),url(/fonts/Lato-Bold.ttf) format("truetype")}@font-face{font-family:Poppins-Regular;font-style:normal;font-weight:400;src:local("Poppins Regular"),local("Poppins-Regular"),url(/fonts/Poppins-Regular.ttf) format("truetype")}@font-face{font-family:Poppins-SemiBold;font-style:normal;font-weight:600;src:local("Poppins SemiBold"),local("Poppins-SemiBold"),url(/fonts/Poppins-SemiBold.ttf) format("truetype")}a{font-weight:500;text-decoration:inherit}a:hover{color:var(--blue-dimmed)}body{margin:0;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none}.visible{visibility:visible}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-y-\[0\.185rem\]{top:.185rem;bottom:.185rem}.left-1\/2-2{left:calc(50% - 2px)}.left-\[2px\]{left:2px}.top-\[0\]{top:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.-ml-8{margin-left:-2rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-4{margin-right:1rem}.mr-auto{margin-right:auto}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.hidden{display:none}.min-h-screen{min-height:100vh}.w-1\/12{width:8.333333%}.w-1\/2{width:50%}.w-2\/12{width:16.666667%}.w-7\/12{width:58.333333%}.w-full{width:100%}.w-sidebar{width:clamp(60px,80px,130px)}.min-w-full{min-width:100%}.max-w-full{max-width:100%}.flex-auto{flex:1 1 auto}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.scale-110{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.content-between{align-content:space-between}.content-evenly{align-content:space-evenly}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-evenly{justify-content:space-evenly}.overflow-hidden{overflow:hidden}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-bq-blue{border-color:var(--blue)}.border-bq-sec-border{border-color:var(--borderSecondary)}.border-bq-table-border{border-color:var(--tableBorder)}.border-b-bq-table-border{border-bottom-color:var(--tableBorder)}.bg-bq-blue{background-color:var(--blue)}.bg-bq-grey-light{--tw-bg-opacity: 1;background-color:rgb(242 244 246 / var(--tw-bg-opacity))}.bg-bq-prim-background{background-color:var(--backgroundPrimary)}.bg-bq-sec-background{background-color:var(--backgroundSecondary)}.bg-bq-table-background-prim{background-color:var(--tableBackgroundPrimary)}.bg-bq-table-background-sec{background-color:var(--tableBackgroundSecondary)}.bg-green-200{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity))}.bg-red-200{--tw-bg-opacity: 1;background-color:rgb(254 202 202 / var(--tw-bg-opacity))}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-\[0\.185rem\]{padding:.185rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pl-4{padding-left:1rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.font-bold{font-family:Poppins-SemiBold}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-clamp font-size{-d-e-f-a-u-l-t:clamp(.8rem,.425rem + 3vw,2rem);s:clamp(.3rem,.3438rem + 1.25vw,.8rem);m:clamp(.5rem,.3438rem + 1.25vw,1rem);xl:clamp(1rem,.6875rem + 2.5vw,2rem)}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.capitalize{text-transform:capitalize}.text-bq-blue{color:var(--blue)}.text-bq-prim-font{color:var(--fontPrimary)}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.opacity-60{opacity:.6}.shadow{--tw-shadow: 0px 1px 4px 0px #282C3914;--tw-shadow-colored: 0px 1px 4px 0px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}*:disabled{cursor:default}*:disabled:disabled{opacity:.5}@media (prefers-color-scheme: dark){html{--fontPrimary: #e1e8f0;--fontSecondary: #8493ad;--backgroundPrimary: #282c39;--backgroundSecondary: #121212;--borderPrimary: #2e373e;--borderSecondary: #4a5a65;--buttonPrimary: #0568fd;--buttonSecondary: #d8e1ed;--whiteOpacity: RGBA(255, 255, 255, .06);--hover: #393f51;--tableFontPrimary: #d8e1ed;--tableFontSecondary: rgba(216 225 237, .6);--tableBackgroundPrimary: var(--backgroundPrimary);--tableBackgroundSecondary: #21242d;--tableBackgroundTernary: #1d1f26;--tableBorder: #333a4b;--input-background: var(--backgroundSecondary);color-scheme:dark}}.g-input:focus-within{margin:-1px;border-width:2px;border-color:var(--blue)}.g-content-divider{margin-top:1.25rem;margin-bottom:1.25rem;border-width:1px;border-left-width:0px;border-right-width:0px;border-bottom-width:0px;border-color:var(--borderPrimary)}#app{height:100%;width:100%}.tabs-component{margin-bottom:1rem;display:flex;flex-direction:column;padding-left:.5rem;padding-right:.5rem}.tabs-component-tabs{margin-bottom:-.5rem;display:flex}.tabs-component-tabs .tabs-component-tab-a{display:block;background-color:var(--backgroundSecondary);padding:.5rem .75rem;color:var(--fontSecondary)}.tabs-component-tabs .tabs-component-tab-a.is-active,.tabs-component-tabs .tabs-component-tab-a:hover{background-color:var(--backgroundPrimary);color:var(--fontPrimary)}.tabs-component-panels{padding:.5rem;color:var(--fontPrimary)}.router-link-exact-active{background-color:var(--tableBackgroundSecondary)}.hover\:scale-95:hover{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:bg-blue-200:hover{--tw-bg-opacity: 1;background-color:rgb(191 219 254 / var(--tw-bg-opacity))}.hover\:outline:hover{outline-style:solid}.hover\:outline-bq-blue-dimmed:hover{outline-color:var(--blue-dimmed)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.datatable{border-collapse:collapse;table-layout:fixed}.data-table th{text-align:left}.datatable tr:nth-child(odd) textarea,.datatable tr:nth-child(odd) input,.datatable tr:nth-child(odd){background-color:var(--tableBackgroundPrimary)}.datatable tr:nth-child(2n) textarea,.datatable tr:nth-child(2n) input,.datatable tr:nth-child(2n){background-color:var(--tableBackgroundSecondary)}.datatable td{padding:.25rem}.datatable tr textarea.identical,.datatable tr input.identical{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity))}.datatable tr textarea.diff,.datatable tr input.diff{--tw-bg-opacity: 1;background-color:rgb(254 202 202 / var(--tw-bg-opacity))}
|