class BaseFunction {
  static #allowInstantiation = false;

  constructor(...args) {
    if (!BaseFunction.#allowInstantiation) {
      throw new Error(
        "Why are you trying to use 'new'? Classes are so 2015! Use our fancy 'run' method instead!"
      );
    }
    for (const [name, validator] of this.parameters()) {
      this[name] = validator(args.shift());
    }
  }

  parameters() {
    return [];
  }

  body() {
    return undefined;
  }

  static run(...args) {
    BaseFunction.#allowInstantiation = true;
    const instance = new this(...args);
    BaseFunction.#allowInstantiation = false;
    return instance.body();
  }
}

class Add extends BaseFunction {
  parameters() {
    return [
      ["a", (x) => Number(x)],
      ["b", (x) => Number(x)],
    ];
  }

  body() {
    return this.a + this.b;
  }
}

console.log(Add.run(5, 3)); // 8



    • @TunaSlap
      link
      21 month ago

      Actually now that check it again its not quite right for mocha. But it’s close!

      • @[email protected]
        link
        fedilink
        21 month ago

        You’re right, the background is too dark. Probably crust instead of base. Maybe it was customised or created improperly.
        But I’m fairly confident that the palette is Catppuccin, probably Mocha.

        • @[email protected]OP
          link
          fedilink
          3
          edit-2
          1 month ago

          I can confirm it’s Catppuccin Mocha. I am not currently aware of the background color issue, but I’ll look into the matter soon. Thanks for letting me know. Also how dare you. But thanks.

          • @[email protected]
            link
            fedilink
            21 month ago

            The background is most likely a color that is in the Mocha palette, just one that is intended for dark accents, not regular background.