export function renderFunctionsHelp()

in packages/sqrl-cli/src/renderFunctionsHelp.ts [13:70]


export function renderFunctionsHelp(instance: Instance) {
  const stdlib: {
    [name: string]: FunctionDescriptions;
  } = {};
  const packages: {
    [name: string]: FunctionDescriptions;
  } = {};
  for (const [name, props] of Object.entries(
    instance._instance.functionProperties
  ).sort()) {
    if (!name.startsWith("_")) {
      let args = "";
      if (typeof props.argstring === "string") {
        args = `${chalk.yellow("(")}${props.argstring}${chalk.yellow(")")}`;
      }

      let docstring = chalk.gray("<no docstring provided>");
      if (props.docstring) {
        docstring = props.docstring.split("\n")[0];
      }

      const description = `${chalk.bold.yellow(name)}${args}${chalk.grey(
        ":"
      )} ${docstring}`;

      const group = props.package.startsWith(STANDARD_LIBRARY + ".")
        ? stdlib
        : packages;
      group[props.package] = group[props.package] || {};
      group[props.package][name] = description;
    }
  }

  const renderPackageHelp = (
    group: string,
    name: string,
    descs: FunctionDescriptions
  ) => {
    let output = chalk.bold.white(name) + " " + chalk.blue(`(${group})`) + "\n";
    for (const func of Object.keys(descs).sort()) {
      output += "  " + descs[func] + "\n";
    }
    return output.trimRight();
  };

  return [
    ...Object.keys(stdlib)
      .sort()
      .map((pkg) => {
        return renderPackageHelp("stdlib", pkg, stdlib[pkg]);
      }),
    ...Object.keys(packages)
      .sort()
      .map((pkg) => {
        return renderPackageHelp("package", pkg, packages[pkg]);
      }),
  ].join("\n\n");
}