@flux-lang/cli-core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/add.d.ts +18 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +49 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/check.d.ts +15 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +40 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/common.d.ts +6 -0
- package/dist/commands/common.d.ts.map +1 -0
- package/dist/commands/common.js +35 -0
- package/dist/commands/common.js.map +1 -0
- package/dist/commands/config.d.ts +19 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +21 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/format.d.ts +9 -0
- package/dist/commands/format.d.ts.map +1 -0
- package/dist/commands/format.js +23 -0
- package/dist/commands/format.js.map +1 -0
- package/dist/commands/new.d.ts +24 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +93 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/parse.d.ts +20 -0
- package/dist/commands/parse.d.ts.map +1 -0
- package/dist/commands/parse.js +37 -0
- package/dist/commands/parse.js.map +1 -0
- package/dist/commands/pdf.d.ts +13 -0
- package/dist/commands/pdf.d.ts.map +1 -0
- package/dist/commands/pdf.js +53 -0
- package/dist/commands/pdf.js.map +1 -0
- package/dist/commands/render.d.ts +14 -0
- package/dist/commands/render.d.ts.map +1 -0
- package/dist/commands/render.js +40 -0
- package/dist/commands/render.js.map +1 -0
- package/dist/commands/step.d.ts +12 -0
- package/dist/commands/step.d.ts.map +1 -0
- package/dist/commands/step.js +29 -0
- package/dist/commands/step.js.map +1 -0
- package/dist/commands/tick.d.ts +12 -0
- package/dist/commands/tick.d.ts.map +1 -0
- package/dist/commands/tick.js +31 -0
- package/dist/commands/tick.js.map +1 -0
- package/dist/commands/view.d.ts +18 -0
- package/dist/commands/view.d.ts.map +1 -0
- package/dist/commands/view.js +28 -0
- package/dist/commands/view.js.map +1 -0
- package/dist/config.d.ts +37 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +76 -0
- package/dist/config.js.map +1 -0
- package/dist/file-indexer.d.ts +29 -0
- package/dist/file-indexer.d.ts.map +1 -0
- package/dist/file-indexer.js +59 -0
- package/dist/file-indexer.js.map +1 -0
- package/dist/fs.d.ts +10 -0
- package/dist/fs.d.ts.map +1 -0
- package/dist/fs.js +57 -0
- package/dist/fs.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/last-used-dir.d.ts +9 -0
- package/dist/last-used-dir.d.ts.map +1 -0
- package/dist/last-used-dir.js +23 -0
- package/dist/last-used-dir.js.map +1 -0
- package/dist/new/templates.d.ts +28 -0
- package/dist/new/templates.d.ts.map +1 -0
- package/dist/new/templates.js +679 -0
- package/dist/new/templates.js.map +1 -0
- package/dist/pinned.d.ts +12 -0
- package/dist/pinned.d.ts.map +1 -0
- package/dist/pinned.js +45 -0
- package/dist/pinned.js.map +1 -0
- package/dist/recents.d.ts +13 -0
- package/dist/recents.d.ts.map +1 -0
- package/dist/recents.js +27 -0
- package/dist/recents.js.map +1 -0
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/viewer/manager.d.ts +55 -0
- package/dist/viewer/manager.d.ts.map +1 -0
- package/dist/viewer/manager.js +182 -0
- package/dist/viewer/manager.js.map +1 -0
- package/package.json +34 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type CommandResult } from "../types.js";
|
|
2
|
+
export type AddKind = "title" | "page" | "section" | "figure" | "callout" | "table" | "slot" | "inline-slot" | "bibliography-stub";
|
|
3
|
+
export interface AddOptions {
|
|
4
|
+
cwd: string;
|
|
5
|
+
file: string;
|
|
6
|
+
kind: AddKind;
|
|
7
|
+
text?: string;
|
|
8
|
+
heading?: string;
|
|
9
|
+
label?: string;
|
|
10
|
+
noHeading?: boolean;
|
|
11
|
+
noCheck?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface AddData {
|
|
14
|
+
file: string;
|
|
15
|
+
kind: AddKind;
|
|
16
|
+
}
|
|
17
|
+
export declare function addCommand(options: AddOptions): Promise<CommandResult<AddData>>;
|
|
18
|
+
//# sourceMappingURL=add.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAKxE,MAAM,MAAM,OAAO,GACf,OAAO,GACP,MAAM,GACN,SAAS,GACT,QAAQ,GACR,SAAS,GACT,OAAO,GACP,MAAM,GACN,aAAa,GACb,mBAAmB,CAAC;AAExB,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CA4CrF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { applyAddTransform, formatFluxSource } from "@flux-lang/core";
|
|
3
|
+
import { errorResult, okResult } from "../types.js";
|
|
4
|
+
import { readFileText, writeFileText } from "../fs.js";
|
|
5
|
+
import { parseFlux } from "./common.js";
|
|
6
|
+
import { checkCommand } from "./check.js";
|
|
7
|
+
export async function addCommand(options) {
|
|
8
|
+
if (!options.file) {
|
|
9
|
+
return errorResult("flux add: No input file specified.", "NO_INPUT");
|
|
10
|
+
}
|
|
11
|
+
let source;
|
|
12
|
+
try {
|
|
13
|
+
source = await readFileText(options.file);
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
return errorResult(`flux add: failed to read ${options.file}: ${error.message}`, "READ_ERROR", error);
|
|
17
|
+
}
|
|
18
|
+
let doc;
|
|
19
|
+
try {
|
|
20
|
+
doc = parseFlux(source, options.file);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
return errorResult(`flux add: parse failed: ${error.message}`, "PARSE_ERROR", error);
|
|
24
|
+
}
|
|
25
|
+
let nextSource = source;
|
|
26
|
+
try {
|
|
27
|
+
nextSource = applyAddTransform(source, doc, {
|
|
28
|
+
kind: options.kind,
|
|
29
|
+
text: options.text,
|
|
30
|
+
heading: options.heading,
|
|
31
|
+
label: options.label,
|
|
32
|
+
noHeading: options.noHeading,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return errorResult(`flux add: ${String(error?.message ?? error)}`, "ADD_FAILED", error);
|
|
37
|
+
}
|
|
38
|
+
nextSource = formatFluxSource(nextSource);
|
|
39
|
+
await writeFileText(path.resolve(options.file), nextSource);
|
|
40
|
+
if (!options.noCheck) {
|
|
41
|
+
const check = await checkCommand({ files: [options.file] });
|
|
42
|
+
const failures = check.data?.results?.filter((r) => !r.ok) ?? [];
|
|
43
|
+
if (failures.length > 0) {
|
|
44
|
+
return errorResult("flux add: check failed after edit", "CHECK_FAILED", failures);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return okResult({ file: options.file, kind: options.kind });
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAsB,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA6B1C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAmB;IAClD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,WAAW,CAAC,oCAAoC,EAAE,UAAU,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,4BAA4B,OAAO,CAAC,IAAI,KAAM,KAAe,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IACnH,CAAC;IAED,IAAI,GAAiB,CAAC;IACtB,IAAI,CAAC;QACH,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,2BAA4B,KAAe,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IAClG,CAAC;IAED,IAAI,UAAU,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC;QACH,UAAU,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE;YAC1C,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,aAAa,MAAM,CAAE,KAAe,EAAE,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IACrG,CAAC;IAED,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;IAE5D,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,WAAW,CAAC,mCAAmC,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type CommandResult } from "../types.js";
|
|
2
|
+
export interface CheckOptions {
|
|
3
|
+
files: string[];
|
|
4
|
+
json?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface CheckResult {
|
|
7
|
+
file: string;
|
|
8
|
+
ok: boolean;
|
|
9
|
+
errors?: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface CheckData {
|
|
12
|
+
results: CheckResult[];
|
|
13
|
+
}
|
|
14
|
+
export declare function checkCommand(options: CheckOptions): Promise<CommandResult<CheckData>>;
|
|
15
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGxE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAsC3F"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { checkDocument, initRuntimeState } from "@flux-lang/core";
|
|
2
|
+
import { errorResult, okResult } from "../types.js";
|
|
3
|
+
import { formatIoError, formatParseOrLexerError, parseFlux, readSource } from "./common.js";
|
|
4
|
+
export async function checkCommand(options) {
|
|
5
|
+
const files = options.files ?? [];
|
|
6
|
+
if (files.length === 0) {
|
|
7
|
+
return errorResult("flux check: No input files specified.", "NO_INPUT");
|
|
8
|
+
}
|
|
9
|
+
const results = [];
|
|
10
|
+
for (const file of files) {
|
|
11
|
+
let source;
|
|
12
|
+
try {
|
|
13
|
+
source = await readSource(file);
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
results.push({ file, ok: false, errors: [formatIoError(file, error)] });
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
let doc;
|
|
20
|
+
try {
|
|
21
|
+
doc = parseFlux(source, file);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
results.push({ file, ok: false, errors: [formatParseOrLexerError(file, error)] });
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const errors = [];
|
|
28
|
+
try {
|
|
29
|
+
initRuntimeState(doc);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
const detail = error?.message ?? String(error);
|
|
33
|
+
errors.push(`${file}:0:0: Check error: initRuntimeState failed: ${detail}`);
|
|
34
|
+
}
|
|
35
|
+
errors.push(...checkDocument(file, doc));
|
|
36
|
+
results.push({ file, ok: errors.length === 0, errors: errors.length ? errors : undefined });
|
|
37
|
+
}
|
|
38
|
+
return okResult({ results });
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAqB,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAsB,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiB5F,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAqB;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC,uCAAuC,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACxE,SAAS;QACX,CAAC;QAED,IAAI,GAAiB,CAAC;QACtB,IAAI,CAAC;YACH,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAClF,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAI,KAAe,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,+CAA+C,MAAM,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QAEzC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type FluxDocument } from "@flux-lang/core";
|
|
2
|
+
export declare function readSource(file: string): Promise<string>;
|
|
3
|
+
export declare function parseFlux(source: string, filePath: string | null): FluxDocument;
|
|
4
|
+
export declare function formatIoError(file: string, error: unknown): string;
|
|
5
|
+
export declare function formatParseOrLexerError(file: string, error: unknown): string;
|
|
6
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/commands/common.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEnE,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW9D;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,CAU/E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAGlE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAG5E"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import { parseDocument } from "@flux-lang/core";
|
|
4
|
+
export async function readSource(file) {
|
|
5
|
+
if (file === "-") {
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
let data = "";
|
|
8
|
+
process.stdin.setEncoding("utf8");
|
|
9
|
+
process.stdin.on("data", (chunk) => (data += chunk));
|
|
10
|
+
process.stdin.on("end", () => resolve(data));
|
|
11
|
+
process.stdin.on("error", (err) => reject(err));
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
return fs.readFile(file, "utf8");
|
|
15
|
+
}
|
|
16
|
+
export function parseFlux(source, filePath) {
|
|
17
|
+
if (!filePath || filePath === "-") {
|
|
18
|
+
return parseDocument(source);
|
|
19
|
+
}
|
|
20
|
+
const resolved = path.resolve(filePath);
|
|
21
|
+
return parseDocument(source, {
|
|
22
|
+
sourcePath: resolved,
|
|
23
|
+
docRoot: path.dirname(resolved),
|
|
24
|
+
resolveIncludes: true,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
export function formatIoError(file, error) {
|
|
28
|
+
const msg = error?.message ?? String(error);
|
|
29
|
+
return `${file}:0:0: ${msg}`;
|
|
30
|
+
}
|
|
31
|
+
export function formatParseOrLexerError(file, error) {
|
|
32
|
+
const msg = error?.message ?? String(error);
|
|
33
|
+
return `${file}:0:0: ${msg}`;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/commands/common.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,aAAa,EAAqB,MAAM,iBAAiB,CAAC;AAEnE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QACjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,QAAuB;IAC/D,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,OAAO,aAAa,CAAC,MAAM,EAAE;QAC3B,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC/B,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAc;IACxD,MAAM,GAAG,GAAI,KAAe,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;IACvD,OAAO,GAAG,IAAI,SAAS,GAAG,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAY,EAAE,KAAc;IAClE,MAAM,GAAG,GAAI,KAAe,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;IACvD,OAAO,GAAG,IAAI,SAAS,GAAG,EAAE,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type FluxConfig } from "../config.js";
|
|
2
|
+
import { type CommandResult } from "../types.js";
|
|
3
|
+
export type ConfigAction = "view" | "set";
|
|
4
|
+
export interface ConfigOptions {
|
|
5
|
+
cwd: string;
|
|
6
|
+
action: ConfigAction;
|
|
7
|
+
key?: keyof FluxConfig;
|
|
8
|
+
value?: FluxConfig[keyof FluxConfig];
|
|
9
|
+
init?: boolean;
|
|
10
|
+
flags?: Partial<FluxConfig>;
|
|
11
|
+
env?: Record<string, string | undefined>;
|
|
12
|
+
}
|
|
13
|
+
export interface ConfigData {
|
|
14
|
+
config: FluxConfig;
|
|
15
|
+
filePath: string | null;
|
|
16
|
+
exists: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function configCommand(options: ConfigOptions): Promise<CommandResult<ConfigData>>;
|
|
19
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAExE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,CAAC;AAE1C,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,CAAC,MAAM,UAAU,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAoB9F"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { resolveConfig, setConfigValue } from "../config.js";
|
|
2
|
+
import { errorResult, okResult } from "../types.js";
|
|
3
|
+
export async function configCommand(options) {
|
|
4
|
+
if (options.action === "view") {
|
|
5
|
+
const resolved = await resolveConfig({ cwd: options.cwd, flags: options.flags, env: options.env });
|
|
6
|
+
return okResult({ config: resolved.config, filePath: resolved.filePath, exists: resolved.exists });
|
|
7
|
+
}
|
|
8
|
+
if (!options.key) {
|
|
9
|
+
return errorResult("flux config set: key is required", "MISSING_KEY");
|
|
10
|
+
}
|
|
11
|
+
if (options.value === undefined) {
|
|
12
|
+
return errorResult("flux config set: value is required", "MISSING_VALUE");
|
|
13
|
+
}
|
|
14
|
+
const result = await setConfigValue(options.cwd, options.key, options.value, { init: options.init });
|
|
15
|
+
if (!result.ok) {
|
|
16
|
+
return errorResult(result.message ?? "failed to set config", "SET_FAILED");
|
|
17
|
+
}
|
|
18
|
+
const resolved = await resolveConfig({ cwd: options.cwd, flags: options.flags, env: options.env });
|
|
19
|
+
return okResult({ config: resolved.config, filePath: resolved.filePath, exists: true });
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAmB,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAsB,MAAM,aAAa,CAAC;AAoBxE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACnG,OAAO,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,OAAO,WAAW,CAAC,kCAAkC,EAAE,aAAa,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,WAAW,CAAC,oCAAoC,EAAE,eAAe,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACrG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,MAAM,CAAC,OAAO,IAAI,sBAAsB,EAAE,YAAY,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACnG,OAAO,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1F,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type CommandResult } from "../types.js";
|
|
2
|
+
export interface FormatOptions {
|
|
3
|
+
file: string;
|
|
4
|
+
}
|
|
5
|
+
export interface FormatData {
|
|
6
|
+
file: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function formatCommand(options: FormatOptions): Promise<CommandResult<FormatData>>;
|
|
9
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/commands/format.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGxE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAc9F"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { errorResult, okResult } from "../types.js";
|
|
3
|
+
import { readFileText, writeFileText } from "../fs.js";
|
|
4
|
+
export async function formatCommand(options) {
|
|
5
|
+
if (!options.file) {
|
|
6
|
+
return errorResult("flux fmt: No input file specified.", "NO_INPUT");
|
|
7
|
+
}
|
|
8
|
+
let source;
|
|
9
|
+
try {
|
|
10
|
+
source = await readFileText(options.file);
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return errorResult(`flux fmt: failed to read ${options.file}: ${error.message}`, "READ_ERROR", error);
|
|
14
|
+
}
|
|
15
|
+
const formatted = formatFluxSource(source);
|
|
16
|
+
await writeFileText(path.resolve(options.file), formatted);
|
|
17
|
+
return okResult({ file: options.file });
|
|
18
|
+
}
|
|
19
|
+
function formatFluxSource(source) {
|
|
20
|
+
const trimmed = source.replace(/[\t ]+\n/g, "\n");
|
|
21
|
+
return trimmed.endsWith("\n") ? trimmed : trimmed + "\n";
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/commands/format.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAsB,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAUvD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,WAAW,CAAC,oCAAoC,EAAE,UAAU,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,4BAA4B,OAAO,CAAC,IAAI,KAAM,KAAe,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IACnH,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3D,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type CommandResult } from "../types.js";
|
|
2
|
+
import { type TemplateName } from "../new/templates.js";
|
|
3
|
+
import type { FontFallbackOption, FontsPreset, PageSizeOption, ThemeOption } from "../config.js";
|
|
4
|
+
export interface NewOptions {
|
|
5
|
+
cwd: string;
|
|
6
|
+
template: TemplateName;
|
|
7
|
+
out?: string;
|
|
8
|
+
page?: PageSizeOption;
|
|
9
|
+
theme?: ThemeOption;
|
|
10
|
+
fonts?: FontsPreset;
|
|
11
|
+
fontFallback?: FontFallbackOption;
|
|
12
|
+
assets?: boolean;
|
|
13
|
+
chapters?: number;
|
|
14
|
+
live?: boolean;
|
|
15
|
+
title?: string;
|
|
16
|
+
slug?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface NewData {
|
|
19
|
+
dir: string;
|
|
20
|
+
docPath: string;
|
|
21
|
+
files: string[];
|
|
22
|
+
}
|
|
23
|
+
export declare function newCommand(options: NewOptions): Promise<CommandResult<NewData>>;
|
|
24
|
+
//# sourceMappingURL=new.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EAAe,KAAK,YAAY,EAAwB,MAAM,qBAAqB,CAAC;AAC3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEjG,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,YAAY,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAoDrF"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { errorResult, okResult } from "../types.js";
|
|
3
|
+
import { ensureDir, pathExists, writeFileText } from "../fs.js";
|
|
4
|
+
import { getTemplate } from "../new/templates.js";
|
|
5
|
+
export async function newCommand(options) {
|
|
6
|
+
const template = getTemplate(options.template);
|
|
7
|
+
if (!template) {
|
|
8
|
+
return errorResult(`flux new: unknown template '${options.template}'`, "UNKNOWN_TEMPLATE");
|
|
9
|
+
}
|
|
10
|
+
const normalized = normalizeNewOptions(options);
|
|
11
|
+
const output = resolveOutputPath(normalized);
|
|
12
|
+
if (await pathExists(output.docPath)) {
|
|
13
|
+
return errorResult(`flux new: ${output.docPath} already exists`, "EXISTS");
|
|
14
|
+
}
|
|
15
|
+
await ensureDir(output.dir);
|
|
16
|
+
const built = template.build({
|
|
17
|
+
title: normalized.title,
|
|
18
|
+
page: normalized.page,
|
|
19
|
+
theme: normalized.theme,
|
|
20
|
+
fonts: normalized.fonts,
|
|
21
|
+
fontFallback: normalized.fontFallback,
|
|
22
|
+
assets: normalized.assets,
|
|
23
|
+
chapters: normalized.chapters,
|
|
24
|
+
live: normalized.live,
|
|
25
|
+
});
|
|
26
|
+
const files = [];
|
|
27
|
+
await writeFileText(output.docPath, built.mainFlux);
|
|
28
|
+
files.push(output.docPath);
|
|
29
|
+
const readmePath = path.join(output.dir, "README.md");
|
|
30
|
+
await writeFileText(readmePath, built.readme);
|
|
31
|
+
files.push(readmePath);
|
|
32
|
+
if (built.assetsDir) {
|
|
33
|
+
const assetsPath = path.join(output.dir, built.assetsDir);
|
|
34
|
+
await ensureDir(assetsPath);
|
|
35
|
+
files.push(assetsPath);
|
|
36
|
+
}
|
|
37
|
+
if (built.chapters.length) {
|
|
38
|
+
const chaptersDir = path.join(output.dir, "chapters");
|
|
39
|
+
await ensureDir(chaptersDir);
|
|
40
|
+
files.push(chaptersDir);
|
|
41
|
+
for (const chapter of built.chapters) {
|
|
42
|
+
const chapterPath = path.join(chaptersDir, chapter.path);
|
|
43
|
+
await writeFileText(chapterPath, chapter.content);
|
|
44
|
+
files.push(chapterPath);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return okResult({ dir: output.dir, docPath: output.docPath, files });
|
|
48
|
+
}
|
|
49
|
+
function normalizeNewOptions(options) {
|
|
50
|
+
const title = options.title ?? titleFromTemplate(options.template);
|
|
51
|
+
const defaults = {
|
|
52
|
+
page: options.page ?? "Letter",
|
|
53
|
+
theme: options.theme ?? "screen",
|
|
54
|
+
fonts: options.fonts ?? "tech",
|
|
55
|
+
fontFallback: options.fontFallback ?? "system",
|
|
56
|
+
assets: options.assets ?? true,
|
|
57
|
+
chapters: options.chapters ?? 0,
|
|
58
|
+
live: options.live ?? (options.template === "demo"),
|
|
59
|
+
title,
|
|
60
|
+
slug: options.slug ? slugify(options.slug) : slugify(title),
|
|
61
|
+
};
|
|
62
|
+
return { ...options, ...defaults };
|
|
63
|
+
}
|
|
64
|
+
function titleFromTemplate(template) {
|
|
65
|
+
const map = {
|
|
66
|
+
demo: "Flux Demo",
|
|
67
|
+
article: "Flux Article",
|
|
68
|
+
spec: "Flux Spec",
|
|
69
|
+
zine: "Flux Zine",
|
|
70
|
+
paper: "Flux Paper",
|
|
71
|
+
blank: "Flux Document",
|
|
72
|
+
};
|
|
73
|
+
return map[template] ?? "Flux Document";
|
|
74
|
+
}
|
|
75
|
+
function resolveOutputPath(options) {
|
|
76
|
+
const out = options.out ? path.resolve(options.cwd, options.out) : path.resolve(options.cwd);
|
|
77
|
+
if (out.endsWith(".flux")) {
|
|
78
|
+
return { dir: path.dirname(out), docPath: out };
|
|
79
|
+
}
|
|
80
|
+
const slug = options.slug ?? slugify(options.title);
|
|
81
|
+
const dir = out;
|
|
82
|
+
const docPath = path.join(dir, `${slug}.flux`);
|
|
83
|
+
return { dir, docPath };
|
|
84
|
+
}
|
|
85
|
+
function slugify(value) {
|
|
86
|
+
return value
|
|
87
|
+
.trim()
|
|
88
|
+
.toLowerCase()
|
|
89
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
90
|
+
.replace(/^-+|-+$/g, "")
|
|
91
|
+
.slice(0, 60) || "flux-document";
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=new.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAsB,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,WAAW,EAA2C,MAAM,qBAAqB,CAAC;AAwB3F,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAmB;IAClD,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,WAAW,CAAC,+BAA+B,OAAO,CAAC,QAAQ,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAE7C,IAAI,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,OAAO,WAAW,CAAC,aAAa,MAAM,CAAC,OAAO,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE5B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC3B,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,YAAY,EAAE,UAAU,CAAC,YAAY;QACrC,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,IAAI,EAAE,UAAU,CAAC,IAAI;KACtB,CAAC,CAAC;IAEH,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE3B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACtD,MAAM,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEvB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACtD,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAmB;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG;QACf,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,QAAQ;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,QAAQ;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM;QAC9B,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,QAAQ;QAC9C,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;QAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;QAC/B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC;QACnD,KAAK;QACL,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;KAC5D,CAAC;IACF,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAsB;IAC/C,MAAM,GAAG,GAAiC;QACxC,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,eAAe;KACvB,CAAC;IACF,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC;AAC1C,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA+C;IACxE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7F,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAClD,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,GAAG,CAAC;IAChB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAC/C,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,KAAK;SACT,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { FluxDocument } from "@flux-lang/core";
|
|
2
|
+
import { type CommandResult } from "../types.js";
|
|
3
|
+
export interface ParseOptions {
|
|
4
|
+
files: string[];
|
|
5
|
+
ndjson?: boolean;
|
|
6
|
+
pretty?: boolean;
|
|
7
|
+
compact?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ParsedDoc {
|
|
10
|
+
file: string;
|
|
11
|
+
doc: FluxDocument;
|
|
12
|
+
}
|
|
13
|
+
export interface ParseData {
|
|
14
|
+
docs: ParsedDoc[];
|
|
15
|
+
ndjson: boolean;
|
|
16
|
+
pretty: boolean;
|
|
17
|
+
compact: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function parseCommand(options: ParseOptions): Promise<CommandResult<ParseData>>;
|
|
20
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/commands/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGxE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,YAAY,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAiC3F"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { errorResult, okResult } from "../types.js";
|
|
2
|
+
import { formatIoError, formatParseOrLexerError, parseFlux, readSource } from "./common.js";
|
|
3
|
+
export async function parseCommand(options) {
|
|
4
|
+
const files = options.files ?? [];
|
|
5
|
+
if (files.length === 0) {
|
|
6
|
+
return errorResult("flux parse: No input files specified.", "NO_INPUT");
|
|
7
|
+
}
|
|
8
|
+
const usesStdin = files.includes("-");
|
|
9
|
+
if (usesStdin && files.length > 1) {
|
|
10
|
+
return errorResult("flux parse: '-' (stdin) can only be used with a single input.", "STDIN_MULTI");
|
|
11
|
+
}
|
|
12
|
+
if (options.pretty && options.compact && !options.ndjson) {
|
|
13
|
+
return errorResult("flux parse: --pretty and --compact are mutually exclusive.", "INVALID_FLAGS");
|
|
14
|
+
}
|
|
15
|
+
const docs = [];
|
|
16
|
+
for (const file of files) {
|
|
17
|
+
let source;
|
|
18
|
+
try {
|
|
19
|
+
source = await readSource(file);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
return errorResult(formatIoError(file, error), "READ_ERROR", error);
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const doc = parseFlux(source, file);
|
|
26
|
+
docs.push({ file: file === "-" ? "<stdin>" : file, doc });
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
return errorResult(formatParseOrLexerError(file, error), "PARSE_ERROR", error);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const ndjson = options.ndjson ?? docs.length > 1;
|
|
33
|
+
const pretty = options.pretty ?? (docs.length === 1 && !options.compact);
|
|
34
|
+
const compact = options.compact ?? false;
|
|
35
|
+
return okResult({ docs, ndjson, pretty, compact });
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/commands/parse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAsB,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAqB5F,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAqB;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC,uCAAuC,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,WAAW,CAAC,+DAA+D,EAAE,aAAa,CAAC,CAAC;IACrG,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACzD,OAAO,WAAW,CAAC,4DAA4D,EAAE,eAAe,CAAC,CAAC;IACpG,CAAC;IAED,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IACzC,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type CommandResult } from "../types.js";
|
|
2
|
+
export interface PdfOptions {
|
|
3
|
+
file: string;
|
|
4
|
+
outPath: string;
|
|
5
|
+
seed?: number;
|
|
6
|
+
docstep?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface PdfData {
|
|
9
|
+
outPath: string;
|
|
10
|
+
bytes: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function pdfCommand(options: PdfOptions): Promise<CommandResult<PdfData>>;
|
|
13
|
+
//# sourceMappingURL=pdf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../src/commands/pdf.ts"],"names":[],"mappings":"AAKA,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGxE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAKD,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CA+CrF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { pathToFileURL } from "node:url";
|
|
4
|
+
import { renderDocumentIR } from "@flux-lang/core";
|
|
5
|
+
import { errorResult, okResult } from "../types.js";
|
|
6
|
+
import { formatIoError, formatParseOrLexerError, parseFlux, readSource } from "./common.js";
|
|
7
|
+
const PLACEHOLDER_IMG = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
|
|
8
|
+
export async function pdfCommand(options) {
|
|
9
|
+
if (!options.file) {
|
|
10
|
+
return errorResult("flux pdf: No input file specified.", "NO_INPUT");
|
|
11
|
+
}
|
|
12
|
+
if (!options.outPath) {
|
|
13
|
+
return errorResult("flux pdf: --out <file.pdf> is required.", "NO_OUTPUT");
|
|
14
|
+
}
|
|
15
|
+
let source;
|
|
16
|
+
try {
|
|
17
|
+
source = await readSource(options.file);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
return errorResult(formatIoError(options.file, error), "READ_ERROR", error);
|
|
21
|
+
}
|
|
22
|
+
let doc;
|
|
23
|
+
try {
|
|
24
|
+
doc = parseFlux(source, options.file);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
return errorResult(formatParseOrLexerError(options.file, error), "PARSE_ERROR", error);
|
|
28
|
+
}
|
|
29
|
+
const dir = options.file === "-" ? process.cwd() : path.dirname(path.resolve(options.file));
|
|
30
|
+
const ir = renderDocumentIR(doc, { seed: options.seed, docstep: options.docstep, assetCwd: dir });
|
|
31
|
+
const assetUrl = (assetId) => {
|
|
32
|
+
const asset = ir.assets.find((entry) => entry.id === assetId);
|
|
33
|
+
if (!asset?.path)
|
|
34
|
+
return PLACEHOLDER_IMG;
|
|
35
|
+
const resolved = path.isAbsolute(asset.path) ? asset.path : path.resolve(dir, asset.path);
|
|
36
|
+
return pathToFileURL(resolved).toString();
|
|
37
|
+
};
|
|
38
|
+
const rawUrl = (raw) => {
|
|
39
|
+
if (raw.startsWith("http://") || raw.startsWith("https://")) {
|
|
40
|
+
return PLACEHOLDER_IMG;
|
|
41
|
+
}
|
|
42
|
+
const resolved = path.isAbsolute(raw) ? raw : path.resolve(dir, raw);
|
|
43
|
+
return pathToFileURL(resolved).toString();
|
|
44
|
+
};
|
|
45
|
+
const { renderHtml } = await import("@flux-lang/render-html");
|
|
46
|
+
const { createTypesetterBackend } = await import("@flux-lang/typesetter");
|
|
47
|
+
const { html, css } = renderHtml(ir, { assetUrl, rawUrl });
|
|
48
|
+
const typesetter = createTypesetterBackend();
|
|
49
|
+
const pdf = await typesetter.pdf(html, css, { allowFile: true });
|
|
50
|
+
await fs.writeFile(options.outPath, pdf);
|
|
51
|
+
return okResult({ outPath: options.outPath, bytes: pdf.byteLength });
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=pdf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../src/commands/pdf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type RenderDocumentIR } from "@flux-lang/core";
|
|
2
|
+
import { type CommandResult } from "../types.js";
|
|
3
|
+
export interface RenderOptions {
|
|
4
|
+
file: string;
|
|
5
|
+
format?: "ir";
|
|
6
|
+
seed?: number;
|
|
7
|
+
time?: number;
|
|
8
|
+
docstep?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface RenderData {
|
|
11
|
+
rendered: RenderDocumentIR;
|
|
12
|
+
}
|
|
13
|
+
export declare function renderCommand(options: RenderOptions): Promise<CommandResult<RenderData>>;
|
|
14
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/commands/render.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGxE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAqC9F"}
|