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
    12 hours ago

    What theme are you using, i like it!

      • @TunaSlap
        link
        150 minutes ago

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

        • @[email protected]
          link
          fedilink
          145 minutes 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.