From d469e7b8d509a416757e84c6c3689e01c88bebc0 Mon Sep 17 00:00:00 2001 From: umeshmore45 Date: Thu, 16 May 2024 17:35:37 +0530 Subject: [PATCH 001/759] updated code --- .gitignore | 4 +- api/example.env | 5 - api/src/database.ts | 5 +- ui/package.json | 2 +- uplaode-api/.eslintrc.json | 3 +- uplaode-api/migration-sitecore/.gitignore | 7 + uplaode-api/migration-sitecore/app.js | 135 + uplaode-api/migration-sitecore/index.d.ts | 5 + uplaode-api/migration-sitecore/index.js | 11 + .../migration-sitecore/libs/configuration.js | 72 + .../migration-sitecore/libs/contenttypes.js | 572 +++ .../migration-sitecore/libs/convert.js | 83 + .../migration-sitecore/libs/reference.js | 183 + uplaode-api/migration-sitecore/package.json | 43 + .../migration-sitecore/utils/dateChanger.js | 12 + .../migration-sitecore/utils/helper.js | 62 + uplaode-api/migration-sitecore/utils/index.js | 48 + uplaode-api/package-lock.json | 3871 ++++++++++++++++- uplaode-api/package.json | 2 + uplaode-api/src/controllers/sitecore/index.ts | 39 + uplaode-api/src/routes/index.ts | 4 +- 21 files changed, 5046 insertions(+), 122 deletions(-) delete mode 100644 api/example.env create mode 100644 uplaode-api/migration-sitecore/.gitignore create mode 100644 uplaode-api/migration-sitecore/app.js create mode 100644 uplaode-api/migration-sitecore/index.d.ts create mode 100644 uplaode-api/migration-sitecore/index.js create mode 100644 uplaode-api/migration-sitecore/libs/configuration.js create mode 100644 uplaode-api/migration-sitecore/libs/contenttypes.js create mode 100644 uplaode-api/migration-sitecore/libs/convert.js create mode 100644 uplaode-api/migration-sitecore/libs/reference.js create mode 100644 uplaode-api/migration-sitecore/package.json create mode 100644 uplaode-api/migration-sitecore/utils/dateChanger.js create mode 100644 uplaode-api/migration-sitecore/utils/helper.js create mode 100644 uplaode-api/migration-sitecore/utils/index.js create mode 100644 uplaode-api/src/controllers/sitecore/index.ts diff --git a/.gitignore b/.gitignore index 361669648..d05e5b718 100644 --- a/.gitignore +++ b/.gitignore @@ -351,4 +351,6 @@ MigrationBackup/ uploade-api/node_modules uploade-api/build -package-lock.json \ No newline at end of file +package-lock.json +ui/.env +uplaode-api/sitecoreMigrationData \ No newline at end of file diff --git a/api/example.env b/api/example.env deleted file mode 100644 index 7879b26de..000000000 --- a/api/example.env +++ /dev/null @@ -1,5 +0,0 @@ -PORT= -APP_TOKEN_KEY= -MONGODB_URI= -UPLOAD_BUCKET= -AWS_REGION= \ No newline at end of file diff --git a/api/src/database.ts b/api/src/database.ts index 0e7d331ac..68d71d3bb 100644 --- a/api/src/database.ts +++ b/api/src/database.ts @@ -4,11 +4,14 @@ import fs from "fs"; const connectToDatabase = async () => { try { + // await mongoose.connect(config.MONGODB_URI, { + // ...(config.APP_ENV === "production" ? { autoIndex: false } : {}), + // }); + //check if the database folder exists if (!fs.existsSync("./database")) { fs.mkdirSync("./database"); } logger.info("successfully connecting to Low DB"); - } catch (error) { logger.error("Error while connecting to Low DB:", error); process.exit(1); diff --git a/ui/package.json b/ui/package.json index 61ce94f3e..69f4f12c9 100644 --- a/ui/package.json +++ b/ui/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@contentstack/json-rte-serializer": "^2.0.5", - "@contentstack/utils": "1.3.1", + "@contentstack/utils": "^1.3.3", "@contentstack/venus-components": "1.5.1", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", diff --git a/uplaode-api/.eslintrc.json b/uplaode-api/.eslintrc.json index 9bf23e542..18d8aee21 100644 --- a/uplaode-api/.eslintrc.json +++ b/uplaode-api/.eslintrc.json @@ -2,13 +2,14 @@ "root": true, "env": { "browser": true, + "node": true, "es2021": true }, "extends": ["prettier", "eslint:recommended", "plugin:@typescript-eslint/recommended"], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 2022, - "project": ["./tsconfig.json"], + "project": [], "sourceType": "module" }, "plugins": ["@typescript-eslint", "prettier"], diff --git a/uplaode-api/migration-sitecore/.gitignore b/uplaode-api/migration-sitecore/.gitignore new file mode 100644 index 000000000..6cd304faf --- /dev/null +++ b/uplaode-api/migration-sitecore/.gitignore @@ -0,0 +1,7 @@ +csMigrationData +node_modules +logs +sitecoreMigrationData +Alaska +data +_ \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/app.js b/uplaode-api/migration-sitecore/app.js new file mode 100644 index 000000000..7506868af --- /dev/null +++ b/uplaode-api/migration-sitecore/app.js @@ -0,0 +1,135 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +var path = require("path"), + chalk = require("chalk"), + fs = require("fs"), + inquirer = require("inquirer"), + sequence = require("when/sequence"), + helper = require("./utils/helper"); + +_ = require("lodash"); +const Messages = require("./utils/message"); +const messages = new Messages("wordpress").msgs; + +config = require("./config"); +global.errorLogger = require("./utils/logger")("error").error; +global.successLogger = require("./utils/logger")("success").log; +global.warnLogger = require("./utils/logger")("warn").log; + +var modulesList = [ + // "convert", + // "configuration", + // "assets", + "contenttypes", + "reference", + // "template", + "entries", + // "staticHtml", +]; //to create entries +// var contentList = ["convert"]; // to create content type for the entries +var _export = []; + +const migFunction = () => { + try { + global.filePath = undefined; + // Module List for Entries + for (var i = 0, total = modulesList.length; i < total; i++) { + var ModuleExport = require("./libs/" + modulesList[i] + ".js"); + var moduleExport = new ModuleExport(); + _export.push( + (function (moduleExport) { + return function () { + return moduleExport.start(); + }; + })(moduleExport) + ); + } + + // Content List + //create schema for the entries we have created + // for (var i = 0, total = contentList.length; i < total; i++) { + // var ContentExport = require("./content_types/" + contentList[i] + ".js"); + // var contentExport = new ContentExport(); + // _export.push( + // (function (contentExport) { + // return function () { + // return contentExport.start(); + // }; + // })(contentExport) + // ); + // } + } catch (error) { + console.log(error.message); + } + + var taskResults = sequence(_export); + + taskResults + .then(async function (results) { + console.log(chalk.green("\Data exporting has been completed")); + }) + .catch(function (error) { + errorLogger(error); + }); +}; + +// to check if file exist or not +// const fileCheck = (csFileName, csFilePath) => { +// const allowedExtension = ".xml"; +// const extension = path.extname(global.config.xml_filename); +// if (allowedExtension === extension) { +// if (fs.existsSync(global.config.xml_filename)) { +// migFunction(); +// } else { +// console.log( +// chalk.red(`Please check`), +// chalk.yellow(`File name "${csFileName}"`), +// chalk.red(`or`), +// chalk.yellow(`Filepath "${csFilePath}"`), +// chalk.red(`are valid or not and try again!`) +// ); +// XMLMigration(); +// } +// } else { +// console.log(chalk.red("use only .xml extension file")); +// } +// }; + +module.exports = XMLMigration = async () => { + const question = [ + { + type: "input", + name: "csFilePath", + message: messages.promptFilePath, + validate: (csFilePath) => { + if (!csFilePath || csFilePath.trim() === "") { + console.log(chalk.red("Please insert filepath!")); + return false; + } + this.name = csFilePath; + return true; + }, + }, + ]; + + inquirer.prompt(question).then(async (answer) => { + try { + global.config.sitecore_folder = + // answer?.csFilePath + // "/Users/umesh.more/Downloads/history-only/items" + // "/Users/umesh.more/Downloads/package 75/items/master/sitecore/content/Common/Configuration" + // "/Users/umesh.more/Downloads/package 81/items"; + // "/Users/umesh.more/Downloads/package 82/items", + // "/Users/umesh.more/Documents/package 2/items" + // "/Users/umesh.more/Downloads/package 77/items" + // "/Users/umesh.more/Downloads/package 45/items/master/sitecore/content" + // "/Users/umesh.more/Downloads/package 45/items/master/sitecore/content" + // "/Users/umesh.more/Documents/package/items" + "/Users/umesh.more/Downloads/package 45/items" + // "/Users/umesh.more/Downloads/package 45/items/master/sitecore/templates" + // "/Users/umesh.more/Downloads/package 45/items/master/sitecore/content/Common/Configuration" + migFunction(); + } catch (error) { + console.log(chalk.red(error.message)); + } + }); +}; diff --git a/uplaode-api/migration-sitecore/index.d.ts b/uplaode-api/migration-sitecore/index.d.ts new file mode 100644 index 000000000..cfa173905 --- /dev/null +++ b/uplaode-api/migration-sitecore/index.d.ts @@ -0,0 +1,5 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires +import contentTypes from "./libs/contenttypes.js"; + +// module.exports = { contentTypes = contentTypes?.ExtractContentTypes }; +export default contentTypes; \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/index.js b/uplaode-api/migration-sitecore/index.js new file mode 100644 index 000000000..93c0a2ee6 --- /dev/null +++ b/uplaode-api/migration-sitecore/index.js @@ -0,0 +1,11 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires +const contentTypes = require("./libs/contenttypes.js"); +// eslint-disable-next-line @typescript-eslint/no-var-requires +const ExtractConfiguration = require("./libs/configuration.js") +// eslint-disable-next-line @typescript-eslint/no-var-requires +const reference = require("./libs/reference.js"); +module.exports = { + contentTypes, + ExtractConfiguration, + reference +} diff --git a/uplaode-api/migration-sitecore/libs/configuration.js b/uplaode-api/migration-sitecore/libs/configuration.js new file mode 100644 index 000000000..7875dde07 --- /dev/null +++ b/uplaode-api/migration-sitecore/libs/configuration.js @@ -0,0 +1,72 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const path = require("path"); +const read = require("fs-readdir-recursive"); +const helper = require("../utils/helper"); + + +const assignFolderName = ({ path }) => { + const spliter = "/sitecore"; + const newPath = path.split(spliter)?.[1]; + return `${spliter}${newPath}`; +} + + + + +function ExtractConfiguration(sitecore_folder) { + const xml_folder = read(sitecore_folder); + const obj = {}; + const treeObj = {}; + for (let i = 0; i < xml_folder?.length; i++) { + if ((xml_folder?.[i]?.includes("data.json") || xml_folder?.[i]?.includes("data.json.json")) && !xml_folder?.[i]?.includes("undefined.json")) { + const path = xml_folder?.[i] + const data = helper?.readFile(`${sitecore_folder}/${xml_folder?.[i]}`) + if (data?.item?.$?.template === "configuration group") { + let newPath = path?.split("/{")?.[0]; + const groupPath = read(`${sitecore_folder}/${newPath}`) + let arrayValue = []; + let multiValueArrayTree = []; + groupPath?.forEach((item) => { + if ((item?.includes("data.json") || item?.includes("data.json.json")) && !item?.includes("undefined.json")) { + const conf = helper?.readFile(`${sitecore_folder}/${newPath}/${item}`) + const value = conf?.item?.fields?.field?.find((item) => item?.$?.key === "value") + if (value) { + arrayValue.push({ key: conf?.item?.$?.name, value: value?.content !== "" ? value?.content : conf?.item?.$?.name }) + } else { + arrayValue.push({ value: conf?.item?.$?.name }) + } + multiValueArrayTree.push({ key: conf?.item?.$?.name, value: conf?.item?.$?.id }) + } + }) + obj[assignFolderName({ path: `${sitecore_folder}/${newPath}` })] = arrayValue; + treeObj[assignFolderName({ path: `${sitecore_folder}/${newPath}` })] = multiValueArrayTree; + } + } + } + helper.writeFile( + path.join( + process.cwd(), + "sitecoreMigrationData/MapperData", + ), + JSON.stringify(obj, null, 4), + "configuration", + (err) => { + if (err) throw err; + } + ); + helper.writeFile( + path.join( + process.cwd(), + "sitecoreMigrationData/MapperData", + ), + JSON.stringify(treeObj, null, 4), + "configurationTree", + (err) => { + if (err) throw err; + } + ); +} + + + +module.exports = ExtractConfiguration; \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/libs/contenttypes.js b/uplaode-api/migration-sitecore/libs/contenttypes.js new file mode 100644 index 000000000..0de0efd3e --- /dev/null +++ b/uplaode-api/migration-sitecore/libs/contenttypes.js @@ -0,0 +1,572 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const path = require("path"); +const _ = require("lodash"); +const read = require("fs-readdir-recursive"); +const helper = require("../utils/helper"); +const restrictedUid = require("../utils"); +const extraField = "title"; +const configChecker = "/content/Common/Configuration"; +const append = "a" + + +function isKeyPresent(keyToFind, timeZones) { + return timeZones?.some?.(timeZone => Object?.keys?.(timeZone)?.includes?.(keyToFind)); +} + +const createTemplate = ({ components }) => { + components.item.$.field = components?.item?.fields?.field + return components?.item?.$ +} + +function startsWithNumber(str) { + return /^\d/.test(str); +} + +const uidCorrector = ({ uid }) => { + if (startsWithNumber(uid)) { + return `${append}_${_.replace(uid, new RegExp("[ -]", "g"), '_')?.toLowerCase()}`?.replace?.("$", ""); + } + const newUid = _.replace(uid, new RegExp("[ -]", "g"), '_')?.toLowerCase() + return newUid?.replace?.("$", "") +} + + +const templatesComponents = ({ path, basePath }) => { + const fields = []; + for (let i = 0; i < path?.length; i++) { + const allFields = []; + const allPaths = read(path?.[i]?.pth) + for (let j = 0; j < allPaths?.length; j++) { + if (allPaths?.[j]?.includes("/data.json") || allPaths?.[j]?.includes("/data.json.json")) { + const innerField = []; + const components = helper.readFile( + `${path?.[i]?.pth}/${allPaths?.[j]}` + ); + const data = components?.item?.$ ?? {}; + components?.item?.fields?.field.forEach((item) => { + if (item?.$?.key === "type" || item?.$?.key === "source" || item?.$?.key === extraField) { + innerField.push({ + content: item.content, + ...item.$ + }) + } + }) + if (innerField?.length) { + data.fields = innerField; + allFields.push(data); + } + } + } + fields?.push({ meta: path?.[i]?.obj?.item?.$, schema: allFields }) + } + return fields; +} + +const templateStandardValues = ({ components }) => { + const standardValues = []; + const data = components?.item?.$ ?? {}; + components?.item?.fields?.field.forEach((item) => { + if (!item?.$?.key.includes("__")) { + standardValues.push({ + content: item.content, + ...item.$ + }) + } + }) + data.fields = standardValues; + return data; +} + +const contentTypeKeyMapper = ({ template, contentType, contentTypeKey = "contentTypeKey" }) => { + let keyMapper = {}; + const keys = helper.readFile( + path.join(process.cwd(), `/sitecoreMigrationData/MapperData/${contentTypeKey}.json`) + ); + if (keys) { + keyMapper = keys; + } + keyMapper[template?.id] = contentType?.uid; + helper.writeFile( + path.join( + process.cwd(), + "sitecoreMigrationData/MapperData" + ), + JSON.stringify(keyMapper, null, 4), + contentTypeKey, + (err) => { + if (err) throw err; + } + ); +} + +const ContentTypeSchema = ({ type, name, uid, default_value = "", description = "", id, choices = [{ value: "NF" }], advanced, sourLet, sitecoreKey, isFromMapper = false }) => { + const isPresent = restrictedUid?.find((item) => item === uid); + if (isPresent) { + uid = `${uid}_changed` + } + switch (type) { + case 'Single-Line Text': { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "single_line_text", + "backupFieldType": "single_line_text" + } + } + case 'Checkbox': { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "boolean", + "backupFieldType": "boolean" + + } + } + case 'Rich Text': { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "json", + "backupFieldType": "json" + } + } + + case 'Droplist': { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "dropdown", + "backupFieldType": "dropdown" + } + } + + case "Image": { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "file", + "backupFieldType": "file" + } + } + case "General Link": + case "Internal Link": { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "link", + "backupFieldType": "link" + } + } + + case "Multi-Line Text": { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "multi_line_text", + "backupFieldType": "multi_line_text" + } + } + + + case "Integer": + case "Number": { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "number", + "backupFieldType": "number" + } + } + + + case "Date": + case "Time": { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "isodate", + "backupFieldType": "isodate" + } + } + + case 'Grouped Droplist': { + if (choices?.length) { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "dropdown", + "backupFieldType": "dropdown" + } + } + break; + } + case "Treelist": { + if (sourLet?.key !== "source") { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "reference", + "backupFieldType": "reference" + } + } + break; + } + default: { + return { + id, + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "reference", + "backupFieldType": "reference" + } + } + } +} + +function makeUnique({ data }) { + const newData = data; + let tempMapping = {}; + if (newData?.[0]?.key) { + newData?.forEach(choice => { + if (choice?.key) { + if (!tempMapping?.[choice?.value]) { + tempMapping[choice?.value] = []; + } + tempMapping[choice?.value].push(choice?.key); + } + }); + const result = Object?.entries(tempMapping).map(([value, keys]) => { + return { + key: keys?.join('/'), + value: value + }; + }); + const newValue = []; + result?.forEach((item) => { + if (item?.key === undefined) { + newValue?.push({ ...item, key: item?.value }) + } else { + newValue?.push(item) + } + }) + return newValue; + } else { + let uniqueValues = []; + const result = data?.filter(item => { + if (uniqueValues?.includes(item?.value)) { + return false; + } else { + uniqueValues?.push(item?.value); + return true; + } + }); + const newValue = []; + result?.forEach((item) => { + if (item?.key === undefined) { + newValue?.push({ ...item, key: item?.value }) + } else { + newValue?.push(item) + } + }) + return newValue; + } +} + +const groupFlat = (data, item) => { + const flat = []; + if (data?.data_type === "group" && data?.schema?.[0] !== undefined) { + const group = { + uid: item?.meta?.key, + otherCmsField: item?.meta?.name, + otherCmsType: 'Group', + contentstackField: item?.meta?.name, + contentstackFieldUid: uidCorrector({ uid: item?.meta?.key }), + ContentstackFieldType: 'group', + backupFieldType: 'group' + } + flat?.push(group); + data?.schema?.forEach((element) => { + const obj = { + ...element, + uid: `${item?.meta?.key}.${element?.uid}`, + otherCmsField: `${item?.meta?.name} > ${element?.otherCmsField}`, + contentstackField: `${item?.meta?.name} > ${element?.contentstackField}`, + contentstackFieldUid: `${uidCorrector({ uid: item?.meta?.key })}.${element?.contentstackFieldUid}`, + } + flat?.push(obj); + }) + } + return flat; +} + + +const contentTypeMapper = ({ components, standardValues, content_type, basePath, sitecore_folder }) => { + const source = helper.readFile( + path.join(process.cwd(), "/sitecoreMigrationData/MapperData/configuration.json") + ); + const sourceTree = helper.readFile( + path.join(process.cwd(), "/sitecoreMigrationData/MapperData/configurationTree.json") + ); + let mainSchema = []; + components?.forEach((item) => { + if (item?.schema?.length) { + const groupSchema = { + "data_type": "group", + "display_name": item?.meta?.name, + "field_metadata": {}, + "schema": [], + "uid": uidCorrector({ uid: item?.meta?.key }), + "multiple": true, + "mandatory": false, + "unique": false + }; + for (let i = 0; i < item?.schema?.length; i++) { + const field = item?.schema?.[i]; + const appendStandardValues = standardValues?.fields?.find((item) => item?.key === field?.key) + if (appendStandardValues) { + field?.fields?.forEach((item) => { + if (item?.content === appendStandardValues?.type) { + item.standardValues = appendStandardValues + } + }) + } + let compType = {}; + let sourLet = {}; + let sourceType = []; + let advanced = false; + let name = field?.name; + field?.fields?.forEach((item) => { + if (item?.key === "type") { + compType = item; + } + if (item?.key === "source") { + sourLet = item; + if (compType?.content === "Droplink") { + if (sourceTree) { + if (item?.content?.includes(configChecker)) { + sourceType = makeUnique({ data: sourceTree?.[item?.content] }) + compType.content = "Droplist" + if (isKeyPresent("key", sourceType)) { + advanced = true; + } + } else { + console.log("🚀 ~ file: contenttypes.js:305 ~ field?.fields?.forEach ~ item?.content:", item?.content) + } + } else { + console.log("🚀 ~ file: contenttypes.js:371 ~ field?.fields?.forEach ~ compType:", compType?.standardValues?.key) + + } + } else { + if (source) { + if (item?.content?.includes("datasource=")) { + const gUid = item?.content?.split("}")?.[0]?.replace("datasource={", "") + if (gUid) { + const dataSourcePaths = read(`${sitecore_folder}/master/sitecore/content/Common`) + let isDataSourcePresent = dataSourcePaths?.find((sur) => sur?.includes(`{${gUid}}`)); + isDataSourcePresent = isDataSourcePresent?.split(`{${gUid}}`)?.[0] + if (isDataSourcePresent) { + const optionsPath = read(`${sitecore_folder}/master/sitecore/content/Common/${isDataSourcePresent}`) + const refName = []; + optionsPath?.forEach((newPath) => { + if (newPath?.includes("data.json.json") | newPath?.includes("data.json")) { + const data = helper.readFile(`${sitecore_folder}/master/sitecore/content/Common/${isDataSourcePresent}/${newPath}`) + if (data?.item?.$?.template) { + refName.push(data?.item?.$?.template) + } + } + }) + if (refName?.length) { + const unique = [...new Set(refName)] + contentTypeKeyMapper({ template: { id: content_type?.contentstackUid }, contentType: { uid: { name, uid: field?.key, unique } }, contentTypeKey: "treeListRef" }) + } + } + } + } else { + sourceType = makeUnique({ data: source?.[item?.content] }) + if (isKeyPresent("key", sourceType)) { + advanced = true; + } + } + } + } + } + if (item?.key === extraField) { + if (item?.content && item?.content !== "") { + name = item?.content + } + } + }) + if (compType?.content !== "Droptree") { + groupSchema?.schema?.push(ContentTypeSchema({ + name, + uid: uidCorrector({ uid: field?.key }), + type: compType?.content, + default_value: compType?.standardValues?.content, + id: field?.id, + choices: sourceType?.slice(0, 98), + advanced, + sourLet, + sitecoreKey: field?.key, + isFromMapper: true + })); + } + } + mainSchema?.push(...groupFlat(groupSchema, item)); + } + const isUrlfound = mainSchema?.find((rt) => rt?.contentstackFieldUid?.toLowerCase?.() === "url") + if (isUrlfound === undefined) { + mainSchema?.unshift( + { + uid: "Url", + "otherCmsField": "url", + "otherCmsType": "text", + "contentstackField": "Url", + "contentstackFieldUid": "url", + "ContentstackFieldType": "url", + "backupFieldType": "url" + }) + } + const isPresent = mainSchema?.find((item) => + item?.contentstackFieldUid?.toLowerCase?.() === "title" + ) + if (isPresent === undefined) { + mainSchema.unshift({ + uid: "Title", + "otherCmsField": "title", + "otherCmsType": "text", + "contentstackField": "Title", + "contentstackFieldUid": "title", + "ContentstackFieldType": "text", + "backupFieldType": "text" + }) + } + }) + return mainSchema; +} + +const contentTypeMaker = ({ template, basePath, sitecore_folder }) => { + const content_type = { + id: template?.id, + "otherCmsTitle": template?.name, + "otherCmsUid": template?.key, + "isUpdated": false, + "updateAt": "", + "contentstackTitle": template?.name, + "contentstackUid": uidCorrector({ uid: template?.key }), + } + template?.field?.forEach((item) => { + if (item?.$?.key === "__base template" && item?.$?.type === "tree list") { + contentTypeKeyMapper({ template, contentType: { uid: { ...item?.$, content: item?.content } }, contentTypeKey: "base" }) + } + }) + content_type.fieldMapping = contentTypeMapper({ components: template?.components, standardValues: template?.standardValues, content_type, basePath, sitecore_folder }) + return content_type; +} + + + + +function singleContentTypeCreate({ templatePaths, globalPath, sitecore_folder }) { + const newPath = read(templatePaths); + const templatesComponentsPath = []; + let templatesStandaedValuePath = {}; + let templatesMetaDataPath = {}; + for (let i = 0; i < newPath?.length; i++) { + if (newPath?.[i]?.includes("data.json") || newPath?.[i]?.includes("/data.json.json")) { + const data = helper?.readFile(`${templatePaths}/${newPath?.[i]}`); + if (data?.item?.$?.template === "template section") { + templatesComponentsPath?.push( + { + pth: `${templatePaths}/${newPath?.[i]}`?.split("/{")?.[0], + obj: data + } + ); + } else if (data?.item?.$?.template === "template") { + templatesMetaDataPath = data; + } else if (data?.item?.$?.key?.includes?.("standard values")) { + templatesStandaedValuePath = data; + } + } + } + const template = createTemplate({ components: templatesMetaDataPath }); + template.components = templatesComponents({ path: templatesComponentsPath, basePath: templatePaths }); + template.standardValues = templateStandardValues({ components: templatesStandaedValuePath }) + const contentType = contentTypeMaker({ template, basePath: globalPath, sitecore_folder }) + if (contentType?.fieldMapping?.length) { + helper.writeFile( + path.join( + process.cwd(), + "sitecoreMigrationData/content_types", + ), + JSON.stringify(contentType, null, 4), + contentType?.contentstackUid, + (err) => { + if (err) throw err; + } + ); + contentTypeKeyMapper({ template, contentType: { uid: contentType?.contentstackUid } }) + } + return true; +} + + +function ExtractContentTypes(sitecore_folder) { + const folder = read(sitecore_folder); + const templatePaths = []; + for (let i = 0; i < folder?.length; i++) { + if (folder?.[i]?.includes("templates") && (folder?.[i]?.includes("/data.json") || folder?.[i]?.includes("/data.json.json"))) { + const data = helper?.readFile(`${sitecore_folder}/${folder?.[i]}`) + if (data?.item?.$?.template === "template") { + templatePaths?.push(`${sitecore_folder}/${folder?.[i]}`?.split("/{")?.[0]) + } + } + } + if (templatePaths?.length) { + const unique = [...new Set(templatePaths)] + unique?.forEach((item) => { + singleContentTypeCreate({ templatePaths: item, globalPath: folder, sitecore_folder }) + }) + } else { + throw { message: "Templates Not Found." } + } +} + + + +module.exports = ExtractContentTypes; \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/libs/convert.js b/uplaode-api/migration-sitecore/libs/convert.js new file mode 100644 index 000000000..246b0e0f1 --- /dev/null +++ b/uplaode-api/migration-sitecore/libs/convert.js @@ -0,0 +1,83 @@ +/** + * External module Dependencies. + */ +/* eslint-disable @typescript-eslint/no-var-requires */ +const mkdirp = require("mkdirp"); +const path = require("path"); +const fs = require("fs"), +const parseString = require("xml2js").parseString, +const read = require("fs-readdir-recursive"); +/** + * Internal module Dependencies. + */ +const helper = require("../utils/helper"); +const config = { + "data": "./sitecoreMigrationData", + "backup": "./backupMigrationData", + "xml_filename": "", + "sitecore_folder": "", + "json_file": "", + "json_filename": "data.json", + "table_prefix": "wp_", + "entryfolder": "entries", +} +/** + * Create folders and files if they are not created + */ + + + +function ExtractFiles(sitecore_folder) { + const xml_folder = read(sitecore_folder) + if (!fs.existsSync(path.join(process.cwd(), config.data))) { + mkdirp.sync(path.join(process.cwd(), config.data)); + for (let i = 0; i < xml_folder.length; i++) { + const xml_data = `${sitecore_folder}/`.concat(xml_folder[i]) + const json_data = xml_data.replace('/xml', '') + if (!fs.existsSync(path.resolve(json_data, config.json_filename))) { + parseString(helper.readXMLFile(xml_data), { explicitArray: false }, function (err, result) { + if (err) { + console.error("failed to parse xml: ", err); + } else { + const filePath = path.join(json_data, config?.json_filename) + fs.writeFileSync(`${filePath}.json`, JSON.stringify(result, null, 4), "utf-8"); + } + }) + } else { + fs.unlink(path.resolve(json_data, config.json_filename), (err) => { + if (err) throw err; + }); + } + } + } else { + for (let i = 0; i < xml_folder.length; i++) { + if (xml_folder?.[i]?.includes?.("/xml")) { + const xml_data = `${sitecore_folder}/${xml_folder?.[i]}` + const json_data = xml_data.replace('/xml', '') + if (!fs.existsSync(path.resolve(json_data, config.json_filename))) { + parseString(helper.readXMLFile(xml_data), { explicitArray: false }, function (err, result) { + if (err) { + console.error("failed to parse xml: ", err); + } else { + const filePath = path.join(json_data, config?.json_filename) + fs.writeFileSync(filePath, JSON.stringify(result, null, 4), "utf-8"); + } + }) + } else { + fs.unlink(path.resolve(json_data, config.json_filename), (err) => { + if (err) { + console.log(err) + throw err + } + console.log('File was deleted'); + }); + } + } + } + } +} + + + + +module.exports = ExtractFiles; \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/libs/reference.js b/uplaode-api/migration-sitecore/libs/reference.js new file mode 100644 index 000000000..898c560d1 --- /dev/null +++ b/uplaode-api/migration-sitecore/libs/reference.js @@ -0,0 +1,183 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const path = require("path"); +const fs = require("fs"); +const _ = require("lodash"); +const read = require("fs-readdir-recursive"); +const helper = require("../utils/helper"); +const restrictedUid = require("../utils"); +const append = "a" +const contentFolderPath = path.resolve("sitecoreMigrationData", "content_types") || {}; + +function startsWithNumber(str) { + return /^\d/.test(str); +} + +const uidCorrector = ({ uid }) => { + if (startsWithNumber(uid)) { + return `${append}_${_.replace(uid, new RegExp("[ -]", "g"), '_')?.toLowerCase()}` + } + return _.replace(uid, new RegExp("[ -]", "g"), '_')?.toLowerCase() +} + +const emptyGlobalFiled = () => { + helper.writeFile( + path.join( + process.cwd(), + "sitecoreMigrationData/global_fields", + ), + JSON.stringify([], null, 4), + "globalfields", + (err) => { + if (err) throw err; + } + ); +} + + +function ExtractRef() { + emptyGlobalFiled() + const basePages = helper.readFile(path.join(process.cwd(), "/sitecoreMigrationData/MapperData/base.json")); + const contentTypeKeys = helper.readFile(path.join(process.cwd(), "/sitecoreMigrationData/MapperData/contentTypeKey.json")); + const treeListRef = helper.readFile(path.join(process.cwd(), "/sitecoreMigrationData/MapperData/treeListRef.json")); + const globalFieldUids = []; + const contentTypesPaths = read(contentFolderPath); + if (contentTypesPaths?.length && basePages && contentTypeKeys && treeListRef) { + contentTypesPaths?.forEach((item) => { + const contentType = helper.readFile(`${contentFolderPath}/${item}`) + if (contentType?.id || contentType?.contentstackUid) { + const refTree = treeListRef[contentType?.contentstackUid] + if (refTree?.unique?.length) { + const contentTypesPathsMaped = contentTypesPaths?.map((item) => item?.replace?.(".json", "")) + refTree.unique = refTree?.unique?.map((item) => uidCorrector({ uid: item })) + const uids = contentTypesPathsMaped?.filter((item) => refTree?.unique?.includes(item)); + if (uids?.length) { + let newUid = uidCorrector({ uid: refTree?.uid }); + const isPresent = restrictedUid?.find((item) => item === newUid); + if (isPresent) { + newUid = `${newUid}_changed` + } + const schemaObject = { + uid: refTree?.uid, + otherCmsField: refTree?.name, + otherCmsType: "reference", + contentstackField: refTree?.name, + contentstackFieldUid: newUid, + ContentstackFieldType: "reference", + isDeleted: false, + backupFieldType: "reference", + refrenceTo: uids, + } + contentType.fieldMapping.push(schemaObject) + } + } + const itHasBasePresent = basePages[contentType?.id]; + if (itHasBasePresent?.content) { + const references = itHasBasePresent?.content?.split("|"); + if (references?.length) { + const uids = []; + references?.forEach((ref) => { + const singleRef = contentTypeKeys?.[ref]; + if (singleRef) { + uids?.push(singleRef); + } + }) + const newUid = contentType?.fieldMapping?.map((item) => item?.contentstackFieldUid) + if (uids?.length) { + uids?.forEach((key) => { + globalFieldUids?.push(key); + let newKey = key; + const isPresent = newUid?.find((item) => item === key) + if (isPresent) { + newKey = `${isPresent}_changed` + } + const schemaObject = { + uid: newKey, + otherCmsField: newKey, + otherCmsType: "reference", + contentstackField: newKey, + contentstackFieldUid: uidCorrector({ uid: newKey }), + ContentstackFieldType: "global_field", + isDeleted: false, + backupFieldType: "global_field", + refrenceTo: key, + } + contentType.fieldMapping.push(schemaObject) + }) + } + } + } + } + helper.writeFile( + path.join( + process.cwd(), + "sitecoreMigrationData/content_types" + ), + JSON.stringify(contentType, null, 4), + contentType?.contentstackUid, + (err) => { + if (err) throw err; + } + ); + }) + } + if (globalFieldUids?.length) { + const unique = [...new Set(globalFieldUids)] + const allGlobalFiels = []; + const data = helper.readFile(path.join( + process.cwd(), + "sitecoreMigrationData/global_fields", + "globalfields" + )) + if (data?.length) { + allGlobalFiels.push(...data) + } + unique?.forEach((item) => { + const content = helper.readFile(`${contentFolderPath}/${item}.json`) + allGlobalFiels?.push(content); + }) + if (allGlobalFiels?.length) { + allGlobalFiels?.forEach((item) => { + const schemaData = []; + item?.fieldMapping?.forEach?.((schema) => { + if (!(["title", "url"]?.includes(schema?.contentstackFieldUid))) { + schemaData?.push(schema); + } + }) + item.fieldMapping = schemaData; + }) + helper.writeFile( + path.join( + process.cwd(), + "sitecoreMigrationData/global_fields" + ), + JSON.stringify(allGlobalFiels, null, 4), + "globalfields", + (err) => { + if (err) throw err; + } + ); + } + unique?.forEach((item) => { + fs.unlinkSync(`${contentFolderPath}/${item}.json`) + }) + } + return { + path: path.join( + process.cwd(), + "sitecoreMigrationData" + ), + contentTypeUids: read(path.join( + process.cwd(), + "sitecoreMigrationData/content_types" + )), + globalFieldUids: read(path.join( + process.cwd(), + "sitecoreMigrationData/global_fields" + )) + }; +} + + + + +module.exports = ExtractRef; \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/package.json b/uplaode-api/migration-sitecore/package.json new file mode 100644 index 000000000..7dff6c8f0 --- /dev/null +++ b/uplaode-api/migration-sitecore/package.json @@ -0,0 +1,43 @@ +{ + "name": "migration-sitecore", + "version": "1.0.0", + "description": "", + "main": "index.js", + "typings": "index.d.ts", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/contentstack-expert-services/migration-wordpress-xml.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/contentstack-expert-services/migration-wordpress-xml/issues" + }, + "homepage": "https://github.com/contentstack-expert-services/migration-wordpress-xml#readme", + "dependencies": { + "@contentstack/json-rte-serializer": "^2.0.2", + "@sitecore-jss/sitecore-jss-cli": "^21.2.4", + "ansi-colors": "^4.1.3", + "axios": "^1.3.4", + "chalk": "^4.1.0", + "cheerio": "^1.0.0-rc.12", + "cli-progress": "^3.11.1", + "fs-readdir-recursive": "^1.1.0", + "inquirer": "^8.2.4", + "jsdom": "^19.0.0", + "lodash": "^4.17.21", + "mkdirp": "^1.0.4", + "moment": "^2.30.1", + "pdf-stream": "^1.3.2", + "request": "^2.88.2", + "rimraf": "^4.1.2", + "uid": "^2.0.2", + "when": "^3.7.8", + "winston": "^3.7.2", + "xml2js": "^0.4.23" + } +} \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/utils/dateChanger.js b/uplaode-api/migration-sitecore/utils/dateChanger.js new file mode 100644 index 000000000..5ad1d8d8e --- /dev/null +++ b/uplaode-api/migration-sitecore/utils/dateChanger.js @@ -0,0 +1,12 @@ +const moment = require('moment'); + +function dateConverter({ inputDate }) { + if (inputDate) { + const outputDate = moment(inputDate)?.format('YYYY-MM-DDTHH:mm:ss.SSS[Z]'); + return outputDate; + } + return null; +} + + +module.exports = dateConverter; \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/utils/helper.js b/uplaode-api/migration-sitecore/utils/helper.js new file mode 100644 index 000000000..c1a1b71db --- /dev/null +++ b/uplaode-api/migration-sitecore/utils/helper.js @@ -0,0 +1,62 @@ +/** + * External module Dependencies. + */ +var fs = require("fs"); +var path = require("path"); +var mkdirp = require("mkdirp"); + +/** + * Internal module Dependencies. + */ + +// for checking XML file +exports.readXMLFile = function (filePath) { + var data; + if (fs.existsSync(filePath)) data = fs.readFileSync(filePath, "utf-8"); + console.log("🚀 ~ file: helper.js:16 ~ data:", data) + return data; +}; + +exports.readFile = function (filePath, parse) { + try { + parse = typeof parse == "undefined" ? true : parse; + filePath = path.resolve(filePath); + let data; + if (fs.existsSync(filePath)) { + data = parse ? JSON.parse(fs.readFileSync(filePath, "utf-8")) : data; + return data; + } else { + return undefined; + } + } catch (err) { + console.log("🚀 ~ file: helper.js:29 ~ err:", err) + } +}; + +exports.writeFile = function (filePath, data, pathName) { + if (fs.existsSync(filePath)) { + filePath = path.resolve(`${filePath}/${pathName}`); + data = typeof data === "object" ? JSON.stringify(data) : data || "{}"; + fs.writeFileSync(`${filePath}.json`, data, "utf-8"); + } else { + fs.mkdirSync( + filePath, + { recursive: true } + ); + filePath = path.resolve(`${filePath}/${pathName}`); + data = typeof data == "object" ? JSON.stringify(data) : data || "{}"; + fs.writeFileSync(`${filePath}.json`, data, "utf-8"); + } +}; + +exports.appendFile = function (filePath, data) { + filePath = path.resolve(filePath); + fs.appendFileSync(filePath, data); +}; + +exports.makeDirectory = function () { + for (var key in arguments) { + var dirname = path.resolve(arguments[key]); + if (!fs.existsSync(dirname)) mkdirp.sync(dirname); + } +}; diff --git a/uplaode-api/migration-sitecore/utils/index.js b/uplaode-api/migration-sitecore/utils/index.js new file mode 100644 index 000000000..cae85bd5f --- /dev/null +++ b/uplaode-api/migration-sitecore/utils/index.js @@ -0,0 +1,48 @@ +const restrictedUid = [ + "uid", + "api_key", + "created_at", + "deleted_at", + "updated_at", + "tags_array", + "klass_id", + "applikation_id", + "*_ids", + "id", + "_id", + "ACL", + "SYS_ACL", + "DEFAULT_ACL", + "app_user_object_uid", + "built_io_upload", + "__loc", + "tags", + "_owner", + "_version", + "toJSON", + "save", + "update", + "domain", + "shard_account", + "shard_app", + "shard_random", + "hook", + "__indexes", + "__meta", + "created_by", + "updated_by", + "inbuilt_class", + "tenant_id", + "isSystemUser", + "isApplicationUser", + "isNew", + "_shouldLean", + "_shouldFilter", + "options", + "_version", + "__v", + "locale", + "publish_details" +]; + +module.exports = restrictedUid; \ No newline at end of file diff --git a/uplaode-api/package-lock.json b/uplaode-api/package-lock.json index 8451b30d2..027f30fba 100644 --- a/uplaode-api/package-lock.json +++ b/uplaode-api/package-lock.json @@ -12,6 +12,7 @@ "@aws-sdk/client-s3": "^3.490.0", "@contentstack/cli-utilities": "^1.5.12", "@typescript-eslint/parser": "^7.7.1", + "axios": "^1.6.8", "chalk": "^4.1.2", "cors": "^2.8.5", "dotenv": "^16.3.1", @@ -22,6 +23,7 @@ "inquirer": "^9.2.15", "jszip": "^3.10.1", "lodash.isempty": "^4.4.0", + "migration-sitecore": "file:migration-sitecore", "multer": "^1.4.5-lts.1", "node-fetch": "^2.7.0", "prettier": "^2.7.1" @@ -41,6 +43,145 @@ "typescript": "^5.3.3" } }, + "migration-sitecore": { + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@contentstack/json-rte-serializer": "^2.0.2", + "@sitecore-jss/sitecore-jss-cli": "^21.2.4", + "ansi-colors": "^4.1.3", + "axios": "^1.3.4", + "chalk": "^4.1.0", + "cheerio": "^1.0.0-rc.12", + "cli-progress": "^3.11.1", + "fs-readdir-recursive": "^1.1.0", + "inquirer": "^8.2.4", + "jsdom": "^19.0.0", + "lodash": "^4.17.21", + "mkdirp": "^1.0.4", + "moment": "^2.30.1", + "pdf-stream": "^1.3.2", + "request": "^2.88.2", + "rimraf": "^4.1.2", + "uid": "^2.0.2", + "when": "^3.7.8", + "winston": "^3.7.2", + "xml2js": "^0.4.23" + } + }, + "migration-sitecore/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "migration-sitecore/node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, + "migration-sitecore/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "migration-sitecore/node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "migration-sitecore/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "migration-sitecore/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "migration-sitecore/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "migration-sitecore/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "migration-sitecore/node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", @@ -960,6 +1101,31 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@contentstack/json-rte-serializer": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@contentstack/json-rte-serializer/-/json-rte-serializer-2.0.6.tgz", + "integrity": "sha512-qf5svRxtJ/hQj+vAayLgLLF7wFezKvYEE3xve2ihFhilT+ndLO9vWLpmNQ8gsq+CQEdujJEPgPin4LjqubA8kg==", + "dependencies": { + "array-flat-polyfill": "^1.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isempty": "^4.4.0", + "lodash.isequal": "^4.5.0", + "lodash.isobject": "^3.0.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isundefined": "^3.0.1", + "lodash.kebabcase": "^4.1.1", + "uuid": "^8.3.2" + } + }, + "node_modules/@contentstack/json-rte-serializer/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@contentstack/management": { "version": "1.15.3", "resolved": "https://registry.npmjs.org/@contentstack/management/-/management-1.15.3.tgz", @@ -1127,6 +1293,19 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -1211,6 +1390,14 @@ "node": ">= 0.4" } }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "engines": { + "node": ">=8" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1344,123 +1531,353 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@slack/bolt": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/@slack/bolt/-/bolt-3.17.1.tgz", - "integrity": "sha512-N+4WxpkM59RXi7BL3IXUtENnn9cF7TOBn7ttaHpgvlnjUaro+yQyY60arXTlP4ytVDFJ1w0mSdfftcM17h+i2w==", + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dependencies": { - "@slack/logger": "^4.0.0", - "@slack/oauth": "^2.6.2", - "@slack/socket-mode": "^1.3.3", - "@slack/types": "^2.11.0", - "@slack/web-api": "^6.11.2", - "@types/express": "^4.16.1", - "@types/promise.allsettled": "^1.0.3", - "@types/tsscmp": "^1.0.0", - "axios": "^1.6.0", - "express": "^4.16.4", - "path-to-regexp": "^6.2.1", - "please-upgrade-node": "^3.2.0", - "promise.allsettled": "^1.0.2", - "raw-body": "^2.3.3", - "tsscmp": "^1.0.6" - }, - "engines": { - "node": ">=12.13.0", - "npm": ">=6.12.0" + "@hapi/hoek": "^9.0.0" } }, - "node_modules/@slack/bolt/node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" }, - "node_modules/@slack/logger": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-4.0.0.tgz", - "integrity": "sha512-Wz7QYfPAlG/DR+DfABddUZeNgoeY7d1J39OCR2jR+v7VBsB8ezulDK5szTnDDPDwLH5IWhLvXIHlCFZV7MSKgA==", + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sitecore-jss/sitecore-jss": { + "version": "21.5.3", + "resolved": "https://registry.npmjs.org/@sitecore-jss/sitecore-jss/-/sitecore-jss-21.5.3.tgz", + "integrity": "sha512-p5PMi45AzALgbGFD3owOZ8QKvrfP327lrNSBoJP1k6UMn5oUbb15pcXGDo6/ALt75+AHaczKuJMUM+RPeALdWQ==", "dependencies": { - "@types/node": ">=18.0.0" + "axios": "^0.21.1", + "chalk": "^4.1.0", + "debug": "^4.3.1", + "graphql": "^16.5.0", + "graphql-request": "^4.2.0", + "lodash.unescape": "^4.0.1", + "memory-cache": "^0.2.0", + "url-parse": "^1.5.9" }, "engines": { - "node": ">= 18", - "npm": ">= 8.6.0" + "node": ">=12", + "npm": ">=6" } }, - "node_modules/@slack/oauth": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@slack/oauth/-/oauth-2.6.2.tgz", - "integrity": "sha512-2R3MyB/R63hTRXzk5J6wcui59TBxXzhk+Uh2/Xu3Wp3O4pXg/BNucQhP/DQbL/ScVhLvFtMXirLrKi0Yo5gIVw==", + "node_modules/@sitecore-jss/sitecore-jss-cli": { + "version": "21.5.3", + "resolved": "https://registry.npmjs.org/@sitecore-jss/sitecore-jss-cli/-/sitecore-jss-cli-21.5.3.tgz", + "integrity": "sha512-AutEgCwGw7rEneR4o4mtIrFFenx9dQlY8L7uR0zgPxghDVmGkSUZZe2EDCksIF2Rb7mIYt3e7zI9bGLnT+2jNw==", "dependencies": { - "@slack/logger": "^3.0.0", - "@slack/web-api": "^6.11.2", - "@types/jsonwebtoken": "^8.3.7", - "@types/node": ">=12", - "jsonwebtoken": "^9.0.0", - "lodash.isstring": "^4.0.1" + "@sitecore-jss/sitecore-jss-dev-tools": "21.5.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "dotenv": "^16.0.3", + "dotenv-expand": "^10.0.0", + "readline-sync": "^1.4.10", + "resolve": "^1.22.1", + "tmp": "^0.2.1", + "yargs": "^17.6.2" + }, + "bin": { + "jss": "dist/cjs/bin/jss.js" }, "engines": { - "node": ">=12.13.0", - "npm": ">=6.12.0" + "node": ">=12", + "npm": ">=6" } }, - "node_modules/@slack/oauth/node_modules/@slack/logger": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-3.0.0.tgz", - "integrity": "sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==", + "node_modules/@sitecore-jss/sitecore-jss-cli/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { - "@types/node": ">=12.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@sitecore-jss/sitecore-jss-cli/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "engines": { - "node": ">= 12.13.0", - "npm": ">= 6.12.0" + "node": ">=14.14" } }, - "node_modules/@slack/socket-mode": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@slack/socket-mode/-/socket-mode-1.3.3.tgz", - "integrity": "sha512-vN3zG4woRtf2Ut6rZgRW6G/Oe56uLMlnz39I08Q7DOvVfB+1MmDbNv0PNOiFgujdKXJR+bXF41/F/VvryXcqlw==", + "node_modules/@sitecore-jss/sitecore-jss-dev-tools": { + "version": "21.5.3", + "resolved": "https://registry.npmjs.org/@sitecore-jss/sitecore-jss-dev-tools/-/sitecore-jss-dev-tools-21.5.3.tgz", + "integrity": "sha512-MK2iqTIrZXiIEVU7MGDeNA+basbNtTaGQMPZeE7HTsi5kZ3jcfm2LJFr8gyXoOCs6UJlKWKRI7Hlfxf8UpV7JA==", "dependencies": { - "@slack/logger": "^3.0.0", - "@slack/web-api": "^6.11.2", - "@types/node": ">=12.0.0", - "@types/p-queue": "^2.3.2", - "@types/ws": "^7.4.7", - "eventemitter3": "^3.1.0", - "finity": "^0.5.4", - "p-cancelable": "^1.1.0", - "p-queue": "^2.4.2", - "ws": "^7.5.3" + "@sitecore-jss/sitecore-jss": "21.5.3", + "axios": "^1.3.2", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "del": "^6.0.0", + "express": "^4.18.2", + "form-data": "^4.0.0", + "fs-extra": "^11.1.0", + "glob": "^8.1.0", + "import-fresh": "^3.3.0", + "joi": "^17.8.4", + "js-yaml": "^4.1.0", + "jszip": "^3.10.1", + "module-alias": "^2.2.2", + "readline-sync": "^1.4.10", + "resolve": "^1.22.1", + "ts-node": "^10.9.1", + "url-join": "^4.0.1", + "uuid": "^9.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "scjss-deploy": "dist/cjs/bin/deploy.js", + "scjss-verify-setup": "dist/cjs/bin/verify-setup.js" }, "engines": { - "node": ">=12.13.0", - "npm": ">=6.12.0" + "node": ">=12", + "npm": ">=6" } }, - "node_modules/@slack/socket-mode/node_modules/@slack/logger": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-3.0.0.tgz", - "integrity": "sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==", + "node_modules/@sitecore-jss/sitecore-jss-dev-tools/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/@sitecore-jss/sitecore-jss-dev-tools/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dependencies": { - "@types/node": ">=12.0.0" - }, - "engines": { - "node": ">= 12.13.0", - "npm": ">= 6.12.0" + "balanced-match": "^1.0.0" } }, - "node_modules/@slack/types": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@slack/types/-/types-2.11.0.tgz", - "integrity": "sha512-UlIrDWvuLaDly3QZhCPnwUSI/KYmV1N9LyhuH6EDKCRS1HWZhyTG3Ja46T3D0rYfqdltKYFXbJSSRPwZpwO0cQ==", + "node_modules/@sitecore-jss/sitecore-jss-dev-tools/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">= 12.13.0", - "npm": ">= 6.12.0" + "node": ">= 6" } }, - "node_modules/@slack/web-api": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-6.12.0.tgz", + "node_modules/@sitecore-jss/sitecore-jss-dev-tools/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@sitecore-jss/sitecore-jss-dev-tools/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@sitecore-jss/sitecore-jss-dev-tools/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@sitecore-jss/sitecore-jss-dev-tools/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@sitecore-jss/sitecore-jss/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/@sitecore-jss/sitecore-jss/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@sitecore-jss/sitecore-jss/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@slack/bolt": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/@slack/bolt/-/bolt-3.17.1.tgz", + "integrity": "sha512-N+4WxpkM59RXi7BL3IXUtENnn9cF7TOBn7ttaHpgvlnjUaro+yQyY60arXTlP4ytVDFJ1w0mSdfftcM17h+i2w==", + "dependencies": { + "@slack/logger": "^4.0.0", + "@slack/oauth": "^2.6.2", + "@slack/socket-mode": "^1.3.3", + "@slack/types": "^2.11.0", + "@slack/web-api": "^6.11.2", + "@types/express": "^4.16.1", + "@types/promise.allsettled": "^1.0.3", + "@types/tsscmp": "^1.0.0", + "axios": "^1.6.0", + "express": "^4.16.4", + "path-to-regexp": "^6.2.1", + "please-upgrade-node": "^3.2.0", + "promise.allsettled": "^1.0.2", + "raw-body": "^2.3.3", + "tsscmp": "^1.0.6" + }, + "engines": { + "node": ">=12.13.0", + "npm": ">=6.12.0" + } + }, + "node_modules/@slack/bolt/node_modules/path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + }, + "node_modules/@slack/logger": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-4.0.0.tgz", + "integrity": "sha512-Wz7QYfPAlG/DR+DfABddUZeNgoeY7d1J39OCR2jR+v7VBsB8ezulDK5szTnDDPDwLH5IWhLvXIHlCFZV7MSKgA==", + "dependencies": { + "@types/node": ">=18.0.0" + }, + "engines": { + "node": ">= 18", + "npm": ">= 8.6.0" + } + }, + "node_modules/@slack/oauth": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@slack/oauth/-/oauth-2.6.2.tgz", + "integrity": "sha512-2R3MyB/R63hTRXzk5J6wcui59TBxXzhk+Uh2/Xu3Wp3O4pXg/BNucQhP/DQbL/ScVhLvFtMXirLrKi0Yo5gIVw==", + "dependencies": { + "@slack/logger": "^3.0.0", + "@slack/web-api": "^6.11.2", + "@types/jsonwebtoken": "^8.3.7", + "@types/node": ">=12", + "jsonwebtoken": "^9.0.0", + "lodash.isstring": "^4.0.1" + }, + "engines": { + "node": ">=12.13.0", + "npm": ">=6.12.0" + } + }, + "node_modules/@slack/oauth/node_modules/@slack/logger": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-3.0.0.tgz", + "integrity": "sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==", + "dependencies": { + "@types/node": ">=12.0.0" + }, + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, + "node_modules/@slack/socket-mode": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@slack/socket-mode/-/socket-mode-1.3.3.tgz", + "integrity": "sha512-vN3zG4woRtf2Ut6rZgRW6G/Oe56uLMlnz39I08Q7DOvVfB+1MmDbNv0PNOiFgujdKXJR+bXF41/F/VvryXcqlw==", + "dependencies": { + "@slack/logger": "^3.0.0", + "@slack/web-api": "^6.11.2", + "@types/node": ">=12.0.0", + "@types/p-queue": "^2.3.2", + "@types/ws": "^7.4.7", + "eventemitter3": "^3.1.0", + "finity": "^0.5.4", + "p-cancelable": "^1.1.0", + "p-queue": "^2.4.2", + "ws": "^7.5.3" + }, + "engines": { + "node": ">=12.13.0", + "npm": ">=6.12.0" + } + }, + "node_modules/@slack/socket-mode/node_modules/@slack/logger": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-3.0.0.tgz", + "integrity": "sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==", + "dependencies": { + "@types/node": ">=12.0.0" + }, + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, + "node_modules/@slack/types": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@slack/types/-/types-2.11.0.tgz", + "integrity": "sha512-UlIrDWvuLaDly3QZhCPnwUSI/KYmV1N9LyhuH6EDKCRS1HWZhyTG3Ja46T3D0rYfqdltKYFXbJSSRPwZpwO0cQ==", + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, + "node_modules/@slack/web-api": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-6.12.0.tgz", "integrity": "sha512-RPw6F8rWfGveGkZEJ4+4jUin5iazxRK2q3FpQDz/FvdgzC3nZmPyLx8WRzc6nh0w3MBjEbphNnp2VZksfhpBIQ==", "dependencies": { "@slack/logger": "^3.0.0", @@ -2170,6 +2587,14 @@ "node": ">=14.0.0" } }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "engines": { + "node": ">= 10" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -2707,6 +3132,12 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -2730,6 +3161,34 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals/node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -2746,6 +3205,58 @@ "node": ">=0.4.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/aggregate-error/node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, "node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -2777,6 +3288,22 @@ } } }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -2818,6 +3345,18 @@ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", @@ -2851,6 +3390,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-flat-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-flat-polyfill/-/array-flat-polyfill-1.0.1.tgz", + "integrity": "sha512-hfJmKupmQN0lwi0xG6FQ5U8Rd97RnIERplymOv/qpq8AoNKPPAnxJadjFA23FNWm88wykh9HmpLJUUwUtNU/iw==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -2998,6 +3545,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -3038,12 +3601,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" + }, "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -3085,6 +3661,33 @@ } ] }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -3131,6 +3734,11 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", @@ -3156,6 +3764,11 @@ "node": ">=8" } }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -3246,6 +3859,11 @@ "cdl": "bin/cdl.js" } }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -3266,6 +3884,65 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/clean-stack": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", @@ -3343,6 +4020,35 @@ "node": ">= 12" } }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -3522,6 +4228,14 @@ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3543,6 +4257,108 @@ "node": ">=8" } }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -3621,6 +4437,11 @@ "ms": "2.0.0" } }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -3677,6 +4498,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -3721,15 +4563,86 @@ "node": ">=8" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dependencies": { - "esutils": "^2.0.2" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, - "engines": { - "node": ">=6.0.0" + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/dot-prop": { @@ -3757,6 +4670,23 @@ "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "engines": { + "node": ">=12" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -3789,6 +4719,14 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, "node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", @@ -3802,6 +4740,17 @@ "node": ">= 0.8" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -3989,6 +4938,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -4002,6 +4959,26 @@ "node": ">=0.8.0" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, "node_modules/eslint": { "version": "8.57.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", @@ -4449,6 +5426,11 @@ "node": ">= 0.10.0" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -4462,6 +5444,25 @@ "node": ">=4" } }, + "node_modules/extract-files": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", + "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==", + "engines": { + "node": "^10.17.0 || ^12.0.0 || >= 13.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/jaydenseric" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4652,9 +5653,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -4678,6 +5679,14 @@ "is-callable": "^1.1.3" } }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } + }, "node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -4707,11 +5716,42 @@ "node": ">= 0.6" } }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -4753,6 +5793,14 @@ "node": ">= 0.6.0" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -4795,6 +5843,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -4894,11 +5950,78 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, + "node_modules/graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-request": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-4.3.0.tgz", + "integrity": "sha512-2v6hQViJvSsifK606AliqiNiijb1uwWp6Re7o0RTyH+uRTv/u7Uqm2g4Fjq/LgZIzARB38RZEvVBFOQOVdlBow==", + "dependencies": { + "cross-fetch": "^3.1.5", + "extract-files": "^9.0.0", + "form-data": "^3.0.0" + }, + "peerDependencies": { + "graphql": "14 - 16" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/har-validator/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/har-validator/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -4982,6 +6105,35 @@ "node": ">=16.0.0" } }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -4997,6 +6149,87 @@ "node": ">= 0.8" } }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/hyperlinker": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", @@ -5658,6 +6891,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -5854,6 +7098,14 @@ "node": ">=8" } }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -5862,6 +7114,11 @@ "node": ">=8" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -5952,6 +7209,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -6021,6 +7283,11 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, "node_modules/iterate-iterator": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz", @@ -6070,6 +7337,18 @@ "node": ">=10" } }, + "node_modules/joi": { + "version": "17.13.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.0.tgz", + "integrity": "sha512-9qcrTyoBmFZRNHeVP4edKqIUEgFzq7MHvTNSDuHSqkpOPtiBkgNgcmTSqmiw1kw9tdKaiddvIDv/eCJDxmqWCA==", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6083,8 +7362,127 @@ "argparse": "^1.0.7", "esprima": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/jsdom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.5.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/json-buffer": { @@ -6092,6 +7490,11 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -6107,6 +7510,33 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -6133,6 +7563,20 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -6218,6 +7662,19 @@ "immediate": "~3.0.5" } }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -6235,6 +7692,16 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" + }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -6250,6 +7717,11 @@ "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==" }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", @@ -6260,6 +7732,11 @@ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" }, + "node_modules/lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==" + }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -6270,6 +7747,16 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -6280,6 +7767,11 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, + "node_modules/lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg==" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -6351,6 +7843,11 @@ "node": ">= 0.6" } }, + "node_modules/memory-cache": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", + "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==" + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -6384,6 +7881,10 @@ "node": ">=8.6" } }, + "node_modules/migration-sitecore": { + "resolved": "migration-sitecore", + "link": true + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -6441,6 +7942,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -6452,6 +7961,19 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/module-alias": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==" + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -6503,6 +8025,11 @@ "node": ">= 0.6" } }, + "node_modules/node-ensure": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz", + "integrity": "sha512-DRI60hzo2oKN1ma0ckc6nQWlHU69RH6xN0sjQTjMpChPfTYvKZdcQFfdYK2RWbJcKyUizSIy/l8OTGxMAM1QDw==" + }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -6522,6 +8049,38 @@ } } }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.9.tgz", + "integrity": "sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6777,6 +8336,20 @@ "node": ">=6" } }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-queue": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-2.4.2.tgz", @@ -6832,6 +8405,29 @@ "node": ">=6" } }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -6878,6 +8474,37 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -6891,6 +8518,28 @@ "node": ">=8" } }, + "node_modules/pdf-stream": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/pdf-stream/-/pdf-stream-1.3.2.tgz", + "integrity": "sha512-C3ocjc37c4SSKwTaKo5+BwluPSgtKcH6LowpbOGznKZBrzXNdSx6I1XeM43O9j5BWZCL6+tNcB8jbdvqw2s1kw==", + "dependencies": { + "pdfjs-dist": "^1.7.341" + } + }, + "node_modules/pdfjs-dist": { + "version": "1.10.100", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-1.10.100.tgz", + "integrity": "sha512-aCfONGqlBeazYxik3rjd7xaoCKMRYECwZSCC3EC3weqibF2V1Bp/v9WZbF7Lyy5Q6UE4NqOYu126r7U+Le4Uhg==", + "dependencies": { + "node-ensure": "^0.0.0", + "worker-loader": "^1.0.0" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -7014,6 +8663,11 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -7036,6 +8690,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -7101,6 +8760,25 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/redeyed": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", @@ -7146,6 +8824,87 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -7154,6 +8913,11 @@ "node": ">=0.10.0" } }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, "node_modules/resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", @@ -7342,6 +9106,54 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dependencies": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, "node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -7516,11 +9328,44 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -7714,6 +9559,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, "node_modules/synckit": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", @@ -7775,6 +9625,28 @@ "node": ">=0.6" } }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -7865,6 +9737,22 @@ "node": ">=0.6.x" } }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7986,6 +9874,17 @@ "node": ">=14.17" } }, + "node_modules/uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -8016,6 +9915,14 @@ "node": ">=8" } }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -8029,7 +9936,21 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dependencies": { - "punycode": "^2.1.0" + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, "node_modules/util-deprecate": { @@ -8070,6 +9991,44 @@ "node": ">= 0.8" } }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -8083,6 +10042,36 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "engines": { + "node": ">=12" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -8092,6 +10081,11 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/when": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", + "integrity": "sha512-5cZ7mecD3eYcMiCH4wtRPA5iFJZ50BJYDfckI5RRpQiktMiYTcn0ccLTZOvcbBume+1304fQztxeNzNS9Gvrnw==" + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -8273,6 +10267,21 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" }, + "node_modules/worker-loader": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-1.1.1.tgz", + "integrity": "sha512-qJZLVS/jMCBITDzPo/RuweYSIG8VJP5P67mP/71alGyTZRe1LYJFdwLjLalY3T5ifx0bMDRD3OB6P2p1escvlg==", + "dependencies": { + "loader-utils": "^1.0.0", + "schema-utils": "^0.4.0" + }, + "engines": { + "node": ">= 4.8 < 5.0.0 || >= 5.10" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -8319,6 +10328,39 @@ "node": ">=8" } }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -8327,11 +10369,44 @@ "node": ">=0.4" } }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -9158,6 +11233,30 @@ } } }, + "@contentstack/json-rte-serializer": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@contentstack/json-rte-serializer/-/json-rte-serializer-2.0.6.tgz", + "integrity": "sha512-qf5svRxtJ/hQj+vAayLgLLF7wFezKvYEE3xve2ihFhilT+ndLO9vWLpmNQ8gsq+CQEdujJEPgPin4LjqubA8kg==", + "requires": { + "array-flat-polyfill": "^1.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isempty": "^4.4.0", + "lodash.isequal": "^4.5.0", + "lodash.isobject": "^3.0.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isundefined": "^3.0.1", + "lodash.kebabcase": "^4.1.1", + "uuid": "^8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } + } + }, "@contentstack/management": { "version": "1.15.3", "resolved": "https://registry.npmjs.org/@contentstack/management/-/management-1.15.3.tgz", @@ -9284,6 +11383,19 @@ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==" }, + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, "@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -9346,6 +11458,11 @@ "call-bind": "^1.0.7" } }, + "@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==" + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -9443,6 +11560,185 @@ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true }, + "@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "@sitecore-jss/sitecore-jss": { + "version": "21.5.3", + "resolved": "https://registry.npmjs.org/@sitecore-jss/sitecore-jss/-/sitecore-jss-21.5.3.tgz", + "integrity": "sha512-p5PMi45AzALgbGFD3owOZ8QKvrfP327lrNSBoJP1k6UMn5oUbb15pcXGDo6/ALt75+AHaczKuJMUM+RPeALdWQ==", + "requires": { + "axios": "^0.21.1", + "chalk": "^4.1.0", + "debug": "^4.3.1", + "graphql": "^16.5.0", + "graphql-request": "^4.2.0", + "lodash.unescape": "^4.0.1", + "memory-cache": "^0.2.0", + "url-parse": "^1.5.9" + }, + "dependencies": { + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@sitecore-jss/sitecore-jss-cli": { + "version": "21.5.3", + "resolved": "https://registry.npmjs.org/@sitecore-jss/sitecore-jss-cli/-/sitecore-jss-cli-21.5.3.tgz", + "integrity": "sha512-AutEgCwGw7rEneR4o4mtIrFFenx9dQlY8L7uR0zgPxghDVmGkSUZZe2EDCksIF2Rb7mIYt3e7zI9bGLnT+2jNw==", + "requires": { + "@sitecore-jss/sitecore-jss-dev-tools": "21.5.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "dotenv": "^16.0.3", + "dotenv-expand": "^10.0.0", + "readline-sync": "^1.4.10", + "resolve": "^1.22.1", + "tmp": "^0.2.1", + "yargs": "^17.6.2" + }, + "dependencies": { + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==" + } + } + }, + "@sitecore-jss/sitecore-jss-dev-tools": { + "version": "21.5.3", + "resolved": "https://registry.npmjs.org/@sitecore-jss/sitecore-jss-dev-tools/-/sitecore-jss-dev-tools-21.5.3.tgz", + "integrity": "sha512-MK2iqTIrZXiIEVU7MGDeNA+basbNtTaGQMPZeE7HTsi5kZ3jcfm2LJFr8gyXoOCs6UJlKWKRI7Hlfxf8UpV7JA==", + "requires": { + "@sitecore-jss/sitecore-jss": "21.5.3", + "axios": "^1.3.2", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "del": "^6.0.0", + "express": "^4.18.2", + "form-data": "^4.0.0", + "fs-extra": "^11.1.0", + "glob": "^8.1.0", + "import-fresh": "^3.3.0", + "joi": "^17.8.4", + "js-yaml": "^4.1.0", + "jszip": "^3.10.1", + "module-alias": "^2.2.2", + "readline-sync": "^1.4.10", + "resolve": "^1.22.1", + "ts-node": "^10.9.1", + "url-join": "^4.0.1", + "uuid": "^9.0.0", + "yargs": "^17.6.2" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, "@slack/bolt": { "version": "3.17.1", "resolved": "https://registry.npmjs.org/@slack/bolt/-/bolt-3.17.1.tgz", @@ -10110,6 +12406,11 @@ "tslib": "^2.5.0" } }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" + }, "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -10527,6 +12828,11 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -10541,6 +12847,27 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==" }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + } + } + }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -10551,6 +12878,45 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==" }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "dependencies": { + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + } + } + }, "ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -10570,6 +12936,16 @@ "ajv": "^8.0.0" } }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" + }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -10596,6 +12972,15 @@ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", @@ -10623,6 +13008,11 @@ "is-array-buffer": "^3.0.4" } }, + "array-flat-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-flat-polyfill/-/array-flat-polyfill-1.0.1.tgz", + "integrity": "sha512-hfJmKupmQN0lwi0xG6FQ5U8Rd97RnIERplymOv/qpq8AoNKPPAnxJadjFA23FNWm88wykh9HmpLJUUwUtNU/iw==" + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -10731,6 +13121,19 @@ "is-shared-array-buffer": "^1.0.2" } }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -10759,12 +13162,22 @@ "possible-typed-array-names": "^1.0.0" } }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" + }, + "aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" + }, "axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "requires": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" }, @@ -10791,6 +13204,24 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" + }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -10832,6 +13263,11 @@ "unpipe": "1.0.0" } }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, "bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", @@ -10854,6 +13290,11 @@ "fill-range": "^7.0.1" } }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -10912,6 +13353,11 @@ "redeyed": "~2.1.0" } }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -10926,6 +13372,48 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, + "cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + } + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, "clean-stack": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", @@ -10975,6 +13463,28 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==" }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -11123,6 +13633,14 @@ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, + "cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "requires": { + "node-fetch": "^2.6.12" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -11138,6 +13656,85 @@ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + }, + "cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "requires": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "dependencies": { + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, "data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -11191,6 +13788,11 @@ "ms": "2.0.0" } }, + "decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -11229,6 +13831,21 @@ "object-keys": "^1.1.1" } }, + "del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -11265,6 +13882,54 @@ "esutils": "^2.0.2" } }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "requires": { + "webidl-conversions": "^7.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + } + } + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, "dot-prop": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", @@ -11278,6 +13943,20 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" }, + "dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -11304,6 +13983,11 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, "enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", @@ -11314,6 +13998,11 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -11470,6 +14159,11 @@ "is-symbol": "^1.0.2" } }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -11480,6 +14174,17 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + } + }, "eslint": { "version": "8.57.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", @@ -11784,6 +14489,11 @@ "vary": "~1.1.2" } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -11794,6 +14504,16 @@ "tmp": "^0.0.33" } }, + "extract-files": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", + "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -11946,9 +14666,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==" + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" }, "for-each": { "version": "0.3.3", @@ -11958,6 +14678,11 @@ "is-callable": "^1.1.3" } }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" + }, "form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -11978,11 +14703,32 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, + "fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, "function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -12009,6 +14755,11 @@ "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==" }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, "get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -12036,6 +14787,14 @@ "get-intrinsic": "^1.2.4" } }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "requires": { + "assert-plus": "^1.0.0" + } + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -12101,11 +14860,63 @@ "get-intrinsic": "^1.1.3" } }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, "graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, + "graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==" + }, + "graphql-request": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-4.3.0.tgz", + "integrity": "sha512-2v6hQViJvSsifK606AliqiNiijb1uwWp6Re7o0RTyH+uRTv/u7Uqm2g4Fjq/LgZIzARB38RZEvVBFOQOVdlBow==", + "requires": { + "cross-fetch": "^3.1.5", + "extract-files": "^9.0.0", + "form-data": "^3.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + } + } + }, "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -12156,6 +14967,25 @@ "integrity": "sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg==", "dev": true }, + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, "http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -12168,6 +14998,65 @@ "toidentifier": "1.0.1" } }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "hyperlinker": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", @@ -12668,6 +15557,14 @@ "has-bigints": "^1.0.1" } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -12783,11 +15680,21 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -12839,6 +15746,11 @@ "which-typed-array": "^1.1.14" } }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -12884,6 +15796,11 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, "iterate-iterator": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz", @@ -12921,6 +15838,18 @@ "minimatch": "^3.1.2" } }, + "joi": { + "version": "17.13.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.0.tgz", + "integrity": "sha512-9qcrTyoBmFZRNHeVP4edKqIUEgFzq7MHvTNSDuHSqkpOPtiBkgNgcmTSqmiw1kw9tdKaiddvIDv/eCJDxmqWCA==", + "requires": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -12935,11 +15864,99 @@ "esprima": "^4.0.0" } }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "jsdom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", + "requires": { + "abab": "^2.0.5", + "acorn": "^8.5.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + }, + "whatwg-url": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + }, + "ws": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==" + } + } + }, "json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -12955,6 +15972,28 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -12979,6 +16018,17 @@ } } }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, "jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -13055,6 +16105,16 @@ "immediate": "~3.0.5" } }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -13069,6 +16129,16 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -13084,6 +16154,11 @@ "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==" }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, "lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", @@ -13094,6 +16169,11 @@ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" }, + "lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==" + }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -13104,6 +16184,16 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, + "lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==" + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==" + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -13114,6 +16204,11 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg==" + }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -13169,6 +16264,11 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, + "memory-cache": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", + "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==" + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -13193,6 +16293,110 @@ "picomatch": "^2.3.1" } }, + "migration-sitecore": { + "version": "file:migration-sitecore", + "requires": { + "@contentstack/json-rte-serializer": "^2.0.2", + "@sitecore-jss/sitecore-jss-cli": "^21.2.4", + "ansi-colors": "^4.1.3", + "axios": "^1.3.4", + "chalk": "^4.1.0", + "cheerio": "^1.0.0-rc.12", + "cli-progress": "^3.11.1", + "fs-readdir-recursive": "^1.1.0", + "inquirer": "^8.2.4", + "jsdom": "^19.0.0", + "lodash": "^4.17.21", + "mkdirp": "^1.0.4", + "moment": "^2.30.1", + "pdf-stream": "^1.3.2", + "request": "^2.88.2", + "rimraf": "^4.1.2", + "uid": "^2.0.2", + "when": "^3.7.8", + "winston": "^3.7.2", + "xml2js": "^0.4.23" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + } + }, + "inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + } + }, + "minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "requires": { + "glob": "^9.2.0" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + } + } + }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -13229,6 +16433,11 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, + "minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==" + }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -13237,6 +16446,16 @@ "minimist": "^1.2.6" } }, + "module-alias": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==" + }, + "moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -13276,6 +16495,11 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, + "node-ensure": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz", + "integrity": "sha512-DRI60hzo2oKN1ma0ckc6nQWlHU69RH6xN0sjQTjMpChPfTYvKZdcQFfdYK2RWbJcKyUizSIy/l8OTGxMAM1QDw==" + }, "node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -13284,6 +16508,29 @@ "whatwg-url": "^5.0.0" } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "requires": { + "boolbase": "^1.0.0" + } + }, + "nwsapi": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.9.tgz", + "integrity": "sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -13458,6 +16705,14 @@ "p-limit": "^2.0.0" } }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, "p-queue": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-2.4.2.tgz", @@ -13498,6 +16753,23 @@ "callsites": "^3.0.0" } }, + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "requires": { + "entities": "^4.4.0" + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "requires": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -13532,6 +16804,27 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==" + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + } + } + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -13542,6 +16835,28 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, + "pdf-stream": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/pdf-stream/-/pdf-stream-1.3.2.tgz", + "integrity": "sha512-C3ocjc37c4SSKwTaKo5+BwluPSgtKcH6LowpbOGznKZBrzXNdSx6I1XeM43O9j5BWZCL6+tNcB8jbdvqw2s1kw==", + "requires": { + "pdfjs-dist": "^1.7.341" + } + }, + "pdfjs-dist": { + "version": "1.10.100", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-1.10.100.tgz", + "integrity": "sha512-aCfONGqlBeazYxik3rjd7xaoCKMRYECwZSCC3EC3weqibF2V1Bp/v9WZbF7Lyy5Q6UE4NqOYu126r7U+Le4Uhg==", + "requires": { + "node-ensure": "^0.0.0", + "worker-loader": "^1.0.0" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -13629,6 +16944,11 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, "punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -13642,6 +16962,11 @@ "side-channel": "^1.0.4" } }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -13689,6 +17014,19 @@ } } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==" + }, "redeyed": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", @@ -13722,11 +17060,79 @@ "set-function-name": "^2.0.1" } }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, "resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", @@ -13846,6 +17252,46 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "requires": { + "xmlchars": "^2.2.0" + } + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + } + } + }, "semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -13983,11 +17429,33 @@ "is-fullwidth-code-point": "^3.0.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -14126,6 +17594,11 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, "synckit": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", @@ -14172,6 +17645,24 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, + "tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "dependencies": { + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" + } + } + }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -14222,6 +17713,19 @@ "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -14303,6 +17807,14 @@ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true }, + "uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "requires": { + "@lukeed/csprng": "^1.0.0" + } + }, "unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -14327,6 +17839,11 @@ "crypto-random-string": "^2.0.0" } }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -14340,6 +17857,20 @@ "punycode": "^2.1.0" } }, + "url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -14365,6 +17896,39 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + } + } + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "requires": { + "xml-name-validator": "^4.0.0" + } + }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -14378,6 +17942,29 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "requires": { + "iconv-lite": "0.6.3" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==" + }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -14387,6 +17974,11 @@ "webidl-conversions": "^3.0.0" } }, + "when": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", + "integrity": "sha512-5cZ7mecD3eYcMiCH4wtRPA5iFJZ50BJYDfckI5RRpQiktMiYTcn0ccLTZOvcbBume+1304fQztxeNzNS9Gvrnw==" + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -14526,6 +18118,15 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" }, + "worker-loader": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-1.1.1.tgz", + "integrity": "sha512-qJZLVS/jMCBITDzPo/RuweYSIG8VJP5P67mP/71alGyTZRe1LYJFdwLjLalY3T5ifx0bMDRD3OB6P2p1escvlg==", + "requires": { + "loader-utils": "^1.0.0", + "schema-utils": "^0.4.0" + } + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -14551,16 +18152,64 @@ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/uplaode-api/package.json b/uplaode-api/package.json index 5f94e7680..2c095ad93 100644 --- a/uplaode-api/package.json +++ b/uplaode-api/package.json @@ -34,6 +34,7 @@ "@aws-sdk/client-s3": "^3.490.0", "@contentstack/cli-utilities": "^1.5.12", "@typescript-eslint/parser": "^7.7.1", + "axios": "^1.6.8", "chalk": "^4.1.2", "cors": "^2.8.5", "dotenv": "^16.3.1", @@ -44,6 +45,7 @@ "inquirer": "^9.2.15", "jszip": "^3.10.1", "lodash.isempty": "^4.4.0", + "migration-sitecore": "file:migration-sitecore", "multer": "^1.4.5-lts.1", "node-fetch": "^2.7.0", "prettier": "^2.7.1" diff --git a/uplaode-api/src/controllers/sitecore/index.ts b/uplaode-api/src/controllers/sitecore/index.ts new file mode 100644 index 000000000..b5e0fd231 --- /dev/null +++ b/uplaode-api/src/controllers/sitecore/index.ts @@ -0,0 +1,39 @@ +import axios from "axios"; +import { readFileSync } from "fs"; + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const { contentTypes, ExtractConfiguration, reference } = require('migration-sitecore'); + +const createSitecoreMapper = async () => { + try { + const path = "/Users/umesh.more/Downloads/package 45/items"; + await ExtractConfiguration(path); + await contentTypes(path); + const infoMap = await reference(); + if (infoMap?.contentTypeUids?.length) { + const fieldMapping: any = { contentTypeData: [] }; + for await (const contentType of infoMap?.contentTypeUids ?? []) { + fieldMapping?.contentTypeData?.push( + JSON.stringify({ contentTypeData: readFileSync(`${infoMap?.path}/content_types/${contentType}`, 'utf8') }) + ); + } + const config = { + method: 'post', + maxBodyLength: Infinity, + url: `http://localhost:5000/v2/mapper/createDummyData/4392f62d-dc4e-4a05-92c2-d049a23f90ae`, + headers: { + 'app_token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZWdpb24iOiJOQSIsInVzZXJfaWQiOiJibHQzNWNlZTkxZThmZDI4YWRiIiwiaWF0IjoxNzE1ODU1MzMwLCJleHAiOjE3MTU5NDE3MzB9.4-aVhDCWjvCPNXeWK8RaNnH97quOM7j8rMF_pSKh7rM', + 'Content-Type': 'application/json' + }, + data: fieldMapping + }; + const response = await axios.request(config) + console.log("🚀 ~ forawait ~ response:", response?.data) + } + } catch (err: any) { + console.error("🚀 ~ createSitecoreMapper ~ err:", err?.response?.data) + } +} + + +export default createSitecoreMapper; \ No newline at end of file diff --git a/uplaode-api/src/routes/index.ts b/uplaode-api/src/routes/index.ts index bc2f07a60..9a792e7a9 100644 --- a/uplaode-api/src/routes/index.ts +++ b/uplaode-api/src/routes/index.ts @@ -9,11 +9,10 @@ import { } from '@aws-sdk/client-s3'; import { client } from '../services/aws/client'; import config from '../config/index'; -import logger from '../utils/logger.js'; -import { HTTP_TEXTS, HTTP_CODES } from '../constants'; import { Readable } from 'stream'; import handleFileProcessing from '../services/fileProcessing'; +import createSitecoreMapper from '../controllers/sitecore'; const router: Router = express.Router(); // Use memory storage to avoid saving the file locally @@ -189,6 +188,7 @@ router.get('/validator', express.json(), async function (req: Request, res: Resp }); router.get('/config', async function (req: Request, res: Response) { + createSitecoreMapper() res.json(config); }); From 79cbec42442e471bef958ad3e644cf993525032e Mon Sep 17 00:00:00 2001 From: umeshmore45 Date: Thu, 16 May 2024 17:35:46 +0530 Subject: [PATCH 002/759] updated code --- api/src/utils/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/api/src/utils/index.ts b/api/src/utils/index.ts index 297e6c986..40823eacc 100644 --- a/api/src/utils/index.ts +++ b/api/src/utils/index.ts @@ -1,4 +1,3 @@ - export const throwError = (message: string, statusCode: number) => { throw Object.assign(new Error(message), { statusCode }); }; @@ -26,4 +25,3 @@ export const getLogMessage = ( ...(error && { error }), }; }; - From 3eb8e8c35469671081d925d6aa6f1d02b64f0ad1 Mon Sep 17 00:00:00 2001 From: umeshmore45 Date: Thu, 16 May 2024 17:35:37 +0530 Subject: [PATCH 003/759] updated code --- .gitignore | 4 +- api/example.env | 5 - api/src/database.ts | 5 +- ui/package.json | 2 +- uplaode-api/.eslintrc.json | 3 +- uplaode-api/migration-sitecore/.gitignore | 7 + uplaode-api/migration-sitecore/app.js | 135 + uplaode-api/migration-sitecore/index.d.ts | 5 + uplaode-api/migration-sitecore/index.js | 11 + .../migration-sitecore/libs/configuration.js | 72 + .../migration-sitecore/libs/contenttypes.js | 572 +++ .../migration-sitecore/libs/convert.js | 83 + .../migration-sitecore/libs/reference.js | 183 + uplaode-api/migration-sitecore/package.json | 43 + .../migration-sitecore/utils/dateChanger.js | 12 + .../migration-sitecore/utils/helper.js | 62 + uplaode-api/migration-sitecore/utils/index.js | 48 + uplaode-api/package-lock.json | 3871 ++++++++++++++++- uplaode-api/package.json | 2 + uplaode-api/src/controllers/sitecore/index.ts | 39 + uplaode-api/src/routes/index.ts | 4 +- 21 files changed, 5046 insertions(+), 122 deletions(-) delete mode 100644 api/example.env create mode 100644 uplaode-api/migration-sitecore/.gitignore create mode 100644 uplaode-api/migration-sitecore/app.js create mode 100644 uplaode-api/migration-sitecore/index.d.ts create mode 100644 uplaode-api/migration-sitecore/index.js create mode 100644 uplaode-api/migration-sitecore/libs/configuration.js create mode 100644 uplaode-api/migration-sitecore/libs/contenttypes.js create mode 100644 uplaode-api/migration-sitecore/libs/convert.js create mode 100644 uplaode-api/migration-sitecore/libs/reference.js create mode 100644 uplaode-api/migration-sitecore/package.json create mode 100644 uplaode-api/migration-sitecore/utils/dateChanger.js create mode 100644 uplaode-api/migration-sitecore/utils/helper.js create mode 100644 uplaode-api/migration-sitecore/utils/index.js create mode 100644 uplaode-api/src/controllers/sitecore/index.ts diff --git a/.gitignore b/.gitignore index 361669648..d05e5b718 100644 --- a/.gitignore +++ b/.gitignore @@ -351,4 +351,6 @@ MigrationBackup/ uploade-api/node_modules uploade-api/build -package-lock.json \ No newline at end of file +package-lock.json +ui/.env +uplaode-api/sitecoreMigrationData \ No newline at end of file diff --git a/api/example.env b/api/example.env deleted file mode 100644 index 7879b26de..000000000 --- a/api/example.env +++ /dev/null @@ -1,5 +0,0 @@ -PORT= -APP_TOKEN_KEY= -MONGODB_URI= -UPLOAD_BUCKET= -AWS_REGION= \ No newline at end of file diff --git a/api/src/database.ts b/api/src/database.ts index 0e7d331ac..68d71d3bb 100644 --- a/api/src/database.ts +++ b/api/src/database.ts @@ -4,11 +4,14 @@ import fs from "fs"; const connectToDatabase = async () => { try { + // await mongoose.connect(config.MONGODB_URI, { + // ...(config.APP_ENV === "production" ? { autoIndex: false } : {}), + // }); + //check if the database folder exists if (!fs.existsSync("./database")) { fs.mkdirSync("./database"); } logger.info("successfully connecting to Low DB"); - } catch (error) { logger.error("Error while connecting to Low DB:", error); process.exit(1); diff --git a/ui/package.json b/ui/package.json index 61ce94f3e..69f4f12c9 100644 --- a/ui/package.json +++ b/ui/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@contentstack/json-rte-serializer": "^2.0.5", - "@contentstack/utils": "1.3.1", + "@contentstack/utils": "^1.3.3", "@contentstack/venus-components": "1.5.1", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", diff --git a/uplaode-api/.eslintrc.json b/uplaode-api/.eslintrc.json index 9bf23e542..18d8aee21 100644 --- a/uplaode-api/.eslintrc.json +++ b/uplaode-api/.eslintrc.json @@ -2,13 +2,14 @@ "root": true, "env": { "browser": true, + "node": true, "es2021": true }, "extends": ["prettier", "eslint:recommended", "plugin:@typescript-eslint/recommended"], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 2022, - "project": ["./tsconfig.json"], + "project": [], "sourceType": "module" }, "plugins": ["@typescript-eslint", "prettier"], diff --git a/uplaode-api/migration-sitecore/.gitignore b/uplaode-api/migration-sitecore/.gitignore new file mode 100644 index 000000000..6cd304faf --- /dev/null +++ b/uplaode-api/migration-sitecore/.gitignore @@ -0,0 +1,7 @@ +csMigrationData +node_modules +logs +sitecoreMigrationData +Alaska +data +_ \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/app.js b/uplaode-api/migration-sitecore/app.js new file mode 100644 index 000000000..7506868af --- /dev/null +++ b/uplaode-api/migration-sitecore/app.js @@ -0,0 +1,135 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +var path = require("path"), + chalk = require("chalk"), + fs = require("fs"), + inquirer = require("inquirer"), + sequence = require("when/sequence"), + helper = require("./utils/helper"); + +_ = require("lodash"); +const Messages = require("./utils/message"); +const messages = new Messages("wordpress").msgs; + +config = require("./config"); +global.errorLogger = require("./utils/logger")("error").error; +global.successLogger = require("./utils/logger")("success").log; +global.warnLogger = require("./utils/logger")("warn").log; + +var modulesList = [ + // "convert", + // "configuration", + // "assets", + "contenttypes", + "reference", + // "template", + "entries", + // "staticHtml", +]; //to create entries +// var contentList = ["convert"]; // to create content type for the entries +var _export = []; + +const migFunction = () => { + try { + global.filePath = undefined; + // Module List for Entries + for (var i = 0, total = modulesList.length; i < total; i++) { + var ModuleExport = require("./libs/" + modulesList[i] + ".js"); + var moduleExport = new ModuleExport(); + _export.push( + (function (moduleExport) { + return function () { + return moduleExport.start(); + }; + })(moduleExport) + ); + } + + // Content List + //create schema for the entries we have created + // for (var i = 0, total = contentList.length; i < total; i++) { + // var ContentExport = require("./content_types/" + contentList[i] + ".js"); + // var contentExport = new ContentExport(); + // _export.push( + // (function (contentExport) { + // return function () { + // return contentExport.start(); + // }; + // })(contentExport) + // ); + // } + } catch (error) { + console.log(error.message); + } + + var taskResults = sequence(_export); + + taskResults + .then(async function (results) { + console.log(chalk.green("\Data exporting has been completed")); + }) + .catch(function (error) { + errorLogger(error); + }); +}; + +// to check if file exist or not +// const fileCheck = (csFileName, csFilePath) => { +// const allowedExtension = ".xml"; +// const extension = path.extname(global.config.xml_filename); +// if (allowedExtension === extension) { +// if (fs.existsSync(global.config.xml_filename)) { +// migFunction(); +// } else { +// console.log( +// chalk.red(`Please check`), +// chalk.yellow(`File name "${csFileName}"`), +// chalk.red(`or`), +// chalk.yellow(`Filepath "${csFilePath}"`), +// chalk.red(`are valid or not and try again!`) +// ); +// XMLMigration(); +// } +// } else { +// console.log(chalk.red("use only .xml extension file")); +// } +// }; + +module.exports = XMLMigration = async () => { + const question = [ + { + type: "input", + name: "csFilePath", + message: messages.promptFilePath, + validate: (csFilePath) => { + if (!csFilePath || csFilePath.trim() === "") { + console.log(chalk.red("Please insert filepath!")); + return false; + } + this.name = csFilePath; + return true; + }, + }, + ]; + + inquirer.prompt(question).then(async (answer) => { + try { + global.config.sitecore_folder = + // answer?.csFilePath + // "/Users/umesh.more/Downloads/history-only/items" + // "/Users/umesh.more/Downloads/package 75/items/master/sitecore/content/Common/Configuration" + // "/Users/umesh.more/Downloads/package 81/items"; + // "/Users/umesh.more/Downloads/package 82/items", + // "/Users/umesh.more/Documents/package 2/items" + // "/Users/umesh.more/Downloads/package 77/items" + // "/Users/umesh.more/Downloads/package 45/items/master/sitecore/content" + // "/Users/umesh.more/Downloads/package 45/items/master/sitecore/content" + // "/Users/umesh.more/Documents/package/items" + "/Users/umesh.more/Downloads/package 45/items" + // "/Users/umesh.more/Downloads/package 45/items/master/sitecore/templates" + // "/Users/umesh.more/Downloads/package 45/items/master/sitecore/content/Common/Configuration" + migFunction(); + } catch (error) { + console.log(chalk.red(error.message)); + } + }); +}; diff --git a/uplaode-api/migration-sitecore/index.d.ts b/uplaode-api/migration-sitecore/index.d.ts new file mode 100644 index 000000000..cfa173905 --- /dev/null +++ b/uplaode-api/migration-sitecore/index.d.ts @@ -0,0 +1,5 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires +import contentTypes from "./libs/contenttypes.js"; + +// module.exports = { contentTypes = contentTypes?.ExtractContentTypes }; +export default contentTypes; \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/index.js b/uplaode-api/migration-sitecore/index.js new file mode 100644 index 000000000..93c0a2ee6 --- /dev/null +++ b/uplaode-api/migration-sitecore/index.js @@ -0,0 +1,11 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires +const contentTypes = require("./libs/contenttypes.js"); +// eslint-disable-next-line @typescript-eslint/no-var-requires +const ExtractConfiguration = require("./libs/configuration.js") +// eslint-disable-next-line @typescript-eslint/no-var-requires +const reference = require("./libs/reference.js"); +module.exports = { + contentTypes, + ExtractConfiguration, + reference +} diff --git a/uplaode-api/migration-sitecore/libs/configuration.js b/uplaode-api/migration-sitecore/libs/configuration.js new file mode 100644 index 000000000..7875dde07 --- /dev/null +++ b/uplaode-api/migration-sitecore/libs/configuration.js @@ -0,0 +1,72 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const path = require("path"); +const read = require("fs-readdir-recursive"); +const helper = require("../utils/helper"); + + +const assignFolderName = ({ path }) => { + const spliter = "/sitecore"; + const newPath = path.split(spliter)?.[1]; + return `${spliter}${newPath}`; +} + + + + +function ExtractConfiguration(sitecore_folder) { + const xml_folder = read(sitecore_folder); + const obj = {}; + const treeObj = {}; + for (let i = 0; i < xml_folder?.length; i++) { + if ((xml_folder?.[i]?.includes("data.json") || xml_folder?.[i]?.includes("data.json.json")) && !xml_folder?.[i]?.includes("undefined.json")) { + const path = xml_folder?.[i] + const data = helper?.readFile(`${sitecore_folder}/${xml_folder?.[i]}`) + if (data?.item?.$?.template === "configuration group") { + let newPath = path?.split("/{")?.[0]; + const groupPath = read(`${sitecore_folder}/${newPath}`) + let arrayValue = []; + let multiValueArrayTree = []; + groupPath?.forEach((item) => { + if ((item?.includes("data.json") || item?.includes("data.json.json")) && !item?.includes("undefined.json")) { + const conf = helper?.readFile(`${sitecore_folder}/${newPath}/${item}`) + const value = conf?.item?.fields?.field?.find((item) => item?.$?.key === "value") + if (value) { + arrayValue.push({ key: conf?.item?.$?.name, value: value?.content !== "" ? value?.content : conf?.item?.$?.name }) + } else { + arrayValue.push({ value: conf?.item?.$?.name }) + } + multiValueArrayTree.push({ key: conf?.item?.$?.name, value: conf?.item?.$?.id }) + } + }) + obj[assignFolderName({ path: `${sitecore_folder}/${newPath}` })] = arrayValue; + treeObj[assignFolderName({ path: `${sitecore_folder}/${newPath}` })] = multiValueArrayTree; + } + } + } + helper.writeFile( + path.join( + process.cwd(), + "sitecoreMigrationData/MapperData", + ), + JSON.stringify(obj, null, 4), + "configuration", + (err) => { + if (err) throw err; + } + ); + helper.writeFile( + path.join( + process.cwd(), + "sitecoreMigrationData/MapperData", + ), + JSON.stringify(treeObj, null, 4), + "configurationTree", + (err) => { + if (err) throw err; + } + ); +} + + + +module.exports = ExtractConfiguration; \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/libs/contenttypes.js b/uplaode-api/migration-sitecore/libs/contenttypes.js new file mode 100644 index 000000000..0de0efd3e --- /dev/null +++ b/uplaode-api/migration-sitecore/libs/contenttypes.js @@ -0,0 +1,572 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const path = require("path"); +const _ = require("lodash"); +const read = require("fs-readdir-recursive"); +const helper = require("../utils/helper"); +const restrictedUid = require("../utils"); +const extraField = "title"; +const configChecker = "/content/Common/Configuration"; +const append = "a" + + +function isKeyPresent(keyToFind, timeZones) { + return timeZones?.some?.(timeZone => Object?.keys?.(timeZone)?.includes?.(keyToFind)); +} + +const createTemplate = ({ components }) => { + components.item.$.field = components?.item?.fields?.field + return components?.item?.$ +} + +function startsWithNumber(str) { + return /^\d/.test(str); +} + +const uidCorrector = ({ uid }) => { + if (startsWithNumber(uid)) { + return `${append}_${_.replace(uid, new RegExp("[ -]", "g"), '_')?.toLowerCase()}`?.replace?.("$", ""); + } + const newUid = _.replace(uid, new RegExp("[ -]", "g"), '_')?.toLowerCase() + return newUid?.replace?.("$", "") +} + + +const templatesComponents = ({ path, basePath }) => { + const fields = []; + for (let i = 0; i < path?.length; i++) { + const allFields = []; + const allPaths = read(path?.[i]?.pth) + for (let j = 0; j < allPaths?.length; j++) { + if (allPaths?.[j]?.includes("/data.json") || allPaths?.[j]?.includes("/data.json.json")) { + const innerField = []; + const components = helper.readFile( + `${path?.[i]?.pth}/${allPaths?.[j]}` + ); + const data = components?.item?.$ ?? {}; + components?.item?.fields?.field.forEach((item) => { + if (item?.$?.key === "type" || item?.$?.key === "source" || item?.$?.key === extraField) { + innerField.push({ + content: item.content, + ...item.$ + }) + } + }) + if (innerField?.length) { + data.fields = innerField; + allFields.push(data); + } + } + } + fields?.push({ meta: path?.[i]?.obj?.item?.$, schema: allFields }) + } + return fields; +} + +const templateStandardValues = ({ components }) => { + const standardValues = []; + const data = components?.item?.$ ?? {}; + components?.item?.fields?.field.forEach((item) => { + if (!item?.$?.key.includes("__")) { + standardValues.push({ + content: item.content, + ...item.$ + }) + } + }) + data.fields = standardValues; + return data; +} + +const contentTypeKeyMapper = ({ template, contentType, contentTypeKey = "contentTypeKey" }) => { + let keyMapper = {}; + const keys = helper.readFile( + path.join(process.cwd(), `/sitecoreMigrationData/MapperData/${contentTypeKey}.json`) + ); + if (keys) { + keyMapper = keys; + } + keyMapper[template?.id] = contentType?.uid; + helper.writeFile( + path.join( + process.cwd(), + "sitecoreMigrationData/MapperData" + ), + JSON.stringify(keyMapper, null, 4), + contentTypeKey, + (err) => { + if (err) throw err; + } + ); +} + +const ContentTypeSchema = ({ type, name, uid, default_value = "", description = "", id, choices = [{ value: "NF" }], advanced, sourLet, sitecoreKey, isFromMapper = false }) => { + const isPresent = restrictedUid?.find((item) => item === uid); + if (isPresent) { + uid = `${uid}_changed` + } + switch (type) { + case 'Single-Line Text': { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "single_line_text", + "backupFieldType": "single_line_text" + } + } + case 'Checkbox': { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "boolean", + "backupFieldType": "boolean" + + } + } + case 'Rich Text': { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "json", + "backupFieldType": "json" + } + } + + case 'Droplist': { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "dropdown", + "backupFieldType": "dropdown" + } + } + + case "Image": { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "file", + "backupFieldType": "file" + } + } + case "General Link": + case "Internal Link": { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "link", + "backupFieldType": "link" + } + } + + case "Multi-Line Text": { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "multi_line_text", + "backupFieldType": "multi_line_text" + } + } + + + case "Integer": + case "Number": { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "number", + "backupFieldType": "number" + } + } + + + case "Date": + case "Time": { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "isodate", + "backupFieldType": "isodate" + } + } + + case 'Grouped Droplist': { + if (choices?.length) { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "dropdown", + "backupFieldType": "dropdown" + } + } + break; + } + case "Treelist": { + if (sourLet?.key !== "source") { + return { + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "reference", + "backupFieldType": "reference" + } + } + break; + } + default: { + return { + id, + uid: sitecoreKey, + "otherCmsField": name, + "otherCmsType": type, + "contentstackField": name, + "contentstackFieldUid": uid, + "ContentstackFieldType": "reference", + "backupFieldType": "reference" + } + } + } +} + +function makeUnique({ data }) { + const newData = data; + let tempMapping = {}; + if (newData?.[0]?.key) { + newData?.forEach(choice => { + if (choice?.key) { + if (!tempMapping?.[choice?.value]) { + tempMapping[choice?.value] = []; + } + tempMapping[choice?.value].push(choice?.key); + } + }); + const result = Object?.entries(tempMapping).map(([value, keys]) => { + return { + key: keys?.join('/'), + value: value + }; + }); + const newValue = []; + result?.forEach((item) => { + if (item?.key === undefined) { + newValue?.push({ ...item, key: item?.value }) + } else { + newValue?.push(item) + } + }) + return newValue; + } else { + let uniqueValues = []; + const result = data?.filter(item => { + if (uniqueValues?.includes(item?.value)) { + return false; + } else { + uniqueValues?.push(item?.value); + return true; + } + }); + const newValue = []; + result?.forEach((item) => { + if (item?.key === undefined) { + newValue?.push({ ...item, key: item?.value }) + } else { + newValue?.push(item) + } + }) + return newValue; + } +} + +const groupFlat = (data, item) => { + const flat = []; + if (data?.data_type === "group" && data?.schema?.[0] !== undefined) { + const group = { + uid: item?.meta?.key, + otherCmsField: item?.meta?.name, + otherCmsType: 'Group', + contentstackField: item?.meta?.name, + contentstackFieldUid: uidCorrector({ uid: item?.meta?.key }), + ContentstackFieldType: 'group', + backupFieldType: 'group' + } + flat?.push(group); + data?.schema?.forEach((element) => { + const obj = { + ...element, + uid: `${item?.meta?.key}.${element?.uid}`, + otherCmsField: `${item?.meta?.name} > ${element?.otherCmsField}`, + contentstackField: `${item?.meta?.name} > ${element?.contentstackField}`, + contentstackFieldUid: `${uidCorrector({ uid: item?.meta?.key })}.${element?.contentstackFieldUid}`, + } + flat?.push(obj); + }) + } + return flat; +} + + +const contentTypeMapper = ({ components, standardValues, content_type, basePath, sitecore_folder }) => { + const source = helper.readFile( + path.join(process.cwd(), "/sitecoreMigrationData/MapperData/configuration.json") + ); + const sourceTree = helper.readFile( + path.join(process.cwd(), "/sitecoreMigrationData/MapperData/configurationTree.json") + ); + let mainSchema = []; + components?.forEach((item) => { + if (item?.schema?.length) { + const groupSchema = { + "data_type": "group", + "display_name": item?.meta?.name, + "field_metadata": {}, + "schema": [], + "uid": uidCorrector({ uid: item?.meta?.key }), + "multiple": true, + "mandatory": false, + "unique": false + }; + for (let i = 0; i < item?.schema?.length; i++) { + const field = item?.schema?.[i]; + const appendStandardValues = standardValues?.fields?.find((item) => item?.key === field?.key) + if (appendStandardValues) { + field?.fields?.forEach((item) => { + if (item?.content === appendStandardValues?.type) { + item.standardValues = appendStandardValues + } + }) + } + let compType = {}; + let sourLet = {}; + let sourceType = []; + let advanced = false; + let name = field?.name; + field?.fields?.forEach((item) => { + if (item?.key === "type") { + compType = item; + } + if (item?.key === "source") { + sourLet = item; + if (compType?.content === "Droplink") { + if (sourceTree) { + if (item?.content?.includes(configChecker)) { + sourceType = makeUnique({ data: sourceTree?.[item?.content] }) + compType.content = "Droplist" + if (isKeyPresent("key", sourceType)) { + advanced = true; + } + } else { + console.log("🚀 ~ file: contenttypes.js:305 ~ field?.fields?.forEach ~ item?.content:", item?.content) + } + } else { + console.log("🚀 ~ file: contenttypes.js:371 ~ field?.fields?.forEach ~ compType:", compType?.standardValues?.key) + + } + } else { + if (source) { + if (item?.content?.includes("datasource=")) { + const gUid = item?.content?.split("}")?.[0]?.replace("datasource={", "") + if (gUid) { + const dataSourcePaths = read(`${sitecore_folder}/master/sitecore/content/Common`) + let isDataSourcePresent = dataSourcePaths?.find((sur) => sur?.includes(`{${gUid}}`)); + isDataSourcePresent = isDataSourcePresent?.split(`{${gUid}}`)?.[0] + if (isDataSourcePresent) { + const optionsPath = read(`${sitecore_folder}/master/sitecore/content/Common/${isDataSourcePresent}`) + const refName = []; + optionsPath?.forEach((newPath) => { + if (newPath?.includes("data.json.json") | newPath?.includes("data.json")) { + const data = helper.readFile(`${sitecore_folder}/master/sitecore/content/Common/${isDataSourcePresent}/${newPath}`) + if (data?.item?.$?.template) { + refName.push(data?.item?.$?.template) + } + } + }) + if (refName?.length) { + const unique = [...new Set(refName)] + contentTypeKeyMapper({ template: { id: content_type?.contentstackUid }, contentType: { uid: { name, uid: field?.key, unique } }, contentTypeKey: "treeListRef" }) + } + } + } + } else { + sourceType = makeUnique({ data: source?.[item?.content] }) + if (isKeyPresent("key", sourceType)) { + advanced = true; + } + } + } + } + } + if (item?.key === extraField) { + if (item?.content && item?.content !== "") { + name = item?.content + } + } + }) + if (compType?.content !== "Droptree") { + groupSchema?.schema?.push(ContentTypeSchema({ + name, + uid: uidCorrector({ uid: field?.key }), + type: compType?.content, + default_value: compType?.standardValues?.content, + id: field?.id, + choices: sourceType?.slice(0, 98), + advanced, + sourLet, + sitecoreKey: field?.key, + isFromMapper: true + })); + } + } + mainSchema?.push(...groupFlat(groupSchema, item)); + } + const isUrlfound = mainSchema?.find((rt) => rt?.contentstackFieldUid?.toLowerCase?.() === "url") + if (isUrlfound === undefined) { + mainSchema?.unshift( + { + uid: "Url", + "otherCmsField": "url", + "otherCmsType": "text", + "contentstackField": "Url", + "contentstackFieldUid": "url", + "ContentstackFieldType": "url", + "backupFieldType": "url" + }) + } + const isPresent = mainSchema?.find((item) => + item?.contentstackFieldUid?.toLowerCase?.() === "title" + ) + if (isPresent === undefined) { + mainSchema.unshift({ + uid: "Title", + "otherCmsField": "title", + "otherCmsType": "text", + "contentstackField": "Title", + "contentstackFieldUid": "title", + "ContentstackFieldType": "text", + "backupFieldType": "text" + }) + } + }) + return mainSchema; +} + +const contentTypeMaker = ({ template, basePath, sitecore_folder }) => { + const content_type = { + id: template?.id, + "otherCmsTitle": template?.name, + "otherCmsUid": template?.key, + "isUpdated": false, + "updateAt": "", + "contentstackTitle": template?.name, + "contentstackUid": uidCorrector({ uid: template?.key }), + } + template?.field?.forEach((item) => { + if (item?.$?.key === "__base template" && item?.$?.type === "tree list") { + contentTypeKeyMapper({ template, contentType: { uid: { ...item?.$, content: item?.content } }, contentTypeKey: "base" }) + } + }) + content_type.fieldMapping = contentTypeMapper({ components: template?.components, standardValues: template?.standardValues, content_type, basePath, sitecore_folder }) + return content_type; +} + + + + +function singleContentTypeCreate({ templatePaths, globalPath, sitecore_folder }) { + const newPath = read(templatePaths); + const templatesComponentsPath = []; + let templatesStandaedValuePath = {}; + let templatesMetaDataPath = {}; + for (let i = 0; i < newPath?.length; i++) { + if (newPath?.[i]?.includes("data.json") || newPath?.[i]?.includes("/data.json.json")) { + const data = helper?.readFile(`${templatePaths}/${newPath?.[i]}`); + if (data?.item?.$?.template === "template section") { + templatesComponentsPath?.push( + { + pth: `${templatePaths}/${newPath?.[i]}`?.split("/{")?.[0], + obj: data + } + ); + } else if (data?.item?.$?.template === "template") { + templatesMetaDataPath = data; + } else if (data?.item?.$?.key?.includes?.("standard values")) { + templatesStandaedValuePath = data; + } + } + } + const template = createTemplate({ components: templatesMetaDataPath }); + template.components = templatesComponents({ path: templatesComponentsPath, basePath: templatePaths }); + template.standardValues = templateStandardValues({ components: templatesStandaedValuePath }) + const contentType = contentTypeMaker({ template, basePath: globalPath, sitecore_folder }) + if (contentType?.fieldMapping?.length) { + helper.writeFile( + path.join( + process.cwd(), + "sitecoreMigrationData/content_types", + ), + JSON.stringify(contentType, null, 4), + contentType?.contentstackUid, + (err) => { + if (err) throw err; + } + ); + contentTypeKeyMapper({ template, contentType: { uid: contentType?.contentstackUid } }) + } + return true; +} + + +function ExtractContentTypes(sitecore_folder) { + const folder = read(sitecore_folder); + const templatePaths = []; + for (let i = 0; i < folder?.length; i++) { + if (folder?.[i]?.includes("templates") && (folder?.[i]?.includes("/data.json") || folder?.[i]?.includes("/data.json.json"))) { + const data = helper?.readFile(`${sitecore_folder}/${folder?.[i]}`) + if (data?.item?.$?.template === "template") { + templatePaths?.push(`${sitecore_folder}/${folder?.[i]}`?.split("/{")?.[0]) + } + } + } + if (templatePaths?.length) { + const unique = [...new Set(templatePaths)] + unique?.forEach((item) => { + singleContentTypeCreate({ templatePaths: item, globalPath: folder, sitecore_folder }) + }) + } else { + throw { message: "Templates Not Found." } + } +} + + + +module.exports = ExtractContentTypes; \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/libs/convert.js b/uplaode-api/migration-sitecore/libs/convert.js new file mode 100644 index 000000000..246b0e0f1 --- /dev/null +++ b/uplaode-api/migration-sitecore/libs/convert.js @@ -0,0 +1,83 @@ +/** + * External module Dependencies. + */ +/* eslint-disable @typescript-eslint/no-var-requires */ +const mkdirp = require("mkdirp"); +const path = require("path"); +const fs = require("fs"), +const parseString = require("xml2js").parseString, +const read = require("fs-readdir-recursive"); +/** + * Internal module Dependencies. + */ +const helper = require("../utils/helper"); +const config = { + "data": "./sitecoreMigrationData", + "backup": "./backupMigrationData", + "xml_filename": "", + "sitecore_folder": "", + "json_file": "", + "json_filename": "data.json", + "table_prefix": "wp_", + "entryfolder": "entries", +} +/** + * Create folders and files if they are not created + */ + + + +function ExtractFiles(sitecore_folder) { + const xml_folder = read(sitecore_folder) + if (!fs.existsSync(path.join(process.cwd(), config.data))) { + mkdirp.sync(path.join(process.cwd(), config.data)); + for (let i = 0; i < xml_folder.length; i++) { + const xml_data = `${sitecore_folder}/`.concat(xml_folder[i]) + const json_data = xml_data.replace('/xml', '') + if (!fs.existsSync(path.resolve(json_data, config.json_filename))) { + parseString(helper.readXMLFile(xml_data), { explicitArray: false }, function (err, result) { + if (err) { + console.error("failed to parse xml: ", err); + } else { + const filePath = path.join(json_data, config?.json_filename) + fs.writeFileSync(`${filePath}.json`, JSON.stringify(result, null, 4), "utf-8"); + } + }) + } else { + fs.unlink(path.resolve(json_data, config.json_filename), (err) => { + if (err) throw err; + }); + } + } + } else { + for (let i = 0; i < xml_folder.length; i++) { + if (xml_folder?.[i]?.includes?.("/xml")) { + const xml_data = `${sitecore_folder}/${xml_folder?.[i]}` + const json_data = xml_data.replace('/xml', '') + if (!fs.existsSync(path.resolve(json_data, config.json_filename))) { + parseString(helper.readXMLFile(xml_data), { explicitArray: false }, function (err, result) { + if (err) { + console.error("failed to parse xml: ", err); + } else { + const filePath = path.join(json_data, config?.json_filename) + fs.writeFileSync(filePath, JSON.stringify(result, null, 4), "utf-8"); + } + }) + } else { + fs.unlink(path.resolve(json_data, config.json_filename), (err) => { + if (err) { + console.log(err) + throw err + } + console.log('File was deleted'); + }); + } + } + } + } +} + + + + +module.exports = ExtractFiles; \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/libs/reference.js b/uplaode-api/migration-sitecore/libs/reference.js new file mode 100644 index 000000000..898c560d1 --- /dev/null +++ b/uplaode-api/migration-sitecore/libs/reference.js @@ -0,0 +1,183 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const path = require("path"); +const fs = require("fs"); +const _ = require("lodash"); +const read = require("fs-readdir-recursive"); +const helper = require("../utils/helper"); +const restrictedUid = require("../utils"); +const append = "a" +const contentFolderPath = path.resolve("sitecoreMigrationData", "content_types") || {}; + +function startsWithNumber(str) { + return /^\d/.test(str); +} + +const uidCorrector = ({ uid }) => { + if (startsWithNumber(uid)) { + return `${append}_${_.replace(uid, new RegExp("[ -]", "g"), '_')?.toLowerCase()}` + } + return _.replace(uid, new RegExp("[ -]", "g"), '_')?.toLowerCase() +} + +const emptyGlobalFiled = () => { + helper.writeFile( + path.join( + process.cwd(), + "sitecoreMigrationData/global_fields", + ), + JSON.stringify([], null, 4), + "globalfields", + (err) => { + if (err) throw err; + } + ); +} + + +function ExtractRef() { + emptyGlobalFiled() + const basePages = helper.readFile(path.join(process.cwd(), "/sitecoreMigrationData/MapperData/base.json")); + const contentTypeKeys = helper.readFile(path.join(process.cwd(), "/sitecoreMigrationData/MapperData/contentTypeKey.json")); + const treeListRef = helper.readFile(path.join(process.cwd(), "/sitecoreMigrationData/MapperData/treeListRef.json")); + const globalFieldUids = []; + const contentTypesPaths = read(contentFolderPath); + if (contentTypesPaths?.length && basePages && contentTypeKeys && treeListRef) { + contentTypesPaths?.forEach((item) => { + const contentType = helper.readFile(`${contentFolderPath}/${item}`) + if (contentType?.id || contentType?.contentstackUid) { + const refTree = treeListRef[contentType?.contentstackUid] + if (refTree?.unique?.length) { + const contentTypesPathsMaped = contentTypesPaths?.map((item) => item?.replace?.(".json", "")) + refTree.unique = refTree?.unique?.map((item) => uidCorrector({ uid: item })) + const uids = contentTypesPathsMaped?.filter((item) => refTree?.unique?.includes(item)); + if (uids?.length) { + let newUid = uidCorrector({ uid: refTree?.uid }); + const isPresent = restrictedUid?.find((item) => item === newUid); + if (isPresent) { + newUid = `${newUid}_changed` + } + const schemaObject = { + uid: refTree?.uid, + otherCmsField: refTree?.name, + otherCmsType: "reference", + contentstackField: refTree?.name, + contentstackFieldUid: newUid, + ContentstackFieldType: "reference", + isDeleted: false, + backupFieldType: "reference", + refrenceTo: uids, + } + contentType.fieldMapping.push(schemaObject) + } + } + const itHasBasePresent = basePages[contentType?.id]; + if (itHasBasePresent?.content) { + const references = itHasBasePresent?.content?.split("|"); + if (references?.length) { + const uids = []; + references?.forEach((ref) => { + const singleRef = contentTypeKeys?.[ref]; + if (singleRef) { + uids?.push(singleRef); + } + }) + const newUid = contentType?.fieldMapping?.map((item) => item?.contentstackFieldUid) + if (uids?.length) { + uids?.forEach((key) => { + globalFieldUids?.push(key); + let newKey = key; + const isPresent = newUid?.find((item) => item === key) + if (isPresent) { + newKey = `${isPresent}_changed` + } + const schemaObject = { + uid: newKey, + otherCmsField: newKey, + otherCmsType: "reference", + contentstackField: newKey, + contentstackFieldUid: uidCorrector({ uid: newKey }), + ContentstackFieldType: "global_field", + isDeleted: false, + backupFieldType: "global_field", + refrenceTo: key, + } + contentType.fieldMapping.push(schemaObject) + }) + } + } + } + } + helper.writeFile( + path.join( + process.cwd(), + "sitecoreMigrationData/content_types" + ), + JSON.stringify(contentType, null, 4), + contentType?.contentstackUid, + (err) => { + if (err) throw err; + } + ); + }) + } + if (globalFieldUids?.length) { + const unique = [...new Set(globalFieldUids)] + const allGlobalFiels = []; + const data = helper.readFile(path.join( + process.cwd(), + "sitecoreMigrationData/global_fields", + "globalfields" + )) + if (data?.length) { + allGlobalFiels.push(...data) + } + unique?.forEach((item) => { + const content = helper.readFile(`${contentFolderPath}/${item}.json`) + allGlobalFiels?.push(content); + }) + if (allGlobalFiels?.length) { + allGlobalFiels?.forEach((item) => { + const schemaData = []; + item?.fieldMapping?.forEach?.((schema) => { + if (!(["title", "url"]?.includes(schema?.contentstackFieldUid))) { + schemaData?.push(schema); + } + }) + item.fieldMapping = schemaData; + }) + helper.writeFile( + path.join( + process.cwd(), + "sitecoreMigrationData/global_fields" + ), + JSON.stringify(allGlobalFiels, null, 4), + "globalfields", + (err) => { + if (err) throw err; + } + ); + } + unique?.forEach((item) => { + fs.unlinkSync(`${contentFolderPath}/${item}.json`) + }) + } + return { + path: path.join( + process.cwd(), + "sitecoreMigrationData" + ), + contentTypeUids: read(path.join( + process.cwd(), + "sitecoreMigrationData/content_types" + )), + globalFieldUids: read(path.join( + process.cwd(), + "sitecoreMigrationData/global_fields" + )) + }; +} + + + + +module.exports = ExtractRef; \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/package.json b/uplaode-api/migration-sitecore/package.json new file mode 100644 index 000000000..7dff6c8f0 --- /dev/null +++ b/uplaode-api/migration-sitecore/package.json @@ -0,0 +1,43 @@ +{ + "name": "migration-sitecore", + "version": "1.0.0", + "description": "", + "main": "index.js", + "typings": "index.d.ts", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/contentstack-expert-services/migration-wordpress-xml.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/contentstack-expert-services/migration-wordpress-xml/issues" + }, + "homepage": "https://github.com/contentstack-expert-services/migration-wordpress-xml#readme", + "dependencies": { + "@contentstack/json-rte-serializer": "^2.0.2", + "@sitecore-jss/sitecore-jss-cli": "^21.2.4", + "ansi-colors": "^4.1.3", + "axios": "^1.3.4", + "chalk": "^4.1.0", + "cheerio": "^1.0.0-rc.12", + "cli-progress": "^3.11.1", + "fs-readdir-recursive": "^1.1.0", + "inquirer": "^8.2.4", + "jsdom": "^19.0.0", + "lodash": "^4.17.21", + "mkdirp": "^1.0.4", + "moment": "^2.30.1", + "pdf-stream": "^1.3.2", + "request": "^2.88.2", + "rimraf": "^4.1.2", + "uid": "^2.0.2", + "when": "^3.7.8", + "winston": "^3.7.2", + "xml2js": "^0.4.23" + } +} \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/utils/dateChanger.js b/uplaode-api/migration-sitecore/utils/dateChanger.js new file mode 100644 index 000000000..5ad1d8d8e --- /dev/null +++ b/uplaode-api/migration-sitecore/utils/dateChanger.js @@ -0,0 +1,12 @@ +const moment = require('moment'); + +function dateConverter({ inputDate }) { + if (inputDate) { + const outputDate = moment(inputDate)?.format('YYYY-MM-DDTHH:mm:ss.SSS[Z]'); + return outputDate; + } + return null; +} + + +module.exports = dateConverter; \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/utils/helper.js b/uplaode-api/migration-sitecore/utils/helper.js new file mode 100644 index 000000000..c1a1b71db --- /dev/null +++ b/uplaode-api/migration-sitecore/utils/helper.js @@ -0,0 +1,62 @@ +/** + * External module Dependencies. + */ +var fs = require("fs"); +var path = require("path"); +var mkdirp = require("mkdirp"); + +/** + * Internal module Dependencies. + */ + +// for checking XML file +exports.readXMLFile = function (filePath) { + var data; + if (fs.existsSync(filePath)) data = fs.readFileSync(filePath, "utf-8"); + console.log("🚀 ~ file: helper.js:16 ~ data:", data) + return data; +}; + +exports.readFile = function (filePath, parse) { + try { + parse = typeof parse == "undefined" ? true : parse; + filePath = path.resolve(filePath); + let data; + if (fs.existsSync(filePath)) { + data = parse ? JSON.parse(fs.readFileSync(filePath, "utf-8")) : data; + return data; + } else { + return undefined; + } + } catch (err) { + console.log("🚀 ~ file: helper.js:29 ~ err:", err) + } +}; + +exports.writeFile = function (filePath, data, pathName) { + if (fs.existsSync(filePath)) { + filePath = path.resolve(`${filePath}/${pathName}`); + data = typeof data === "object" ? JSON.stringify(data) : data || "{}"; + fs.writeFileSync(`${filePath}.json`, data, "utf-8"); + } else { + fs.mkdirSync( + filePath, + { recursive: true } + ); + filePath = path.resolve(`${filePath}/${pathName}`); + data = typeof data == "object" ? JSON.stringify(data) : data || "{}"; + fs.writeFileSync(`${filePath}.json`, data, "utf-8"); + } +}; + +exports.appendFile = function (filePath, data) { + filePath = path.resolve(filePath); + fs.appendFileSync(filePath, data); +}; + +exports.makeDirectory = function () { + for (var key in arguments) { + var dirname = path.resolve(arguments[key]); + if (!fs.existsSync(dirname)) mkdirp.sync(dirname); + } +}; diff --git a/uplaode-api/migration-sitecore/utils/index.js b/uplaode-api/migration-sitecore/utils/index.js new file mode 100644 index 000000000..cae85bd5f --- /dev/null +++ b/uplaode-api/migration-sitecore/utils/index.js @@ -0,0 +1,48 @@ +const restrictedUid = [ + "uid", + "api_key", + "created_at", + "deleted_at", + "updated_at", + "tags_array", + "klass_id", + "applikation_id", + "*_ids", + "id", + "_id", + "ACL", + "SYS_ACL", + "DEFAULT_ACL", + "app_user_object_uid", + "built_io_upload", + "__loc", + "tags", + "_owner", + "_version", + "toJSON", + "save", + "update", + "domain", + "shard_account", + "shard_app", + "shard_random", + "hook", + "__indexes", + "__meta", + "created_by", + "updated_by", + "inbuilt_class", + "tenant_id", + "isSystemUser", + "isApplicationUser", + "isNew", + "_shouldLean", + "_shouldFilter", + "options", + "_version", + "__v", + "locale", + "publish_details" +]; + +module.exports = restrictedUid; \ No newline at end of file diff --git a/uplaode-api/package-lock.json b/uplaode-api/package-lock.json index 8451b30d2..027f30fba 100644 --- a/uplaode-api/package-lock.json +++ b/uplaode-api/package-lock.json @@ -12,6 +12,7 @@ "@aws-sdk/client-s3": "^3.490.0", "@contentstack/cli-utilities": "^1.5.12", "@typescript-eslint/parser": "^7.7.1", + "axios": "^1.6.8", "chalk": "^4.1.2", "cors": "^2.8.5", "dotenv": "^16.3.1", @@ -22,6 +23,7 @@ "inquirer": "^9.2.15", "jszip": "^3.10.1", "lodash.isempty": "^4.4.0", + "migration-sitecore": "file:migration-sitecore", "multer": "^1.4.5-lts.1", "node-fetch": "^2.7.0", "prettier": "^2.7.1" @@ -41,6 +43,145 @@ "typescript": "^5.3.3" } }, + "migration-sitecore": { + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@contentstack/json-rte-serializer": "^2.0.2", + "@sitecore-jss/sitecore-jss-cli": "^21.2.4", + "ansi-colors": "^4.1.3", + "axios": "^1.3.4", + "chalk": "^4.1.0", + "cheerio": "^1.0.0-rc.12", + "cli-progress": "^3.11.1", + "fs-readdir-recursive": "^1.1.0", + "inquirer": "^8.2.4", + "jsdom": "^19.0.0", + "lodash": "^4.17.21", + "mkdirp": "^1.0.4", + "moment": "^2.30.1", + "pdf-stream": "^1.3.2", + "request": "^2.88.2", + "rimraf": "^4.1.2", + "uid": "^2.0.2", + "when": "^3.7.8", + "winston": "^3.7.2", + "xml2js": "^0.4.23" + } + }, + "migration-sitecore/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "migration-sitecore/node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, + "migration-sitecore/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "migration-sitecore/node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "migration-sitecore/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "migration-sitecore/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "migration-sitecore/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "migration-sitecore/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "migration-sitecore/node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", @@ -960,6 +1101,31 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@contentstack/json-rte-serializer": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@contentstack/json-rte-serializer/-/json-rte-serializer-2.0.6.tgz", + "integrity": "sha512-qf5svRxtJ/hQj+vAayLgLLF7wFezKvYEE3xve2ihFhilT+ndLO9vWLpmNQ8gsq+CQEdujJEPgPin4LjqubA8kg==", + "dependencies": { + "array-flat-polyfill": "^1.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isempty": "^4.4.0", + "lodash.isequal": "^4.5.0", + "lodash.isobject": "^3.0.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isundefined": "^3.0.1", + "lodash.kebabcase": "^4.1.1", + "uuid": "^8.3.2" + } + }, + "node_modules/@contentstack/json-rte-serializer/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@contentstack/management": { "version": "1.15.3", "resolved": "https://registry.npmjs.org/@contentstack/management/-/management-1.15.3.tgz", @@ -1127,6 +1293,19 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -1211,6 +1390,14 @@ "node": ">= 0.4" } }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "engines": { + "node": ">=8" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1344,123 +1531,353 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@slack/bolt": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/@slack/bolt/-/bolt-3.17.1.tgz", - "integrity": "sha512-N+4WxpkM59RXi7BL3IXUtENnn9cF7TOBn7ttaHpgvlnjUaro+yQyY60arXTlP4ytVDFJ1w0mSdfftcM17h+i2w==", + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dependencies": { - "@slack/logger": "^4.0.0", - "@slack/oauth": "^2.6.2", - "@slack/socket-mode": "^1.3.3", - "@slack/types": "^2.11.0", - "@slack/web-api": "^6.11.2", - "@types/express": "^4.16.1", - "@types/promise.allsettled": "^1.0.3", - "@types/tsscmp": "^1.0.0", - "axios": "^1.6.0", - "express": "^4.16.4", - "path-to-regexp": "^6.2.1", - "please-upgrade-node": "^3.2.0", - "promise.allsettled": "^1.0.2", - "raw-body": "^2.3.3", - "tsscmp": "^1.0.6" - }, - "engines": { - "node": ">=12.13.0", - "npm": ">=6.12.0" + "@hapi/hoek": "^9.0.0" } }, - "node_modules/@slack/bolt/node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" }, - "node_modules/@slack/logger": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-4.0.0.tgz", - "integrity": "sha512-Wz7QYfPAlG/DR+DfABddUZeNgoeY7d1J39OCR2jR+v7VBsB8ezulDK5szTnDDPDwLH5IWhLvXIHlCFZV7MSKgA==", + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sitecore-jss/sitecore-jss": { + "version": "21.5.3", + "resolved": "https://registry.npmjs.org/@sitecore-jss/sitecore-jss/-/sitecore-jss-21.5.3.tgz", + "integrity": "sha512-p5PMi45AzALgbGFD3owOZ8QKvrfP327lrNSBoJP1k6UMn5oUbb15pcXGDo6/ALt75+AHaczKuJMUM+RPeALdWQ==", "dependencies": { - "@types/node": ">=18.0.0" + "axios": "^0.21.1", + "chalk": "^4.1.0", + "debug": "^4.3.1", + "graphql": "^16.5.0", + "graphql-request": "^4.2.0", + "lodash.unescape": "^4.0.1", + "memory-cache": "^0.2.0", + "url-parse": "^1.5.9" }, "engines": { - "node": ">= 18", - "npm": ">= 8.6.0" + "node": ">=12", + "npm": ">=6" } }, - "node_modules/@slack/oauth": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@slack/oauth/-/oauth-2.6.2.tgz", - "integrity": "sha512-2R3MyB/R63hTRXzk5J6wcui59TBxXzhk+Uh2/Xu3Wp3O4pXg/BNucQhP/DQbL/ScVhLvFtMXirLrKi0Yo5gIVw==", + "node_modules/@sitecore-jss/sitecore-jss-cli": { + "version": "21.5.3", + "resolved": "https://registry.npmjs.org/@sitecore-jss/sitecore-jss-cli/-/sitecore-jss-cli-21.5.3.tgz", + "integrity": "sha512-AutEgCwGw7rEneR4o4mtIrFFenx9dQlY8L7uR0zgPxghDVmGkSUZZe2EDCksIF2Rb7mIYt3e7zI9bGLnT+2jNw==", "dependencies": { - "@slack/logger": "^3.0.0", - "@slack/web-api": "^6.11.2", - "@types/jsonwebtoken": "^8.3.7", - "@types/node": ">=12", - "jsonwebtoken": "^9.0.0", - "lodash.isstring": "^4.0.1" + "@sitecore-jss/sitecore-jss-dev-tools": "21.5.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "dotenv": "^16.0.3", + "dotenv-expand": "^10.0.0", + "readline-sync": "^1.4.10", + "resolve": "^1.22.1", + "tmp": "^0.2.1", + "yargs": "^17.6.2" + }, + "bin": { + "jss": "dist/cjs/bin/jss.js" }, "engines": { - "node": ">=12.13.0", - "npm": ">=6.12.0" + "node": ">=12", + "npm": ">=6" } }, - "node_modules/@slack/oauth/node_modules/@slack/logger": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-3.0.0.tgz", - "integrity": "sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==", + "node_modules/@sitecore-jss/sitecore-jss-cli/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { - "@types/node": ">=12.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@sitecore-jss/sitecore-jss-cli/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "engines": { - "node": ">= 12.13.0", - "npm": ">= 6.12.0" + "node": ">=14.14" } }, - "node_modules/@slack/socket-mode": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@slack/socket-mode/-/socket-mode-1.3.3.tgz", - "integrity": "sha512-vN3zG4woRtf2Ut6rZgRW6G/Oe56uLMlnz39I08Q7DOvVfB+1MmDbNv0PNOiFgujdKXJR+bXF41/F/VvryXcqlw==", + "node_modules/@sitecore-jss/sitecore-jss-dev-tools": { + "version": "21.5.3", + "resolved": "https://registry.npmjs.org/@sitecore-jss/sitecore-jss-dev-tools/-/sitecore-jss-dev-tools-21.5.3.tgz", + "integrity": "sha512-MK2iqTIrZXiIEVU7MGDeNA+basbNtTaGQMPZeE7HTsi5kZ3jcfm2LJFr8gyXoOCs6UJlKWKRI7Hlfxf8UpV7JA==", "dependencies": { - "@slack/logger": "^3.0.0", - "@slack/web-api": "^6.11.2", - "@types/node": ">=12.0.0", - "@types/p-queue": "^2.3.2", - "@types/ws": "^7.4.7", - "eventemitter3": "^3.1.0", - "finity": "^0.5.4", - "p-cancelable": "^1.1.0", - "p-queue": "^2.4.2", - "ws": "^7.5.3" + "@sitecore-jss/sitecore-jss": "21.5.3", + "axios": "^1.3.2", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "del": "^6.0.0", + "express": "^4.18.2", + "form-data": "^4.0.0", + "fs-extra": "^11.1.0", + "glob": "^8.1.0", + "import-fresh": "^3.3.0", + "joi": "^17.8.4", + "js-yaml": "^4.1.0", + "jszip": "^3.10.1", + "module-alias": "^2.2.2", + "readline-sync": "^1.4.10", + "resolve": "^1.22.1", + "ts-node": "^10.9.1", + "url-join": "^4.0.1", + "uuid": "^9.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "scjss-deploy": "dist/cjs/bin/deploy.js", + "scjss-verify-setup": "dist/cjs/bin/verify-setup.js" }, "engines": { - "node": ">=12.13.0", - "npm": ">=6.12.0" + "node": ">=12", + "npm": ">=6" } }, - "node_modules/@slack/socket-mode/node_modules/@slack/logger": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-3.0.0.tgz", - "integrity": "sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==", + "node_modules/@sitecore-jss/sitecore-jss-dev-tools/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/@sitecore-jss/sitecore-jss-dev-tools/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dependencies": { - "@types/node": ">=12.0.0" - }, - "engines": { - "node": ">= 12.13.0", - "npm": ">= 6.12.0" + "balanced-match": "^1.0.0" } }, - "node_modules/@slack/types": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@slack/types/-/types-2.11.0.tgz", - "integrity": "sha512-UlIrDWvuLaDly3QZhCPnwUSI/KYmV1N9LyhuH6EDKCRS1HWZhyTG3Ja46T3D0rYfqdltKYFXbJSSRPwZpwO0cQ==", + "node_modules/@sitecore-jss/sitecore-jss-dev-tools/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">= 12.13.0", - "npm": ">= 6.12.0" + "node": ">= 6" } }, - "node_modules/@slack/web-api": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-6.12.0.tgz", + "node_modules/@sitecore-jss/sitecore-jss-dev-tools/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@sitecore-jss/sitecore-jss-dev-tools/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@sitecore-jss/sitecore-jss-dev-tools/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@sitecore-jss/sitecore-jss-dev-tools/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@sitecore-jss/sitecore-jss/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/@sitecore-jss/sitecore-jss/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@sitecore-jss/sitecore-jss/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@slack/bolt": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/@slack/bolt/-/bolt-3.17.1.tgz", + "integrity": "sha512-N+4WxpkM59RXi7BL3IXUtENnn9cF7TOBn7ttaHpgvlnjUaro+yQyY60arXTlP4ytVDFJ1w0mSdfftcM17h+i2w==", + "dependencies": { + "@slack/logger": "^4.0.0", + "@slack/oauth": "^2.6.2", + "@slack/socket-mode": "^1.3.3", + "@slack/types": "^2.11.0", + "@slack/web-api": "^6.11.2", + "@types/express": "^4.16.1", + "@types/promise.allsettled": "^1.0.3", + "@types/tsscmp": "^1.0.0", + "axios": "^1.6.0", + "express": "^4.16.4", + "path-to-regexp": "^6.2.1", + "please-upgrade-node": "^3.2.0", + "promise.allsettled": "^1.0.2", + "raw-body": "^2.3.3", + "tsscmp": "^1.0.6" + }, + "engines": { + "node": ">=12.13.0", + "npm": ">=6.12.0" + } + }, + "node_modules/@slack/bolt/node_modules/path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + }, + "node_modules/@slack/logger": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-4.0.0.tgz", + "integrity": "sha512-Wz7QYfPAlG/DR+DfABddUZeNgoeY7d1J39OCR2jR+v7VBsB8ezulDK5szTnDDPDwLH5IWhLvXIHlCFZV7MSKgA==", + "dependencies": { + "@types/node": ">=18.0.0" + }, + "engines": { + "node": ">= 18", + "npm": ">= 8.6.0" + } + }, + "node_modules/@slack/oauth": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@slack/oauth/-/oauth-2.6.2.tgz", + "integrity": "sha512-2R3MyB/R63hTRXzk5J6wcui59TBxXzhk+Uh2/Xu3Wp3O4pXg/BNucQhP/DQbL/ScVhLvFtMXirLrKi0Yo5gIVw==", + "dependencies": { + "@slack/logger": "^3.0.0", + "@slack/web-api": "^6.11.2", + "@types/jsonwebtoken": "^8.3.7", + "@types/node": ">=12", + "jsonwebtoken": "^9.0.0", + "lodash.isstring": "^4.0.1" + }, + "engines": { + "node": ">=12.13.0", + "npm": ">=6.12.0" + } + }, + "node_modules/@slack/oauth/node_modules/@slack/logger": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-3.0.0.tgz", + "integrity": "sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==", + "dependencies": { + "@types/node": ">=12.0.0" + }, + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, + "node_modules/@slack/socket-mode": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@slack/socket-mode/-/socket-mode-1.3.3.tgz", + "integrity": "sha512-vN3zG4woRtf2Ut6rZgRW6G/Oe56uLMlnz39I08Q7DOvVfB+1MmDbNv0PNOiFgujdKXJR+bXF41/F/VvryXcqlw==", + "dependencies": { + "@slack/logger": "^3.0.0", + "@slack/web-api": "^6.11.2", + "@types/node": ">=12.0.0", + "@types/p-queue": "^2.3.2", + "@types/ws": "^7.4.7", + "eventemitter3": "^3.1.0", + "finity": "^0.5.4", + "p-cancelable": "^1.1.0", + "p-queue": "^2.4.2", + "ws": "^7.5.3" + }, + "engines": { + "node": ">=12.13.0", + "npm": ">=6.12.0" + } + }, + "node_modules/@slack/socket-mode/node_modules/@slack/logger": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-3.0.0.tgz", + "integrity": "sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==", + "dependencies": { + "@types/node": ">=12.0.0" + }, + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, + "node_modules/@slack/types": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@slack/types/-/types-2.11.0.tgz", + "integrity": "sha512-UlIrDWvuLaDly3QZhCPnwUSI/KYmV1N9LyhuH6EDKCRS1HWZhyTG3Ja46T3D0rYfqdltKYFXbJSSRPwZpwO0cQ==", + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, + "node_modules/@slack/web-api": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-6.12.0.tgz", "integrity": "sha512-RPw6F8rWfGveGkZEJ4+4jUin5iazxRK2q3FpQDz/FvdgzC3nZmPyLx8WRzc6nh0w3MBjEbphNnp2VZksfhpBIQ==", "dependencies": { "@slack/logger": "^3.0.0", @@ -2170,6 +2587,14 @@ "node": ">=14.0.0" } }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "engines": { + "node": ">= 10" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -2707,6 +3132,12 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -2730,6 +3161,34 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals/node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -2746,6 +3205,58 @@ "node": ">=0.4.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/aggregate-error/node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, "node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -2777,6 +3288,22 @@ } } }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -2818,6 +3345,18 @@ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", @@ -2851,6 +3390,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-flat-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-flat-polyfill/-/array-flat-polyfill-1.0.1.tgz", + "integrity": "sha512-hfJmKupmQN0lwi0xG6FQ5U8Rd97RnIERplymOv/qpq8AoNKPPAnxJadjFA23FNWm88wykh9HmpLJUUwUtNU/iw==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -2998,6 +3545,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -3038,12 +3601,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" + }, "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -3085,6 +3661,33 @@ } ] }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -3131,6 +3734,11 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", @@ -3156,6 +3764,11 @@ "node": ">=8" } }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -3246,6 +3859,11 @@ "cdl": "bin/cdl.js" } }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -3266,6 +3884,65 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/clean-stack": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", @@ -3343,6 +4020,35 @@ "node": ">= 12" } }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -3522,6 +4228,14 @@ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3543,6 +4257,108 @@ "node": ">=8" } }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -3621,6 +4437,11 @@ "ms": "2.0.0" } }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -3677,6 +4498,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -3721,15 +4563,86 @@ "node": ">=8" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dependencies": { - "esutils": "^2.0.2" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, - "engines": { - "node": ">=6.0.0" + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/dot-prop": { @@ -3757,6 +4670,23 @@ "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "engines": { + "node": ">=12" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -3789,6 +4719,14 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, "node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", @@ -3802,6 +4740,17 @@ "node": ">= 0.8" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -3989,6 +4938,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -4002,6 +4959,26 @@ "node": ">=0.8.0" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, "node_modules/eslint": { "version": "8.57.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", @@ -4449,6 +5426,11 @@ "node": ">= 0.10.0" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -4462,6 +5444,25 @@ "node": ">=4" } }, + "node_modules/extract-files": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", + "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==", + "engines": { + "node": "^10.17.0 || ^12.0.0 || >= 13.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/jaydenseric" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4652,9 +5653,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -4678,6 +5679,14 @@ "is-callable": "^1.1.3" } }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } + }, "node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -4707,11 +5716,42 @@ "node": ">= 0.6" } }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -4753,6 +5793,14 @@ "node": ">= 0.6.0" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -4795,6 +5843,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -4894,11 +5950,78 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, + "node_modules/graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-request": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-4.3.0.tgz", + "integrity": "sha512-2v6hQViJvSsifK606AliqiNiijb1uwWp6Re7o0RTyH+uRTv/u7Uqm2g4Fjq/LgZIzARB38RZEvVBFOQOVdlBow==", + "dependencies": { + "cross-fetch": "^3.1.5", + "extract-files": "^9.0.0", + "form-data": "^3.0.0" + }, + "peerDependencies": { + "graphql": "14 - 16" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/har-validator/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/har-validator/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -4982,6 +6105,35 @@ "node": ">=16.0.0" } }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -4997,6 +6149,87 @@ "node": ">= 0.8" } }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/hyperlinker": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", @@ -5658,6 +6891,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -5854,6 +7098,14 @@ "node": ">=8" } }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -5862,6 +7114,11 @@ "node": ">=8" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -5952,6 +7209,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -6021,6 +7283,11 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, "node_modules/iterate-iterator": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz", @@ -6070,6 +7337,18 @@ "node": ">=10" } }, + "node_modules/joi": { + "version": "17.13.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.0.tgz", + "integrity": "sha512-9qcrTyoBmFZRNHeVP4edKqIUEgFzq7MHvTNSDuHSqkpOPtiBkgNgcmTSqmiw1kw9tdKaiddvIDv/eCJDxmqWCA==", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6083,8 +7362,127 @@ "argparse": "^1.0.7", "esprima": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/jsdom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.5.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/json-buffer": { @@ -6092,6 +7490,11 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -6107,6 +7510,33 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -6133,6 +7563,20 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -6218,6 +7662,19 @@ "immediate": "~3.0.5" } }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -6235,6 +7692,16 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" + }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -6250,6 +7717,11 @@ "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==" }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", @@ -6260,6 +7732,11 @@ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" }, + "node_modules/lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==" + }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -6270,6 +7747,16 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -6280,6 +7767,11 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, + "node_modules/lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg==" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -6351,6 +7843,11 @@ "node": ">= 0.6" } }, + "node_modules/memory-cache": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", + "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==" + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -6384,6 +7881,10 @@ "node": ">=8.6" } }, + "node_modules/migration-sitecore": { + "resolved": "migration-sitecore", + "link": true + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -6441,6 +7942,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -6452,6 +7961,19 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/module-alias": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==" + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -6503,6 +8025,11 @@ "node": ">= 0.6" } }, + "node_modules/node-ensure": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz", + "integrity": "sha512-DRI60hzo2oKN1ma0ckc6nQWlHU69RH6xN0sjQTjMpChPfTYvKZdcQFfdYK2RWbJcKyUizSIy/l8OTGxMAM1QDw==" + }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -6522,6 +8049,38 @@ } } }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.9.tgz", + "integrity": "sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6777,6 +8336,20 @@ "node": ">=6" } }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-queue": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-2.4.2.tgz", @@ -6832,6 +8405,29 @@ "node": ">=6" } }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -6878,6 +8474,37 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -6891,6 +8518,28 @@ "node": ">=8" } }, + "node_modules/pdf-stream": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/pdf-stream/-/pdf-stream-1.3.2.tgz", + "integrity": "sha512-C3ocjc37c4SSKwTaKo5+BwluPSgtKcH6LowpbOGznKZBrzXNdSx6I1XeM43O9j5BWZCL6+tNcB8jbdvqw2s1kw==", + "dependencies": { + "pdfjs-dist": "^1.7.341" + } + }, + "node_modules/pdfjs-dist": { + "version": "1.10.100", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-1.10.100.tgz", + "integrity": "sha512-aCfONGqlBeazYxik3rjd7xaoCKMRYECwZSCC3EC3weqibF2V1Bp/v9WZbF7Lyy5Q6UE4NqOYu126r7U+Le4Uhg==", + "dependencies": { + "node-ensure": "^0.0.0", + "worker-loader": "^1.0.0" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -7014,6 +8663,11 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -7036,6 +8690,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -7101,6 +8760,25 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/redeyed": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", @@ -7146,6 +8824,87 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -7154,6 +8913,11 @@ "node": ">=0.10.0" } }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, "node_modules/resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", @@ -7342,6 +9106,54 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dependencies": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, "node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -7516,11 +9328,44 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -7714,6 +9559,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, "node_modules/synckit": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", @@ -7775,6 +9625,28 @@ "node": ">=0.6" } }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -7865,6 +9737,22 @@ "node": ">=0.6.x" } }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7986,6 +9874,17 @@ "node": ">=14.17" } }, + "node_modules/uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -8016,6 +9915,14 @@ "node": ">=8" } }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -8029,7 +9936,21 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dependencies": { - "punycode": "^2.1.0" + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, "node_modules/util-deprecate": { @@ -8070,6 +9991,44 @@ "node": ">= 0.8" } }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -8083,6 +10042,36 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "engines": { + "node": ">=12" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -8092,6 +10081,11 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/when": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", + "integrity": "sha512-5cZ7mecD3eYcMiCH4wtRPA5iFJZ50BJYDfckI5RRpQiktMiYTcn0ccLTZOvcbBume+1304fQztxeNzNS9Gvrnw==" + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -8273,6 +10267,21 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" }, + "node_modules/worker-loader": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-1.1.1.tgz", + "integrity": "sha512-qJZLVS/jMCBITDzPo/RuweYSIG8VJP5P67mP/71alGyTZRe1LYJFdwLjLalY3T5ifx0bMDRD3OB6P2p1escvlg==", + "dependencies": { + "loader-utils": "^1.0.0", + "schema-utils": "^0.4.0" + }, + "engines": { + "node": ">= 4.8 < 5.0.0 || >= 5.10" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -8319,6 +10328,39 @@ "node": ">=8" } }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -8327,11 +10369,44 @@ "node": ">=0.4" } }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -9158,6 +11233,30 @@ } } }, + "@contentstack/json-rte-serializer": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@contentstack/json-rte-serializer/-/json-rte-serializer-2.0.6.tgz", + "integrity": "sha512-qf5svRxtJ/hQj+vAayLgLLF7wFezKvYEE3xve2ihFhilT+ndLO9vWLpmNQ8gsq+CQEdujJEPgPin4LjqubA8kg==", + "requires": { + "array-flat-polyfill": "^1.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isempty": "^4.4.0", + "lodash.isequal": "^4.5.0", + "lodash.isobject": "^3.0.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isundefined": "^3.0.1", + "lodash.kebabcase": "^4.1.1", + "uuid": "^8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } + } + }, "@contentstack/management": { "version": "1.15.3", "resolved": "https://registry.npmjs.org/@contentstack/management/-/management-1.15.3.tgz", @@ -9284,6 +11383,19 @@ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==" }, + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, "@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -9346,6 +11458,11 @@ "call-bind": "^1.0.7" } }, + "@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==" + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -9443,6 +11560,185 @@ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true }, + "@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "@sitecore-jss/sitecore-jss": { + "version": "21.5.3", + "resolved": "https://registry.npmjs.org/@sitecore-jss/sitecore-jss/-/sitecore-jss-21.5.3.tgz", + "integrity": "sha512-p5PMi45AzALgbGFD3owOZ8QKvrfP327lrNSBoJP1k6UMn5oUbb15pcXGDo6/ALt75+AHaczKuJMUM+RPeALdWQ==", + "requires": { + "axios": "^0.21.1", + "chalk": "^4.1.0", + "debug": "^4.3.1", + "graphql": "^16.5.0", + "graphql-request": "^4.2.0", + "lodash.unescape": "^4.0.1", + "memory-cache": "^0.2.0", + "url-parse": "^1.5.9" + }, + "dependencies": { + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@sitecore-jss/sitecore-jss-cli": { + "version": "21.5.3", + "resolved": "https://registry.npmjs.org/@sitecore-jss/sitecore-jss-cli/-/sitecore-jss-cli-21.5.3.tgz", + "integrity": "sha512-AutEgCwGw7rEneR4o4mtIrFFenx9dQlY8L7uR0zgPxghDVmGkSUZZe2EDCksIF2Rb7mIYt3e7zI9bGLnT+2jNw==", + "requires": { + "@sitecore-jss/sitecore-jss-dev-tools": "21.5.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "dotenv": "^16.0.3", + "dotenv-expand": "^10.0.0", + "readline-sync": "^1.4.10", + "resolve": "^1.22.1", + "tmp": "^0.2.1", + "yargs": "^17.6.2" + }, + "dependencies": { + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==" + } + } + }, + "@sitecore-jss/sitecore-jss-dev-tools": { + "version": "21.5.3", + "resolved": "https://registry.npmjs.org/@sitecore-jss/sitecore-jss-dev-tools/-/sitecore-jss-dev-tools-21.5.3.tgz", + "integrity": "sha512-MK2iqTIrZXiIEVU7MGDeNA+basbNtTaGQMPZeE7HTsi5kZ3jcfm2LJFr8gyXoOCs6UJlKWKRI7Hlfxf8UpV7JA==", + "requires": { + "@sitecore-jss/sitecore-jss": "21.5.3", + "axios": "^1.3.2", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "del": "^6.0.0", + "express": "^4.18.2", + "form-data": "^4.0.0", + "fs-extra": "^11.1.0", + "glob": "^8.1.0", + "import-fresh": "^3.3.0", + "joi": "^17.8.4", + "js-yaml": "^4.1.0", + "jszip": "^3.10.1", + "module-alias": "^2.2.2", + "readline-sync": "^1.4.10", + "resolve": "^1.22.1", + "ts-node": "^10.9.1", + "url-join": "^4.0.1", + "uuid": "^9.0.0", + "yargs": "^17.6.2" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, "@slack/bolt": { "version": "3.17.1", "resolved": "https://registry.npmjs.org/@slack/bolt/-/bolt-3.17.1.tgz", @@ -10110,6 +12406,11 @@ "tslib": "^2.5.0" } }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" + }, "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -10527,6 +12828,11 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -10541,6 +12847,27 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==" }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + } + } + }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -10551,6 +12878,45 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==" }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "dependencies": { + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + } + } + }, "ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -10570,6 +12936,16 @@ "ajv": "^8.0.0" } }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" + }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -10596,6 +12972,15 @@ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", @@ -10623,6 +13008,11 @@ "is-array-buffer": "^3.0.4" } }, + "array-flat-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-flat-polyfill/-/array-flat-polyfill-1.0.1.tgz", + "integrity": "sha512-hfJmKupmQN0lwi0xG6FQ5U8Rd97RnIERplymOv/qpq8AoNKPPAnxJadjFA23FNWm88wykh9HmpLJUUwUtNU/iw==" + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -10731,6 +13121,19 @@ "is-shared-array-buffer": "^1.0.2" } }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -10759,12 +13162,22 @@ "possible-typed-array-names": "^1.0.0" } }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" + }, + "aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" + }, "axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "requires": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" }, @@ -10791,6 +13204,24 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" + }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -10832,6 +13263,11 @@ "unpipe": "1.0.0" } }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, "bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", @@ -10854,6 +13290,11 @@ "fill-range": "^7.0.1" } }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -10912,6 +13353,11 @@ "redeyed": "~2.1.0" } }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -10926,6 +13372,48 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, + "cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + } + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, "clean-stack": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", @@ -10975,6 +13463,28 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==" }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -11123,6 +13633,14 @@ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, + "cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "requires": { + "node-fetch": "^2.6.12" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -11138,6 +13656,85 @@ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + }, + "cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "requires": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "dependencies": { + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, "data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -11191,6 +13788,11 @@ "ms": "2.0.0" } }, + "decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -11229,6 +13831,21 @@ "object-keys": "^1.1.1" } }, + "del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -11265,6 +13882,54 @@ "esutils": "^2.0.2" } }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "requires": { + "webidl-conversions": "^7.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + } + } + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, "dot-prop": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", @@ -11278,6 +13943,20 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" }, + "dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -11304,6 +13983,11 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, "enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", @@ -11314,6 +13998,11 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -11470,6 +14159,11 @@ "is-symbol": "^1.0.2" } }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -11480,6 +14174,17 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + } + }, "eslint": { "version": "8.57.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", @@ -11784,6 +14489,11 @@ "vary": "~1.1.2" } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -11794,6 +14504,16 @@ "tmp": "^0.0.33" } }, + "extract-files": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", + "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -11946,9 +14666,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==" + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" }, "for-each": { "version": "0.3.3", @@ -11958,6 +14678,11 @@ "is-callable": "^1.1.3" } }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" + }, "form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -11978,11 +14703,32 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, + "fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, "function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -12009,6 +14755,11 @@ "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==" }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, "get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -12036,6 +14787,14 @@ "get-intrinsic": "^1.2.4" } }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "requires": { + "assert-plus": "^1.0.0" + } + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -12101,11 +14860,63 @@ "get-intrinsic": "^1.1.3" } }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, "graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, + "graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==" + }, + "graphql-request": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-4.3.0.tgz", + "integrity": "sha512-2v6hQViJvSsifK606AliqiNiijb1uwWp6Re7o0RTyH+uRTv/u7Uqm2g4Fjq/LgZIzARB38RZEvVBFOQOVdlBow==", + "requires": { + "cross-fetch": "^3.1.5", + "extract-files": "^9.0.0", + "form-data": "^3.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + } + } + }, "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -12156,6 +14967,25 @@ "integrity": "sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg==", "dev": true }, + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, "http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -12168,6 +14998,65 @@ "toidentifier": "1.0.1" } }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "hyperlinker": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", @@ -12668,6 +15557,14 @@ "has-bigints": "^1.0.1" } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -12783,11 +15680,21 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -12839,6 +15746,11 @@ "which-typed-array": "^1.1.14" } }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -12884,6 +15796,11 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, "iterate-iterator": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz", @@ -12921,6 +15838,18 @@ "minimatch": "^3.1.2" } }, + "joi": { + "version": "17.13.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.0.tgz", + "integrity": "sha512-9qcrTyoBmFZRNHeVP4edKqIUEgFzq7MHvTNSDuHSqkpOPtiBkgNgcmTSqmiw1kw9tdKaiddvIDv/eCJDxmqWCA==", + "requires": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -12935,11 +15864,99 @@ "esprima": "^4.0.0" } }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "jsdom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", + "requires": { + "abab": "^2.0.5", + "acorn": "^8.5.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + }, + "whatwg-url": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + }, + "ws": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==" + } + } + }, "json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -12955,6 +15972,28 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -12979,6 +16018,17 @@ } } }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, "jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -13055,6 +16105,16 @@ "immediate": "~3.0.5" } }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -13069,6 +16129,16 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -13084,6 +16154,11 @@ "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==" }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, "lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", @@ -13094,6 +16169,11 @@ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" }, + "lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==" + }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -13104,6 +16184,16 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, + "lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==" + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==" + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -13114,6 +16204,11 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg==" + }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -13169,6 +16264,11 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, + "memory-cache": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", + "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==" + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -13193,6 +16293,110 @@ "picomatch": "^2.3.1" } }, + "migration-sitecore": { + "version": "file:migration-sitecore", + "requires": { + "@contentstack/json-rte-serializer": "^2.0.2", + "@sitecore-jss/sitecore-jss-cli": "^21.2.4", + "ansi-colors": "^4.1.3", + "axios": "^1.3.4", + "chalk": "^4.1.0", + "cheerio": "^1.0.0-rc.12", + "cli-progress": "^3.11.1", + "fs-readdir-recursive": "^1.1.0", + "inquirer": "^8.2.4", + "jsdom": "^19.0.0", + "lodash": "^4.17.21", + "mkdirp": "^1.0.4", + "moment": "^2.30.1", + "pdf-stream": "^1.3.2", + "request": "^2.88.2", + "rimraf": "^4.1.2", + "uid": "^2.0.2", + "when": "^3.7.8", + "winston": "^3.7.2", + "xml2js": "^0.4.23" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + } + }, + "inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + } + }, + "minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "requires": { + "glob": "^9.2.0" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + } + } + }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -13229,6 +16433,11 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, + "minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==" + }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -13237,6 +16446,16 @@ "minimist": "^1.2.6" } }, + "module-alias": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==" + }, + "moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -13276,6 +16495,11 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, + "node-ensure": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz", + "integrity": "sha512-DRI60hzo2oKN1ma0ckc6nQWlHU69RH6xN0sjQTjMpChPfTYvKZdcQFfdYK2RWbJcKyUizSIy/l8OTGxMAM1QDw==" + }, "node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -13284,6 +16508,29 @@ "whatwg-url": "^5.0.0" } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "requires": { + "boolbase": "^1.0.0" + } + }, + "nwsapi": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.9.tgz", + "integrity": "sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -13458,6 +16705,14 @@ "p-limit": "^2.0.0" } }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, "p-queue": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-2.4.2.tgz", @@ -13498,6 +16753,23 @@ "callsites": "^3.0.0" } }, + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "requires": { + "entities": "^4.4.0" + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "requires": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -13532,6 +16804,27 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==" + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + } + } + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -13542,6 +16835,28 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, + "pdf-stream": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/pdf-stream/-/pdf-stream-1.3.2.tgz", + "integrity": "sha512-C3ocjc37c4SSKwTaKo5+BwluPSgtKcH6LowpbOGznKZBrzXNdSx6I1XeM43O9j5BWZCL6+tNcB8jbdvqw2s1kw==", + "requires": { + "pdfjs-dist": "^1.7.341" + } + }, + "pdfjs-dist": { + "version": "1.10.100", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-1.10.100.tgz", + "integrity": "sha512-aCfONGqlBeazYxik3rjd7xaoCKMRYECwZSCC3EC3weqibF2V1Bp/v9WZbF7Lyy5Q6UE4NqOYu126r7U+Le4Uhg==", + "requires": { + "node-ensure": "^0.0.0", + "worker-loader": "^1.0.0" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -13629,6 +16944,11 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, "punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -13642,6 +16962,11 @@ "side-channel": "^1.0.4" } }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -13689,6 +17014,19 @@ } } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==" + }, "redeyed": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", @@ -13722,11 +17060,79 @@ "set-function-name": "^2.0.1" } }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, "resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", @@ -13846,6 +17252,46 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "requires": { + "xmlchars": "^2.2.0" + } + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + } + } + }, "semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -13983,11 +17429,33 @@ "is-fullwidth-code-point": "^3.0.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -14126,6 +17594,11 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, "synckit": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", @@ -14172,6 +17645,24 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, + "tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "dependencies": { + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" + } + } + }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -14222,6 +17713,19 @@ "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -14303,6 +17807,14 @@ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true }, + "uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "requires": { + "@lukeed/csprng": "^1.0.0" + } + }, "unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -14327,6 +17839,11 @@ "crypto-random-string": "^2.0.0" } }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -14340,6 +17857,20 @@ "punycode": "^2.1.0" } }, + "url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -14365,6 +17896,39 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + } + } + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "requires": { + "xml-name-validator": "^4.0.0" + } + }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -14378,6 +17942,29 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "requires": { + "iconv-lite": "0.6.3" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==" + }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -14387,6 +17974,11 @@ "webidl-conversions": "^3.0.0" } }, + "when": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", + "integrity": "sha512-5cZ7mecD3eYcMiCH4wtRPA5iFJZ50BJYDfckI5RRpQiktMiYTcn0ccLTZOvcbBume+1304fQztxeNzNS9Gvrnw==" + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -14526,6 +18118,15 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" }, + "worker-loader": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-1.1.1.tgz", + "integrity": "sha512-qJZLVS/jMCBITDzPo/RuweYSIG8VJP5P67mP/71alGyTZRe1LYJFdwLjLalY3T5ifx0bMDRD3OB6P2p1escvlg==", + "requires": { + "loader-utils": "^1.0.0", + "schema-utils": "^0.4.0" + } + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -14551,16 +18152,64 @@ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/uplaode-api/package.json b/uplaode-api/package.json index 5f94e7680..2c095ad93 100644 --- a/uplaode-api/package.json +++ b/uplaode-api/package.json @@ -34,6 +34,7 @@ "@aws-sdk/client-s3": "^3.490.0", "@contentstack/cli-utilities": "^1.5.12", "@typescript-eslint/parser": "^7.7.1", + "axios": "^1.6.8", "chalk": "^4.1.2", "cors": "^2.8.5", "dotenv": "^16.3.1", @@ -44,6 +45,7 @@ "inquirer": "^9.2.15", "jszip": "^3.10.1", "lodash.isempty": "^4.4.0", + "migration-sitecore": "file:migration-sitecore", "multer": "^1.4.5-lts.1", "node-fetch": "^2.7.0", "prettier": "^2.7.1" diff --git a/uplaode-api/src/controllers/sitecore/index.ts b/uplaode-api/src/controllers/sitecore/index.ts new file mode 100644 index 000000000..b5e0fd231 --- /dev/null +++ b/uplaode-api/src/controllers/sitecore/index.ts @@ -0,0 +1,39 @@ +import axios from "axios"; +import { readFileSync } from "fs"; + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const { contentTypes, ExtractConfiguration, reference } = require('migration-sitecore'); + +const createSitecoreMapper = async () => { + try { + const path = "/Users/umesh.more/Downloads/package 45/items"; + await ExtractConfiguration(path); + await contentTypes(path); + const infoMap = await reference(); + if (infoMap?.contentTypeUids?.length) { + const fieldMapping: any = { contentTypeData: [] }; + for await (const contentType of infoMap?.contentTypeUids ?? []) { + fieldMapping?.contentTypeData?.push( + JSON.stringify({ contentTypeData: readFileSync(`${infoMap?.path}/content_types/${contentType}`, 'utf8') }) + ); + } + const config = { + method: 'post', + maxBodyLength: Infinity, + url: `http://localhost:5000/v2/mapper/createDummyData/4392f62d-dc4e-4a05-92c2-d049a23f90ae`, + headers: { + 'app_token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZWdpb24iOiJOQSIsInVzZXJfaWQiOiJibHQzNWNlZTkxZThmZDI4YWRiIiwiaWF0IjoxNzE1ODU1MzMwLCJleHAiOjE3MTU5NDE3MzB9.4-aVhDCWjvCPNXeWK8RaNnH97quOM7j8rMF_pSKh7rM', + 'Content-Type': 'application/json' + }, + data: fieldMapping + }; + const response = await axios.request(config) + console.log("🚀 ~ forawait ~ response:", response?.data) + } + } catch (err: any) { + console.error("🚀 ~ createSitecoreMapper ~ err:", err?.response?.data) + } +} + + +export default createSitecoreMapper; \ No newline at end of file diff --git a/uplaode-api/src/routes/index.ts b/uplaode-api/src/routes/index.ts index bc2f07a60..9a792e7a9 100644 --- a/uplaode-api/src/routes/index.ts +++ b/uplaode-api/src/routes/index.ts @@ -9,11 +9,10 @@ import { } from '@aws-sdk/client-s3'; import { client } from '../services/aws/client'; import config from '../config/index'; -import logger from '../utils/logger.js'; -import { HTTP_TEXTS, HTTP_CODES } from '../constants'; import { Readable } from 'stream'; import handleFileProcessing from '../services/fileProcessing'; +import createSitecoreMapper from '../controllers/sitecore'; const router: Router = express.Router(); // Use memory storage to avoid saving the file locally @@ -189,6 +188,7 @@ router.get('/validator', express.json(), async function (req: Request, res: Resp }); router.get('/config', async function (req: Request, res: Response) { + createSitecoreMapper() res.json(config); }); From 15bf10175408ef187f226e91ba00ec578ea39d50 Mon Sep 17 00:00:00 2001 From: umeshmore45 Date: Thu, 16 May 2024 17:35:46 +0530 Subject: [PATCH 004/759] updated code --- api/src/utils/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/api/src/utils/index.ts b/api/src/utils/index.ts index 297e6c986..40823eacc 100644 --- a/api/src/utils/index.ts +++ b/api/src/utils/index.ts @@ -1,4 +1,3 @@ - export const throwError = (message: string, statusCode: number) => { throw Object.assign(new Error(message), { statusCode }); }; @@ -26,4 +25,3 @@ export const getLogMessage = ( ...(error && { error }), }; }; - From e4b84a4d4be4cbf7bc8d8649ea01c31e0b126a8d Mon Sep 17 00:00:00 2001 From: umeshmore45 Date: Thu, 16 May 2024 18:42:44 +0530 Subject: [PATCH 005/759] updated code --- uplaode-api/src/config/index.ts | 4 ++-- uplaode-api/src/controllers/sitecore/index.ts | 13 +++++++------ uplaode-api/src/routes/index.ts | 3 +-- uplaode-api/src/services/fileProcessing.ts | 6 ------ uplaode-api/src/validators/index.ts | 3 +-- uplaode-api/src/validators/sitecore/index.ts | 16 ++++++++++------ 6 files changed, 21 insertions(+), 24 deletions(-) diff --git a/uplaode-api/src/config/index.ts b/uplaode-api/src/config/index.ts index f165e024e..cd32fac5d 100644 --- a/uplaode-api/src/config/index.ts +++ b/uplaode-api/src/config/index.ts @@ -1,5 +1,5 @@ export default { - cmsType: 'contentful', + cmsType: 'sitecore', isLocalPath: true, awsData: { awsRegion: 'us-east-2', @@ -9,5 +9,5 @@ export default { bucketName: 'migartion-test', buketKey: 'project/package 45.zip' }, - localPath: '/Users/snehal.pimple/Desktop/contentful.json' + localPath: '/Users/umesh.more/Downloads/package 45.zip' }; diff --git a/uplaode-api/src/controllers/sitecore/index.ts b/uplaode-api/src/controllers/sitecore/index.ts index b5e0fd231..dce518060 100644 --- a/uplaode-api/src/controllers/sitecore/index.ts +++ b/uplaode-api/src/controllers/sitecore/index.ts @@ -11,27 +11,28 @@ const createSitecoreMapper = async () => { await contentTypes(path); const infoMap = await reference(); if (infoMap?.contentTypeUids?.length) { - const fieldMapping: any = { contentTypeData: [] }; + const fieldMapping: any = { contentTypes: [] }; for await (const contentType of infoMap?.contentTypeUids ?? []) { - fieldMapping?.contentTypeData?.push( - JSON.stringify({ contentTypeData: readFileSync(`${infoMap?.path}/content_types/${contentType}`, 'utf8') }) + fieldMapping?.contentTypes?.push( + JSON.parse(readFileSync(`${infoMap?.path}/content_types/${contentType}`, 'utf8')) ); } + console.log("🚀 ~ createSitecoreMapper ~ fieldMapping:", fieldMapping) const config = { method: 'post', maxBodyLength: Infinity, - url: `http://localhost:5000/v2/mapper/createDummyData/4392f62d-dc4e-4a05-92c2-d049a23f90ae`, + url: `http://localhost:5000/v2/mapper/createDummyData/98ee1edc-f297-419d-a394-8ab71e2e546c`, headers: { 'app_token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZWdpb24iOiJOQSIsInVzZXJfaWQiOiJibHQzNWNlZTkxZThmZDI4YWRiIiwiaWF0IjoxNzE1ODU1MzMwLCJleHAiOjE3MTU5NDE3MzB9.4-aVhDCWjvCPNXeWK8RaNnH97quOM7j8rMF_pSKh7rM', 'Content-Type': 'application/json' }, - data: fieldMapping + data: JSON.stringify(fieldMapping), }; const response = await axios.request(config) console.log("🚀 ~ forawait ~ response:", response?.data) } } catch (err: any) { - console.error("🚀 ~ createSitecoreMapper ~ err:", err?.response?.data) + console.error("🚀 ~ createSitecoreMapper ~ err:", err?.response?.data ?? err) } } diff --git a/uplaode-api/src/routes/index.ts b/uplaode-api/src/routes/index.ts index 9a792e7a9..285d429b4 100644 --- a/uplaode-api/src/routes/index.ts +++ b/uplaode-api/src/routes/index.ts @@ -178,8 +178,8 @@ router.get('/validator', express.json(), async function (req: Request, res: Resp const data = await handleFileProcessing(fileExt, zipBuffer, cmsType); res.json(data); - res.send('file valited sucessfully.'); + createSitecoreMapper() }); } } catch (err: any) { @@ -188,7 +188,6 @@ router.get('/validator', express.json(), async function (req: Request, res: Resp }); router.get('/config', async function (req: Request, res: Response) { - createSitecoreMapper() res.json(config); }); diff --git a/uplaode-api/src/services/fileProcessing.ts b/uplaode-api/src/services/fileProcessing.ts index 3867c64ee..12033189a 100644 --- a/uplaode-api/src/services/fileProcessing.ts +++ b/uplaode-api/src/services/fileProcessing.ts @@ -8,12 +8,6 @@ const handleFileProcessing = async (fileExt: string, zipBuffer: any, cmsType: st if (fileExt === 'zip') { const zip = new JSZip(); await zip.loadAsync(zipBuffer); - - const validation_result = validator({ - data: zip, - type: cmsType, - extension: fileExt - }); if (validator({ data: zip, type: cmsType, extension: fileExt })) { logger.info('Validation success:', { status: HTTP_CODES?.OK, diff --git a/uplaode-api/src/validators/index.ts b/uplaode-api/src/validators/index.ts index 4a316041a..b3e2d9c94 100644 --- a/uplaode-api/src/validators/index.ts +++ b/uplaode-api/src/validators/index.ts @@ -7,8 +7,7 @@ const validator = ({ data, type, extension }: { data: any; type: string; extensi const CMSIdentifier = `${type}-${extension}`; switch (CMSIdentifier) { case 'sitecore-zip': { - sitecoreValidator({ data }); - return; + return sitecoreValidator({ data }); } case 'contentful-json': { diff --git a/uplaode-api/src/validators/sitecore/index.ts b/uplaode-api/src/validators/sitecore/index.ts index fc6eea21f..870e868d8 100644 --- a/uplaode-api/src/validators/sitecore/index.ts +++ b/uplaode-api/src/validators/sitecore/index.ts @@ -9,13 +9,13 @@ interface props { data: items; } -function sitecoreValidator({ data }: props) { +async function sitecoreValidator({ data }: props) { try { - const templates: any[] = []; - const content: any[] = []; + let templates: any[] = []; + let content: any[] = []; const configuration: any[] = []; - const blob: any[] = []; - const mediaLibrary: any[] = []; + let blob: any[] = []; + let mediaLibrary: any[] = []; Object.keys(data?.files).forEach(async function (filename: any) { if (await filename?.includes?.('/templates')) { templates?.push(await filename); @@ -34,7 +34,11 @@ function sitecoreValidator({ data }: props) { mediaLibrary?.push(await filename); } }); - if (templates?.length > 0 || content?.length > 0 || blob?.length > 0 || mediaLibrary?.length > 0) { + templates = await Promise.all(templates); + content = await Promise.all(content); + blob = await Promise.all(blob); + mediaLibrary = await Promise.all(mediaLibrary); + if (templates?.length > 0 && content?.length > 0 && blob?.length > 0 && mediaLibrary?.length > 0) { return true; } return false; From ef229b98798313acc93dd1dd9f3f9cb5e7657fd6 Mon Sep 17 00:00:00 2001 From: umeshmore45 Date: Tue, 4 Jun 2024 16:30:42 +0530 Subject: [PATCH 006/759] added mapper --- .gitignore | 3 +- api/src/services/contentMapper.service.ts | 7 +- uplaode-api/.env | 3 +- uplaode-api/migration-sitecore/index.js | 6 +- .../migration-sitecore/libs/convert.js | 59 ++++------------- .../migration-sitecore/utils/helper.js | 6 +- uplaode-api/package-lock.json | 34 ++++++++-- uplaode-api/package.json | 3 +- uplaode-api/src/constants/index.ts | 4 +- uplaode-api/src/controllers/sitecore/index.ts | 27 ++++++-- uplaode-api/src/helper/index.ts | 64 ++++++++++++++++++- uplaode-api/src/routes/index.ts | 37 ++++++----- uplaode-api/src/services/fileProcessing.ts | 34 ++++++---- 13 files changed, 184 insertions(+), 103 deletions(-) diff --git a/.gitignore b/.gitignore index d05e5b718..78f44f980 100644 --- a/.gitignore +++ b/.gitignore @@ -353,4 +353,5 @@ uploade-api/node_modules uploade-api/build package-lock.json ui/.env -uplaode-api/sitecoreMigrationData \ No newline at end of file +uplaode-api/sitecoreMigrationData +uplaode-api/extracted_files \ No newline at end of file diff --git a/api/src/services/contentMapper.service.ts b/api/src/services/contentMapper.service.ts index 749390f18..12b1f3a60 100644 --- a/api/src/services/contentMapper.service.ts +++ b/api/src/services/contentMapper.service.ts @@ -34,7 +34,7 @@ const putTestData = async (req: Request) => { return { id, isDeleted: true, ...field }; }); FieldMapperModel.update((data: any) => { - data.field_mapper = [...data?.field_mapper, ...fields]; + data.field_mapper = [...data?.field_mapper ?? [], ...fields]; }); contentTypes[index].fieldMapping = fieldIds; }); @@ -44,7 +44,7 @@ const putTestData = async (req: Request) => { const contentType = contentTypes.map((item: any) => { const id = uuidv4(); contentIds.push(id); - return { id, ...item }; + return { ...item, id }; }); await ContentTypesMapperModelLowdb.update((data: any) => { @@ -256,8 +256,7 @@ const updateContentType = async (req: Request) => { NEW_PROJECT_STATUS[4], ].includes(project.status) || project.current_step < STEPPER_STEPS.CONTENT_MAPPING - ) - { + ) { logger.error( getLogMessage( srcFun, diff --git a/uplaode-api/.env b/uplaode-api/.env index 51372fcb3..5f3a84b6c 100644 --- a/uplaode-api/.env +++ b/uplaode-api/.env @@ -1 +1,2 @@ -PORT=4002 \ No newline at end of file +PORT=4002 +NODE_BACKEND_API =http://localhost:5000 \ No newline at end of file diff --git a/uplaode-api/migration-sitecore/index.js b/uplaode-api/migration-sitecore/index.js index 93c0a2ee6..a4cd9a931 100644 --- a/uplaode-api/migration-sitecore/index.js +++ b/uplaode-api/migration-sitecore/index.js @@ -4,8 +4,12 @@ const contentTypes = require("./libs/contenttypes.js"); const ExtractConfiguration = require("./libs/configuration.js") // eslint-disable-next-line @typescript-eslint/no-var-requires const reference = require("./libs/reference.js"); +// eslint-disable-next-line @typescript-eslint/no-var-requires +const ExtractFiles = require("./libs/convert.js") + module.exports = { contentTypes, ExtractConfiguration, - reference + reference, + ExtractFiles } diff --git a/uplaode-api/migration-sitecore/libs/convert.js b/uplaode-api/migration-sitecore/libs/convert.js index 246b0e0f1..ffb54aaa1 100644 --- a/uplaode-api/migration-sitecore/libs/convert.js +++ b/uplaode-api/migration-sitecore/libs/convert.js @@ -2,10 +2,9 @@ * External module Dependencies. */ /* eslint-disable @typescript-eslint/no-var-requires */ -const mkdirp = require("mkdirp"); const path = require("path"); -const fs = require("fs"), -const parseString = require("xml2js").parseString, +const fs = require("fs"); +const parseString = require("xml2js").parseString; const read = require("fs-readdir-recursive"); /** * Internal module Dependencies. @@ -25,54 +24,20 @@ const config = { * Create folders and files if they are not created */ - - function ExtractFiles(sitecore_folder) { const xml_folder = read(sitecore_folder) - if (!fs.existsSync(path.join(process.cwd(), config.data))) { - mkdirp.sync(path.join(process.cwd(), config.data)); - for (let i = 0; i < xml_folder.length; i++) { - const xml_data = `${sitecore_folder}/`.concat(xml_folder[i]) - const json_data = xml_data.replace('/xml', '') - if (!fs.existsSync(path.resolve(json_data, config.json_filename))) { - parseString(helper.readXMLFile(xml_data), { explicitArray: false }, function (err, result) { - if (err) { - console.error("failed to parse xml: ", err); - } else { - const filePath = path.join(json_data, config?.json_filename) - fs.writeFileSync(`${filePath}.json`, JSON.stringify(result, null, 4), "utf-8"); - } - }) - } else { - fs.unlink(path.resolve(json_data, config.json_filename), (err) => { - if (err) throw err; - }); - } - } - } else { - for (let i = 0; i < xml_folder.length; i++) { - if (xml_folder?.[i]?.includes?.("/xml")) { - const xml_data = `${sitecore_folder}/${xml_folder?.[i]}` - const json_data = xml_data.replace('/xml', '') - if (!fs.existsSync(path.resolve(json_data, config.json_filename))) { - parseString(helper.readXMLFile(xml_data), { explicitArray: false }, function (err, result) { - if (err) { - console.error("failed to parse xml: ", err); - } else { - const filePath = path.join(json_data, config?.json_filename) - fs.writeFileSync(filePath, JSON.stringify(result, null, 4), "utf-8"); - } - }) + for (let i = 0; i < xml_folder.length; i++) { + if (xml_folder?.[i]?.includes?.("/xml")) { + const xml_data = `${sitecore_folder}/${xml_folder?.[i]}`; + const json_data = xml_data.replace('/xml', ''); + parseString(helper.readXMLFile(xml_data), { explicitArray: false }, function (err, result) { + if (err) { + console.error("failed to parse xml: ", err); } else { - fs.unlink(path.resolve(json_data, config.json_filename), (err) => { - if (err) { - console.log(err) - throw err - } - console.log('File was deleted'); - }); + const filePath = path.join(json_data, config?.json_filename); + fs.writeFileSync(filePath, JSON.stringify(result, null, 4), "utf8"); } - } + }) } } } diff --git a/uplaode-api/migration-sitecore/utils/helper.js b/uplaode-api/migration-sitecore/utils/helper.js index c1a1b71db..daa4c7272 100644 --- a/uplaode-api/migration-sitecore/utils/helper.js +++ b/uplaode-api/migration-sitecore/utils/helper.js @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ /** * External module Dependencies. */ @@ -11,9 +12,8 @@ var mkdirp = require("mkdirp"); // for checking XML file exports.readXMLFile = function (filePath) { - var data; - if (fs.existsSync(filePath)) data = fs.readFileSync(filePath, "utf-8"); - console.log("🚀 ~ file: helper.js:16 ~ data:", data) + let data; + if (fs.existsSync(filePath)) data = fs.readFileSync(filePath, "utf8"); return data; }; diff --git a/uplaode-api/package-lock.json b/uplaode-api/package-lock.json index 027f30fba..2576caee5 100644 --- a/uplaode-api/package-lock.json +++ b/uplaode-api/package-lock.json @@ -20,6 +20,7 @@ "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", "express": "^4.18.2", + "express-rate-limit": "^7.2.0", "inquirer": "^9.2.15", "jszip": "^3.10.1", "lodash.isempty": "^4.4.0", @@ -35,7 +36,7 @@ "@types/inquirer": "^9.0.7", "@types/lodash.isempty": "^4.4.9", "@types/multer": "^1.4.11", - "@types/node": "^20.11.0", + "@types/node": "^20.12.12", "@typescript-eslint/eslint-plugin": "^7.7.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.1.3", @@ -2748,9 +2749,9 @@ } }, "node_modules/@types/node": { - "version": "20.11.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.0.tgz", - "integrity": "sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==", + "version": "20.12.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", + "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", "dependencies": { "undici-types": "~5.26.4" } @@ -5426,6 +5427,20 @@ "node": ">= 0.10.0" } }, + "node_modules/express-rate-limit": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.2.0.tgz", + "integrity": "sha512-T7nul1t4TNyfZMJ7pKRKkdeVJWa2CqB8NA1P8BwYaoDI5QSBZARv5oMS43J7b7I5P+4asjVXjb7ONuwDKucahg==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": "4 || 5 || ^5.0.0-beta.1" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -12563,9 +12578,9 @@ } }, "@types/node": { - "version": "20.11.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.0.tgz", - "integrity": "sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==", + "version": "20.12.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", + "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", "requires": { "undici-types": "~5.26.4" } @@ -14489,6 +14504,11 @@ "vary": "~1.1.2" } }, + "express-rate-limit": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.2.0.tgz", + "integrity": "sha512-T7nul1t4TNyfZMJ7pKRKkdeVJWa2CqB8NA1P8BwYaoDI5QSBZARv5oMS43J7b7I5P+4asjVXjb7ONuwDKucahg==" + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", diff --git a/uplaode-api/package.json b/uplaode-api/package.json index 2c095ad93..9cfe4fe1b 100644 --- a/uplaode-api/package.json +++ b/uplaode-api/package.json @@ -23,7 +23,7 @@ "@types/inquirer": "^9.0.7", "@types/lodash.isempty": "^4.4.9", "@types/multer": "^1.4.11", - "@types/node": "^20.11.0", + "@types/node": "^20.12.12", "@typescript-eslint/eslint-plugin": "^7.7.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.1.3", @@ -42,6 +42,7 @@ "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", "express": "^4.18.2", + "express-rate-limit": "^7.2.0", "inquirer": "^9.2.15", "jszip": "^3.10.1", "lodash.isempty": "^4.4.0", diff --git a/uplaode-api/src/constants/index.ts b/uplaode-api/src/constants/index.ts index b125eef1f..cf803cd0a 100644 --- a/uplaode-api/src/constants/index.ts +++ b/uplaode-api/src/constants/index.ts @@ -19,7 +19,9 @@ export const HTTP_TEXTS = { SOMETHING_WENT_WRONG: 'Something went wrong while processing your request, please try again.', ROUTE_ERROR: 'Sorry, the requested resource is not available.', VALIDATION_ERROR: 'File validation failed.', - VALIDATION_SUCCESSFULL: ' File validated successfully.' + VALIDATION_SUCCESSFULL: ' File validated successfully.', + ZIP_FILE_SAVE: 'Issue While Saving Zip File.', + MAPPER_SAVED: 'Mapping process completed successfull.' }; export const HTTP_RESPONSE_HEADERS = { diff --git a/uplaode-api/src/controllers/sitecore/index.ts b/uplaode-api/src/controllers/sitecore/index.ts index dce518060..2ca0823d0 100644 --- a/uplaode-api/src/controllers/sitecore/index.ts +++ b/uplaode-api/src/controllers/sitecore/index.ts @@ -1,12 +1,16 @@ import axios from "axios"; import { readFileSync } from "fs"; +import { deleteFolderSync } from "../../helper"; +import logger from "../../utils/logger"; +import { HTTP_CODES, HTTP_TEXTS } from "../../constants"; // eslint-disable-next-line @typescript-eslint/no-var-requires -const { contentTypes, ExtractConfiguration, reference } = require('migration-sitecore'); +const { contentTypes, ExtractConfiguration, reference, ExtractFiles } = require('migration-sitecore'); -const createSitecoreMapper = async () => { +const createSitecoreMapper = async (filePath: string = "", projectId: string | string[], app_token: string | string[]) => { try { - const path = "/Users/umesh.more/Downloads/package 45/items"; + const path = `${filePath}/items`; + await ExtractFiles(path); await ExtractConfiguration(path); await contentTypes(path); const infoMap = await reference(); @@ -17,22 +21,31 @@ const createSitecoreMapper = async () => { JSON.parse(readFileSync(`${infoMap?.path}/content_types/${contentType}`, 'utf8')) ); } - console.log("🚀 ~ createSitecoreMapper ~ fieldMapping:", fieldMapping) const config = { method: 'post', maxBodyLength: Infinity, - url: `http://localhost:5000/v2/mapper/createDummyData/98ee1edc-f297-419d-a394-8ab71e2e546c`, + url: `${process.env.NODE_BACKEND_API}/v2/mapper/createDummyData/${projectId}`, headers: { - 'app_token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZWdpb24iOiJOQSIsInVzZXJfaWQiOiJibHQzNWNlZTkxZThmZDI4YWRiIiwiaWF0IjoxNzE1ODU1MzMwLCJleHAiOjE3MTU5NDE3MzB9.4-aVhDCWjvCPNXeWK8RaNnH97quOM7j8rMF_pSKh7rM', + app_token, 'Content-Type': 'application/json' }, data: JSON.stringify(fieldMapping), }; const response = await axios.request(config) - console.log("🚀 ~ forawait ~ response:", response?.data) + if (response?.data?.content_mapper?.length) { + deleteFolderSync(infoMap?.path); + logger.info('Validation success:', { + status: HTTP_CODES?.OK, + message: HTTP_TEXTS?.MAPPER_SAVED, + }); + } } } catch (err: any) { console.error("🚀 ~ createSitecoreMapper ~ err:", err?.response?.data ?? err) + logger.warn('Validation error:', { + status: HTTP_CODES?.UNAUTHORIZED, + message: HTTP_TEXTS?.VALIDATION_ERROR, + }); } } diff --git a/uplaode-api/src/helper/index.ts b/uplaode-api/src/helper/index.ts index 4d4ea15d7..e6cb69540 100644 --- a/uplaode-api/src/helper/index.ts +++ b/uplaode-api/src/helper/index.ts @@ -1,3 +1,9 @@ +import rateLimit from "express-rate-limit"; +import fs from "fs"; +import path from "path"; +import { HTTP_TEXTS, HTTP_CODES } from '../constants'; +import logger from "../utils/logger"; + const getFileName = (params: { Key: string }) => { const obj: { fileName?: string; fileExt?: string } = {}; //fine Name @@ -7,4 +13,60 @@ const getFileName = (params: { Key: string }) => { return obj; }; -export { getFileName }; +const saveZip = async (zip: any) => { + try { + const keys = Object?.keys(zip.files); + for await (const filename of keys) { + const file = zip?.files?.[filename]; + if (!file?.dir) { // Ignore directories + const filePath = path.join(__dirname, '../../extracted_files', filename); + // Ignore __MACOSX folder asynchronously + if (!(filePath.includes("__MACOSX"))) { + // Ensure the directory exists asynchronously + await fs.promises.mkdir(path.dirname(filePath), { recursive: true }); + // Write the file asynchronously + const content = await file.async('nodebuffer'); + await fs.promises.writeFile(filePath, content); + } + } + } + return true; + } catch (err: any) { + console.error(err); + logger.info('Zipfile error:', { + status: HTTP_CODES?.SERVER_ERROR, + message: HTTP_TEXTS?.ZIP_FILE_SAVE, + }); + return false; + } +}; + +const fileOperationLimiter = rateLimit({ + windowMs: 2 * 60 * 1000, // 2 minutes + max: 2, // Limit each IP to 2 requests per windowMs for this endpoint + message: { + status: "rate limit", + message: "Rate limit exceeded. Only 2 calls allowed every 2 minutes.", + } +}); + + +function deleteFolderSync(folderPath: string): void { + if (fs.existsSync(folderPath)) { + fs.readdirSync(folderPath).forEach((file: string) => { + const currentPath: string = path.join(folderPath, file); + if (fs.lstatSync(currentPath).isDirectory()) { + // Recurse + deleteFolderSync(currentPath); + } else { + // Delete file + fs.unlinkSync(currentPath); + } + }); + // Delete now-empty folder + fs.rmdirSync(folderPath); + } +} + + +export { getFileName, saveZip, fileOperationLimiter, deleteFolderSync }; diff --git a/uplaode-api/src/routes/index.ts b/uplaode-api/src/routes/index.ts index 285d429b4..32a46b61a 100644 --- a/uplaode-api/src/routes/index.ts +++ b/uplaode-api/src/routes/index.ts @@ -1,6 +1,8 @@ +import path from 'path'; +import multer from 'multer'; +import { Readable } from 'stream'; import express, { Router, Request, Response } from 'express'; import { createReadStream, createWriteStream } from 'fs'; -import multer from 'multer'; import { CompleteMultipartUploadCommand, CreateMultipartUploadCommand, @@ -8,11 +10,10 @@ import { UploadPartCommand } from '@aws-sdk/client-s3'; import { client } from '../services/aws/client'; -import config from '../config/index'; -import { Readable } from 'stream'; - +import { fileOperationLimiter } from '../helper'; import handleFileProcessing from '../services/fileProcessing'; import createSitecoreMapper from '../controllers/sitecore'; +import config from '../config/index'; const router: Router = express.Router(); // Use memory storage to avoid saving the file locally @@ -87,9 +88,12 @@ router.post('/upload', upload.single('file'), async function (req: Request, res: } }); -router.get('/validator', express.json(), async function (req: Request, res: Response) { +// deepcode ignore NoRateLimitingForExpensiveWebOperation: +router.get('/validator', express.json(), fileOperationLimiter, async function (req: Request, res: Response) { try { - const cmsType = config.cmsType.toLowerCase(); + const projectId: string | string[] = req?.body?.projectId ?? ""; + const app_token: string | string[] = req?.headers?.app_token ?? ""; + const cmsType = config?.cmsType?.toLowerCase(); if (config?.isLocalPath) { const fileName = config?.localPath?.split?.('/')?.pop?.(); @@ -98,10 +102,12 @@ router.get('/validator', express.json(), async function (req: Request, res: Resp } if (fileName) { + const name = fileName?.split?.('.')?.[0]; const fileExt = fileName?.split('.')?.pop() ?? ''; const bodyStream = createReadStream(config?.localPath); - bodyStream.on('error', (error) => { + bodyStream.on('error', (error: any) => { + console.error(error); return res.status(500).json({ status: "error", message: "Error reading file.", @@ -126,11 +132,13 @@ router.get('/validator', express.json(), async function (req: Request, res: Resp if (!zipBuffer) { throw new Error('No data collected from the stream.'); } - const data = await handleFileProcessing(fileExt, zipBuffer, cmsType); res.json(data); + if (data?.status === 200) { + const filePath = path.join(__dirname, '../../extracted_files', name); + createSitecoreMapper(filePath, projectId, app_token) + } }); - return; } } else { @@ -142,7 +150,7 @@ router.get('/validator', express.json(), async function (req: Request, res: Resp // Get the object from S3 const s3File = await client.send(getObjectCommand); //file Name From key - const fileName = params?.Key?.split?.('/')?.pop?.(); + const fileName = params?.Key?.split?.('/')?.pop?.() ?? ''; //file ext from fileName const fileExt = fileName?.split?.('.')?.pop?.() ?? 'test'; @@ -179,9 +187,12 @@ router.get('/validator', express.json(), async function (req: Request, res: Resp const data = await handleFileProcessing(fileExt, zipBuffer, cmsType); res.json(data); res.send('file valited sucessfully.'); - createSitecoreMapper() + const filePath = path.join(__dirname, '../../extracted_files', fileName); + console.log("🚀 ~ bodyStream.on ~ filePath:", filePath) + // createSitecoreMapper(filePath, projectId, app_token) }); } + } catch (err: any) { console.error('🚀 ~ router.get ~ err:', err); } @@ -193,7 +204,3 @@ router.get('/config', async function (req: Request, res: Response) { // Exported the router export default router; - -// function readFileAsync(filePath: any) { -// throw new Error('Function not implemented.'); -// } diff --git a/uplaode-api/src/services/fileProcessing.ts b/uplaode-api/src/services/fileProcessing.ts index 12033189a..93ca524e8 100644 --- a/uplaode-api/src/services/fileProcessing.ts +++ b/uplaode-api/src/services/fileProcessing.ts @@ -1,41 +1,47 @@ +import { HTTP_TEXTS, HTTP_CODES } from '../constants'; +import { saveZip } from '../helper'; import JSZip from 'jszip'; import validator from '../validators'; -import { HTTP_TEXTS, HTTP_CODES } from '../constants'; import config from '../config/index'; import logger from '../utils/logger.js'; + const handleFileProcessing = async (fileExt: string, zipBuffer: any, cmsType: string) => { if (fileExt === 'zip') { const zip = new JSZip(); await zip.loadAsync(zipBuffer); if (validator({ data: zip, type: cmsType, extension: fileExt })) { - logger.info('Validation success:', { - status: HTTP_CODES?.OK, - message: HTTP_TEXTS?.VALIDATION_SUCCESSFULL - }); - return { - status: HTTP_CODES?.OK, - message: HTTP_TEXTS?.VALIDATION_SUCCESSFULL - }; + const isSaved = await saveZip(zip); + if (isSaved) { + logger.info('Validation success:', { + status: HTTP_CODES?.OK, + message: HTTP_TEXTS?.VALIDATION_SUCCESSFULL, + }); + return { + status: HTTP_CODES?.OK, + message: HTTP_TEXTS?.VALIDATION_SUCCESSFULL, + file_details: config + }; + } } else { logger.warn('Validation error:', { status: HTTP_CODES?.UNAUTHORIZED, - message: HTTP_TEXTS?.VALIDATION_ERROR + message: HTTP_TEXTS?.VALIDATION_ERROR, }); return { status: HTTP_CODES?.UNAUTHORIZED, - message: HTTP_TEXTS?.VALIDATION_ERROR + message: HTTP_TEXTS?.VALIDATION_ERROR, + file_details: config }; } } else { // if file is not zip // Convert the buffer to a string assuming it's UTF-8 encoded const jsonString = Buffer?.from?.(zipBuffer)?.toString?.('utf8'); - if (validator({ data: jsonString, type: cmsType, extension: fileExt })) { logger.info('Validation success:', { status: HTTP_CODES?.OK, - message: HTTP_TEXTS?.VALIDATION_SUCCESSFULL + message: HTTP_TEXTS?.VALIDATION_SUCCESSFULL, }); return { status: HTTP_CODES?.OK, @@ -45,7 +51,7 @@ const handleFileProcessing = async (fileExt: string, zipBuffer: any, cmsType: st } else { logger.warn('Validation error:', { status: HTTP_CODES?.UNAUTHORIZED, - message: HTTP_TEXTS?.VALIDATION_ERROR + message: HTTP_TEXTS?.VALIDATION_ERROR, }); return { status: HTTP_CODES?.UNAUTHORIZED, From a08fb1adc902daf9d5e9d0de90adbe2ff55fcd62 Mon Sep 17 00:00:00 2001 From: umeshmore45 Date: Thu, 6 Jun 2024 15:59:16 +0530 Subject: [PATCH 007/759] resloved conflict --- api/src/database.ts | 3 - uplaode-api/migration-sitecore/app.js | 135 ---------------------- uplaode-api/migration-sitecore/index.d.ts | 1 - uplaode-api/package-lock.json | 124 +------------------- 4 files changed, 1 insertion(+), 262 deletions(-) delete mode 100644 uplaode-api/migration-sitecore/app.js diff --git a/api/src/database.ts b/api/src/database.ts index 68d71d3bb..859a3b0eb 100644 --- a/api/src/database.ts +++ b/api/src/database.ts @@ -4,9 +4,6 @@ import fs from "fs"; const connectToDatabase = async () => { try { - // await mongoose.connect(config.MONGODB_URI, { - // ...(config.APP_ENV === "production" ? { autoIndex: false } : {}), - // }); //check if the database folder exists if (!fs.existsSync("./database")) { fs.mkdirSync("./database"); diff --git a/uplaode-api/migration-sitecore/app.js b/uplaode-api/migration-sitecore/app.js deleted file mode 100644 index 7506868af..000000000 --- a/uplaode-api/migration-sitecore/app.js +++ /dev/null @@ -1,135 +0,0 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -var path = require("path"), - chalk = require("chalk"), - fs = require("fs"), - inquirer = require("inquirer"), - sequence = require("when/sequence"), - helper = require("./utils/helper"); - -_ = require("lodash"); -const Messages = require("./utils/message"); -const messages = new Messages("wordpress").msgs; - -config = require("./config"); -global.errorLogger = require("./utils/logger")("error").error; -global.successLogger = require("./utils/logger")("success").log; -global.warnLogger = require("./utils/logger")("warn").log; - -var modulesList = [ - // "convert", - // "configuration", - // "assets", - "contenttypes", - "reference", - // "template", - "entries", - // "staticHtml", -]; //to create entries -// var contentList = ["convert"]; // to create content type for the entries -var _export = []; - -const migFunction = () => { - try { - global.filePath = undefined; - // Module List for Entries - for (var i = 0, total = modulesList.length; i < total; i++) { - var ModuleExport = require("./libs/" + modulesList[i] + ".js"); - var moduleExport = new ModuleExport(); - _export.push( - (function (moduleExport) { - return function () { - return moduleExport.start(); - }; - })(moduleExport) - ); - } - - // Content List - //create schema for the entries we have created - // for (var i = 0, total = contentList.length; i < total; i++) { - // var ContentExport = require("./content_types/" + contentList[i] + ".js"); - // var contentExport = new ContentExport(); - // _export.push( - // (function (contentExport) { - // return function () { - // return contentExport.start(); - // }; - // })(contentExport) - // ); - // } - } catch (error) { - console.log(error.message); - } - - var taskResults = sequence(_export); - - taskResults - .then(async function (results) { - console.log(chalk.green("\Data exporting has been completed")); - }) - .catch(function (error) { - errorLogger(error); - }); -}; - -// to check if file exist or not -// const fileCheck = (csFileName, csFilePath) => { -// const allowedExtension = ".xml"; -// const extension = path.extname(global.config.xml_filename); -// if (allowedExtension === extension) { -// if (fs.existsSync(global.config.xml_filename)) { -// migFunction(); -// } else { -// console.log( -// chalk.red(`Please check`), -// chalk.yellow(`File name "${csFileName}"`), -// chalk.red(`or`), -// chalk.yellow(`Filepath "${csFilePath}"`), -// chalk.red(`are valid or not and try again!`) -// ); -// XMLMigration(); -// } -// } else { -// console.log(chalk.red("use only .xml extension file")); -// } -// }; - -module.exports = XMLMigration = async () => { - const question = [ - { - type: "input", - name: "csFilePath", - message: messages.promptFilePath, - validate: (csFilePath) => { - if (!csFilePath || csFilePath.trim() === "") { - console.log(chalk.red("Please insert filepath!")); - return false; - } - this.name = csFilePath; - return true; - }, - }, - ]; - - inquirer.prompt(question).then(async (answer) => { - try { - global.config.sitecore_folder = - // answer?.csFilePath - // "/Users/umesh.more/Downloads/history-only/items" - // "/Users/umesh.more/Downloads/package 75/items/master/sitecore/content/Common/Configuration" - // "/Users/umesh.more/Downloads/package 81/items"; - // "/Users/umesh.more/Downloads/package 82/items", - // "/Users/umesh.more/Documents/package 2/items" - // "/Users/umesh.more/Downloads/package 77/items" - // "/Users/umesh.more/Downloads/package 45/items/master/sitecore/content" - // "/Users/umesh.more/Downloads/package 45/items/master/sitecore/content" - // "/Users/umesh.more/Documents/package/items" - "/Users/umesh.more/Downloads/package 45/items" - // "/Users/umesh.more/Downloads/package 45/items/master/sitecore/templates" - // "/Users/umesh.more/Downloads/package 45/items/master/sitecore/content/Common/Configuration" - migFunction(); - } catch (error) { - console.log(chalk.red(error.message)); - } - }); -}; diff --git a/uplaode-api/migration-sitecore/index.d.ts b/uplaode-api/migration-sitecore/index.d.ts index cfa173905..b621b558c 100644 --- a/uplaode-api/migration-sitecore/index.d.ts +++ b/uplaode-api/migration-sitecore/index.d.ts @@ -1,5 +1,4 @@ // eslint-disable-next-line @typescript-eslint/no-var-requires import contentTypes from "./libs/contenttypes.js"; -// module.exports = { contentTypes = contentTypes?.ExtractContentTypes }; export default contentTypes; \ No newline at end of file diff --git a/uplaode-api/package-lock.json b/uplaode-api/package-lock.json index 991c8ed4c..2576caee5 100644 --- a/uplaode-api/package-lock.json +++ b/uplaode-api/package-lock.json @@ -5749,24 +5749,6 @@ "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -16435,110 +16417,6 @@ } } }, - "migration-sitecore": { - "version": "file:migration-sitecore", - "requires": { - "@contentstack/json-rte-serializer": "^2.0.2", - "@sitecore-jss/sitecore-jss-cli": "^21.2.4", - "ansi-colors": "^4.1.3", - "axios": "^1.3.4", - "chalk": "^4.1.0", - "cheerio": "^1.0.0-rc.12", - "cli-progress": "^3.11.1", - "fs-readdir-recursive": "^1.1.0", - "inquirer": "^8.2.4", - "jsdom": "^19.0.0", - "lodash": "^4.17.21", - "mkdirp": "^1.0.4", - "moment": "^2.30.1", - "pdf-stream": "^1.3.2", - "request": "^2.88.2", - "rimraf": "^4.1.2", - "uid": "^2.0.2", - "when": "^3.7.8", - "winston": "^3.7.2", - "xml2js": "^0.4.23" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - }, - "glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - } - }, - "inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - } - }, - "minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", - "requires": { - "glob": "^9.2.0" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - } - } - }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -18363,4 +18241,4 @@ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } -} \ No newline at end of file +} From 476412c92dff408090b261f8819d481da0c29b99 Mon Sep 17 00:00:00 2001 From: Sayali Joshi Date: Thu, 6 Jun 2024 18:19:34 +0530 Subject: [PATCH 008/759] Migration flow header UI and Stepper changes --- ui/src/cmsData/login.json | 6 +- ui/src/components/AccountPage/index.scss | 49 +++--- ui/src/components/AccountPage/index.tsx | 19 +-- ui/src/components/Common/router.tsx | 25 ++- .../components/MigrationFlowHeader/index.scss | 13 ++ .../components/MigrationFlowHeader/index.tsx | 80 +++++++++ .../HorizontalStepper/HorizontalStepper.scss | 20 ++- .../HorizontalStepper/HorizontalStepper.tsx | 4 +- ui/src/pages/Migration/index.tsx | 153 ++++++++++++++++++ ui/src/scss/App.scss | 14 +- ui/src/scss/_variables.scss | 1 + 11 files changed, 329 insertions(+), 55 deletions(-) create mode 100644 ui/src/components/MigrationFlowHeader/index.scss create mode 100644 ui/src/components/MigrationFlowHeader/index.tsx create mode 100644 ui/src/pages/Migration/index.tsx diff --git a/ui/src/cmsData/login.json b/ui/src/cmsData/login.json index 0c6bd9df7..e680eae6a 100644 --- a/ui/src/cmsData/login.json +++ b/ui/src/cmsData/login.json @@ -6,7 +6,7 @@ "copyrightText": "Contentstack Inc. All rights reserved.", "created_at": "2024-02-22T11:20:53.435Z", "created_by": "bltb317ebe35429ebe6", - "heading": "Stacks Not Suites", + "heading": "GAIN YOUR EXPERIENCE EDGE", "login": { "title": "Log in to Contentstack", "email": "Email", @@ -29,12 +29,12 @@ "tags": [], "title": "Login", "two_factor_authentication": { - "title": "Two-factor Authentication", + "title": "Two-Factor Authentication", "security_code": { "title": "Enter the security code generated in Authy app", "placeholder": "Enter the security code" }, - "send_sms": { "pre_link_text": "I don't have the app.", "link_text": "Send me an SMS" }, + "send_sms": { "pre_link_text": "Don't have an account?", "link_text": "Send me an SMS" }, "cta": { "title": "Verify", "url": "", diff --git a/ui/src/components/AccountPage/index.scss b/ui/src/components/AccountPage/index.scss index 830efa2a3..9af38e4f2 100644 --- a/ui/src/components/AccountPage/index.scss +++ b/ui/src/components/AccountPage/index.scss @@ -6,10 +6,20 @@ height: 100vh; overflow: hidden; + &__logo { + display: inline-block; + height: 3.75rem; + left: 4%; + position: relative; + top: 5%; + z-index: 10; + } + &__intro { - background-color: $color-brand-primary-base; - flex: 0 0 35%; - height: 100%; + background-image: url("../../../public/images/login_bg.webp"); + background-repeat: no-repeat; + background-size: cover; + height: 100vh; position: relative; width: 35%; } @@ -41,18 +51,31 @@ } &__heading { - left: 15%; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-box-align: center; + -ms-flex-align: center; + grid-row-gap: .5rem; + align-items: center; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + left: 8%; position: absolute; - top: 40%; + row-gap: .5rem; + top: 30%; z-index: 10; &_title { color: $color-brand-white-base; font-family: $font-family-secondary; - font-size: 2.5rem; + font-size: 3.8rem; font-weight: $font-weight-extra-bold; - line-height: 49px; - max-width: $px-260; + letter-spacing: .04em; + line-height: 3.625rem; + // max-width: $px-260; text-transform: uppercase; } &_subtitle { @@ -65,16 +88,6 @@ } } - &__logo { - display: inline-block; - height: 28px !important; - left: 15%; - margin-top: $space-50; - position: relative; - width: $px-159 !important; - z-index: 10; - } - &__circle { border-radius: $radii-50; position: absolute; diff --git a/ui/src/components/AccountPage/index.tsx b/ui/src/components/AccountPage/index.tsx index 655113ec4..4b1316670 100644 --- a/ui/src/components/AccountPage/index.tsx +++ b/ui/src/components/AccountPage/index.tsx @@ -1,6 +1,3 @@ -// Libraries -import { Icon } from '@contentstack/venus-components'; - // Interface import { AccountObj } from './accountPage.interface'; @@ -8,7 +5,7 @@ import { AccountObj } from './accountPage.interface'; import './index.scss'; const AccountPage = (props: AccountObj): JSX.Element => { - const { heading, subtitle, copyrightText } = props.data; + const { heading, copyrightText } = props.data; const currentYear = new Date().getFullYear(); const previousYear = currentYear - 1; @@ -17,22 +14,10 @@ const AccountPage = (props: AccountObj): JSX.Element => { // eslint-disable-next-line react/no-unknown-property
- + Contentstack

{heading}

-

{subtitle}

- - - - - - -
{props?.children}
diff --git a/ui/src/components/Common/router.tsx b/ui/src/components/Common/router.tsx index db799941d..82f61ea82 100644 --- a/ui/src/components/Common/router.tsx +++ b/ui/src/components/Common/router.tsx @@ -1,16 +1,21 @@ +// Libraries import { lazy } from 'react'; import { Routes, Route } from 'react-router'; -import ErrorPage from '../../pages/Errors'; + +// Utilities import { CS_ENTRIES } from '../../utilities/constants'; + +// Pages +import ErrorPage from '../../pages/Errors'; + +// Component import PrivateRoute from './private-route'; -import NewMigrationWrapper from '../Migrations/NewMigration/NewMigrationWrapper'; -import Settings from './Settings'; /******** ALL LAZY LOADING ********/ const HomeLazyLoad = lazy(() => import('../../pages/Home')); const LoginLazyLoad = lazy(() => import('../../pages/Login')); const RegionalLoginLazyLoad = lazy(() => import('../../pages/RegionalLogin')); -const MigrationEditorLazyLoad = lazy(() => import('../../pages/MigrationEditor')); +const MigrationLazyLoad = lazy(() => import('../../pages/Migration')); const ProjectsLazyLoad = lazy(() => import('../../pages/Projects')); const AppRouter = () => { @@ -23,23 +28,17 @@ const AppRouter = () => { {/* ALL PROTECTED ROUTES HERE */} }> - } /> + } /> } /> - {/* } - /> */} } + element={} > - } /> - } /> + - {/* Header} /> */} } /> ); diff --git a/ui/src/components/MigrationFlowHeader/index.scss b/ui/src/components/MigrationFlowHeader/index.scss new file mode 100644 index 000000000..61d7897ad --- /dev/null +++ b/ui/src/components/MigrationFlowHeader/index.scss @@ -0,0 +1,13 @@ +@import '../../scss/variables'; + +.migration-flow-header { + background-color: $color-base-white-10; + border-bottom: 1px solid $color-base-gray-40; + padding: $space-16 $space-20; + position: fixed; + width: calc(100% - 56px); + z-index: 9; + .back-btn { + padding: 0; + } +} \ No newline at end of file diff --git a/ui/src/components/MigrationFlowHeader/index.tsx b/ui/src/components/MigrationFlowHeader/index.tsx new file mode 100644 index 000000000..8ca00004c --- /dev/null +++ b/ui/src/components/MigrationFlowHeader/index.tsx @@ -0,0 +1,80 @@ +// Libraries +import { useEffect, useState } from 'react'; +import { Button } from '@contentstack/venus-components'; +import { useDispatch, useSelector } from 'react-redux'; +import { Params, useNavigate, useParams } from 'react-router'; + +// Redux files +import { updateNewMigrationData } from '../../store/slice/migrationDataSlice'; + +// Service +import { getProject } from '../../services/api/project.service'; + +// Interfaces +import { DEFAULT_NEW_MIGRATION } from '../../context/app/app.interface'; + +// CSS +import './index.scss'; + +const MigrationFlowHeader = () => { + const [projectName, setProjectName] = useState(''); + + const navigate = useNavigate(); + const params: Params = useParams(); + const dispatch = useDispatch(); + + const selectedOrganisation = useSelector((state:any)=>state?.authentication?.selectedOrganisation); + + useEffect(() => { + fetchProject(); + }, [selectedOrganisation?.value, params?.projectId]); + + /******** Function to get project ********/ + const fetchProject = async () => { + const response = await getProject(selectedOrganisation?.value || '', params?.projectId || ''); + + if (response?.status === 200) { + setProjectName(response?.data?.name); + + //Navigate to lastest or active Step + const url = `/projects/${params?.projectId}/migration/steps/${response?.data?.current_step}`; + navigate(url, { replace: true }); + } + }; + + const backNavigation = () => { + dispatch(updateNewMigrationData(DEFAULT_NEW_MIGRATION)) + navigate(-1); + } + + return ( +
+
+
+ + +
+ ) +} + +export default MigrationFlowHeader; \ No newline at end of file diff --git a/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.scss b/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.scss index 31cbcefb5..935727a45 100644 --- a/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.scss +++ b/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.scss @@ -1,11 +1,16 @@ @import '../../../scss/variables'; +.stepper-wrapper { + margin-top: 73px; + position: fixed; +} .stepper { + border-bottom: 1px solid $color-base-gray-40; display: flex; align-items: center; justify-content: space-between; gap: 0px; - margin: 10px; + padding: 10px; @media (max-width: 768px) { flex-direction: column; align-items: flex-start; @@ -102,4 +107,17 @@ height: 4px; margin-left: -40px; margin-right: -40px; +} + +/******************* Custom Classes *******************/ +.stepper-position { + background-color: $color-brand-white-base; + margin-top: 73px; + padding: 24px 40px; + position: fixed; + width: calc(100% - 56px); + z-index: 9; +} +.stepContent { + padding-top: 190px; } \ No newline at end of file diff --git a/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.tsx b/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.tsx index d9f6657ba..02ebf7231 100644 --- a/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.tsx +++ b/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.tsx @@ -83,9 +83,9 @@ const HorizontalStepper = forwardRef( }; const StepsTitleCreator: React.FC = () => ( -
+
{steps?.map(({ id, title }, idx: number) => { - + const completedClass = stepsCompleted?.includes(idx) ? 'completed' : ''; const activeClass = idx === showStep && !stepsCompleted?.includes(idx)? 'active' : ''; diff --git a/ui/src/pages/Migration/index.tsx b/ui/src/pages/Migration/index.tsx new file mode 100644 index 000000000..babdf35a1 --- /dev/null +++ b/ui/src/pages/Migration/index.tsx @@ -0,0 +1,153 @@ +// Libraries +import { useEffect, useState, useRef } from 'react'; +import { Params, useParams } from 'react-router'; +import { useDispatch, useSelector } from 'react-redux'; + +// Redux files +import { RootState } from '../../store'; +import { updateMigrationData } from '../../store/slice/migrationDataSlice'; + +// Services +import { getMigrationData } from '../../services/api/migration.service'; +import { getCMSDataFromFile } from '../../cmsData/cmsSelector'; + +// Utilities +import { CS_ENTRIES } from '../../utilities/constants'; +import { isEmptyString, validateArray } from '../../utilities/functions'; + +// Interface +import { + MigrationResponse, + defaultMigrationResponse +} from '../../services/api/service.interface'; +import { + DEFAULT_IFLOWSTEP, + IFlowStep +} from '../../components/Stepper/FlowStepper/flowStep.interface'; + +// Components +import MigrationFlowHeader from '../../components/MigrationFlowHeader'; +import HorizontalStepper from '../../components/Stepper/HorizontalStepper/HorizontalStepper'; +import LegacyCms from '../../components/LegacyCms'; +import DestinationStackComponent from '../../components/DestinationStack'; +import ContentMapper from '../../components/ContentMapper'; +import TestMigration from '../../components/TestMigration'; +import MigrationExecution from '../../components/MigrationExecution'; + +const Migration = () => { + const [projectData, setProjectData] = useState(defaultMigrationResponse); + const [isLoading, setIsLoading] = useState(false); + + const params: Params = useParams(); + const dispatch = useDispatch(); + const stepperRef = useRef(null); + + const selectedOrganisation = useSelector((state: RootState)=>state?.authentication?.selectedOrganisation); + + useEffect(() => { + fetchData(); + }, [params?.stepId, params?.projectId, selectedOrganisation.value]); + + const fetchData = async () => { + setIsLoading(true); + + //gets Data from CMS file. + const data = await getCMSDataFromFile(CS_ENTRIES.MIGRATION_FLOW); + + //Uncomment this line to get data CMS stack. + //const data = await getEntries({ contentType: CS_ENTRIES.MIGRATION_FLOW }) + + if (!data) { + setIsLoading(false); + return; + } + + //get Flow Steps and update it in APP Context + const currentFlowStep = validateArray(data?.all_steps) + ? data?.all_steps?.find((step: IFlowStep) => `${step.name}` === params?.stepId) + : DEFAULT_IFLOWSTEP; + + + dispatch(updateMigrationData({ + allFlowSteps: data?.all_steps, + currentFlowStep: currentFlowStep, + migration_steps_heading: data?.migration_steps_heading, + settings: data?.settings + })); + + await fetchProjectData(); + }; + + //Fetch project data + const fetchProjectData = async () => { + if (isEmptyString(selectedOrganisation.value) || isEmptyString(params?.projectId)) return; + + const data = await getMigrationData(selectedOrganisation.value, params?.projectId || ''); + if (data) { + setProjectData(data.data); + setIsLoading(false); + } + }; + + const createStepper = (projectData:any,handleStepChange: (currentStep: number) => void) => { + const steps = [ + { + data: , + id:'1', + title:'Legacy CMS' + }, + { + data: , + id:'2', + title:'Destination Stack' + }, + { + data: , + id:'3', + title:'Content Mapping' + }, + { + data: , + id:'4', + title:'Test Migration' + }, + { + data: , + id:'5', + title:'Migration Execution' + }, + + + ] + return steps; + } + + const handleClick = () => { + + // Call handleStepChange function + const x : string | undefined= params.stepId + const currentStep : number = parseInt(x || ''); + stepperRef?.current?.handleStepChange(currentStep-1); +}; + + + return ( +
+ + +
+ +
+
+ ) +} + +export default Migration; \ No newline at end of file diff --git a/ui/src/scss/App.scss b/ui/src/scss/App.scss index d00f20c34..ddc489626 100644 --- a/ui/src/scss/App.scss +++ b/ui/src/scss/App.scss @@ -312,7 +312,7 @@ h1 { h2 { color: $color-base-black-base; font-size: $size-font-5-xl; - font-weight: $font-weight-semi-bold; + font-weight: $font-weight-bold; line-height: 1.5; } .pb-32 { @@ -333,6 +333,18 @@ h2 { .mb-30 { margin-bottom: $space-30; } +.migration-steps-wrapper { + margin-top: 3.5rem; + h1 { + color: $color-black-2121; + font-size: $size-font-20; + font-weight: $font-weight-semi-bold; + line-height: $line-height-default; + } + .steps-wrapper { + background-color: $color-brand-white-base; + } +} .PageLayout__body__container { display: flex; } diff --git a/ui/src/scss/_variables.scss b/ui/src/scss/_variables.scss index 9be2eea79..50c96918f 100644 --- a/ui/src/scss/_variables.scss +++ b/ui/src/scss/_variables.scss @@ -45,6 +45,7 @@ $size-font-medium: 0.8125rem; /* 13px */ $size-font-large: 0.875rem; /* 14px[Title 1] */ $size-font-xl: 1rem; /* 16px[H6] */ $size-font-2-xl: 1.125rem; /* 18px[H5] */ +$size-font-20: 1.25rem; /* 20px */ $size-font-3-xl: 1.375rem; /* 22px[H4] */ $size-font-4-xl: 1.875rem; /* 30px[H3] */ $size-font-5-xl: 1.75rem; /* 28px[H2] */ From 9e658669a359a964505f19759cd7421625c351e0 Mon Sep 17 00:00:00 2001 From: snehalsankhe Date: Fri, 7 Jun 2024 11:41:50 +0530 Subject: [PATCH 009/759] Update code as per new design update --- ui/src/components/Card/card.scss | 12 ++---------- ui/src/components/Card/index.tsx | 14 +++++++------- ui/src/components/MainHeader/index.scss | 3 +++ 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/ui/src/components/Card/card.scss b/ui/src/components/Card/card.scss index b17545ddc..fa090c38a 100644 --- a/ui/src/components/Card/card.scss +++ b/ui/src/components/Card/card.scss @@ -64,31 +64,23 @@ border: 1px solid $color-brand-secondary-lightest; border-radius: 8px; font-size: $size-font-large; - color: $color-black-2121; + color: $color-font-base; padding: 4px 8px; text-transform: capitalize; svg { margin-right: 5px; } &.draft { - border-color: $color-brand-draft-base; - background-color: $color-brand-draft-light; - svg { - stroke: $color-brand-draft-base; - fill: none; - } + background-color: $color-base-white-10; } &.completed { background-color: $color-brand-success-light; - border-color: $color-brand-success-base; } &.failed { background-color: $color-brand-fail-light; - border-color: $color-brand-fail-base; } &.pending { background-color: $color-brand-attention-light; - border-color: $color-brand-attention-base; } } .ProjectCard__stats-Title { diff --git a/ui/src/components/Card/index.tsx b/ui/src/components/Card/index.tsx index a2acbb4ae..d8b316ccc 100644 --- a/ui/src/components/Card/index.tsx +++ b/ui/src/components/Card/index.tsx @@ -25,12 +25,12 @@ const CardList = ({ project }: ProjectType) => { }; const iconMapping: { [key: string]: string } = { '0': 'Information', - '1': 'WarningBold', - '2': 'WarningBold', - '3': 'WarningBold', - '4': 'WarningBold', - '5': 'CheckCircle', - '6': 'CloseBorder', + '1': 'Warning', + '2': 'Warning', + '3': 'Warning', + '4': 'Warning', + '5': 'CheckCircleDark', + '6': 'Close', }; const statusClassMapping: { [key: string]: string } = { '0': 'draft', @@ -75,7 +75,7 @@ const CardList = ({ project }: ProjectType) => {
Project Status
- {icon && } + {icon && } {statusText}
diff --git a/ui/src/components/MainHeader/index.scss b/ui/src/components/MainHeader/index.scss index 20aea4986..b6dca57e1 100644 --- a/ui/src/components/MainHeader/index.scss +++ b/ui/src/components/MainHeader/index.scss @@ -34,6 +34,9 @@ .organisationWrapper:focus { box-shadow: 0 0 1px $color-brand-primary-base, 0 0 0 4px #bbb4f4; } + .Dropdown-wrapper { + padding: 0 18px; + } .Dropdown__header__value { overflow: visible; line-height: 1.2; From 66758ec3cab04aa7dbf77147c792f0bd348e0563 Mon Sep 17 00:00:00 2001 From: Sayali Joshi Date: Fri, 7 Jun 2024 14:11:22 +0530 Subject: [PATCH 010/759] Main header, login image and logo changes --- ui/public/favicon.ico | Bin 32038 -> 15406 bytes ui/public/images/ContentstackLogo.png | Bin 0 -> 17081 bytes ui/public/images/login_bg.webp | Bin 0 -> 75132 bytes ui/src/cmsData/main_header.json | 2 +- ui/src/components/MainHeader/index.scss | 3 +-- ui/src/components/MainHeader/index.tsx | 25 ++++++++++++------------ ui/src/pages/Projects/index.scss | 2 +- 7 files changed, 15 insertions(+), 17 deletions(-) create mode 100644 ui/public/images/ContentstackLogo.png create mode 100644 ui/public/images/login_bg.webp diff --git a/ui/public/favicon.ico b/ui/public/favicon.ico index a1c0f9fa72c068d7f4477460a10df3e81cefeed2..3efd5e49117546169adf05362e9477858ffbb779 100644 GIT binary patch literal 15406 zcmeHOYm5{{5FSM3p;0sv6nvZ-5kUnM(8L5Vig?`g%-!jVBA8Q@hkBwR0dBW@854~U zq9mwzppu{w6H!44i6)}{L5xvQAt?TU_yD5fGh*V4@~hrknBAS*?Ro58Om>qmJ3H51 zRb5@xU0u~@S-q^@)_?&Pz8kDLM_bl7%d#38a=(Y2WLc~5Zq%r*zYn#n_Xk?mFtkAz z^vJ!(SIs{pWG6ZD>jH?3YbprY4-6qEJCB^jOLI_5$yK+L$lgSa-U%jj!23~h)H?+b zaueuWWYVA8pzjkT)F&ly)SG@9l=4mnziSIH#T!b^+3U#7K3)PL+Y9=;Sy946sE0Iv zM}7*rg%I+sF8M}7*PGC;5UzR?{9{Zj(PnKa7X$W<1f^&lf8qQ7Qs6ze=zn5 zz(LUYqX0s^Qn~k$7N9X!+q|3Y#9ZefRNIjj<)6s)hJ(LX0N6zNUOoF)US}GBi2$!p z^-r=IASZn>>;Zl)HCrQQA@{A z=;2w+!D?e*zsmQI`;B>65^^30dfOM5Z@xd-i_gTK%rOo2YeNWW=lchJW3QTAk(NL# zF&XiVn>hpRA4dDfjNy7yg81g&fzBQyo!aW2YUm#{Z-5My?CEK0O`k?Bi02&j9PmO2 zOwW&%zo|8Imi8q_NzkZ-1(fO-h*)eebhOZ*y(C*L;`V-?{%0+B;aX9Cedic5!S#o1 zIT7^U05%$69kr;Dyq-et*A3cl%(e3_FC24b4Eo+_3`gBYGnO2OeWgF_{noPm961;B zdA^@t@iXS`CnFp8&xt|U1Qc9(I$I)e!zQ`+1jpzr(zP+1sSy5z&(}$YU7efB+$f5p&dH6RH z1lOt53eHW$ktIrBo^za2PA9ixxUN@m%_=N#mZ8+b6Ql4?vJd+p`~WpO)rL8l84Gr{ z1$*6~B;~6_OV@_j7yUV-sLyPRLcUmuXOe%1-Y01Lk1BI%za2@+SBVzamoWy^x#btY zm$88Q8RCqlN<964C(k-m6Cz`Y6Xm#0IG%lc3X_bgJVE5rh70~Ynl)2;MPjmT*W zxd!Xlu8?}$37y}s^Rhg4y$(YE;c{yMc{sThdtuo+g?~)QN8bXue+P>96_eiw!0SB3 z4&xKH|LuMm%RQ5wy$Z7Lk0d|aD(ZVWH|!veh^B*LJspBB)|8Xk|2KUmY1Q{F!mZoQ z*%^Aj;(d(Qe_hwrYyWJFBRX7peRu1>uAA|mr}s?WH$$RHUcmJn?eF>hm*0h@lW))G z3B&!D+d(g=bs^>u>hFm76a79!+;EPLe{%Pj{)$KoGRT8KC#4?m=eLQVXJS1G+(C

9XW0`6EugAc(B=)r^ z(C4i5Abs}Y^OvrL!uO-l;yzr{nziDXKzrf8IdU~@bA2rEoi^Sh`0NW_;5iL+*M_3$ zs8=ypv%{PfLH~2~DPCKn{dVLpdadM|cbxo#o1Pq`>!5ewvm-J2h2;9q2%Z0lQvb{8 zk@xCrf@BSPr|UR;U(}V)#{&DjzGn&lXB)D!eD3Akn>k&!V;eSzdS8&NLGLs#_Ah%+FOExLS94(t_eMjuUGKHN zbEBVrHJ`iA*dM``qU~Xa`*HqXji{!qL9|h`J{Pr#y(~0dhC&?@819_|+VbpSF%mIfoMloO75pD=>ES)2{Zj_G$h99TGJXu9FypYcTCS zkvsP51i7x8yY`3he(k`Q;a7fowSI=|Hf);DRUzfi973O+e2=%*GW+>a>b`#1=cZx| hiviCZ8Qd>L?x=_ASN<{7pX(Z^YoM-yx(1GD;6Hcym(&0N literal 32038 zcmeI5e~1=E7{^yiL=G`I4iPytL`+2TkPs75(<>xILfn@);))0pkqC(p5rjBIA|xUr zBH{?4I4q8ch!7F~kO&cp5b2LYBtpa)M8rR$uFtdgzIXes`|i%n&hDMQd+>F4XP=)l z&pbOjGw&J%^MWUXr=AMR+GeT`zAeZ&435n}?dE&{^qRR3C!9){+A0zYs)o+z85 z3DvF0zJ}Vy{nIIUgR(;@<eO4p88tPOEhT!jke{mZcdVYfcQ|LZR!GSnk);YWfsgFBJ>m-BkLU3fxgP|RlSLqTW+m7TT6yL~l)EU1{S~pX zn|X-|a-G_r4;}Sq-*tsv@}8c|1O4}$Z`~pfz5B3%{+$PH+}~a7#6RiZlAlen+eJ?& z9`t?$a@%2sMonMWTy_t5<+xN3=?vUJe5B(^sjpbwf}1G;uup6eFZ#6o`Sj4 z2kr^@2aP{W*)iCn>+oYiwTy-12IAF8;Ypdy}%Uo%c{* zeL0fzS5ilr*Vw+%tNo##DAV3F*-am$9em*FG#zPW=#%+m<{&ihz1EPq3*n#7{H&{t zG`(BWY)vae_ZDoBd1i;_PBa&{30|2GbD5Xxr1S4IThq$0eFwT-?HB#6c8doE@B4ea-&k36ILX-jY8XOU%Ke?RN+h2J-*^P@m= z{!%akP8Wp8Semq-GKo>q;RDec9J1v7vDZ;%=DJdf{S)YswI&Zxe<5cHkeG3mcOBmT zq@A6vp>^p;Sv=Bbj}(w=HGhJhzk%@hz-{F8lIJ9cX(ySCDdDpjm+@TH>pUUK&&XN` z);h{u4WIEo9%v{mkMGWeyeAx4`0yfb^PhWCL0-y85{WEl6TU0D(%bS zC-(PY|6z_i6N*5;!Q8F){U|nV5vRo`>F3LVjBjiqe6!lO(f=H{2h!psuj~PBxiMZJ zRiC4O2exB}ll|hKw>`lwzN3Et6sUha;G(zYsn_`H80Z`WQ~QDBH&OCeAFHkh*{8J~ zoB*wTS^>XlP5#v}+&PBpx~c1?j)6J`e8vD{Re5JQ!?>GuC|}So`LwZ2S@^sg{6ih& zy&KuwKUSvAK4sVbNAGL5X#cw&@s`gvDq9wQZv@-?Ao{jPrTewYuAgp_&s-d9!O?FM z&k+ya!J73i$UOjz*Pg1Zf9#?!C|PT?$@jLjQm=Eek6@R~A9l0B|1ZF{SHQt?prr55>Kt?2-}*fJeTuds9@G$VF;Y7C9>82{5B!&X8@~g? z{#}U9c%Nof^@QK6z#rB4udY|+m#H57uCo2Fnc7tq9sbLHheKerRD}8~%@l>gCpVt(^1yOW(a3ivPm zvy)tx^83y9ezyCDv*7_MR5%oqs{hT#Q7-?GV^SbF~*2%{6Fq|)QyZo zUMdf2RjUpe@2@XUj~+z6)qXW>=>g-wZLhZ3-0qK4@y_?YLM{3JZb`rg^%b&>_pd@L z{$BttdEAue%9Q_eZ~mw0zs#AL`r<-2hy9P{WInKj%mBet*YaNT&v|qaYjbP;yY^rI zNgdoNAB;hwwZ7>0V-mBTbgJ9P8ji=b%{ex$W&E|dbi}@~!|!beyy=tQ)$mPP8=q_1 znKcONPR1U$X^-shHW$6$P{+{Y{G2MQ&9KQOm%H#p`M)ebT;w;L2-{i@DgdZ5M{#XLWkv(VEo*17n|D!Hpqh%kr zqQ6{b8y1m`-!lJI$^1_dJImtjcK_x7o1qT&0@nEQ{=XpC`|j`TWwm=P*ZlcHY{1FCqxJ8q{czP+`yZ_g(>Rf&T%;B+B#v diff --git a/ui/public/images/ContentstackLogo.png b/ui/public/images/ContentstackLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..d2552da4e2486fdc7a5bab98d33892666b90dbb7 GIT binary patch literal 17081 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

SeqFt|0*?zCNh~*;#Md z!8?T`+)`1&;iOShAjE1)I4 zWuA3`wjI{X9m4vP)l*WaA zla)1R=@^r8ZAgD-7&H3oD*ylh01MWVqu0w$y;XT=O8PH6D5tgoOKofQ(Zjdx2|i&g zToS6{%Rj$ZPP=OUn{9i;$<66z?l|+^*S3|9)u1|(>o%sizjcU4?NX5qNa5W;A$eII z8(0cG>b9RVO3wAqxAQoF480}W{%4{;&ye1vaHV+Z}Z9Lt&CkwbPgJ zIg&fAn?k}J#h`gYG+W_^qi@xg)u=!K01tP4X~>DLRBbqh^fb+udV!T`kY~m6c3YzI z?Ic^^w$ZCb5)fdVkhZgHAC*!9-?)tvNp}73sGkOPw!1uU|UB!lUQ_ z002>Rfp%`7U6LnRU(dd9}4VCthLg+wM{5AafV#Fv+D6 z&?j;t{vS%$iIjXnpsVw)xqEMCA!SZ>_7f>qU~`)B_LmJ|vCemOtpCQ@cNv>9>jS2J1r za(6ukKssd>D+6pDuH0~WOd9S;8}IpqjNUNHC~6|`dc;h_GL$J?ewg-Jt}S4$N7J6cwRM-|mzxIhgRf#}r)q;EP~TWaC4B+KB{GeE4G0000FzmsAqFC<%`VxxTNW3^FCNdv)+H$Uk4_p z52m^&=SNw5S$1HDg>V1>A=((9w=t3l0Mb$)0{wQk7^Kgc&#+0|rIVWRq+&0tav(*1 zVR?IAFxtibcT{Uq0l(pj)F8$vJ|G2LaL4AI-jR<_;oPP-=Nhby; z1Avyye&s;5?wRx(icao;#~DY-OF22gbOai4L6iMIBZGK8KhrDQUaZzX?ce*sx3Ns9 zGeLYXu9*~c(5RIvB8Q>RR)2dIp6vZsX*xkcqT5N_Swz97&R*Lr>P4S}Tj|w#&XeaF zl0ulck2snhkbeT++B;K?Hz{1+)DDR-PJo1_&P5Nd@SpM=#HaN;^^;=3&*?1eng=|s z11qW#6Jbz>yFM`afs*KOD$v-dY>SG>(iF{Bs)}I-Lr-T6U0whH0Zq+4cBXANa^K@< z27Q!TD8ugF*ptKeBB*iWK~XchiklA%7k*-~fLFT8Sj z-2HGDDBC`J8}!Hoc|@L`;>>nR8VQg2;V>vN4nrsrJ?{6+7045nG>AUDp?Sz!5Y|oJ z0+Q2YCJjX?Lfd+jRGCcaWg0vRCZ|S)o&_J`{E@!!COjr{?_QWGE#s9i`EUv9dLYm5 z?pl-Vv|j4vgp;*n+ANR%?-e8Kt~x9T_g}(e2qZM8ZG#b#i-(uX_oD<{=B1fEfQGjL zuOJq80011}wwfN1YUie`3~wJj&?cKC1bOTNmfF|s4wDodfXZw4LosWf;jW|%(THGJ z8VAlwv5#sOXh6-9Y>P9p4)_sh`C0C?BSwbu=?#%mglFbmFx$Vbg$vrfZmW%x`;W!{ z_W4!Q287u9 zppH1vwd#07R+IYsBsnGE+0>w@aP9AVG92IPhdTSrMm(nHjS42HdJ|QCjj_N;0P7EI z77qHI{hW~U`5D8DcrbaBifkEZA*rJpgR5r1W(k!kb>!C3ln64)FRg1`%c$DBg1nkg zMkG;SpbbJ&Vr+j(M-J;VKBT(mcPv^hNSk;@>RPBysZ zSUzo?UMH2&LHvqni+~pq?Q3cX5R5w!OGEcqgO#98Q~HS(sEs*+izHzs zG;(@ZEX&WHAv`o1*=F~=sMjU(w#gL|r9;H@pSKhT?hVxDl6dBL26jtgKE6auC~lm? zo`%xf5Ml8n@9Ni8B{?HgkEd3x{=A>BC*O@yXIJ1ASMLIf4$BCFSjJ6eM-**}!T)#i zB5VNlb?8gvB}>XLAE|4mTzK25`e?X2zO2DMzLeLkE@;P zdlR^OJ16lqmc+k&l~O?%i8fu@pISIwn%HUimM@I}|8%Vagn^*^q~JQi_DlD@Q<*V6 zfRzh=GUDEH*MHo07oebgCyW3x9E$kT!+vH~$M+p$^x9&%-+sSE1k0m5hHbVV^Z(t* ze|DZa!2ile4Cr(<|+o)16$bD zAKKSNks+7}j(28+;6SJTl+b~K{e<8iJQA-zp9@1J=hafjNScQJPD_@|TNxmE8f?6a z+Qn>BW*5I5iDvTSmQnS)Yx7f_7R>Ba!_7k1MEJ+D`X<`dSxoOqj zD#|DYJgXy|l$V|FWf8c11VHRxHY5$CKmnM=cIPR8z41^?&OhrWy3 zyF}){bq9FR0t2(cT|}SAflKr&d0{mFgFk6^VLzMG-L{AT&V74(8mIkKzQK7kzGQ#< zA=S4>f0L03%z2vu#x5v5%FZ0Kw>uUAIE3$AA~R6da?m#|`r#yB*|;EEyhJh!Ee`Vb zqIW;ISbs&#PPzy;x;Z{6WKg%2AxXk0|He$ZWd-KgKLsau%5^ljo{P~3AQq-u_n?Zh@Bb8-6^g)5zUsnQhP@r#w^Grg) zCR5sxUMReR#9v-F7<>gcS)piex{doOTj9n{00054?Q8iU%(_JR7VdzWq&@o0EzVAg zEQ|m+Q^u702mu(0Xd0+ja5@y4aShImV*(Oo764w|1I@od%spy&=un;TvyvP99ffh`O1W=$bcrFV>4 zU~ye-^zx3J&!PoSM8Oj(Z$Xl}QJJ2uNI|cw?}pM@v=@=-aOH8Xv8y6>JiCBm-Va`_ zQolv#Mpz05b=zbBQ{?eGU!8;}j|O&*+O{;1yZ|DB{q_6FY%f1^{o8$=&8740iIAaz z(1-f~og>ok5R$ECX!BQpC5ZQd;2Hqx@YP>|jKJ5(``!IL<%B$gpP9NfeT@q9PGmk4 z2gY+rhFQwH?$3#+7l?Aa@C2q)QUvIqULUTcn;>$~At@?vsC+$`!y#^2yI+G*icT2J zEs&@dEg8sQD$XB2%XJGydSjAJ;>}MtIbi*9*j|Ex@IF{b6h>3T6o;7RThT&>MScS>mbdmguY@AU8{6yJHZWzMOmgsd<5~-lbhM z<81Z1W*LxB|88dSt6?@yYTEm{S(mS%!pLT077Qlzm$YE>tc6>t>SeGO@aAlM79XQe ziu&>JRf(&n{doH%wCw8;g>$p>;JkNu{^l9@l(?jhSiRrtwb?t;#nnh1oBq0eV$90wDFY03?x+PUxWg@kD zODmfp63=$KS1>`xwRl>(MJKsT{#*im)i9f~RSJ|Qeg8q}FRgQRwV8)Uky>zO1&E=I zE>%K@<#_o$8=D#^Jpti#arGl@*CmkmIbGY60e-dR>%MY!e(8p1;N7|wj+kWephsA8 zXS^SH0-2f6XlXmK06;m&aUl+lZ5)-yPPN-g&oD)w?SGh>o2G^;#Tsnif$mb1Y=0m- z?Wh0%1PVM#AElO!N;L@i6y<)u>i=pY?qbDBl9`wEf*P$VVZTuPdJ655noSDu&_p-0 zsMrJ@zWN_}cOWz^DO?+M3rnDNTAS^^nhm93?|qm5#x_KlZUGcIG>f1=mwgoT0bT`c zXd)ZWj+yDM>-Sv8;fG*O3%7`Jf&3ysNu8|dvr8xR@2Ui2K{2)D%;{H$sjO=u01D}8 zk4N|+RRMC=Q%`DmE%(R;e!5iD`$IxrQJDm(`^Fexiy=IIkD&B_Ye3489~%5!leq?U zRtWwl(=AOWmg=B3L$sj!S4kezQN3>jz(AzUE73=v3b<|HYldLn_0bHD9*-JWZ_LZD zb%m6JX<@SX7y?Z)oS-cY;hlR_0Got-0K4{l)5%`qD z5`(4Rx+bT}VIy%3xH#zYtO8wsQhYdj#jWKAsmx&46Kz+lp7ee79r}-uRBN9sa2qff zctyb?UUt+=C2k{d;M(3i>#b{rK=&HfnSdbi65P2ZtJO$a1*Xa)Y13K3?1fE3StVab z-kVX(h&TW!GvHE{Kaj;jO9h6*j;^Dfwc!7lOW}QRzy~l4`9Zpz(oZJvLA_)$eiYFk z0(KA2-k}Oqm7}d!u>rSN6KE@16V`U#$M>bC^#Uc<%VVyZ{RdACP}LZ6+Q&G6bM;I= zy}+b@np$s*$6|>Z+`BAgXUDnfbabb(%AdOgrsEsiBfcMd4LReG;9@m`_q{OZA+w-z zfsXl9%*n)*L>A?o9ZHL10(JYXm+*P{KO2wMvy8w5UB{t*X|07(;UP&v^t_Tjb?RAA z@k~n=9}GEsyM477wy+|EZGvP$9GF_P@Y;A)eKoXAZZw}l{Ag2-0Ex|d<|IF8Rx}zYma1^n=h6ZCyY_gB4~?Aa&4ku-HQzIT zf2q~XZirg<&soSC^N;O;0lC`_A3y*A04ACkpS~D!Kvn1rXwfRVMvKDD)x6Fdi=F~p z(gM+yuh=7x=ta%)*{6y6VBik_vUmU*Iv!ovlS7-sXbb`M2F?>CzenmMo!z8&cI2!L zy~)YBPl&2fmE+kQ8_!4c-T>rctm~914rpb*^MAJ6#CW~HdIHw>wG_V`?k8QQT{GcD z|I6EvUNI_K$j+k6n-rcNmLsC9o?2fI%PsV>KbSITfv9AYmPX#dBh>K4X$*Ye$L)r#k}mSGew_BDG=9b+N!nJ^kVg4>b$m>%v1?5Mz}az zOskmvv_xncxWEjV(F)^^oolw0sNrId_P@rN16Kzit9f#Np0gU6$)=b7gwZe=D3_s2 zX9dpFdF-qkR{?M$eS!}!K{$=KdM_tRn zei$Nl@0r~cAQ#IkV=96QoJnin zO!#chf@Q9jV7RqZPyhe`zr+zWj`5T;hzafofxj#g>~P9p(_XOIn3~up0>&MFohD z6$j#KBU4G5yB>|!U_56(YX7hj{NU8O^u=ix$1Cv(Bma+?V?i&XryVCdQ`2xpG z6x{G(`3Jz6hP{)LhPmJ3V(=fYwtL#jXpc5|(vGQdPSNh^TfY1pNrYta4KFN_n10(B zD-m*5cHNbThR`=U?>vB7AWgc-YxM~VEs>*J@hQaI@=#(9QdQOGZB)Ks1iRD#6}Tv7 z-S53XyijZb3KvKiOfQ&!f|0#xtmU)AGR3+hIM6vuOb_-%6+|c33`HqnQE>X70>@aW zd4bti->oi5hqK@UgaEMSylC@QCz3^Hm&-5f{=%PD*aPLb?4clGz|a1|QU~u=P{F0F zHwwR;t;>K1ahsy5G=3mxKi2vJ2~ znmh|idR?ssu0lO(FR6E&s$o_zw~$l5@pb^TGU5=JS)(&y@)~^}$+#myvMBLdEB#9i zpHHLn;f$E^Ys<`6677rZOB^{cb+h#Upb3kCDMTxP=Ybi`fsVPlh!t-9O@hXW9pxH8EUeT;gxxp-~S-@7cV$xlWFA$R?K;NF@BFwk||CaXJ zo{Q(h`4~K0wASFN8?mK`OCo}sy2$a9PvMX_oDX>SaUFl3)p~cy3k@i|7TFZ4{;<2x z^>P=Q1u6A$=|$?FK7twa^4(L7m!-K%>_Q%H6M{f;x8*%aGW@5aJ56^(#lK8kw$j%WO?^0?yd z6j#i7Nc4=+4je0X{XT8HG6UBQ&bhH5cG1CF^y!>ZY)6d?DfeO#NgSg904T9MhOmg2 z>^B4GuQA$4;w95_cQ_Dii>J$K1f8AquNet^fk9JqrX6PnPa;spSA>rOUZ4|*@hEg4WVs-Ib8D43Nv(*#Bt;lM?r!ouR{bRJa1h z70&vohK|-Sp$%?M8gqw8!rc zExCMp@Lb{pkj>NI9(viRli>T%vuXE})&_c_HX?g#KT{X5=*$W;C+pojRiIYJh>_?}Fk zQ9uq9FFP0kFX-hpwGCNrpVy)3D-do_K6E2gBbM-@_;%v)_?cJk2grBhed%GLBKn?) zquqlsu)CTQrJdlZk5HXz^%m(T?X4;JgWMc!8d)y!%)@zAb#=DWdjGb@#5Y8Z@wvJ% z9GXX6{yNy*>mT9y^!uGbra3losa1LqAMH0&OIJr)Ovl_jx44bRz~8e5x!{Za%hRY1 zPaL>ZL_WQ9L7~rP&1&wCkNl9*o|&JCQj&Ww`n7tpWK7e2`8#Zc zR6=vPL}sQjqsGJ0vM8lk;yrPa(W} zeqW}3wnMa_`d3LF(^0)|1c4D-PTqFViR}o(^L`tOtl$l9yY&YOGPL|!lie7fU=bW} zO2u_Mm?K+bG^)mDPUHzdFl6wda)TzT?QF28g1wdu+c&2(QzMa!A37gG}SuaY?z zoP}8Y__cTh<*}zhqEc>93&&W(I|innl3HCEL_;A`OB?|5e((SaqNOe_Zc6)PMs)<% zMLZ01e$zk!;6#;BMkSteR@M*J0pVAfT)jA1DagKr@%NZ_fgA8okANvn4!u?g3mtZF zaXJoDGzZSRgpl!rTSY_!#fZ2=bz%--Km>AV%bcfj`wA2pyoy%J1 z)a@#f0iGt%BlYk=fTZ*%j&#CO(Lw-DwEIyMdImB zq`H`{@EZ?l&LDsUzt;OGS7(jT074pmC1d-cQajWu3p5A(84M%j$c|}GQ1Al3iq$)P zU4ua(lAj8jsIKVT_wVLJOStb*3CZ`cro9jUNz8-`C914cDJUTU1el}wGtraZL&Eil zpVQnygv|*jiK99Mno%5Yeq@@|%mO%Xqcd3<>rwkf0+@QKFAu2ADQ3z=V5rViQt}Lc zQgH)|oA+e!K_4G5_<>}&KoWz7TG;L9M+8SaBe7NrkDVjFAo_hzSMeR2r{EeG)v8LZ zDF6T%z~wzfjsy}`!k^4Zv!^(E7X6DM3)T1vql~H{Hr&wE0xT;YIe(BcJD-Y0E0@Cj zEYEFJz1oFD*6KTQu^=siY%HzIOxxG?X~3icyTOEPio?dl+O4{Nxz535iOqP+<*zw{ zRN~(+0yfHP?`C;*Ze3DKJuTX^2+*wOm!X)5ZsP%@{`xkVN8b=e}XFwQ1{ zUPD+dkao#f=i*#Yty4{)&Uuyi)rr^`ka2jZkHu{fYG8B#Ja6uf{$)%Lgw$or7!F^X z9;p=r2u~IU`yp3YMFgpcj*%YwF!7u%I)O61DO`PB<~f#Te-3Ah8!B%`P#eEbeI#KY z*oT5KDa1gA+##S|KHeIJoe7eF1LNy`lq*Sz7boxpa8d(IwGcUrDaB|2lBW7U~f5`*89E`?~zQuR4^f(bj14w55i6VO>Ko=bm zz~DBkfi$ftCwML5lsh5!JdxqosrLPxSkbI+tXs82AjbI>)(vXJxeX+g{LK7F{t7eG zxFwmXt~v`Q30YU5lw>dP2m##WWMrHN48@8s{N4(?wY%GaiK8v=;ZQ&2x@MWL&3#AI zk!HT;9v9_}{-bb$;@imzfB*r_qzST$*t*U*1XttTMc4?QUip{|Qm_C;VtDk2Gw#<| zt9e1asv1_c77YLZ28<|OTRI3O20OI( zX$*#_Y>dn&r^cp~Ggwq{z)Hy$V82u3SYpk5qGOQ@yuFIKcd#KCcF>=ZE0%dzctR>B zBfw!@;RvXhj_7H3vG+&h&n9C5@{SjUGGHIg!tkiZy1~Acsr$aC4DS~@k8{9fPM1=i zEpff+6&=^1Z=jc8%eW>`)cF@O@f!ICGy^Y0FOWz zhw^>mi^UE>#4V<42ackBji(y&V$!x_JNNs~>y>UnLb_qB;GFCPNW7%%;R92$2Dsbk z$`}OYu}Jpb^Q+_)48Li17+;fy*9TgNjct2mi6v5@->?pD;7?B~XgCc0GX$(kxWFOy?00000GKI>h*$;LwbWV>hMMO|rzB4X$!o}9#f42Vo zw;&qYBvS6UyLyb=8!nT^-s$XwzSbcyz8>wGgy+pF)L+L)qeF@U)@GH?Q>$y`R9hD; z<0s=rf~BFf+6p#W%T>Zcb(*G@u-K1tTb5YZ-5$jA3!hk4#*3f#IsYSY0007)vt>6h z)pLMCs_DmL&G~pgJ3R;}6o0fhNJLWF2<2z~C)@sJ(<0~RZ z;rM0(i{U`wcZqvhhU#IMZmr+|8bFi;03_v!iI73xfh%lJHhp;Xl@bxa!X)F6p{GS* zRiO=*E%X=Pw61$zW&SUvR8rCgr~KCdBs2|-Z$>BB1PXQ17Kve|>W))I%Mbm8m3>AL zM6wps7ZbF7JqG);zbSMi; z+&HTjS=OKr4bj1U-kX(M%Nq6fYN8oSNpYIuL?}XdaaEtqwa3Sl5sOe8#2s=6VcWm} z00v5n#P$-q=RAP*gup1`Ri?wwA^FjUA(=PR4ER*Ln6pNAXtpkO@v-{W-oKDR2G)f2 zowte1q+aJq$BudgG2#R_v1u>1e?h<4(xUc{4DnP}Q5|Kry00C2>Z$lBYHL-vI z000LvtK6OS&5X8RNFnf>Q2nWf5Sd!pu?p`!xigpZL@6L{lt<@Z$*}cxMBo&AU z+%H7YB^9IgN;%+sW&7f64~;Yc0010M+EUrcp-SkJV&cZRp&*)~V9NcB?rkRSum|;> z^PcK>1(?ZCHAQdXpAPuH0X#_v)Ed>eSG>=^P$uK{(TV!YEX@SO{z23eWroae*x)~_ zR(Q(Ur2^+c<6K;~DsrnLj3&YG2mKXRJ%xy8()Tb5u$ovhc91~lqk~qoKo5kl00N*V z5T}>`0004LWAWmB%_sTH6Z@Pl+^$~9Yzm$&Ddph`+z+n zjvymM2AZ}ZypQ`2y%2kCSZgw(o9l$|-s^T^?^#z+ zGN;hPp+$V%dV!Tbh2k>&!T7z?M;Y@Y+&oE)r?uSRj~~qbf~prtlVun+bI0RsyvWKS z>S(i-fP|TcnlkXNM+MBLlHjL1;y05mB9s}Vb0SXz0Up;B$8Nd~Lo(%JIq{^v;wrF) zD6%tG2PM!2>B&@#hyVrYpS>N}hI?VWi%RNw#j@7S{MWUK6?1~c}3 z4U;8nM9~;yXYBjFg{TzSLu3ib5?QlHsYtR!%1%nQQo{F+*7v;MAD_?f@%{e3-+x>W zcg{Jl`+A-8dY*G$_s+~cckIFUBYmYZd}ZGFD@5<>3!h zc5Z*&n!5EagJu1_39Yc3SY~fOQe$B!Fy2uirmAo@3Q=9%->$~AO7ZFBd_zR^Q)&N& z*Lc&+gXmAXmLb;}EXCEflmX4xeoD`I)m}M!sz;J4e2Ekx=9Xnrad|+fl>sm)3K?R1 z3V?`7CS4OPVKww}gD;2Up&BKX(nIUdsc_Xs1hk$D;ULn0?zAxuK2fw>spr|&WAW7?Oy1qtuB zck;f}cFj_^p*kjROX0+}ZZcvcP&Q2w?L8Gb!zebclXcK3GEMd%5wWn#RGY(}^p_s#7W3 zmNT~tTZ%icuBSIW@1r}O*6bzura8oKHK9zU@u|{jsjg>_8t8eeSFI{?M>cJqE9p%r z-6iJ;X)93$4ulh>*4$T`_%IU4tL{O`Mc72#iL$*3Xq^PE&n1&{1Hk=g76<`e2-YP) zb|LVJuJ4n#l5stEho2GKnH?+LmQ0i>0m}v~i^miv}b= zZ5MoaO{lF)rPr$qeH@VuerqETK(&@Jj#pRbl_LJh#@$YWCEd|KY-27><8lH+Swo@p zC{5Ul`nE$wf!}JJj;!CSF4GSrn;$6Y-}aV8SYsTbZhon5CukhFByx3l@WM2Owg(?A zz~6B>PpCIaE3J(SD8z%A++$He9Udfldxm}(CFtdP3$LEnQ$!zZ!3Z9ZopxjJ*ESB0X^VfOnmhtto1wB;{GU*IrX_za5^-?q{qV9;Aeo3Dj;*v=|&0@cL1{Fxd+G{(0)_-p@UWMil|*y*SBWC7@%_ z(J7jG0u~)86`g4-l|~hIopRg|llA$V54UgUJ^|wZ@SxbQZd)(M4RI7 z*1V2$(Q@VWk!!UdAx3w^Xj$) ztL0uMeVC&w&$+djd}QU}tHx+@hFEXCkV7zY^-TTlFPjqKtTYtP0|*oK9>;9((rJ1j zjnF7QBTD1lvPsLB4 zi;(!ljSWt6wF*~C-MUiJblT3mXNeG~H>4SVthm`y>K>3h+${zjaI6hH$kWbak~g zCyq#TeVomzd-Z9)+1X2c{h{jH6?o^#84BD(E~y4r$!9s9b!&h2h<=1*$j|JvWSUFT z5v8`o=Q>@NSBrXk5j--M_ZUyhf6<-kjd*NPdw%Aj5iD^$ZSMTl?PJ__y~OS;0Al5p z#7nQW%LnvAi+7Cms(Bt%qIq+Y*WD(&B#LK`j)Tw!jZ}2n?>bD-k)_iq)mufuiE*AJR4P1 zyD}tbMmECtLbJ8c5Z zl6i9_$Kue~u!n)|Mq_V{U(U_5rg5si$64772^DV~89@o2UKcD>g@ww&7r3xj0)m8Z zxgwNw2`=-@GWQ6($RX2%h!36RBx6xNYIc`@v}Vd_MBv$z$!y5cyhdX32G$zzu`J1^ z;HN+4y3Bn|PV2L*@uHv8hScGjp`*DyY{`O~lUs2>OJOs~`a1N@3Xhc5r=)9^VaKkZ z_z1U&dn@EK&rOu7*eDR4Tw2g2Wiui$(||f>T+L3pBt!}YspUoo$QC za%Oz;8vAR4Our2`Z}~5$a6XSr63J>!tQ1eptr;?|Xo7D|uP+oCZm1SaO8AMq=%0GDjh#{Ao__Ic($F`v*9+@))Fkgee@* zJeGIkDA~7$az6!dwF6`jE$;j=Xw%kUQbW)LCbW4AG5w4iDSOLwt$}RPwa0|yKpi!S z)Y>cSRNA*`=!2>4n^XX$GVg?NTh(aKA@dQ+h*%${*(6gzj_Qeqiml`>zWg_>)5FKN z+x3$k#SLlQILbjQ`iyf6L32c)xD#=GI3c3z<&O0VmUn}d}ECrW@I|W8|o!)-9vSd0L^YY${nl4M8bs|gt+K5}4$|*{vt8VGN zZQcY=9Ph@BpDgjh*YL|GrA#c^9#wkX3Xh3 zsLph83h-xXf>b0(Sf=e&Hzo(Ro&-Kv!j*X;h(G3 z$srCRTZ_jCtPyHgX#6e&53SBR7^-nx@FacwT2#dGK%GSecl%hS6w$2@55~az0chHr zhdozXHp5$%{kZNra`9&+C|d;6kT47Q_jI2S@v!Y(y(nVQA?H*=bB+#tq9wR$R&o=7 zG+PV{E?v7!=JQ3=(LVQVKuyoZpqU$4$X3G9$&15Y;wuevEV-&fYn491XG+_T+0=b@X#GMqqI|f5 z=M^W8MxJ^QT2KtIEM(J3h_@X#>gORC3@+@*lRAQlahuSBTi^xz&y0tW1y?8^S5&Rn zCrEZ%8G_JCg>2L7##grMXxFJaW?IAijvn-hPEB zR#@8UrC<7&Ss6R`N!LcXzzAQ<&jgiyWMUGZjc>5*Xht6@p|MM#s9QM%oAS$jz_`=; z3aU6>%Ey;=x>X)?&RW-XoQTY`HY%>tw2;z-dt&00N|d<;LFFyRAr3Dyl^I=_J%@qk z%SI_EojUsEIJ%CgGR(vUka4`YY7XBpHKUlEx_#jVwDdc0aYWX7utHl4i+V0Y-I+`1 zG+2R#9?dB^bLRoBro;;1wV?EAKJXcBJ1VTjwlWV3^-b;U7ZnJz0p0@OgeLy>3Cgz2 zl=COQf53B|E&l#|NN=mDtIz0UTt3B6Xb;;1_Y9d&z=ASbTTFViLdrj059m-(p7FdhChoFzM#$&w5r9i-j=n4UdZ74XQvZm$7 z)(@Qwyt2W6QV^YdPBv&oEd`elu-YFeFV&7xsMH^{8UUui?exD_z?d)=GUg1H%&V~W04h6<3-&=>{ zy;rZrvjY(BZ^5v1A>YNq^PI<_Gj3Ys8Rfivytlpa&H^nr-d3JL_}FQ6$*x~7j)=JX z_>t+5AB6T;7N@b4PMJ9GQo8Dg0hX$+W!cu*em^lQuIAlxsms(H&anUp&+ zS=FC#t~FnOF~p}G!G2oMW!iq@IPx=LqC%>c7Ni-C|Bg>z`jds4g9Kkzm1T2sm;+(a z1G>OKyWth*bU9)0s^`7&Exz+hR{Tu-O||ifx>l16Vk|<9=Yr@~_?XYs@n63|eEY48 z!C?<_NPP(bf5qY1BS4Ty-yq;`(pgG^N@{qmxypdBIR>zdd#t+!^~s$@jM~w!8W2pp zjT?!bqArgD?>zhr-hknkkRy@GRJ?s`ty;yUUq?n30BA@LX->^w;Ur)g7cA%2z1AZQ zWq8nVH&)Y8D?jm8>f&=6wY#PAWT~qcJ0j%8%nem-48B^t`g-k7Y{!Lsh`@7h##;@c z69Ead+hpq`!-!`eGt-qRrvm)n7*wQ+*_)@`jEFHipbeLh35z(fBtmLo^>jTX0e$=J zk=imA*-Nwap&@tF&JvKXNOw^qty~_I1P)+2%CAHMNjbbUvDcY>HO;6LIaNaw_`&s7 zlV)sPWUmHLnB;YRZW7K=i}5)c!sfa=2P=n^lbP*jr8CUP-+Q9Q1MVe+*UIcLD*NPL zUzi9GnR(Fhu)NVo>}pwE~(fTmZPs~ zZc!7vyPj0aE8?)qV$~iDsF4~&+#9+Gzth_Zc}bl5zPY2@%ZS{X>(Hu%!JV<`kMV2Z z12~EF1F6r|#a6 zP!^Q5WJ?H7qx3C1`_$!9h-4kbOv7~G4I|Gv-L%5K1d}R_7X1UIm4Po35m`&=iLdq8 zW4#RG?+PM#&LGts=wc*f2`r^teJ(N8fjj%DjJtmQ0UY?L{(e~<7K+Ntt5hGh~ zaIrOTWJDpz+|Pn2|3LbZ;c$P1G<#KVE@L4T{xzq_cJuYxqNkHqS+?D3{At-)S*TGm zt#gVONoq+4o1EUx)sEuzJA816B+q(N&bJZKH5PpBfy{Gd)RH7D(k%F%6z_@#OQ~(D zRH3_V>f4!emW=IF$in=$s)gLIInDJeKc` zy5sd9U)*uaG#bEkp16Mh-mv|B>x}je-|P47NzX4o{`SoItQxA@NcBZtjS^2#v#a~9 zoKo_EmCSky|M;;IPmd6As08yqQU2;_mmYb+f?jz%^K*?(Uhg-4-k4)~d^Z_K^sv=; z9P)?7GM{od8d$lE+|fNk{fq#!#m{y^xajjo-kTv5o?h3kmBSLhwjjseAZedV@IkCR?8>}vN!&jDNjAv34=oI(H&tVa|!9ukVaDCwjjPtTnT>M?h5%gJotb% zpA9#;#bw3U^hyOQa`k$jXu&7;bFby~k|9HgY)7gZ! z)50<|G)E#!s<(J6rA-+1L|NKY0sb^sbnvQ zmsQ*9!eD#8UpxkVxS<@cSi>b7>(9W_;moPX;<6r{5W}#7n}Y36!~{5YM&-iSq$xvQoVQ+$>6NGunRf>?cD5NEY zfx5&-bDm@(x&;b*cTUMk^;T&7V{X(&3T;({-<1PeK4CiV+D9_GjR`j`u{p|JFM1(PsL-ax5%8DzgEarrjBBFv4u4ap~9%)FL-$CuMx zbBBe3g=784)sqgRUdbD|2WC&jXb%bT^^WO()eF(Hj)SzfvSQYtqpxi^+oXtSNXm?( z<)LECgVdlOghffd8Ez3|#~l_KLJ^*HODqd2TAUfi4fjH@Zeq8)7P8_@_?P6^6e;H9`|+S5w|bq2dA(MLF(nyyG>B-TLY`E?O*KOR z(g+)?LG+qU!b`>QLpi649U&__71l|`lobmTw>ES2O{gPchZ&WFzmm*(5{@*95i-uE zVS;^5j#r zgZyVm*pIzm7Cfub-SPOr>n|;DOFxej9<(__%D(7rPNOV4FNS%p2?^r3>J`ZAaH)^@ zan!Y_D3e$@KG;=&?N|X9xNN>OUsWsW-S#V1MpUY+!$k{;cF{BXv|sST@@KEBrAXLI zsKrxBmcDX5b@IB6{^5?Rk936T080BO3~kBKucx! zyPTk&>ci&8j9g#iSo*JiPtAv0nRYl1WHt?7K6qDcvPo$Zt8&5wp#}#Zn5L}_2!L5) z-~faczz0(h@DG5n0ED|~0I-Cx{z}_J_nbeeHrBfDIF% z6#!h`0lWa%*Fyk+kNW4Uk`=}h&8};U@xZv-VqDnaVuDia{MtyAoin!NC;%6Ri%JWN zNyDYsVPeuSQE4#=&<=h!x3R*o_E+|D&BmfBFL9{Ot=w z;7?!hAU|zD;CR1me>Vp1v0va|{n>pr(bi>uEe(E;qTu6#L^+^6*e%gEcFuB~OZ5*p z+3l?4IE}@$g|%H&(6)9Oer{+3KOIAqp94zDic>+JRMtn@$H~PB?SW+XadLEam-dn4 zL}H0ZgK2EB5GVWYAs!BLoZnGlD^$U_q1mMbVNjH?Fq~aNN)RcI6c>>amqZ?C$MO;q z77-E_hr(deVsMZh`;U!No)k>Ux>;FE>#M5$s1eM`aoT!#xJU~Ld3$>cdW#5R+-!tk zQc_Yv!f+ut910!*b@z4lK>9$P-MPLS`DsTL?T&J@bMdglIJ0BzA}ukV9&((V*ouB_ zKU{Ni`Bjm#yWp;yf+&oWkPp&D2qq{j^iN7ws9!oRo^Fo2O|wD?p&ijqXlD<1P!INx zdM-Z))GzhFRQXH%FDnMSMO*uym4CL^$>|@fcK0~p1tR!?^e@%^)O0uWbwLa1qunu{ zZYcB#FVGdPfAZeL&iZ%f{KXPh@-N$t_ObgHYFNp4wcVlcy@zB$U!_&t&`1xAn;{0{ zDF5%~q^uCG#_#U_Z49l7^gzpFha*&23<{Sr{62j}#E%JsgHrepBj1n2v7wEzva|O6 zXB%P?f746;IcApavPe;)gX9V?WyHO9>e=^>AFadEUmA+cj!$jjO4#|Zv4 zlw^f|ANq&>FS)b|#u4KNHWn=}A}jPy#eZn+4nJvxv%3e<8HGlu%7X=hc6L_MFtnwZ zu!txUDj@1I$L3v`Q5NP^)z_G%h zK=Z$wg%*)OOIli6LM6n-B%s1lqE=8T5u_9ta>QX)qM}GiahTN4ivBS6w~9`=*@5v8 z>G;PnSYNEb%B-ZstSv>*)=+UN2}`Ib9BvJjl0=F_Q6fl~u&Agd5-AG*S;aq?`CC;Q zcJAO1_WfgMg9Cgw+!>%<|62M};ApoSwp@^I?r7|!l;iw4D}TkgUttWZvpcz^ktpmS zkVj$X4BARo=r5(eoApcchnn5ryYoLo@ZJ6&>i@b9Z(FqUUX$*-sokUgwGnrWwTCy- z4XtDYj*$N#9DFzWS1nxYvO?JNgQMO5kAA>7d!gO_UwQ)UZzOnnMZ3AnTf1SL*zKH< zHfSLiXB&184Ew*G=ilA^!^Z!jukJ{%|K5oE&jQGQd&K~7&{pz7 zKd0)?g8!`Jz7O5M#*m+J>F+T|7JF`%2ICbtcXm$}@-SJUzm@&2`TOxE*tp~9xf@sD zFmYjU6M|v)KXm_;Abnb^1uIL|C&-_*ufs6h{^$*bx)$bkl$F=Eh z(D_~pUipI8-9o=Ey#E%Densv7$;5A;{wJ;C*xIiI2gu&peO!CAx{nJ7$llp~Tzm7uk?!Nd0kU^?AJ^V| zaHRXVaDeQc-N&^z9~|jEE*v0xXZLaK%?C%ij|&IL-r0Rzd-K7O?&HD%vUheL*WP?^ zr2DvVfb5;!$F(;f9O*tT93XpV_i^pb2S>V(3kS&F*?nAl^TCnsMxRMj<5Lg;`?UL} { @@ -105,7 +104,7 @@ const MainHeader = () => {

- Contentstack Logo + Contentstack
diff --git a/ui/src/pages/Projects/index.scss b/ui/src/pages/Projects/index.scss index a142160d1..926d50365 100644 --- a/ui/src/pages/Projects/index.scss +++ b/ui/src/pages/Projects/index.scss @@ -27,7 +27,7 @@ border-top: 0 none; height: auto; border-bottom: 1px solid $color-brand-secondary-lightest; - padding:20px; + padding:20px 10px 20px 13px; } } } From 945a6cfa752c15b2ad0dc45342cb58570c37872e Mon Sep 17 00:00:00 2001 From: AishDani Date: Mon, 10 Jun 2024 00:22:06 +0530 Subject: [PATCH 011/759] refactor:code according to new design --- ui/src/cmsData/legacyCms.json | 158 ++++++++++--- ui/src/components/Common/Card/card.scss | 10 +- ui/src/components/Common/Card/card.tsx | 12 +- .../LegacyCms/Actions/LoadFileFormat.tsx | 60 +++-- .../LegacyCms/Actions/LoadPrefix.tsx | 87 ++++++-- .../LegacyCms/Actions/LoadSelectCms.tsx | 189 +++++++++------- .../LegacyCms/Actions/LoadUploadFile.tsx | 146 +++++++++--- ui/src/components/LegacyCms/StepperSteps.ts | 3 +- .../LegacyCms/Summary/UploadFileSummary.tsx | 15 +- .../components/LegacyCms/Summary/summary.scss | 4 +- ui/src/components/LegacyCms/index.tsx | 207 +++++++++--------- ui/src/components/LegacyCms/legacyCms.scss | 42 +++- .../LegacyCms/restrictedKeywords.json | 47 ++++ .../NewMigration/NewMigrationWrapper.tsx | 7 +- .../Stepper/FlowStepper/FlowBlockItem.tsx | 1 - .../VerticalStepper/AutoVerticalStepper.scss | 12 +- .../VerticalStepper/AutoVerticalStepper.tsx | 4 +- ui/src/context/app/app.interface.ts | 16 +- 18 files changed, 703 insertions(+), 317 deletions(-) create mode 100644 ui/src/components/LegacyCms/restrictedKeywords.json diff --git a/ui/src/cmsData/legacyCms.json b/ui/src/cmsData/legacyCms.json index ad07c4b3c..260686357 100644 --- a/ui/src/cmsData/legacyCms.json +++ b/ui/src/cmsData/legacyCms.json @@ -13,7 +13,7 @@ "title": "https://www.contentstack.com/", "href": "https://www.contentstack.com/" }, - "parent": "", + "parent": "Contentstack", "isactive": true, "allowed_file_formats": [ { @@ -50,7 +50,7 @@ "title": "https://www.contentful.com/", "href": "https://www.contentful.com/" }, - "parent": "", + "parent": "Contentful", "isactive": true, "allowed_file_formats": [ { @@ -77,7 +77,7 @@ "title": "https://wordpress.com/", "href": "https://wordpress.com/" }, - "parent": "", + "parent": "Wordpress", "isactive": true, "allowed_file_formats": [ { @@ -85,7 +85,7 @@ "_metadata": { "uid": "csacaafbc5e52ee0ef" }, - "title": "XML", + "title": "Xml", "description": "", "group_name": "xml", "isactive": true @@ -108,17 +108,71 @@ "isactive": true, "allowed_file_formats": [ { - "fileformat_id": "sql", + "fileformat_id": "zip", "_metadata": { "uid": "cs5d9c8914dc21ea80" }, - "title": "SQL", + "title": "Zip", "description": "", - "group_name": "sql", + "group_name": "zip", "isactive": true } ] }, + { + "cms_id": "drupal v7", + "title": "Drupal v7", + "description": "", + "group_name": "lightning", + "doc_url": { + "title": "https://www.drupal.org/", + "href": "https://www.drupal.org/" + }, + "parent": "Drupal", + "isactive": true, + "allowed_file_formats": [ + { + "fileformat_id": "sql", + "title": "Sql", + "description": "", + "group_name": "sql", + "isactive": true, + "_metadata": { + "uid": "csceba83e388748bf1" + } + } + ], + "_metadata": { + "uid": "cs88cc83ef30625782" + } + }, + { + "cms_id": "drupal v8+", + "title": "Drupal v8+", + "description": "", + "group_name": "lightning", + "doc_url": { + "title": "https://www.drupal.org/", + "href": "https://www.drupal.org/" + }, + "parent": "Drupal", + "isactive": true, + "allowed_file_formats": [ + { + "fileformat_id": "sql", + "title": "Sql", + "description": "", + "group_name": "sql", + "isactive": true, + "_metadata": { + "uid": "csce12ba4b8be62108" + } + } + ], + "_metadata": { + "uid": "cs65a0fe53fc587481" + } + }, { "cms_id": "aem", "_metadata": { @@ -135,23 +189,47 @@ "isactive": true, "allowed_file_formats": [ { - "fileformat_id": "json", + "fileformat_id": "zip", "_metadata": { "uid": "cs08dadd206cfa53b4" }, - "title": "JSON", + "title": "Zip", "description": "", - "group_name": "json", + "group_name": "zip", "isactive": true } ] }, { - "cms_id": "sitecore", - "_metadata": { - "uid": "cs1c20c0a62eaf4b89" + "cms_id": "sitecore v8", + "title": "Sitecore v8", + "description": "", + "group_name": "lightning", + "doc_url": { + "title": "https://www.sitecore.com/", + "href": "https://www.sitecore.com/" }, - "title": "Sitecore", + "parent": "Sitecore", + "isactive": true, + "allowed_file_formats": [ + { + "fileformat_id": "zip", + "title": "Zip", + "description": "", + "group_name": "zip", + "isactive": true, + "_metadata": { + "uid": "cs7b44e4f248dbdc92" + } + } + ], + "_metadata": { + "uid": "csef3e4691c7e23a2d" + } + }, + { + "cms_id": "sitecore v9", + "title": "Sitecore v9", "description": "", "group_name": "lightning", "doc_url": { @@ -163,15 +241,45 @@ "allowed_file_formats": [ { "fileformat_id": "zip", + "title": "Zip", + "description": "", + "group_name": "zip", + "isactive": true, "_metadata": { - "uid": "csd2c76964ab6c1fdb" - }, + "uid": "cs47d2095581add21f" + } + } + ], + "_metadata": { + "uid": "cse88f8602ab676db3" + } + }, + { + "cms_id": "sitecore v10", + "title": "Sitecore v10", + "description": "", + "group_name": "lightning", + "doc_url": { + "title": "https://www.sitecore.com/", + "href": "https://www.sitecore.com/" + }, + "parent": "Sitecore", + "isactive": true, + "allowed_file_formats": [ + { + "fileformat_id": "zip", "title": "Zip", "description": "", "group_name": "zip", - "isactive": true + "isactive": true, + "_metadata": { + "uid": "cs882b321665f69cfd" + } } - ] + ], + "_metadata": { + "uid": "cs67770c22aae86b7b" + } }, { "cms_id": "othercms", @@ -189,13 +297,13 @@ "isactive": true, "allowed_file_formats": [ { - "fileformat_id": "json", + "fileformat_id": "zip", "_metadata": { "uid": "cs751db98402e685fe" }, - "title": "JSON", + "title": "Zip", "description": "", - "group_name": "json", + "group_name": "zip", "isactive": true } ] @@ -205,10 +313,10 @@ "locale": "en-us", "uid": "blt1f83a8b93dd822ae", "created_by": "blt7710245564fbf52b", - "updated_by": "blt7710245564fbf52b", + "updated_by": "blt74f496d523384141", "created_at": "2024-01-23T09:41:52.061Z", - "updated_at": "2024-02-22T11:28:29.742Z", - "_version": 24, + "updated_at": "2024-06-07T09:23:01.470Z", + "_version": 25, "_in_progress": false, "cta": "Proceed to Destination Stack", "all_steps": [ @@ -269,4 +377,4 @@ "restricted_keyword_checkbox_text": "Please acknowledge that you have referred to the Contentstack restricted keywords", "affix_cta": "Continue", "file_format_cta": "Continue" -} +} \ No newline at end of file diff --git a/ui/src/components/Common/Card/card.scss b/ui/src/components/Common/Card/card.scss index 9e57a1630..6d90f2822 100644 --- a/ui/src/components/Common/Card/card.scss +++ b/ui/src/components/Common/Card/card.scss @@ -5,6 +5,8 @@ display: flex; flex-wrap: wrap; gap: $px-12; + margin-left: 10px !important; + margin-bottom: 10px; } .trigger_list { @@ -22,12 +24,15 @@ .connector_list, .action_list, .trigger_list { - border: 1px solid $color-base-gray-40; + //border: 1px solid $color-base-gray-40; + border: 1px solid #6C5CE766; border-radius: $px-6; flex: 0 10%; cursor: pointer; min-width: $px-117; text-align: center; + height: 128px; + gap: 12px; } .connector_list .tippy-box-light #automationConnectorsHelpText { @@ -62,3 +67,6 @@ margin-top: 3.5rem; z-index: 8; } +.centered-card-title{ + margin: 10px; +} diff --git a/ui/src/components/Common/Card/card.tsx b/ui/src/components/Common/Card/card.tsx index 1f5363774..cfcb986b2 100644 --- a/ui/src/components/Common/Card/card.tsx +++ b/ui/src/components/Common/Card/card.tsx @@ -55,7 +55,7 @@ const Card = ({ data, selectedCard, onCardClick, cardType, idField = 'id' }: Car
)} - {/* {isHovered || selectedCard[idField] === data[idField] ? ( - + ) : ( <> )} - */} +
- + /> */}
-
+
diff --git a/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx b/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx index c333f9fb3..186a335b7 100644 --- a/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx @@ -1,7 +1,7 @@ // Libraries import { ChangeEvent, useContext, useEffect, useState } from 'react'; import { useParams } from 'react-router'; -import { Button } from '@contentstack/venus-components'; +import { Button, Icon, TextInput } from '@contentstack/venus-components'; import { useDispatch, useSelector } from 'react-redux'; // Utilities @@ -43,17 +43,18 @@ const LoadFileFormat = (props: LoadFileFormatProps) => { newMigrationData?.legacy_cms?.selectedFileFormat ?? defaultCardType ); const [isCheckedBoxChecked, setIsCheckedBoxChecked] = useState( - newMigrationData?.legacy_cms?.isFileFormatCheckboxChecked || false + newMigrationData?.legacy_cms?.isFileFormatCheckboxChecked || true ); const { projectId = '' } = useParams(); const { allowed_file_formats = [], doc_url = { href: '', title: '' } } = newMigrationData?.legacy_cms?.selectedCms || {}; + /**** ALL METHODS HERE ****/ - const handleBtnClick = async (e: MouseEvent) => { - e.preventDefault(); + const handleBtnClick = async () => { + if (!isEmptyString(selectedCard?.fileformat_id) && isCheckedBoxChecked) { dispatch(updateNewMigrationData({ ...newMigrationData, @@ -72,7 +73,7 @@ const LoadFileFormat = (props: LoadFileFormatProps) => { }); //call for Step Change - props.handleStepChange(props?.currentStep); + props.handleStepChange(props?.currentStep, true); } }; @@ -100,6 +101,7 @@ const LoadFileFormat = (props: LoadFileFormatProps) => { } }; dispatch(updateNewMigrationData(newMigrationDataObj)); + handleBtnClick(); } }, [allowed_file_formats]); @@ -107,42 +109,60 @@ const LoadFileFormat = (props: LoadFileFormatProps) => { return (
- -
+ /> */} +
Following is the file format in which data is exported from your current CMS
-
+
{validateArray(allowed_file_formats) ? ( allowed_file_formats?.map((data: ICardType, index: number) => ( - { - return; - }} - /> + + + // { + // return; + // }} + // /> + + +
+ + } + /> + +
)) ) : ( <>No File formats available )}
-
+ {/*
-
+
*/}
); }; diff --git a/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx b/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx index 42f07c68d..f602d7029 100644 --- a/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx @@ -1,5 +1,5 @@ // Libraries -import { ChangeEvent, useEffect, useState } from 'react'; +import { ChangeEvent, useState } from 'react'; import { useParams } from 'react-router'; import { useDispatch, useSelector } from 'react-redux'; @@ -9,20 +9,23 @@ import { updateAffixData, affixConfirmation } from '../../../services/api/migrat // Utilities import { isEmptyString, isValidPrefix } from '../../../utilities/functions'; -// Context -import { AppContext } from '../../../context/app/app.context'; // Interface import { DEFAULT_URL_TYPE, INewMigration } from '../../../context/app/app.interface'; // Style import '../legacyCms.scss'; -import { Button, TextInput } from '@contentstack/venus-components'; +import { Icon, TextInput } from '@contentstack/venus-components'; import { useDebouncer } from '../../../hooks'; import DocLink from '../../../components/Common/DocLink/DocLink'; import { RootState } from '../../../store'; import { updateNewMigrationData } from '../../../store/slice/migrationDataSlice'; +//import restricted keywords +import restrictedKeywords from '../restrictedKeywords.json'; +import { set } from 'mongoose'; + + interface LoadSelectCmsProps { stepComponentProps: any; currentStep: number; @@ -40,16 +43,21 @@ const LoadPreFix = (props: LoadSelectCmsProps) => { const [prefix, setPrefix] = useState(newMigrationData?.legacy_cms?.affix || ''); const [isError, setIsError] = useState(false); + const [errorMessage, setErrorMessage] = useState(''); const [isCheckedBoxChecked, setIsCheckedBoxChecked] = useState( newMigrationData?.legacy_cms?.isRestictedKeywordCheckboxChecked || false ); + const [isRestrictedkey, setIsRestrictedKey] = useState(false); const { projectId = '' } = useParams(); + const idArray = restrictedKeywords.idArray; + + /**** ALL METHODS HERE ****/ //Handle Prefix Change - const handleOnBlur = async (e: MouseEvent) => { + const handleOnBlur = async (e: any) => { e.preventDefault(); if (!isEmptyString(prefix) && !isError && isCheckedBoxChecked) { const newMigrationDataObj: INewMigration = { @@ -80,17 +88,49 @@ const LoadPreFix = (props: LoadSelectCmsProps) => { //setIsError(true); }; - const handleOnChange = useDebouncer((e: ChangeEvent) => { + const handleOnChange = useDebouncer(async(e: ChangeEvent) => { e.preventDefault(); - const { value } = e.target; - if (!isEmptyString(value) && isValidPrefix(value)) { - setPrefix(value); - setIsError(false); - return; - } + const value = e.target.value; + if (!isEmptyString(value) && isValidPrefix(value) ) { + if(! idArray?.includes(value)){ + setPrefix(value); + setIsError(false); + setErrorMessage(''); + setIsRestrictedKey(false); + const newMigrationDataObj: INewMigration = { + ...newMigrationData, + legacy_cms: { + ...newMigrationData.legacy_cms, + affix: value, + isRestictedKeywordCheckboxChecked: isCheckedBoxChecked + } + }; + + dispatch(updateNewMigrationData(newMigrationDataObj)); + + setIsError(false); + + //API call for saving Affix + await updateAffixData(selectedOrganisation?.value, projectId, { affix: value }); + await affixConfirmation(selectedOrganisation?.value, projectId, { + affix_confirmation: isCheckedBoxChecked + }); + + //call for Step Change + props.handleStepChange(props.currentStep, true); + return; + } + else{ + setIsError(true); + setErrorMessage('Affix should be valid and not a restricted keyword'); + setIsRestrictedKey(true); + return; + } + } setIsError(true); + setErrorMessage('Affix should not be more than 5 chars'); }); // Toggles checkbox selection @@ -115,18 +155,18 @@ const LoadPreFix = (props: LoadSelectCmsProps) => { migrationData.legacyCMSData; return ( -
- + {/* + /> */}
{handleOnChange(e)}} value={prefix} autoFocus={true} width="large" @@ -134,13 +174,22 @@ const LoadPreFix = (props: LoadSelectCmsProps) => { version="v2" error={isError} /> - {isError &&

Affix should not be more than 5 chars

} + {isError &&

{errorMessage}

} +
-
+ { isRestrictedkey && +
+

Please refer the list of Contentstack restricted keywords

+ + + {restricted_keyword_link?.title} + +
} + {/*
-
+
*/}
); }; diff --git a/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx b/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx index 70d926dc0..604308b84 100644 --- a/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx @@ -10,8 +10,6 @@ import { fileValidation, getConfig } from '../../../services/api/upload.service' // Utilities import { isEmptyString, validateArray } from '../../../utilities/functions'; -// Context -import { AppContext } from '../../../context/app/app.context'; // Interface import { defaultCardType } from '../../../components/Common/Card/card.interface'; @@ -42,26 +40,56 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { const selectedOrganisation = useSelector((state:RootState)=>state?.authentication?.selectedOrganisation); const dispatch = useDispatch(); - - const [selectedCard, setSelectedCard] = useState( - newMigrationData?.legacy_cms?.selectedCms || defaultCardType - ); const [cmsData, setCmsData] = useState([]); const [searchText, setSearchText] = useState(''); const [cmsFilterStatus, setCmsFilterStatus] = useState({}); const [cmsFilter, setCmsFilter] = useState([]); - const [cmsType, setCmsType] = useState( - newMigrationData?.legacy_cms?.selectedCms?.title?.toLowerCase() + const [cmsType, setCmsType] = useState( + newMigrationData?.legacy_cms?.selectedCms ); + const [selectedCard, setSelectedCard] = useState( + newMigrationData?.legacy_cms?.selectedCms + ); + const [errorMessage, setErrorMessage] = useState(''); + const [isError, setIsError] = useState(false); + + + const { projectId = '' } = useParams(); /**** ALL METHODS HERE ****/ //Handle Legacy cms selection + const handleCardClick = async(data: ICMSType) => { + + const isSingleMatch = cmsData.length === 1; + + if (isSingleMatch || selectedCard?.title !== data?.title) { + setSelectedCard({ ...data }); + + const newMigrationDataObj: INewMigration = { + ...newMigrationData, + legacy_cms: { + ...newMigrationData.legacy_cms, + selectedCms: { ...data } + } + }; + + dispatch(updateNewMigrationData(newMigrationDataObj)); + + //API call for saving selected CMS + const res = await updateLegacyCMSData(selectedOrganisation.value, projectId, { legacy_cms: data?.cms_id }); + + // Call for Step Change + props.handleStepChange(props.currentStep, true); + } + }; + + const handleDirectSelection = async (cms: any) => { - setSelectedCard(cms); + setSelectedCard(cms); dispatch(updateNewMigrationData({ ...newMigrationData?.legacy_cms, @@ -70,7 +98,7 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { selectedCms: cms } })) - + const res = await updateLegacyCMSData(selectedOrganisation.value, projectId, { legacy_cms: cms}); if (!isEmptyString(cms?.title)) { props?.handleStepChange(props?.currentStep); @@ -96,24 +124,27 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { // Filter CMS Data const filterCMSData = async (searchText: string) => { - const { all_cms = [] } = migrationData?.legacyCMSData || {}; + const { all_cms = [] } = migrationData?.legacyCMSData || {}; + setSelectedCard(cmsType); const apiRes: any = await getConfig(); // api call to get cms type from upload service const cms = apiRes?.data?.cmsType?.toLowerCase(); - const cmstype = !isEmptyString(cmsType) ? cmsType : cms; // Fetch the specific CMS type + + if(isEmptyString(cmsType?.cms_id)){ + setCmsType(cms); + } + + const cmstype = !isEmptyString(cmsType?.cms_id) ? cmsType?.parent : cms; // Fetch the specific CMS type - let filteredCmsData: ICMSType[] = []; - if (isEmptyString(searchText) && !validateArray(cmsFilter) && !cmstype) { - filteredCmsData = all_cms; - } else { - if (cmstype) { - filteredCmsData = all_cms?.filter((cms: ICMSType) => cms?.cms_id === cmstype); - } + let filteredCmsData = all_cms; + if (cmstype) { + filteredCmsData = all_cms.filter((cms: ICMSType) => cms?.parent?.toLowerCase() === cmstype?.toLowerCase()); } + - setCmsData(filteredCmsData); + setCmsData(filteredCmsData) //Normal Search const _filterCmsData = validateArray(all_cms) @@ -127,14 +158,20 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { setCmsData(_filterCmsData); - const newSelectedCard = filteredCmsData?.some((cms) => cms?.cms_id === cmstype) - ? filteredCmsData?.[0] - : DEFAULT_CMS_TYPE; + + + let newSelectedCard: ICMSType | undefined; - setSelectedCard(newSelectedCard); + if (_filterCmsData.length === 1) { + newSelectedCard = filteredCmsData[0]; + } else { + newSelectedCard = filteredCmsData.find((cms: ICMSType) => cms?.parent.toLowerCase() === cmstype.toLowerCase()); + } if (newSelectedCard) { setSelectedCard(newSelectedCard); + setErrorMessage(''); + setIsError(false); const newMigrationDataObj: INewMigration = { ...newMigrationData, @@ -146,6 +183,9 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { dispatch(updateNewMigrationData(newMigrationDataObj)); + }else{ + setIsError(true); + setErrorMessage('No matching CMS found. Please try a different search term.'); } }; @@ -158,71 +198,56 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { filterCMSData(searchText); }, [cmsFilter]); - useEffect(() => { - if (selectedCard?.title !== 'Drupal' && selectedCard?.title !== 'Sitecore') { - handleDirectSelection(selectedCard); - } - }, [cmsType, selectedCard]); - + // useEffect(() => { + // if (selectedCard?.title !== 'Drupal' && selectedCard?.title !== 'Sitecore') { + // handleDirectSelection(selectedCard); + // } + // }, [cmsType, selectedCard]); return (
- {(cmsType === 'sitecore' || cmsType === 'drupal') && ( -
-
-
- { - setSearchText(text?.toLowerCase()); - filterCMSData(text?.toLowerCase()); - }} +
+ {/*
+ setSearchText(text?.toLowerCase())} + /> +
+ */} +
+ { isError ? +
+ No matching CMS found!
} + img={SEARCH_ICON} /> -
- -
- -
- {cmsData && validateArray(cmsData) ? ( -
- {cmsData?.map((data: ICMSType) => ( - - ))}
- ) : ( -
- No matching CMS found!
} - img={SEARCH_ICON} - description={ -
- Try changing your search term to find what you are looking for. -
- } + : + ( + cmsData && validateArray(cmsData) && ( +
+ {cmsData.map((data: ICMSType) => ( + -
- )} -
-
- )} - - {isEmptyString(newMigrationData?.legacy_cms?.selectedCms?.title) && ( -
- Please enter the correct CMS + ))} +
+ ) + ) + } +
- )} +
); }; diff --git a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx index ef347ac9f..01a44b0f5 100644 --- a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx @@ -1,48 +1,135 @@ -import { useEffect } from 'react'; +import { useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; -import DragAndDropFileUpload from '../../../components/Common/FileUpload'; -import { AppContext } from '../../../context/app/app.context'; -import { DEFAULT_FILE, IFile, INewMigration } from '../../../context/app/app.interface'; -import { validateArray } from '../../../utilities/functions'; +import { DEFAULT_FILE, FileDetails, INewMigration } from '../../../context/app/app.interface'; + import { useParams } from 'react-router'; -import { fileValidation } from '../../../services/api/upload.service'; +import { fileValidation, getConfig } from '../../../services/api/upload.service'; import { RootState } from '../../../store'; import { updateNewMigrationData } from '../../../store/slice/migrationDataSlice'; +//import { FileComponent } from '../Summary/UploadFileSummary'; +import { Button, Paragraph } from '@contentstack/venus-components'; + interface LoadUploadFileProps { stepComponentProps: any; currentStep: number; handleStepChange: (stepIndex: number, closeStep: boolean) => void; } +interface Props { + fileDetails: FileDetails; +} + +const FileComponent = ({fileDetails}:Props ) => { + + return ( +
+ {fileDetails?.isLocalPath ? ( +
+ + +
+ ) : ( +
+

AWS Region: {fileDetails?.awsData?.awsRegion}

+

Bucket Name: {fileDetails?.awsData?.bucketName}

+

Bucket Key: {fileDetails?.awsData?.buketKey}

+
+ )} +
+ ); +}; + const LoadUploadFile = (props: LoadUploadFileProps) => { /**** ALL HOOKS HERE ****/ const newMigrationData = useSelector((state:RootState)=>state?.migration?.newMigrationData); + const dispatch = useDispatch(); + const [isLoading, setIsLoading] = useState(false); + const [isValidated, setIsValidated] = useState(false); + const [showMessage, setShowMessage] = useState(false); + const [validationMessgae, setValidationMessage] = useState(''); + const [isValidationAttempted, setIsValidationAttempted] = useState(false); const { projectId = '' } = useParams(); //Handle further action on file is uploaded to server const handleOnFileUploadCompletion = async () => { + setIsLoading(true); + const res: any = await fileValidation(); + + if(res?.status === 200){ + setIsValidated(true); + setValidationMessage('Validated'); + const newMigrationDataObj: INewMigration = { + ...newMigrationData, + legacy_cms: { + ...newMigrationData.legacy_cms, + uploadedFile: { + name: res?.data?.localPath, + url: res?.data?.localPath, + validation: res?.data?.message, + isValidated: res?.status == 200 ? true : false, + file_details: { + isLocalPath: res?.data?.file_details?.isLocalPath, + cmsType: res?.data?.file_details?.cmsType, + localPath: res?.data?.file_details?.localPath, + awsData: { + awsRegion: res?.data?.file_details?.awsData?.awsRegion, + bucketName: res?.data?.file_details?.awsData?.bucketName, + buketKey: res?.data?.file_details?.awsData?.buketKey + } + } + + } + } + }; + dispatch(updateNewMigrationData(newMigrationDataObj)); + + props.handleStepChange(props?.currentStep, true); + + + } + else{ + setIsValidated(false); + setValidationMessage('Validation Falied'); + setIsValidationAttempted(true) + + } + + setShowMessage(true); + setIsLoading(false); + + + }; + + //function to get config details + const getConfigDetails = async () =>{ + const res: any = await getConfig(); + if(newMigrationData?.legacy_cms?.selectedCms?.parent.toLowerCase() !== res?.data?.cmsType.toLowerCase()){ + setIsValidated(false); + setValidationMessage('Validation Falied'); + setIsValidationAttempted(true); + setShowMessage(true); + setIsLoading(false); + } const newMigrationDataObj: INewMigration = { ...newMigrationData, legacy_cms: { ...newMigrationData.legacy_cms, uploadedFile: { - name: res?.data?.file_details?.localPath, - url: res?.data?.file_details?.localPath, - validation: res?.data?.message, - isValidated: res?.data?.status == 200 ? true : false, + name: res?.data?.localPath, + url: res?.data?.localPath, file_details: { - isLocalPath: res?.data?.file_details?.isLocalPath, - cmsType: res?.data?.file_details?.cmsType, - localPath: res?.data?.file_details?.localPath, + isLocalPath: res?.data?.isLocalPath, + cmsType: res?.data?.cmsType, + localPath: res?.data?.localPath, awsData: { - awsRegion: res?.data?.file_details?.awsData?.awsRegion, - bucketName: res?.data?.file_details?.awsData?.bucketName, - buketKey: res?.data?.file_details?.awsData?.buketKey + awsRegion: res?.data?.awsData?.awsRegion, + bucketName: res?.data?.awsData?.bucketName, + buketKey: res?.data?.awsData?.buketKey } } } @@ -50,28 +137,35 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { }; dispatch(updateNewMigrationData(newMigrationDataObj)); - props.handleStepChange(props?.currentStep, true); - }; + } const allowedFileExtentions = `.${ newMigrationData?.legacy_cms?.selectedFileFormat?.title || 'zip' }`; + useEffect(() => { - handleOnFileUploadCompletion(); + getConfigDetails(); }, []); + const validationClassName = isValidated ? 'success' : 'error'; + + const containerClassName = `validation-container ${isValidationAttempted && !isValidated ? 'error-container' : ''}`; + return (
- {/* */}
-
- +
+ + {showMessage && + () + } +
+
diff --git a/ui/src/components/LegacyCms/StepperSteps.ts b/ui/src/components/LegacyCms/StepperSteps.ts index 08d5e004e..423bc0ce4 100644 --- a/ui/src/components/LegacyCms/StepperSteps.ts +++ b/ui/src/components/LegacyCms/StepperSteps.ts @@ -15,8 +15,7 @@ const getComponentObject = ( isCompleted: boolean, isMigrationLocked: boolean ): IStep => { - let updatedStep = { ...step }; - + let updatedStep = { ...step }; switch (step.step_id) { case 'Step1': { // Insert Data, Summary component, and status diff --git a/ui/src/components/LegacyCms/Summary/UploadFileSummary.tsx b/ui/src/components/LegacyCms/Summary/UploadFileSummary.tsx index 0311177be..11a160359 100644 --- a/ui/src/components/LegacyCms/Summary/UploadFileSummary.tsx +++ b/ui/src/components/LegacyCms/Summary/UploadFileSummary.tsx @@ -1,4 +1,4 @@ -import { useContext } from 'react'; +import { useContext, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { AppContext } from '../../../context/app/app.context'; import './summary.scss'; @@ -12,17 +12,20 @@ interface UploadFileSummaryProps { import { FileDetails } from '../../../context/app/app.interface'; import { RootState } from '../../../store'; +import { Paragraph } from '@contentstack/venus-components'; interface Props { fileDetails: FileDetails; } -const FileComponent: React.FC = ({ fileDetails }) => { +export const FileComponent: React.FC = ({ fileDetails }) => { + return ( -
+
{fileDetails?.isLocalPath ? (
-

Local Path: {fileDetails?.localPath}

+ +
) : (
@@ -41,12 +44,12 @@ const UploadFileSummary = ({ }: UploadFileSummaryProps): JSX.Element => { const newMigrationData = useSelector((state:RootState)=>state?.migration?.newMigrationData); - + const [isLoading, setIsLoading] = useState(false); return (
{!isEmptyString(newMigrationData?.legacy_cms?.uploadedFile?.name) ? (
- +

{newMigrationData?.legacy_cms?.uploadedFile?.validation} diff --git a/ui/src/components/LegacyCms/Summary/summary.scss b/ui/src/components/LegacyCms/Summary/summary.scss index 05e619158..bb9cb6e94 100644 --- a/ui/src/components/LegacyCms/Summary/summary.scss +++ b/ui/src/components/LegacyCms/Summary/summary.scss @@ -1,12 +1,12 @@ @import '../../../scss/variables'; .summary-title { - font-family: $font-family-primary; + //font-family: $font-family-primary; font-style: normal; font-weight: 700; font-size: 13px; line-height: 135%; letter-spacing: 0.02em; - color: $color-font-black; + //color: $color-font-black; margin-top: 3px; } diff --git a/ui/src/components/LegacyCms/index.tsx b/ui/src/components/LegacyCms/index.tsx index 754155457..f515b14b3 100644 --- a/ui/src/components/LegacyCms/index.tsx +++ b/ui/src/components/LegacyCms/index.tsx @@ -22,7 +22,7 @@ import { updateCurrentStepData, updateLegacyCMSData } from '../../services/api/m import { MigrationResponse } from '../../services/api/service.interface'; import { getCMSDataFromFile } from '../../cmsData/cmsSelector'; import { RootState } from '../../store'; -import { setMigrationData, setNewMigrationData, updateMigrationData } from '../../store/slice/migrationDataSlice'; +import { updateMigrationData, updateNewMigrationData } from '../../store/slice/migrationDataSlice'; type LegacyCMSComponentProps = { @@ -32,10 +32,9 @@ type LegacyCMSComponentProps = { }; const LegacyCMSComponent = ({ legacyCMSData, projectData, handleStepChange }: LegacyCMSComponentProps) => { - //react-redux apis const migrationData = useSelector((state:RootState)=>state?.migration?.migrationData); - const newMigrationData=useSelector((state:RootState)=>state?.migration?.newMigrationData); + const newMigrationData = useSelector((state:RootState)=>state?.migration?.newMigrationData); const selectedOrganisation = useSelector((state:RootState)=>state?.authentication?.selectedOrganisation); const dispatch = useDispatch(); @@ -83,110 +82,109 @@ const LegacyCMSComponent = ({ legacyCMSData, projectData, handleStepChange }: Le }; /********** ALL USEEFFECT HERE *************/ - const fetchCMSData = async () => { - setIsLoading(true); - - //check if offline CMS data field is set to true, if then read data from cms data file. - const data = await getCMSDataFromFile(CS_ENTRIES.LEGACY_CMS); - - //fetch Legacy CMS Component Data from Contentstack CMS - //const data = await getEntries({ contentType: CS_ENTRIES.LEGACY_CMS }) - - //Check for null - if (!data) { - dispatch(updateMigrationData({ legacyCMSData: DEFAULT_LEGACY_CMS_DATA })); - setIsLoading(false); - return; - } - - //Generate CMS Filter List - const cmsFilterList: IFilterType[] = []; - //Step1: traverse on all cms and check for parent , - //Step2: if exist and not yet added in CMS filter list then push to array. - //Step 3: Update it in APP context for later use - validateArray(data?.all_cms) && - data?.all_cms?.forEach((cms: ICMSType) => { - if (!isEmptyString(cms.parent)) { - const filterObject = cmsFilterList?.find( - (obj: IFilterType) => obj.value === cms.parent - ); - - if (!filterObject) { - cmsFilterList.push({ - value: cms.parent, - label: cms.parent, - isChecked: false - }); + useEffect(() => { + const fetchCMSData = async () => { + setIsLoading(true); + + //check if offline CMS data field is set to true, if then read data from cms data file. + const data = await getCMSDataFromFile(CS_ENTRIES.LEGACY_CMS); + + //fetch Legacy CMS Component Data from Contentstack CMS + //const data = await getEntries({ contentType: CS_ENTRIES.LEGACY_CMS }) + + //Check for null + if (!data) { + dispatch(updateMigrationData({ legacyCMSData: DEFAULT_LEGACY_CMS_DATA })); + setIsLoading(false); + return; + } + + //Generate CMS Filter List + const cmsFilterList: IFilterType[] = []; + + //Step1: traverse on all cms and check for parent , + //Step2: if exist and not yet added in CMS filter list then push to array. + //Step 3: Update it in APP context for later use + validateArray(data?.all_cms) && + data?.all_cms?.forEach((cms: ICMSType) => { + if (!isEmptyString(cms.parent)) { + const filterObject = cmsFilterList?.find( + (obj: IFilterType) => obj.value === cms.parent + ); + + if (!filterObject) { + cmsFilterList.push({ + value: cms.parent, + label: cms.parent, + isChecked: false + }); + } } - } - }); - - const legacyCMSDataMapped: ILegacyCMSComponent = { - ...data, - all_steps: getLegacyCMSSteps(isCompleted, isMigrationLocked, data?.all_steps), - cmsFilterList: cmsFilterList - }; - - dispatch(updateMigrationData({ legacyCMSData: legacyCMSDataMapped })); - - //Update New Migration data - - const selectedCmsData: ICMSType = validateArray(data.all_cms) - ? data.all_cms?.find((cms: ICMSType) => cms?.cms_id === legacyCMSData?.cms) || - DEFAULT_CMS_TYPE - : DEFAULT_CMS_TYPE; - - const selectedFileFormatData: ICardType | undefined = validateArray( - selectedCmsData?.allowed_file_formats - ) - ? selectedCmsData.allowed_file_formats?.find( - (cms: ICardType) => cms?.fileformat_id === legacyCMSData?.file_format - ) - : defaultCardType; - - //Make Step 1 Complete - if (!isEmptyString(selectedCmsData?.cms_id)) { - setInternalActiveStepIndex(0); - } - - //Make Step 2 complete - if (!isEmptyString(selectedCmsData?.cms_id) && !isEmptyString(legacyCMSData?.affix)) { - setInternalActiveStepIndex(1); - } - - //Make Step 3 complete - if ( - !isEmptyString(selectedCmsData?.cms_id) && - !isEmptyString(legacyCMSData?.affix) && - !isEmptyString(selectedFileFormatData?.fileformat_id) - ) { - setInternalActiveStepIndex(2); - } + }); + + const legacyCMSDataMapped: ILegacyCMSComponent = { + ...data, + all_steps: getLegacyCMSSteps(isCompleted, isMigrationLocked, data?.all_steps), + cmsFilterList: cmsFilterList + }; + + dispatch(updateMigrationData({ legacyCMSData: legacyCMSDataMapped })); + + //Update New Migration data; + + const selectedCmsData: ICMSType = validateArray(data.all_cms) + ? data.all_cms?.find((cms: ICMSType) => { + return cms?.cms_id === legacyCMSData?.cms}) + : DEFAULT_CMS_TYPE; - dispatch(updateMigrationData({ - ...newMigrationData, - legacy_cms: { - selectedCms: selectedCmsData, - selectedFileFormat: selectedFileFormatData || defaultCardType, - uploadedFile: newMigrationData?.legacy_cms?.uploadedFile, //need to add backend data once endpoint exposed. - affix: legacyCMSData?.affix || newMigrationData?.legacy_cms?.affix || '', - isFileFormatCheckboxChecked: - legacyCMSData?.affix_confirmation || - newMigrationData?.legacy_cms?.isFileFormatCheckboxChecked, //need to add backend data once endpoint exposed. - isRestictedKeywordCheckboxChecked: - legacyCMSData?.file_format_confirmation || - newMigrationData?.legacy_cms?.isRestictedKeywordCheckboxChecked //need to add backend data once endpoint exposed. + + const selectedFileFormatData: ICardType | undefined = validateArray( + selectedCmsData?.allowed_file_formats + ) + ? selectedCmsData.allowed_file_formats?.find( + (cms: ICardType) => cms?.fileformat_id === legacyCMSData?.file_format + ) + : defaultCardType; + + //Make Step 1 Complete + if (!isEmptyString(selectedCmsData?.cms_id)) { + setInternalActiveStepIndex(0); } - })) - - setIsLoading(false); - - //Check for migration Status and lock. - // Status where Migration is to be Locked: - setIsMigrationLocked(projectData?.status === 2 || projectData?.status === 5); - }; - useEffect(() => { + + //Make Step 2 complete + if (!isEmptyString(selectedCmsData?.cms_id) && !isEmptyString(legacyCMSData?.affix)) { + setInternalActiveStepIndex(1); + } + + //Make Step 3 complete + if ( + !isEmptyString(selectedCmsData?.cms_id) && + !isEmptyString(legacyCMSData?.affix) && + !isEmptyString(selectedFileFormatData?.fileformat_id) + ) { + setInternalActiveStepIndex(2); + } + + dispatch(updateNewMigrationData({ + ...newMigrationData, + legacy_cms: { + selectedCms: selectedCmsData, + selectedFileFormat: selectedFileFormatData || defaultCardType, + uploadedFile: newMigrationData?.legacy_cms?.uploadedFile, //need to add backend data once endpoint exposed. + affix: legacyCMSData?.affix || newMigrationData?.legacy_cms?.affix || '', + isFileFormatCheckboxChecked: true, //need to add backend data once endpoint exposed. + isRestictedKeywordCheckboxChecked: true //need to add backend data once endpoint exposed. + } + })) + + + setIsLoading(false); + + //Check for migration Status and lock. + // Status where Migration is to be Locked: + setIsMigrationLocked(projectData?.status === 2 || projectData?.status === 5); + }; fetchCMSData(); @@ -210,8 +208,7 @@ const LegacyCMSComponent = ({ legacyCMSData, projectData, handleStepChange }: Le autoVerticalStepper.current.handleDynamicStepChange(internalActiveStepIndex, true); } } - }, [internalActiveStepIndex]); - + }, [internalActiveStepIndex]); return ( <> {isLoading ? ( diff --git a/ui/src/components/LegacyCms/legacyCms.scss b/ui/src/components/LegacyCms/legacyCms.scss index c3918f41d..7bc60e13d 100644 --- a/ui/src/components/LegacyCms/legacyCms.scss +++ b/ui/src/components/LegacyCms/legacyCms.scss @@ -25,8 +25,11 @@ border-top: $px-5 solid $color-brand-primary-base !important; } .legacy-cms-container { - padding: $px-60 0 $px-60 10% !important; - width: $px-850 !important; + padding: $px-60 0 $px-10 5% !important; + //width: $px-850 !important; + overflow-y: auto; + overflow-x: hidden; + max-height: 70vh; } .service_list_search { @@ -63,14 +66,43 @@ .validation-container { display: flex; background-color: $color-base-white-5; - height: $px-108; - width: 100%; + height: 72px; + width: 592px; align-items: center; - padding: 0 !important; + margin-left: 20px !important; border: 1px solid $color-brand-secondary-lightest; border-radius: var(--TermCount, 5px); + +} +.error-container{ + display: flex; + background-color: $color-base-white-5; + height: 72px; + width: 592px; + align-items: center; + margin-left: 20px !important; + border: 1px solid $color-brand-fail-base; + border-radius: var(--TermCount, 5px); } .errorMessage { color: $color-brand-warning-medium; font-size: 12px; } +.validation-cta{ + margin: 20px 20px; +} +.success{ + color: $color-brand-success-base; +} +.error{ + color: $color-brand-fail-base; +} +.link-discription{ + font-family: $font-family-primary; + font-style: normal; + font-weight: $font-weight-regular; + font-size: $size-font-large; + line-height: 185%; + color: $color-base-gray-20; + margin-bottom: $space-10; +} \ No newline at end of file diff --git a/ui/src/components/LegacyCms/restrictedKeywords.json b/ui/src/components/LegacyCms/restrictedKeywords.json new file mode 100644 index 000000000..ea368cb4c --- /dev/null +++ b/ui/src/components/LegacyCms/restrictedKeywords.json @@ -0,0 +1,47 @@ +{ + "idArray": [ + "uid", + "api_key", + "created_at", + "deleted_at", + "updated_at", + "tags_array", + "klass_id", + "applikation_id", + "id", + "_id", + "ACL", + "SYS_ACL", + "DEFAULT_ACL", + "app_user_object_uid", + "built_io_upload", + "__loc", + "tags", + "_owner", + "_version", + "toJSON", + "save", + "update", + "domain", + "share_account", + "shard_app", + "shard_random", + "hook", + "__indexes", + "__meta", + "created_by", + "updated_by", + "inbuilt_class", + "tenant_id", + "isSystemUser", + "isApplicationUser", + "isNew", + "_shouldLean", + "_shouldFilter", + "options", + "_version", + "__v", + "locale", + "publish_details" + ] +} \ No newline at end of file diff --git a/ui/src/components/Migrations/NewMigration/NewMigrationWrapper.tsx b/ui/src/components/Migrations/NewMigration/NewMigrationWrapper.tsx index 3fe3c48bc..771ae639b 100644 --- a/ui/src/components/Migrations/NewMigration/NewMigrationWrapper.tsx +++ b/ui/src/components/Migrations/NewMigration/NewMigrationWrapper.tsx @@ -4,7 +4,7 @@ import { Outlet, Params, useNavigate, useParams } from 'react-router'; import { useSelector } from 'react-redux'; //venus components -import { Button, PageLayout, Stepper } from '@contentstack/venus-components'; +import { Button, CircularLoader, PageLayout, Stepper } from '@contentstack/venus-components'; // Services import { getMigrationData } from '../../../services/api/migration.service'; @@ -53,6 +53,7 @@ const MigrationExecutionComponentLazyLoaded = lazy( const createStepper = (projectData:any,handleStepChange: (currentStep: number) => void) => { + const steps = [ { data: { useEffect(() => { fetchData(); - }, [params?.stepId, params?.projectId, selectedOrganisation.value]); + }, [params?.stepId, params?.projectId, selectedOrganisation?.value]); const { settings, migration_steps_heading } = migrationData; @@ -234,7 +235,9 @@ const NewMigrationWrapper = () => {
+ {isLoading ? : + }
diff --git a/ui/src/components/Stepper/FlowStepper/FlowBlockItem.tsx b/ui/src/components/Stepper/FlowStepper/FlowBlockItem.tsx index f2e480cad..b7f330e73 100644 --- a/ui/src/components/Stepper/FlowStepper/FlowBlockItem.tsx +++ b/ui/src/components/Stepper/FlowStepper/FlowBlockItem.tsx @@ -20,7 +20,6 @@ interface FlowBlockItemProps { } const FlowBlockItem: FC = (props: FlowBlockItemProps) => { - //console.log("isComeplted : ", props?.isCompleted, props?.step); const [isHovered, setIsHovered] = useState(false); diff --git a/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.scss b/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.scss index 8b51c6f85..62fc20193 100644 --- a/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.scss +++ b/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.scss @@ -11,12 +11,12 @@ } .migration-vertical-stepper .stepper-title { - font-family: $font-family-primary; - font-style: normal; - font-weight: 700; - font-size: 1rem; - line-height: 135%; - color: $color-stepper-title; + //font-family: $font-family-primary; + //font-style: normal; + //font-weight: 600; + //font-size: 14px; + //line-height: 21px; + //color: $color-stepper-title; margin-bottom: $space-10; margin: 10px 20px; diff --git a/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx b/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx index d0f3c59cf..3c84415d1 100644 --- a/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx +++ b/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx @@ -48,6 +48,7 @@ const AutoVerticalStepper = React.forwardRef< }, [stepComponentProps?.step?.step_id, stepComponentProps?.connector?.group_name]); const handleStepChange = (stepIndex: number, closeStep = false) => { + if (closeStep) { const data = stepStatus.map((s: any, i: number) => { if (i === stepIndex) { @@ -56,6 +57,7 @@ const AutoVerticalStepper = React.forwardRef< return s; }); setStepStatus(data); + handleOnAllStepsComplete(true); } else { const data: string[] = stepStatus.map((s: any, i: number) => { @@ -160,7 +162,7 @@ const AutoVerticalStepper = React.forwardRef< id={step?.step_id} className="step_block" key={step?.step_id} - style={{ paddingBottom: '40px' }} + style={{ paddingBottom: '10px' }} >
{StepperStepTitleCreator(step)} diff --git a/ui/src/context/app/app.interface.ts b/ui/src/context/app/app.interface.ts index 8d4ca95d5..743e885ec 100644 --- a/ui/src/context/app/app.interface.ts +++ b/ui/src/context/app/app.interface.ts @@ -37,13 +37,13 @@ export interface User { organizations: Organization[]; } export interface FileDetails { - isLocalPath: boolean; - cmsType: string; - localPath: string; - awsData: { - awsRegion: string; - bucketName: string; - buketKey: string; + isLocalPath?: boolean; + cmsType?: string; + localPath?: string; + awsData?: { + awsRegion?: string; + bucketName?: string; + buketKey?: string; }; } export interface IFile { @@ -53,7 +53,7 @@ export interface IFile { type?: string; url?: string; validation?: string; - file_details: FileDetails; + file_details?: FileDetails; isValidated?: boolean; } From d52cbfc2da9ab29e79074a785195297536391704 Mon Sep 17 00:00:00 2001 From: AishDani Date: Mon, 10 Jun 2024 15:22:32 +0530 Subject: [PATCH 012/759] refactor:legacy cms step --- ui/src/components/Common/Card/card.tsx | 8 +-- ui/src/components/ContentMapper/index.tsx | 2 +- .../LegacyCms/Actions/LoadFileFormat.tsx | 43 +------------ .../LegacyCms/Actions/LoadPrefix.tsx | 18 +----- .../LegacyCms/Actions/LoadSelectCms.tsx | 60 ++++++------------- .../LegacyCms/Actions/LoadUploadFile.tsx | 42 ++++++++----- ui/src/components/LegacyCms/index.tsx | 56 +++++++---------- ui/src/components/LegacyCms/legacyCms.scss | 21 ++++++- .../components/MigrationFlowHeader/index.tsx | 8 ++- .../NewMigration/NewMigrationWrapper.tsx | 47 +-------------- ui/src/pages/Migration/index.tsx | 59 ++++++++++++++++-- uplaode-api/package-lock.json | 1 + uplaode-api/package.json | 3 +- 13 files changed, 155 insertions(+), 213 deletions(-) diff --git a/ui/src/components/Common/Card/card.tsx b/ui/src/components/Common/Card/card.tsx index cfcb986b2..178e68d20 100644 --- a/ui/src/components/Common/Card/card.tsx +++ b/ui/src/components/Common/Card/card.tsx @@ -62,18 +62,14 @@ const Card = ({ data, selectedCard, onCardClick, cardType, idField = 'id' }: Car top: '-5px' }} > - {isHovered || selectedCard[idField] === data[idField] ? ( - + {isHovered || selectedCard[idField] === data?.[idField] ? ( + ) : ( <> )}
- {/* */}
diff --git a/ui/src/components/ContentMapper/index.tsx b/ui/src/components/ContentMapper/index.tsx index f0ca20704..0efe1492a 100644 --- a/ui/src/components/ContentMapper/index.tsx +++ b/ui/src/components/ContentMapper/index.tsx @@ -129,7 +129,7 @@ const ContentMapper = () => { action_cta: actionCta, cta, search_placeholder: searchPlaceholder - } + }= {} } = migrationData; const parseDescription = HTMLReactParser(jsonToHtml(description ?? {})); diff --git a/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx b/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx index 186a335b7..db7cd2253 100644 --- a/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx @@ -1,7 +1,7 @@ // Libraries -import { ChangeEvent, useContext, useEffect, useState } from 'react'; +import { ChangeEvent, useEffect, useState } from 'react'; import { useParams } from 'react-router'; -import { Button, Icon, TextInput } from '@contentstack/venus-components'; +import { Icon, TextInput } from '@contentstack/venus-components'; import { useDispatch, useSelector } from 'react-redux'; // Utilities @@ -15,14 +15,9 @@ import { // Interface import { ICardType, defaultCardType } from '../../../components/Common/Card/card.interface'; -import { INewMigration } from '../../../context/app/app.interface'; -// Context -import { AppContext } from '../../../context/app/app.context'; // Components -import Card from '../../../components/Common/Card/card'; -import DocLink from '../../../components/Common/DocLink/DocLink'; import { RootState } from '../../../store'; import { updateNewMigrationData } from '../../../store/slice/migrationDataSlice'; @@ -49,7 +44,6 @@ const LoadFileFormat = (props: LoadFileFormatProps) => { const { projectId = '' } = useParams(); const { allowed_file_formats = [], doc_url = { href: '', title: '' } } = newMigrationData?.legacy_cms?.selectedCms || {}; - /**** ALL METHODS HERE ****/ @@ -109,37 +103,11 @@ const LoadFileFormat = (props: LoadFileFormatProps) => { return (
- {/* */} -
- - Following is the file format in which data is exported from your current CMS - -
{validateArray(allowed_file_formats) ? ( allowed_file_formats?.map((data: ICardType, index: number) => ( - - - // { - // return; - // }} - // /> - - -
- +
{ )}
- {/*
- -
*/}
); }; diff --git a/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx b/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx index f602d7029..608d9fd81 100644 --- a/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx @@ -17,14 +17,11 @@ import { DEFAULT_URL_TYPE, INewMigration } from '../../../context/app/app.interf import '../legacyCms.scss'; import { Icon, TextInput } from '@contentstack/venus-components'; import { useDebouncer } from '../../../hooks'; -import DocLink from '../../../components/Common/DocLink/DocLink'; import { RootState } from '../../../store'; import { updateNewMigrationData } from '../../../store/slice/migrationDataSlice'; //import restricted keywords import restrictedKeywords from '../restrictedKeywords.json'; -import { set } from 'mongoose'; - interface LoadSelectCmsProps { stepComponentProps: any; @@ -156,15 +153,7 @@ const LoadPreFix = (props: LoadSelectCmsProps) => { return (
- {/* */} - -
+
{handleOnChange(e)}} value={prefix} @@ -185,11 +174,6 @@ const LoadPreFix = (props: LoadSelectCmsProps) => { {restricted_keyword_link?.title}
} - {/*
- -
*/}
); }; diff --git a/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx b/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx index 604308b84..14fd10a27 100644 --- a/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx @@ -5,7 +5,7 @@ import { useDispatch, useSelector } from 'react-redux'; // Service import { updateLegacyCMSData } from '../../../services/api/migration.service'; -import { fileValidation, getConfig } from '../../../services/api/upload.service'; +import { getConfig } from '../../../services/api/upload.service'; // Utilities import { isEmptyString, validateArray } from '../../../utilities/functions'; @@ -17,7 +17,7 @@ import { DEFAULT_CMS_TYPE, ICMSType, INewMigration } from '../../../context/app/ // Components import Card from '../../../components/Common/Card/card'; -import { EmptyState, Line, Search } from '@contentstack/venus-components'; +import { EmptyState } from '@contentstack/venus-components'; // Style import '../legacyCms.scss'; @@ -46,16 +46,13 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { const [cmsFilterStatus, setCmsFilterStatus] = useState({}); const [cmsFilter, setCmsFilter] = useState([]); const [cmsType, setCmsType] = useState( - newMigrationData?.legacy_cms?.selectedCms + newMigrationData?.legacy_cms?.selectedCms || defaultCardType ); const [selectedCard, setSelectedCard] = useState( - newMigrationData?.legacy_cms?.selectedCms + newMigrationData?.legacy_cms?.selectedCms || defaultCardType ); const [errorMessage, setErrorMessage] = useState(''); - const [isError, setIsError] = useState(false); - - - + const [isError, setIsError] = useState(false); const { projectId = '' } = useParams(); @@ -64,9 +61,9 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { //Handle Legacy cms selection const handleCardClick = async(data: ICMSType) => { - const isSingleMatch = cmsData.length === 1; + const isSingleMatch = cmsData.length === 1; - if (isSingleMatch || selectedCard?.title !== data?.title) { + if (isSingleMatch || selectedCard?.cms_id !== data?.cms_id) { setSelectedCard({ ...data }); const newMigrationDataObj: INewMigration = { @@ -83,7 +80,7 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { const res = await updateLegacyCMSData(selectedOrganisation.value, projectId, { legacy_cms: data?.cms_id }); // Call for Step Change - props.handleStepChange(props.currentStep, true); + props?.handleStepChange(props?.currentStep, true); } }; @@ -97,7 +94,8 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { ...newMigrationData?.legacy_cms, selectedCms: cms } - })) + })); + const res = await updateLegacyCMSData(selectedOrganisation.value, projectId, { legacy_cms: cms}); if (!isEmptyString(cms?.title)) { @@ -135,14 +133,13 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { if(isEmptyString(cmsType?.cms_id)){ setCmsType(cms); } - + const cmstype = !isEmptyString(cmsType?.cms_id) ? cmsType?.parent : cms; // Fetch the specific CMS type let filteredCmsData = all_cms; if (cmstype) { filteredCmsData = all_cms.filter((cms: ICMSType) => cms?.parent?.toLowerCase() === cmstype?.toLowerCase()); } - setCmsData(filteredCmsData) @@ -157,18 +154,17 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { : []; setCmsData(_filterCmsData); - - let newSelectedCard: ICMSType | undefined; - - if (_filterCmsData.length === 1) { + + if (filteredCmsData?.length === 1) { newSelectedCard = filteredCmsData[0]; } else { - newSelectedCard = filteredCmsData.find((cms: ICMSType) => cms?.parent.toLowerCase() === cmstype.toLowerCase()); + newSelectedCard = DEFAULT_CMS_TYPE; } + - if (newSelectedCard) { + if (!isEmptyString(newSelectedCard?.title)) { setSelectedCard(newSelectedCard); setErrorMessage(''); setIsError(false); @@ -182,10 +178,6 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { }; dispatch(updateNewMigrationData(newMigrationDataObj)); - - }else{ - setIsError(true); - setErrorMessage('No matching CMS found. Please try a different search term.'); } }; @@ -198,28 +190,10 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { filterCMSData(searchText); }, [cmsFilter]); - // useEffect(() => { - // if (selectedCard?.title !== 'Drupal' && selectedCard?.title !== 'Sitecore') { - // handleDirectSelection(selectedCard); - // } - // }, [cmsType, selectedCard]); return (
- {/*
- setSearchText(text?.toLowerCase())} - /> -
- */}
{ isError ?
@@ -232,7 +206,7 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { ( cmsData && validateArray(cmsData) && (
- {cmsData.map((data: ICMSType) => ( + {cmsData?.map((data: ICMSType) => ( { return ( -
+
{fileDetails?.isLocalPath ? (
- +
) : (
-

AWS Region: {fileDetails?.awsData?.awsRegion}

-

Bucket Name: {fileDetails?.awsData?.bucketName}

-

Bucket Key: {fileDetails?.awsData?.buketKey}

+

AWS Region: {fileDetails?.awsData?.awsRegion}

+

Bucket Name: {fileDetails?.awsData?.bucketName}

+

Bucket Key: {fileDetails?.awsData?.buketKey}

)}
@@ -50,6 +50,7 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { const [showMessage, setShowMessage] = useState(false); const [validationMessgae, setValidationMessage] = useState(''); const [isValidationAttempted, setIsValidationAttempted] = useState(false); + const [isDasabled, setIsDisabled] = useState(false); const { projectId = '' } = useParams(); @@ -65,7 +66,7 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { const newMigrationDataObj: INewMigration = { ...newMigrationData, legacy_cms: { - ...newMigrationData.legacy_cms, + ...newMigrationData?.legacy_cms, uploadedFile: { name: res?.data?.localPath, url: res?.data?.localPath, @@ -107,18 +108,20 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { //function to get config details const getConfigDetails = async () =>{ const res: any = await getConfig(); - if(newMigrationData?.legacy_cms?.selectedCms?.parent.toLowerCase() !== res?.data?.cmsType.toLowerCase()){ + + if(! isEmptyString(newMigrationData?.legacy_cms?.selectedCms?.parent) && newMigrationData?.legacy_cms?.selectedCms?.parent.toLowerCase() !== res?.data?.cmsType.toLowerCase()){ setIsValidated(false); setValidationMessage('Validation Falied'); setIsValidationAttempted(true); setShowMessage(true); setIsLoading(false); + setIsDisabled(true); } const newMigrationDataObj: INewMigration = { ...newMigrationData, legacy_cms: { - ...newMigrationData.legacy_cms, + ...newMigrationData?.legacy_cms, uploadedFile: { name: res?.data?.localPath, url: res?.data?.localPath, @@ -147,25 +150,34 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { getConfigDetails(); }, []); + useEffect(()=>{ + if(newMigrationData?.legacy_cms?.uploadedFile?.isValidated){ + setIsValidated(true); + setValidationMessage('Validated'); + props.handleStepChange(props?.currentStep, true); + } + },[isValidated]) + const validationClassName = isValidated ? 'success' : 'error'; - const containerClassName = `validation-container ${isValidationAttempted && !isValidated ? 'error-container' : ''}`; - + const containerClassName = `validation-container ${isValidationAttempted && !isValidated ? 'error-container pb-2' : ''}`; + return (
-
+
{showMessage && - () + () }
+ version={"v2"} + disabled={isDasabled}>Validate
diff --git a/ui/src/components/LegacyCms/index.tsx b/ui/src/components/LegacyCms/index.tsx index f515b14b3..bf08a288d 100644 --- a/ui/src/components/LegacyCms/index.tsx +++ b/ui/src/components/LegacyCms/index.tsx @@ -1,12 +1,12 @@ -import { useContext, useEffect, useRef, useState } from 'react'; +import { forwardRef, useEffect, useRef, useState } from 'react'; import { useDispatch,useSelector } from 'react-redux'; import AutoVerticalStepper from '../Stepper/VerticalStepper/AutoVerticalStepper'; import { getLegacyCMSSteps } from './StepperSteps'; import { useNavigate, useParams } from 'react-router-dom'; -import { Button, CircularLoader } from '@contentstack/venus-components'; +import { CircularLoader } from '@contentstack/venus-components'; // import { getEntries } from '../../services/contentstackSDK'; import { CS_ENTRIES } from '../../utilities/constants'; -import { AppContext } from '../../context/app/app.context'; + import { DEFAULT_CMS_TYPE, DEFAULT_LEGACY_CMS_DATA, @@ -28,10 +28,12 @@ import { updateMigrationData, updateNewMigrationData } from '../../store/slice/ type LegacyCMSComponentProps = { legacyCMSData: any; projectData: MigrationResponse; + isCompleted: boolean handleStepChange: (currentStep: number) => void; + handleOnAllStepsComplete:(flag : boolean)=>void; }; -const LegacyCMSComponent = ({ legacyCMSData, projectData, handleStepChange }: LegacyCMSComponentProps) => { +const LegacyCMSComponent = forwardRef(({ legacyCMSData, projectData, isCompleted, handleStepChange, handleOnAllStepsComplete }: LegacyCMSComponentProps, ref) => { //react-redux apis const migrationData = useSelector((state:RootState)=>state?.migration?.migrationData); const newMigrationData = useSelector((state:RootState)=>state?.migration?.newMigrationData); @@ -40,7 +42,6 @@ const LegacyCMSComponent = ({ legacyCMSData, projectData, handleStepChange }: Le /** ALL HOOKS HERE */ - const [isCompleted, setIsCompleted] = useState(false); const [isMigrationLocked, setIsMigrationLocked] = useState(false); const [isLoading, setIsLoading] = useState(true); const [internalActiveStepIndex, setInternalActiveStepIndex] = useState(-1); @@ -53,10 +54,12 @@ const LegacyCMSComponent = ({ legacyCMSData, projectData, handleStepChange }: Le const navigate = useNavigate(); const autoVerticalStepper = useRef(null); + //Handle on all steps are completed - const handleOnAllStepsComplete = (flag = false) => { - setIsCompleted(flag); + const handleAllStepsComplete = (flag = false) => { + handleOnAllStepsComplete(flag); }; + // handle on proceed to destination stack const handleOnClick = async (event: MouseEvent,handleStepChange:any ) => { @@ -74,6 +77,7 @@ const LegacyCMSComponent = ({ legacyCMSData, projectData, handleStepChange }: Le } }; + //handle on delete click const handleOnClickDeleteUploadedFile = (e: MouseEvent) => { e.preventDefault(); @@ -108,15 +112,15 @@ const LegacyCMSComponent = ({ legacyCMSData, projectData, handleStepChange }: Le //Step 3: Update it in APP context for later use validateArray(data?.all_cms) && data?.all_cms?.forEach((cms: ICMSType) => { - if (!isEmptyString(cms.parent)) { + if (!isEmptyString(cms?.parent)) { const filterObject = cmsFilterList?.find( - (obj: IFilterType) => obj.value === cms.parent + (obj: IFilterType) => obj?.value === cms?.parent ); if (!filterObject) { - cmsFilterList.push({ - value: cms.parent, - label: cms.parent, + cmsFilterList?.push({ + value: cms?.parent, + label: cms?.parent, isChecked: false }); } @@ -132,13 +136,13 @@ const LegacyCMSComponent = ({ legacyCMSData, projectData, handleStepChange }: Le dispatch(updateMigrationData({ legacyCMSData: legacyCMSDataMapped })); //Update New Migration data; - + const selectedCmsData: ICMSType = validateArray(data.all_cms) - ? data.all_cms?.find((cms: ICMSType) => { + ? data.all_cms?.find((cms: ICMSType) => { return cms?.cms_id === legacyCMSData?.cms}) : DEFAULT_CMS_TYPE; - + const selectedFileFormatData: ICardType | undefined = validateArray( selectedCmsData?.allowed_file_formats ) @@ -209,6 +213,7 @@ const LegacyCMSComponent = ({ legacyCMSData, projectData, handleStepChange }: Le } } }, [internalActiveStepIndex]); + return ( <> {isLoading ? ( @@ -230,32 +235,17 @@ const LegacyCMSComponent = ({ legacyCMSData, projectData, handleStepChange }: Le migrationData?.legacyCMSData?.all_steps )} isEdit={!isMigrationLocked} - handleOnAllStepsComplete={handleOnAllStepsComplete} + handleOnAllStepsComplete={handleAllStepsComplete} stepComponentProps={{ handleDeleteFile: handleOnClickDeleteUploadedFile }} />
- {isCompleted && !isMigrationLocked ? ( -
-
- -
-
- ) : ( - <> - )}
)} ); -}; - +}); +LegacyCMSComponent.displayName = 'LegacyCMSComponent'; export default LegacyCMSComponent; diff --git a/ui/src/components/LegacyCms/legacyCms.scss b/ui/src/components/LegacyCms/legacyCms.scss index 7bc60e13d..8ef07937a 100644 --- a/ui/src/components/LegacyCms/legacyCms.scss +++ b/ui/src/components/LegacyCms/legacyCms.scss @@ -25,11 +25,16 @@ border-top: $px-5 solid $color-brand-primary-base !important; } .legacy-cms-container { - padding: $px-60 0 $px-10 5% !important; + //padding: $px-60 0 $px-10 5% !important; + padding-left: 25px !important; + padding-top: 26px; + padding-right: 30px; //width: $px-850 !important; overflow-y: auto; overflow-x: hidden; max-height: 70vh; + background-color: $color-base-white-10; + } .service_list_search { @@ -74,22 +79,32 @@ border-radius: var(--TermCount, 5px); } +.validation-container > * { + margin-right: 10px; + margin-left: 15px; +} .error-container{ display: flex; background-color: $color-base-white-5; height: 72px; + flex-direction: column; width: 592px; - align-items: center; + align-items: flex-start; margin-left: 20px !important; border: 1px solid $color-brand-fail-base; border-radius: var(--TermCount, 5px); } +.error-container > * { + margin-left: 10px; + margin-top: 5px; +} + .errorMessage { color: $color-brand-warning-medium; font-size: 12px; } .validation-cta{ - margin: 20px 20px; + margin: 10px 20px; } .success{ color: $color-brand-success-base; diff --git a/ui/src/components/MigrationFlowHeader/index.tsx b/ui/src/components/MigrationFlowHeader/index.tsx index 8ca00004c..070407c68 100644 --- a/ui/src/components/MigrationFlowHeader/index.tsx +++ b/ui/src/components/MigrationFlowHeader/index.tsx @@ -16,7 +16,11 @@ import { DEFAULT_NEW_MIGRATION } from '../../context/app/app.interface'; // CSS import './index.scss'; -const MigrationFlowHeader = () => { +type MigrationFlowHeaderProps = { + handleOnClick: (event: MouseEvent, handleStepChange: (currentStep: number) => void) => void; +}; + +const MigrationFlowHeader = ({ handleOnClick }: MigrationFlowHeaderProps) => { const [projectName, setProjectName] = useState(''); const navigate = useNavigate(); @@ -67,7 +71,7 @@ const MigrationFlowHeader = () => {
- -
); diff --git a/ui/src/components/DestinationStack/DestinationStack.scss b/ui/src/components/DestinationStack/DestinationStack.scss index aac127a01..afb15c855 100644 --- a/ui/src/components/DestinationStack/DestinationStack.scss +++ b/ui/src/components/DestinationStack/DestinationStack.scss @@ -18,7 +18,12 @@ color: $color-font-black; margin-top: 3px; } - +.stackTitle { + color: $color-black-2121; + font-size: $size-font-large; + font-weight: $font-weight-semi-bold; + padding-bottom: 20px; +} .pl-40 { padding-left: $px-40; } @@ -28,9 +33,77 @@ max-width: $px-440 !important; } .destination-stack-container { - margin-top: $px-108 !important; - width: $px-850 !important; - margin-left: 10% !important; + padding: 20px; + .migration-vertical-stepper { + padding: 24px 30px; + border: 1px solid $color-brand-secondary-lightest; + border-radius: 4px; + background-color: $color-brand-white-base; + .step_block { + padding: 0 !important; + margin: 0; + background: none; + border: 0 none; + border-radius: 0; + } + .stepper-title { + margin: 20px 0 5px; + padding: 0 8px; + color: $color-black-2121; + font-size: $size-font-large; + font-weight: $font-weight-semi-bold; + line-height: 21px; + } + .action-content-wrapper { + box-shadow: none; + border: 0 none; + border-radius: 0; + padding:0 !important; + } + .migration-vertical-stepper-container { + border-bottom: 0 none; + } + .orgInput { + max-width: 600px; + width: 100%; + } + .Select__menu { + // max-width: 430px; + width: 100%; + margin: 0; + .Select__v2 .Select__menu .Select__menu-list .Select__option { + padding: 12px !important; + } + .Select .Select__control .Select__value-container input, .Select__single-value input[text]{ + font-size: 16px !important; + line-height: 24px !important; + color: $color-placeholder !important; + width: 100% !important; + } + .Select__option { + position: relative; + &:last-child { + border-top: 1px solid $color-brand-secondary-lightest; + position: absolute; + bottom: 0; + color: $color-brand-primary-base; + font-weight: $font-weight-semi-bold; + } + } + } + .TextInput--disabled .TextInput__v2 { + background-color: #F9F8FF !important; + } + #Step2 { + .action-summary-wrapper { + background-color: $color-brand-white-base; + margin-left: 2px; + padding: 0 !important; + } + } + + + } } .TextInput--disabled .TextInput__v2 { diff --git a/ui/src/components/DestinationStack/Summary/StacksSummary.tsx b/ui/src/components/DestinationStack/Summary/StacksSummary.tsx index 5523d1964..e5082ad63 100644 --- a/ui/src/components/DestinationStack/Summary/StacksSummary.tsx +++ b/ui/src/components/DestinationStack/Summary/StacksSummary.tsx @@ -1,12 +1,9 @@ import { useState } from 'react'; -import { useDispatch,useSelector } from 'react-redux'; -import StepIcon from '../../../components/Stepper/FlowStepper/StepIcon'; -import { AppContext } from '../../../context/app/app.context'; +import { useSelector } from 'react-redux'; import { isEmptyString } from '../../../utilities/functions'; import { DEFAULT_DROPDOWN, IDropDown, - INewMigration, IStep } from '../../../context/app/app.interface'; diff --git a/ui/src/components/DestinationStack/index.tsx b/ui/src/components/DestinationStack/index.tsx index 52c3db98f..887ee85a0 100644 --- a/ui/src/components/DestinationStack/index.tsx +++ b/ui/src/components/DestinationStack/index.tsx @@ -3,9 +3,8 @@ import { useDispatch, useSelector } from 'react-redux'; import AutoVerticalStepper from '../Stepper/VerticalStepper/AutoVerticalStepper'; import { getDestinationStackSteps } from './StepperSteps'; import { useNavigate, useParams } from 'react-router-dom'; -import { Button, CircularLoader } from '@contentstack/venus-components'; +import { CircularLoader } from '@contentstack/venus-components'; import { CS_ENTRIES } from '../../utilities/constants'; -import { AppContext } from '../../context/app/app.context'; import { DEFAULT_DESTINATION_STACK_DATA, IDestinationStack, @@ -16,30 +15,34 @@ import './DestinationStack.scss'; import { isEmptyString, validateArray } from '../../utilities/functions'; import { getAllStacksInOrg } from '../../services/api/stacks.service'; import { MigrationResponse, StackResponse } from '../../services/api/service.interface'; -import { - updateCurrentStepData, - updateDestinationStack -} from '../../services/api/migration.service'; +// import { +// updateCurrentStepData, +// updateDestinationStack +// } from '../../services/api/migration.service'; import { getCMSDataFromFile } from '../../cmsData/cmsSelector'; import { RootState } from '../../store'; -import { setMigrationData, setNewMigrationData, updateMigrationData, updateNewMigrationData } from '../../store/slice/migrationDataSlice'; +import { updateMigrationData, updateNewMigrationData } from '../../store/slice/migrationDataSlice'; type DestinationStackComponentProps = { destination_stack: string; org_id: string; + isCompleted: boolean; projectData: MigrationResponse; handleStepChange: (currentStep: number) => void; + handleOnAllStepsComplete:(flag : boolean)=>void; }; const DestinationStackComponent = ({ destination_stack, org_id, projectData, - handleStepChange + isCompleted, + // handleStepChange, + handleOnAllStepsComplete, }: DestinationStackComponentProps) => { /** ALL HOOKS HERE */ const [isLoading, setIsLoading] = useState(true); - const [isCompleted, setIsCompleted] = useState(false); + // const [isCompleted, setIsCompleted] = useState(false); const [isMigrationLocked, setIsMigrationLocked] = useState(false); const [stepperKey, setStepperKey] = useState('v-mig-destination-step'); const [internalActiveStepIndex, setInternalActiveStepIndex] = useState(-1); @@ -53,27 +56,27 @@ const DestinationStackComponent = ({ const organisationsList = useSelector((state:RootState)=>state?.authentication?.organisationsList); const dispatch = useDispatch(); - const { projectId = '' } = useParams(); + // const { projectId = '' } = useParams(); - const navigate = useNavigate(); + // const navigate = useNavigate(); - const handleOnAllStepsComplete = (flag = false) => { - setIsCompleted(flag); + const handleAllStepsComplete = (flag = false) => { + handleOnAllStepsComplete(flag); }; - const handleOnClick = async (event: MouseEvent) => { - event?.preventDefault(); - //Update Data in backend - await updateDestinationStack(selectedOrganisation?.value, projectId, { - stack_api_key: newMigrationData?.destination_stack?.selectedStack?.value - }); - handleStepChange(2); - const res = await updateCurrentStepData(selectedOrganisation?.value, projectId); - if (res) { - const url = `/projects/${projectId}/migration/steps/3`; - navigate(url, { replace: true }); - } - }; + // const handleOnClick = async (event: MouseEvent) => { + // event?.preventDefault(); + // //Update Data in backend + // await updateDestinationStack(selectedOrganisation?.value, projectId, { + // stack_api_key: newMigrationData?.destination_stack?.selectedStack?.value + // }); + // handleStepChange(2); + // const res = await updateCurrentStepData(selectedOrganisation?.value, projectId); + // if (res) { + // const url = `/projects/${projectId}/migration/steps/3`; + // navigate(url, { replace: true }); + // } + // }; const updateDestinationStackData = async () => { //Update New Migration data @@ -124,7 +127,7 @@ const DestinationStackComponent = ({ !isEmptyString(selectedStackData?.value) ) { setInternalActiveStepIndex(1); - setIsCompleted(true); + // setIsCompleted(true); } //Update newMigration Data for destination stack @@ -196,7 +199,7 @@ const DestinationStackComponent = ({ } } }, [internalActiveStepIndex]); - + // console.log(".........DestinationStackComponent", migrationData?.destinationStackData, isMigrationLocked) return ( <> {isLoading ? ( @@ -207,32 +210,19 @@ const DestinationStackComponent = ({
) : (
-
-
- -
- {isCompleted && !isMigrationLocked ? ( -
-
- -
-
- ) : ( - <> +
{migrationData?.destinationStackData?.title}
+ + description={migrationData?.destinationStackData?.description} + ref={autoVerticalStepperComponent} + isEdit={!isMigrationLocked} + handleOnAllStepsComplete={handleAllStepsComplete} + />
)} diff --git a/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.scss b/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.scss index 935727a45..0b66abdff 100644 --- a/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.scss +++ b/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.scss @@ -120,4 +120,5 @@ } .stepContent { padding-top: 190px; + background: $color-base-white-10; } \ No newline at end of file diff --git a/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx b/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx index 3c84415d1..791880e69 100644 --- a/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx +++ b/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx @@ -12,6 +12,7 @@ export enum StepStatus { type AutoVerticalStepperProps = { steps: any[]; className?: string; + description?: string; stepComponentProps?: any; isEdit: boolean; handleOnAllStepsComplete: (flag: boolean) => void; @@ -32,6 +33,7 @@ const AutoVerticalStepper = React.forwardRef< const { steps, className = '', + description='', stepComponentProps, isEdit = false, handleOnAllStepsComplete = () => { @@ -78,10 +80,10 @@ const AutoVerticalStepper = React.forwardRef< <>
- + {data.titleNote ? data.titleNote : ''}
- {data.lock ? ( + {data?.lock ? (
lock-icon @@ -89,7 +91,7 @@ const AutoVerticalStepper = React.forwardRef< ) : null}
-
{data.description}
+ {data.description &&
{data.description}
} ); }; @@ -149,6 +151,7 @@ const AutoVerticalStepper = React.forwardRef< return (
+ {props?.description &&
{props?.description}
}
    {steps?.map((step: any, index: number) => { diff --git a/ui/src/context/app/app.interface.ts b/ui/src/context/app/app.interface.ts index 743e885ec..1b26fe159 100644 --- a/ui/src/context/app/app.interface.ts +++ b/ui/src/context/app/app.interface.ts @@ -96,6 +96,7 @@ export interface ILegacyCMSComponent { export interface IDestinationStackComponent { title: string; + description: string; cta: string; new_stack: { save_stack_cta: string; @@ -316,6 +317,7 @@ export const DEFAULT_LEGACY_CMS_DATA: ILegacyCMSComponent = { export const DEFAULT_DESTINATION_STACK_DATA: IDestinationStackComponent = { title: '', cta: '', + description: '', new_stack: { save_stack_cta: '', new_stack_input: '', diff --git a/ui/src/pages/Migration/index.tsx b/ui/src/pages/Migration/index.tsx index 7b7b2469f..67fad7d0d 100644 --- a/ui/src/pages/Migration/index.tsx +++ b/ui/src/pages/Migration/index.tsx @@ -8,7 +8,7 @@ import { RootState } from '../../store'; import { updateMigrationData } from '../../store/slice/migrationDataSlice'; // Services -import { getMigrationData, updateCurrentStepData, updateLegacyCMSData } from '../../services/api/migration.service'; +import { getMigrationData, updateCurrentStepData, updateDestinationStack, updateLegacyCMSData } from '../../services/api/migration.service'; import { getCMSDataFromFile } from '../../cmsData/cmsSelector'; // Utilities @@ -111,11 +111,12 @@ const Migration = () => { }, { data: , + destination_stack={projectData?.destination_stack_id} + org_id={projectData?.org_id} + projectData={projectData} + handleStepChange={handleStepChange} + isCompleted={isCompleted} + handleOnAllStepsComplete={handleOnAllStepsComplete} />, id:'2', title:'Destination Stack' }, @@ -179,9 +180,26 @@ const Migration = () => { } }; + // handle on proceed to content mapping + const handleOnClickDestinationStack = async (event: MouseEvent) => { + if(isCompleted){ + event?.preventDefault(); + //Update Data in backend + await updateDestinationStack(selectedOrganisation?.value, projectId, { + stack_api_key: newMigrationData?.destination_stack?.selectedStack?.value + }); + handleStepChange(2); + const res = await updateCurrentStepData(selectedOrganisation?.value, projectId); + if (res) { + const url = `/projects/${projectId}/migration/steps/3`; + navigate(url, { replace: true }); + } + } + }; const handleOnClickFunctions = [ - handleOnClickLegacyCms, + handleOnClickLegacyCms, + handleOnClickDestinationStack ]; return ( From e46f19c0b6f56f78973acf0eb97d293a78c25749 Mon Sep 17 00:00:00 2001 From: AishDani Date: Tue, 11 Jun 2024 15:34:37 +0530 Subject: [PATCH 017/759] refactor:added notification and error message for mismatch file format --- .../LegacyCms/Actions/LoadFileFormat.tsx | 6 +- .../LegacyCms/Actions/LoadPrefix.tsx | 8 +- .../LegacyCms/Actions/LoadSelectCms.tsx | 13 ++- .../LegacyCms/Actions/LoadUploadFile.tsx | 87 ++++++++++++------- ui/src/components/LegacyCms/index.tsx | 7 +- ui/src/components/LegacyCms/legacyCms.scss | 6 +- ui/src/pages/Migration/index.tsx | 10 ++- 7 files changed, 80 insertions(+), 57 deletions(-) diff --git a/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx b/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx index db7cd2253..604d85ae8 100644 --- a/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx @@ -63,11 +63,11 @@ const LoadFileFormat = (props: LoadFileFormatProps) => { }); await fileformatConfirmation(selectedOrganisation?.value, projectId, { - fileformat_confirmation: isCheckedBoxChecked + fileformat_confirmation: true }); //call for Step Change - props.handleStepChange(props?.currentStep, true); + props.handleStepChange(props?.currentStep); } }; @@ -103,7 +103,6 @@ const LoadFileFormat = (props: LoadFileFormatProps) => { return (
    -
    {validateArray(allowed_file_formats) ? ( allowed_file_formats?.map((data: ICardType, index: number) => ( @@ -125,7 +124,6 @@ const LoadFileFormat = (props: LoadFileFormatProps) => { <>No File formats available )}
    -
    ); }; diff --git a/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx b/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx index 608d9fd81..737cbc18e 100644 --- a/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx @@ -77,7 +77,7 @@ const LoadPreFix = (props: LoadSelectCmsProps) => { }); //call for Step Change - props.handleStepChange(props.currentStep); + props.handleStepChange(props?.currentStep); return; } @@ -111,11 +111,11 @@ const LoadPreFix = (props: LoadSelectCmsProps) => { //API call for saving Affix await updateAffixData(selectedOrganisation?.value, projectId, { affix: value }); await affixConfirmation(selectedOrganisation?.value, projectId, { - affix_confirmation: isCheckedBoxChecked + affix_confirmation: true }); //call for Step Change - props.handleStepChange(props.currentStep, true); + props.handleStepChange(props?.currentStep); return; } @@ -152,7 +152,7 @@ const LoadPreFix = (props: LoadSelectCmsProps) => { migrationData.legacyCMSData; return ( -
    +
    {handleOnChange(e)}} diff --git a/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx b/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx index 14fd10a27..e35afc5f0 100644 --- a/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx @@ -49,7 +49,7 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { newMigrationData?.legacy_cms?.selectedCms || defaultCardType ); const [selectedCard, setSelectedCard] = useState( - newMigrationData?.legacy_cms?.selectedCms || defaultCardType + newMigrationData?.legacy_cms?.selectedCms ); const [errorMessage, setErrorMessage] = useState(''); const [isError, setIsError] = useState(false); @@ -77,7 +77,7 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { dispatch(updateNewMigrationData(newMigrationDataObj)); //API call for saving selected CMS - const res = await updateLegacyCMSData(selectedOrganisation.value, projectId, { legacy_cms: data?.cms_id }); + await updateLegacyCMSData(selectedOrganisation.value, projectId, { legacy_cms: data?.cms_id }); // Call for Step Change props?.handleStepChange(props?.currentStep, true); @@ -99,7 +99,7 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { const res = await updateLegacyCMSData(selectedOrganisation.value, projectId, { legacy_cms: cms}); if (!isEmptyString(cms?.title)) { - props?.handleStepChange(props?.currentStep); + props?.handleStepChange(props?.currentStep, true); } }; @@ -176,8 +176,9 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { selectedCms: newSelectedCard } }; - + await updateLegacyCMSData(selectedOrganisation.value, projectId, { legacy_cms: newSelectedCard?.cms_id }); dispatch(updateNewMigrationData(newMigrationDataObj)); + props?.handleStepChange(props?.currentStep); } }; @@ -190,11 +191,9 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { filterCMSData(searchText); }, [cmsFilter]); - return (
    -
    { isError ?
    { ) ) } - -
    ); diff --git a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx index 75859a20e..032ccdde3 100644 --- a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx @@ -22,7 +22,7 @@ const FileComponent = ({fileDetails}:Props ) => { return (
    - {fileDetails?.isLocalPath ? ( + {fileDetails?.isLocalPath && (!isEmptyString(fileDetails?.localPath) || !isEmptyString(fileDetails?.awsData?.awsRegion)) ? (
    @@ -51,8 +51,11 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { const [validationMessgae, setValidationMessage] = useState(''); const [isValidationAttempted, setIsValidationAttempted] = useState(false); const [isDasabled, setIsDisabled] = useState(false); - - const { projectId = '' } = useParams(); + const [isConfigLoading, setIsConfigLoading] = useState(true); + const [cmsType, setCmsType]= useState(''); + const [fileDetails, setFileDetails] = useState(); + const [fileExtension, setFileExtension] = useState(''); + //Handle further action on file is uploaded to server const handleOnFileUploadCompletion = async () => { @@ -105,11 +108,52 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { }; + const getFileExtension = (filePath: string): string => { + const ext = filePath.split('.').pop(); + return ext ? `${ext}` : ''; + }; + //function to get config details const getConfigDetails = async () =>{ + setIsConfigLoading(true); const res: any = await getConfig(); - - if(! isEmptyString(newMigrationData?.legacy_cms?.selectedCms?.parent?.toLowerCase()) && newMigrationData?.legacy_cms?.selectedCms?.parent.toLowerCase() !== res?.data?.cmsType.toLowerCase()){ + + + if(res?.status === 200){ + const extension = getFileExtension(res?.data?.localPath); + setCmsType(res?.data?.cmsType); + setFileDetails(res?.data); + setFileExtension(extension); + + const newMigrationDataObj: INewMigration = { + ...newMigrationData, + legacy_cms: { + ...newMigrationData?.legacy_cms, + uploadedFile: { + name: res?.data?.localPath, + url: res?.data?.localPath, + file_details: { + isLocalPath: res?.data?.isLocalPath, + cmsType: res?.data?.cmsType, + localPath: res?.data?.localPath, + awsData: { + awsRegion: res?.data?.awsData?.awsRegion, + bucketName: res?.data?.awsData?.bucketName, + buketKey: res?.data?.awsData?.buketKey + } + } + } + } + }; + + dispatch(updateNewMigrationData(newMigrationDataObj)); + + } + else if(! isEmptyString(newMigrationData?.legacy_cms?.selectedCms?.parent?.toLowerCase()) && + newMigrationData?.legacy_cms?.selectedCms?.parent.toLowerCase() !== res?.data?.cmsType.toLowerCase() + || fileExtension !== newMigrationData?.legacy_cms?.selectedFileFormat?.fileformat_id + ) + { setIsValidated(false); setValidationMessage('Validation Falied'); setIsValidationAttempted(true); @@ -117,28 +161,8 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { setIsLoading(false); setIsDisabled(true); } - - const newMigrationDataObj: INewMigration = { - ...newMigrationData, - legacy_cms: { - ...newMigrationData?.legacy_cms, - uploadedFile: { - name: res?.data?.localPath, - url: res?.data?.localPath, - file_details: { - isLocalPath: res?.data?.isLocalPath, - cmsType: res?.data?.cmsType, - localPath: res?.data?.localPath, - awsData: { - awsRegion: res?.data?.awsData?.awsRegion, - bucketName: res?.data?.awsData?.bucketName, - buketKey: res?.data?.awsData?.buketKey - } - } - } - } - }; - dispatch(updateNewMigrationData(newMigrationDataObj)); + setIsConfigLoading(false); + } @@ -156,7 +180,8 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { setValidationMessage('Validated'); props.handleStepChange(props?.currentStep, true); } - },[isValidated]) + + },[isValidated,newMigrationData]) const validationClassName = isValidated ? 'success' : 'error'; @@ -167,10 +192,10 @@ const LoadUploadFile = (props: LoadUploadFileProps) => {
    - {! isDasabled ? ( - + {!isConfigLoading && !isEmptyString(cmsType) ? ( + ) : - } + } {showMessage && () } diff --git a/ui/src/components/LegacyCms/index.tsx b/ui/src/components/LegacyCms/index.tsx index bf08a288d..230fec416 100644 --- a/ui/src/components/LegacyCms/index.tsx +++ b/ui/src/components/LegacyCms/index.tsx @@ -135,14 +135,12 @@ const LegacyCMSComponent = forwardRef(({ legacyCMSData, projectData, isCompleted dispatch(updateMigrationData({ legacyCMSData: legacyCMSDataMapped })); - //Update New Migration data; - + //Update New Migration data; const selectedCmsData: ICMSType = validateArray(data.all_cms) - ? data.all_cms?.find((cms: ICMSType) => { + ? data.all_cms?.find((cms: ICMSType) => { return cms?.cms_id === legacyCMSData?.cms}) : DEFAULT_CMS_TYPE; - const selectedFileFormatData: ICardType | undefined = validateArray( selectedCmsData?.allowed_file_formats ) @@ -213,7 +211,6 @@ const LegacyCMSComponent = forwardRef(({ legacyCMSData, projectData, isCompleted } } }, [internalActiveStepIndex]); - return ( <> {isLoading ? ( diff --git a/ui/src/components/LegacyCms/legacyCms.scss b/ui/src/components/LegacyCms/legacyCms.scss index 8ef07937a..b6bfcb8ba 100644 --- a/ui/src/components/LegacyCms/legacyCms.scss +++ b/ui/src/components/LegacyCms/legacyCms.scss @@ -4,7 +4,7 @@ display: flex; flex-wrap: wrap; gap: 12px; - margin: $space-15; + margin: 20px 20px !important; } .pl-40 { @@ -25,11 +25,11 @@ border-top: $px-5 solid $color-brand-primary-base !important; } .legacy-cms-container { - //padding: $px-60 0 $px-10 5% !important; + padding-left: 25px !important; padding-top: 26px; padding-right: 30px; - //width: $px-850 !important; + overflow-y: auto; overflow-x: hidden; max-height: 70vh; diff --git a/ui/src/pages/Migration/index.tsx b/ui/src/pages/Migration/index.tsx index 7b7b2469f..f8a6f8afe 100644 --- a/ui/src/pages/Migration/index.tsx +++ b/ui/src/pages/Migration/index.tsx @@ -18,7 +18,6 @@ import { isEmptyString, validateArray } from '../../utilities/functions'; // Interface import { MigrationResponse, - defaultMigrationResponse } from '../../services/api/service.interface'; import { DEFAULT_IFLOWSTEP, @@ -33,9 +32,10 @@ import DestinationStackComponent from '../../components/DestinationStack'; import ContentMapper from '../../components/ContentMapper'; import TestMigration from '../../components/TestMigration'; import MigrationExecution from '../../components/MigrationExecution'; +import { Notification } from '@contentstack/venus-components'; const Migration = () => { - const [projectData, setProjectData] = useState(defaultMigrationResponse); + const [projectData, setProjectData] = useState(); const [isLoading, setIsLoading] = useState(false); const [curreentStepIndex, setCurrentStepIndex] = useState(0); const [isCompleted, setIsCompleted] = useState(false); @@ -177,6 +177,12 @@ const Migration = () => { } } + else{ + Notification({ + notificationContent: { text: 'Please complete all steps' }, + type: 'warning' + }); + } }; From 30290fb9305392b7b929083ab183b71259accdc4 Mon Sep 17 00:00:00 2001 From: Sayali Joshi Date: Tue, 11 Jun 2024 17:24:41 +0530 Subject: [PATCH 018/759] Content mapper new UI --- ui/package.json | 4 +- ui/src/cmsData/content_mapping.json | 2 +- ui/src/components/ContentMapper/index.scss | 54 +++++--- ui/src/components/ContentMapper/index.tsx | 136 +++++++++------------ ui/src/scss/App.scss | 8 +- ui/tsconfig.json | 3 +- 6 files changed, 104 insertions(+), 103 deletions(-) diff --git a/ui/package.json b/ui/package.json index ca22c2f2f..e578593c2 100644 --- a/ui/package.json +++ b/ui/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@contentstack/json-rte-serializer": "^2.0.5", - "@contentstack/venus-components": "1.5.1", + "@contentstack/venus-components": "^2.2.4", "@reduxjs/toolkit": "^2.2.5", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", @@ -65,4 +65,4 @@ "last 1 safari version" ] } -} \ No newline at end of file +} diff --git a/ui/src/cmsData/content_mapping.json b/ui/src/cmsData/content_mapping.json index a0eba06ec..43a812fa3 100644 --- a/ui/src/cmsData/content_mapping.json +++ b/ui/src/cmsData/content_mapping.json @@ -142,7 +142,7 @@ ], "_version": 3 }, - "search_placeholder": "Search", + "search_placeholder": "Search for content types...", "tags": [], "title": "Content Mapping", "updated_at": "2024-01-25T12:13:32.967Z", diff --git a/ui/src/components/ContentMapper/index.scss b/ui/src/components/ContentMapper/index.scss index 33ca9ad58..037652b74 100644 --- a/ui/src/components/ContentMapper/index.scss +++ b/ui/src/components/ContentMapper/index.scss @@ -5,13 +5,19 @@ display: flex; flex-direction: column; max-height: calc(100vh - 173px); - max-width: 27%; + max-width: 25%; overflow: hidden; width: 100%; } .content-types-list-header { + background-color: $color-base-white-10; border-bottom: 1px solid $color-brand-secondary-lightest; - padding: 18px $space-12; + padding: $px-20 $space-12; + h2 { + color: $color-font-base; + font-size: $size-font-20; + font-weight: $font-weight-semi-bold; + } .Search { margin: $space-20 0 $space-12; width: 100%; @@ -20,21 +26,36 @@ } } } -.ct-list { - list-style-type: none; - padding: 15px 0; +.ct-search-wrapper { + border-bottom: 1px solid $color-brand-secondary-lightest; + padding: $px-8 $px-12; + .Search__v2 { + height: 2.5rem; + width: 100%!important; + .Search-input-show { + width: 100%!important; + } + } +} +.ct-list-wrapper { overflow-y: auto; overflow-x: hidden; +} +.ct-list { + border-right: 1px solid $color-brand-secondary-lightest; + list-style-type: none; + margin: 0 0 0 $px-12; + padding: 15px 12px 15px 0; li { align-items: center; border: 1px solid transparent; cursor: pointer; display: flex; - font-size: $size-font-large; + font-size: $size-font-xl; justify-content: space-between; line-height: normal; min-height: 42px; - padding: $space-10 35px; + padding: $px-8 $px-12; &.active-ct { background-color: $color-brand-white-base; border: 1px solid $color-brand-primary-base; @@ -46,10 +67,10 @@ padding-left: 12px; } .content-types-fields-wrapper { - border-left: 1px solid $color-brand-secondary-lightest; + // border-left: 1px solid $color-brand-secondary-lightest; display: flex; flex-direction: column; - max-width: 73%; + max-width: 75%; width: 100%; padding: 0px; } @@ -72,9 +93,10 @@ padding: 0 1.25rem; } .cms-field { - font-weight: $font-weight-semi-bold; + text-transform: capitalize; } .InstructionText { + font-size: $size-font-small; margin: 0; } } @@ -96,7 +118,6 @@ flex-direction: column; margin-top: 0; margin-left: 0px; - // margin-bottom: 20px; width: 100%; } .saveButton { @@ -105,10 +126,13 @@ .btnWrapper { margin-left: 20px; } -div .select .Select { - width: $px-50; - max-width: $px-50 !important; -} +div .select { + width: calc(100% - 30px); + .Select { + width: 100%; + max-width: 100% !important; + } +} div .table-row { display: flex; justify-content: space-between; diff --git a/ui/src/components/ContentMapper/index.tsx b/ui/src/components/ContentMapper/index.tsx index f0ca20704..90d426bc7 100644 --- a/ui/src/components/ContentMapper/index.tsx +++ b/ui/src/components/ContentMapper/index.tsx @@ -3,7 +3,6 @@ import { useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { useNavigate, useParams } from 'react-router-dom'; import { - Heading, InfiniteScrollTable, Select, ButtonGroup, @@ -34,13 +33,14 @@ import { } from '../../services/api/migration.service'; import { getStackStatus } from '../../services/api/stacks.service'; +// Redux +import { RootState } from '../../store'; +import { updateMigrationData, updateNewMigrationData } from '../../store/slice/migrationDataSlice'; + // Utilities import { CS_ENTRIES } from '../../utilities/constants'; import { validateArray } from '../../utilities/functions'; -// Context -import { AppContext } from '../../context/app/app.context'; - // Interface import { DEFAULT_CONTENT_MAPPING_DATA, INewMigration } from '../../context/app/app.interface'; import { @@ -66,9 +66,6 @@ import AdvanceSettings from '../AdvancePropertise'; // Styles import './index.scss'; -import { RootState } from '../../store'; -import { setNewMigrationData, updateMigrationData, updateNewMigrationData } from '../../store/slice/migrationDataSlice'; -import { setMigrationData } from '../../store/slice/migrationDataSlice'; const Fields: Mapping = { 'Single Line Textbox': [ @@ -107,7 +104,6 @@ const Fields: Mapping = { CheckBox: 'Select', global_field: 'Global' }; - interface ModalProps { e: React.MouseEvent; newIndex: number; @@ -126,14 +122,12 @@ const ContentMapper = () => { contentMappingData: { content_types_heading: contentTypesHeading, description, - action_cta: actionCta, - cta, + // action_cta: actionCta, + // cta, search_placeholder: searchPlaceholder } } = migrationData; - const parseDescription = HTMLReactParser(jsonToHtml(description ?? {})); - const [tableData, setTableData] = useState([]); const [loading, setLoading] = useState(false); const [itemStatusMap, updateItemStatusMap] = useState({}); @@ -250,7 +244,7 @@ const ContentMapper = () => { // Method to fetch content types const fetchContentTypes = async (searchText: string) => { - const { data } = await getContentTypes(projectId || '', 0, 10, searchContentType || ''); //org id will always present + const { data } = await getContentTypes(projectId || '', 0, 5000, searchContentType || ''); //org id will always present setContentTypes(data?.contentTypes); setSelectedContentType(data?.contentTypes?.[0]); @@ -279,7 +273,7 @@ const ContentMapper = () => { const handleSearch = async (searchCT: string) => { setSearchContentType(searchCT); - const { data } = await getContentTypes(projectId, 0, 5, searchCT || ''); //org id will always present + const { data } = await getContentTypes(projectId, 0, 1000, searchCT || ''); //org id will always present setContentTypes(data?.contentTypes); setSelectedContentType(data?.contentTypes?.[0]); @@ -369,40 +363,7 @@ const ContentMapper = () => { setSelectedContentType(contentTypes?.[i]); }; - //function to handle previous content type navigation - const handlePrevClick = (e: React.MouseEvent) => { - const newIndex = currentIndex > 0 ? currentIndex - 1 : 0; - if (isDropDownChanged) { - handleSaveContentTypeModal(e, newIndex); - } else { - setCurrentIndex(newIndex); - openContentType(e, newIndex); - document.querySelectorAll('.ct-list li').forEach((ctLi, ind) => { - if (newIndex === ind) { - ctLi?.classList?.add('active-ct'); - } - }); - } - }; - - // function to handle next content type navigation - const handleNextClick = (e: React.MouseEvent) => { - if (currentIndex < contentTypes?.length - 1) { - const newIndex = currentIndex + 1; - - if (isDropDownChanged) { - handleSaveContentTypeModal(e, newIndex); - } else { - setCurrentIndex(newIndex); - openContentType(e, newIndex); - document.querySelectorAll('.ct-list li').forEach((ctLi, ind) => { - if (newIndex === ind) { - ctLi?.classList?.add('active-ct'); - } - }); - } - } - }; + // Function to Save the Content Type const SaveContentType = (props: ModalProps) => { return ( <> @@ -484,9 +445,6 @@ const ContentMapper = () => { { - // return; - // }} {...props} /> ), @@ -531,7 +489,6 @@ const ContentMapper = () => { setRowIds(selectedObj); setSelectedEntries(selectedData); - }; // Function to find unchecked field @@ -605,8 +562,6 @@ const ContentMapper = () => { const SelectAccessor = (data: FieldMapType) => { const OptionsForRow = Fields[data?.backupFieldType as keyof Mapping]; - - const option = Array.isArray(OptionsForRow) ? OptionsForRow.map((option) => ({ label: option, value: option })) : [{ label: OptionsForRow, value: OptionsForRow }]; @@ -708,6 +663,7 @@ const ContentMapper = () => { 'multiline': 'multiline', 'HTML Rich text Editor': 'allow_rich_text', 'JSON Rich Text Editor': 'json', + group: 'Group', URL: 'url', file: 'file', number: 'number', @@ -728,11 +684,14 @@ const ContentMapper = () => { ); setContentTypeSchema(ContentType?.schema) } - + console.log('contentTypeSchema', contentTypeSchema); + if (contentTypeSchema && validateArray(contentTypeSchema)) { const fieldTypeToMatch = fieldsOfContentstack[data?.otherCmsType as keyof Mapping]; contentTypeSchema.forEach((value) => { + console.log("value", value); + switch (fieldTypeToMatch) { case 'text': if ( @@ -785,11 +744,9 @@ const ContentMapper = () => { OptionsForRow.push({ label: value?.display_name, value: value, isDisabled: false }); } break; - // case 'Group': - // if (value?.data_type === 'group') { - // OptionsForRow.push({ label: value?.display_name, value: value, isDisabled: false }); - // } - // break; + case 'Group': + OptionsForRow.push({ label: value?.display_name, value: value, isDisabled: false }); + break; default: OptionsForRow.push({ label: 'No matches found', @@ -1019,15 +976,28 @@ const ContentMapper = () => { isDisabled: contentTypeMapped && Object.values(contentTypeMapped).includes(option?.label) })); + const calcHeight = () => { + // Get the viewport height in pixels + const viewportHeight = window.innerHeight; + + // Subtract 246 pixels from the viewport height + const result = viewportHeight - 226; + + return result; + } + + const tableHeight = calcHeight(); + return (
    {/* Content Types List */}
    - -

    {parseDescription}

    + {contentTypesHeading &&

    {contentTypesHeading}

    } +
    +
    {
    {contentTypes && validateArray(contentTypes) && ( +
      {contentTypes?.map((content: ContentType, index: number) => (
    • {
    • ))}
    +
    )}
    {/* Content Type Fields */}
    - {!IsEmptyStack && ( -
    - +
    + )}
    ), showExportCta: true @@ -1129,7 +1103,7 @@ const ContentMapper = () => { />
    - {actionCta && validateArray(actionCta) && ( + {/* {actionCta && validateArray(actionCta) && (
    {
    - )} + )} */}
    - {cta?.title && ( + {/* {cta?.title && (
    - )} + )} */}
    ); }; diff --git a/ui/src/scss/App.scss b/ui/src/scss/App.scss index ddc489626..b76ecbd76 100644 --- a/ui/src/scss/App.scss +++ b/ui/src/scss/App.scss @@ -284,7 +284,9 @@ html, body { color: $color-font-base; font-family: $font-family-primary; + height: 100%; line-height: 1.3rem; + overflow-x: hidden; span, p { line-height: $line-height-default !important; @@ -386,11 +388,11 @@ h2 { } } ::-webkit-input-placeholder { - color: $color-black-2121 !important; + color: $color-stepper-title !important; } ::-ms-input-placeholder { - color: $color-black-2121 !important; + color: $color-stepper-title !important; } ::placeholder { - color: $color-black-2121 !important; + color: $color-stepper-title !important; } diff --git a/ui/tsconfig.json b/ui/tsconfig.json index 17773cb6c..bc3afcbe1 100644 --- a/ui/tsconfig.json +++ b/ui/tsconfig.json @@ -17,7 +17,8 @@ "jsx": "react-jsx", "baseUrl": "./", "paths": { - "*": ["src/types/*"] + "*": ["src/types/*"], + "react": [ "./node_modules/@types/react" ] }, "typeRoots": ["./node_modules/@types", "./src/types"] }, From d0d5cf9af22fa497086477f82934e8624ac65399 Mon Sep 17 00:00:00 2001 From: Shristi Sinha Date: Tue, 11 Jun 2024 17:30:39 +0530 Subject: [PATCH 019/759] add file path, is_fileValid and aws details in file-format api --- api/src/models/project-lowdb.ts | 7 +++++++ api/src/services/projects.service.ts | 19 ++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/api/src/models/project-lowdb.ts b/api/src/models/project-lowdb.ts index c7fb3c394..683c60c56 100644 --- a/api/src/models/project-lowdb.ts +++ b/api/src/models/project-lowdb.ts @@ -14,6 +14,13 @@ interface LegacyCMS { type: string; path: string; }; + awsDetails: { + awsRegion: string; + bucketName: string; + buketKey: string; +} + file_path: string; + is_fileValid: boolean; } interface ExecutionLog { diff --git a/api/src/services/projects.service.ts b/api/src/services/projects.service.ts index 83d2121bc..337f05fa9 100644 --- a/api/src/services/projects.service.ts +++ b/api/src/services/projects.service.ts @@ -83,7 +83,13 @@ const createProject = async (req: Request) => { destination_stack_id: "", test_stacks: [], current_test_stack_id: "", - legacy_cms: {}, + legacy_cms: { + "is_fileValid":false, + awsDetails: { + awsRegion: "", + bucketName: "", + buketKey: "" + } }, content_mapper: [], execution_log: [], created_by: user_id, @@ -346,10 +352,8 @@ const affixConfirmation = async (req: Request) => { const updateFileFormat = async (req: Request) => { const { orgId, projectId } = req.params; - const { token_payload, file_format } = req.body; + const { token_payload, file_format,file_path,is_fileValid,awsDetails } = req.body; const srcFunc = "updateFileFormat"; - - await ProjectModelLowdb.read(); const projectIndex = (await getProjectUtil( projectId, { @@ -390,11 +394,16 @@ const updateFileFormat = async (req: Request) => { } try { - ProjectModelLowdb.update((data: any) => { + ProjectModelLowdb.update((data: any) => { data.projects[projectIndex].legacy_cms.file_format = file_format; + data.projects[projectIndex].legacy_cms.file_path = file_path; + data.projects[projectIndex].legacy_cms.is_fileValid = is_fileValid; data.projects[projectIndex].current_step = STEPPER_STEPS.LEGACY_CMS; data.projects[projectIndex].status = NEW_PROJECT_STATUS[0]; data.projects[projectIndex].updated_at = new Date().toISOString(); + data.projects[projectIndex].legacy_cms.awsDetails.awsRegion = awsDetails.awsRegion; + data.projects[projectIndex].legacy_cms.awsDetails.bucketName = awsDetails.bucketName; + data.projects[projectIndex].legacy_cms.awsDetails.buketKey = awsDetails.buketKey; }); logger.info( From be6e5198f8c439996446e9a216fa68166ce5720f Mon Sep 17 00:00:00 2001 From: Sayali Joshi Date: Fri, 14 Jun 2024 16:34:14 +0530 Subject: [PATCH 020/759] Content mapper UI design changes --- ui/src/cmsData/content_mapping.json | 1 + ui/src/components/ContentMapper/index.scss | 11 ++- ui/src/components/ContentMapper/index.tsx | 83 +++++++++++++------ ui/src/components/ProjectsHeader/index.tsx | 15 ---- .../HorizontalStepper/HorizontalStepper.scss | 2 + ui/src/context/app/app.interface.ts | 6 +- ui/src/pages/Migration/index.tsx | 55 ++++++++++-- 7 files changed, 120 insertions(+), 53 deletions(-) diff --git a/ui/src/cmsData/content_mapping.json b/ui/src/cmsData/content_mapping.json index 43a812fa3..034d76f1e 100644 --- a/ui/src/cmsData/content_mapping.json +++ b/ui/src/cmsData/content_mapping.json @@ -142,6 +142,7 @@ ], "_version": 3 }, + "table_search_placeholder": "Search in Fields...", "search_placeholder": "Search for content types...", "tags": [], "title": "Content Mapping", diff --git a/ui/src/components/ContentMapper/index.scss b/ui/src/components/ContentMapper/index.scss index 037652b74..b7ec331de 100644 --- a/ui/src/components/ContentMapper/index.scss +++ b/ui/src/components/ContentMapper/index.scss @@ -4,7 +4,7 @@ .content-types-list-wrapper { display: flex; flex-direction: column; - max-height: calc(100vh - 173px); + // max-height: calc(100vh - 173px); max-width: 25%; overflow: hidden; width: 100%; @@ -38,6 +38,7 @@ } } .ct-list-wrapper { + height: calc(100vh - 375px); overflow-y: auto; overflow-x: hidden; } @@ -63,6 +64,11 @@ } } } +.dropdown-align { + .Dropdown__menu--primary { + right: 0.25rem; + } +} .content-type-list { padding-left: 12px; } @@ -100,6 +106,9 @@ margin: 0; } } + .import-cta { + margin: 0; + } } .disabled-field { color: $color-font-disabled; diff --git a/ui/src/components/ContentMapper/index.tsx b/ui/src/components/ContentMapper/index.tsx index eb0dcea6c..19680ce80 100644 --- a/ui/src/components/ContentMapper/index.tsx +++ b/ui/src/components/ContentMapper/index.tsx @@ -15,7 +15,8 @@ import { InstructionText, ModalHeader, ModalBody, - ModalFooter + ModalFooter, + Dropdown } from '@contentstack/venus-components'; import { jsonToHtml } from '@contentstack/json-rte-serializer'; import HTMLReactParser from 'html-react-parser'; @@ -109,6 +110,7 @@ interface ModalProps { newIndex: number; closeModal: () => void; } + const ContentMapper = () => { /** ALL CONTEXT HERE */ @@ -124,7 +126,8 @@ const ContentMapper = () => { description, // action_cta: actionCta, // cta, - search_placeholder: searchPlaceholder + search_placeholder: searchPlaceholder, + table_search_placeholder: tableSearchPlaceholder }= {} } = migrationData; @@ -211,8 +214,8 @@ const ContentMapper = () => { useEffect(() => { if (contentTypeMapped && otherCmsTitle) { setOtherContentType({ - label: contentTypeMapped?.[otherCmsTitle] ?? 'Select Content Type', - value: contentTypeMapped?.[otherCmsTitle] ?? 'Select Content Type' + label: contentTypeMapped?.[otherCmsTitle] ?? 'Select content type from existing stack', + value: contentTypeMapped?.[otherCmsTitle] ?? 'Select content type from existing stack' }); } }, [contentTypeMapped, otherCmsTitle]); @@ -439,7 +442,7 @@ const ContentMapper = () => { setTableData(newTableData); }; - const handleOnClick = (title: string) => { + const handleSchemaPreview = (title: string) => { return cbModal({ component: (props: ModalObj) => ( {
    @@ -1101,8 +1118,20 @@ const ContentMapper = () => { getSelectedRow={handleSelectedEntries} rowSelectCheckboxProp={{ key: '_canSelect', value: true }} /> +
    + +
    + + {/* {actionCta && validateArray(actionCta) && (
    - {restoreCta?.title} - - ), - type: 'secondary' - }, { label: cta && cta?.title && ( +
    +
    ); diff --git a/ui/src/components/LegacyCms/index.tsx b/ui/src/components/LegacyCms/index.tsx index 230fec416..ef89fb099 100644 --- a/ui/src/components/LegacyCms/index.tsx +++ b/ui/src/components/LegacyCms/index.tsx @@ -167,13 +167,18 @@ const LegacyCMSComponent = forwardRef(({ legacyCMSData, projectData, isCompleted ) { setInternalActiveStepIndex(2); } - dispatch(updateNewMigrationData({ ...newMigrationData, legacy_cms: { selectedCms: selectedCmsData, selectedFileFormat: selectedFileFormatData || defaultCardType, - uploadedFile: newMigrationData?.legacy_cms?.uploadedFile, //need to add backend data once endpoint exposed. + uploadedFile: { + file_details:{ + localPath: legacyCMSData?.file_path, + awsData: legacyCMSData?.awsDetails + }, + isValidated: legacyCMSData?.is_fileValid + }, //need to add backend data once endpoint exposed. affix: legacyCMSData?.affix || newMigrationData?.legacy_cms?.affix || '', isFileFormatCheckboxChecked: true, //need to add backend data once endpoint exposed. isRestictedKeywordCheckboxChecked: true //need to add backend data once endpoint exposed. diff --git a/ui/src/components/LegacyCms/legacyCms.scss b/ui/src/components/LegacyCms/legacyCms.scss index b6bfcb8ba..deae77be0 100644 --- a/ui/src/components/LegacyCms/legacyCms.scss +++ b/ui/src/components/LegacyCms/legacyCms.scss @@ -120,4 +120,11 @@ line-height: 185%; color: $color-base-gray-20; margin-bottom: $space-10; +} +.bar-container{ + height: 10px; + width: 592px; + align-items: center; + margin-left: 20px !important; + margin-top: 10px; } \ No newline at end of file diff --git a/ui/src/context/app/app.interface.ts b/ui/src/context/app/app.interface.ts index 743e885ec..6adb7fe89 100644 --- a/ui/src/context/app/app.interface.ts +++ b/ui/src/context/app/app.interface.ts @@ -54,7 +54,7 @@ export interface IFile { url?: string; validation?: string; file_details?: FileDetails; - isValidated?: boolean; + isValidated: boolean; } export interface ICMSType extends ICardType { From 77c29f2f33075c2f20a3bcc5f67b5e43c0a5b52e Mon Sep 17 00:00:00 2001 From: snehalsankhe Date: Mon, 17 Jun 2024 18:23:05 +0530 Subject: [PATCH 023/759] added destination stack code --- ui/src/cmsData/destinationStack.json | 3 +- .../Actions/LoadOrganisation.tsx | 37 ++++++++++--------- .../DestinationStack/Actions/LoadStacks.tsx | 2 +- .../DestinationStack/DestinationStack.scss | 20 +++++++--- ui/src/components/ProjectsHeader/index.tsx | 15 -------- .../VerticalStepper/AutoVerticalStepper.scss | 8 ++++ .../VerticalStepper/AutoVerticalStepper.tsx | 7 +++- 7 files changed, 52 insertions(+), 40 deletions(-) diff --git a/ui/src/cmsData/destinationStack.json b/ui/src/cmsData/destinationStack.json index 7a52910ae..9f1267f77 100644 --- a/ui/src/cmsData/destinationStack.json +++ b/ui/src/cmsData/destinationStack.json @@ -11,7 +11,8 @@ { "step_id": "Step1", "_metadata": { "uid": "cs45d60445c89ed302" }, - "title": "Organization (read only)", + "title": "Organization", + "ifReadonly": true, "description": "", "lock": false, "active": true, diff --git a/ui/src/components/DestinationStack/Actions/LoadOrganisation.tsx b/ui/src/components/DestinationStack/Actions/LoadOrganisation.tsx index 0ef052439..d9b799eeb 100644 --- a/ui/src/components/DestinationStack/Actions/LoadOrganisation.tsx +++ b/ui/src/components/DestinationStack/Actions/LoadOrganisation.tsx @@ -23,7 +23,7 @@ const LoadOrganisation = (props: LoadOrganisationProps) => { const dispatch = useDispatch(); - // const [selectedOrg, setSelectedOrg] = useState(); + const [selectedOrg, setSelectedOrg] = useState(); /**** ALL METHODS HERE ****/ @@ -31,23 +31,25 @@ const LoadOrganisation = (props: LoadOrganisationProps) => { const setNewMigrationData = (data: INewMigration) => { dispatch(updateNewMigrationData((data))); }; + + const textInput = newMigrationData?.destination_stack?.selectedOrg?.label //Handle Organisation selection // const handleDropdownChange = (data: ChangeEvent) => { - // // if (selectedOrg?.value !== data?.value) { - // // setSelectedOrg(() => ({ ...data })); - - // // setNewMigrationData({ - // // ...newMigrationData, - // // destination_stack: { - // // ...newMigrationData.destination_stack, - // // selectedOrg: { ...data } - // // } - // // }); - // // } - - // //call for Step Change - // // props.handleStepChange(props.currentStep); + // if (selectedOrg?.value !== data?.value) { + // setSelectedOrg(() => ({ ...data })); + + // setNewMigrationData({ + // ...newMigrationData, + // destination_stack: { + // ...newMigrationData.destination_stack, + // selectedOrg: { ...data } + // } + // }); + // } + + // call for Step Change + // props.handleStepChange(props.currentStep); // }; /**** ALL USEEffects HERE ****/ @@ -57,7 +59,7 @@ const LoadOrganisation = (props: LoadOrganisationProps) => { ? newMigrationData?.destination_stack?.selectedOrg : selectedOrganisation; - // setSelectedOrg(org as any); + setSelectedOrg(org as any); setNewMigrationData({ ...newMigrationData, @@ -67,6 +69,7 @@ const LoadOrganisation = (props: LoadOrganisationProps) => { } }); }, []); + return (
    {/*
    @@ -84,7 +87,7 @@ const LoadOrganisation = (props: LoadOrganisationProps) => {
    */} { canEditOption={true} value={selectedStack} isSearchable={true} - isClearable={true} + // isClearable={true} width="600px" isDisabled={props?.stepComponentProps?.isSummary || false} placeholder={'Select a stack'} diff --git a/ui/src/components/DestinationStack/DestinationStack.scss b/ui/src/components/DestinationStack/DestinationStack.scss index afb15c855..154401e86 100644 --- a/ui/src/components/DestinationStack/DestinationStack.scss +++ b/ui/src/components/DestinationStack/DestinationStack.scss @@ -71,6 +71,7 @@ // max-width: 430px; width: 100%; margin: 0; + padding-bottom: 0; .Select__v2 .Select__menu .Select__menu-list .Select__option { padding: 12px !important; } @@ -84,7 +85,7 @@ position: relative; &:last-child { border-top: 1px solid $color-brand-secondary-lightest; - position: absolute; + position: sticky; bottom: 0; color: $color-brand-primary-base; font-weight: $font-weight-semi-bold; @@ -105,12 +106,21 @@ } } - -.TextInput--disabled .TextInput__v2 { - background-color: $color-base-white-5 !important; - color: $color-font-black; +.action-summary-wrapper { + .Select .Select__control .Select__value-container.Select__value-container--has-value .Select__single-value input { + width: 100% !important; + background-color: $color-brand-white-base; + font-size: $size-font-xl; + color: $color-black-2121; + font-weight: $font-weight-regular; + } + .TextInput--disabled .TextInput__v2 { + background-color: $color-base-white-5 !important; + color: $color-black-2121; + } } + .locale-container { display: flex; background-color: $color-base-white-5; diff --git a/ui/src/components/ProjectsHeader/index.tsx b/ui/src/components/ProjectsHeader/index.tsx index a92a7afa0..493867fc6 100644 --- a/ui/src/components/ProjectsHeader/index.tsx +++ b/ui/src/components/ProjectsHeader/index.tsx @@ -62,21 +62,6 @@ const ProjectsHeader = ({ const pageActions: any = [ - { - label:( - - ), - type: 'secondary' - }, { label: cta && cta?.title && ( +
    + ) } ]; @@ -170,7 +166,7 @@ const Settings = () => { component: (
    {active === cmsData?.project?.title && ( -
    +
    {cmsData?.project?.general}
    @@ -207,28 +203,6 @@ const Settings = () => {
    - -
    -
    - - {cmsData?.project?.email} - -
    -
    - - -
    - -
    -
    -
    -
    -
    @@ -267,7 +231,7 @@ const Settings = () => { const leftSidebar = { component: ( -
    +
    { }} version="v2" /> -
    - } - onClick={() => { - setActive(cmsData?.execution_logs?.title); - setCurrentHeader(cmsData?.execution_logs?.title); - }} - version="v2" - /> -
    + } + onClick={() => { + setActive(cmsData?.execution_logs?.title); + setCurrentHeader(cmsData?.execution_logs?.title); + }} + version="v2" + />
    ) }; diff --git a/ui/src/components/Common/router.tsx b/ui/src/components/Common/router.tsx index 82f61ea82..6df9932c2 100644 --- a/ui/src/components/Common/router.tsx +++ b/ui/src/components/Common/router.tsx @@ -17,6 +17,7 @@ const LoginLazyLoad = lazy(() => import('../../pages/Login')); const RegionalLoginLazyLoad = lazy(() => import('../../pages/RegionalLogin')); const MigrationLazyLoad = lazy(() => import('../../pages/Migration')); const ProjectsLazyLoad = lazy(() => import('../../pages/Projects')); +const SettingsLazyLoad = lazy(() => import ('../Common/Settings')) const AppRouter = () => { return ( @@ -34,9 +35,9 @@ const AppRouter = () => { } - > + /> - + } /> } /> diff --git a/ui/src/components/ContentMapper/index.tsx b/ui/src/components/ContentMapper/index.tsx index 19680ce80..9168fd9bd 100644 --- a/ui/src/components/ContentMapper/index.tsx +++ b/ui/src/components/ContentMapper/index.tsx @@ -537,31 +537,6 @@ const ContentMapper = () => { } }); }; - - const handleValidateOnClick = async () => { - setisButtonLoading(true); - const data = { - name: newMigrationData?.destination_stack?.selectedStack?.label, - description: 'test migration stack', - master_locale: newMigrationData?.destination_stack?.selectedStack?.master_locale - }; - const res = await createTestStack( - newMigrationData?.destination_stack?.selectedOrg?.value, - projectId, - data - ); - const newMigrationDataObj: INewMigration = { - ...newMigrationData, - test_migration: { stack_link: res?.data?.data?.url } - }; - - dispatch(updateNewMigrationData((newMigrationDataObj))); - if (res?.status) { - setisButtonLoading(false); - const url = `/projects/${projectId}/migration/steps/4`; - navigate(url, { replace: true }); - } - }; const SelectAccessor = (data: FieldMapType) => { const OptionsForRow = Fields[data?.backupFieldType as keyof Mapping]; diff --git a/ui/src/components/MainHeader/index.scss b/ui/src/components/MainHeader/index.scss index b330fa47b..71225d6dd 100644 --- a/ui/src/components/MainHeader/index.scss +++ b/ui/src/components/MainHeader/index.scss @@ -4,6 +4,7 @@ background-color: $color-brand-white-base; border-bottom: 1px solid $color-brand-secondary-lightest; height: 3.5rem; + justify-content: space-between; position: fixed; width: 100%; top: 0; @@ -14,9 +15,9 @@ border: 0 none; } .logo { - margin-right: 1.063rem; position: relative; - width: 3rem; + text-align: center; + width: 3.5rem; a { align-items: center; display: flex; @@ -30,9 +31,12 @@ box-shadow: 0 0 1px $color-brand-primary-base, 0 0 0 4px #bbb4f4; } } - .organisationWrapper:focus { - box-shadow: 0 0 1px $color-brand-primary-base, 0 0 0 4px #bbb4f4; - } + .organisationWrapper { + margin-left: 1.063rem; + &:focus { + box-shadow: 0 0 1px $color-brand-primary-base, 0 0 0 4px #bbb4f4; + } + } .Dropdown-wrapper { padding: 0 18px; } diff --git a/ui/src/components/MainHeader/index.tsx b/ui/src/components/MainHeader/index.tsx index 52e9d1c3f..1061a0712 100644 --- a/ui/src/components/MainHeader/index.tsx +++ b/ui/src/components/MainHeader/index.tsx @@ -97,9 +97,7 @@ const MainHeader = () => { }; return (
    -
    -
    -
    +
    {logo?.image?.url ? (
    @@ -126,7 +124,7 @@ const MainHeader = () => {
    }
    - {(location.pathname == '/projects' || location.pathname.includes('/projects/')) &&
    + {(location.pathname == '/projects' || location.pathname.includes('/projects/')) &&
    {
    } -
    -
    ); }; diff --git a/ui/src/components/SideBar/index.tsx b/ui/src/components/SideBar/index.tsx index a273915ac..149ca958a 100644 --- a/ui/src/components/SideBar/index.tsx +++ b/ui/src/components/SideBar/index.tsx @@ -1,12 +1,30 @@ // Libraries -import { Icon } from '@contentstack/venus-components'; +import { Tooltip, Icon, Link } from '@contentstack/venus-components'; +import { useNavigate } from 'react-router'; + // Styles import './index.scss'; -const SideBar = () => { +type SettingIconProp = { + projectId: string; +} + +const SideBar = ({projectId}: SettingIconProp) => { + const navigate = useNavigate(); + + const settingsNavigate = () => { + const url = `/projects/${projectId}/settings`; + navigate(url, { replace: true }); + } return ( -
    - {location.pathname.includes('/projects/') && } +
    + {location.pathname.includes('/projects/') && + + + + + + }
    ); }; diff --git a/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.scss b/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.scss index e20b914c5..776cce0c0 100644 --- a/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.scss +++ b/ui/src/components/Stepper/HorizontalStepper/HorizontalStepper.scss @@ -119,6 +119,7 @@ z-index: 9; } .stepContent { + background-color: $color-base-white-10; height: calc(100vh - 56px); padding-top: 190px; } \ No newline at end of file diff --git a/ui/src/components/TestMigration/index.tsx b/ui/src/components/TestMigration/index.tsx index 007eca4c6..45eeec98d 100644 --- a/ui/src/components/TestMigration/index.tsx +++ b/ui/src/components/TestMigration/index.tsx @@ -1,6 +1,6 @@ import { useContext, useEffect, useState } from 'react'; -import { Link, useNavigate, useParams } from 'react-router-dom'; -import { Button } from '@contentstack/venus-components'; +import { useNavigate, useParams } from 'react-router-dom'; +import { Field, FieldLabel, TextInput, Link, Icon, Tooltip } from '@contentstack/venus-components'; import { UseDispatch,useSelector } from 'react-redux'; // Services @@ -19,7 +19,8 @@ import { AppContext } from '../../context/app/app.context'; const TestMigration = () => { const [data, setData] = useState({}); - const newMigrationData = useSelector((state:any)=>state?.migration?.newMigration); + const newMigrationData = useSelector((state:any)=>state?.migration?.newMigrationData); + /** ALL HOOKS Here */ const { projectId = '' } = useParams(); @@ -38,9 +39,57 @@ const TestMigration = () => { const { subtitle, cta } = data; + + return ( -
    -
    +
    +
    +
    UID
    +
    +

    Select your current Content Management system from the available options.

    + + + Uploaded CMS + +
    + {newMigrationData?.test_migration?.stack_api_key && ( + + )} + + {newMigrationData?.test_migration?.stack_link && ( + + + + + + )} +
    +
    +
    +
    + +
    +
    Execution Logs
    +
    + +
    +
    + {/*
    {subtitle}: @@ -63,7 +112,7 @@ const TestMigration = () => { )} -
    +
    */}
    ); }; diff --git a/ui/src/components/layout/AppLayout/index.tsx b/ui/src/components/layout/AppLayout/index.tsx index 059dac487..9fe955566 100644 --- a/ui/src/components/layout/AppLayout/index.tsx +++ b/ui/src/components/layout/AppLayout/index.tsx @@ -1,11 +1,13 @@ // Libraries import { FC, ReactNode, useEffect } from 'react'; -import { useLocation } from 'react-router'; +import { Params, useLocation, useParams } from 'react-router'; +import { useDispatch } from 'react-redux'; + +import { getUserDetails } from '../../../store/slice/authSlice'; + // Component import MainHeader from '../../MainHeader'; import SideBar from '../../SideBar'; -import { getUserDetails } from '../../../store/slice/authSlice'; -import { useDispatch } from 'react-redux'; type IProps = { children?: ReactNode; @@ -15,6 +17,8 @@ const AppLayout: FC = ({ children }) => { const location = useLocation(); const dispatch = useDispatch(); + const projectId = location?.pathname?.split('/')?.[2]; + useEffect(()=>{ dispatch(getUserDetails()); @@ -25,7 +29,7 @@ const AppLayout: FC = ({ children }) => { {location.pathname.includes('projects') && <> - + }
    diff --git a/ui/src/context/app/app.interface.ts b/ui/src/context/app/app.interface.ts index 910c2a741..dfc9738d6 100644 --- a/ui/src/context/app/app.interface.ts +++ b/ui/src/context/app/app.interface.ts @@ -187,6 +187,7 @@ export interface IDropDown { } export interface ITestMigration { stack_link: string; + stack_api_key: string; } export interface IAppContext { authToken: string; @@ -286,7 +287,8 @@ export const DEFAULT_CONTENT_MAPPER: IContentMapper = { }; export const DEFAULT_TEST_MIGRATION: ITestMigration = { - stack_link: '' + stack_link: '', + stack_api_key: '' }; export const DEFAULT_NEW_MIGRATION: INewMigration = { diff --git a/ui/src/pages/Migration/index.tsx b/ui/src/pages/Migration/index.tsx index f4f1398be..7794c7edb 100644 --- a/ui/src/pages/Migration/index.tsx +++ b/ui/src/pages/Migration/index.tsx @@ -189,7 +189,6 @@ const Migration = () => { }; const handleOnClickContentMapper = async (event: MouseEvent) => { - if (isCompleted) { event.preventDefault(); const data = { @@ -203,10 +202,11 @@ const Migration = () => { projectId, data ); + const newMigrationDataObj: INewMigration = { ...newMigrationData, - test_migration: { stack_link: res?.data?.data?.url } + test_migration: { stack_link: res?.data?.data?.url, stack_api_key: res?.data?.data?.data?.stack?.api_key } }; dispatch(updateNewMigrationData((newMigrationDataObj))); @@ -214,12 +214,6 @@ const Migration = () => { const url = `/projects/${projectId}/migration/steps/4`; navigate(url, { replace: true }); } - } else { - Notification({ - notificationContent: { text: 'Please complete all steps' }, - type: 'warning' - }); - } } const handleOnClickFunctions = [ diff --git a/ui/src/scss/App.scss b/ui/src/scss/App.scss index b76ecbd76..4cc6ff593 100644 --- a/ui/src/scss/App.scss +++ b/ui/src/scss/App.scss @@ -387,6 +387,22 @@ h2 { } } } +.content-block { + background-color: $color-brand-white-base; + border: 1px solid $color-base-gray-40; + border-radius: $px-4; + margin: $px-24 $px-20 $px-32; + + .content-header { + font-size: $size-font-large; + font-weight: $font-weight-semi-bold; + padding: $px-12 $px-24; + } + .content-body { + border-top: 1px solid $color-base-gray-40; + padding: $px-24 $px-30; + } +} ::-webkit-input-placeholder { color: $color-stepper-title !important; } From 71b44d4305e2b316c2eb5f554f2ed1541b04bd7b Mon Sep 17 00:00:00 2001 From: AishDani Date: Wed, 19 Jun 2024 13:51:13 +0530 Subject: [PATCH 031/759] refactor:modified validated api props --- .../components/LegacyCms/Actions/LoadUploadFile.tsx | 2 +- ui/src/services/api/upload.service.ts | 12 ++++++++++-- uplaode-api/src/routes/index.ts | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx index 314ec21e6..b1c2f1fec 100644 --- a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx @@ -76,7 +76,7 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { setProgressPercentage(30); setShowProgress(true); - const res: any = await fileValidation(); + const res: any = await fileValidation(projectId); if(res?.status === 200){ setIsValidated(true); setValidationMessage('Validated'); diff --git a/ui/src/services/api/upload.service.ts b/ui/src/services/api/upload.service.ts index 67ada600d..ead7f3f28 100644 --- a/ui/src/services/api/upload.service.ts +++ b/ui/src/services/api/upload.service.ts @@ -2,6 +2,7 @@ import axios from 'axios'; import { UPLOAD_FILE_RELATIVE_URL } from '../../utilities/constants'; import { User, SmsToken } from '../../pages/Login/login.interface'; import { API_VERSION } from '../../utilities/constants'; +import { getDataFromLocalStorage } from '../../utilities/functions'; //Axios Calls for Upload server export const getCall = async (url: string, options?: any) => { @@ -36,9 +37,16 @@ export const uploadFilePath = () => { return `${UPLOAD_FILE_RELATIVE_URL}upload`; }; -export const fileValidation = () => { +export const fileValidation = (projectId: string) => { try { - return getCall(`${UPLOAD_FILE_RELATIVE_URL}validator`); + const options = { + headers: { + 'app_token': getDataFromLocalStorage('app_token'), + 'projectId': projectId + }, + + }; + return getCall(`${UPLOAD_FILE_RELATIVE_URL}validator`, options); } catch (error) { return error; } diff --git a/uplaode-api/src/routes/index.ts b/uplaode-api/src/routes/index.ts index 32a46b61a..b66241dbb 100644 --- a/uplaode-api/src/routes/index.ts +++ b/uplaode-api/src/routes/index.ts @@ -91,7 +91,7 @@ router.post('/upload', upload.single('file'), async function (req: Request, res: // deepcode ignore NoRateLimitingForExpensiveWebOperation: router.get('/validator', express.json(), fileOperationLimiter, async function (req: Request, res: Response) { try { - const projectId: string | string[] = req?.body?.projectId ?? ""; + const projectId: string | string[] = req?.headers?.projectid ?? ""; const app_token: string | string[] = req?.headers?.app_token ?? ""; const cmsType = config?.cmsType?.toLowerCase(); From b4b17bfc698dd9d9aeecbffe5a16d5261306236e Mon Sep 17 00:00:00 2001 From: snehalsankhe Date: Wed, 19 Jun 2024 15:08:25 +0530 Subject: [PATCH 032/759] solved issues on destination stack --- .../Actions/LoadOrganisation.tsx | 8 +++----- .../DestinationStack/Actions/LoadStacks.tsx | 20 ++++++++++++------- .../DestinationStack/DestinationStack.scss | 7 ++++++- .../VerticalStepper/AutoVerticalStepper.tsx | 4 ++-- ui/src/pages/Migration/index.tsx | 5 +++++ 5 files changed, 29 insertions(+), 15 deletions(-) diff --git a/ui/src/components/DestinationStack/Actions/LoadOrganisation.tsx b/ui/src/components/DestinationStack/Actions/LoadOrganisation.tsx index 2dba6f8cb..cc31ab3d3 100644 --- a/ui/src/components/DestinationStack/Actions/LoadOrganisation.tsx +++ b/ui/src/components/DestinationStack/Actions/LoadOrganisation.tsx @@ -1,6 +1,6 @@ import { ChangeEvent, useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; -import { INewMigration } from '../../../context/app/app.interface'; +import { IDropDown, INewMigration } from '../../../context/app/app.interface'; import { TextInput } from '@contentstack/venus-components'; import '../DestinationStack.scss'; @@ -23,8 +23,7 @@ const LoadOrganisation = (props: LoadOrganisationProps) => { const dispatch = useDispatch(); - const [selectedOrg, setSelectedOrg] = useState(); - + const [selectedOrg, setSelectedOrg] = useState(); /**** ALL METHODS HERE ****/ //update new Migration Data @@ -32,7 +31,6 @@ const LoadOrganisation = (props: LoadOrganisationProps) => { dispatch(updateNewMigrationData((data))); }; - const textInput = newMigrationData?.destination_stack?.selectedOrg?.label //Handle Organisation selection // const handleDropdownChange = (data: ChangeEvent) => { @@ -87,7 +85,7 @@ const LoadOrganisation = (props: LoadOrganisationProps) => {
    */} { const [isSaving, setIsSaving] = useState(false); const [isLoading, setisLoading] = useState(false); + const { projectId = '' }: Params = useParams(); //Handle new stack details @@ -103,6 +104,7 @@ const LoadStacks = (props: LoadFileFormatProps) => { /**** ALL METHODS HERE ****/ + const [placeholder, setPlaceholder] = useState('Select a stack'); //Handle Legacy cms selection const handleDropdownChange = (name: string) => (data: IDropDown) => { const stackChanged = selectedStack?.value !== data?.value; @@ -110,6 +112,11 @@ const LoadStacks = (props: LoadFileFormatProps) => { if (data?.value == '+ Create a new Stack') { handleCreateNewStack() } + if (stackCleared === true) { + setPlaceholder('Select a stack'); + } + + if (name === 'stacks' && data?.value != '+ Create a new Stack') { setSelectedStack(() => ({ ...data })); @@ -121,8 +128,8 @@ const LoadStacks = (props: LoadFileFormatProps) => { } }; - dispatch(updateNewMigrationData((newMigrationDataObj))); + dispatch(updateNewMigrationData((newMigrationDataObj))); if (!stackCleared) { if (props?.handleStepChange) { props?.handleStepChange(props?.currentStep, true); @@ -212,7 +219,7 @@ const LoadStacks = (props: LoadFileFormatProps) => { limit: number; }) => { const stackData = await getAllStacksInOrg( - newMigrationData?.destination_stack?.selectedOrg?.value + selectedOrganisation?.value ); //org id will always be there const stackArray = validateArray(stackData?.data?.stacks) @@ -240,7 +247,6 @@ const LoadStacks = (props: LoadFileFormatProps) => { } stackArray.push(addLabel) - setAllStack(stackArray); //Set selected Stack @@ -272,7 +278,6 @@ const LoadStacks = (props: LoadFileFormatProps) => { } } }; - return (
    @@ -287,12 +292,13 @@ const LoadStacks = (props: LoadFileFormatProps) => { onBlur={onBlurDropdown} canEditOption={true} value={selectedStack} - isSearchable={true} isClearable={true} + isSearchable={true} width="600px" isDisabled={props?.stepComponentProps?.isSummary || false} - placeholder={'Select a stack'} + placeholder={placeholder} limit={10} + updateOption={()=> undefined} />
    diff --git a/ui/src/components/DestinationStack/DestinationStack.scss b/ui/src/components/DestinationStack/DestinationStack.scss index 35113f8e7..726a0d15b 100644 --- a/ui/src/components/DestinationStack/DestinationStack.scss +++ b/ui/src/components/DestinationStack/DestinationStack.scss @@ -25,7 +25,12 @@ .pl-40 { padding-left: $px-40; } - +.Dropdown-wrapper { + .css-b8ldur-Input { + // border: 1px solid red; + cursor: not-allowed; + } +} .stackselect { min-width: 600px !important; max-width: 600px !important; diff --git a/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx b/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx index af961eca4..2e247e48c 100644 --- a/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx +++ b/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx @@ -88,13 +88,13 @@ const AutoVerticalStepper = React.forwardRef<
    {data.titleNote ? data.titleNote : ''}
    - {data?.lock ? ( + {/* {data?.lock ? (
    lock-icon
    - ) : null} + ) : null} */}
    {data.description &&
    {data.description}
    } diff --git a/ui/src/pages/Migration/index.tsx b/ui/src/pages/Migration/index.tsx index 85ae8fd31..3b72e5195 100644 --- a/ui/src/pages/Migration/index.tsx +++ b/ui/src/pages/Migration/index.tsx @@ -202,6 +202,11 @@ const Migration = () => { const url = `/projects/${projectId}/migration/steps/3`; navigate(url, { replace: true }); } + } else{ + Notification({ + notificationContent: { text: 'Please complete all steps' }, + type: 'warning' + }); } }; From 089aca226c132ca699724a7f83e65b17f0bd9952 Mon Sep 17 00:00:00 2001 From: Sayali Joshi Date: Wed, 19 Jun 2024 15:35:40 +0530 Subject: [PATCH 033/759] Content Mapper changes --- ui/src/components/Common/Settings/index.tsx | 11 --- .../DestinationStack/Actions/LoadStacks.tsx | 1 + .../LegacyCms/Actions/LoadUploadFile.tsx | 6 +- ui/src/components/MainHeader/index.scss | 2 +- .../components/MigrationExecution/index.tsx | 45 ++++++----- .../components/MigrationFlowHeader/index.tsx | 4 +- ui/src/pages/Migration/index.tsx | 79 +++++++++++++------ ui/src/scss/App.scss | 2 +- uplaode-api/.env | 2 +- 9 files changed, 87 insertions(+), 65 deletions(-) diff --git a/ui/src/components/Common/Settings/index.tsx b/ui/src/components/Common/Settings/index.tsx index ba6d9e5a9..7103fb796 100644 --- a/ui/src/components/Common/Settings/index.tsx +++ b/ui/src/components/Common/Settings/index.tsx @@ -252,17 +252,6 @@ const Settings = () => { }} version="v2" /> - } - onClick={() => { - setActive(cmsData?.execution_logs?.title); - setCurrentHeader(cmsData?.execution_logs?.title); - }} - version="v2" - />
    ) }; diff --git a/ui/src/components/DestinationStack/Actions/LoadStacks.tsx b/ui/src/components/DestinationStack/Actions/LoadStacks.tsx index dcd747dd6..1b019012b 100644 --- a/ui/src/components/DestinationStack/Actions/LoadStacks.tsx +++ b/ui/src/components/DestinationStack/Actions/LoadStacks.tsx @@ -293,6 +293,7 @@ const LoadStacks = (props: LoadFileFormatProps) => { isDisabled={props?.stepComponentProps?.isSummary || false} placeholder={'Select a stack'} limit={10} + updateOption={()=> undefined} />
    diff --git a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx index b1c2f1fec..b2e36cc2e 100644 --- a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx @@ -27,7 +27,7 @@ const FileComponent = ({fileDetails}:Props ) => {
    {fileDetails?.isLocalPath && (!isEmptyString(fileDetails?.localPath) || !isEmptyString(fileDetails?.awsData?.awsRegion)) ? (
    - +
    ) : ( @@ -289,9 +289,9 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { {!isConfigLoading && !isEmptyString(cmsType) ? ( ) : - } + } {showMessage && - () + () }
    diff --git a/ui/src/components/MainHeader/index.scss b/ui/src/components/MainHeader/index.scss index 71225d6dd..b5609bdcf 100644 --- a/ui/src/components/MainHeader/index.scss +++ b/ui/src/components/MainHeader/index.scss @@ -10,7 +10,7 @@ top: 0; display: flex; align-items: center; - z-index: 9; + z-index: 10; button { border: 0 none; } diff --git a/ui/src/components/MigrationExecution/index.tsx b/ui/src/components/MigrationExecution/index.tsx index b3b82b73c..3e78ef6fc 100644 --- a/ui/src/components/MigrationExecution/index.tsx +++ b/ui/src/components/MigrationExecution/index.tsx @@ -67,27 +67,30 @@ const MigrationExecution = () => { }; return ( -
    -
    - {MigrationInformation && - validateArray(MigrationInformation) && - MigrationInformation?.map((item, index) => ( -
    - - - {item?.title} - - {getPlaceHolder(item?.title)} - - {index < MigrationInformation?.length - 1 && ( - - )} -
    - ))} -
    -
    -
    - +
    +
    +
    Path
    +
    Select your organization maintained on Contentstack.
    +
    + +
    + {MigrationInformation && + validateArray(MigrationInformation) && + MigrationInformation?.map((item, index) => ( +
    + + + {item?.title} + + {getPlaceHolder(item?.title)} + + {index < MigrationInformation?.length - 1 && ( + + )} +
    + ))} +
    +
    ); diff --git a/ui/src/components/MigrationFlowHeader/index.tsx b/ui/src/components/MigrationFlowHeader/index.tsx index bd7d0a04f..3a5979723 100644 --- a/ui/src/components/MigrationFlowHeader/index.tsx +++ b/ui/src/components/MigrationFlowHeader/index.tsx @@ -18,9 +18,10 @@ import './index.scss'; type MigrationFlowHeaderProps = { handleOnClick: (event: MouseEvent, handleStepChange: (currentStep: number) => void) => void; + isLoading: boolean; }; -const MigrationFlowHeader = ({ handleOnClick }: MigrationFlowHeaderProps) => { +const MigrationFlowHeader = ({ handleOnClick, isLoading }: MigrationFlowHeaderProps) => { const [projectName, setProjectName] = useState(''); const navigate = useNavigate(); @@ -73,6 +74,7 @@ const MigrationFlowHeader = ({ handleOnClick }: MigrationFlowHeaderProps) => { onClick={handleOnClick} version="v2" aria-label='Save and Continue' + isLoading={isLoading} > Save and Continue diff --git a/ui/src/pages/Migration/index.tsx b/ui/src/pages/Migration/index.tsx index 62be4e083..d62bcb635 100644 --- a/ui/src/pages/Migration/index.tsx +++ b/ui/src/pages/Migration/index.tsx @@ -165,6 +165,8 @@ const Migration = () => { // handle on proceed to destination stack const handleOnClickLegacyCms = async (event: MouseEvent ) => { + setIsLoading(true); + if(isCompleted){ event.preventDefault(); @@ -175,12 +177,16 @@ const Migration = () => { const res = await updateCurrentStepData(selectedOrganisation.value, projectId); handleStepChange(1); if (res) { + setIsLoading(false); + const url = `/projects/${projectId}/migration/steps/2`; navigate(url, { replace: true }); } } else{ + setIsLoading(false); + Notification({ notificationContent: { text: 'Please complete all steps' }, type: 'warning' @@ -190,6 +196,8 @@ const Migration = () => { }; // handle on proceed to content mapping const handleOnClickDestinationStack = async (event: MouseEvent) => { + setIsLoading(true); + if(isCompleted){ event?.preventDefault(); //Update Data in backend @@ -199,6 +207,8 @@ const Migration = () => { handleStepChange(2); const res = await updateCurrentStepData(selectedOrganisation?.value, projectId); if (res) { + setIsLoading(false); + const url = `/projects/${projectId}/migration/steps/3`; navigate(url, { replace: true }); } @@ -206,42 +216,59 @@ const Migration = () => { }; const handleOnClickContentMapper = async (event: MouseEvent) => { - event.preventDefault(); + setIsLoading(true); + + event.preventDefault(); + + const data = { + name: newMigrationData?.destination_stack?.selectedStack?.label, + description: 'test migration stack', + master_locale: newMigrationData?.destination_stack?.selectedStack?.master_locale + }; + + const res = await createTestStack( + newMigrationData?.destination_stack?.selectedOrg?.value, + projectId, + data + ); + + const newMigrationDataObj: INewMigration = { + ...newMigrationData, + test_migration: { stack_link: res?.data?.data?.url, stack_api_key: res?.data?.data?.data?.stack?.api_key } + }; + + dispatch(updateNewMigrationData((newMigrationDataObj))); + if (res?.status) { + setIsLoading(false); - const data = { - name: newMigrationData?.destination_stack?.selectedStack?.label, - description: 'test migration stack', - master_locale: newMigrationData?.destination_stack?.selectedStack?.master_locale - }; - - const res = await createTestStack( - newMigrationData?.destination_stack?.selectedOrg?.value, - projectId, - data - ); - - - const newMigrationDataObj: INewMigration = { - ...newMigrationData, - test_migration: { stack_link: res?.data?.data?.url, stack_api_key: res?.data?.data?.data?.stack?.api_key } - }; - - dispatch(updateNewMigrationData((newMigrationDataObj))); - if (res?.status) { - const url = `/projects/${projectId}/migration/steps/4`; - navigate(url, { replace: true }); - } + const url = `/projects/${projectId}/migration/steps/4`; + navigate(url, { replace: true }); + + await updateCurrentStepData(selectedOrganisation.value, projectId); + handleStepChange(3); + } + } + + const handleOnClickTestMigration = async (event: MouseEvent) => { + setIsLoading(false); + + const url = `/projects/${projectId}/migration/steps/5`; + navigate(url, { replace: true }); + + await updateCurrentStepData(selectedOrganisation.value, projectId); + handleStepChange(4); } const handleOnClickFunctions = [ handleOnClickLegacyCms, handleOnClickDestinationStack, - handleOnClickContentMapper + handleOnClickContentMapper, + handleOnClickTestMigration ]; return (
    - +
    { projectData && diff --git a/ui/src/scss/App.scss b/ui/src/scss/App.scss index 4cc6ff593..0d931e43d 100644 --- a/ui/src/scss/App.scss +++ b/ui/src/scss/App.scss @@ -400,7 +400,7 @@ h2 { } .content-body { border-top: 1px solid $color-base-gray-40; - padding: $px-24 $px-30; + padding: $px-24 $px-24; } } ::-webkit-input-placeholder { diff --git a/uplaode-api/.env b/uplaode-api/.env index 5f3a84b6c..2c50b6496 100644 --- a/uplaode-api/.env +++ b/uplaode-api/.env @@ -1,2 +1,2 @@ PORT=4002 -NODE_BACKEND_API =http://localhost:5000 \ No newline at end of file +NODE_BACKEND_API =http://localhost:5001 \ No newline at end of file From 20707fc2de015135f84c6dc2287f551970df4b28 Mon Sep 17 00:00:00 2001 From: AishDani Date: Wed, 19 Jun 2024 18:15:25 +0530 Subject: [PATCH 034/759] feat:added search functionality in getAllStack api --- api/src/routes/org.routes.ts | 2 +- api/src/services/org.service.ts | 13 +++++++++++-- .../DestinationStack/Actions/LoadStacks.tsx | 4 ++-- ui/src/components/DestinationStack/index.tsx | 2 +- .../components/LegacyCms/Actions/LoadUploadFile.tsx | 9 +++++---- ui/src/services/api/stacks.service.ts | 4 ++-- 6 files changed, 22 insertions(+), 12 deletions(-) diff --git a/api/src/routes/org.routes.ts b/api/src/routes/org.routes.ts index d4c2216bd..2e8a3c571 100644 --- a/api/src/routes/org.routes.ts +++ b/api/src/routes/org.routes.ts @@ -6,7 +6,7 @@ import validator from "../validators/index.js"; const router = express.Router({ mergeParams: true }); // GET all org stacks route -router.get("/stacks", asyncRouter(orgController.getAllStacks)); +router.get("/stacks/:searchText?", asyncRouter(orgController.getAllStacks)); // Create a new stack route router.post( diff --git a/api/src/services/org.service.ts b/api/src/services/org.service.ts index ccff68042..3c13f84e8 100644 --- a/api/src/services/org.service.ts +++ b/api/src/services/org.service.ts @@ -13,6 +13,7 @@ const getAllStacks = async (req: Request): Promise => { const srcFun = "getAllStacks"; const orgId = req?.params?.orgId; const { token_payload } = req.body; + const search: string = req?.params?.searchText?.toLowerCase(); try { const authtoken = await getAuthtoken( @@ -42,13 +43,21 @@ const getAllStacks = async (req: Request): Promise => { err.response.data ) ); - return { data: err.response.data, status: err.response.status, }; } - let locale = await getStackLocal(token_payload, res.data.stacks); + let stacks = res?.data?.stacks; + if(search){ + stacks = stacks.filter((stack:{name: string, description:string})=>{ + const stackName = stack.name?.toLowerCase(); + const stackDescription = stack.description?.toLowerCase(); + return stackName.includes(search) || stackDescription.includes(search); + + }) + } + const locale = await getStackLocal(token_payload, stacks); return { data: { stacks: locale, diff --git a/ui/src/components/DestinationStack/Actions/LoadStacks.tsx b/ui/src/components/DestinationStack/Actions/LoadStacks.tsx index a05ac2897..bd6b57d88 100644 --- a/ui/src/components/DestinationStack/Actions/LoadStacks.tsx +++ b/ui/src/components/DestinationStack/Actions/LoadStacks.tsx @@ -141,7 +141,7 @@ const LoadStacks = (props: LoadFileFormatProps) => { const fetchData = async () => { setisLoading(true); const stackData = await getAllStacksInOrg( - newMigrationData?.destination_stack?.selectedOrg?.value + newMigrationData?.destination_stack?.selectedOrg?.value,'' ); //org id will always be there const stackArray = validateArray(stackData?.data?.stacks) @@ -219,7 +219,7 @@ const LoadStacks = (props: LoadFileFormatProps) => { limit: number; }) => { const stackData = await getAllStacksInOrg( - selectedOrganisation?.value + selectedOrganisation?.value, search ); //org id will always be there const stackArray = validateArray(stackData?.data?.stacks) diff --git a/ui/src/components/DestinationStack/index.tsx b/ui/src/components/DestinationStack/index.tsx index 0440151d1..76cd29810 100644 --- a/ui/src/components/DestinationStack/index.tsx +++ b/ui/src/components/DestinationStack/index.tsx @@ -96,7 +96,7 @@ const DestinationStackComponent = ({ //If stack is already selected and exist in backend, then fetch all stack list and filter selected stack. if (!isEmptyString(destination_stack)) { const stackData: any = await getAllStacksInOrg( - selectedOrganisationData?.value || selectedOrganisation?.value + selectedOrganisationData?.value || selectedOrganisation?.value,'' ); const stack = diff --git a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx index b2e36cc2e..6997c85c7 100644 --- a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx @@ -27,7 +27,7 @@ const FileComponent = ({fileDetails}:Props ) => {
    {fileDetails?.isLocalPath && (!isEmptyString(fileDetails?.localPath) || !isEmptyString(fileDetails?.awsData?.awsRegion)) ? (
    - +
    ) : ( @@ -289,9 +289,9 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { {!isConfigLoading && !isEmptyString(cmsType) ? ( ) : - } + } {showMessage && - () + () }
    @@ -305,7 +305,8 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { onClick={handleOnFileUploadCompletion} isLoading={isLoading} version={"v2"} - disabled={isDasabled}>Validate + disabled={isDasabled} + >Validate
    diff --git a/ui/src/services/api/stacks.service.ts b/ui/src/services/api/stacks.service.ts index abb79029e..334b2b7a6 100644 --- a/ui/src/services/api/stacks.service.ts +++ b/ui/src/services/api/stacks.service.ts @@ -8,9 +8,9 @@ const options = { } }; -export const getAllStacksInOrg = async (orgId: string) => { +export const getAllStacksInOrg = async (orgId: string,searchText: string) => { try { - return await getCall(`${API_VERSION}/org/${orgId}/stacks`, options); + return await getCall(`${API_VERSION}/org/${orgId}/stacks/${searchText}?`, options); } catch (error) { return error; } From ae0adc4056a02de77d9d9367eefbb8e334fade25 Mon Sep 17 00:00:00 2001 From: AishDani Date: Wed, 19 Jun 2024 18:50:19 +0530 Subject: [PATCH 035/759] refactor:handled empty stack getting even if stack is present --- .../DestinationStack/Actions/LoadStacks.tsx | 47 ++++++++++++------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/ui/src/components/DestinationStack/Actions/LoadStacks.tsx b/ui/src/components/DestinationStack/Actions/LoadStacks.tsx index bd6b57d88..183fb08ed 100644 --- a/ui/src/components/DestinationStack/Actions/LoadStacks.tsx +++ b/ui/src/components/DestinationStack/Actions/LoadStacks.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { AsyncSelect, cbModal } from '@contentstack/venus-components'; import { DEFAULT_DROPDOWN, IDropDown, INewMigration } from '../../../context/app/app.interface'; @@ -35,6 +35,7 @@ const LoadStacks = (props: LoadFileFormatProps) => { ? newMigrationData?.destination_stack?.selectedStack : DEFAULT_DROPDOWN ); + const [allStack, setAllStack] = useState([]); const [allLocales, setAllLocales] = useState([]); @@ -44,6 +45,12 @@ const LoadStacks = (props: LoadFileFormatProps) => { const { projectId = '' }: Params = useParams(); + useEffect(()=>{ + if(! isEmptyString(newMigrationData?.destination_stack?.selectedStack?.value)){ + setSelectedStack(newMigrationData?.destination_stack?.selectedStack); + } + },[newMigrationData?.destination_stack?.selectedStack]) + //Handle new stack details const handleOnSave = async (data: Stack) => { if (isSaving) return false; @@ -249,25 +256,29 @@ const LoadStacks = (props: LoadFileFormatProps) => { setAllStack(stackArray); - //Set selected Stack - const selectedStackData = validateArray(stackArray) - ? stackArray.find( - (stack: IDropDown) => - stack?.value === newMigrationData?.destination_stack?.selectedStack?.value - ) - : DEFAULT_DROPDOWN; - - setSelectedStack(selectedStackData); + // //Set selected Stack + // const selectedStackData = validateArray(stackArray) + // ? stackArray.find( + // (stack: IDropDown) =>{ + // console.log("stack :::", selectedStack?.value) + + // return stack?.value === selectedStack?.value} + // ) + // : DEFAULT_DROPDOWN; + + // setSelectedStack(selectedStackData); + // console.log("inload more ::::", selectedStackData); + - const newMigrationDataObj: INewMigration = { - ...newMigrationData, - destination_stack: { - ...newMigrationData?.destination_stack, - selectedStack: selectedStackData - } - }; + // const newMigrationDataObj: INewMigration = { + // ...newMigrationData, + // destination_stack: { + // ...newMigrationData?.destination_stack, + // selectedStack: selectedStackData + // } + // }; - dispatch(updateNewMigrationData((newMigrationDataObj))); + // dispatch(updateNewMigrationData((newMigrationDataObj))); return { options: stackArray }; }; From 6bbee0ad6774600c9be79d3aab280b65b16e3e69 Mon Sep 17 00:00:00 2001 From: Sayali Joshi Date: Thu, 20 Jun 2024 16:21:30 +0530 Subject: [PATCH 036/759] Design corrections --- ui/src/components/ContentMapper/index.scss | 1 + .../LegacyCms/Actions/LoadUploadFile.tsx | 21 +++--- ui/src/components/LegacyCms/legacyCms.scss | 2 +- ui/src/components/MainHeader/index.scss | 4 +- .../components/MigrationExecution/index.scss | 19 ++++-- .../components/MigrationExecution/index.tsx | 32 +++++---- .../components/MigrationFlowHeader/index.tsx | 3 +- ui/src/components/SchemaModal/index.scss | 2 +- ui/src/components/SchemaModal/index.tsx | 6 +- ui/src/components/TestMigration/index.scss | 66 +++---------------- ui/src/components/TestMigration/index.tsx | 40 +---------- ui/src/pages/Migration/index.tsx | 5 +- ui/src/pages/Projects/index.tsx | 4 +- ui/src/scss/App.scss | 8 +++ 14 files changed, 78 insertions(+), 135 deletions(-) diff --git a/ui/src/components/ContentMapper/index.scss b/ui/src/components/ContentMapper/index.scss index 591460fed..3249fe800 100644 --- a/ui/src/components/ContentMapper/index.scss +++ b/ui/src/components/ContentMapper/index.scss @@ -29,6 +29,7 @@ border-bottom: 1px solid $color-brand-secondary-lightest; padding: $px-8 $px-12; .Search__v2 { + background-color: $color-brand-white-base; height: 2.5rem; width: 100%!important; .Search-input-show { diff --git a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx index 6997c85c7..7311d0bc4 100644 --- a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx @@ -27,7 +27,7 @@ const FileComponent = ({fileDetails}:Props ) => {
    {fileDetails?.isLocalPath && (!isEmptyString(fileDetails?.localPath) || !isEmptyString(fileDetails?.awsData?.awsRegion)) ? (
    - +
    ) : ( @@ -55,7 +55,7 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { const [showMessage, setShowMessage] = useState(!!newMigrationData?.legacy_cms?.uploadedFile?.isValidated); const [validationMessgae, setValidationMessage] = useState(''); const [isValidationAttempted, setIsValidationAttempted] = useState(false); - const [isDasabled, setIsDisabled] = useState(false); + const [isDisabled, setIsDisabled] = useState(false); const [isConfigLoading, setIsConfigLoading] = useState(true); const [cmsType, setCmsType]= useState(''); const [fileDetails, setFileDetails] = useState(newMigrationData?.legacy_cms?.uploadedFile?.file_details || {}); @@ -301,12 +301,17 @@ const LoadUploadFile = (props: LoadUploadFileProps) => {
    } - +
    diff --git a/ui/src/components/LegacyCms/legacyCms.scss b/ui/src/components/LegacyCms/legacyCms.scss index aa682eada..f4fe01167 100644 --- a/ui/src/components/LegacyCms/legacyCms.scss +++ b/ui/src/components/LegacyCms/legacyCms.scss @@ -104,7 +104,7 @@ font-size: 12px; } .validation-cta{ - margin: 10px 20px; + margin: $space-24 $space-20 0; } .success{ color: $color-brand-success-base; diff --git a/ui/src/components/MainHeader/index.scss b/ui/src/components/MainHeader/index.scss index b5609bdcf..fad380d74 100644 --- a/ui/src/components/MainHeader/index.scss +++ b/ui/src/components/MainHeader/index.scss @@ -2,7 +2,7 @@ .mainheader { background-color: $color-brand-white-base; - border-bottom: 1px solid $color-brand-secondary-lightest; + // border-bottom: 1px solid $color-brand-secondary-lightest; height: 3.5rem; justify-content: space-between; position: fixed; @@ -10,7 +10,7 @@ top: 0; display: flex; align-items: center; - z-index: 10; + z-index: 100; button { border: 0 none; } diff --git a/ui/src/components/MigrationExecution/index.scss b/ui/src/components/MigrationExecution/index.scss index 09cc16c8b..42f81c48b 100644 --- a/ui/src/components/MigrationExecution/index.scss +++ b/ui/src/components/MigrationExecution/index.scss @@ -4,8 +4,12 @@ .select-wrapper { display: flex; align-items: center; - justify-content: space-around; - margin-left: 5px; + .Field { + margin-bottom: 0; + } +} +.content-body.step-desc { + padding: 1rem 1.5rem; } .terminal-container { background-color: #000; @@ -39,12 +43,17 @@ div .step-component .action-component-body { padding: 5px 10px; margin: 5px; } -.icon-wrapper { +.arrow-wrapper { + align-items: center; display: flex; + height: 19.5px; margin-left: 30px; /* Adds space to the left of the icon */ margin-right: 30px; - margin-top: 20px; - align-items: center; + width: 23.5px; + &.Icon--original { + height: auto; + width: auto; + } } .execution-wrapper { diff --git a/ui/src/components/MigrationExecution/index.tsx b/ui/src/components/MigrationExecution/index.tsx index 3e78ef6fc..2706f78c4 100644 --- a/ui/src/components/MigrationExecution/index.tsx +++ b/ui/src/components/MigrationExecution/index.tsx @@ -1,25 +1,23 @@ -import { useEffect, useContext } from 'react'; -import { Icon, Button, Field, TextInput, FieldLabel } from '@contentstack/venus-components'; -import { UseDispatch, useSelector } from 'react-redux'; +import { useEffect } from 'react'; +import { Icon, Field, TextInput, FieldLabel } from '@contentstack/venus-components'; +import { useSelector, useDispatch } from 'react-redux'; // Services import { getCMSDataFromFile } from '../../cmsData/cmsSelector'; +// Redux +import { RootState } from '../../store'; +import { setMigrationData, updateMigrationData } from '../../store/slice/migrationDataSlice'; + // Utilities import { CS_ENTRIES } from '../../utilities/constants'; import { validateArray } from '../../utilities/functions'; -// Context -import { AppContext } from '../../context/app/app.context'; - // Interface import { DEFAULT_MIGRATION_EXECUTION } from '../../context/app/app.interface'; //stylesheet import './index.scss'; -import { useDispatch } from 'react-redux'; -import { RootState } from '../../store'; -import { setMigrationData, updateMigrationData } from '../../store/slice/migrationDataSlice'; const MigrationExecution = () => { //const { migrationData, updateMigrationData, newMigrationData } = useContext(AppContext); @@ -70,22 +68,28 @@ const MigrationExecution = () => {
    Path
    -
    Select your organization maintained on Contentstack.
    +
    Select your organization maintained on Contentstack.
    -
    {MigrationInformation && validateArray(MigrationInformation) && MigrationInformation?.map((item, index) => (
    - + {item?.title} - {getPlaceHolder(item?.title)} + {index < MigrationInformation?.length - 1 && ( - + )}
    ))} diff --git a/ui/src/components/MigrationFlowHeader/index.tsx b/ui/src/components/MigrationFlowHeader/index.tsx index 3a5979723..1b081efcf 100644 --- a/ui/src/components/MigrationFlowHeader/index.tsx +++ b/ui/src/components/MigrationFlowHeader/index.tsx @@ -51,6 +51,7 @@ const MigrationFlowHeader = ({ handleOnClick, isLoading }: MigrationFlowHeaderPr dispatch(updateNewMigrationData(DEFAULT_NEW_MIGRATION)) navigate(-1); } + return (
    @@ -76,7 +77,7 @@ const MigrationFlowHeader = ({ handleOnClick, isLoading }: MigrationFlowHeaderPr aria-label='Save and Continue' isLoading={isLoading} > - Save and Continue + {params?.stepId === '5' ? 'Start' : 'Save and Continue'}
    ) diff --git a/ui/src/components/SchemaModal/index.scss b/ui/src/components/SchemaModal/index.scss index 6cbf7e627..8065e9dd7 100644 --- a/ui/src/components/SchemaModal/index.scss +++ b/ui/src/components/SchemaModal/index.scss @@ -69,7 +69,7 @@ } } } - .title { + .field-title { color: $color-font-base; font-size: $size-font-large; font-weight: $font-weight-regular; diff --git a/ui/src/components/SchemaModal/index.tsx b/ui/src/components/SchemaModal/index.tsx index 120f657fd..27bf9b88f 100644 --- a/ui/src/components/SchemaModal/index.tsx +++ b/ui/src/components/SchemaModal/index.tsx @@ -38,7 +38,7 @@ const getTopLevelIcons = (field: FieldMapType) => { return icons['title']; } - if (field?.ContentstackFieldType === 'URL') { + if (field?.ContentstackFieldType === 'URL' || field?.ContentstackFieldType === 'single_line_text') { return icons['text']; } @@ -170,7 +170,7 @@ const TreeView = ({ schema = [] }: schemaType) => { )} - + {getChildFieldName(field?.otherCmsField, item?.otherCmsField)}
    @@ -220,7 +220,7 @@ const TreeView = ({ schema = [] }: schemaType) => { {hasNested && } - {item?.otherCmsField} + {item?.otherCmsField}
    {hasNested && generateNestedOutline(item, index)} diff --git a/ui/src/components/TestMigration/index.scss b/ui/src/components/TestMigration/index.scss index 5d6d4c6cb..d7711aea0 100644 --- a/ui/src/components/TestMigration/index.scss +++ b/ui/src/components/TestMigration/index.scss @@ -1,61 +1,11 @@ @import '../../scss/App.scss'; @import '../../scss/variables'; -.test { - background-color: #000000; - color: $color-brand-white-base; - height: 469px; - padding: 20px; - overflow-y: auto; - white-space: pre-wrap; - width: 100% !important; - box-sizing: border-box; -} - -div .step-component .action-component-body { - //margin-top: 60px !important; - width: 100% !important; - margin-left: 0px !important; -} -.cta-wrapper-test-migration { - border-top: 1px solid $color-base-gray-40; - bottom: 0; - left: 0; - padding: $space-12 $space-24 $space-12 $space-12; - position: fixed; - right: 0; - text-align: right; - width: 100%; - z-index: 1; -} -.selectedOptions { - color: $color-base-gray-20; - font-size: $size-font-large; - font-weight: $font-weight-semi-bold; - padding: 5px 0; - margin: 20px 0; -} -.icon-wrapper { - display: flex; - margin-left: 30px; /* Adds space to the left of the icon */ - margin-right: 30px; - margin-top: 20px; - align-items: center; -} - -.execution-wrapper { - display: flex; - background-color: $color-base-white-5; - color: $color-font-base; - height: $px-40; - justify-content: center; - align-items: center; - width: 100%; - text-align: center !important; - padding: 0 !important; - border: 1px solid $color-brand-secondary-lightest; - border-radius: var(--TermCount, 5px); -} -.stack-link { - padding: 10px 10px; -} + + + + + + + + diff --git a/ui/src/components/TestMigration/index.tsx b/ui/src/components/TestMigration/index.tsx index 45eeec98d..d3360734c 100644 --- a/ui/src/components/TestMigration/index.tsx +++ b/ui/src/components/TestMigration/index.tsx @@ -1,7 +1,7 @@ -import { useContext, useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { Field, FieldLabel, TextInput, Link, Icon, Tooltip } from '@contentstack/venus-components'; -import { UseDispatch,useSelector } from 'react-redux'; +import { useSelector } from 'react-redux'; // Services import { getCMSDataFromFile } from '../../cmsData/cmsSelector'; @@ -12,20 +12,12 @@ import { CS_ENTRIES } from '../../utilities/constants'; // Interface import { MigrationType } from './testMigration.interface'; -//stylesheet -import './index.scss'; -import { AppContext } from '../../context/app/app.context'; - const TestMigration = () => { const [data, setData] = useState({}); const newMigrationData = useSelector((state:any)=>state?.migration?.newMigrationData); - /** ALL HOOKS Here */ - const { projectId = '' } = useParams(); - const navigate = useNavigate(); - /********** ALL USEEFFECT HERE *************/ useEffect(() => { //check if offline CMS data field is set to true, if then read data from cms data file. @@ -37,10 +29,6 @@ const TestMigration = () => { }); }, []); - const { subtitle, cta } = data; - - - return (
    @@ -89,30 +77,6 @@ const TestMigration = () => {
    - {/* -
    -
    - {cta && cta?.title && ( - - - - )} -
    */}
    ); }; diff --git a/ui/src/pages/Migration/index.tsx b/ui/src/pages/Migration/index.tsx index 978729b6c..5c0ebb747 100644 --- a/ui/src/pages/Migration/index.tsx +++ b/ui/src/pages/Migration/index.tsx @@ -98,8 +98,7 @@ const Migration = () => { } }; - const createStepper = (projectData:any,handleStepChange: (currentStep: number) => void) => { - + const createStepper = (projectData: MigrationResponse,handleStepChange: (currentStep: number) => void) => { const steps = [ { data: { } } - const handleOnClickTestMigration = async (event: MouseEvent) => { + const handleOnClickTestMigration = async () => { setIsLoading(false); const url = `/projects/${projectId}/migration/steps/5`; diff --git a/ui/src/pages/Projects/index.tsx b/ui/src/pages/Projects/index.tsx index e26d3b92c..8b42f6306 100644 --- a/ui/src/pages/Projects/index.tsx +++ b/ui/src/pages/Projects/index.tsx @@ -61,7 +61,9 @@ const Projects = () => { const [loadStatus, setLoadStatus] = useState(true); const [searchText, setSearchText] = useState(search); - + useEffect(()=>{ + dispatch(getUserDetails()); + },[]); const fetchProjects = async () => { if (selectedOrganisation?.value) { diff --git a/ui/src/scss/App.scss b/ui/src/scss/App.scss index 0d931e43d..5a960be43 100644 --- a/ui/src/scss/App.scss +++ b/ui/src/scss/App.scss @@ -45,6 +45,7 @@ display: flex; height: 100vh; margin-left: auto; + overflow: hidden; .Icon--original { height: 1.25rem; width: 1.25rem; @@ -336,6 +337,7 @@ h2 { margin-bottom: $space-30; } .migration-steps-wrapper { + border-top: 1px solid $color-brand-secondary-lightest; margin-top: 3.5rem; h1 { color: $color-black-2121; @@ -400,9 +402,15 @@ h2 { } .content-body { border-top: 1px solid $color-base-gray-40; + line-height: $line-height-default; padding: $px-24 $px-24; } } +.layout-container { + .PageLayout__content { + border-top: 1px solid $color-brand-secondary-lightest; + } +} ::-webkit-input-placeholder { color: $color-stepper-title !important; } From 784fd49c05b03c7e268ff6dc6046b873c5377e51 Mon Sep 17 00:00:00 2001 From: AishDani Date: Thu, 20 Jun 2024 17:06:53 +0530 Subject: [PATCH 037/759] refactor:resolved not getting group and refernce options in mapper dropdowns --- api/src/services/org.service.ts | 6 ++-- .../ContentMapper/contentMapper.interface.ts | 2 +- ui/src/components/ContentMapper/index.tsx | 34 ++++++++++++------- ui/src/pages/Projects/index.tsx | 6 +++- 4 files changed, 31 insertions(+), 17 deletions(-) diff --git a/api/src/services/org.service.ts b/api/src/services/org.service.ts index 3c13f84e8..bc69192e8 100644 --- a/api/src/services/org.service.ts +++ b/api/src/services/org.service.ts @@ -51,9 +51,9 @@ const getAllStacks = async (req: Request): Promise => { let stacks = res?.data?.stacks; if(search){ stacks = stacks.filter((stack:{name: string, description:string})=>{ - const stackName = stack.name?.toLowerCase(); - const stackDescription = stack.description?.toLowerCase(); - return stackName.includes(search) || stackDescription.includes(search); + const stackName = stack?.name?.toLowerCase(); + const stackDescription = stack?.description?.toLowerCase(); + return stackName?.includes(search) || stackDescription?.includes(search); }) } diff --git a/ui/src/components/ContentMapper/contentMapper.interface.ts b/ui/src/components/ContentMapper/contentMapper.interface.ts index 2708d800c..7f07c28b6 100644 --- a/ui/src/components/ContentMapper/contentMapper.interface.ts +++ b/ui/src/components/ContentMapper/contentMapper.interface.ts @@ -86,7 +86,7 @@ export interface FieldMetadata { export interface ContentTypesSchema { uid?: string; display_name?: string; - data_type?: 'text' | 'number' | 'isodate' | 'json' | 'file'; + data_type?: 'text' | 'number' | 'isodate' | 'json' | 'file' | 'reference' | 'group'; field_metadata?: FieldMetadata; enum?: any; } diff --git a/ui/src/components/ContentMapper/index.tsx b/ui/src/components/ContentMapper/index.tsx index 9168fd9bd..f3f3def51 100644 --- a/ui/src/components/ContentMapper/index.tsx +++ b/ui/src/components/ContentMapper/index.tsx @@ -641,17 +641,18 @@ const ContentMapper = () => { 'multiline': 'multiline', 'HTML Rich text Editor': 'allow_rich_text', 'JSON Rich Text Editor': 'json', - group: 'Group', - URL: 'url', - file: 'file', - number: 'number', - Date: 'isodate', - boolean: 'boolean', - link: 'link', - reference: 'reference', - dropdown: 'enum', - radio: 'enum', - CheckBox: 'enum' + 'Rich Text':'json', + 'Group': 'Group', + 'URL': 'url', + 'file': 'file', + 'number': 'number', + 'Date': 'isodate', + 'boolean': 'boolean', + 'link': 'link', + 'reference': 'reference', + 'dropdown': 'enum', + 'radio': 'enum', + 'CheckBox': 'enum' }; const OptionsForRow: optionsType[] = []; // let ContentTypeSchema: ContentTypesSchema | undefined; @@ -666,7 +667,7 @@ const ContentMapper = () => { if (contentTypeSchema && validateArray(contentTypeSchema)) { const fieldTypeToMatch = fieldsOfContentstack[data?.otherCmsType as keyof Mapping]; - contentTypeSchema.forEach((value) => { + contentTypeSchema.forEach((value) => { switch (fieldTypeToMatch) { case 'text': if ( @@ -720,8 +721,16 @@ const ContentMapper = () => { } break; case 'Group': + if (value?.data_type === 'group') { OptionsForRow.push({ label: value?.display_name, value: value, isDisabled: false }); + } + break; + case 'reference': + if (value?.data_type === 'reference') { + OptionsForRow.push({ label: value?.display_name, value: value, isDisabled: false }); + } break; + default: OptionsForRow.push({ label: 'No matches found', @@ -744,6 +753,7 @@ const ContentMapper = () => { ...option, isDisabled: selectedOptions?.includes(option?.label ?? '') })); + return (
    diff --git a/ui/src/pages/Projects/index.tsx b/ui/src/pages/Projects/index.tsx index e26d3b92c..d73b02d68 100644 --- a/ui/src/pages/Projects/index.tsx +++ b/ui/src/pages/Projects/index.tsx @@ -85,10 +85,14 @@ const Projects = () => { // fetchProjects(); }; + useEffect(()=>{ dispatch(getUserDetails()); + },[dispatch]); - },[dispatch]) + useEffect(()=>{ + dispatch(getUserDetails()); + },[]); useEffect(() => { fetchData(); From 262b892c919374bd53a258ca6b2e9aee0a62e80c Mon Sep 17 00:00:00 2001 From: AishDani Date: Mon, 24 Jun 2024 18:02:33 +0530 Subject: [PATCH 038/759] feat:added status key in mapper --- api/src/models/contentTypesMapper-lowdb.ts | 1 + api/src/services/contentMapper.service.ts | 19 +++++++++++++++++-- .../migration-sitecore/libs/contenttypes.js | 1 + uplaode-api/src/config/index.ts | 2 +- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/api/src/models/contentTypesMapper-lowdb.ts b/api/src/models/contentTypesMapper-lowdb.ts index 93f22fb23..3846c998e 100644 --- a/api/src/models/contentTypesMapper-lowdb.ts +++ b/api/src/models/contentTypesMapper-lowdb.ts @@ -9,6 +9,7 @@ interface ContentTypesMapper { updateAt: Date; contentstackTitle: string; contentstackUid: string; + status:number; fieldMapping: []; } diff --git a/api/src/services/contentMapper.service.ts b/api/src/services/contentMapper.service.ts index 3c5fa1ec6..29fe02a94 100644 --- a/api/src/services/contentMapper.service.ts +++ b/api/src/services/contentMapper.service.ts @@ -96,15 +96,28 @@ const getContentTypes = async (req: Request) => { } const contentMapperId = projectDetails.content_mapper; await ContentTypesMapperModelLowdb.read(); + await FieldMapperModel.read(); + const content_mapper: any = []; contentMapperId.map((data: any) => { const contentMapperData = ContentTypesMapperModelLowdb.chain .get("ContentTypesMappers") .find({ id: data }) .value(); + + const fieldData = contentMapperData?.fieldMapping.map((fields: any) => { + const fieldMapper = FieldMapperModel.chain + .get("field_mapper") + .find({ id: fields }) + .value(); + return fieldMapper; + }); + + const fieldMapping: any = fieldData; + //console.info("filedMapping ::::::::", fieldMapping) + content_mapper.push(contentMapperData); }); - if (!isEmpty(content_mapper)) { if (search) { const filteredResult = content_mapper @@ -123,6 +136,7 @@ const getContentTypes = async (req: Request) => { a.otherCmsTitle.localeCompare(b.otherCmsTitle) ) ?.slice(skip, Number(skip) + Number(limit)); + //console.info("result::::::::::::", result) } } @@ -281,7 +295,6 @@ const updateContentType = async (req: Request) => { .get("ContentTypesMappers") .findIndex({ id: contentTypeId }) .value(); - ContentTypesMapperModelLowdb.update((data: any) => { if (updateIndex >= 0) { data.ContentTypesMappers[updateIndex].otherCmsTitle = @@ -296,7 +309,9 @@ const updateContentType = async (req: Request) => { contentTypeData?.contentstackTitle; data.ContentTypesMappers[updateIndex].contentstackUid = contentTypeData?.contentstackUid; + data.ContentTypesMappers[updateIndex].status = 2; } + console.info("in update conte type ============>", data.ContentTypesMappers[updateIndex].status,data.ContentTypesMappers[updateIndex] ) }); if (updateIndex < 0) { diff --git a/uplaode-api/migration-sitecore/libs/contenttypes.js b/uplaode-api/migration-sitecore/libs/contenttypes.js index 0de0efd3e..da41e8872 100644 --- a/uplaode-api/migration-sitecore/libs/contenttypes.js +++ b/uplaode-api/migration-sitecore/libs/contenttypes.js @@ -483,6 +483,7 @@ const contentTypeMapper = ({ components, standardValues, content_type, basePath, const contentTypeMaker = ({ template, basePath, sitecore_folder }) => { const content_type = { id: template?.id, + status:1, "otherCmsTitle": template?.name, "otherCmsUid": template?.key, "isUpdated": false, diff --git a/uplaode-api/src/config/index.ts b/uplaode-api/src/config/index.ts index cd32fac5d..6bb597f49 100644 --- a/uplaode-api/src/config/index.ts +++ b/uplaode-api/src/config/index.ts @@ -9,5 +9,5 @@ export default { bucketName: 'migartion-test', buketKey: 'project/package 45.zip' }, - localPath: '/Users/umesh.more/Downloads/package 45.zip' + localPath: '/Users/aishwarya.dani/Downloads/package 45.zip' }; From 452f43ed7fda59b2a24f4cc785405017ad7582bd Mon Sep 17 00:00:00 2001 From: Sayali Joshi Date: Tue, 25 Jun 2024 00:15:20 +0530 Subject: [PATCH 039/759] Login module fixes --- ui/src/components/Card/card.scss | 1 + ui/src/components/ContentMapper/index.scss | 3 ++- ui/src/components/ContentMapper/index.tsx | 10 ++++------ ui/src/pages/Home/index.tsx | 2 +- ui/src/pages/RegionalLogin/index.scss | 5 ++++- ui/src/scss/App.scss | 6 +++++- 6 files changed, 17 insertions(+), 10 deletions(-) diff --git a/ui/src/components/Card/card.scss b/ui/src/components/Card/card.scss index fa090c38a..98d188128 100644 --- a/ui/src/components/Card/card.scss +++ b/ui/src/components/Card/card.scss @@ -4,6 +4,7 @@ background: $color-brand-white-base; border-radius: 0.6rem; border: 1px solid $color-brand-secondary-lightest; + margin: 0 20px 20px; transition: box-shadow 0.3s ease; width: 20rem; } diff --git a/ui/src/components/ContentMapper/index.scss b/ui/src/components/ContentMapper/index.scss index 3249fe800..e3593fe95 100644 --- a/ui/src/components/ContentMapper/index.scss +++ b/ui/src/components/ContentMapper/index.scss @@ -66,7 +66,8 @@ } .dropdown-align { .Dropdown__menu--primary { - right: 0.25rem; + right: 0; + top: 1.5rem; } } .content-type-list { diff --git a/ui/src/components/ContentMapper/index.tsx b/ui/src/components/ContentMapper/index.tsx index f3f3def51..331d68d0b 100644 --- a/ui/src/components/ContentMapper/index.tsx +++ b/ui/src/components/ContentMapper/index.tsx @@ -1007,7 +1007,6 @@ const ContentMapper = () => { {active == index && ( - { } ]} type="click" - isEllipse + withIcon dropDownPosition="left" className='dropdown-align' > - + - {/* + /* handleOnClick(content?.otherCmsTitle)} /> - */} - + */ )} ))} diff --git a/ui/src/pages/Home/index.tsx b/ui/src/pages/Home/index.tsx index 03a7d1e0b..2436eaf71 100644 --- a/ui/src/pages/Home/index.tsx +++ b/ui/src/pages/Home/index.tsx @@ -36,7 +36,7 @@ const Home = () => {
    {heading &&

    {heading}

    } - {description && parse(description)} + {description &&
    {parse(description)}
    } {cta?.title && ( diff --git a/ui/src/pages/RegionalLogin/index.scss b/ui/src/pages/RegionalLogin/index.scss index 548c6e717..2e8ad1f31 100644 --- a/ui/src/pages/RegionalLogin/index.scss +++ b/ui/src/pages/RegionalLogin/index.scss @@ -60,9 +60,12 @@ background-color: rgba(0, 0, 0, 0); border-top: 0 solid rgba(34, 34, 34, 0.125); padding: 0.625rem 1.25rem; + .stretched-link { + line-height: $line-height-default; + } [class*='link-arrow'] { &:after { - top: 8px; + top: 6px; } } } diff --git a/ui/src/scss/App.scss b/ui/src/scss/App.scss index 5a960be43..3fd7c1f09 100644 --- a/ui/src/scss/App.scss +++ b/ui/src/scss/App.scss @@ -315,9 +315,13 @@ h1 { h2 { color: $color-base-black-base; font-size: $size-font-5-xl; - font-weight: $font-weight-bold; line-height: 1.5; } +.welcome-para { + p { + color: $color-font-black; + } +} .pb-32 { padding-bottom: $px-32; } From 1e6fc433f11602d0738921e9f7c1fd940036161b Mon Sep 17 00:00:00 2001 From: snehalsankhe Date: Tue, 25 Jun 2024 11:55:31 +0530 Subject: [PATCH 040/759] Solved issues --- .../DestinationStack/Actions/LoadStacks.tsx | 17 ++++------ .../DestinationStack/DestinationStack.scss | 8 +++-- ui/src/components/DestinationStack/index.tsx | 5 --- ui/src/components/MainHeader/index.scss | 32 +++++++++---------- ui/src/pages/Migration/index.tsx | 5 ++- 5 files changed, 30 insertions(+), 37 deletions(-) diff --git a/ui/src/components/DestinationStack/Actions/LoadStacks.tsx b/ui/src/components/DestinationStack/Actions/LoadStacks.tsx index 183fb08ed..4bc2c2792 100644 --- a/ui/src/components/DestinationStack/Actions/LoadStacks.tsx +++ b/ui/src/components/DestinationStack/Actions/LoadStacks.tsx @@ -46,7 +46,7 @@ const LoadStacks = (props: LoadFileFormatProps) => { const { projectId = '' }: Params = useParams(); useEffect(()=>{ - if(! isEmptyString(newMigrationData?.destination_stack?.selectedStack?.value)){ + if(!isEmptyString(newMigrationData?.destination_stack?.selectedStack?.value)){ setSelectedStack(newMigrationData?.destination_stack?.selectedStack); } },[newMigrationData?.destination_stack?.selectedStack]) @@ -110,11 +110,9 @@ const LoadStacks = (props: LoadFileFormatProps) => { }; /**** ALL METHODS HERE ****/ - const [placeholder, setPlaceholder] = useState('Select a stack'); //Handle Legacy cms selection const handleDropdownChange = (name: string) => (data: IDropDown) => { - const stackChanged = selectedStack?.value !== data?.value; const stackCleared = data?.value === '' || data?.value === null || data === null; if (data?.value == '+ Create a new Stack') { handleCreateNewStack() @@ -135,7 +133,6 @@ const LoadStacks = (props: LoadFileFormatProps) => { } }; - dispatch(updateNewMigrationData((newMigrationDataObj))); if (!stackCleared) { if (props?.handleStepChange) { @@ -161,7 +158,6 @@ const LoadStacks = (props: LoadFileFormatProps) => { created_at: stack?.created_at })) : []; - stackArray.sort( (a: IDropDown, b: IDropDown) => new Date(b?.created_at)?.getTime() - new Date(a?.created_at)?.getTime() @@ -218,12 +214,8 @@ const LoadStacks = (props: LoadFileFormatProps) => { const loadMoreOptions: any = async ({ search, - skip, - limit }: { search: string; - skip: number; - limit: number; }) => { const stackData = await getAllStacksInOrg( selectedOrganisation?.value, search @@ -282,6 +274,9 @@ const LoadStacks = (props: LoadFileFormatProps) => { return { options: stackArray }; }; + + const emptyStackValue = selectedStack?.value === undefined || selectedStack?.value === '' || selectedStack?.value === null + const onBlurDropdown = () => { if (!isEmptyString(selectedStack?.value)) { if (props?.handleStepChange) { @@ -303,15 +298,17 @@ const LoadStacks = (props: LoadFileFormatProps) => { onBlur={onBlurDropdown} canEditOption={true} value={selectedStack} - isClearable={true} isSearchable={true} + isClearable={!emptyStackValue ? true : false } width="600px" isDisabled={props?.stepComponentProps?.isSummary || false} placeholder={placeholder} limit={10} updateOption={()=> undefined} + error={emptyStackValue ? true : false} />
    + {emptyStackValue &&
    Please select a stack
    }
    diff --git a/ui/src/components/DestinationStack/DestinationStack.scss b/ui/src/components/DestinationStack/DestinationStack.scss index 726a0d15b..e56582dd1 100644 --- a/ui/src/components/DestinationStack/DestinationStack.scss +++ b/ui/src/components/DestinationStack/DestinationStack.scss @@ -27,8 +27,8 @@ } .Dropdown-wrapper { .css-b8ldur-Input { - // border: 1px solid red; - cursor: not-allowed; + margin: 0; + padding: 0; } } .stackselect { @@ -107,6 +107,10 @@ padding: 0 !important; } } + .errorMessage { + color: $color-brand-warning-medium; + font-size: $size-font-small; + } } diff --git a/ui/src/components/DestinationStack/index.tsx b/ui/src/components/DestinationStack/index.tsx index 76cd29810..f6ee5591b 100644 --- a/ui/src/components/DestinationStack/index.tsx +++ b/ui/src/components/DestinationStack/index.tsx @@ -2,7 +2,6 @@ import { useEffect, useRef, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import AutoVerticalStepper from '../Stepper/VerticalStepper/AutoVerticalStepper'; import { getDestinationStackSteps } from './StepperSteps'; -import { useNavigate, useParams } from 'react-router-dom'; import { CircularLoader } from '@contentstack/venus-components'; import { CS_ENTRIES } from '../../utilities/constants'; import { @@ -15,10 +14,6 @@ import './DestinationStack.scss'; import { isEmptyString, validateArray } from '../../utilities/functions'; import { getAllStacksInOrg } from '../../services/api/stacks.service'; import { MigrationResponse, StackResponse } from '../../services/api/service.interface'; -// import { -// updateCurrentStepData, -// updateDestinationStack -// } from '../../services/api/migration.service'; import { getCMSDataFromFile } from '../../cmsData/cmsSelector'; import { RootState } from '../../store'; import { updateMigrationData, updateNewMigrationData } from '../../store/slice/migrationDataSlice'; diff --git a/ui/src/components/MainHeader/index.scss b/ui/src/components/MainHeader/index.scss index fad380d74..fa7155642 100644 --- a/ui/src/components/MainHeader/index.scss +++ b/ui/src/components/MainHeader/index.scss @@ -2,7 +2,6 @@ .mainheader { background-color: $color-brand-white-base; - // border-bottom: 1px solid $color-brand-secondary-lightest; height: 3.5rem; justify-content: space-between; position: fixed; @@ -34,40 +33,39 @@ .organisationWrapper { margin-left: 1.063rem; &:focus { - box-shadow: 0 0 1px $color-brand-primary-base, 0 0 0 4px #bbb4f4; + box-shadow: none; } } + .Dropdown { + &:focus { + box-shadow: none; + } + } .Dropdown-wrapper { padding: 0 18px; } - .Dropdown__header__value { - overflow: visible; - line-height: 1.2; - } - .Dropdown__header__label { - margin-bottom: 0; - } .Dropdown.Dropdown--hover .Dropdown__menu--primary { top: 2.5rem; } .organisationWrapper { + &:focus { + box-shadow: none; + } .Dropdown__header__value { color: #475161; max-width: 11.1875rem; width: auto; - // overflow: hidden; + color: $color-black-222 !important; + line-height: $line-height-reset; } .Dropdown__menu--primary .Dropdown__menu__list__item, .Dropdown__menu--secondary .Dropdown__menu__list__item, .Dropdown__menu--tertiary .Dropdown__menu__list__item { max-width: 14.5rem; } + .Dropdown__header__label { + line-height: $line-height-reset; + margin-bottom: 8px; + } } } -.Dropdown__header__label { - line-height: $line-height-reset; -} -.Dropdown__header__value { - color: $color-black-222 !important; - line-height: $line-height-reset; -} diff --git a/ui/src/pages/Migration/index.tsx b/ui/src/pages/Migration/index.tsx index 5c0ebb747..67d4cafb1 100644 --- a/ui/src/pages/Migration/index.tsx +++ b/ui/src/pages/Migration/index.tsx @@ -141,7 +141,6 @@ const Migration = () => { ] return steps; } - const handleClick = () => { // Call handleStepChange function @@ -197,7 +196,7 @@ const Migration = () => { const handleOnClickDestinationStack = async (event: MouseEvent) => { setIsLoading(true); - if(isCompleted){ + if(isCompleted && !isEmptyString(newMigrationData?.destination_stack?.selectedStack?.value)){ event?.preventDefault(); //Update Data in backend await updateDestinationStack(selectedOrganisation?.value, projectId, { @@ -207,11 +206,11 @@ const Migration = () => { const res = await updateCurrentStepData(selectedOrganisation?.value, projectId); if (res) { setIsLoading(false); - const url = `/projects/${projectId}/migration/steps/3`; navigate(url, { replace: true }); } } else{ + setIsLoading(false); Notification({ notificationContent: { text: 'Please complete all steps' }, type: 'warning' From 13b205e1dd6151a7f4c715efa5e197adee4e6d67 Mon Sep 17 00:00:00 2001 From: snehalsankhe Date: Tue, 25 Jun 2024 12:55:13 +0530 Subject: [PATCH 041/759] solved bugs --- ui/src/components/Card/card.scss | 1 - ui/src/components/Card/index.tsx | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/ui/src/components/Card/card.scss b/ui/src/components/Card/card.scss index 98d188128..fa090c38a 100644 --- a/ui/src/components/Card/card.scss +++ b/ui/src/components/Card/card.scss @@ -4,7 +4,6 @@ background: $color-brand-white-base; border-radius: 0.6rem; border: 1px solid $color-brand-secondary-lightest; - margin: 0 20px 20px; transition: box-shadow 0.3s ease; width: 20rem; } diff --git a/ui/src/components/Card/index.tsx b/ui/src/components/Card/index.tsx index 32c6c3fd9..230857fa9 100644 --- a/ui/src/components/Card/index.tsx +++ b/ui/src/components/Card/index.tsx @@ -58,7 +58,7 @@ const CardList = ({ project }: ProjectType) => { }, [selectedOrganisation?.value, project?.id]); return ( -
    +
    onClickProject(project?.id || '')}>
    From e41f8f915d00304b164720ab61d440426e35e54e Mon Sep 17 00:00:00 2001 From: AishDani Date: Tue, 25 Jun 2024 14:19:02 +0530 Subject: [PATCH 042/759] refactor:css bugs in legacy cms --- ui/src/cmsData/legacyCms.json | 4 ++-- ui/src/components/Common/Card/card.tsx | 4 ++-- ui/src/components/DestinationStack/index.tsx | 1 + .../LegacyCms/Actions/LoadFileFormat.tsx | 2 +- .../LegacyCms/Actions/LoadSelectCms.tsx | 2 +- ui/src/components/LegacyCms/index.tsx | 1 + ui/src/components/LegacyCms/legacyCms.scss | 7 ++++--- .../HorizontalStepper/HorizontalStepper.scss | 5 +++-- .../VerticalStepper/AutoVerticalStepper.scss | 16 +++++++++++++--- .../VerticalStepper/AutoVerticalStepper.tsx | 14 +++++++++----- 10 files changed, 37 insertions(+), 19 deletions(-) diff --git a/ui/src/cmsData/legacyCms.json b/ui/src/cmsData/legacyCms.json index f3359ecc9..08ef2bfd7 100644 --- a/ui/src/cmsData/legacyCms.json +++ b/ui/src/cmsData/legacyCms.json @@ -350,7 +350,7 @@ "uid": "cs7c935e15de9ea7c8" }, "title": "File Format", - "description": "Click to read the document and subsequently continue with migration process.", + "description": "The file format compatible with the above cms is as follows.", "step_lock_text": "Editing this step is currently disabled. To make changes in Draft mode, please deactivate the migration.", "lock": false, "active": true, @@ -362,7 +362,7 @@ "uid": "cs0279f1f0ce13e83e" }, "title": "Imported File", - "description": "Select File to upload CMS Data.", + "description": "The uploaded file is as follows.", "step_lock_text": "Editing this step is currently disabled. To make changes in Draft mode, please deactivate the migration.", "lock": false, "active": true, diff --git a/ui/src/components/Common/Card/card.tsx b/ui/src/components/Common/Card/card.tsx index 178e68d20..fc0a9b7e1 100644 --- a/ui/src/components/Common/Card/card.tsx +++ b/ui/src/components/Common/Card/card.tsx @@ -1,4 +1,4 @@ -import { Icon, Radio, Tooltip } from '@contentstack/venus-components'; +import { Icon, Paragraph, Radio, Tooltip } from '@contentstack/venus-components'; import { MouseEvent, useState } from 'react'; import WordWrapper from '../WordWrapper/WordWrapper'; import { addDomainInPath } from '../../../utilities/functions'; @@ -72,7 +72,7 @@ const Card = ({ data, selectedCard, onCardClick, cardType, idField = 'id' }: Car
    - +
    ); diff --git a/ui/src/components/DestinationStack/index.tsx b/ui/src/components/DestinationStack/index.tsx index 76cd29810..f2e5b0283 100644 --- a/ui/src/components/DestinationStack/index.tsx +++ b/ui/src/components/DestinationStack/index.tsx @@ -220,6 +220,7 @@ const DestinationStackComponent = ({ description={migrationData?.destinationStackData?.description} ref={autoVerticalStepperComponent} isEdit={!isMigrationLocked} + isRequired={false} handleOnAllStepsComplete={handleAllStepsComplete} />
    diff --git a/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx b/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx index 4843f6680..4838fc988 100644 --- a/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx @@ -101,7 +101,7 @@ const LoadFileFormat = (props: LoadFileFormatProps) => { return (
    -
    +
    {validateArray(allowed_file_formats) ? ( allowed_file_formats?.map((data: ICardType, index: number) => (
    diff --git a/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx b/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx index e35afc5f0..906eb3c88 100644 --- a/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx @@ -204,7 +204,7 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { : ( cmsData && validateArray(cmsData) && ( -
    +
    {cmsData?.map((data: ICMSType) => ( void; }; @@ -76,7 +76,7 @@ const AutoVerticalStepper = React.forwardRef< } }; - const StepperStepTitleCreator: (data: any) => JSX.Element = (data: any) => { + const StepperStepTitleCreator: (data: any,isRequired:boolean) => JSX.Element = (data: any, isRequired:boolean) => { const showSpan = data?.title == 'Orgnization' ? (read only) : '' return ( <> @@ -84,6 +84,8 @@ const AutoVerticalStepper = React.forwardRef<
    + {isRequired && } + {data?.ifReadonly && (read only)}
    {data.titleNote ? data.titleNote : ''} @@ -96,6 +98,7 @@ const AutoVerticalStepper = React.forwardRef< ) : null} */}
    + {/* */} {data.description &&
    {data.description}
    } ); @@ -153,7 +156,8 @@ const AutoVerticalStepper = React.forwardRef< const getStepStatus = (idx: number) => { return stepStatus[idx]; }; - + console.log("steps :::::", steps); + return (
    {props?.description &&
    {props?.description}
    } @@ -173,7 +177,7 @@ const AutoVerticalStepper = React.forwardRef< style={{ paddingBottom: '10px' }} >
    - {StepperStepTitleCreator(step)} + {StepperStepTitleCreator(step, props?.isRequired)}
    From 4ea7e1e4fd52173a09bbf63ddf8a14be7849b7c3 Mon Sep 17 00:00:00 2001 From: AishDani Date: Tue, 25 Jun 2024 14:23:46 +0530 Subject: [PATCH 043/759] refactor:removed console --- .../components/Stepper/VerticalStepper/AutoVerticalStepper.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx b/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx index 4bf9f1b03..96907ae37 100644 --- a/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx +++ b/ui/src/components/Stepper/VerticalStepper/AutoVerticalStepper.tsx @@ -98,7 +98,6 @@ const AutoVerticalStepper = React.forwardRef< ) : null} */}
    - {/* */} {data.description &&
    {data.description}
    } ); @@ -156,8 +155,6 @@ const AutoVerticalStepper = React.forwardRef< const getStepStatus = (idx: number) => { return stepStatus[idx]; }; - console.log("steps :::::", steps); - return (
    {props?.description &&
    {props?.description}
    } From 10c9169772c4caf88e14b41ca32897f35b762503 Mon Sep 17 00:00:00 2001 From: Sayali Joshi Date: Tue, 25 Jun 2024 15:03:28 +0530 Subject: [PATCH 044/759] [CMG-127] - Empty Project dashboard | Search field should not be displayed --- ui/src/components/ProjectsHeader/index.tsx | 52 ++++++++-------------- ui/src/pages/Projects/index.scss | 6 ++- 2 files changed, 23 insertions(+), 35 deletions(-) diff --git a/ui/src/components/ProjectsHeader/index.tsx b/ui/src/components/ProjectsHeader/index.tsx index 493867fc6..808f6a035 100644 --- a/ui/src/components/ProjectsHeader/index.tsx +++ b/ui/src/components/ProjectsHeader/index.tsx @@ -24,39 +24,25 @@ const ProjectsHeader = ({ const SearchProject = ( <> - {allProject && allProject?.length > 0 ? ( -
    - - search.replace(/\s/g, '').length - ? setSearchText(search?.trim()) - : setSearchText(search) - } - width="large" - onClear={true} - onClick={setFocus} - value={searchText} - debounceSearch={true} - id="search-project-input" - /> -
    - ) : ( - searchText?.length > 0 && ( -
    - setSearchText(search)} - onClear={true} - onClick={setFocus} - value={searchText} - debounceSearch={true} - id="search-project-input" - /> -
    - ) - )} +
    + + search.replace(/\s/g, '').length + ? setSearchText(search?.trim()) + : setSearchText(search) + } + width="large" + onClear={true} + onClick={setFocus} + value={searchText} + debounceSearch={true} + id="search-project-input" + version="v2" + disabled={allProject && allProject?.length <= 0} + /> +
    ); diff --git a/ui/src/pages/Projects/index.scss b/ui/src/pages/Projects/index.scss index 926d50365..8ca4b3d61 100644 --- a/ui/src/pages/Projects/index.scss +++ b/ui/src/pages/Projects/index.scss @@ -1,8 +1,10 @@ @import '../../scss/variables'; .project-search-wrapper { - margin-top: 2px; - margin-left: 8px; + margin-left: $px-12; + .Search { + height: 2.5rem; + } .Search__input { border: 1px solid $color-base-gray-40; } From e8ddc5095f0f1883a0703cd4e1bd67420628427d Mon Sep 17 00:00:00 2001 From: Sayali Joshi Date: Tue, 25 Jun 2024 17:02:03 +0530 Subject: [PATCH 045/759] [CMG-146] - Search | When enter space multiple times and then search for existing Project name, it doesnt show result --- ui/src/components/ProjectsHeader/index.tsx | 40 +++++++++++++++++++--- ui/src/pages/Projects/index.scss | 4 +-- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/ui/src/components/ProjectsHeader/index.tsx b/ui/src/components/ProjectsHeader/index.tsx index 808f6a035..e52a4a05c 100644 --- a/ui/src/components/ProjectsHeader/index.tsx +++ b/ui/src/components/ProjectsHeader/index.tsx @@ -10,7 +10,6 @@ const ProjectsHeader = ({ setSearchText, searchPlaceholder, cta, - restore_cta: restoreCta, allProject, handleModal }: ProjectsHeaderType) => { @@ -29,9 +28,7 @@ const ProjectsHeader = ({ placeholder={searchPlaceholder} type="secondary" onChange={(search: string) => - search.replace(/\s/g, '').length - ? setSearchText(search?.trim()) - : setSearchText(search) + setSearchText(search?.trim()) } width="large" onClear={true} @@ -40,9 +37,42 @@ const ProjectsHeader = ({ debounceSearch={true} id="search-project-input" version="v2" - disabled={allProject && allProject?.length <= 0} + disabled={allProject && allProject?.length <= 0 && searchText?.length <= 0} />
    + {/* {allProject && allProject?.length > 0 ? ( +
    + + search.replace(/\s/g, '').length + ? setSearchText(search?.trim()) + : setSearchText(search) + } + width="large" + onClear={true} + onClick={setFocus} + value={searchText} + debounceSearch={true} + id="search-project-input" + /> +
    + ) : ( + searchText?.length > 0 && ( +
    + setSearchText(search)} + onClear={true} + onClick={setFocus} + value={searchText} + debounceSearch={true} + id="search-project-input" + /> +
    + ) + )} */} ); diff --git a/ui/src/pages/Projects/index.scss b/ui/src/pages/Projects/index.scss index 8ca4b3d61..7e135b6b5 100644 --- a/ui/src/pages/Projects/index.scss +++ b/ui/src/pages/Projects/index.scss @@ -3,11 +3,9 @@ .project-search-wrapper { margin-left: $px-12; .Search { + background-color: $color-brand-white-base; height: 2.5rem; } - .Search__input { - border: 1px solid $color-base-gray-40; - } ::placeholder { font-size: $px-16; color: $color-stepper-title !important; From b3c301337e87bb35c799f84ebfdb19fed7202ea6 Mon Sep 17 00:00:00 2001 From: Sayali Joshi Date: Wed, 26 Jun 2024 13:30:18 +0530 Subject: [PATCH 046/759] Content type mapping save API fixes --- ui/src/components/ContentMapper/index.tsx | 79 +---------------------- 1 file changed, 3 insertions(+), 76 deletions(-) diff --git a/ui/src/components/ContentMapper/index.tsx b/ui/src/components/ContentMapper/index.tsx index 331d68d0b..a941fe24d 100644 --- a/ui/src/components/ContentMapper/index.tsx +++ b/ui/src/components/ContentMapper/index.tsx @@ -18,8 +18,6 @@ import { ModalFooter, Dropdown } from '@contentstack/venus-components'; -import { jsonToHtml } from '@contentstack/json-rte-serializer'; -import HTMLReactParser from 'html-react-parser'; // Services import { getCMSDataFromFile } from '../../cmsData/cmsSelector'; @@ -29,7 +27,6 @@ import { getExistingContentTypes, updateContentType, resetToInitialMapping, - createTestStack, fetchExistingContentType } from '../../services/api/migration.service'; import { getStackStatus } from '../../services/api/stacks.service'; @@ -512,6 +509,7 @@ const ContentMapper = () => { return row; }); setTableData(updatedRows); + setSelectedEntries(updatedRows); }; const handleDropDownChange = (value: FieldTypes) => { @@ -630,6 +628,7 @@ const ContentMapper = () => { }); setTableData(updatedRows as FieldMapType[]); + setSelectedEntries(updatedRows as FieldMapType[]); }; const SelectAccessorOfColumn = (data: FieldMapType) => { @@ -1104,7 +1103,7 @@ const ContentMapper = () => {
    - - - - {/* {actionCta && validateArray(actionCta) && ( - -
    -
    - {currentIndex > 0 && ( - - - {prevButtonLabel} - - )} -
    -
    -
    - - -
    -
    - {currentIndex < contentTypes.length - 1 && ( - - {nextButtonLabel} - - - )} -
    -
    -
    -
    - )} */}
    - - {/* {cta?.title && ( -
    - -
    - )} */}
    ); }; From fdc111e949a7acbd035e5e57447261a87afd4d65 Mon Sep 17 00:00:00 2001 From: Sayali Joshi Date: Wed, 26 Jun 2024 18:54:18 +0530 Subject: [PATCH 047/759] [CMG-181] - Legacy Cms | Enter Affix -> When entered restricted keyword 'api_key', it shows message saying 'Affix should not be more than 5 chars' which is incorrect --- .../LegacyCms/Actions/LoadPrefix.tsx | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx b/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx index 562e3357b..7947473a7 100644 --- a/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx @@ -15,7 +15,7 @@ import { DEFAULT_URL_TYPE, INewMigration } from '../../../context/app/app.interf // Style import '../legacyCms.scss'; -import { Icon, TextInput } from '@contentstack/venus-components'; +import { TextInput } from '@contentstack/venus-components'; import { useDebouncer } from '../../../hooks'; import { RootState } from '../../../store'; import { updateNewMigrationData } from '../../../store/slice/migrationDataSlice'; @@ -89,8 +89,17 @@ const LoadPreFix = (props: LoadSelectCmsProps) => { e.preventDefault(); const value = e.target.value; - if (!isEmptyString(value) && isValidPrefix(value) ) { - if(! idArray?.includes(value)){ + if (!isEmptyString(value)) { + if (idArray?.includes(value)) { + setIsError(true); + setErrorMessage('Affix should be valid and not a restricted keyword'); + setIsRestrictedKey(true); + return; + } else if (!isValidPrefix(value)) { + setIsRestrictedKey(false); + setIsError(true); + setErrorMessage('Affix should not be more than 5 chars'); + } else { setPrefix(value); setIsError(false); setErrorMessage(''); @@ -98,7 +107,7 @@ const LoadPreFix = (props: LoadSelectCmsProps) => { const newMigrationDataObj: INewMigration = { ...newMigrationData, legacy_cms: { - ...newMigrationData.legacy_cms, + ...newMigrationData?.legacy_cms, affix: value, isRestictedKeywordCheckboxChecked: isCheckedBoxChecked } @@ -115,19 +124,13 @@ const LoadPreFix = (props: LoadSelectCmsProps) => { }); //call for Step Change - props.handleStepChange(props?.currentStep); - return; - - } - else{ - setIsError(true); - setErrorMessage('Affix should be valid and not a restricted keyword'); - setIsRestrictedKey(true); + props?.handleStepChange(props?.currentStep); return; } + } else { + setIsError(true); + setErrorMessage('Please enter Affix'); } - setIsError(true); - setErrorMessage('Affix should not be more than 5 chars'); }); // Toggles checkbox selection From bc1a74d5903f7d388790ce541eccf90abcf091b4 Mon Sep 17 00:00:00 2001 From: AishDani Date: Wed, 26 Jun 2024 19:26:34 +0530 Subject: [PATCH 048/759] added validatoin check for fieldMapping --- api/src/constants/index.ts | 7 +++++ api/src/services/contentMapper.service.ts | 33 ++++++++++++++++++++--- ui/src/components/ContentMapper/index.tsx | 4 ++- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/api/src/constants/index.ts b/api/src/constants/index.ts index 6e02edc21..e3a8c6138 100644 --- a/api/src/constants/index.ts +++ b/api/src/constants/index.ts @@ -139,3 +139,10 @@ export const NEW_PROJECT_STATUS = { 5: 5, //MIGRATION_SUCCESSFUL 6: 6, //MIGRATION_TERMINATED }; + +export const CONTENT_TYPE_STATUS = { + 1: 1, //auto-mapping + 2: 2, //verified + 3: 3, //mapping failed + 4: 4, //auto-dump +} diff --git a/api/src/services/contentMapper.service.ts b/api/src/services/contentMapper.service.ts index 29fe02a94..887cc1996 100644 --- a/api/src/services/contentMapper.service.ts +++ b/api/src/services/contentMapper.service.ts @@ -9,6 +9,8 @@ import { HTTP_CODES, STEPPER_STEPS, NEW_PROJECT_STATUS, + CONTENT_TYPE_STATUS, + VALIDATION_ERRORS } from "../constants/index.js"; import logger from "../utils/logger.js"; import { config } from "../config/index.js"; @@ -289,6 +291,23 @@ const updateContentType = async (req: Request) => { ); throw new BadRequestError(HTTP_TEXTS.INVALID_CONTENT_TYPE); } + + if (fieldMapping) { + fieldMapping.forEach((field: any) => { + if (!field.ContentstackFieldType || field.ContentstackFieldType === '' || field.contentstackFieldUid) { + logger.error( + getLogMessage( + srcFun, + `${VALIDATION_ERRORS.STRING_REQUIRED.replace("$", "ContentstackFieldType or contentstackFieldUid")}` + ) + ); + throw new BadRequestError( + `${VALIDATION_ERRORS.STRING_REQUIRED.replace("$", "ContentstackFieldType or contentstackFieldUid")}` + ); + } + }); + } + try { await ContentTypesMapperModelLowdb.read(); const updateIndex = ContentTypesMapperModelLowdb.chain @@ -309,9 +328,8 @@ const updateContentType = async (req: Request) => { contentTypeData?.contentstackTitle; data.ContentTypesMappers[updateIndex].contentstackUid = contentTypeData?.contentstackUid; - data.ContentTypesMappers[updateIndex].status = 2; } - console.info("in update conte type ============>", data.ContentTypesMappers[updateIndex].status,data.ContentTypesMappers[updateIndex] ) + //console.info("in update conte type ============>", data.ContentTypesMappers[updateIndex].status,data.ContentTypesMappers[updateIndex] ) }); if (updateIndex < 0) { @@ -323,13 +341,16 @@ const updateContentType = async (req: Request) => { ); throw new BadRequestError(HTTP_TEXTS.CONTENT_TYPE_NOT_FOUND); } + //console.info("filedMapping :::::::::::", fieldMapping) if (!isEmpty(fieldMapping)) { await FieldMapperModel.read(); + //console.info("in if condition==============>"); (fieldMapping || []).forEach((field: any) => { const fieldIndex = FieldMapperModel.data.field_mapper.findIndex( (f: any) => f?.id === field?.id ); - if (fieldIndex > -1) { + //console.info("############",field?.id, fieldIndex, field) + if (fieldIndex > -1 && field?.ContentstackFieldType !== '') { FieldMapperModel.update((data: any) => { data.field_mapper[fieldIndex] = field; data.field_mapper[fieldIndex].isDeleted = false; @@ -337,13 +358,17 @@ const updateContentType = async (req: Request) => { } }); } + await ContentTypesMapperModelLowdb.read(); + ContentTypesMapperModelLowdb.update((data: any) => { + data.ContentTypesMappers[updateIndex].status = CONTENT_TYPE_STATUS[2]; + }); // fetch updated data to return in response await ContentTypesMapperModelLowdb.read(); const updatedContentType = ContentTypesMapperModelLowdb.chain .get("ContentTypesMappers") .find({ id: contentTypeId }) .value(); - + console.info("updated content type :::::::::", updatedContentType) return { updatedContentType }; } catch (error: any) { logger.error( diff --git a/ui/src/components/ContentMapper/index.tsx b/ui/src/components/ContentMapper/index.tsx index f3f3def51..0fb1e5a6f 100644 --- a/ui/src/components/ContentMapper/index.tsx +++ b/ui/src/components/ContentMapper/index.tsx @@ -824,13 +824,15 @@ const ContentMapper = () => { fieldMapping: selectedEntries } }; - + console.log("data cs ::::::::::", dataCs) const { data, status } = await updateContentType( orgId, projectID, selectedContentType?.id ?? '', dataCs ); + console.log("in content maaper :::::", data); + if (status == 200) { Notification({ From 7e5e14852478875d84543115e44b6f70d584e11e Mon Sep 17 00:00:00 2001 From: Sayali Joshi Date: Wed, 26 Jun 2024 19:27:52 +0530 Subject: [PATCH 049/759] [CMG-181] - Legacy Cms | Enter Affix -> When entered restricted keyword 'api_key', it shows message saying 'Affix should not be more than 5 chars' which is incorrect --- .../LegacyCms/restrictedKeywords.json | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/ui/src/components/LegacyCms/restrictedKeywords.json b/ui/src/components/LegacyCms/restrictedKeywords.json index ea368cb4c..4299ad340 100644 --- a/ui/src/components/LegacyCms/restrictedKeywords.json +++ b/ui/src/components/LegacyCms/restrictedKeywords.json @@ -42,6 +42,28 @@ "_version", "__v", "locale", - "publish_details" + "publish_details", + "_ids", + "_publish_locales", + "contentstackFilters", + "dimension", + "embedded_items", + "org_uid", + "shard_account", + "sys_asset", + "sys_assets", + "sys_metadata", + "taxonomies", + "built_io_application_user", + "built_io_application_user_role", + "built_io_audit_log", + "built_io_environment", + "built_io_extensions", + "built_io_installation_data", + "built_io_label", + "built_io_language", + "built_io_publish_queue", + "built_io_release", + "cs_branches" ] } \ No newline at end of file From 560d991654a67331e0d40446904ef59ac7285ce1 Mon Sep 17 00:00:00 2001 From: AishDani Date: Thu, 27 Jun 2024 15:03:32 +0530 Subject: [PATCH 050/759] refactor:updated file format to show file format of cms --- .../LegacyCms/Actions/LoadFileFormat.tsx | 74 +++++++++---------- .../LegacyCms/Actions/LoadPrefix.tsx | 4 +- .../LegacyCms/Actions/LoadSelectCms.tsx | 11 ++- ui/src/pages/Migration/index.tsx | 3 +- 4 files changed, 46 insertions(+), 46 deletions(-) diff --git a/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx b/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx index 4838fc988..715ba9371 100644 --- a/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadFileFormat.tsx @@ -5,21 +5,21 @@ import { Icon, TextInput } from '@contentstack/venus-components'; import { useDispatch, useSelector } from 'react-redux'; // Utilities -import { isEmptyString, validateArray } from '../../../utilities/functions'; +import { isEmptyString } from '../../../utilities/functions'; // Services import { - updateFileFormatData, fileformatConfirmation } from '../../../services/api/migration.service'; // Interface -import { ICardType, defaultCardType } from '../../../components/Common/Card/card.interface'; +import { ICardType} from '../../../components/Common/Card/card.interface'; // Components import { RootState } from '../../../store'; import { updateNewMigrationData } from '../../../store/slice/migrationDataSlice'; +import { getConfig } from '../../../services/api/upload.service'; interface LoadFileFormatProps { stepComponentProps: any; @@ -35,15 +35,14 @@ const LoadFileFormat = (props: LoadFileFormatProps) => { const dispatch = useDispatch(); const [selectedCard, setSelectedCard] = useState( - newMigrationData?.legacy_cms?.selectedFileFormat ?? defaultCardType + newMigrationData?.legacy_cms?.selectedFileFormat ); const [isCheckedBoxChecked, setIsCheckedBoxChecked] = useState( newMigrationData?.legacy_cms?.isFileFormatCheckboxChecked || true ); - + const [fileIcon, setFileIcon] = useState(newMigrationData?.legacy_cms?.selectedFileFormat?.title); const { projectId = '' } = useParams(); - const { allowed_file_formats = [], doc_url = { href: '', title: '' } } = - newMigrationData?.legacy_cms?.selectedCms || {}; + /**** ALL METHODS HERE ****/ @@ -57,9 +56,6 @@ const LoadFileFormat = (props: LoadFileFormatProps) => { isFileFormatCheckboxChecked: isCheckedBoxChecked } })); - - - await fileformatConfirmation(selectedOrganisation?.value, projectId, { fileformat_confirmation: true }); @@ -75,52 +71,48 @@ const LoadFileFormat = (props: LoadFileFormatProps) => { setIsCheckedBoxChecked(checked); }; - /**** ALL USEEffects HERE ****/ - useEffect(() => { - if (validateArray(allowed_file_formats)) { - const initialFormat = { - description: allowed_file_formats?.[0]?.description, - group_name: allowed_file_formats?.[0]?.group_name, - title: allowed_file_formats?.[0]?.title, - fileformat_id: allowed_file_formats?.[0]?.fileformat_id - }; - setSelectedCard(initialFormat); - const newMigrationDataObj = { - ...newMigrationData, - legacy_cms: { - ...newMigrationData?.legacy_cms, - selectedFileFormat: initialFormat - } - }; - dispatch(updateNewMigrationData(newMigrationDataObj)); - handleBtnClick(); + const handleFileFormat = async() =>{ + const apiRes: any = await getConfig(); + const cmsType = apiRes?.data?.cmsType?.toLowerCase(); + + const { all_cms = [] } = migrationData?.legacyCMSData || {}; + let filteredCmsData = all_cms; + if (cmsType) { + filteredCmsData = all_cms.filter((cms: any) => cms?.parent?.toLowerCase() === cmsType); } - }, [allowed_file_formats]); + + const newMigrationDataObj = { + ...newMigrationData, + legacy_cms: { + ...newMigrationData?.legacy_cms, + selectedFileFormat: filteredCmsData[0].allowed_file_formats[0] + } + }; + setFileIcon(filteredCmsData[0].allowed_file_formats[0].title); + dispatch(updateNewMigrationData(newMigrationDataObj)); + } + + /**** ALL USEEffects HERE ****/ + useEffect(()=>{ + handleFileFormat(); + handleBtnClick(); + },[]); const { file_format_checkbox_text = '' } = migrationData.legacyCMSData; return (
    - {validateArray(allowed_file_formats) ? ( - allowed_file_formats?.map((data: ICardType, index: number) => ( -
    } + } /> - -
    - )) - ) : ( - <>No File formats available - )}
    ); diff --git a/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx b/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx index 562e3357b..9559e7385 100644 --- a/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadPrefix.tsx @@ -15,7 +15,7 @@ import { DEFAULT_URL_TYPE, INewMigration } from '../../../context/app/app.interf // Style import '../legacyCms.scss'; -import { Icon, TextInput } from '@contentstack/venus-components'; +import { TextInput } from '@contentstack/venus-components'; import { useDebouncer } from '../../../hooks'; import { RootState } from '../../../store'; import { updateNewMigrationData } from '../../../store/slice/migrationDataSlice'; @@ -109,7 +109,7 @@ const LoadPreFix = (props: LoadSelectCmsProps) => { setIsError(false); //API call for saving Affix - await updateAffixData(selectedOrganisation?.value, projectId, { affix: value }); + await affixConfirmation(selectedOrganisation?.value, projectId, { affix_confirmation: true }); diff --git a/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx b/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx index 906eb3c88..199f5831c 100644 --- a/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadSelectCms.tsx @@ -77,7 +77,7 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { dispatch(updateNewMigrationData(newMigrationDataObj)); //API call for saving selected CMS - await updateLegacyCMSData(selectedOrganisation.value, projectId, { legacy_cms: data?.cms_id }); + //await updateLegacyCMSData(selectedOrganisation.value, projectId, { legacy_cms: data?.cms_id }); // Call for Step Change props?.handleStepChange(props?.currentStep, true); @@ -140,6 +140,14 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { if (cmstype) { filteredCmsData = all_cms.filter((cms: ICMSType) => cms?.parent?.toLowerCase() === cmstype?.toLowerCase()); } + const newMigrationDataObj = { + ...newMigrationData, + legacy_cms: { + ...newMigrationData?.legacy_cms, + selectedFileFormat: filteredCmsData[0].allowed_file_formats[0] + } + }; + dispatch(updateNewMigrationData(newMigrationDataObj)); setCmsData(filteredCmsData) @@ -162,7 +170,6 @@ const LoadSelectCms = (props: LoadSelectCmsProps) => { } else { newSelectedCard = DEFAULT_CMS_TYPE; } - if (!isEmptyString(newSelectedCard?.title)) { setSelectedCard(newSelectedCard); diff --git a/ui/src/pages/Migration/index.tsx b/ui/src/pages/Migration/index.tsx index 67d4cafb1..f20cd0081 100644 --- a/ui/src/pages/Migration/index.tsx +++ b/ui/src/pages/Migration/index.tsx @@ -8,7 +8,7 @@ import { RootState } from '../../store'; import { updateMigrationData, updateNewMigrationData } from '../../store/slice/migrationDataSlice'; // Services -import { getMigrationData, updateCurrentStepData, updateLegacyCMSData, updateDestinationStack, createTestStack } from '../../services/api/migration.service'; +import { getMigrationData, updateCurrentStepData, updateLegacyCMSData, updateDestinationStack, createTestStack, updateAffixData } from '../../services/api/migration.service'; import { getCMSDataFromFile } from '../../cmsData/cmsSelector'; // Utilities @@ -172,6 +172,7 @@ const Migration = () => { await updateLegacyCMSData(selectedOrganisation?.value, projectId, { legacy_cms: newMigrationData?.legacy_cms?.selectedCms?.cms_id }); + await updateAffixData(selectedOrganisation?.value, projectId, { affix: newMigrationData?.legacy_cms?.affix }); const res = await updateCurrentStepData(selectedOrganisation.value, projectId); handleStepChange(1); if (res) { From 21a67992653c22083411df988a6663097967e506 Mon Sep 17 00:00:00 2001 From: AishDani Date: Thu, 27 Jun 2024 15:29:31 +0530 Subject: [PATCH 051/759] refactor:added failed status of mapper --- api/src/services/contentMapper.service.ts | 42 +++++++++++++---------- ui/src/components/ContentMapper/index.tsx | 3 -- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/api/src/services/contentMapper.service.ts b/api/src/services/contentMapper.service.ts index 887cc1996..bbd30d1aa 100644 --- a/api/src/services/contentMapper.service.ts +++ b/api/src/services/contentMapper.service.ts @@ -292,24 +292,30 @@ const updateContentType = async (req: Request) => { throw new BadRequestError(HTTP_TEXTS.INVALID_CONTENT_TYPE); } - if (fieldMapping) { - fieldMapping.forEach((field: any) => { - if (!field.ContentstackFieldType || field.ContentstackFieldType === '' || field.contentstackFieldUid) { - logger.error( - getLogMessage( - srcFun, - `${VALIDATION_ERRORS.STRING_REQUIRED.replace("$", "ContentstackFieldType or contentstackFieldUid")}` - ) - ); - throw new BadRequestError( - `${VALIDATION_ERRORS.STRING_REQUIRED.replace("$", "ContentstackFieldType or contentstackFieldUid")}` - ); - } - }); - } try { await ContentTypesMapperModelLowdb.read(); + + if (fieldMapping) { + fieldMapping.forEach(async(field: any) => { + if (!field.ContentstackFieldType || field.ContentstackFieldType === '' || field.ContentstackFieldType === 'No matches found' || field.contentstackFieldUid === '') { + logger.error( + getLogMessage( + srcFun, + `${VALIDATION_ERRORS.STRING_REQUIRED.replace("$", "ContentstackFieldType or contentstackFieldUid")}` + ) + ); + await ContentTypesMapperModelLowdb.read(); + ContentTypesMapperModelLowdb.update((data: any) => { + data.ContentTypesMappers[updateIndex].status = CONTENT_TYPE_STATUS[3]; + }); + throw new BadRequestError( + `${VALIDATION_ERRORS.STRING_REQUIRED.replace("$", "ContentstackFieldType or contentstackFieldUid")}` + ); + } + }); + } + const updateIndex = ContentTypesMapperModelLowdb.chain .get("ContentTypesMappers") .findIndex({ id: contentTypeId }) @@ -329,7 +335,7 @@ const updateContentType = async (req: Request) => { data.ContentTypesMappers[updateIndex].contentstackUid = contentTypeData?.contentstackUid; } - //console.info("in update conte type ============>", data.ContentTypesMappers[updateIndex].status,data.ContentTypesMappers[updateIndex] ) + }); if (updateIndex < 0) { @@ -341,7 +347,7 @@ const updateContentType = async (req: Request) => { ); throw new BadRequestError(HTTP_TEXTS.CONTENT_TYPE_NOT_FOUND); } - //console.info("filedMapping :::::::::::", fieldMapping) + if (!isEmpty(fieldMapping)) { await FieldMapperModel.read(); //console.info("in if condition==============>"); @@ -368,7 +374,7 @@ const updateContentType = async (req: Request) => { .get("ContentTypesMappers") .find({ id: contentTypeId }) .value(); - console.info("updated content type :::::::::", updatedContentType) + return { updatedContentType }; } catch (error: any) { logger.error( diff --git a/ui/src/components/ContentMapper/index.tsx b/ui/src/components/ContentMapper/index.tsx index 0fb1e5a6f..17ab17797 100644 --- a/ui/src/components/ContentMapper/index.tsx +++ b/ui/src/components/ContentMapper/index.tsx @@ -824,15 +824,12 @@ const ContentMapper = () => { fieldMapping: selectedEntries } }; - console.log("data cs ::::::::::", dataCs) const { data, status } = await updateContentType( orgId, projectID, selectedContentType?.id ?? '', dataCs ); - console.log("in content maaper :::::", data); - if (status == 200) { Notification({ From d334e2ebdb34a1b37149297b75a9ba7d194b33f6 Mon Sep 17 00:00:00 2001 From: AishDani Date: Thu, 27 Jun 2024 15:33:37 +0530 Subject: [PATCH 052/759] refactor:removed logs --- api/src/services/contentMapper.service.ts | 16 +--------------- uplaode-api/src/config/index.ts | 2 +- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/api/src/services/contentMapper.service.ts b/api/src/services/contentMapper.service.ts index bbd30d1aa..c21772457 100644 --- a/api/src/services/contentMapper.service.ts +++ b/api/src/services/contentMapper.service.ts @@ -106,20 +106,9 @@ const getContentTypes = async (req: Request) => { .get("ContentTypesMappers") .find({ id: data }) .value(); - - const fieldData = contentMapperData?.fieldMapping.map((fields: any) => { - const fieldMapper = FieldMapperModel.chain - .get("field_mapper") - .find({ id: fields }) - .value(); - return fieldMapper; - }); - - const fieldMapping: any = fieldData; - //console.info("filedMapping ::::::::", fieldMapping) - content_mapper.push(contentMapperData); }); + if (!isEmpty(content_mapper)) { if (search) { const filteredResult = content_mapper @@ -138,7 +127,6 @@ const getContentTypes = async (req: Request) => { a.otherCmsTitle.localeCompare(b.otherCmsTitle) ) ?.slice(skip, Number(skip) + Number(limit)); - //console.info("result::::::::::::", result) } } @@ -350,12 +338,10 @@ const updateContentType = async (req: Request) => { if (!isEmpty(fieldMapping)) { await FieldMapperModel.read(); - //console.info("in if condition==============>"); (fieldMapping || []).forEach((field: any) => { const fieldIndex = FieldMapperModel.data.field_mapper.findIndex( (f: any) => f?.id === field?.id ); - //console.info("############",field?.id, fieldIndex, field) if (fieldIndex > -1 && field?.ContentstackFieldType !== '') { FieldMapperModel.update((data: any) => { data.field_mapper[fieldIndex] = field; diff --git a/uplaode-api/src/config/index.ts b/uplaode-api/src/config/index.ts index 6bb597f49..cd32fac5d 100644 --- a/uplaode-api/src/config/index.ts +++ b/uplaode-api/src/config/index.ts @@ -9,5 +9,5 @@ export default { bucketName: 'migartion-test', buketKey: 'project/package 45.zip' }, - localPath: '/Users/aishwarya.dani/Downloads/package 45.zip' + localPath: '/Users/umesh.more/Downloads/package 45.zip' }; From e686d2c405ef7f4652733149406901e5c9993d05 Mon Sep 17 00:00:00 2001 From: snehalsankhe Date: Thu, 27 Jun 2024 18:14:32 +0530 Subject: [PATCH 053/759] solved bugs --- ui/src/cmsData/projects.json | 8 ++++---- ui/src/components/Card/card.scss | 1 + ui/src/components/Card/index.tsx | 8 +++++--- ui/src/components/Modal/index.tsx | 2 +- ui/src/pages/Projects/index.scss | 6 ++++++ ui/src/pages/Projects/index.tsx | 2 +- 6 files changed, 18 insertions(+), 9 deletions(-) diff --git a/ui/src/cmsData/projects.json b/ui/src/cmsData/projects.json index d482d9410..29ecbefd6 100644 --- a/ui/src/cmsData/projects.json +++ b/ui/src/cmsData/projects.json @@ -136,9 +136,9 @@ }, "create_project_modal": { "description": "Description", - "description_placeholder": "Provide a description", - "name": "Project Name", - "name_placeholder": "Enter project name", + "description_placeholder": "Enter a description", + "name": "Name", + "name_placeholder": "Title", "primary_cta": { "open_in_new_tab": false, "theme": "primary", @@ -153,6 +153,6 @@ "url": "", "with_icon": false }, - "title": "Create New Project" + "title": "New Project" } } \ No newline at end of file diff --git a/ui/src/components/Card/card.scss b/ui/src/components/Card/card.scss index fa090c38a..8a3917eaa 100644 --- a/ui/src/components/Card/card.scss +++ b/ui/src/components/Card/card.scss @@ -64,6 +64,7 @@ border: 1px solid $color-brand-secondary-lightest; border-radius: 8px; font-size: $size-font-large; + line-height: 21px; color: $color-font-base; padding: 4px 8px; text-transform: capitalize; diff --git a/ui/src/components/Card/index.tsx b/ui/src/components/Card/index.tsx index 230857fa9..44bc169f1 100644 --- a/ui/src/components/Card/index.tsx +++ b/ui/src/components/Card/index.tsx @@ -62,9 +62,11 @@ const CardList = ({ project }: ProjectType) => {
    onClickProject(project?.id || '')}>
    -
    - {project?.name &&

    {project?.name}

    } -
    + +
    + {project?.name &&

    {project?.name}

    } +
    +
    diff --git a/ui/src/components/Modal/index.tsx b/ui/src/components/Modal/index.tsx index f663606ef..17e891c92 100644 --- a/ui/src/components/Modal/index.tsx +++ b/ui/src/components/Modal/index.tsx @@ -50,7 +50,7 @@ const Modal = (props: ProjectModalProps) => { if (!value) { setInputValue(false); return; - } else if (!/^[^\s].+[^\s]$/.test(value)) { + } else if (!/^[^\s].+$/.test(value)) { setInputValue(false); return 'Please enter project name.'; } else if (value && value?.length > 200) { diff --git a/ui/src/pages/Projects/index.scss b/ui/src/pages/Projects/index.scss index 926d50365..acf98f50c 100644 --- a/ui/src/pages/Projects/index.scss +++ b/ui/src/pages/Projects/index.scss @@ -41,6 +41,12 @@ .helpText { font-size: 14px; padding-top: 30px; + p { + color: $color-font-base; + a { + color: $color-brand-primary-base; + } + } } .EmptyStateWrapper { .EmptyState { diff --git a/ui/src/pages/Projects/index.tsx b/ui/src/pages/Projects/index.tsx index ca05ff583..bfc9f6fc6 100644 --- a/ui/src/pages/Projects/index.tsx +++ b/ui/src/pages/Projects/index.tsx @@ -1,5 +1,5 @@ // Libraries -import { useContext, useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { PageLayout, EmptyState, Button, Icon, cbModal } from '@contentstack/venus-components'; import { jsonToHtml } from '@contentstack/json-rte-serializer'; import HTMLReactParser from 'html-react-parser'; From 43605cf07ef708b4cae359e888a213eb0595f019 Mon Sep 17 00:00:00 2001 From: AishDani Date: Thu, 27 Jun 2024 18:33:55 +0530 Subject: [PATCH 054/759] refactor:legacy cms bugs --- .../LegacyCms/Actions/LoadUploadFile.tsx | 53 +++++++++++++++++-- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx index 7311d0bc4..d492237da 100644 --- a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx @@ -122,6 +122,48 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { props.handleStepChange(props?.currentStep, true); } + } + else if(res?.status === 500){ + setIsValidated(false); + setValidationMessage('File not found'); + setIsValidationAttempted(true); + setProgressPercentage(100); + await updateFileFormatData(selectedOrganisation?.value, projectId, { + file_format: newMigrationData?.legacy_cms?.selectedFileFormat?.fileformat_id?.toString(), + file_path: res?.data?.file_details?.localPath, + is_fileValid: res?.status == 200 ? true : false, + awsDetails:{ + awsRegion: res?.data?.file_details?.awsData?.awsRegion, + bucketName: res?.data?.file_details?.awsData?.bucketName, + buketKey: res?.data?.file_details?.awsData?.buketKey + } + }); + const newMigrationDataObj: INewMigration = { + ...newMigrationData, + legacy_cms: { + ...newMigrationData?.legacy_cms, + uploadedFile: { + name: res?.data?.localPath, + url: res?.data?.localPath, + validation: res?.data?.message, + isValidated: res?.status == 200 ? true : false, + file_details: { + isLocalPath: res?.data?.file_details?.isLocalPath, + cmsType: res?.data?.file_details?.cmsType, + localPath: res?.data?.file_details?.localPath, + awsData: { + awsRegion: res?.data?.file_details?.awsData?.awsRegion, + bucketName: res?.data?.file_details?.awsData?.bucketName, + buketKey: res?.data?.file_details?.awsData?.buketKey + } + } + + } + } + }; + + dispatch(updateNewMigrationData(newMigrationDataObj)); + } else{ setIsValidated(false); @@ -236,15 +278,16 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { setShowMessage(true); setValidationMessage(''); } - + console.log(fileExtension !== newMigrationData?.legacy_cms?.selectedFileFormat?.fileformat_id); + } - else if(! isEmptyString(newMigrationData?.legacy_cms?.selectedCms?.parent?.toLowerCase()) && - newMigrationData?.legacy_cms?.selectedCms?.parent.toLowerCase() !== res?.data?.cmsType.toLowerCase() + if((! isEmptyString(newMigrationData?.legacy_cms?.selectedCms?.parent?.toLowerCase()) && + newMigrationData?.legacy_cms?.selectedCms?.parent.toLowerCase() !== res?.data?.cmsType.toLowerCase()) || fileExtension !== newMigrationData?.legacy_cms?.selectedFileFormat?.fileformat_id ) - { + { setIsValidated(false); - setValidationMessage('Validation Falied'); + setValidationMessage('file format is not appropriate'); setIsValidationAttempted(true); setShowMessage(true); setIsLoading(false); From 19d9837f489f4c2dc7f2cf46e7d91ea0d0e7e1d1 Mon Sep 17 00:00:00 2001 From: snehalsankhe Date: Fri, 28 Jun 2024 16:07:54 +0530 Subject: [PATCH 055/759] solved bug --- ui/src/components/Modal/index.tsx | 8 ++++++-- uplaode-api/.env | 2 +- uplaode-api/src/config/index.ts | 4 ++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/ui/src/components/Modal/index.tsx b/ui/src/components/Modal/index.tsx index 17e891c92..2f4c433b0 100644 --- a/ui/src/components/Modal/index.tsx +++ b/ui/src/components/Modal/index.tsx @@ -18,8 +18,9 @@ import { Field as FinalField, Form as FinalForm } from 'react-final-form'; import { ProjectModalProps } from './modal.interface'; // Services -import { createProject } from '../../services/api/project.service'; import { useState } from 'react'; +import { createProject } from '../../services/api/project.service'; + const Modal = (props: ProjectModalProps) => { const { @@ -42,7 +43,10 @@ const Modal = (props: ProjectModalProps) => { // const payload = {name: values?.name, description: values?.description || ''} const res = await createProject(selectedOrg?.uid || '', values); - + if (res?.status === 201) { + const projectId = res?.data?.project?.id + window.location.href = `/projects/${projectId}/migration/steps/1`; + } return res?.error ? false : res; }; diff --git a/uplaode-api/.env b/uplaode-api/.env index 2c50b6496..5f3a84b6c 100644 --- a/uplaode-api/.env +++ b/uplaode-api/.env @@ -1,2 +1,2 @@ PORT=4002 -NODE_BACKEND_API =http://localhost:5001 \ No newline at end of file +NODE_BACKEND_API =http://localhost:5000 \ No newline at end of file diff --git a/uplaode-api/src/config/index.ts b/uplaode-api/src/config/index.ts index cd32fac5d..d0722ca5a 100644 --- a/uplaode-api/src/config/index.ts +++ b/uplaode-api/src/config/index.ts @@ -1,5 +1,5 @@ export default { - cmsType: 'sitecore', + cmsType: 'Sitecore', isLocalPath: true, awsData: { awsRegion: 'us-east-2', @@ -9,5 +9,5 @@ export default { bucketName: 'migartion-test', buketKey: 'project/package 45.zip' }, - localPath: '/Users/umesh.more/Downloads/package 45.zip' + localPath: '/Users/snehal.pimple/Desktop/package 45.zip' }; From caf7335646ebc133a8c7b781e9a67dd445f0c03b Mon Sep 17 00:00:00 2001 From: Sayali Joshi Date: Tue, 2 Jul 2024 15:37:13 +0530 Subject: [PATCH 056/759] [CMG-174] - Frontend for Content Mapping Status and Filter functionality --- .../advanceProperties.interface.ts | 22 +- ui/src/components/AdvancePropertise/index.tsx | 26 +- .../Common/AddStack/addStack.interface.ts | 37 +++ .../components/Common/AddStack/addStack.tsx | 57 ++--- .../ContentMapper/contentMapper.interface.ts | 16 +- ui/src/components/ContentMapper/index.scss | 61 +++++ ui/src/components/ContentMapper/index.tsx | 224 +++++++++--------- .../DestinationStack/Actions/LoadStacks.tsx | 11 +- .../LegacyCms/Actions/LoadUploadFile.tsx | 2 +- ui/src/utilities/constants.ts | 13 + 10 files changed, 303 insertions(+), 166 deletions(-) diff --git a/ui/src/components/AdvancePropertise/advanceProperties.interface.ts b/ui/src/components/AdvancePropertise/advanceProperties.interface.ts index 8f0c0bf44..6ce7ae7f6 100644 --- a/ui/src/components/AdvancePropertise/advanceProperties.interface.ts +++ b/ui/src/components/AdvancePropertise/advanceProperties.interface.ts @@ -1,16 +1,32 @@ -import { FieldMapType } from '../ContentMapper/contentMapper.interface'; +import { Advanced, FieldMapType } from '../ContentMapper/contentMapper.interface'; export interface SchemaProps { fieldtype: string; - value: any; + value: UpdatedSettings; rowId: string; - updateFieldSettings: (rowId: string, value: any, checkBoxChanged: boolean) => void; + updateFieldSettings: (rowId: string, value: Advanced, checkBoxChanged: boolean) => void; isLocalised: boolean; closeModal: () => void; data: FieldMapType; projectId?: string; } +export interface UpdatedSettings { + MinChars?: string; + MaxChars?: number; + MinRange?: number; + MaxRange?: number; + minSize?: string; + maxSize?: number; + DefaultValue?: string; + ValidationRegex?: string; + title?: string; + url?: string; + Mandatory?: boolean; + AllowImagesOnly?: boolean; + NonLocalizable?: boolean; +} + export interface Props { data: SchemaProps; states?: StateType; diff --git a/ui/src/components/AdvancePropertise/index.tsx b/ui/src/components/AdvancePropertise/index.tsx index dbf0e5b8e..373737a52 100644 --- a/ui/src/components/AdvancePropertise/index.tsx +++ b/ui/src/components/AdvancePropertise/index.tsx @@ -42,7 +42,7 @@ const AdvancePropertise = (props: SchemaProps) => { }); const [contentTypes, setContentTypes] = useState([]); - const [CTValue, setCTValue] = useState(null); + const [ctValue, setCTValue] = useState(null); useEffect(() => { fetchContentTypes(''); @@ -50,7 +50,7 @@ const AdvancePropertise = (props: SchemaProps) => { // Fetch content types list const fetchContentTypes = async (searchText: string) => { - const { data } = await getContentTypes(props?.projectId || '', 0, 10, searchText || ''); //org id will always present + const { data } = await getContentTypes(props?.projectId ?? '', 0, 10, searchText || ''); //org id will always present setContentTypes(data?.contentTypes); }; @@ -63,7 +63,15 @@ const AdvancePropertise = (props: SchemaProps) => { props?.updateFieldSettings( props?.rowId, - { [field?.charAt(0)?.toUpperCase() + field?.slice(1)]: (event.target as HTMLInputElement)?.value }, + { + [field?.charAt(0)?.toUpperCase() + field?.slice(1)]: (event.target as HTMLInputElement)?.value, + validationRegex: '', + Mandatory: false, + Multiple: false, + Unique: false, + NonLocalizable: false, + EmbedObject: false + }, checkBoxChanged ); }; @@ -76,7 +84,15 @@ const AdvancePropertise = (props: SchemaProps) => { props?.updateFieldSettings( props?.rowId, - { [field?.charAt(0)?.toUpperCase() + field?.slice(1)]: value }, + { + [field?.charAt(0)?.toUpperCase() + field?.slice(1)]: value, + validationRegex: '', + Mandatory: false, + Multiple: false, + Unique: false, + NonLocalizable: false, + EmbedObject: false + }, checkBoxChanged ); }; @@ -282,7 +298,7 @@ const AdvancePropertise = (props: SchemaProps) => { {toggleStates?.embedObject && ( { + onChange={(event: React.ChangeEvent) => { input?.onChange(event); }} name="locale" @@ -253,7 +254,7 @@ const AddStack = (props: any): JSX.Element => { version="v2" testId="cs-cancel-create-stack" buttonType="tertiary" - onClick={(): any => { + onClick={() => { props?.closeModal(); }} > diff --git a/ui/src/components/ContentMapper/contentMapper.interface.ts b/ui/src/components/ContentMapper/contentMapper.interface.ts index 7f07c28b6..c81eba9f5 100644 --- a/ui/src/components/ContentMapper/contentMapper.interface.ts +++ b/ui/src/components/ContentMapper/contentMapper.interface.ts @@ -44,6 +44,7 @@ export interface ContentType { otherCmsUid: string; updateAt: string; id?: string; + status: string; } export interface FieldMapType { @@ -58,19 +59,16 @@ export interface FieldMapType { uid: string; id: string; _canSelect?: boolean; - advanced: Advanced; + advanced?: Advanced; contentstackUid: string; } export interface Advanced { - ValidationRegex?: string; - Basic?: boolean; - Advanced?: boolean; - Custom?: boolean; - Mandatory?: boolean; - Multiple?: boolean; - Unique?: boolean; - NonLocalizable?: boolean; + validationRegex: string; + Mandatory: boolean; + Multiple: boolean; + Unique: boolean; + NonLocalizable: boolean; EmbedObject?: boolean; } diff --git a/ui/src/components/ContentMapper/index.scss b/ui/src/components/ContentMapper/index.scss index e3593fe95..5ba1fef7c 100644 --- a/ui/src/components/ContentMapper/index.scss +++ b/ui/src/components/ContentMapper/index.scss @@ -26,8 +26,11 @@ } } .ct-search-wrapper { + align-items: center; border-bottom: 1px solid $color-brand-secondary-lightest; + display: flex; padding: $px-8 $px-12; + position: relative; .Search__v2 { background-color: $color-brand-white-base; height: 2.5rem; @@ -36,6 +39,20 @@ width: 100%!important; } } + svg { + margin-left: $px-12; + } + .Button { + padding: 0; + &:hover { + background-color: transparent; + } + &:focus { + border: 0 none; + box-shadow: none; + outline: 0; + } + } } .ct-list-wrapper { height: calc(100vh - 375px); @@ -62,6 +79,15 @@ border: 1px solid $color-brand-primary-base; color: $color-brand-primary-base; } + .cms-title { + margin-right: 12px; + max-width: 123px; + overflow: hidden; + text-overflow: ellipsis; + } + .ct-options { + min-width: 150px; + } } } .dropdown-align { @@ -148,3 +174,38 @@ div .table-row { align-items: center; flex: 1; } +.status-wrapper { + align-items: center; + border: 1px solid $color-stepper-title; + border-radius: $px-8; + color: $color-stepper-title; + display: flex; + font-size: $size-font-large; + padding: $px-4 $px-8; + svg { + margin-right: 5px; + } +} +.filter-wrapper { + background-color: $color-brand-white-base; + border-radius: $px-4; + box-shadow: 0 4px 30px rgba(0,0,0,.25); + position: absolute; + right: $px-12; + top: $px-50; + z-index: 1; + li { + cursor: pointer; + font-size: $size-font-medium; + padding: $px-8 $px-12; + &:hover { + background-color: $color-base-white-10; + color: $color-brand-primary-base; + } + &.active-filter { + color: $color-brand-primary-base; + cursor: text; + font-weight: $font-weight-bold; + } + } +} diff --git a/ui/src/components/ContentMapper/index.tsx b/ui/src/components/ContentMapper/index.tsx index 560087744..e72a6339f 100644 --- a/ui/src/components/ContentMapper/index.tsx +++ b/ui/src/components/ContentMapper/index.tsx @@ -1,11 +1,10 @@ // Libraries -import { useEffect, useState } from 'react'; +import { useEffect, useState, useRef } from 'react'; import { useDispatch, useSelector } from 'react-redux'; -import { useNavigate, useParams } from 'react-router-dom'; +import { useParams } from 'react-router-dom'; import { InfiniteScrollTable, Select, - ButtonGroup, Button, Search, Icon, @@ -13,9 +12,6 @@ import { Notification, cbModal, InstructionText, - ModalHeader, - ModalBody, - ModalFooter, Dropdown } from '@contentstack/venus-components'; @@ -36,7 +32,7 @@ import { RootState } from '../../store'; import { updateMigrationData, updateNewMigrationData } from '../../store/slice/migrationDataSlice'; // Utilities -import { CS_ENTRIES } from '../../utilities/constants'; +import { CS_ENTRIES, CONTENT_MAPPING_STATUS, STATUS_ICON_Mapping } from '../../utilities/constants'; import { validateArray } from '../../utilities/functions'; // Interface @@ -57,6 +53,7 @@ import { } from './contentMapper.interface'; import { ItemStatusMapProp } from '@contentstack/venus-components/build/components/Table/types'; import { ModalObj } from '../Modal/modal.interface'; +import { UpdatedSettings } from '../AdvancePropertise/advanceProperties.interface'; // Components import SchemaModal from '../SchemaModal'; @@ -102,11 +99,6 @@ const Fields: Mapping = { CheckBox: 'Select', global_field: 'Global' }; -interface ModalProps { - e: React.MouseEvent; - newIndex: number; - closeModal: () => void; -} const ContentMapper = () => { /** ALL CONTEXT HERE */ @@ -120,9 +112,6 @@ const ContentMapper = () => { const { contentMappingData: { content_types_heading: contentTypesHeading, - description, - // action_cta: actionCta, - // cta, search_placeholder: searchPlaceholder, table_search_placeholder: tableSearchPlaceholder }= {} @@ -144,7 +133,6 @@ const ContentMapper = () => { const [selectedContentType, setSelectedContentType] = useState(); const [exstingField, setexsitingField] = useState({}); const [selectedOptions, setSelectedOptions] = useState([]); - const [isButtonLoading, setisButtonLoading] = useState(false); const [isDropDownChanged, setisDropDownCHanged] = useState(false); const [contentTypeMapped, setcontentTypeMapped] = useState( newMigrationData?.content_mapping?.content_type_mapping || {} @@ -174,10 +162,13 @@ const ContentMapper = () => { const [rowIds, setRowIds] = useState({}); const [selectedEntries, setSelectedEntries] = useState([]); const [contentTypeSchema, setContentTypeSchema] = useState([]); + const [showFilter, setShowFilter] = useState(false); + const [filteredContentTypes, setFilteredContentTypes] = useState([]) /** ALL HOOKS Here */ const { projectId = '' } = useParams(); - const navigate = useNavigate(); + + const ref = useRef(null); /********** ALL USEEFFECT HERE *************/ useEffect(() => { @@ -242,11 +233,20 @@ const ContentMapper = () => { setRowIds(selectedId); }, [tableData]); + // To close the filter panel on outside click + useEffect(() => { + document.addEventListener('click', handleClickOutside, true); + return () => { + document.removeEventListener('click', handleClickOutside, true); + }; + }, []); + // Method to fetch content types const fetchContentTypes = async (searchText: string) => { const { data } = await getContentTypes(projectId || '', 0, 5000, searchContentType || ''); //org id will always present - + setContentTypes(data?.contentTypes); + setFilteredContentTypes(data?.contentTypes); setSelectedContentType(data?.contentTypes?.[0]); setTotalCounts(data?.contentTypes?.[0]?.fieldMapping?.length); setOtherCmsTitle(data?.contentTypes?.[0]?.otherCmsTitle); @@ -276,6 +276,7 @@ const ContentMapper = () => { const { data } = await getContentTypes(projectId, 0, 1000, searchCT || ''); //org id will always present setContentTypes(data?.contentTypes); + setFilteredContentTypes(data?.contentTypes); setSelectedContentType(data?.contentTypes?.[0]); setTotalCounts(data?.contentTypes?.[0]?.fieldMapping?.length); setOtherCmsTitle(data?.contentTypes?.[0]?.otherCmsTitle); @@ -348,7 +349,7 @@ const ContentMapper = () => { }; // Method to change the content type - const openContentType = (e: React.MouseEvent, i: number) => { + const openContentType = (i: number) => { setActive(i); const otherTitle = contentTypes?.[i]?.otherCmsTitle; @@ -356,65 +357,13 @@ const ContentMapper = () => { const option = contentTypeMapped?.[otherTitle] ?? 'Select Content Type'; setOtherContentType({ label: option, value: option }); - setContentTypeUid(contentTypes?.[i]?.id || ''); + setContentTypeUid(contentTypes?.[i]?.id ?? ''); setCurrentIndex(i); - fetchFields(contentTypes?.[i]?.id || '', searchText || ''); + fetchFields(contentTypes?.[i]?.id ?? '', searchText || ''); setotherCmsUid(contentTypes?.[i]?.otherCmsUid); setSelectedContentType(contentTypes?.[i]); }; - // Function to Save the Content Type - const SaveContentType = (props: ModalProps) => { - return ( - <> - - -

    Hey there! You have unsaved changes on this page.

    -
    - - - - - - - - - ); - }; - const handleSaveContentTypeModal = (e: any, newIndex: number) => { - return cbModal({ - component: (props: ModalObj) => , - modalProps: { - shouldCloseOnOverlayClick: true, - size: 'small' - } - }); - }; - // Function to get exisiting content types list const fetchExistingContentTypes = async () => { const { data, status } = await getExistingContentTypes(projectId); @@ -423,7 +372,7 @@ const ContentMapper = () => { } }; - const updateFieldSettings = (rowId: string, updatedSettings: any, checkBoxChanged: boolean) => { + const updateFieldSettings = (rowId: string, updatedSettings: Advanced, checkBoxChanged: boolean) => { setisDropDownCHanged(checkBoxChanged); //setadvancePropertise(...updatedSettings); @@ -468,10 +417,10 @@ const ContentMapper = () => { }; // Function to handle selected fields - const handleSelectedEntries = (singleSelectedRowIds: UidMap[], selectedData: FieldMapType[]) => { + const handleSelectedEntries = (singleSelectedRowIds: string[], selectedData: FieldMapType[]) => { const selectedObj: UidMap = {}; - singleSelectedRowIds.forEach((uid: any) => { + singleSelectedRowIds.forEach((uid: string) => { selectedObj[uid] = true; }); @@ -516,7 +465,7 @@ const ContentMapper = () => { setOtherContentType(value); }; - const handleAdvancedSetting = (fieldtype: string, fieldvalue: Advanced, rowId: string, data: FieldMapType) => { + const handleAdvancedSetting = (fieldtype: string, fieldvalue: UpdatedSettings, rowId: string, data: FieldMapType) => { return cbModal({ component: (props: ModalObj) => ( { const fieldLabel = data?.ContentstackFieldType === 'url' || data?.ContentstackFieldType === 'group' ? data?.ContentstackFieldType : option?.[0]?.label - + return (
    @@ -580,7 +529,7 @@ const ContentMapper = () => { icon="Setting" size="small" onClick={() => - handleAdvancedSetting(fieldLabel, data?.advanced, data?.uid, data) + handleAdvancedSetting(fieldLabel, advancePropertise, data?.uid, data) } /> @@ -942,10 +891,6 @@ const ContentMapper = () => { default: false }); } - const nextButtonLabel = - currentIndex < contentTypes?.length - 1 ? contentTypes[currentIndex + 1]?.otherCmsTitle : ''; - - const prevButtonLabel = currentIndex > 0 ? contentTypes[currentIndex - 1]?.otherCmsTitle : ''; const options = contentTypesList?.map((item) => ({ label: item?.title, @@ -954,11 +899,38 @@ const ContentMapper = () => { isDisabled: false })); - const adjustedOption = options?.map((option: any) => ({ + const adjustedOption = options?.map((option) => ({ ...option, isDisabled: contentTypeMapped && Object.values(contentTypeMapped).includes(option?.label) })); + // Function to toggle filter panel + const handleFilter = (e: React.MouseEvent) => { + e.stopPropagation(); + setShowFilter(!showFilter) + } + + // Function to filter content types as per the status + const handleContentTypeFilter = (e: React.MouseEvent) => { + const li_list = document.querySelectorAll('.filter-wrapper li'); + if(li_list) { + li_list.forEach((ele) => { + ele?.classList?.remove('active-filter'); + }) + } + (e?.target as HTMLElement) ?.classList?.add('active-filter'); + const filterVal = (e?.target as HTMLElement)?.innerText; + const filteredCT = contentTypes?.filter((ct) => CONTENT_MAPPING_STATUS[ct?.status] === filterVal) + setFilteredContentTypes(filteredCT); + } + + // Function to close filter panel on click outside + const handleClickOutside = (evt: MouseEvent) => { + if (!ref.current?.contains(evt.target as Node)) { + setShowFilter(false); + } + }; + const calcHeight = () => { // Get the viewport height in pixels const viewportHeight = window.innerHeight; @@ -968,7 +940,6 @@ const ContentMapper = () => { return result; } - const tableHeight = calcHeight(); return ( @@ -990,48 +961,65 @@ const ContentMapper = () => { value={searchContentType} debounceSearch={true} /> + + + {showFilter && ( +
    +
      + {Object.keys(CONTENT_MAPPING_STATUS).map((key, keyInd) => ( +
    • handleContentTypeFilter(e)}>{CONTENT_MAPPING_STATUS[key]}
    • + ))} +
    +
    + )}
    - {contentTypes && validateArray(contentTypes) && ( + {filteredContentTypes && validateArray(filteredContentTypes) && (
      - {contentTypes?.map((content: ContentType, index: number) => ( + {filteredContentTypes?.map((content: ContentType, index: number) => { + const statusText = CONTENT_MAPPING_STATUS[content?.status]; + const icon = STATUS_ICON_Mapping[content?.status] || ''; + return (
    • openContentType(e, index)} + onClick={() => openContentType(index)} + onKeyDown={() => openContentType(index)} > - {content?.otherCmsTitle} - - {active == index && ( - - - - - /* - handleOnClick(content?.otherCmsTitle)} - /> - */ - )} + {content?.otherCmsTitle} + +
      + + {icon && } + {statusText} + + + {active == index && ( + + + + + )} +
    • - ))} + ) +})}
    )} diff --git a/ui/src/components/DestinationStack/Actions/LoadStacks.tsx b/ui/src/components/DestinationStack/Actions/LoadStacks.tsx index 4bc2c2792..5e3a38502 100644 --- a/ui/src/components/DestinationStack/Actions/LoadStacks.tsx +++ b/ui/src/components/DestinationStack/Actions/LoadStacks.tsx @@ -5,17 +5,21 @@ import { DEFAULT_DROPDOWN, IDropDown, INewMigration } from '../../../context/app import { isEmptyString, validateArray } from '../../../utilities/functions'; import { createStacksInOrg, getAllStacksInOrg } from '../../../services/api/stacks.service'; import { StackResponse } from '../../../services/api/service.interface'; -import AddStack, { Stack } from '../../../components/Common/AddStack/addStack'; +import AddStack from '../../Common/AddStack/addStack'; +import { Stack } from '../../Common/AddStack/addStack.interface'; import { updateDestinationStack } from '../../../services/api/migration.service'; import { Params, useParams } from 'react-router'; import { RootState } from '../../../store'; import { updateNewMigrationData } from '../../../store/slice/migrationDataSlice'; interface LoadFileFormatProps { - stepComponentProps: any; + stepComponentProps: stepComponentPropsType; currentStep: number; handleStepChange: (stepIndex: number, closeStep?: boolean) => void; } +interface stepComponentPropsType { + isSummary: boolean; +} const defaultStack = { description: 'Created from Migration Destination Stack Step', @@ -24,6 +28,9 @@ const defaultStack = { }; const LoadStacks = (props: LoadFileFormatProps) => { + + console.log("props", props); + /**** ALL HOOKS HERE ****/ const newMigrationData = useSelector((state:RootState)=>state?.migration?.newMigrationData); diff --git a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx index 7311d0bc4..62388a1c0 100644 --- a/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx +++ b/ui/src/components/LegacyCms/Actions/LoadUploadFile.tsx @@ -291,7 +291,7 @@ const LoadUploadFile = (props: LoadUploadFileProps) => { ) : } {showMessage && - () + () }
    diff --git a/ui/src/utilities/constants.ts b/ui/src/utilities/constants.ts index b41d375bc..ff8173676 100644 --- a/ui/src/utilities/constants.ts +++ b/ui/src/utilities/constants.ts @@ -86,3 +86,16 @@ export const NEW_PROJECT_STATUS: ObjectType = { export const isOfflineCMSDataRequired = process.env.REACT_APP_OFFLINE_CMS ? process.env.REACT_APP_OFFLINE_CMS : true; + +export const CONTENT_MAPPING_STATUS: ObjectType = { + '1': 'Auto-Mapped', + '2': 'Verified', + '3': 'Mapping Failed' + // '4': 'Auto-Dump' +} +export const STATUS_ICON_Mapping: { [key: string]: string } = { + '1': 'Information', + '2': 'CheckCircleDark', + '3': 'Warning', + '4': 'completed' +}; \ No newline at end of file From b37844dbe6ae1c8235b41d2425ea9422489a9c9b Mon Sep 17 00:00:00 2001 From: Rohit Kini Date: Tue, 2 Jul 2024 18:28:52 +0530 Subject: [PATCH 057/759] added profile card --- ui/package-lock.json | 303 ++++++++++++++------- ui/src/common/assets/icons.tsx | 8 + ui/src/components/MainHeader/index.scss | 32 ++- ui/src/components/MainHeader/index.tsx | 12 +- ui/src/components/ProfileHeader/index.scss | 78 ++++++ ui/src/components/ProfileHeader/index.tsx | 40 +++ 6 files changed, 373 insertions(+), 100 deletions(-) create mode 100644 ui/src/components/ProfileHeader/index.scss create mode 100644 ui/src/components/ProfileHeader/index.tsx diff --git a/ui/package-lock.json b/ui/package-lock.json index d5e165910..d2cab51b3 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.0", "dependencies": { "@contentstack/json-rte-serializer": "^2.0.5", - "@contentstack/venus-components": "1.5.1", + "@contentstack/venus-components": "^2.2.4", "@reduxjs/toolkit": "^2.2.5", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", @@ -2035,15 +2035,18 @@ } }, "node_modules/@contentstack/venus-components": { - "version": "1.5.1", - "resolved": "https://npm.pkg.github.com/download/@contentstack/venus-components/1.5.1/463c96c30d838f3fe4c5c9b47cd152527f0bd367", - "integrity": "sha512-wLZPaokr/Q3DHuRGOU1AC9tPrTDitvjDGpcOWuzeexFmWFXE8RRwy8IPLXhDUm7ofYCoi8FD7sDGdJ2bU/eGyA==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@contentstack/venus-components/-/venus-components-2.2.4.tgz", + "integrity": "sha512-/Dijz5LDSR/UMxJtT0e7AWZnLXFuRBe6JamksOGXHOQQaEKYvye0oaQfSQq8Mjmb+D9WAN5BXOfMRBhzZA+aQQ==", "dependencies": { "@emotion/css": "^11.1.3", + "@testing-library/react-hooks": "^8.0.1", "@tippyjs/react": "^4.1.0", "array-move": "^3.0.1", "axios": "0.25.0", "browser-detect": "^0.2.28", + "cache": "^3.0.0", + "clean": "^4.0.2", "collapse-whitespace": "^1.1.7", "detect-browser": "^5.3.0", "dompurify": "^2.4.1", @@ -2060,11 +2063,12 @@ "react-ace": "^9.1.4", "react-beautiful-dnd": "^13.0.0", "react-color": "^2.19.3", - "react-datepicker": "^3.3.0", - "react-dnd": "^11.1.3", + "react-datepicker": "^4.25.0", + "react-dnd-11": "npm:react-dnd@^11.1.3", "react-dnd-html5-backend": "^11.1.3", "react-dropzone": "^11.2.4", "react-infinite-scroll-component": "^6.1.0", + "react-input-mask": "^3.0.0-alpha.2", "react-mentions": "^4.4.7", "react-modal": "^3.11.2", "react-redux": "^7.2.1", @@ -2078,6 +2082,7 @@ "react-tiktok": "^1.0.0", "react-toastify": "6.1.0", "react-treebeard": "^3.2.4", + "react-virtualized": "^9.22.5", "react-virtualized-auto-sizer": "1.0.5", "react-window": "^1.8.5", "react-window-infinite-loader": "^1.0.5", @@ -2092,6 +2097,7 @@ "slate-react": "^0.77.4", "storybook-addon-whats-new": "^1.0.3", "systemjs": "^6.10.2", + "user-event": "^4.0.0", "uuid": "^8.3.2" }, "peerDependencies": { @@ -2152,6 +2158,54 @@ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, + "node_modules/@contentstack/venus-components/node_modules/@testing-library/react-hooks": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-8.0.1.tgz", + "integrity": "sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "react-error-boundary": "^3.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0", + "react": "^16.9.0 || ^17.0.0", + "react-dom": "^16.9.0 || ^17.0.0", + "react-test-renderer": "^16.9.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-test-renderer": { + "optional": true + } + } + }, + "node_modules/@contentstack/venus-components/node_modules/@types/react": { + "version": "17.0.80", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.80.tgz", + "integrity": "sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA==", + "optional": true, + "peer": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "^0.16", + "csstype": "^3.0.2" + } + }, + "node_modules/@contentstack/venus-components/node_modules/@types/react/node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "optional": true, + "peer": true + }, "node_modules/@contentstack/venus-components/node_modules/axios": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", @@ -2165,25 +2219,6 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, - "node_modules/@contentstack/venus-components/node_modules/deep-equal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", - "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", - "dependencies": { - "is-arguments": "^1.1.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.5.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/@contentstack/venus-components/node_modules/react-ace": { "version": "9.5.0", "resolved": "https://registry.npmjs.org/react-ace/-/react-ace-9.5.0.tgz", @@ -2200,39 +2235,6 @@ "react-dom": "^0.13.0 || ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@contentstack/venus-components/node_modules/react-datepicker": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-3.8.0.tgz", - "integrity": "sha512-iFVNEp8DJoX5yEvEiciM7sJKmLGrvE70U38KhpG13XrulNSijeHw1RZkhd/0UmuXR71dcZB/kdfjiidifstZjw==", - "dependencies": { - "classnames": "^2.2.6", - "date-fns": "^2.0.1", - "prop-types": "^15.7.2", - "react-onclickoutside": "^6.10.0", - "react-popper": "^1.3.8" - }, - "peerDependencies": { - "react": "^16.9.0 || ^17", - "react-dom": "^16.9.0 || ^17" - } - }, - "node_modules/@contentstack/venus-components/node_modules/react-datepicker/node_modules/react-popper": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-1.3.11.tgz", - "integrity": "sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "@hypnosphi/create-react-context": "^0.3.1", - "deep-equal": "^1.1.1", - "popper.js": "^1.14.4", - "prop-types": "^15.6.1", - "typed-styles": "^0.0.7", - "warning": "^4.0.2" - }, - "peerDependencies": { - "react": "0.14.x || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, "node_modules/@contentstack/venus-components/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -3133,19 +3135,6 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==" }, - "node_modules/@hypnosphi/create-react-context": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz", - "integrity": "sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A==", - "dependencies": { - "gud": "^1.0.0", - "warning": "^4.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": ">=0.14.0" - } - }, "node_modules/@icons/material": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", @@ -8040,6 +8029,14 @@ "node": ">= 0.8" } }, + "node_modules/cache": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cache/-/cache-3.0.0.tgz", + "integrity": "sha512-sNoM5jithfalxIceo/uFFm5bOlGjux2y8jEvjNb0F/cACWQaMmWuEPTLl6GzLHdFcNsbWBBdqkBd9NyefZ5UQQ==", + "dependencies": { + "ds": "^1.4.2" + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -8213,6 +8210,17 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, + "node_modules/clean": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/clean/-/clean-4.0.2.tgz", + "integrity": "sha512-2LGVh4dNtI16L4UzqDHO6Hbl74YjG1vWvEUU78dgLO4kuyqJZFMNMPBx+EGtYKTFb14e24p+gWXgkabqxc1EUw==", + "dependencies": { + "async": "^0.9.0", + "minimist": "^1.1.0", + "mix2": "^1.0.0", + "skema": "^1.0.0" + } + }, "node_modules/clean-css": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", @@ -8232,6 +8240,11 @@ "node": ">=0.10.0" } }, + "node_modules/clean/node_modules/async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==" + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -9643,6 +9656,11 @@ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" }, + "node_modules/ds": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/ds/-/ds-1.4.2.tgz", + "integrity": "sha512-d5nMCjfod+srvE/1Bnt/u+L++6N8KJx3ZAi95AGp0g6RtfuGDNlGciWL/iiwKHsFVBVnA3/HEFUq5SW1NgTQ3Q==" + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -11709,11 +11727,6 @@ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, - "node_modules/gud": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" - }, "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", @@ -17126,6 +17139,14 @@ "sourcemap-codec": "^1.4.8" } }, + "node_modules/make-array": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/make-array/-/make-array-0.1.2.tgz", + "integrity": "sha512-bcFmxgZ+OTaMYJp/w6eifElKTcfum7Gi5H7vQ8KzAf9X6swdxkVuilCaG3ZjXr/qJsQT4JJ2Rq9SDYScWEdu9Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -17389,6 +17410,14 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/mix2": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/mix2/-/mix2-1.0.5.tgz", + "integrity": "sha512-ybWz7nY+WHBBIyliND5eYaJKzkoa+qXRYNTmVqAxSLlFtL/umT2iv+pmyTu1oU7WNkrirwheqR8d9EaKVz0e5g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -18098,16 +18127,6 @@ "node": ">=4" } }, - "node_modules/popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", - "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, "node_modules/postcss": { "version": "8.4.33", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", @@ -19758,6 +19777,23 @@ "react": "*" } }, + "node_modules/react-datepicker": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-4.25.0.tgz", + "integrity": "sha512-zB7CSi44SJ0sqo8hUQ3BF1saE/knn7u25qEMTO1CQGofY1VAKahO8k9drZtp0cfW1DMfoYLR3uSY1/uMvbEzbg==", + "dependencies": { + "@popperjs/core": "^2.11.8", + "classnames": "^2.2.6", + "date-fns": "^2.30.0", + "prop-types": "^15.7.2", + "react-onclickoutside": "^6.13.0", + "react-popper": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17 || ^18", + "react-dom": "^16.9.0 || ^17 || ^18" + } + }, "node_modules/react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", @@ -19875,7 +19911,8 @@ "node": ">=8" } }, - "node_modules/react-dnd": { + "node_modules/react-dnd-11": { + "name": "react-dnd", "version": "11.1.3", "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-11.1.3.tgz", "integrity": "sha512-8rtzzT8iwHgdSC89VktwhqdKKtfXaAyC4wiqp0SywpHG12TTLvfOoL6xNEIUWXwIEWu+CFfDn4GZJyynCEuHIQ==", @@ -19926,6 +19963,21 @@ "react": ">= 16.8" } }, + "node_modules/react-error-boundary": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz", + "integrity": "sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "react": ">=16.13.1" + } + }, "node_modules/react-error-overlay": { "version": "6.0.11", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", @@ -19977,6 +20029,20 @@ "react": ">=16.0.0" } }, + "node_modules/react-input-mask": { + "version": "3.0.0-alpha.2", + "resolved": "https://registry.npmjs.org/react-input-mask/-/react-input-mask-3.0.0-alpha.2.tgz", + "integrity": "sha512-9U7qL+mvDMOJcbOFPdt6Vj+zzmCMNnBjhhjGDrL8BGQmymgvMVKhu/oOVfAkl+5VWOsLr+G3EhZOmae5fBcAkA==", + "dependencies": { + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -20034,9 +20100,9 @@ } }, "node_modules/react-onclickoutside": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.13.0.tgz", - "integrity": "sha512-ty8So6tcUpIb+ZE+1HAhbLROvAIJYyJe/1vRrrcmW+jLsaM+/powDRqxzo6hSh9CuRZGSL1Q8mvcF5WRD93a0A==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.13.1.tgz", + "integrity": "sha512-LdrrxK/Yh9zbBQdFbMTXPp3dTSN9B+9YJQucdDu3JNKRrbdU+H+/TVONJoWtOwy4II8Sqf1y/DTI6w/vGPYW0w==", "funding": { "type": "individual", "url": "https://github.com/Pomax/react-onclickoutside/blob/master/FUNDING.md" @@ -20046,6 +20112,20 @@ "react-dom": "^15.5.x || ^16.x || ^17.x || ^18.x" } }, + "node_modules/react-popper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz", + "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==", + "dependencies": { + "react-fast-compare": "^3.0.1", + "warning": "^4.0.2" + }, + "peerDependencies": { + "@popperjs/core": "^2.0.0", + "react": "^16.8.0 || ^17 || ^18", + "react-dom": "^16.8.0 || ^17 || ^18" + } + }, "node_modules/react-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.2.tgz", @@ -20412,6 +20492,23 @@ "react-dom": "^15.3.0 || ^16.0.0" } }, + "node_modules/react-virtualized": { + "version": "9.22.5", + "resolved": "https://registry.npmjs.org/react-virtualized/-/react-virtualized-9.22.5.tgz", + "integrity": "sha512-YqQMRzlVANBv1L/7r63OHa2b0ZsAaDp1UhVNEdUaXI8A5u6hTpA5NYtUueLH2rFuY/27mTGIBl7ZhqFKzw18YQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "clsx": "^1.0.4", + "dom-helpers": "^5.1.3", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-lifecycles-compat": "^3.0.4" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0", + "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-window": { "version": "1.8.10", "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.10.tgz", @@ -21443,6 +21540,21 @@ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, + "node_modules/skema": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/skema/-/skema-1.0.2.tgz", + "integrity": "sha512-5LWfF2RSW2B3xfOaY6j49X8aNwsnj9cRVrM5QMF7it+cZvpv5ufiOUT13ps2U52sIbAzs11bdRP6mi5qyg75VQ==", + "dependencies": { + "async": "^0.9.0", + "make-array": "^0.1.2", + "mix2": "^1.0.0" + } + }, + "node_modules/skema/node_modules/async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==" + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -22784,11 +22896,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typed-styles": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz", - "integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==" - }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -22972,6 +23079,12 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/user-event": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/user-event/-/user-event-4.0.0.tgz", + "integrity": "sha512-M2at0vzLqzrwZNBmtPDRyd+1BaRwU9UTG7sc+MrUZmGviR/Ws8tmXxVvfRvuv7TWWIDsLqbrMvoF1sF7DW4y5w==", + "deprecated": "user-event has moved to @testing-library/user-event. Please uninstall user-event and install @testing-library/user-event instead, or use an older version of user-event. Learn more about this change here: https://github.com/testing-library/dom-testing-library/issues/260 Thanks! :)" + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/ui/src/common/assets/icons.tsx b/ui/src/common/assets/icons.tsx index ac841d3e9..179668e2e 100644 --- a/ui/src/common/assets/icons.tsx +++ b/ui/src/common/assets/icons.tsx @@ -763,3 +763,11 @@ export const SEARCH_ICON = ( /> ); + +export const LOG_OUT = ( + + + + + +); \ No newline at end of file diff --git a/ui/src/components/MainHeader/index.scss b/ui/src/components/MainHeader/index.scss index fa7155642..a08bd3287 100644 --- a/ui/src/components/MainHeader/index.scss +++ b/ui/src/components/MainHeader/index.scss @@ -1,6 +1,21 @@ @import '../../scss/variables'; .mainheader { + [class*="Profile_card"] { + [class*="Dropdown__menu__list"] { + padding: 0; + } + + [class*="Dropdown__menu__list__item"] { + pointer-events: none; + padding: 0; + + [class*="profile-card__logout"] { + pointer-events: all; + } + } + } + background-color: $color-brand-white-base; height: 3.5rem; justify-content: space-between; @@ -10,13 +25,16 @@ display: flex; align-items: center; z-index: 100; + button { border: 0 none; } + .logo { position: relative; text-align: center; width: 3.5rem; + a { align-items: center; display: flex; @@ -25,32 +43,40 @@ padding: 0.5rem; text-decoration: none; } + a:focus { border-radius: 5px; box-shadow: 0 0 1px $color-brand-primary-base, 0 0 0 4px #bbb4f4; } } + .organisationWrapper { margin-left: 1.063rem; + &:focus { box-shadow: none; } - } + } + .Dropdown { &:focus { box-shadow: none; } } + .Dropdown-wrapper { padding: 0 18px; } + .Dropdown.Dropdown--hover .Dropdown__menu--primary { top: 2.5rem; } + .organisationWrapper { &:focus { box-shadow: none; } + .Dropdown__header__value { color: #475161; max-width: 11.1875rem; @@ -58,14 +84,16 @@ color: $color-black-222 !important; line-height: $line-height-reset; } + .Dropdown__menu--primary .Dropdown__menu__list__item, .Dropdown__menu--secondary .Dropdown__menu__list__item, .Dropdown__menu--tertiary .Dropdown__menu__list__item { max-width: 14.5rem; } + .Dropdown__header__label { line-height: $line-height-reset; margin-bottom: 8px; } } -} +} \ No newline at end of file diff --git a/ui/src/components/MainHeader/index.tsx b/ui/src/components/MainHeader/index.tsx index 1061a0712..160db5d07 100644 --- a/ui/src/components/MainHeader/index.tsx +++ b/ui/src/components/MainHeader/index.tsx @@ -1,7 +1,7 @@ // Libraries import { useEffect, useState } from 'react'; import { useNavigate, useLocation, Link } from 'react-router-dom'; -import { Dropdown, Tooltip } from '@contentstack/venus-components'; +import { Dropdown, Tooltip , Accordion} from '@contentstack/venus-components'; import { useDispatch, useSelector } from 'react-redux'; // Service @@ -23,6 +23,7 @@ import { import { MainHeaderType } from './mainheader.interface'; import { IDropDown } from '../../context/app/app.interface'; +import ProfileCard from '../ProfileHeader'; // Styles import './index.scss'; @@ -129,15 +130,20 @@ const MainHeader = () => { , } ]} type="click" + className="Profile_card" >
    {name}
    + {/* +
    {name}
    +

    HIIIIIIIIII

    +
    */}
    }
    diff --git a/ui/src/components/ProfileHeader/index.scss b/ui/src/components/ProfileHeader/index.scss new file mode 100644 index 000000000..193fd1886 --- /dev/null +++ b/ui/src/components/ProfileHeader/index.scss @@ -0,0 +1,78 @@ +@import '../../scss/variables'; + +.profile-card { + width: 300px; + padding: 16px; + // background-color: #f8f9fa; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + text-align: center; +} + +.profile-card__avatar { + margin-bottom: 16px; +} + +.profile-card__initials { + width: 64px; + height: 64px; + border-radius: 50%; + background-color: #2c3e50; + color: white; + display: flex; + align-items: center; + justify-content: center; + font-size: 24px; + margin: 12px auto; + +} + +.profile-card__details { + margin-bottom: 16px; +} + +.profile-card__name { + font-size: 16px; + font-weight: 500; + color: #2c3e50; + margin-bottom: 5px; +} + +.profile-card__email { + font-size: 14px; + color: #7f8c8d; + margin-bottom: 5px; +} + +.profile-card__logout { + display: flex; + align-items: center; + cursor: pointer; + color: #2c3e50; + font-size: 14px; + height:56px; +} + +.profile-card__logout-icon { + margin-right: 8px; + font-size: 16px; +} + +.profile-card__logout-text { + text-decoration: underline; +} + +.profile-gray-background { + min-height: 20px; + position: absolute; + width: 350px; + height: 64px; + top: 0; + left: 0; + background-color: #F9F8FF; + z-index: 1; +} +.profile-card__avatar { + z-index: 2; + position: relative; +} \ No newline at end of file diff --git a/ui/src/components/ProfileHeader/index.tsx b/ui/src/components/ProfileHeader/index.tsx new file mode 100644 index 000000000..36c067b1a --- /dev/null +++ b/ui/src/components/ProfileHeader/index.tsx @@ -0,0 +1,40 @@ +// Redux +import { RootState } from '../../store'; + +import { useSelector } from 'react-redux'; +import { useNavigate } from 'react-router-dom'; +import { + clearLocalStorage, +} from '../../utilities/functions'; +// Styles +import './index.scss'; +import { LOG_OUT } from '../../common/assets'; +const ProfileCard = () => { + const user = useSelector((state:RootState)=>state?.authentication?.user); + const name = `${user?.first_name?.charAt(0)}${user?.last_name?.charAt(0)}`.toUpperCase() ?? ''; + const navigate = useNavigate(); + // Function for Logout + const handleLogout = () => { + if (clearLocalStorage()) { + navigate('/', { replace: true }); + } + }; + return ( +
    +
    +
    +
    {name}
    +
    +
    +
    {user?.first_name} {user?.last_name}
    +
    {user?.email}
    +
    +
    + {LOG_OUT} + Log out +
    +
    + ); +}; + +export default ProfileCard; From 767d8b5de58e4b0646dc35a61b1fbf8a0535e6f2 Mon Sep 17 00:00:00 2001 From: Rohit Kini Date: Tue, 2 Jul 2024 18:34:19 +0530 Subject: [PATCH 058/759] added profile card --- ui/src/components/MainHeader/index.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/ui/src/components/MainHeader/index.tsx b/ui/src/components/MainHeader/index.tsx index 160db5d07..568bdd8a0 100644 --- a/ui/src/components/MainHeader/index.tsx +++ b/ui/src/components/MainHeader/index.tsx @@ -1,7 +1,7 @@ // Libraries import { useEffect, useState } from 'react'; import { useNavigate, useLocation, Link } from 'react-router-dom'; -import { Dropdown, Tooltip , Accordion} from '@contentstack/venus-components'; +import { Dropdown, Tooltip} from '@contentstack/venus-components'; import { useDispatch, useSelector } from 'react-redux'; // Service @@ -130,7 +130,6 @@ const MainHeader = () => { , } @@ -140,10 +139,6 @@ const MainHeader = () => { >
    {name}
    - {/* -
    {name}
    -

    HIIIIIIIIII

    -
    */}
    }
    From d6bf47210203d3284362f5f4e9b9e9ea15b4b68c Mon Sep 17 00:00:00 2001 From: Sayali Joshi Date: Tue, 2 Jul 2024 19:17:51 +0530 Subject: [PATCH 059/759] Done functionality fixes for existing content type mapping --- .../ContentMapper/contentMapper.interface.ts | 1 + ui/src/components/ContentMapper/index.tsx | 43 ++++++++++++------- .../DestinationStack/Actions/LoadStacks.tsx | 3 -- ui/src/components/Modal/index.tsx | 2 +- 4 files changed, 29 insertions(+), 20 deletions(-) diff --git a/ui/src/components/ContentMapper/contentMapper.interface.ts b/ui/src/components/ContentMapper/contentMapper.interface.ts index c81eba9f5..993c32d54 100644 --- a/ui/src/components/ContentMapper/contentMapper.interface.ts +++ b/ui/src/components/ContentMapper/contentMapper.interface.ts @@ -26,6 +26,7 @@ export interface FieldTypes { label: string; value: any; id?: string; + isDisabled?: boolean; } export interface TableTypes { sortBy: any; diff --git a/ui/src/components/ContentMapper/index.tsx b/ui/src/components/ContentMapper/index.tsx index e72a6339f..a6acc2130 100644 --- a/ui/src/components/ContentMapper/index.tsx +++ b/ui/src/components/ContentMapper/index.tsx @@ -694,7 +694,13 @@ const ContentMapper = () => { const OptionValue: FieldTypes = OptionsForRow?.length === 0 - ? { label: 'No matches found', value: 'No matches found' } + ? { + label: data?.ContentstackFieldType, + value: data?.ContentstackFieldType, + isDisabled: data?.ContentstackFieldType === 'group' || + data?.ContentstackFieldType === 'text' || + data?.ContentstackFieldType === 'url' + } : { label: `${selectedOption} matches`, value: `${selectedOption} matches` }; const adjustedOptions = OptionsForRow.map((option: optionsType) => ({ @@ -713,23 +719,28 @@ const ContentMapper = () => { maxWidth="290px" isClearable={false} options={adjustedOptions} + isDisabled={ + OptionValue?.isDisabled + } />
    - { - // const value = { - // ValidationRegex: data?.advanced?.ValidationRegex, - // Mandatory: data?.advanced?.mandatory, - // Multiple: data?.advanced?.multiple, - // Unique: data?.advanced?.unique, - // NonLocalizable: data?.advanced?.nonLocalizable - // }; - handleAdvancedSetting(data?.ContentstackFieldType, advancePropertise, data?.uid, data); - }} - /> + {!OptionValue?.isDisabled && ( + { + // const value = { + // ValidationRegex: data?.advanced?.ValidationRegex, + // Mandatory: data?.advanced?.mandatory, + // Multiple: data?.advanced?.multiple, + // Unique: data?.advanced?.unique, + // NonLocalizable: data?.advanced?.nonLocalizable + // }; + handleAdvancedSetting(data?.ContentstackFieldType, advancePropertise, data?.uid, data); + }} + /> + )}
    ); }; diff --git a/ui/src/components/DestinationStack/Actions/LoadStacks.tsx b/ui/src/components/DestinationStack/Actions/LoadStacks.tsx index 5e3a38502..cb95bfefa 100644 --- a/ui/src/components/DestinationStack/Actions/LoadStacks.tsx +++ b/ui/src/components/DestinationStack/Actions/LoadStacks.tsx @@ -28,9 +28,6 @@ const defaultStack = { }; const LoadStacks = (props: LoadFileFormatProps) => { - - console.log("props", props); - /**** ALL HOOKS HERE ****/ const newMigrationData = useSelector((state:RootState)=>state?.migration?.newMigrationData); diff --git a/ui/src/components/Modal/index.tsx b/ui/src/components/Modal/index.tsx index 2f4c433b0..3ec3cc865 100644 --- a/ui/src/components/Modal/index.tsx +++ b/ui/src/components/Modal/index.tsx @@ -159,7 +159,7 @@ const Modal = (props: ProjectModalProps) => {