// eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore
import widgetPropertyFns from "!!raw-loader!./derived.js";

// TODO(abhinav):
// Add unit test cases
// Handle edge cases
// Error out on wrong values
const derivedProperties: any = {};
// const regex = /(\w+):\s?\(props\)\s?=>\s?{([\w\W]*?)},/gim;
const regex = /(\w+):\s?\(props, moment, _\)\s?=>\s?{([\w\W\n]*?)},\n?\s+?\/\//gim;

let m;

while ((m = regex.exec((widgetPropertyFns as unknown) as string)) !== null) {
  // This is necessary to avoid infinite loops with zero-width matches
  if (m.index === regex.lastIndex) {
    regex.lastIndex++;
  }

  let key = "";
  // The result can be accessed through the `m`-variable.
  m.forEach((match, groupIndex) => {
    if (groupIndex === 1) {
      key = match;
    }
    if (groupIndex === 2) {
      derivedProperties[key] = match
        .trim()
        .replace(/\n/g, "")
        .replace(/props\./g, "this.");
    }
  });
}

export default derivedProperties;
