Skip to content
Snippets Groups Projects
utils.ts 990 B
Newer Older
  • Learn to ignore specific revisions
  • import type { DialogSet } from "./types";
    
    /**
     * Returns true, if input is a valid name of a dialogSet.
     * Intended to protect from loading anything other than dialogSet json.
     * @param input input to check
     */
    function isValidDialogSetName(input: unknown) {
      if (typeof input !== "string") {
        return false;
      }
      if (input.length === 0) {
        return false;
      }
      if (input.length > 50) {
        return false;
      }
      return !/[^a-zA-Z0-9\-\_]/i.test(input);
    }
    
    function getHashValue(): string {
      return window.location.hash.substr(1);
    }
    
    /**
     * Fetch a dialogSet based on the hash value
     */
    export async function fetchDialogSet(): Promise<DialogSet> {
      const setName = getHashValue();
      if (!isValidDialogSetName(setName))
        throw new Error("Name is not valid dialogSet name");
    
      const dialogSetUrl = "./dialogs/" + setName + ".json";
    
      try {
        const dialogSet: DialogSet = await (await fetch(dialogSetUrl)).json();
        return dialogSet;
      } catch (error) {
        throw error;
      }
    }