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



    • Chais@sh.itjust.works
      link
      fedilink
      arrow-up
      2
      ·
      2 hours 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.

      • sebastiancarlos@lemmy.sdf.orgOP
        link
        fedilink
        arrow-up
        1
        ·
        35 seconds ago

        I can confirm it’s 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.