| 1234567891011121314151617181920212223242526272829303132333435 |
- export class Doc {
- constructor(args = []) {
- this.content = [];
- this.indent = 0;
- if (this)
- this.args = args;
- }
- indented(fn) {
- this.indent += 1;
- fn(this);
- this.indent -= 1;
- }
- write(arg) {
- if (typeof arg === "function") {
- arg(this, { execution: "sync" });
- arg(this, { execution: "async" });
- return;
- }
- const content = arg;
- const lines = content.split("\n").filter((x) => x);
- const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));
- const dedented = lines.map((x) => x.slice(minIndent)).map((x) => " ".repeat(this.indent * 2) + x);
- for (const line of dedented) {
- this.content.push(line);
- }
- }
- compile() {
- const F = Function;
- const args = this?.args;
- const content = this?.content ?? [``];
- const lines = [...content.map((x) => ` ${x}`)];
- // console.log(lines.join("\n"));
- return new F(...args, lines.join("\n"));
- }
- }
|