@publisle/cli 0.0.0-stage → 0.1.1

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 VoidReg
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,13 @@
1
- # Temporary Holding Version
1
+ # @publisle/cli
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Optional Node-only validation and explicit source upgrades.
4
+
5
+ Requires Node.js 24 or later. Framework adapters also require their declared peer dependencies.
6
+ This package is part of Publisle, independently versioned at `0.1.1` and published under the npm `beta` tag.
7
+ Frozen contract version integers are independent of npm package versions.
8
+
9
+ - [Core standard](https://github.com/VoidReg/publisle/blob/main/docs/standards/README.md)
10
+ - [Quickstart and package usage](https://github.com/VoidReg/publisle#readme)
11
+ - [Distribution and release checklist](https://github.com/VoidReg/publisle/blob/main/docs/guides/releases.md)
12
+
13
+ Core packages do not install Research templates, citeproc, PDF compilers, or TeX.
package/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/dist/bin.js ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from "./run.js";
3
+ process.exitCode = await runCli(process.argv.slice(2), {
4
+ stdout: (text) => {
5
+ process.stdout.write(text);
6
+ },
7
+ stderr: (text) => {
8
+ process.stderr.write(text);
9
+ },
10
+ });
11
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,CAAC,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACrD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { type ContractBundle } from "@publisle/contracts";
2
+ import { type PrepareOptions } from "@publisle/core";
3
+ import { type MarkdownBlockCodec } from "@publisle/markdown";
4
+ import { type Diagnostic } from "@publisle/schema";
5
+ export interface CliConfig {
6
+ readonly contractBundle?: ContractBundle;
7
+ /** Trusted host configuration, not reader-side code. Core blocks are the default registry. */
8
+ readonly prepare?: PrepareOptions;
9
+ readonly markdown?: {
10
+ readonly codecs?: readonly MarkdownBlockCodec[];
11
+ };
12
+ /**
13
+ * Research template registries are read by the optional @publisle/cli-research
14
+ * plugin; this Core config type stays free of Research imports.
15
+ */
16
+ readonly templates?: unknown;
17
+ }
18
+ export interface SourceOperation {
19
+ readonly command: "validate" | "upgrade";
20
+ readonly format: "json" | "markdown";
21
+ readonly sourceName: string;
22
+ readonly config?: CliConfig;
23
+ }
24
+ export interface SourceResult {
25
+ readonly diagnostics: readonly Diagnostic[];
26
+ /** Present only for a successful upgrade. This API never writes files. */
27
+ readonly output?: string;
28
+ }
29
+ /** Pure orchestration of the public import/parse/prepare/export boundaries. */
30
+ export declare function processSource(source: string, options: SourceOperation): SourceResult;
31
+ /** Explicit pinning preview/output; never mutates the original input or repins locked content. */
32
+ export declare function lockSource(source: string, options: Omit<SourceOperation, "command">): Promise<SourceResult>;
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAA2B,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAOL,KAAK,UAAU,EAGhB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,8FAA8F;IAC9F,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAA;KAAE,CAAC;IACxE;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAwBD,+EAA+E;AAC/E,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,GACvB,YAAY,CA0Jd;AAED,kGAAkG;AAClG,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GACxC,OAAO,CAAC,YAAY,CAAC,CA+CvB"}
package/dist/index.js ADDED
@@ -0,0 +1,192 @@
1
+ import { coreBlockDefinitions } from "@publisle/blocks-core";
2
+ import { lockDocument } from "@publisle/contracts";
3
+ import { createRegistry, prepare } from "@publisle/core";
4
+ import { fromMarkdown, toMarkdown, } from "@publisle/markdown";
5
+ import { canonicalizeJson, locateDiagnostic, parseDocument, parseJson, JsonBoundaryError, SchemaParseError, } from "@publisle/schema";
6
+ function stable(value) {
7
+ if (Array.isArray(value))
8
+ return `[${value.map(stable).join(",")}]`;
9
+ if (typeof value === "object" && value !== null)
10
+ return `{${Object.entries(value)
11
+ .sort(([a], [b]) => a.localeCompare(b))
12
+ .map(([key, entry]) => `${JSON.stringify(key)}:${stable(entry)}`)
13
+ .join(",")}}`;
14
+ return value === undefined ? "undefined" : JSON.stringify(value);
15
+ }
16
+ function semantics(document) {
17
+ return {
18
+ schemaVersion: document.schemaVersion,
19
+ metadata: document.metadata,
20
+ blocks: document.blocks.map(({ type, schemaVersion, data }) => ({
21
+ type,
22
+ schemaVersion,
23
+ data,
24
+ })),
25
+ };
26
+ }
27
+ /** Pure orchestration of the public import/parse/prepare/export boundaries. */
28
+ export function processSource(source, options) {
29
+ const diagnostics = [];
30
+ let sourceMap;
31
+ const location = { source: options.sourceName, line: 1, column: 1 };
32
+ const error = (code, message) => ({
33
+ diagnostics: [
34
+ ...diagnostics,
35
+ { level: "error", code, message, sourceLocation: location },
36
+ ],
37
+ });
38
+ const config = options.config ?? {};
39
+ const preparation = {
40
+ registry: createRegistry(coreBlockDefinitions),
41
+ unknownBlocks: options.command === "validate" ? "error" : "preserve",
42
+ ...config.prepare,
43
+ };
44
+ const markdownOptions = {
45
+ ...config.markdown,
46
+ sourceName: options.sourceName,
47
+ resolveSchemaVersion: (type) => preparation.registry.get(type)?.schemaVersion,
48
+ };
49
+ try {
50
+ let input;
51
+ if (options.format === "markdown") {
52
+ const imported = fromMarkdown(source, markdownOptions);
53
+ diagnostics.push(...imported.diagnostics);
54
+ if (!imported.document)
55
+ return { diagnostics };
56
+ input = imported.document;
57
+ sourceMap = imported.sourceMap;
58
+ }
59
+ else {
60
+ const raw = parseJson(source);
61
+ input = parseDocument(raw);
62
+ // Parsing intentionally models only portable fields. An upgrade must not
63
+ // silently discard unmodeled author data at the envelope/block boundary.
64
+ if (options.command === "upgrade" && stable(raw) !== stable(input))
65
+ return error("unmodeled-source-fields", "JSON contains fields outside the portable schema; move them into metadata.extensions or a block payload before upgrading.");
66
+ }
67
+ const originalPayloads = new Map(input.blocks.map((block) => [
68
+ block.id,
69
+ {
70
+ schemaVersion: block.schemaVersion,
71
+ data: stable(block.data),
72
+ },
73
+ ]));
74
+ const prepared = prepare(input, {
75
+ ...preparation,
76
+ ...(sourceMap ? { sourceMap } : {}),
77
+ });
78
+ diagnostics.push(...prepared.diagnostics.map((item) => locateDiagnostic(item, sourceMap ?? { document: location, blocks: {} })));
79
+ if (!prepared.document ||
80
+ diagnostics.some(({ level }) => level === "error"))
81
+ return { diagnostics };
82
+ if (options.command === "validate")
83
+ return { diagnostics };
84
+ // Explicitly remove preparation flags/plans and serialize only the public wire envelope.
85
+ const upgraded = parseDocument({
86
+ ...(input.dependencies === undefined
87
+ ? {}
88
+ : { dependencies: input.dependencies }),
89
+ ...(input.extensions === undefined
90
+ ? {}
91
+ : { extensions: input.extensions }),
92
+ schemaVersion: prepared.document.schemaVersion,
93
+ ...(prepared.document.metadata === undefined
94
+ ? {}
95
+ : { metadata: prepared.document.metadata }),
96
+ blocks: prepared.document.blocks.map(({ id, type, schemaVersion, data, readable }) => ({
97
+ ...(readable === undefined ? {} : { readable }),
98
+ id,
99
+ type,
100
+ schemaVersion,
101
+ data,
102
+ })),
103
+ });
104
+ for (const block of upgraded.blocks) {
105
+ const original = originalPayloads.get(block.id);
106
+ if (original?.schemaVersion === block.schemaVersion &&
107
+ original.data !== stable(block.data))
108
+ diagnostics.push(locateDiagnostic({
109
+ level: "warning",
110
+ code: "block-data-normalized",
111
+ message: "Registered parsing/defaults/normalization changed this payload without a version change. Review the upgrade preview before writing.",
112
+ blockId: block.id,
113
+ }, sourceMap ?? { document: location, blocks: {} }));
114
+ }
115
+ if (options.format === "json")
116
+ return { diagnostics, output: `${JSON.stringify(upgraded, null, 2)}\n` };
117
+ const exported = toMarkdown(upgraded, {
118
+ ...config.markdown,
119
+ policy: "fallback",
120
+ });
121
+ diagnostics.push(...exported.diagnostics.map((item) => locateDiagnostic(item, sourceMap)));
122
+ if (exported.markdown === undefined ||
123
+ diagnostics.some(({ level }) => level === "error"))
124
+ return { diagnostics };
125
+ const roundTrip = fromMarkdown(exported.markdown, markdownOptions);
126
+ diagnostics.push(...roundTrip.diagnostics);
127
+ if (!roundTrip.document ||
128
+ stable(semantics(roundTrip.document)) !== stable(semantics(upgraded)))
129
+ return error("markdown-roundtrip-loss", "Canonical Markdown cannot preserve this document's upgraded semantics. No output was produced; upgrade the JSON representation instead or fix the host codec.");
130
+ if (diagnostics.some(({ level }) => level === "error"))
131
+ return { diagnostics };
132
+ if (upgraded.blocks.some((block, index) => block.id !== roundTrip.document?.blocks[index]?.id))
133
+ diagnostics.push({
134
+ level: "warning",
135
+ code: "markdown-block-ids-changed",
136
+ message: "Canonical native Markdown regenerates some block IDs. Stable labels remain; use JSON when block identity must be retained.",
137
+ sourceLocation: location,
138
+ });
139
+ return { diagnostics, output: exported.markdown };
140
+ }
141
+ catch (cause) {
142
+ return error(cause instanceof SchemaParseError || cause instanceof JsonBoundaryError
143
+ ? cause.code
144
+ : "source-operation-failed", cause instanceof Error ? cause.message : "Source processing failed.");
145
+ }
146
+ }
147
+ /** Explicit pinning preview/output; never mutates the original input or repins locked content. */
148
+ export async function lockSource(source, options) {
149
+ try {
150
+ const imported = options.format === "markdown"
151
+ ? fromMarkdown(source, {
152
+ ...options.config?.markdown,
153
+ sourceName: options.sourceName,
154
+ })
155
+ : undefined;
156
+ if (imported && !imported.document)
157
+ return { diagnostics: imported.diagnostics };
158
+ const raw = imported?.document ?? parseJson(source);
159
+ const document = parseDocument(raw);
160
+ if (canonicalizeJson(raw) !== canonicalizeJson(document))
161
+ throw new Error("Preserve original source: unsupported envelope fields must not be dropped while locking.");
162
+ const registry = options.config?.prepare?.registry ?? createRegistry(coreBlockDefinitions);
163
+ const locked = await lockDocument(document, registry);
164
+ if (options.format === "json")
165
+ return {
166
+ output: JSON.stringify(locked.document, null, 2) + "\n",
167
+ diagnostics: imported?.diagnostics ?? [],
168
+ };
169
+ const exported = toMarkdown(locked.document, { policy: "archival" });
170
+ return {
171
+ ...(exported.markdown === undefined ? {} : { output: exported.markdown }),
172
+ diagnostics: [...(imported?.diagnostics ?? []), ...exported.diagnostics],
173
+ };
174
+ }
175
+ catch (error) {
176
+ return {
177
+ diagnostics: [
178
+ {
179
+ level: "error",
180
+ code: error instanceof Error &&
181
+ "code" in error &&
182
+ typeof error.code === "string"
183
+ ? error.code
184
+ : "document-lock-failed",
185
+ message: error instanceof Error ? error.message : "Locking failed.",
186
+ sourceLocation: { source: options.sourceName, line: 1, column: 1 },
187
+ },
188
+ ],
189
+ };
190
+ }
191
+ }
192
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/run.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export interface CliIo {
2
+ readonly stdout: (text: string) => void;
3
+ readonly stderr: (text: string) => void;
4
+ }
5
+ /** Optional Node-only runner. Validation and preview never invoke a write operation. */
6
+ export declare function runCli(args: readonly string[], io: CliIo): Promise<number>;
7
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AA6DA,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAkGD,wFAAwF;AACxF,wBAAsB,MAAM,CAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,KAAK,GACR,OAAO,CAAC,MAAM,CAAC,CA4LjB"}
package/dist/run.js ADDED
@@ -0,0 +1,291 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { chmod, lstat, mkdtemp, readFile, rename, rmdir, unlink, writeFile, } from "node:fs/promises";
10
+ import { dirname, extname, join, resolve } from "node:path";
11
+ import { pathToFileURL } from "node:url";
12
+ import { isPlainObject, parseDocument, parseJson, } from "@publisle/schema";
13
+ import { toReadingMarkdown } from "@publisle/markdown";
14
+ import { processSource, lockSource } from "./index.js";
15
+ import { exportSemanticDocument, inspectDocument, validateContractBundle, } from "@publisle/contracts";
16
+ import { createRegistry } from "@publisle/core";
17
+ import { coreBlockDefinitions } from "@publisle/blocks-core";
18
+ const researchCommands = ["export", "bibliography", "doctor", "setup"];
19
+ function isResearchCommand(value) {
20
+ return researchCommands.includes(value ?? "");
21
+ }
22
+ async function loadResearchPlugin() {
23
+ try {
24
+ return await import("@publisle/cli-research");
25
+ }
26
+ catch (cause) {
27
+ if (cause instanceof Error &&
28
+ "code" in cause &&
29
+ (cause.code === "ERR_MODULE_NOT_FOUND" ||
30
+ cause.code === "ERR_UNSUPPORTED_RESOLVE"))
31
+ return undefined;
32
+ throw cause;
33
+ }
34
+ }
35
+ const help = `Usage: publisle validate|upgrade|lock <file.json|file.md> [--config <host.mjs|host.ts>] [--format json|markdown]
36
+ JSON-only inspection: publisle inspect|semantic <source.json> [--bundle <contracts.json>] [--mode linked|standalone]
37
+ Reading projection: publisle reading <source.json> (not a round trip).
38
+ Research profile (requires the optional @publisle/cli-research plugin):
39
+ publisle export <file.json|file.md> --to bibtex|csl-json|latex|jats|pdf|submission [--template ...] [--output <new-file>]
40
+ publisle bibliography <file.bib> | publisle doctor | publisle setup compiler
41
+ Upgrade: [--output <new-file> | --in-place]. Lock: [--output <new-file>] (never in-place).
42
+ --output refuses existing files.
43
+ Config is trusted executable host code exporting a default CliConfig. Node >=24 required.
44
+ Exit codes: 0 success (warnings allowed), 1 document errors, 2 usage/config/I/O errors.
45
+ `;
46
+ function diagnosticText(item, file) {
47
+ const where = item.sourceLocation;
48
+ return `${where?.source ?? file}${where ? `:${String(where.line)}:${String(where.column)}` : ""}: ${item.level} [${item.code}]${item.blockId ? ` (${item.blockId})` : ""}${item.profile ? ` {${item.profile}}` : ""}: ${item.message}\n`;
49
+ }
50
+ async function loadConfig(file) {
51
+ if (!file)
52
+ return {};
53
+ const imported = await import(__rewriteRelativeImportExtension(pathToFileURL(resolve(file)).href));
54
+ if (!isPlainObject(imported) &&
55
+ !(typeof imported === "object" && imported !== null))
56
+ throw new Error("Config must export a default CliConfig object.");
57
+ const config = imported["default"];
58
+ if (!isPlainObject(config))
59
+ throw new Error("Config must export a default CliConfig object.");
60
+ const preparation = config["prepare"];
61
+ if (preparation !== undefined &&
62
+ (!isPlainObject(preparation) ||
63
+ typeof preparation["registry"]?.get !==
64
+ "function"))
65
+ throw new Error("config.prepare must provide a registry created with createRegistry().");
66
+ if (isPlainObject(preparation) &&
67
+ preparation["unknownBlocks"] !== undefined &&
68
+ preparation["unknownBlocks"] !== "preserve" &&
69
+ preparation["unknownBlocks"] !== "error")
70
+ throw new Error("config.prepare.unknownBlocks must be preserve or error.");
71
+ const markdown = config["markdown"];
72
+ if (markdown !== undefined &&
73
+ (!isPlainObject(markdown) ||
74
+ (markdown["codecs"] !== undefined && !Array.isArray(markdown["codecs"]))))
75
+ throw new Error("config.markdown must contain an optional codecs array.");
76
+ return config;
77
+ }
78
+ async function replaceSource(file, original, output) {
79
+ const stat = await lstat(file);
80
+ if (!stat.isFile() || stat.nlink !== 1)
81
+ throw new Error("--in-place requires a regular non-symlink file with one hard link.");
82
+ const temporary = await mkdtemp(join(dirname(file), ".publisle-upgrade-"));
83
+ const staged = join(temporary, "source");
84
+ try {
85
+ await writeFile(staged, output, { flag: "wx", mode: stat.mode & 0o777 });
86
+ await chmod(staged, stat.mode & 0o777);
87
+ const current = await lstat(file);
88
+ if (current.dev !== stat.dev ||
89
+ current.ino !== stat.ino ||
90
+ current.nlink !== 1 ||
91
+ !current.isFile() ||
92
+ (await readFile(file, "utf8")) !== original)
93
+ throw new Error("Source changed while upgrading; refusing to overwrite it.");
94
+ await rename(staged, file);
95
+ }
96
+ finally {
97
+ await unlink(staged).catch((cause) => {
98
+ if (!(typeof cause === "object" &&
99
+ cause !== null &&
100
+ "code" in cause &&
101
+ cause.code === "ENOENT"))
102
+ throw cause;
103
+ });
104
+ await rmdir(temporary);
105
+ }
106
+ }
107
+ /** Optional Node-only runner. Validation and preview never invoke a write operation. */
108
+ export async function runCli(args, io) {
109
+ if (args.length === 1 && (args[0] === "--help" || args[0] === "-h")) {
110
+ io.stdout(help);
111
+ return 0;
112
+ }
113
+ try {
114
+ const command = args[0];
115
+ if (isResearchCommand(command)) {
116
+ const plugin = await loadResearchPlugin();
117
+ if (plugin === undefined) {
118
+ io.stderr(`publisle: ${command} belongs to the Publisle Research profile. Install @publisle/cli-research alongside @publisle/cli to use it.\n`);
119
+ return 2;
120
+ }
121
+ return await plugin.runResearchCommand(command, args, io, {
122
+ loadConfig: (file) => loadConfig(file),
123
+ diagnosticText,
124
+ });
125
+ }
126
+ if (command === "reading") {
127
+ if (args.length !== 2 || !args[1] || args[1].startsWith("-"))
128
+ throw new Error("reading requires only canonical source.json");
129
+ const source = parseDocument(parseJson(await readFile(resolve(args[1]))));
130
+ const result = toReadingMarkdown(source);
131
+ for (const item of result.diagnostics)
132
+ io.stderr(diagnosticText(item, args[1]));
133
+ if (result.markdown === undefined)
134
+ return 1;
135
+ io.stdout(result.markdown);
136
+ return 0;
137
+ }
138
+ if (command === "inspect" || command === "semantic") {
139
+ const file = args[1];
140
+ if (!file || file.startsWith("-"))
141
+ throw new Error("Inspection requires canonical source.json");
142
+ let bundleFile;
143
+ let mode = "linked";
144
+ const seen = new Set();
145
+ for (let index = 2; index < args.length; index += 2) {
146
+ const key = args[index];
147
+ const value = args[index + 1];
148
+ if (!key || seen.has(key) || !value || value.startsWith("-"))
149
+ throw new Error("Invalid or duplicate inspection option");
150
+ seen.add(key);
151
+ if (key === "--bundle")
152
+ bundleFile = value;
153
+ else if (key === "--mode" &&
154
+ (value === "linked" || value === "standalone"))
155
+ mode = value;
156
+ else
157
+ throw new Error("Inspection accepts only --bundle and --mode linked|standalone; no executable config");
158
+ }
159
+ const source = parseJson(await readFile(resolve(file)));
160
+ const bundle = bundleFile
161
+ ? await validateContractBundle(parseJson(await readFile(resolve(bundleFile))))
162
+ : undefined;
163
+ const options = { mode, offline: true, ...(bundle ? { bundle } : {}) };
164
+ const output = command === "inspect"
165
+ ? await inspectDocument(source, options)
166
+ : await exportSemanticDocument(source, options);
167
+ io.stdout(JSON.stringify(output, null, 2) + "\n");
168
+ return 0;
169
+ }
170
+ if (command !== "validate" && command !== "upgrade" && command !== "lock")
171
+ throw new Error("Expected validate, upgrade, lock, inspect, semantic, or reading. Research commands (export, bibliography, doctor, setup) require @publisle/cli-research.");
172
+ let file;
173
+ let configFile;
174
+ let outputFile;
175
+ let format;
176
+ let inPlace = false;
177
+ const seen = new Set();
178
+ for (let index = 1; index < args.length; index++) {
179
+ const arg = args[index];
180
+ if (arg === undefined)
181
+ continue;
182
+ if (!arg.startsWith("-")) {
183
+ if (file)
184
+ throw new Error("Only one input file is supported.");
185
+ file = arg;
186
+ continue;
187
+ }
188
+ if (seen.has(arg))
189
+ throw new Error(`Duplicate option ${arg}.`);
190
+ seen.add(arg);
191
+ if (arg === "--in-place") {
192
+ inPlace = true;
193
+ continue;
194
+ }
195
+ if (arg !== "--config" && arg !== "--output" && arg !== "--format")
196
+ throw new Error(`Unknown option ${arg}.`);
197
+ const value = args[++index];
198
+ if (!value || value.startsWith("-"))
199
+ throw new Error(`Missing value for ${arg}.`);
200
+ if (arg === "--config")
201
+ configFile = value;
202
+ if (arg === "--output")
203
+ outputFile = value;
204
+ if (arg === "--format") {
205
+ if (value !== "json" && value !== "markdown")
206
+ throw new Error("--format must be json or markdown.");
207
+ format = value;
208
+ }
209
+ }
210
+ if (!file)
211
+ throw new Error("An input file is required.");
212
+ if (command === "validate" && (outputFile || inPlace))
213
+ throw new Error("validate does not accept write options.");
214
+ if (command === "lock" && inPlace)
215
+ throw new Error("lock preserves the original source: use stdout preview or --output <new-file>.");
216
+ if (outputFile && inPlace)
217
+ throw new Error("Choose --output or --in-place, not both.");
218
+ file = resolve(file);
219
+ if (outputFile && resolve(outputFile) === file)
220
+ throw new Error("Use --in-place to authorize replacing the input.");
221
+ if (!format) {
222
+ const extension = extname(file).toLowerCase();
223
+ if (extension === ".json")
224
+ format = "json";
225
+ else if (extension === ".md" || extension === ".markdown")
226
+ format = "markdown";
227
+ else
228
+ throw new Error("Unknown file extension; provide --format json|markdown.");
229
+ }
230
+ const bytes = await readFile(file);
231
+ let original;
232
+ try {
233
+ original = new TextDecoder("utf-8", {
234
+ fatal: true,
235
+ ignoreBOM: true,
236
+ }).decode(bytes);
237
+ }
238
+ catch {
239
+ io.stderr(`${file}: error [invalid-json-unicode]: Input is not valid UTF-8.\n`);
240
+ return 1;
241
+ }
242
+ let config = await loadConfig(configFile);
243
+ if (config.contractBundle !== undefined) {
244
+ const bundle = await validateContractBundle(config.contractBundle);
245
+ config = {
246
+ ...config,
247
+ prepare: {
248
+ ...(config.prepare ?? {
249
+ registry: createRegistry(coreBlockDefinitions),
250
+ }),
251
+ contractPins: bundle.contracts.map((entry) => ({
252
+ type: entry.contract.identity.type,
253
+ schemaVersion: entry.contract.identity.schemaVersion,
254
+ id: entry.id,
255
+ digest: entry.digest,
256
+ })),
257
+ },
258
+ };
259
+ }
260
+ const operation = {
261
+ format,
262
+ sourceName: file,
263
+ config,
264
+ };
265
+ const result = command === "lock"
266
+ ? await lockSource(original, operation)
267
+ : processSource(original, { ...operation, command });
268
+ for (const item of result.diagnostics)
269
+ io.stderr(diagnosticText(item, file));
270
+ if (result.diagnostics.some(({ level }) => level === "error"))
271
+ return 1;
272
+ if (command === "validate") {
273
+ io.stderr(`${file}: valid\n`);
274
+ return 0;
275
+ }
276
+ if (result.output === undefined)
277
+ throw new Error("Upgrade produced no output.");
278
+ if (inPlace)
279
+ await replaceSource(file, original, result.output);
280
+ else if (outputFile)
281
+ await writeFile(resolve(outputFile), result.output, { flag: "wx" });
282
+ else
283
+ io.stdout(result.output);
284
+ return 0;
285
+ }
286
+ catch (cause) {
287
+ io.stderr(`publisle: ${cause instanceof Error ? cause.message : "CLI operation failed."}\n${help}`);
288
+ return 2;
289
+ }
290
+ }
291
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}