forked from OpenWF/SpaceNinjaServer
		
	chore: turn getJSONfromString into a template/generic function (#836)
This commit is contained in:
		
							parent
							
								
									61f63dd40f
								
							
						
					
					
						commit
						8b836020bf
					
				@ -9,7 +9,7 @@ import { ExportUpgrades } from "warframe-public-export-plus";
 | 
			
		||||
export const activateRandomModController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
    const request = getJSONfromString(String(req.body)) as IActiveRandomModRequest;
 | 
			
		||||
    const request = getJSONfromString<IActiveRandomModRequest>(String(req.body));
 | 
			
		||||
    addMods(inventory, [
 | 
			
		||||
        {
 | 
			
		||||
            ItemType: request.ItemType,
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@ import { getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
 | 
			
		||||
const addFriendImageController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const json = getJSONfromString(String(req.body)) as IUpdateGlyphRequest;
 | 
			
		||||
    const json = getJSONfromString<IUpdateGlyphRequest>(String(req.body));
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
    inventory.ActiveAvatarImageType = json.AvatarImageType;
 | 
			
		||||
    await inventory.save();
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@ import { IOid } from "@/src/types/commonTypes";
 | 
			
		||||
 | 
			
		||||
export const arcaneCommonController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const json = getJSONfromString(String(req.body)) as IArcaneCommonRequest;
 | 
			
		||||
    const json = getJSONfromString<IArcaneCommonRequest>(String(req.body));
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
    const upgrade = inventory.Upgrades.id(json.arcane.ItemId.$oid);
 | 
			
		||||
    if (json.newRank == -1) {
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ import { config } from "@/src/services/configService";
 | 
			
		||||
 | 
			
		||||
export const artifactsController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const artifactsData = getJSONfromString(String(req.body)) as IArtifactsRequest;
 | 
			
		||||
    const artifactsData = getJSONfromString<IArtifactsRequest>(String(req.body));
 | 
			
		||||
 | 
			
		||||
    const { Upgrade, LevelDiff, Cost, FusionPointCost } = artifactsData;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@ export interface IClaimCompletedRecipeRequest {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const claimCompletedRecipeController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const claimCompletedRecipeRequest = getJSONfromString(String(req.body)) as IClaimCompletedRecipeRequest;
 | 
			
		||||
    const claimCompletedRecipeRequest = getJSONfromString<IClaimCompletedRecipeRequest>(String(req.body));
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    if (!accountId) throw new Error("no account id");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@ import { Guild } from "@/src/models/guildModel";
 | 
			
		||||
 | 
			
		||||
export const createGuildController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const payload = getJSONfromString(String(req.body)) as ICreateGuildRequest;
 | 
			
		||||
    const payload = getJSONfromString<ICreateGuildRequest>(String(req.body));
 | 
			
		||||
 | 
			
		||||
    // Create guild on database
 | 
			
		||||
    const guild = new Guild({
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ import { TEndlessXpCategory } from "@/src/types/inventoryTypes/inventoryTypes";
 | 
			
		||||
export const endlessXpController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
    const payload = getJSONfromString(String(req.body)) as IEndlessXpRequest;
 | 
			
		||||
    const payload = getJSONfromString<IEndlessXpRequest>(String(req.body));
 | 
			
		||||
 | 
			
		||||
    inventory.EndlessXP ??= [];
 | 
			
		||||
    const entry = inventory.EndlessXP.find(x => x.Category == payload.Category);
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@ import { EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTyp
 | 
			
		||||
export const evolveWeaponController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
    const payload = getJSONfromString(String(req.body)) as IEvolveWeaponRequest;
 | 
			
		||||
    const payload = getJSONfromString<IEvolveWeaponRequest>(String(req.body));
 | 
			
		||||
 | 
			
		||||
    const recipe = getRecipe(payload.Recipe)!;
 | 
			
		||||
    if (payload.Action == "EWA_INSTALL") {
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@ import { ExportResources, ExportSyndicates } from "warframe-public-export-plus";
 | 
			
		||||
export const fishmongerController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
    const body = getJSONfromString(String(req.body)) as IFishmongerRequest;
 | 
			
		||||
    const body = getJSONfromString<IFishmongerRequest>(String(req.body));
 | 
			
		||||
    const miscItemChanges: IMiscItem[] = [];
 | 
			
		||||
    let syndicateTag: string | undefined;
 | 
			
		||||
    let gainedStanding = 0;
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@ import { IGenericUpdate } from "@/src/types/genericUpdate";
 | 
			
		||||
 | 
			
		||||
const genericUpdateController: RequestHandler = async (request, response) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(request);
 | 
			
		||||
    const update = getJSONfromString(String(request.body)) as IGenericUpdate;
 | 
			
		||||
    const update = getJSONfromString<IGenericUpdate>(String(request.body));
 | 
			
		||||
    await updateGeneric(update, accountId);
 | 
			
		||||
    response.json(update);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@ import { ExportRelics, ExportRewards, TRarity } from "warframe-public-export-plu
 | 
			
		||||
 | 
			
		||||
export const getVoidProjectionRewardsController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const data = getJSONfromString(String(req.body)) as IVoidProjectionRewardRequest;
 | 
			
		||||
    const data = getJSONfromString<IVoidProjectionRewardRequest>(String(req.body));
 | 
			
		||||
    const response: IVoidProjectionRewardResponse = {
 | 
			
		||||
        CurrentWave: data.CurrentWave,
 | 
			
		||||
        ParticipantInfo: data.ParticipantInfo,
 | 
			
		||||
 | 
			
		||||
@ -26,7 +26,7 @@ interface IGildWeaponRequest {
 | 
			
		||||
 | 
			
		||||
export const gildWeaponController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const data = getJSONfromString(String(req.body)) as IGildWeaponRequest;
 | 
			
		||||
    const data = getJSONfromString<IGildWeaponRequest>(String(req.body));
 | 
			
		||||
    data.ItemId = String(req.query.ItemId);
 | 
			
		||||
    if (!modularWeaponCategory.includes(req.query.Category as WeaponTypeInternal | "Hoverboards")) {
 | 
			
		||||
        throw new Error(`Unknown modular weapon Category: ${String(req.query.Category)}`);
 | 
			
		||||
 | 
			
		||||
@ -5,9 +5,9 @@ import { addKeyChainItems, getInventory } from "@/src/services/inventoryService"
 | 
			
		||||
 | 
			
		||||
export const giveKeyChainTriggeredItemsController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = parseString(req.query.accountId);
 | 
			
		||||
    const keyChainTriggeredItemsRequest = getJSONfromString(
 | 
			
		||||
    const keyChainTriggeredItemsRequest = getJSONfromString<IGiveKeyChainTriggeredItemsRequest>(
 | 
			
		||||
        (req.body as string).toString()
 | 
			
		||||
    ) as IGiveKeyChainTriggeredItemsRequest;
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
    const inventoryChanges = await addKeyChainItems(inventory, keyChainTriggeredItemsRequest);
 | 
			
		||||
 | 
			
		||||
@ -22,7 +22,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
 | 
			
		||||
    switch (req.query.mode) {
 | 
			
		||||
        case "s": {
 | 
			
		||||
            // shard installation
 | 
			
		||||
            const request = getJSONfromString(String(req.body)) as IShardInstallRequest;
 | 
			
		||||
            const request = getJSONfromString<IShardInstallRequest>(String(req.body));
 | 
			
		||||
            const inventory = await getInventory(accountId);
 | 
			
		||||
            const suit = inventory.Suits.find(suit => suit._id.toString() == request.SuitId.$oid)!;
 | 
			
		||||
            if (!suit.ArchonCrystalUpgrades || suit.ArchonCrystalUpgrades.length != 5) {
 | 
			
		||||
@ -50,7 +50,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
 | 
			
		||||
 | 
			
		||||
        case "x": {
 | 
			
		||||
            // shard removal
 | 
			
		||||
            const request = getJSONfromString(String(req.body)) as IShardUninstallRequest;
 | 
			
		||||
            const request = getJSONfromString<IShardUninstallRequest>(String(req.body));
 | 
			
		||||
            const inventory = await getInventory(accountId);
 | 
			
		||||
            const suit = inventory.Suits.find(suit => suit._id.toString() == request.SuitId.$oid)!;
 | 
			
		||||
 | 
			
		||||
@ -88,7 +88,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
 | 
			
		||||
 | 
			
		||||
        case "n": {
 | 
			
		||||
            // name the beast
 | 
			
		||||
            const request = getJSONfromString(String(req.body)) as IHelminthNameRequest;
 | 
			
		||||
            const request = getJSONfromString<IHelminthNameRequest>(String(req.body));
 | 
			
		||||
            const inventory = await getInventory(accountId);
 | 
			
		||||
            inventory.InfestedFoundry ??= {};
 | 
			
		||||
            inventory.InfestedFoundry.Name = request.newName;
 | 
			
		||||
@ -105,7 +105,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
 | 
			
		||||
 | 
			
		||||
        case "c": {
 | 
			
		||||
            // consume items
 | 
			
		||||
            const request = getJSONfromString(String(req.body)) as IHelminthFeedRequest;
 | 
			
		||||
            const request = getJSONfromString<IHelminthFeedRequest>(String(req.body));
 | 
			
		||||
            const inventory = await getInventory(accountId);
 | 
			
		||||
            inventory.InfestedFoundry ??= {};
 | 
			
		||||
            inventory.InfestedFoundry.Resources ??= [];
 | 
			
		||||
@ -201,7 +201,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
 | 
			
		||||
 | 
			
		||||
        case "o": {
 | 
			
		||||
            // offerings update
 | 
			
		||||
            const request = getJSONfromString(String(req.body)) as IHelminthOfferingsUpdate;
 | 
			
		||||
            const request = getJSONfromString<IHelminthOfferingsUpdate>(String(req.body));
 | 
			
		||||
            const inventory = await getInventory(accountId);
 | 
			
		||||
            inventory.InfestedFoundry ??= {};
 | 
			
		||||
            inventory.InfestedFoundry.InvigorationIndex = request.OfferingsIndex;
 | 
			
		||||
@ -220,7 +220,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
 | 
			
		||||
 | 
			
		||||
        case "a": {
 | 
			
		||||
            // subsume warframe
 | 
			
		||||
            const request = getJSONfromString(String(req.body)) as IHelminthSubsumeRequest;
 | 
			
		||||
            const request = getJSONfromString<IHelminthSubsumeRequest>(String(req.body));
 | 
			
		||||
            const inventory = await getInventory(accountId);
 | 
			
		||||
            const recipe = getRecipe(request.Recipe)!;
 | 
			
		||||
            for (const ingredient of recipe.secretIngredients!) {
 | 
			
		||||
@ -283,7 +283,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        case "u": {
 | 
			
		||||
            const request = getJSONfromString(String(req.body)) as IHelminthInvigorationRequest;
 | 
			
		||||
            const request = getJSONfromString<IHelminthInvigorationRequest>(String(req.body));
 | 
			
		||||
            const inventory = await getInventory(accountId);
 | 
			
		||||
            const suit = inventory.Suits.id(request.SuitId.$oid)!;
 | 
			
		||||
            const upgradesExpiry = new Date(new Date().getTime() + 7 * 24 * 60 * 60 * 1000);
 | 
			
		||||
 | 
			
		||||
@ -52,7 +52,7 @@ import { getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
export const missionInventoryUpdateController: RequestHandler = async (req, res): Promise<void> => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
 | 
			
		||||
    const missionReport = getJSONfromString((req.body as string).toString()) as IMissionInventoryUpdateRequest;
 | 
			
		||||
    const missionReport = getJSONfromString<IMissionInventoryUpdateRequest>((req.body as string).toString());
 | 
			
		||||
 | 
			
		||||
    if (missionReport.MissionStatus !== "GS_SUCCESS") {
 | 
			
		||||
        console.log(`Mission failed: ${missionReport.RewardInfo?.node}`);
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,7 @@ interface IModularCraftRequest {
 | 
			
		||||
 | 
			
		||||
export const modularWeaponCraftingController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const data = getJSONfromString(String(req.body)) as IModularCraftRequest;
 | 
			
		||||
    const data = getJSONfromString<IModularCraftRequest>(String(req.body));
 | 
			
		||||
    if (!(data.WeaponType in modularWeaponTypes)) {
 | 
			
		||||
        throw new Error(`unknown modular weapon type: ${data.WeaponType}`);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,7 @@ interface INameWeaponRequest {
 | 
			
		||||
export const nameWeaponController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
    const body = getJSONfromString(String(req.body)) as INameWeaponRequest;
 | 
			
		||||
    const body = getJSONfromString<INameWeaponRequest>(String(req.body));
 | 
			
		||||
    const item = inventory[req.query.Category as string as TEquipmentKey].find(
 | 
			
		||||
        item => item._id.toString() == (req.query.ItemId as string)
 | 
			
		||||
    )!;
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ import { RequestHandler } from "express";
 | 
			
		||||
export const playerSkillsController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
    const request = getJSONfromString(String(req.body)) as IPlayerSkillsRequest;
 | 
			
		||||
    const request = getJSONfromString<IPlayerSkillsRequest>(String(req.body));
 | 
			
		||||
 | 
			
		||||
    const oldRank: number = inventory.PlayerSkills[request.Skill as keyof IPlayerSkills];
 | 
			
		||||
    const cost = (request.Pool == "LPP_DRIFTER" ? drifterCosts[oldRank] : 1 << oldRank) * 1000;
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ import { getRandomElement } from "@/src/services/rngService";
 | 
			
		||||
 | 
			
		||||
export const rerollRandomModController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const request = getJSONfromString(String(req.body)) as RerollRandomModRequest;
 | 
			
		||||
    const request = getJSONfromString<RerollRandomModRequest>(String(req.body));
 | 
			
		||||
    if ("ItemIds" in request) {
 | 
			
		||||
        const inventory = await getInventory(accountId, "Upgrades MiscItems");
 | 
			
		||||
        const upgrade = inventory.Upgrades.id(request.ItemIds[0])!;
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@ import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
			
		||||
export const setEquippedInstrumentController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
    const body = getJSONfromString(String(req.body)) as ISetEquippedInstrumentRequest;
 | 
			
		||||
    const body = getJSONfromString<ISetEquippedInstrumentRequest>(String(req.body));
 | 
			
		||||
    inventory.EquippedInstrument = body.Instrument;
 | 
			
		||||
    await inventory.save();
 | 
			
		||||
    res.end();
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ import { WeaponTypeInternal } from "@/src/services/itemDataService";
 | 
			
		||||
export const setWeaponSkillTreeController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
    const payload = getJSONfromString(String(req.body)) as ISetWeaponSkillTreeRequest;
 | 
			
		||||
    const payload = getJSONfromString<ISetWeaponSkillTreeRequest>(String(req.body));
 | 
			
		||||
 | 
			
		||||
    const item = inventory[req.query.Category as WeaponTypeInternal].find(
 | 
			
		||||
        item => item._id.toString() == (req.query.ItemId as string)
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@ interface IStartRecipeRequest {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const startRecipeController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const startRecipeRequest = getJSONfromString(String(req.body)) as IStartRecipeRequest;
 | 
			
		||||
    const startRecipeRequest = getJSONfromString<IStartRecipeRequest>(String(req.body));
 | 
			
		||||
    logger.debug("StartRecipe Request", { startRecipeRequest });
 | 
			
		||||
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@ import { IInventoryChanges } from "@/src/types/purchaseTypes";
 | 
			
		||||
export const syndicateSacrificeController: RequestHandler = async (request, response) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(request);
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
    const data = getJSONfromString(String(request.body)) as ISyndicateSacrificeRequest;
 | 
			
		||||
    const data = getJSONfromString<ISyndicateSacrificeRequest>(String(request.body));
 | 
			
		||||
 | 
			
		||||
    let syndicate = inventory.Affiliations.find(x => x.Tag == data.AffiliationTag);
 | 
			
		||||
    if (!syndicate) {
 | 
			
		||||
 | 
			
		||||
@ -19,7 +19,7 @@ interface ITrainingResultsResponse {
 | 
			
		||||
const trainingResultController: RequestHandler = async (req, res): Promise<void> => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
 | 
			
		||||
    const trainingResults = getJSONfromString(String(req.body)) as ITrainingResultsRequest;
 | 
			
		||||
    const trainingResults = getJSONfromString<ITrainingResultsRequest>(String(req.body));
 | 
			
		||||
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ import { updateChallengeProgress } from "@/src/services/inventoryService";
 | 
			
		||||
import { IUpdateChallengeProgressRequest } from "@/src/types/requestTypes";
 | 
			
		||||
 | 
			
		||||
const updateChallengeProgressController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const payload = getJSONfromString(String(req.body)) as IUpdateChallengeProgressRequest;
 | 
			
		||||
    const payload = getJSONfromString<IUpdateChallengeProgressRequest>(String(req.body));
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
 | 
			
		||||
    await updateChallengeProgress(payload, accountId);
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@ import { addItem, combineInventoryChanges, getInventory } from "@/src/services/i
 | 
			
		||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
 | 
			
		||||
export const updateQuestController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = parseString(req.query.accountId);
 | 
			
		||||
    const updateQuestRequest = getJSONfromString((req.body as string).toString()) as IUpdateQuestRequest;
 | 
			
		||||
    const updateQuestRequest = getJSONfromString<IUpdateQuestRequest>((req.body as string).toString());
 | 
			
		||||
 | 
			
		||||
    // updates should be made only to one quest key per request
 | 
			
		||||
    if (updateQuestRequest.QuestKeys.length > 1) {
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@ const updateThemeController: RequestHandler = async (request, response) => {
 | 
			
		||||
    const body = String(request.body);
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
        const json = getJSONfromString(body) as IThemeUpdateRequest;
 | 
			
		||||
        const json = getJSONfromString<IThemeUpdateRequest>(body);
 | 
			
		||||
        if (typeof json !== "object") {
 | 
			
		||||
            throw new Error("Invalid data format");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
export const getJSONfromString = (str: string): any => {
 | 
			
		||||
export const getJSONfromString = <T>(str: string): T => {
 | 
			
		||||
    const jsonSubstring = str.substring(0, str.lastIndexOf("}") + 1);
 | 
			
		||||
    return JSON.parse(jsonSubstring);
 | 
			
		||||
    return JSON.parse(jsonSubstring) as T;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const getSubstringFromKeyword = (str: string, keyword: string): string => {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user