@mx-space/cli 0.1.0 → 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/README.md +5 -1
- package/dist/{auth-DIFZzoMm.mjs → auth-OeKZZ_2x.mjs} +2 -2
- package/dist/{auth-DIFZzoMm.mjs.map → auth-OeKZZ_2x.mjs.map} +1 -1
- package/dist/bin/mxs.d.mts +1 -0
- package/dist/bin/mxs.mjs +39 -39
- package/dist/bin/mxs.mjs.map +1 -1
- package/dist/config-store-WL7dNMS6.mjs +226 -0
- package/dist/config-store-WL7dNMS6.mjs.map +1 -0
- package/dist/{create-Dz6rJJSS.mjs → create-BVHnXtIH.mjs} +2 -2
- package/dist/{create-Dz6rJJSS.mjs.map → create-BVHnXtIH.mjs.map} +1 -1
- package/dist/{create-DT1l2hue.mjs → create-BWA2WGrW.mjs} +2 -2
- package/dist/{create-DT1l2hue.mjs.map → create-BWA2WGrW.mjs.map} +1 -1
- package/dist/{create-B2AOQL1e.mjs → create-C85MSrtt.mjs} +2 -2
- package/dist/{create-B2AOQL1e.mjs.map → create-C85MSrtt.mjs.map} +1 -1
- package/dist/{create-DjlRHPXy.mjs → create-Cxnqt_Wt.mjs} +2 -2
- package/dist/{create-DjlRHPXy.mjs.map → create-Cxnqt_Wt.mjs.map} +1 -1
- package/dist/{create-CwjGcv2n.mjs → create-DUOSAqBm.mjs} +2 -2
- package/dist/{create-CwjGcv2n.mjs.map → create-DUOSAqBm.mjs.map} +1 -1
- package/dist/{delete-YzRliRn8.mjs → delete-BEXOOFAJ.mjs} +2 -2
- package/dist/{delete-YzRliRn8.mjs.map → delete-BEXOOFAJ.mjs.map} +1 -1
- package/dist/{delete-B4dGrrus.mjs → delete-CGy-cV6k.mjs} +2 -2
- package/dist/{delete-B4dGrrus.mjs.map → delete-CGy-cV6k.mjs.map} +1 -1
- package/dist/{delete-BH6ZngTz.mjs → delete-CKqlAUT8.mjs} +2 -2
- package/dist/{delete-BH6ZngTz.mjs.map → delete-CKqlAUT8.mjs.map} +1 -1
- package/dist/{delete-CaG2d_xt.mjs → delete-CcyrLNZv.mjs} +2 -2
- package/dist/{delete-CaG2d_xt.mjs.map → delete-CcyrLNZv.mjs.map} +1 -1
- package/dist/{delete-BrY5zJ6S.mjs → delete-Cjxehwj7.mjs} +2 -2
- package/dist/{delete-BrY5zJ6S.mjs.map → delete-Cjxehwj7.mjs.map} +1 -1
- package/dist/{document-output-BVB8emLt.mjs → document-output-C5PWbz2p.mjs} +57 -2
- package/dist/document-output-C5PWbz2p.mjs.map +1 -0
- package/dist/{edit-Bb0Ze4w6.mjs → edit-BRaZ6GGg.mjs} +2 -2
- package/dist/{edit-Bb0Ze4w6.mjs.map → edit-BRaZ6GGg.mjs.map} +1 -1
- package/dist/{edit-z55ofr1S.mjs → edit-BuKMUNVC.mjs} +2 -2
- package/dist/{edit-z55ofr1S.mjs.map → edit-BuKMUNVC.mjs.map} +1 -1
- package/dist/{edit-BeFmC3XD.mjs → edit-DFnOnk4i.mjs} +2 -2
- package/dist/{edit-BeFmC3XD.mjs.map → edit-DFnOnk4i.mjs.map} +1 -1
- package/dist/{edit-DLDw_ZWX.mjs → edit-t108N11Q.mjs} +2 -2
- package/dist/{edit-DLDw_ZWX.mjs.map → edit-t108N11Q.mjs.map} +1 -1
- package/dist/{get-ClkpDBTL.mjs → get-BYoAlJwB.mjs} +3 -3
- package/dist/get-BYoAlJwB.mjs.map +1 -0
- package/dist/{get-DJfUJ3sP.mjs → get-CwcNFb39.mjs} +3 -3
- package/dist/get-CwcNFb39.mjs.map +1 -0
- package/dist/{get-DiqaQvoS.mjs → get-DnDvLa9S.mjs} +4 -4
- package/dist/get-DnDvLa9S.mjs.map +1 -0
- package/dist/{get-2qjq0wgG.mjs → get-Doi-NKAh.mjs} +6 -6
- package/dist/get-Doi-NKAh.mjs.map +1 -0
- package/dist/{get-CRR13lgj.mjs → get-DxTU7Nom.mjs} +2 -2
- package/dist/{get-CRR13lgj.mjs.map → get-DxTU7Nom.mjs.map} +1 -1
- package/dist/{get-BGAk1Zmv.mjs → get-GdRz82RW.mjs} +4 -4
- package/dist/get-GdRz82RW.mjs.map +1 -0
- package/dist/index.d.mts +15 -3
- package/dist/index.mjs +5 -5
- package/dist/{list-Fp4nKfQb.mjs → list-CLAcZYZ4.mjs} +3 -3
- package/dist/list-CLAcZYZ4.mjs.map +1 -0
- package/dist/{list-DY-tPNG-.mjs → list-CtME3aDw.mjs} +2 -2
- package/dist/{list-DY-tPNG-.mjs.map → list-CtME3aDw.mjs.map} +1 -1
- package/dist/{list-DlQSkbqx.mjs → list-DHG-MzOM.mjs} +3 -3
- package/dist/list-DHG-MzOM.mjs.map +1 -0
- package/dist/{list-BYzhflDg.mjs → list-DN81zVDA.mjs} +4 -4
- package/dist/list-DN81zVDA.mjs.map +1 -0
- package/dist/list-DVunNsXr.mjs +10 -0
- package/dist/list-DVunNsXr.mjs.map +1 -0
- package/dist/list-DbNCVZbz.mjs +15 -0
- package/dist/list-DbNCVZbz.mjs.map +1 -0
- package/dist/{login-CLOJ-fTJ.mjs → login-mjliJn8U.mjs} +4 -4
- package/dist/{login-CLOJ-fTJ.mjs.map → login-mjliJn8U.mjs.map} +1 -1
- package/dist/{logout-v8ihxsim.mjs → logout-Bslt_ZJ4.mjs} +2 -2
- package/dist/{logout-v8ihxsim.mjs.map → logout-Bslt_ZJ4.mjs.map} +1 -1
- package/dist/{onboarding-640IldLz.mjs → onboarding-C1t1yoay.mjs} +3 -3
- package/dist/{onboarding-640IldLz.mjs.map → onboarding-C1t1yoay.mjs.map} +1 -1
- package/dist/output-BM7aBFwt.mjs.map +1 -1
- package/dist/{publish-pRBfTJfe.mjs → publish-CN3NTJ_r.mjs} +2 -2
- package/dist/{publish-pRBfTJfe.mjs.map → publish-CN3NTJ_r.mjs.map} +1 -1
- package/dist/{publish-DkTYB-eK.mjs → publish-akQWYsnL.mjs} +2 -2
- package/dist/{publish-DkTYB-eK.mjs.map → publish-akQWYsnL.mjs.map} +1 -1
- package/dist/{set-BEGQz2si.mjs → set-ClbrGFGv.mjs} +2 -2
- package/dist/{set-BEGQz2si.mjs.map → set-ClbrGFGv.mjs.map} +1 -1
- package/dist/{shared-D0HVBDHI.mjs → shared-C2EAn5h_.mjs} +11 -4
- package/dist/shared-C2EAn5h_.mjs.map +1 -0
- package/dist/{status-LXrN9fI-.mjs → status-Cvyrrx-J.mjs} +3 -3
- package/dist/{status-LXrN9fI-.mjs.map → status-Cvyrrx-J.mjs.map} +1 -1
- package/dist/{update-BMZQPOvR.mjs → update-CHmckeo8.mjs} +2 -2
- package/dist/{update-BMZQPOvR.mjs.map → update-CHmckeo8.mjs.map} +1 -1
- package/dist/{update-q66TLS38.mjs → update-CJjwg09n.mjs} +2 -2
- package/dist/{update-q66TLS38.mjs.map → update-CJjwg09n.mjs.map} +1 -1
- package/dist/{update-Dx6AF8tf.mjs → update-Duh-iVOZ.mjs} +2 -2
- package/dist/{update-Dx6AF8tf.mjs.map → update-Duh-iVOZ.mjs.map} +1 -1
- package/dist/{update-B9ynFCdZ.mjs → update-dc-72pUN.mjs} +2 -2
- package/dist/{update-B9ynFCdZ.mjs.map → update-dc-72pUN.mjs.map} +1 -1
- package/dist/{update-BXz0l7Lz.mjs → update-qfiC-9Og.mjs} +2 -2
- package/dist/{update-BXz0l7Lz.mjs.map → update-qfiC-9Og.mjs.map} +1 -1
- package/dist/{whoami-CTkctOEd.mjs → whoami-UwcdRchK.mjs} +3 -3
- package/dist/{whoami-CTkctOEd.mjs.map → whoami-UwcdRchK.mjs.map} +1 -1
- package/package.json +1 -1
- package/dist/config-store-DIu7x0ao.mjs +0 -121
- package/dist/config-store-DIu7x0ao.mjs.map +0 -1
- package/dist/document-output-BVB8emLt.mjs.map +0 -1
- package/dist/get-2qjq0wgG.mjs.map +0 -1
- package/dist/get-BGAk1Zmv.mjs.map +0 -1
- package/dist/get-ClkpDBTL.mjs.map +0 -1
- package/dist/get-DJfUJ3sP.mjs.map +0 -1
- package/dist/get-DiqaQvoS.mjs.map +0 -1
- package/dist/list-BYzhflDg.mjs.map +0 -1
- package/dist/list-DlQSkbqx.mjs.map +0 -1
- package/dist/list-DsrA5wIz.mjs +0 -15
- package/dist/list-DsrA5wIz.mjs.map +0 -1
- package/dist/list-Fp4nKfQb.mjs.map +0 -1
- package/dist/list-s_tloiEX.mjs +0 -10
- package/dist/list-s_tloiEX.mjs.map +0 -1
- package/dist/shared-D0HVBDHI.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output-BM7aBFwt.mjs","names":[],"sources":["../src/core/errors.ts","../src/core/output.ts"],"sourcesContent":["export type MxsErrorCode =\n | 'generic'\n | 'argv.parse'\n | 'auth.missing'\n | 'auth.expired'\n | 'auth.denied'\n | 'auth.probe'\n | 'network.timeout'\n | 'network.dns'\n | 'network.refused'\n | 'validation.failed'\n | 'validation.xml'\n | 'server.error'\n | 'resource.not_found'\n | 'config.missing.api_url'\n | 'config.missing.token'\n | (string & {})\n\nexport interface MxsErrorOptions {\n code: MxsErrorCode\n message: string\n details?: unknown\n hint?: string\n cause?: unknown\n}\n\nexport class MxsError extends Error {\n readonly code: MxsErrorCode\n readonly details?: unknown\n readonly hint?: string\n\n constructor(options: MxsErrorOptions) {\n super(options.message, options.cause ? { cause: options.cause } : undefined)\n this.name = 'MxsError'\n this.code = options.code\n this.details = options.details\n this.hint = options.hint\n }\n\n toJSON() {\n return {\n ok: false as const,\n code: this.code,\n message: this.message,\n ...(this.details === undefined ? {} : { details: this.details }),\n ...(this.hint === undefined ? {} : { hint: this.hint }),\n }\n }\n}\n\nexport function exitCodeForError(err: unknown): number {\n if (!(err instanceof MxsError)) return 1\n const code = err.code\n if (code === 'argv.parse') return 2\n if (\n code === 'auth.missing' ||\n code === 'auth.expired' ||\n code === 'auth.denied' ||\n code === 'auth.probe'\n )\n return 3\n if (\n code === 'network.timeout' ||\n code === 'network.dns' ||\n code === 'network.refused'\n )\n return 4\n if (\n code === 'validation.failed' ||\n code === 'validation.xml' ||\n code === 'config.missing.api_url' ||\n code === 'config.missing.token'\n )\n return 5\n if (code === 'server.error') return 6\n if (code === 'resource.not_found') return 7\n return 1\n}\n","import { MxsError } from './errors'\n\nexport interface OutputOptions {\n json: boolean\n output?: string\n quiet: boolean\n verbose: boolean\n}\n\nexport const defaultOutputOptions: OutputOptions = {\n json: false,\n output: 'pretty-json',\n quiet: false,\n verbose: false,\n}\n\nfunction isTTY(stream: NodeJS.WriteStream): boolean {\n return Boolean(stream.isTTY)\n}\n\nfunction color(stream: NodeJS.WriteStream, code: number, text: string): string {\n if (!isTTY(stream)) return text\n return `\u001b[${code}m${text}\u001b[0m`\n}\n\nexport function emitSuccess(data: unknown, opts: OutputOptions): void {\n if (opts.json || opts.output === 'json') {\n process.stdout.write(`${JSON.stringify({ ok: true, data })}\\n`)\n return\n }\n if (data === null || data === undefined) {\n return\n }\n if (typeof data === 'string') {\n process.stdout.write(`${data}\\n`)\n return\n }\n process.stdout.write(`${JSON.stringify(data, null, 2)}\\n`)\n}\n\nexport function emitInfo(message: string, opts: OutputOptions): void {\n if (opts.quiet || opts.json) return\n process.stderr.write(`${message}\\n`)\n}\n\nexport function emitWarn(message: string, opts: OutputOptions): void {\n if (opts.json) return\n process.stderr.write(`${color(process.stderr, 33, 'warn')}: ${message}\\n`)\n}\n\nexport function emitError(err: unknown, opts: OutputOptions): void {\n if (err instanceof MxsError) {\n if (opts.json) {\n process.stdout.write(`${JSON.stringify(err.toJSON())}\\n`)\n return\n }\n process.stderr.write(`${color(process.stderr, 31, '✘')} ${err.message}\\n`)\n if (err.details) {\n const detailLines = formatDetails(err.details)\n for (const line of detailLines) {\n process.stderr.write(` · ${line}\\n`)\n }\n }\n if (err.hint) {\n process.stderr.write(`\\nhint: ${err.hint}\\n`)\n }\n return\n }\n const message = err instanceof Error ? err.message : String(err)\n if (opts.json) {\n process.stdout.write(\n `${JSON.stringify({ ok: false, code: 'generic', message })}\\n`,\n )\n return\n }\n process.stderr.write(`${color(process.stderr, 31, '✘')} ${message}\\n`)\n}\n\nfunction formatDetails(details: unknown): string[] {\n if (!details || typeof details !== 'object') return [String(details)]\n if (Array.isArray(details)) {\n return details.map((item) => formatIssue(item))\n }\n if (\n 'issues' in (details as Record<string, unknown>) &&\n Array.isArray((details as any).issues)\n ) {\n return (details as any).issues.map((issue: unknown) => formatIssue(issue))\n }\n return [JSON.stringify(details)]\n}\n\nfunction formatIssue(issue: unknown): string {\n if (!issue || typeof issue !== 'object') return String(issue)\n const obj = issue as Record<string, unknown>\n const path = Array.isArray(obj.path) ? obj.path.join('.') : ''\n const message =\n typeof obj.message === 'string' ? obj.message : JSON.stringify(obj)\n const line = typeof obj.line === 'number' ? ` (line ${obj.line})` : ''\n const suggestions = Array.isArray(obj.suggestions)\n ? ` — did you mean ${obj.suggestions.join(', ')}?`\n : ''\n return `${path ? `${path}: ` : ''}${message}${line}${suggestions}`\n}\n\nexport function renderTable(\n rows: Record<string, unknown>[],\n columns: string[],\n): string {\n if (rows.length === 0) return '(no rows)'\n const widths = columns.map((col) =>\n Math.max(col.length, ...rows.map((row) => String(row[col] ?? '').length)),\n )\n const header = columns.map((col, i) => col.padEnd(widths[i] ?? 0)).join(' ')\n const sep = widths.map((w) => '-'.repeat(w)).join(' ')\n const body = rows\n .map((row) =>\n columns\n .map((col, i) => String(row[col] ?? '').padEnd(widths[i] ?? 0))\n .join(' '),\n )\n .join('\\n')\n return `${header}\\n${sep}\\n${body}`\n}\n"],"mappings":";
|
|
1
|
+
{"version":3,"file":"output-BM7aBFwt.mjs","names":[],"sources":["../src/core/errors.ts","../src/core/output.ts"],"sourcesContent":["export type MxsErrorCode =\n | 'generic'\n | 'argv.parse'\n | 'auth.missing'\n | 'auth.expired'\n | 'auth.denied'\n | 'auth.probe'\n | 'network.timeout'\n | 'network.dns'\n | 'network.refused'\n | 'validation.failed'\n | 'validation.xml'\n | 'server.error'\n | 'resource.not_found'\n | 'config.missing.api_url'\n | 'config.missing.token'\n | 'config.migration.failed'\n | 'profile.not_found'\n | (string & {})\n\nexport interface MxsErrorOptions {\n code: MxsErrorCode\n message: string\n details?: unknown\n hint?: string\n cause?: unknown\n}\n\nexport class MxsError extends Error {\n readonly code: MxsErrorCode\n readonly details?: unknown\n readonly hint?: string\n\n constructor(options: MxsErrorOptions) {\n super(options.message, options.cause ? { cause: options.cause } : undefined)\n this.name = 'MxsError'\n this.code = options.code\n this.details = options.details\n this.hint = options.hint\n }\n\n toJSON() {\n return {\n ok: false as const,\n code: this.code,\n message: this.message,\n ...(this.details === undefined ? {} : { details: this.details }),\n ...(this.hint === undefined ? {} : { hint: this.hint }),\n }\n }\n}\n\nexport function exitCodeForError(err: unknown): number {\n if (!(err instanceof MxsError)) return 1\n const code = err.code\n if (code === 'argv.parse') return 2\n if (\n code === 'auth.missing' ||\n code === 'auth.expired' ||\n code === 'auth.denied' ||\n code === 'auth.probe'\n )\n return 3\n if (\n code === 'network.timeout' ||\n code === 'network.dns' ||\n code === 'network.refused'\n )\n return 4\n if (\n code === 'validation.failed' ||\n code === 'validation.xml' ||\n code === 'config.missing.api_url' ||\n code === 'config.missing.token'\n )\n return 5\n if (code === 'server.error') return 6\n if (code === 'resource.not_found') return 7\n return 1\n}\n","import { MxsError } from './errors'\n\nexport interface OutputOptions {\n json: boolean\n output?: string\n quiet: boolean\n verbose: boolean\n}\n\nexport const defaultOutputOptions: OutputOptions = {\n json: false,\n output: 'pretty-json',\n quiet: false,\n verbose: false,\n}\n\nfunction isTTY(stream: NodeJS.WriteStream): boolean {\n return Boolean(stream.isTTY)\n}\n\nfunction color(stream: NodeJS.WriteStream, code: number, text: string): string {\n if (!isTTY(stream)) return text\n return `\u001b[${code}m${text}\u001b[0m`\n}\n\nexport function emitSuccess(data: unknown, opts: OutputOptions): void {\n if (opts.json || opts.output === 'json') {\n process.stdout.write(`${JSON.stringify({ ok: true, data })}\\n`)\n return\n }\n if (data === null || data === undefined) {\n return\n }\n if (typeof data === 'string') {\n process.stdout.write(`${data}\\n`)\n return\n }\n process.stdout.write(`${JSON.stringify(data, null, 2)}\\n`)\n}\n\nexport function emitInfo(message: string, opts: OutputOptions): void {\n if (opts.quiet || opts.json) return\n process.stderr.write(`${message}\\n`)\n}\n\nexport function emitWarn(message: string, opts: OutputOptions): void {\n if (opts.json) return\n process.stderr.write(`${color(process.stderr, 33, 'warn')}: ${message}\\n`)\n}\n\nexport function emitError(err: unknown, opts: OutputOptions): void {\n if (err instanceof MxsError) {\n if (opts.json) {\n process.stdout.write(`${JSON.stringify(err.toJSON())}\\n`)\n return\n }\n process.stderr.write(`${color(process.stderr, 31, '✘')} ${err.message}\\n`)\n if (err.details) {\n const detailLines = formatDetails(err.details)\n for (const line of detailLines) {\n process.stderr.write(` · ${line}\\n`)\n }\n }\n if (err.hint) {\n process.stderr.write(`\\nhint: ${err.hint}\\n`)\n }\n return\n }\n const message = err instanceof Error ? err.message : String(err)\n if (opts.json) {\n process.stdout.write(\n `${JSON.stringify({ ok: false, code: 'generic', message })}\\n`,\n )\n return\n }\n process.stderr.write(`${color(process.stderr, 31, '✘')} ${message}\\n`)\n}\n\nfunction formatDetails(details: unknown): string[] {\n if (!details || typeof details !== 'object') return [String(details)]\n if (Array.isArray(details)) {\n return details.map((item) => formatIssue(item))\n }\n if (\n 'issues' in (details as Record<string, unknown>) &&\n Array.isArray((details as any).issues)\n ) {\n return (details as any).issues.map((issue: unknown) => formatIssue(issue))\n }\n return [JSON.stringify(details)]\n}\n\nfunction formatIssue(issue: unknown): string {\n if (!issue || typeof issue !== 'object') return String(issue)\n const obj = issue as Record<string, unknown>\n const path = Array.isArray(obj.path) ? obj.path.join('.') : ''\n const message =\n typeof obj.message === 'string' ? obj.message : JSON.stringify(obj)\n const line = typeof obj.line === 'number' ? ` (line ${obj.line})` : ''\n const suggestions = Array.isArray(obj.suggestions)\n ? ` — did you mean ${obj.suggestions.join(', ')}?`\n : ''\n return `${path ? `${path}: ` : ''}${message}${line}${suggestions}`\n}\n\nexport function renderTable(\n rows: Record<string, unknown>[],\n columns: string[],\n): string {\n if (rows.length === 0) return '(no rows)'\n const widths = columns.map((col) =>\n Math.max(col.length, ...rows.map((row) => String(row[col] ?? '').length)),\n )\n const header = columns.map((col, i) => col.padEnd(widths[i] ?? 0)).join(' ')\n const sep = widths.map((w) => '-'.repeat(w)).join(' ')\n const body = rows\n .map((row) =>\n columns\n .map((col, i) => String(row[col] ?? '').padEnd(widths[i] ?? 0))\n .join(' '),\n )\n .join('\\n')\n return `${header}\\n${sep}\\n${body}`\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as emitSuccess } from "./output-BM7aBFwt.mjs";
|
|
2
|
-
import { n as resolveContext, t as buildApiClient } from "./shared-
|
|
2
|
+
import { n as resolveContext, t as buildApiClient } from "./shared-C2EAn5h_.mjs";
|
|
3
3
|
import { t as resolveNoteId } from "./resolve-CyjMlaoJ.mjs";
|
|
4
4
|
//#region src/commands/note/publish.ts
|
|
5
5
|
async function run(slugOrId, publish, flags, out) {
|
|
@@ -20,4 +20,4 @@ async function run(slugOrId, publish, flags, out) {
|
|
|
20
20
|
//#endregion
|
|
21
21
|
export { run };
|
|
22
22
|
|
|
23
|
-
//# sourceMappingURL=publish-
|
|
23
|
+
//# sourceMappingURL=publish-CN3NTJ_r.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-
|
|
1
|
+
{"version":3,"file":"publish-CN3NTJ_r.mjs","names":[],"sources":["../src/commands/note/publish.ts"],"sourcesContent":["import { emitSuccess, type OutputOptions } from '../../core/output'\nimport {\n buildApiClient,\n type GlobalFlags,\n resolveContext,\n} from '../internal/shared'\nimport { resolveNoteId } from './resolve'\n\nexport async function run(\n slugOrId: string,\n publish: boolean,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n const id = await resolveNoteId(client, slugOrId)\n if (flags.dryRun) {\n emitSuccess({ would_set: { id, isPublished: publish } }, out)\n return\n }\n const res = await client.request(`/notes/${id}/publish`, {\n method: 'PATCH',\n body: { isPublished: publish },\n })\n emitSuccess(res.data, out)\n}\n"],"mappings":";;;;AAQA,eAAsB,IACpB,UACA,SACA,OACA,KACA;CAEA,MAAM,SAAS,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KAAK;CACxC,MAAM,KAAK,MAAM,cAAc,QAAQ,QAAQ;CAC/C,IAAI,MAAM,QAAQ;EAChB,YAAY,EAAE,WAAW;GAAE;GAAI,aAAa;EAAQ,EAAE,GAAG,GAAG;EAC5D;CACF;CAKA,aAAY,MAJM,OAAO,QAAQ,UAAU,GAAG,WAAW;EACvD,QAAQ;EACR,MAAM,EAAE,aAAa,QAAQ;CAC/B,CAAC,GACe,MAAM,GAAG;AAC3B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as emitSuccess } from "./output-BM7aBFwt.mjs";
|
|
2
|
-
import { n as resolveContext, t as buildApiClient } from "./shared-
|
|
2
|
+
import { n as resolveContext, t as buildApiClient } from "./shared-C2EAn5h_.mjs";
|
|
3
3
|
import { t as resolvePostId } from "./resolve-Bp1AfBmM.mjs";
|
|
4
4
|
//#region src/commands/post/publish.ts
|
|
5
5
|
async function run(slugOrId, publish, flags, out) {
|
|
@@ -20,4 +20,4 @@ async function run(slugOrId, publish, flags, out) {
|
|
|
20
20
|
//#endregion
|
|
21
21
|
export { run };
|
|
22
22
|
|
|
23
|
-
//# sourceMappingURL=publish-
|
|
23
|
+
//# sourceMappingURL=publish-akQWYsnL.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-
|
|
1
|
+
{"version":3,"file":"publish-akQWYsnL.mjs","names":[],"sources":["../src/commands/post/publish.ts"],"sourcesContent":["import { emitSuccess, type OutputOptions } from '../../core/output'\nimport { buildApiClient, type GlobalFlags, resolveContext } from '../internal/shared'\nimport { resolvePostId } from './resolve'\n\nexport async function run(\n slugOrId: string,\n publish: boolean,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n const id = await resolvePostId(client, slugOrId)\n if (flags.dryRun) {\n emitSuccess({ would_set: { id, isPublished: publish } }, out)\n return\n }\n const res = await client.request(`/posts/${id}`, {\n method: 'PATCH',\n body: { isPublished: publish },\n })\n emitSuccess(res.data, out)\n}\n"],"mappings":";;;;AAIA,eAAsB,IACpB,UACA,SACA,OACA,KACA;CAEA,MAAM,SAAS,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KAAK;CACxC,MAAM,KAAK,MAAM,cAAc,QAAQ,QAAQ;CAC/C,IAAI,MAAM,QAAQ;EAChB,YAAY,EAAE,WAAW;GAAE;GAAI,aAAa;EAAQ,EAAE,GAAG,GAAG;EAC5D;CACF;CAKA,aAAY,MAJM,OAAO,QAAQ,UAAU,MAAM;EAC/C,QAAQ;EACR,MAAM,EAAE,aAAa,QAAQ;CAC/B,CAAC,GACe,MAAM,GAAG;AAC3B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as emitSuccess, s as MxsError } from "./output-BM7aBFwt.mjs";
|
|
2
|
-
import { n as resolveContext, t as buildApiClient } from "./shared-
|
|
2
|
+
import { n as resolveContext, t as buildApiClient } from "./shared-C2EAn5h_.mjs";
|
|
3
3
|
//#region src/commands/config/set.ts
|
|
4
4
|
async function run(key, value, opts, flags, out) {
|
|
5
5
|
const coerced = coerce(value, opts.type);
|
|
@@ -40,4 +40,4 @@ function coerce(value, type) {
|
|
|
40
40
|
//#endregion
|
|
41
41
|
export { run };
|
|
42
42
|
|
|
43
|
-
//# sourceMappingURL=set-
|
|
43
|
+
//# sourceMappingURL=set-ClbrGFGv.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-
|
|
1
|
+
{"version":3,"file":"set-ClbrGFGv.mjs","names":[],"sources":["../src/commands/config/set.ts"],"sourcesContent":["import { MxsError } from '../../core/errors'\nimport { emitSuccess, type OutputOptions } from '../../core/output'\nimport { buildApiClient, type GlobalFlags, resolveContext } from '../internal/shared'\n\nexport interface ConfigSetFlags {\n type?: 'json' | 'string' | 'number' | 'bool'\n}\n\nexport async function run(\n key: string,\n value: string,\n opts: ConfigSetFlags,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const coerced = coerce(value, opts.type)\n if (flags.dryRun) {\n emitSuccess({ key, value: coerced }, out)\n return\n }\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n const res = await client.request(`/options/${key}`, {\n method: 'PATCH',\n body: coerced,\n })\n emitSuccess(res.data, out)\n}\n\nfunction coerce(value: string, type?: ConfigSetFlags['type']): unknown {\n if (type === 'string') return value\n if (type === 'number') {\n const n = Number(value)\n if (Number.isNaN(n))\n throw new MxsError({\n code: 'validation.failed',\n message: `invalid number: ${value}`,\n })\n return n\n }\n if (type === 'bool') return value === 'true'\n if (type === 'json' || type === undefined) {\n try {\n return JSON.parse(value)\n } catch {\n if (type === 'json')\n throw new MxsError({\n code: 'validation.failed',\n message: `invalid JSON: ${value}`,\n })\n return value\n }\n }\n return value\n}\n"],"mappings":";;;AAQA,eAAsB,IACpB,KACA,OACA,MACA,OACA,KACA;CACA,MAAM,UAAU,OAAO,OAAO,KAAK,IAAI;CACvC,IAAI,MAAM,QAAQ;EAChB,YAAY;GAAE;GAAK,OAAO;EAAQ,GAAG,GAAG;EACxC;CACF;CAOA,aAAY,MALG,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KACZ,EAAE,QAAQ,YAAY,OAAO;EAClD,QAAQ;EACR,MAAM;CACR,CAAC,GACe,MAAM,GAAG;AAC3B;AAEA,SAAS,OAAO,OAAe,MAAwC;CACrE,IAAI,SAAS,UAAU,OAAO;CAC9B,IAAI,SAAS,UAAU;EACrB,MAAM,IAAI,OAAO,KAAK;EACtB,IAAI,OAAO,MAAM,CAAC,GAChB,MAAM,IAAI,SAAS;GACjB,MAAM;GACN,SAAS,mBAAmB;EAC9B,CAAC;EACH,OAAO;CACT;CACA,IAAI,SAAS,QAAQ,OAAO,UAAU;CACtC,IAAI,SAAS,UAAU,SAAS,KAAA,GAC9B,IAAI;EACF,OAAO,KAAK,MAAM,KAAK;CACzB,QAAQ;EACN,IAAI,SAAS,QACX,MAAM,IAAI,SAAS;GACjB,MAAM;GACN,SAAS,iBAAiB;EAC5B,CAAC;EACH,OAAO;CACT;CAEF,OAAO;AACT"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as emitInfo, s as MxsError } from "./output-BM7aBFwt.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { n as ApiClient, t as runOnboarding } from "./onboarding-
|
|
2
|
+
import { c as resolveConfig } from "./config-store-WL7dNMS6.mjs";
|
|
3
|
+
import { n as ApiClient, t as runOnboarding } from "./onboarding-C1t1yoay.mjs";
|
|
4
4
|
//#region src/commands/internal/shared.ts
|
|
5
5
|
async function resolveContext(flags, out) {
|
|
6
6
|
let resolved;
|
|
@@ -33,7 +33,14 @@ function buildApiClient(resolved, flags) {
|
|
|
33
33
|
verbose: flags.verbose
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
|
+
function withLangQuery(flags, query = {}) {
|
|
37
|
+
if (!flags.lang) return query;
|
|
38
|
+
return {
|
|
39
|
+
...query,
|
|
40
|
+
lang: flags.lang
|
|
41
|
+
};
|
|
42
|
+
}
|
|
36
43
|
//#endregion
|
|
37
|
-
export { resolveContext as n, buildApiClient as t };
|
|
44
|
+
export { resolveContext as n, withLangQuery as r, buildApiClient as t };
|
|
38
45
|
|
|
39
|
-
//# sourceMappingURL=shared-
|
|
46
|
+
//# sourceMappingURL=shared-C2EAn5h_.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-C2EAn5h_.mjs","names":[],"sources":["../src/commands/internal/shared.ts"],"sourcesContent":["import { ApiClient } from '../../core/api-client'\nimport { readConfig, resolveConfig, writeConfig } from '../../core/config-store'\nimport { MxsError } from '../../core/errors'\nimport { runOnboarding } from '../../core/onboarding'\nimport { emitInfo, type OutputOptions } from '../../core/output'\n\nexport interface GlobalFlags {\n json?: boolean\n apiUrl?: string\n token?: string\n apiKey?: string\n lang?: string\n quiet?: boolean\n verbose?: boolean\n dryRun?: boolean\n}\n\nexport async function resolveContext(flags: GlobalFlags, out: OutputOptions) {\n let resolved\n try {\n resolved = await resolveConfig({\n apiUrl: flags.apiUrl,\n token: flags.token,\n apiKey: flags.apiKey,\n })\n } catch (err) {\n if (err instanceof MxsError && err.code === 'config.missing.api_url') {\n const probed = await runOnboarding()\n emitInfo(`saved ${probed.apiUrl} to config`, out)\n resolved = await resolveConfig({\n apiUrl: flags.apiUrl,\n token: flags.token,\n apiKey: flags.apiKey,\n })\n } else {\n throw err\n }\n }\n return resolved\n}\n\nexport function buildApiClient(\n resolved: Awaited<ReturnType<typeof resolveConfig>>,\n flags: GlobalFlags,\n) {\n return new ApiClient({\n apiBase: resolved.apiBase,\n authBase: resolved.authBase,\n clientId: resolved.clientId,\n token: resolved.token,\n apiKey: resolved.apiKey,\n autoRefresh:\n Boolean(resolved.token) &&\n !resolved.apiKey &&\n !flags.token &&\n !process.env.MXS_TOKEN,\n verbose: flags.verbose,\n })\n}\n\nexport function withLangQuery(\n flags: GlobalFlags,\n query: Record<string, unknown> = {},\n): Record<string, unknown> {\n if (!flags.lang) return query\n return { ...query, lang: flags.lang }\n}\n\nexport async function persistApiVersion(version: number) {\n const cfg = await readConfig()\n if (cfg.api_version === version) return\n await writeConfig({ ...cfg, api_version: version })\n}\n"],"mappings":";;;;AAiBA,eAAsB,eAAe,OAAoB,KAAoB;CAC3E,IAAI;CACJ,IAAI;EACF,WAAW,MAAM,cAAc;GAC7B,QAAQ,MAAM;GACd,OAAO,MAAM;GACb,QAAQ,MAAM;EAChB,CAAC;CACH,SAAS,KAAK;EACZ,IAAI,eAAe,YAAY,IAAI,SAAS,0BAA0B;GAEpE,SAAS,UAAS,MADG,cAAc,GACV,OAAO,aAAa,GAAG;GAChD,WAAW,MAAM,cAAc;IAC7B,QAAQ,MAAM;IACd,OAAO,MAAM;IACb,QAAQ,MAAM;GAChB,CAAC;EACH,OACE,MAAM;CAEV;CACA,OAAO;AACT;AAEA,SAAgB,eACd,UACA,OACA;CACA,OAAO,IAAI,UAAU;EACnB,SAAS,SAAS;EAClB,UAAU,SAAS;EACnB,UAAU,SAAS;EACnB,OAAO,SAAS;EAChB,QAAQ,SAAS;EACjB,aACE,QAAQ,SAAS,KAAK,KACtB,CAAC,SAAS,UACV,CAAC,MAAM,SACP,CAAC,QAAQ,IAAI;EACf,SAAS,MAAM;CACjB,CAAC;AACH;AAEA,SAAgB,cACd,OACA,QAAiC,CAAC,GACT;CACzB,IAAI,CAAC,MAAM,MAAM,OAAO;CACxB,OAAO;EAAE,GAAG;EAAO,MAAM,MAAM;CAAK;AACtC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { i as emitSuccess } from "./output-BM7aBFwt.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { i as isExpiringSoon } from "./auth-
|
|
2
|
+
import { s as readCredentials } from "./config-store-WL7dNMS6.mjs";
|
|
3
|
+
import { i as isExpiringSoon } from "./auth-OeKZZ_2x.mjs";
|
|
4
4
|
//#region src/commands/auth/status.ts
|
|
5
5
|
async function run(_flags, out) {
|
|
6
6
|
const cred = await readCredentials();
|
|
@@ -19,4 +19,4 @@ async function run(_flags, out) {
|
|
|
19
19
|
//#endregion
|
|
20
20
|
export { run };
|
|
21
21
|
|
|
22
|
-
//# sourceMappingURL=status-
|
|
22
|
+
//# sourceMappingURL=status-Cvyrrx-J.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-
|
|
1
|
+
{"version":3,"file":"status-Cvyrrx-J.mjs","names":[],"sources":["../src/commands/auth/status.ts"],"sourcesContent":["import { isExpiringSoon } from '../../core/auth'\nimport { readCredentials } from '../../core/config-store'\nimport { emitSuccess, type OutputOptions } from '../../core/output'\nimport { type GlobalFlags } from '../internal/shared'\n\nexport async function run(_flags: GlobalFlags, out: OutputOptions) {\n const cred = await readCredentials()\n if (!cred) {\n emitSuccess({ authenticated: false }, out)\n return\n }\n emitSuccess(\n {\n authenticated: true,\n expires_at: cred.expires_at,\n expiring_soon: isExpiringSoon(cred),\n has_refresh: Boolean(cred.refresh_token),\n user: cred.user ?? null,\n },\n out,\n )\n}\n"],"mappings":";;;;AAKA,eAAsB,IAAI,QAAqB,KAAoB;CACjE,MAAM,OAAO,MAAM,gBAAgB;CACnC,IAAI,CAAC,MAAM;EACT,YAAY,EAAE,eAAe,MAAM,GAAG,GAAG;EACzC;CACF;CACA,YACE;EACE,eAAe;EACf,YAAY,KAAK;EACjB,eAAe,eAAe,IAAI;EAClC,aAAa,QAAQ,KAAK,aAAa;EACvC,MAAM,KAAK,QAAQ;CACrB,GACA,GACF;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as emitSuccess } from "./output-BM7aBFwt.mjs";
|
|
2
|
-
import { n as resolveContext, t as buildApiClient } from "./shared-
|
|
2
|
+
import { n as resolveContext, t as buildApiClient } from "./shared-C2EAn5h_.mjs";
|
|
3
3
|
import { t as resolveCategoryId } from "./resolve-Bw5Po9yK.mjs";
|
|
4
4
|
//#region src/commands/category/update.ts
|
|
5
5
|
async function run(slugOrId, opts, flags, out) {
|
|
@@ -25,4 +25,4 @@ async function run(slugOrId, opts, flags, out) {
|
|
|
25
25
|
//#endregion
|
|
26
26
|
export { run };
|
|
27
27
|
|
|
28
|
-
//# sourceMappingURL=update-
|
|
28
|
+
//# sourceMappingURL=update-CHmckeo8.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-
|
|
1
|
+
{"version":3,"file":"update-CHmckeo8.mjs","names":[],"sources":["../src/commands/category/update.ts"],"sourcesContent":["import { emitSuccess, type OutputOptions } from '../../core/output'\nimport {\n buildApiClient,\n type GlobalFlags,\n resolveContext,\n} from '../internal/shared'\nimport { resolveCategoryId } from './resolve'\n\nexport interface CategoryUpdateFlags {\n name?: string\n slug?: string\n type?: 'category' | 'tag'\n icon?: string\n}\n\nexport async function run(\n slugOrId: string,\n opts: CategoryUpdateFlags,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const body: Record<string, unknown> = {}\n if (opts.name) body.name = opts.name\n if (opts.slug) body.slug = opts.slug\n if (opts.type) body.type = opts.type === 'tag' ? 1 : 0\n if (opts.icon) body.icon = opts.icon\n if (flags.dryRun) {\n emitSuccess({ id: slugOrId, body }, out)\n return\n }\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n const id = await resolveCategoryId(client, slugOrId)\n const res = await client.request(`/categories/${id}`, {\n method: 'PATCH',\n body,\n })\n emitSuccess(res.data, out)\n}\n"],"mappings":";;;;AAeA,eAAsB,IACpB,UACA,MACA,OACA,KACA;CACA,MAAM,OAAgC,CAAC;CACvC,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK;CAChC,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK;CAChC,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK,SAAS,QAAQ,IAAI;CACrD,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK;CAChC,IAAI,MAAM,QAAQ;EAChB,YAAY;GAAE,IAAI;GAAU;EAAK,GAAG,GAAG;EACvC;CACF;CAEA,MAAM,SAAS,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KAAK;CACxC,MAAM,KAAK,MAAM,kBAAkB,QAAQ,QAAQ;CAKnD,aAAY,MAJM,OAAO,QAAQ,eAAe,MAAM;EACpD,QAAQ;EACR;CACF,CAAC,GACe,MAAM,GAAG;AAC3B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { i as emitSuccess, s as MxsError } from "./output-BM7aBFwt.mjs";
|
|
2
2
|
import { r as isSnowflakeId } from "./resolve-BogJOR7R.mjs";
|
|
3
|
-
import { n as resolveContext, t as buildApiClient } from "./shared-
|
|
3
|
+
import { n as resolveContext, t as buildApiClient } from "./shared-C2EAn5h_.mjs";
|
|
4
4
|
//#region src/commands/topic/update.ts
|
|
5
5
|
async function run(slugOrId, opts, flags, out) {
|
|
6
6
|
const body = {};
|
|
@@ -34,4 +34,4 @@ async function resolveId(client, slugOrId) {
|
|
|
34
34
|
//#endregion
|
|
35
35
|
export { run };
|
|
36
36
|
|
|
37
|
-
//# sourceMappingURL=update-
|
|
37
|
+
//# sourceMappingURL=update-CJjwg09n.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-
|
|
1
|
+
{"version":3,"file":"update-CJjwg09n.mjs","names":[],"sources":["../src/commands/topic/update.ts"],"sourcesContent":["import type { ApiClient } from '../../core/api-client'\nimport { MxsError } from '../../core/errors'\nimport { emitSuccess, type OutputOptions } from '../../core/output'\nimport { isSnowflakeId } from '../../core/resolve'\nimport { buildApiClient, type GlobalFlags, resolveContext } from '../internal/shared'\n\nexport interface TopicUpdateFlags {\n name?: string\n slug?: string\n description?: string\n icon?: string\n}\n\nexport async function run(\n slugOrId: string,\n opts: TopicUpdateFlags,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const body: Record<string, unknown> = {}\n if (opts.name) body.name = opts.name\n if (opts.slug) body.slug = opts.slug\n if (opts.description) body.description = opts.description\n if (opts.icon) body.icon = opts.icon\n if (flags.dryRun) {\n emitSuccess({ id: slugOrId, body }, out)\n return\n }\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n const id = await resolveId(client, slugOrId)\n const res = await client.request(`/topics/${id}`, {\n method: 'PATCH',\n body,\n })\n emitSuccess(res.data, out)\n}\n\nasync function resolveId(client: ApiClient, slugOrId: string): Promise<string> {\n if (isSnowflakeId(slugOrId)) return slugOrId\n const res = await client.request<{ id?: string }>(`/topics/slug/${slugOrId}`)\n if (!res.data?.id)\n throw new MxsError({\n code: 'resource.not_found',\n message: `topic not found: ${slugOrId}`,\n })\n return res.data.id\n}\n"],"mappings":";;;;AAaA,eAAsB,IACpB,UACA,MACA,OACA,KACA;CACA,MAAM,OAAgC,CAAC;CACvC,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK;CAChC,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK;CAChC,IAAI,KAAK,aAAa,KAAK,cAAc,KAAK;CAC9C,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK;CAChC,IAAI,MAAM,QAAQ;EAChB,YAAY;GAAE,IAAI;GAAU;EAAK,GAAG,GAAG;EACvC;CACF;CAEA,MAAM,SAAS,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KAAK;CACxC,MAAM,KAAK,MAAM,UAAU,QAAQ,QAAQ;CAK3C,aAAY,MAJM,OAAO,QAAQ,WAAW,MAAM;EAChD,QAAQ;EACR;CACF,CAAC,GACe,MAAM,GAAG;AAC3B;AAEA,eAAe,UAAU,QAAmB,UAAmC;CAC7E,IAAI,cAAc,QAAQ,GAAG,OAAO;CACpC,MAAM,MAAM,MAAM,OAAO,QAAyB,gBAAgB,UAAU;CAC5E,IAAI,CAAC,IAAI,MAAM,IACb,MAAM,IAAI,SAAS;EACjB,MAAM;EACN,SAAS,oBAAoB;CAC/B,CAAC;CACH,OAAO,IAAI,KAAK;AAClB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { i as emitSuccess } from "./output-BM7aBFwt.mjs";
|
|
2
2
|
import { t as buildNotePayload } from "./payload-CN11pUto.mjs";
|
|
3
|
-
import { n as resolveContext, t as buildApiClient } from "./shared-
|
|
3
|
+
import { n as resolveContext, t as buildApiClient } from "./shared-C2EAn5h_.mjs";
|
|
4
4
|
import { r as resolveTopicRefs, t as buildResolver } from "./resolve-helpers-CahPoJ0Y.mjs";
|
|
5
5
|
import { t as resolveNoteId } from "./resolve-CyjMlaoJ.mjs";
|
|
6
6
|
//#region src/commands/note/update.ts
|
|
@@ -27,4 +27,4 @@ async function run(slugOrId, opts, flags, out) {
|
|
|
27
27
|
//#endregion
|
|
28
28
|
export { run };
|
|
29
29
|
|
|
30
|
-
//# sourceMappingURL=update-
|
|
30
|
+
//# sourceMappingURL=update-Duh-iVOZ.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-
|
|
1
|
+
{"version":3,"file":"update-Duh-iVOZ.mjs","names":[],"sources":["../src/commands/note/update.ts"],"sourcesContent":["import { emitSuccess, type OutputOptions } from '../../core/output'\nimport { buildNotePayload, type NoteFlagInputs } from '../../core/payload'\nimport { buildResolver, resolveTopicRefs } from '../internal/resolve-helpers'\nimport {\n buildApiClient,\n type GlobalFlags,\n resolveContext,\n} from '../internal/shared'\nimport { resolveNoteId } from './resolve'\n\nexport async function run(\n slugOrId: string,\n opts: NoteFlagInputs,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const built = await buildNotePayload(opts)\n if (opts.content === undefined && !opts.file) {\n delete built.payload.content\n delete built.payload.text\n delete built.payload.contentFormat\n }\n if (flags.dryRun) {\n emitSuccess(built.payload, out)\n return\n }\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n const resolver = buildResolver(client)\n await resolveTopicRefs(built.payload, resolver)\n const id = await resolveNoteId(client, slugOrId)\n const res = await client.request(`/notes/${id}`, {\n method: 'PATCH',\n body: built.payload,\n })\n emitSuccess(res.data, out)\n}\n"],"mappings":";;;;;;AAUA,eAAsB,IACpB,UACA,MACA,OACA,KACA;CACA,MAAM,QAAQ,MAAM,iBAAiB,IAAI;CACzC,IAAI,KAAK,YAAY,KAAA,KAAa,CAAC,KAAK,MAAM;EAC5C,OAAO,MAAM,QAAQ;EACrB,OAAO,MAAM,QAAQ;EACrB,OAAO,MAAM,QAAQ;CACvB;CACA,IAAI,MAAM,QAAQ;EAChB,YAAY,MAAM,SAAS,GAAG;EAC9B;CACF;CAEA,MAAM,SAAS,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KAAK;CACxC,MAAM,WAAW,cAAc,MAAM;CACrC,MAAM,iBAAiB,MAAM,SAAS,QAAQ;CAC9C,MAAM,KAAK,MAAM,cAAc,QAAQ,QAAQ;CAK/C,aAAY,MAJM,OAAO,QAAQ,UAAU,MAAM;EAC/C,QAAQ;EACR,MAAM,MAAM;CACd,CAAC,GACe,MAAM,GAAG;AAC3B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { i as emitSuccess } from "./output-BM7aBFwt.mjs";
|
|
2
2
|
import { r as buildPostPayload } from "./payload-CN11pUto.mjs";
|
|
3
|
-
import { n as resolveContext, t as buildApiClient } from "./shared-
|
|
3
|
+
import { n as resolveContext, t as buildApiClient } from "./shared-C2EAn5h_.mjs";
|
|
4
4
|
import { n as resolveCategoryRefs, t as buildResolver } from "./resolve-helpers-CahPoJ0Y.mjs";
|
|
5
5
|
import { t as resolvePostId } from "./resolve-Bp1AfBmM.mjs";
|
|
6
6
|
//#region src/commands/post/update.ts
|
|
@@ -27,4 +27,4 @@ async function run(slugOrId, opts, flags, out) {
|
|
|
27
27
|
//#endregion
|
|
28
28
|
export { run };
|
|
29
29
|
|
|
30
|
-
//# sourceMappingURL=update-
|
|
30
|
+
//# sourceMappingURL=update-dc-72pUN.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-
|
|
1
|
+
{"version":3,"file":"update-dc-72pUN.mjs","names":[],"sources":["../src/commands/post/update.ts"],"sourcesContent":["import { emitSuccess, type OutputOptions } from '../../core/output'\nimport { buildPostPayload, type PostFlagInputs } from '../../core/payload'\nimport { buildResolver, resolveCategoryRefs } from '../internal/resolve-helpers'\nimport { buildApiClient, type GlobalFlags, resolveContext } from '../internal/shared'\nimport { resolvePostId } from './resolve'\n\nexport async function run(\n slugOrId: string,\n opts: PostFlagInputs,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const built = await buildPostPayload(opts)\n if (opts.content === undefined && !opts.file) {\n delete built.payload.content\n delete built.payload.text\n delete built.payload.contentFormat\n }\n if (flags.dryRun) {\n emitSuccess(built.payload, out)\n return\n }\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n const resolver = buildResolver(client)\n await resolveCategoryRefs(built.payload, resolver)\n const id = await resolvePostId(client, slugOrId)\n const res = await client.request(`/posts/${id}`, {\n method: 'PATCH',\n body: built.payload,\n })\n emitSuccess(res.data, out)\n}\n"],"mappings":";;;;;;AAMA,eAAsB,IACpB,UACA,MACA,OACA,KACA;CACA,MAAM,QAAQ,MAAM,iBAAiB,IAAI;CACzC,IAAI,KAAK,YAAY,KAAA,KAAa,CAAC,KAAK,MAAM;EAC5C,OAAO,MAAM,QAAQ;EACrB,OAAO,MAAM,QAAQ;EACrB,OAAO,MAAM,QAAQ;CACvB;CACA,IAAI,MAAM,QAAQ;EAChB,YAAY,MAAM,SAAS,GAAG;EAC9B;CACF;CAEA,MAAM,SAAS,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KAAK;CACxC,MAAM,WAAW,cAAc,MAAM;CACrC,MAAM,oBAAoB,MAAM,SAAS,QAAQ;CACjD,MAAM,KAAK,MAAM,cAAc,QAAQ,QAAQ;CAK/C,aAAY,MAJM,OAAO,QAAQ,UAAU,MAAM;EAC/C,QAAQ;EACR,MAAM,MAAM;CACd,CAAC,GACe,MAAM,GAAG;AAC3B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { i as emitSuccess, s as MxsError } from "./output-BM7aBFwt.mjs";
|
|
2
2
|
import { n as buildPagePayload } from "./payload-CN11pUto.mjs";
|
|
3
3
|
import { r as isSnowflakeId } from "./resolve-BogJOR7R.mjs";
|
|
4
|
-
import { n as resolveContext, t as buildApiClient } from "./shared-
|
|
4
|
+
import { n as resolveContext, t as buildApiClient } from "./shared-C2EAn5h_.mjs";
|
|
5
5
|
//#region src/commands/page/update.ts
|
|
6
6
|
async function run(slugOrId, opts, flags, out) {
|
|
7
7
|
const built = await buildPagePayload(opts);
|
|
@@ -33,4 +33,4 @@ async function resolveId(client, slugOrId) {
|
|
|
33
33
|
//#endregion
|
|
34
34
|
export { run };
|
|
35
35
|
|
|
36
|
-
//# sourceMappingURL=update-
|
|
36
|
+
//# sourceMappingURL=update-qfiC-9Og.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-
|
|
1
|
+
{"version":3,"file":"update-qfiC-9Og.mjs","names":[],"sources":["../src/commands/page/update.ts"],"sourcesContent":["import type { ApiClient } from '../../core/api-client'\nimport { MxsError } from '../../core/errors'\nimport { emitSuccess, type OutputOptions } from '../../core/output'\nimport { buildPagePayload, type PageFlagInputs } from '../../core/payload'\nimport { isSnowflakeId } from '../../core/resolve'\nimport { buildApiClient, type GlobalFlags, resolveContext } from '../internal/shared'\n\nexport async function run(\n slugOrId: string,\n opts: PageFlagInputs,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const built = await buildPagePayload(opts)\n if (opts.content === undefined && !opts.file) {\n delete built.payload.content\n delete built.payload.text\n delete built.payload.contentFormat\n }\n if (flags.dryRun) {\n emitSuccess(built.payload, out)\n return\n }\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n const id = await resolveId(client, slugOrId)\n const res = await client.request(`/pages/${id}`, {\n method: 'PATCH',\n body: built.payload,\n })\n emitSuccess(res.data, out)\n}\n\nasync function resolveId(client: ApiClient, slugOrId: string): Promise<string> {\n if (isSnowflakeId(slugOrId)) return slugOrId\n const res = await client.request<{ id: string }>(`/pages/slug/${slugOrId}`)\n if (!res.data?.id)\n throw new MxsError({\n code: 'resource.not_found',\n message: `page not found: ${slugOrId}`,\n })\n return res.data.id\n}\n"],"mappings":";;;;;AAOA,eAAsB,IACpB,UACA,MACA,OACA,KACA;CACA,MAAM,QAAQ,MAAM,iBAAiB,IAAI;CACzC,IAAI,KAAK,YAAY,KAAA,KAAa,CAAC,KAAK,MAAM;EAC5C,OAAO,MAAM,QAAQ;EACrB,OAAO,MAAM,QAAQ;EACrB,OAAO,MAAM,QAAQ;CACvB;CACA,IAAI,MAAM,QAAQ;EAChB,YAAY,MAAM,SAAS,GAAG;EAC9B;CACF;CAEA,MAAM,SAAS,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KAAK;CACxC,MAAM,KAAK,MAAM,UAAU,QAAQ,QAAQ;CAK3C,aAAY,MAJM,OAAO,QAAQ,UAAU,MAAM;EAC/C,QAAQ;EACR,MAAM,MAAM;CACd,CAAC,GACe,MAAM,GAAG;AAC3B;AAEA,eAAe,UAAU,QAAmB,UAAmC;CAC7E,IAAI,cAAc,QAAQ,GAAG,OAAO;CACpC,MAAM,MAAM,MAAM,OAAO,QAAwB,eAAe,UAAU;CAC1E,IAAI,CAAC,IAAI,MAAM,IACb,MAAM,IAAI,SAAS;EACjB,MAAM;EACN,SAAS,mBAAmB;CAC9B,CAAC;CACH,OAAO,IAAI,KAAK;AAClB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { i as emitSuccess, s as MxsError } from "./output-BM7aBFwt.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { n as resolveContext, t as buildApiClient } from "./shared-
|
|
2
|
+
import { s as readCredentials } from "./config-store-WL7dNMS6.mjs";
|
|
3
|
+
import { n as resolveContext, t as buildApiClient } from "./shared-C2EAn5h_.mjs";
|
|
4
4
|
//#region src/commands/auth/whoami.ts
|
|
5
5
|
async function run(flags, out) {
|
|
6
6
|
const ctx = await resolveContext(flags, out);
|
|
@@ -19,4 +19,4 @@ async function run(flags, out) {
|
|
|
19
19
|
//#endregion
|
|
20
20
|
export { run };
|
|
21
21
|
|
|
22
|
-
//# sourceMappingURL=whoami-
|
|
22
|
+
//# sourceMappingURL=whoami-UwcdRchK.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami-
|
|
1
|
+
{"version":3,"file":"whoami-UwcdRchK.mjs","names":[],"sources":["../src/commands/auth/whoami.ts"],"sourcesContent":["import { readCredentials } from '../../core/config-store'\nimport { MxsError } from '../../core/errors'\nimport { emitSuccess, type OutputOptions } from '../../core/output'\nimport { buildApiClient, type GlobalFlags, resolveContext } from '../internal/shared'\n\nexport async function run(flags: GlobalFlags, out: OutputOptions) {\n const ctx = await resolveContext(flags, out)\n const cred = await readCredentials()\n if (!cred && !ctx.token && !ctx.apiKey) {\n throw new MxsError({\n code: 'auth.missing',\n message: 'not authenticated',\n hint: 'run `mxs auth login`',\n })\n }\n const client = buildApiClient(ctx, flags)\n const session =\n ctx.token && !ctx.apiKey\n ? await client.request('/auth/session').then((res) => res.data)\n : null\n emitSuccess(\n {\n user: session ?? cred?.user ?? null,\n api_url: ctx.apiUrl,\n },\n out,\n )\n}\n"],"mappings":";;;;AAKA,eAAsB,IAAI,OAAoB,KAAoB;CAChE,MAAM,MAAM,MAAM,eAAe,OAAO,GAAG;CAC3C,MAAM,OAAO,MAAM,gBAAgB;CACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,IAAI,QAC9B,MAAM,IAAI,SAAS;EACjB,MAAM;EACN,SAAS;EACT,MAAM;CACR,CAAC;CAEH,MAAM,SAAS,eAAe,KAAK,KAAK;CAKxC,YACE;EACE,OALF,IAAI,SAAS,CAAC,IAAI,SACd,MAAM,OAAO,QAAQ,eAAe,EAAE,MAAM,QAAQ,IAAI,IAAI,IAC5D,SAGe,MAAM,QAAQ;EAC/B,SAAS,IAAI;CACf,GACA,GACF;AACF"}
|
package/package.json
CHANGED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { s as MxsError } from "./output-BM7aBFwt.mjs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { promises } from "node:fs";
|
|
4
|
-
import os from "node:os";
|
|
5
|
-
//#region src/core/config-store.ts
|
|
6
|
-
const DEFAULT_CLIENT_ID = "mxs-cli";
|
|
7
|
-
function getConfigDir() {
|
|
8
|
-
const xdg = process.env.XDG_CONFIG_HOME;
|
|
9
|
-
const base = xdg && xdg.length > 0 ? xdg : path.join(os.homedir(), ".config");
|
|
10
|
-
return path.join(base, "mxs");
|
|
11
|
-
}
|
|
12
|
-
function getConfigPath() {
|
|
13
|
-
return path.join(getConfigDir(), "config.json");
|
|
14
|
-
}
|
|
15
|
-
function getCredentialsPath() {
|
|
16
|
-
return path.join(getConfigDir(), "credentials.json");
|
|
17
|
-
}
|
|
18
|
-
async function readJsonIfExists(p) {
|
|
19
|
-
try {
|
|
20
|
-
const raw = await promises.readFile(p, "utf8");
|
|
21
|
-
return JSON.parse(raw);
|
|
22
|
-
} catch (err) {
|
|
23
|
-
if (err?.code === "ENOENT") return null;
|
|
24
|
-
if (err instanceof SyntaxError) throw new MxsError({
|
|
25
|
-
code: "generic",
|
|
26
|
-
message: `failed to parse ${p}: ${err.message}`
|
|
27
|
-
});
|
|
28
|
-
throw err;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
async function readConfig() {
|
|
32
|
-
return await readJsonIfExists(getConfigPath()) ?? {};
|
|
33
|
-
}
|
|
34
|
-
async function writeConfig(cfg) {
|
|
35
|
-
const dir = getConfigDir();
|
|
36
|
-
await promises.mkdir(dir, { recursive: true });
|
|
37
|
-
await promises.writeFile(getConfigPath(), JSON.stringify(cfg, null, 2), { mode: 420 });
|
|
38
|
-
try {
|
|
39
|
-
await promises.chmod(getConfigPath(), 420);
|
|
40
|
-
} catch {}
|
|
41
|
-
}
|
|
42
|
-
async function readCredentials() {
|
|
43
|
-
const p = getCredentialsPath();
|
|
44
|
-
const data = await readJsonIfExists(p);
|
|
45
|
-
if (data) await enforceCredentialsMode(p);
|
|
46
|
-
return data;
|
|
47
|
-
}
|
|
48
|
-
async function writeCredentials(cred) {
|
|
49
|
-
const dir = getConfigDir();
|
|
50
|
-
await promises.mkdir(dir, { recursive: true });
|
|
51
|
-
const p = getCredentialsPath();
|
|
52
|
-
await promises.writeFile(p, JSON.stringify(cred, null, 2), { mode: 384 });
|
|
53
|
-
await promises.chmod(p, 384);
|
|
54
|
-
}
|
|
55
|
-
async function deleteCredentials() {
|
|
56
|
-
const p = getCredentialsPath();
|
|
57
|
-
try {
|
|
58
|
-
await promises.unlink(p);
|
|
59
|
-
} catch (err) {
|
|
60
|
-
if (err?.code !== "ENOENT") throw err;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
async function enforceCredentialsMode(p = getCredentialsPath()) {
|
|
64
|
-
let stats;
|
|
65
|
-
try {
|
|
66
|
-
stats = await promises.stat(p);
|
|
67
|
-
} catch (err) {
|
|
68
|
-
if (err?.code === "ENOENT") return false;
|
|
69
|
-
throw err;
|
|
70
|
-
}
|
|
71
|
-
const mode = stats.mode & 511;
|
|
72
|
-
if (mode !== 384) {
|
|
73
|
-
process.stderr.write(`mxs: credentials file ${p} had mode ${mode.toString(8)}; chmod 600\n`);
|
|
74
|
-
await promises.chmod(p, 384);
|
|
75
|
-
return true;
|
|
76
|
-
}
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
function normalizeApiUrl(input) {
|
|
80
|
-
let url = input.trim();
|
|
81
|
-
if (!url) throw new MxsError({
|
|
82
|
-
code: "config.missing.api_url",
|
|
83
|
-
message: "API URL is empty"
|
|
84
|
-
});
|
|
85
|
-
if (!/^https?:\/\//i.test(url)) url = /^(?:localhost|127\.0\.0\.1|::1)(?::\d+)?$/i.test(url) ? `http://${url}` : `https://${url}`;
|
|
86
|
-
return url.replace(/\/+$/, "");
|
|
87
|
-
}
|
|
88
|
-
async function resolveConfig(overrides = {}) {
|
|
89
|
-
const envApiUrl = process.env.MXS_API_URL?.trim();
|
|
90
|
-
const envToken = process.env.MXS_TOKEN?.trim();
|
|
91
|
-
const envApiKey = process.env.MXS_API_KEY?.trim();
|
|
92
|
-
const file = await readConfig();
|
|
93
|
-
const credentials = await readCredentials();
|
|
94
|
-
const rawApiUrl = overrides.apiUrl || envApiUrl || file.api_url;
|
|
95
|
-
if (!rawApiUrl) throw new MxsError({
|
|
96
|
-
code: "config.missing.api_url",
|
|
97
|
-
message: "API URL is not configured",
|
|
98
|
-
hint: "set MXS_API_URL or pass --api-url <url>, or run `mxs auth login` in an interactive shell"
|
|
99
|
-
});
|
|
100
|
-
const apiUrl = normalizeApiUrl(rawApiUrl);
|
|
101
|
-
const apiVersion = file.api_version ?? 2;
|
|
102
|
-
const apiBase = overrides.apiUrl || envApiUrl ? `${apiUrl}/api/v${apiVersion}` : file.api_base || `${apiUrl}/api/v${apiVersion}`;
|
|
103
|
-
const authBase = overrides.apiUrl || envApiUrl ? `${apiBase}/auth` : file.auth_base || `${apiBase}/auth`;
|
|
104
|
-
const token = overrides.token || envToken || credentials?.access_token;
|
|
105
|
-
const apiKey = overrides.apiKey || envApiKey;
|
|
106
|
-
return {
|
|
107
|
-
apiUrl,
|
|
108
|
-
apiBase,
|
|
109
|
-
authBase,
|
|
110
|
-
apiVersion,
|
|
111
|
-
clientId: file.client_id || DEFAULT_CLIENT_ID,
|
|
112
|
-
token,
|
|
113
|
-
apiKey,
|
|
114
|
-
configPath: getConfigPath(),
|
|
115
|
-
credentialsPath: getCredentialsPath()
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
//#endregion
|
|
119
|
-
export { getCredentialsPath as a, readCredentials as c, writeCredentials as d, getConfigPath as i, resolveConfig as l, enforceCredentialsMode as n, normalizeApiUrl as o, getConfigDir as r, readConfig as s, deleteCredentials as t, writeConfig as u };
|
|
120
|
-
|
|
121
|
-
//# sourceMappingURL=config-store-DIu7x0ao.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-store-DIu7x0ao.mjs","names":["fs"],"sources":["../src/core/config-store.ts"],"sourcesContent":["import { promises as fs } from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport { MxsError } from './errors'\n\nexport interface ConfigShape {\n api_url?: string\n api_base?: string\n auth_base?: string\n api_version?: number\n client_id?: string\n}\n\nexport interface CredentialsShape {\n access_token: string\n refresh_token?: string\n expires_at: number\n user?: {\n id?: string\n email?: string\n name?: string\n }\n}\n\nexport interface ResolvedConfig {\n apiUrl: string\n apiBase: string\n authBase: string\n apiVersion: number\n clientId: string\n token?: string\n apiKey?: string\n configPath: string\n credentialsPath: string\n}\n\nexport interface StoreOverrides {\n apiUrl?: string\n token?: string\n apiKey?: string\n}\n\nconst DEFAULT_CLIENT_ID = 'mxs-cli'\n\nexport function getConfigDir(): string {\n const xdg = process.env.XDG_CONFIG_HOME\n const base = xdg && xdg.length > 0 ? xdg : path.join(os.homedir(), '.config')\n return path.join(base, 'mxs')\n}\n\nexport function getConfigPath(): string {\n return path.join(getConfigDir(), 'config.json')\n}\n\nexport function getCredentialsPath(): string {\n return path.join(getConfigDir(), 'credentials.json')\n}\n\nasync function readJsonIfExists<T>(p: string): Promise<T | null> {\n try {\n const raw = await fs.readFile(p, 'utf8')\n return JSON.parse(raw) as T\n } catch (err: any) {\n if (err?.code === 'ENOENT') return null\n if (err instanceof SyntaxError) {\n throw new MxsError({\n code: 'generic',\n message: `failed to parse ${p}: ${err.message}`,\n })\n }\n throw err\n }\n}\n\nexport async function readConfig(): Promise<ConfigShape> {\n const data = await readJsonIfExists<ConfigShape>(getConfigPath())\n return data ?? {}\n}\n\nexport async function writeConfig(cfg: ConfigShape): Promise<void> {\n const dir = getConfigDir()\n await fs.mkdir(dir, { recursive: true })\n await fs.writeFile(getConfigPath(), JSON.stringify(cfg, null, 2), {\n mode: 0o644,\n })\n try {\n await fs.chmod(getConfigPath(), 0o644)\n } catch {}\n}\n\nexport async function readCredentials(): Promise<CredentialsShape | null> {\n const p = getCredentialsPath()\n const data = await readJsonIfExists<CredentialsShape>(p)\n if (data) {\n await enforceCredentialsMode(p)\n }\n return data\n}\n\nexport async function writeCredentials(cred: CredentialsShape): Promise<void> {\n const dir = getConfigDir()\n await fs.mkdir(dir, { recursive: true })\n const p = getCredentialsPath()\n await fs.writeFile(p, JSON.stringify(cred, null, 2), { mode: 0o600 })\n await fs.chmod(p, 0o600)\n}\n\nexport async function deleteCredentials(): Promise<void> {\n const p = getCredentialsPath()\n try {\n await fs.unlink(p)\n } catch (err: any) {\n if (err?.code !== 'ENOENT') throw err\n }\n}\n\nexport async function enforceCredentialsMode(\n p = getCredentialsPath(),\n): Promise<boolean> {\n let stats\n try {\n stats = await fs.stat(p)\n } catch (err: any) {\n if (err?.code === 'ENOENT') return false\n throw err\n }\n const mode = stats.mode & 0o777\n if (mode !== 0o600) {\n process.stderr.write(\n `mxs: credentials file ${p} had mode ${mode.toString(8)}; chmod 600\\n`,\n )\n await fs.chmod(p, 0o600)\n return true\n }\n return false\n}\n\nexport function normalizeApiUrl(input: string): string {\n let url = input.trim()\n if (!url) {\n throw new MxsError({\n code: 'config.missing.api_url',\n message: 'API URL is empty',\n })\n }\n if (!/^https?:\\/\\//i.test(url)) {\n const isLocal = /^(?:localhost|127\\.0\\.0\\.1|::1)(?::\\d+)?$/i.test(url)\n url = isLocal ? `http://${url}` : `https://${url}`\n }\n return url.replace(/\\/+$/, '')\n}\n\nexport async function resolveConfig(\n overrides: StoreOverrides = {},\n): Promise<ResolvedConfig> {\n const envApiUrl = process.env.MXS_API_URL?.trim()\n const envToken = process.env.MXS_TOKEN?.trim()\n const envApiKey = process.env.MXS_API_KEY?.trim()\n\n const file = await readConfig()\n const credentials = await readCredentials()\n\n const rawApiUrl = overrides.apiUrl || envApiUrl || file.api_url\n if (!rawApiUrl) {\n throw new MxsError({\n code: 'config.missing.api_url',\n message: 'API URL is not configured',\n hint: 'set MXS_API_URL or pass --api-url <url>, or run `mxs auth login` in an interactive shell',\n })\n }\n const apiUrl = normalizeApiUrl(rawApiUrl)\n const apiVersion = file.api_version ?? 2\n const apiBase =\n overrides.apiUrl || envApiUrl\n ? `${apiUrl}/api/v${apiVersion}`\n : file.api_base || `${apiUrl}/api/v${apiVersion}`\n const authBase =\n overrides.apiUrl || envApiUrl\n ? `${apiBase}/auth`\n : file.auth_base || `${apiBase}/auth`\n\n const token = overrides.token || envToken || credentials?.access_token\n const apiKey = overrides.apiKey || envApiKey\n\n return {\n apiUrl,\n apiBase,\n authBase,\n apiVersion,\n clientId: file.client_id || DEFAULT_CLIENT_ID,\n token,\n apiKey,\n configPath: getConfigPath(),\n credentialsPath: getCredentialsPath(),\n }\n}\n"],"mappings":";;;;;AA2CA,MAAM,oBAAoB;AAE1B,SAAgB,eAAuB;CACrC,MAAM,MAAM,QAAQ,IAAI;CACxB,MAAM,OAAO,OAAO,IAAI,SAAS,IAAI,MAAM,KAAK,KAAK,GAAG,QAAQ,GAAG,SAAS;CAC5E,OAAO,KAAK,KAAK,MAAM,KAAK;AAC9B;AAEA,SAAgB,gBAAwB;CACtC,OAAO,KAAK,KAAK,aAAa,GAAG,aAAa;AAChD;AAEA,SAAgB,qBAA6B;CAC3C,OAAO,KAAK,KAAK,aAAa,GAAG,kBAAkB;AACrD;AAEA,eAAe,iBAAoB,GAA8B;CAC/D,IAAI;EACF,MAAM,MAAM,MAAMA,SAAG,SAAS,GAAG,MAAM;EACvC,OAAO,KAAK,MAAM,GAAG;CACvB,SAAS,KAAU;EACjB,IAAI,KAAK,SAAS,UAAU,OAAO;EACnC,IAAI,eAAe,aACjB,MAAM,IAAI,SAAS;GACjB,MAAM;GACN,SAAS,mBAAmB,EAAE,IAAI,IAAI;EACxC,CAAC;EAEH,MAAM;CACR;AACF;AAEA,eAAsB,aAAmC;CAEvD,OAAO,MADY,iBAA8B,cAAc,CAAC,KACjD,CAAC;AAClB;AAEA,eAAsB,YAAY,KAAiC;CACjE,MAAM,MAAM,aAAa;CACzB,MAAMA,SAAG,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;CACvC,MAAMA,SAAG,UAAU,cAAc,GAAG,KAAK,UAAU,KAAK,MAAM,CAAC,GAAG,EAChE,MAAM,IACR,CAAC;CACD,IAAI;EACF,MAAMA,SAAG,MAAM,cAAc,GAAG,GAAK;CACvC,QAAQ,CAAC;AACX;AAEA,eAAsB,kBAAoD;CACxE,MAAM,IAAI,mBAAmB;CAC7B,MAAM,OAAO,MAAM,iBAAmC,CAAC;CACvD,IAAI,MACF,MAAM,uBAAuB,CAAC;CAEhC,OAAO;AACT;AAEA,eAAsB,iBAAiB,MAAuC;CAC5E,MAAM,MAAM,aAAa;CACzB,MAAMA,SAAG,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;CACvC,MAAM,IAAI,mBAAmB;CAC7B,MAAMA,SAAG,UAAU,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC,GAAG,EAAE,MAAM,IAAM,CAAC;CACpE,MAAMA,SAAG,MAAM,GAAG,GAAK;AACzB;AAEA,eAAsB,oBAAmC;CACvD,MAAM,IAAI,mBAAmB;CAC7B,IAAI;EACF,MAAMA,SAAG,OAAO,CAAC;CACnB,SAAS,KAAU;EACjB,IAAI,KAAK,SAAS,UAAU,MAAM;CACpC;AACF;AAEA,eAAsB,uBACpB,IAAI,mBAAmB,GACL;CAClB,IAAI;CACJ,IAAI;EACF,QAAQ,MAAMA,SAAG,KAAK,CAAC;CACzB,SAAS,KAAU;EACjB,IAAI,KAAK,SAAS,UAAU,OAAO;EACnC,MAAM;CACR;CACA,MAAM,OAAO,MAAM,OAAO;CAC1B,IAAI,SAAS,KAAO;EAClB,QAAQ,OAAO,MACb,yBAAyB,EAAE,YAAY,KAAK,SAAS,CAAC,EAAE,cAC1D;EACA,MAAMA,SAAG,MAAM,GAAG,GAAK;EACvB,OAAO;CACT;CACA,OAAO;AACT;AAEA,SAAgB,gBAAgB,OAAuB;CACrD,IAAI,MAAM,MAAM,KAAK;CACrB,IAAI,CAAC,KACH,MAAM,IAAI,SAAS;EACjB,MAAM;EACN,SAAS;CACX,CAAC;CAEH,IAAI,CAAC,gBAAgB,KAAK,GAAG,GAE3B,MADgB,6CAA6C,KAAK,GACtD,IAAI,UAAU,QAAQ,WAAW;CAE/C,OAAO,IAAI,QAAQ,QAAQ,EAAE;AAC/B;AAEA,eAAsB,cACpB,YAA4B,CAAC,GACJ;CACzB,MAAM,YAAY,QAAQ,IAAI,aAAa,KAAK;CAChD,MAAM,WAAW,QAAQ,IAAI,WAAW,KAAK;CAC7C,MAAM,YAAY,QAAQ,IAAI,aAAa,KAAK;CAEhD,MAAM,OAAO,MAAM,WAAW;CAC9B,MAAM,cAAc,MAAM,gBAAgB;CAE1C,MAAM,YAAY,UAAU,UAAU,aAAa,KAAK;CACxD,IAAI,CAAC,WACH,MAAM,IAAI,SAAS;EACjB,MAAM;EACN,SAAS;EACT,MAAM;CACR,CAAC;CAEH,MAAM,SAAS,gBAAgB,SAAS;CACxC,MAAM,aAAa,KAAK,eAAe;CACvC,MAAM,UACJ,UAAU,UAAU,YAChB,GAAG,OAAO,QAAQ,eAClB,KAAK,YAAY,GAAG,OAAO,QAAQ;CACzC,MAAM,WACJ,UAAU,UAAU,YAChB,GAAG,QAAQ,SACX,KAAK,aAAa,GAAG,QAAQ;CAEnC,MAAM,QAAQ,UAAU,SAAS,YAAY,aAAa;CAC1D,MAAM,SAAS,UAAU,UAAU;CAEnC,OAAO;EACL;EACA;EACA;EACA;EACA,UAAU,KAAK,aAAa;EAC5B;EACA;EACA,YAAY,cAAc;EAC1B,iBAAiB,mBAAmB;CACtC;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"document-output-BVB8emLt.mjs","names":[],"sources":["../src/core/document-output.ts"],"sourcesContent":["import { MxsError } from './errors'\nimport { serializeFromLexical, type LexicalState } from './litexml-codec'\nimport { emitSuccess, type OutputOptions } from './output'\n\nexport type DocumentKind = 'post' | 'note' | 'page'\n\nconst DOCUMENT_OUTPUT_MODES = new Set([\n 'pretty-json',\n 'json',\n 'readable',\n 'llm',\n 'envelope',\n])\n\nexport function emitDocument(\n kind: DocumentKind,\n data: unknown,\n opts: OutputOptions,\n): void {\n const mode = opts.output ?? 'pretty-json'\n if (!DOCUMENT_OUTPUT_MODES.has(mode)) {\n throw new MxsError({\n code: 'validation.failed',\n message: `unsupported --output value: ${mode}`,\n hint: 'use --output pretty-json, json, readable, llm, or envelope',\n })\n }\n\n if (opts.json || mode === 'json' || mode === 'pretty-json') {\n emitSuccess(data, opts)\n return\n }\n\n const doc = unwrapDocument(data)\n const rendered =\n mode === 'envelope'\n ? renderDocumentEnvelope(kind, doc)\n : renderReadableDocument(kind, doc)\n process.stdout.write(`${rendered}\\n`)\n}\n\nexport function renderReadableDocument(\n kind: DocumentKind,\n data: unknown,\n): string {\n const doc = asRecord(data)\n const lines: string[] = [kind]\n const fields = collectReadableFields(kind, doc)\n\n for (const [key, value] of fields) {\n if (value === undefined || value === null || value === '') continue\n lines.push(`${key}: ${formatScalar(value)}`)\n }\n\n const summary = firstString(doc, 'summary', 'subtitle')\n if (summary) {\n lines.push('', 'summary:', summary)\n }\n\n const content = renderContent(doc)\n if (content.body) {\n lines.push(\n '',\n `content_format: ${content.format}`,\n '',\n 'content:',\n content.body,\n )\n }\n\n return lines.join('\\n')\n}\n\nexport function renderDocumentEnvelope(\n kind: DocumentKind,\n data: unknown,\n): string {\n const doc = asRecord(data)\n const root = kind === 'note' ? 'mxnote' : 'mxpost'\n const meta = collectEnvelopeMeta(kind, doc)\n const metaLines = meta.map(([key, value]) => renderEnvelopeMeta(key, value))\n const content = renderContent(doc)\n\n return `<${root}>\n <meta>\n${metaLines.join('\\n')}\n </meta>\n <content>\n${content.body}\n </content>\n</${root}>`\n}\n\nfunction collectReadableFields(\n kind: DocumentKind,\n doc: Record<string, unknown>,\n): Array<[string, unknown]> {\n const base: Array<[string, unknown]> = [\n ['id', first(doc, 'id')],\n ['title', first(doc, 'title')],\n ['slug', first(doc, 'slug')],\n ]\n\n if (kind === 'post') {\n base.push(\n ['state', publishState(doc)],\n ['category', relationLabel(first(doc, 'category'))],\n ['tags', first(doc, 'tags')],\n ['pin', first(doc, 'pin')],\n )\n } else if (kind === 'note') {\n base.push(\n ['nid', first(doc, 'nid')],\n ['state', publishState(doc)],\n ['topic', relationLabel(first(doc, 'topic'))],\n ['mood', first(doc, 'mood')],\n ['weather', first(doc, 'weather')],\n ['public_at', first(doc, 'public_at', 'publicAt')],\n ['bookmark', first(doc, 'bookmark')],\n )\n } else {\n base.push(\n ['subtitle', first(doc, 'subtitle')],\n ['order', first(doc, 'order')],\n )\n }\n\n base.push(\n ['created_at', first(doc, 'created_at', 'createdAt')],\n ['modified_at', first(doc, 'modified_at', 'modifiedAt')],\n ['source_lang', first(doc, 'source_lang', 'sourceLang')],\n ['translated', first(doc, 'is_translated', 'isTranslated')],\n )\n\n return base\n}\n\nfunction collectEnvelopeMeta(\n kind: DocumentKind,\n doc: Record<string, unknown>,\n): Array<[string, unknown]> {\n const meta: Array<[string, unknown]> = [\n ['title', first(doc, 'title')],\n ['slug', first(doc, 'slug')],\n ]\n\n if (kind === 'post') {\n meta.push(\n ['category', relationSlugOrLabel(first(doc, 'category'))],\n ['state', publishState(doc) === 'published' ? 'publish' : 'draft'],\n ['summary', first(doc, 'summary')],\n ['tags', first(doc, 'tags')],\n )\n } else if (kind === 'note') {\n meta.push(\n ['topic', relationSlugOrLabel(first(doc, 'topic'))],\n ['state', publishState(doc) === 'published' ? 'publish' : 'draft'],\n ['mood', first(doc, 'mood')],\n ['weather', first(doc, 'weather')],\n ['publicAt', first(doc, 'public_at', 'publicAt')],\n ['bookmark', first(doc, 'bookmark')],\n ['location', first(doc, 'location')],\n )\n } else {\n meta.push(\n ['subtitle', first(doc, 'subtitle')],\n ['order', first(doc, 'order')],\n )\n }\n\n meta.push(['format', contentFormat(doc)])\n return meta.filter(\n ([, value]) => value !== undefined && value !== null && value !== '',\n )\n}\n\nfunction renderContent(doc: Record<string, unknown>): {\n body: string\n format: 'litexml' | 'markdown' | 'text'\n} {\n const format = contentFormat(doc)\n const content = firstString(doc, 'content')\n const text = firstString(doc, 'text')\n\n if (format === 'lexical' && content) {\n try {\n return {\n body: serializeFromLexical(JSON.parse(content) as LexicalState),\n format: 'litexml',\n }\n } catch {\n return { body: text || content, format: text ? 'text' : 'markdown' }\n }\n }\n\n return {\n body: content || text || '',\n format: format === 'markdown' ? 'markdown' : 'text',\n }\n}\n\nfunction unwrapDocument(data: unknown): unknown {\n const obj = asRecord(data)\n const nested = obj.data\n if (nested && typeof nested === 'object' && !Array.isArray(nested))\n return nested\n return data\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {}\n}\n\nfunction first(record: Record<string, unknown>, ...keys: string[]): unknown {\n for (const key of keys) {\n if (record[key] !== undefined && record[key] !== null) return record[key]\n }\n return undefined\n}\n\nfunction firstString(\n record: Record<string, unknown>,\n ...keys: string[]\n): string {\n const value = first(record, ...keys)\n return typeof value === 'string' ? value : ''\n}\n\nfunction contentFormat(doc: Record<string, unknown>): string {\n const value = first(doc, 'content_format', 'contentFormat')\n return typeof value === 'string' ? value : 'markdown'\n}\n\nfunction publishState(doc: Record<string, unknown>): string | undefined {\n const value = first(doc, 'is_published', 'isPublished')\n if (typeof value === 'boolean') return value ? 'published' : 'draft'\n return undefined\n}\n\nfunction relationLabel(value: unknown): string | undefined {\n if (!value) return undefined\n if (typeof value === 'string') return value\n const obj = asRecord(value)\n return (\n firstString(obj, 'name') ||\n firstString(obj, 'slug') ||\n firstString(obj, 'id')\n )\n}\n\nfunction relationSlugOrLabel(value: unknown): string | undefined {\n if (!value) return undefined\n if (typeof value === 'string') return value\n const obj = asRecord(value)\n return (\n firstString(obj, 'slug') ||\n firstString(obj, 'name') ||\n firstString(obj, 'id')\n )\n}\n\nfunction formatScalar(value: unknown): string {\n if (Array.isArray(value)) return value.map(formatScalar).join(', ')\n if (value instanceof Date) return value.toISOString()\n if (typeof value === 'object' && value !== null) return JSON.stringify(value)\n return String(value)\n}\n\nfunction renderEnvelopeMeta(key: string, value: unknown): string {\n if (key === 'tags' && Array.isArray(value)) {\n const tags = value\n .map((item) => ` <tag>${escapeXml(formatScalar(item))}</tag>`)\n .join('\\n')\n return ` <tags>\\n${tags}\\n </tags>`\n }\n\n return ` <${key}>${escapeXml(formatScalar(value))}</${key}>`\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll('&', '&')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n}\n"],"mappings":";;;AAMA,MAAM,wBAAwB,IAAI,IAAI;CACpC;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,SAAgB,aACd,MACA,MACA,MACM;CACN,MAAM,OAAO,KAAK,UAAU;CAC5B,IAAI,CAAC,sBAAsB,IAAI,IAAI,GACjC,MAAM,IAAI,SAAS;EACjB,MAAM;EACN,SAAS,+BAA+B;EACxC,MAAM;CACR,CAAC;CAGH,IAAI,KAAK,QAAQ,SAAS,UAAU,SAAS,eAAe;EAC1D,YAAY,MAAM,IAAI;EACtB;CACF;CAEA,MAAM,MAAM,eAAe,IAAI;CAC/B,MAAM,WACJ,SAAS,aACL,uBAAuB,MAAM,GAAG,IAChC,uBAAuB,MAAM,GAAG;CACtC,QAAQ,OAAO,MAAM,GAAG,SAAS,GAAG;AACtC;AAEA,SAAgB,uBACd,MACA,MACQ;CACR,MAAM,MAAM,SAAS,IAAI;CACzB,MAAM,QAAkB,CAAC,IAAI;CAC7B,MAAM,SAAS,sBAAsB,MAAM,GAAG;CAE9C,KAAK,MAAM,CAAC,KAAK,UAAU,QAAQ;EACjC,IAAI,UAAU,KAAA,KAAa,UAAU,QAAQ,UAAU,IAAI;EAC3D,MAAM,KAAK,GAAG,IAAI,IAAI,aAAa,KAAK,GAAG;CAC7C;CAEA,MAAM,UAAU,YAAY,KAAK,WAAW,UAAU;CACtD,IAAI,SACF,MAAM,KAAK,IAAI,YAAY,OAAO;CAGpC,MAAM,UAAU,cAAc,GAAG;CACjC,IAAI,QAAQ,MACV,MAAM,KACJ,IACA,mBAAmB,QAAQ,UAC3B,IACA,YACA,QAAQ,IACV;CAGF,OAAO,MAAM,KAAK,IAAI;AACxB;AAEA,SAAgB,uBACd,MACA,MACQ;CACR,MAAM,MAAM,SAAS,IAAI;CACzB,MAAM,OAAO,SAAS,SAAS,WAAW;CAE1C,MAAM,YADO,oBAAoB,MAAM,GAClB,EAAE,KAAK,CAAC,KAAK,WAAW,mBAAmB,KAAK,KAAK,CAAC;CAC3E,MAAM,UAAU,cAAc,GAAG;CAEjC,OAAO,IAAI,KAAK;;EAEhB,UAAU,KAAK,IAAI,EAAE;;;EAGrB,QAAQ,KAAK;;IAEX,KAAK;AACT;AAEA,SAAS,sBACP,MACA,KAC0B;CAC1B,MAAM,OAAiC;EACrC,CAAC,MAAM,MAAM,KAAK,IAAI,CAAC;EACvB,CAAC,SAAS,MAAM,KAAK,OAAO,CAAC;EAC7B,CAAC,QAAQ,MAAM,KAAK,MAAM,CAAC;CAC7B;CAEA,IAAI,SAAS,QACX,KAAK,KACH,CAAC,SAAS,aAAa,GAAG,CAAC,GAC3B,CAAC,YAAY,cAAc,MAAM,KAAK,UAAU,CAAC,CAAC,GAClD,CAAC,QAAQ,MAAM,KAAK,MAAM,CAAC,GAC3B,CAAC,OAAO,MAAM,KAAK,KAAK,CAAC,CAC3B;MACK,IAAI,SAAS,QAClB,KAAK,KACH,CAAC,OAAO,MAAM,KAAK,KAAK,CAAC,GACzB,CAAC,SAAS,aAAa,GAAG,CAAC,GAC3B,CAAC,SAAS,cAAc,MAAM,KAAK,OAAO,CAAC,CAAC,GAC5C,CAAC,QAAQ,MAAM,KAAK,MAAM,CAAC,GAC3B,CAAC,WAAW,MAAM,KAAK,SAAS,CAAC,GACjC,CAAC,aAAa,MAAM,KAAK,aAAa,UAAU,CAAC,GACjD,CAAC,YAAY,MAAM,KAAK,UAAU,CAAC,CACrC;MAEA,KAAK,KACH,CAAC,YAAY,MAAM,KAAK,UAAU,CAAC,GACnC,CAAC,SAAS,MAAM,KAAK,OAAO,CAAC,CAC/B;CAGF,KAAK,KACH,CAAC,cAAc,MAAM,KAAK,cAAc,WAAW,CAAC,GACpD,CAAC,eAAe,MAAM,KAAK,eAAe,YAAY,CAAC,GACvD,CAAC,eAAe,MAAM,KAAK,eAAe,YAAY,CAAC,GACvD,CAAC,cAAc,MAAM,KAAK,iBAAiB,cAAc,CAAC,CAC5D;CAEA,OAAO;AACT;AAEA,SAAS,oBACP,MACA,KAC0B;CAC1B,MAAM,OAAiC,CACrC,CAAC,SAAS,MAAM,KAAK,OAAO,CAAC,GAC7B,CAAC,QAAQ,MAAM,KAAK,MAAM,CAAC,CAC7B;CAEA,IAAI,SAAS,QACX,KAAK,KACH,CAAC,YAAY,oBAAoB,MAAM,KAAK,UAAU,CAAC,CAAC,GACxD,CAAC,SAAS,aAAa,GAAG,MAAM,cAAc,YAAY,OAAO,GACjE,CAAC,WAAW,MAAM,KAAK,SAAS,CAAC,GACjC,CAAC,QAAQ,MAAM,KAAK,MAAM,CAAC,CAC7B;MACK,IAAI,SAAS,QAClB,KAAK,KACH,CAAC,SAAS,oBAAoB,MAAM,KAAK,OAAO,CAAC,CAAC,GAClD,CAAC,SAAS,aAAa,GAAG,MAAM,cAAc,YAAY,OAAO,GACjE,CAAC,QAAQ,MAAM,KAAK,MAAM,CAAC,GAC3B,CAAC,WAAW,MAAM,KAAK,SAAS,CAAC,GACjC,CAAC,YAAY,MAAM,KAAK,aAAa,UAAU,CAAC,GAChD,CAAC,YAAY,MAAM,KAAK,UAAU,CAAC,GACnC,CAAC,YAAY,MAAM,KAAK,UAAU,CAAC,CACrC;MAEA,KAAK,KACH,CAAC,YAAY,MAAM,KAAK,UAAU,CAAC,GACnC,CAAC,SAAS,MAAM,KAAK,OAAO,CAAC,CAC/B;CAGF,KAAK,KAAK,CAAC,UAAU,cAAc,GAAG,CAAC,CAAC;CACxC,OAAO,KAAK,QACT,GAAG,WAAW,UAAU,KAAA,KAAa,UAAU,QAAQ,UAAU,EACpE;AACF;AAEA,SAAS,cAAc,KAGrB;CACA,MAAM,SAAS,cAAc,GAAG;CAChC,MAAM,UAAU,YAAY,KAAK,SAAS;CAC1C,MAAM,OAAO,YAAY,KAAK,MAAM;CAEpC,IAAI,WAAW,aAAa,SAC1B,IAAI;EACF,OAAO;GACL,MAAM,qBAAqB,KAAK,MAAM,OAAO,CAAiB;GAC9D,QAAQ;EACV;CACF,QAAQ;EACN,OAAO;GAAE,MAAM,QAAQ;GAAS,QAAQ,OAAO,SAAS;EAAW;CACrE;CAGF,OAAO;EACL,MAAM,WAAW,QAAQ;EACzB,QAAQ,WAAW,aAAa,aAAa;CAC/C;AACF;AAEA,SAAS,eAAe,MAAwB;CAE9C,MAAM,SADM,SAAS,IACJ,EAAE;CACnB,IAAI,UAAU,OAAO,WAAW,YAAY,CAAC,MAAM,QAAQ,MAAM,GAC/D,OAAO;CACT,OAAO;AACT;AAEA,SAAS,SAAS,OAAyC;CACzD,OAAO,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAC5D,QACD,CAAC;AACP;AAEA,SAAS,MAAM,QAAiC,GAAG,MAAyB;CAC1E,KAAK,MAAM,OAAO,MAChB,IAAI,OAAO,SAAS,KAAA,KAAa,OAAO,SAAS,MAAM,OAAO,OAAO;AAGzE;AAEA,SAAS,YACP,QACA,GAAG,MACK;CACR,MAAM,QAAQ,MAAM,QAAQ,GAAG,IAAI;CACnC,OAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,cAAc,KAAsC;CAC3D,MAAM,QAAQ,MAAM,KAAK,kBAAkB,eAAe;CAC1D,OAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,aAAa,KAAkD;CACtE,MAAM,QAAQ,MAAM,KAAK,gBAAgB,aAAa;CACtD,IAAI,OAAO,UAAU,WAAW,OAAO,QAAQ,cAAc;AAE/D;AAEA,SAAS,cAAc,OAAoC;CACzD,IAAI,CAAC,OAAO,OAAO,KAAA;CACnB,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,MAAM,MAAM,SAAS,KAAK;CAC1B,OACE,YAAY,KAAK,MAAM,KACvB,YAAY,KAAK,MAAM,KACvB,YAAY,KAAK,IAAI;AAEzB;AAEA,SAAS,oBAAoB,OAAoC;CAC/D,IAAI,CAAC,OAAO,OAAO,KAAA;CACnB,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,MAAM,MAAM,SAAS,KAAK;CAC1B,OACE,YAAY,KAAK,MAAM,KACvB,YAAY,KAAK,MAAM,KACvB,YAAY,KAAK,IAAI;AAEzB;AAEA,SAAS,aAAa,OAAwB;CAC5C,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM,IAAI,YAAY,EAAE,KAAK,IAAI;CAClE,IAAI,iBAAiB,MAAM,OAAO,MAAM,YAAY;CACpD,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM,OAAO,KAAK,UAAU,KAAK;CAC5E,OAAO,OAAO,KAAK;AACrB;AAEA,SAAS,mBAAmB,KAAa,OAAwB;CAC/D,IAAI,QAAQ,UAAU,MAAM,QAAQ,KAAK,GAIvC,OAAO,eAHM,MACV,KAAK,SAAS,cAAc,UAAU,aAAa,IAAI,CAAC,EAAE,OAAO,EACjE,KAAK,IACiB,EAAE;CAG7B,OAAO,QAAQ,IAAI,GAAG,UAAU,aAAa,KAAK,CAAC,EAAE,IAAI,IAAI;AAC/D;AAEA,SAAS,UAAU,OAAuB;CACxC,OAAO,MACJ,WAAW,KAAK,OAAO,EACvB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,MAAM;AAC3B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-2qjq0wgG.mjs","names":[],"sources":["../src/commands/note/get.ts"],"sourcesContent":["import { type DocumentKind, emitDocument } from '../../core/document-output'\nimport { MxsError } from '../../core/errors'\nimport type { OutputOptions } from '../../core/output'\nimport { isSnowflakeId } from '../../core/resolve'\nimport {\n buildApiClient,\n type GlobalFlags,\n resolveContext,\n} from '../internal/shared'\n\nconst KIND: DocumentKind = 'note'\n\nexport async function run(\n slugOrId: string,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n if (isSnowflakeId(slugOrId)) {\n const res = await client.request(`/notes/${slugOrId}`, {\n query: { prefer: 'lexical' },\n })\n emitDocument(KIND, res.data, out)\n return\n }\n if (/^\\d+$/.test(slugOrId)) {\n const res = await client.request(`/notes/nid/${slugOrId}`, {\n query: { single: '1', prefer: 'lexical' },\n })\n emitDocument(KIND, res.data, out)\n return\n }\n throw new MxsError({\n code: 'validation.failed',\n message: `invalid note reference: ${slugOrId} (use snowflake id or numeric nid)`,\n })\n}\n"],"mappings":";;;;;AAUA,MAAM,OAAqB;AAE3B,eAAsB,IACpB,UACA,OACA,KACA;CAEA,MAAM,SAAS,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KAAK;CACxC,IAAI,cAAc,QAAQ,GAAG;EAI3B,aAAa,OAAM,MAHD,OAAO,QAAQ,UAAU,YAAY,EACrD,OAAO,EAAE,QAAQ,UAAU,EAC7B,CAAC,GACsB,MAAM,GAAG;EAChC;CACF;CACA,IAAI,QAAQ,KAAK,QAAQ,GAAG;EAI1B,aAAa,OAAM,MAHD,OAAO,QAAQ,cAAc,YAAY,EACzD,OAAO;GAAE,QAAQ;GAAK,QAAQ;EAAU,EAC1C,CAAC,GACsB,MAAM,GAAG;EAChC;CACF;CACA,MAAM,IAAI,SAAS;EACjB,MAAM;EACN,SAAS,2BAA2B,SAAS;CAC/C,CAAC;AACH"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-BGAk1Zmv.mjs","names":[],"sources":["../src/commands/page/get.ts"],"sourcesContent":["import { emitDocument, type DocumentKind } from '../../core/document-output'\nimport type { OutputOptions } from '../../core/output'\nimport { isSnowflakeId } from '../../core/resolve'\nimport { buildApiClient, type GlobalFlags, resolveContext } from '../internal/shared'\n\nconst KIND: DocumentKind = 'page'\n\nexport async function run(\n slugOrId: string,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n const path = isSnowflakeId(slugOrId)\n ? `/pages/${slugOrId}`\n : `/pages/slug/${slugOrId}`\n const res = await client.request(path, { query: { prefer: 'lexical' } })\n emitDocument(KIND, res.data, out)\n}\n"],"mappings":";;;;AAKA,MAAM,OAAqB;AAE3B,eAAsB,IACpB,UACA,OACA,KACA;CAEA,MAAM,SAAS,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KAAK;CACxC,MAAM,OAAO,cAAc,QAAQ,IAC/B,UAAU,aACV,eAAe;CAEnB,aAAa,OAAM,MADD,OAAO,QAAQ,MAAM,EAAE,OAAO,EAAE,QAAQ,UAAU,EAAE,CAAC,GAChD,MAAM,GAAG;AAClC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-ClkpDBTL.mjs","names":[],"sources":["../src/commands/topic/get.ts"],"sourcesContent":["import { emitSuccess, type OutputOptions } from '../../core/output'\nimport { isSnowflakeId } from '../../core/resolve'\nimport { buildApiClient, type GlobalFlags, resolveContext } from '../internal/shared'\n\nexport async function run(\n slugOrId: string,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n const path = isSnowflakeId(slugOrId)\n ? `/topics/${slugOrId}`\n : `/topics/slug/${slugOrId}`\n const res = await client.request(path)\n emitSuccess(res.data, out)\n}\n"],"mappings":";;;;AAIA,eAAsB,IACpB,UACA,OACA,KACA;CAEA,MAAM,SAAS,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KAAK;CACxC,MAAM,OAAO,cAAc,QAAQ,IAC/B,WAAW,aACX,gBAAgB;CAEpB,aAAY,MADM,OAAO,QAAQ,IAAI,GACrB,MAAM,GAAG;AAC3B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-DJfUJ3sP.mjs","names":[],"sources":["../src/commands/category/get.ts"],"sourcesContent":["import { emitSuccess, type OutputOptions } from '../../core/output'\nimport { buildApiClient, type GlobalFlags, resolveContext } from '../internal/shared'\n\nexport async function run(\n slugOrId: string,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n const res = await client.request(`/categories/${slugOrId}`)\n emitSuccess(res.data, out)\n}\n"],"mappings":";;;AAGA,eAAsB,IACpB,UACA,OACA,KACA;CAIA,aAAY,MAFG,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KACZ,EAAE,QAAQ,eAAe,UAAU,GAC1C,MAAM,GAAG;AAC3B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-DiqaQvoS.mjs","names":[],"sources":["../src/commands/post/get.ts"],"sourcesContent":["import { emitDocument, type DocumentKind } from '../../core/document-output'\nimport type { OutputOptions } from '../../core/output'\nimport { buildApiClient, type GlobalFlags, resolveContext } from '../internal/shared'\nimport { resolvePostReadPath } from './resolve'\n\nconst KIND: DocumentKind = 'post'\n\nexport async function run(\n slugOrId: string,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n const path = await resolvePostReadPath(client, slugOrId)\n const res = await client.request(path, {\n query: { prefer: 'lexical' },\n })\n emitDocument(KIND, res.data, out)\n}\n"],"mappings":";;;;AAKA,MAAM,OAAqB;AAE3B,eAAsB,IACpB,UACA,OACA,KACA;CAEA,MAAM,SAAS,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KAAK;CACxC,MAAM,OAAO,MAAM,oBAAoB,QAAQ,QAAQ;CAIvD,aAAa,OAAM,MAHD,OAAO,QAAQ,MAAM,EACrC,OAAO,EAAE,QAAQ,UAAU,EAC7B,CAAC,GACsB,MAAM,GAAG;AAClC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-BYzhflDg.mjs","names":[],"sources":["../src/commands/note/list.ts"],"sourcesContent":["import { emitSuccess, type OutputOptions } from '../../core/output'\nimport { buildApiClient, type GlobalFlags, resolveContext } from '../internal/shared'\n\nexport interface NoteListFlags {\n page?: number\n size?: number\n state?: string\n sort?: string\n}\n\nexport async function run(\n opts: NoteListFlags,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n const res = await client.request<{ data: unknown[] }>('/notes', {\n query: {\n page: opts.page,\n size: opts.size,\n sortBy: opts.sort,\n },\n })\n emitSuccess(res.data, out)\n}\n"],"mappings":";;;AAUA,eAAsB,IACpB,MACA,OACA,KACA;CAUA,aAAY,MARG,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KACZ,EAAE,QAA6B,UAAU,EAC9D,OAAO;EACL,MAAM,KAAK;EACX,MAAM,KAAK;EACX,QAAQ,KAAK;CACf,EACF,CAAC,GACe,MAAM,GAAG;AAC3B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-DlQSkbqx.mjs","names":[],"sources":["../src/commands/page/list.ts"],"sourcesContent":["import { emitSuccess, type OutputOptions } from '../../core/output'\nimport { buildApiClient, type GlobalFlags, resolveContext } from '../internal/shared'\n\nexport async function run(\n _opts: unknown,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n const res = await client.request<{ data: unknown[] }>('/pages')\n emitSuccess(res.data, out)\n}\n"],"mappings":";;;AAGA,eAAsB,IACpB,OACA,OACA,KACA;CAIA,aAAY,MAFG,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KACZ,EAAE,QAA6B,QAAQ,GAC9C,MAAM,GAAG;AAC3B"}
|
package/dist/list-DsrA5wIz.mjs
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { i as emitSuccess } from "./output-BM7aBFwt.mjs";
|
|
2
|
-
import { n as resolveContext, t as buildApiClient } from "./shared-D0HVBDHI.mjs";
|
|
3
|
-
//#region src/commands/post/list.ts
|
|
4
|
-
async function run(opts, flags, out) {
|
|
5
|
-
emitSuccess((await buildApiClient(await resolveContext(flags, out), flags).request("/posts", { query: {
|
|
6
|
-
page: opts.page,
|
|
7
|
-
size: opts.size,
|
|
8
|
-
state: opts.state,
|
|
9
|
-
sortBy: opts.sort
|
|
10
|
-
} })).data, out);
|
|
11
|
-
}
|
|
12
|
-
//#endregion
|
|
13
|
-
export { run };
|
|
14
|
-
|
|
15
|
-
//# sourceMappingURL=list-DsrA5wIz.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-DsrA5wIz.mjs","names":[],"sources":["../src/commands/post/list.ts"],"sourcesContent":["import { emitSuccess, type OutputOptions } from '../../core/output'\nimport { buildApiClient, type GlobalFlags, resolveContext } from '../internal/shared'\n\nexport interface PostListFlags {\n page?: number\n size?: number\n state?: string\n sort?: string\n}\n\nexport async function run(\n opts: PostListFlags,\n flags: GlobalFlags,\n out: OutputOptions,\n) {\n const ctx = await resolveContext(flags, out)\n const client = buildApiClient(ctx, flags)\n const res = await client.request<{\n data: unknown[]\n pagination?: unknown\n }>('/posts', {\n query: {\n page: opts.page,\n size: opts.size,\n state: opts.state,\n sortBy: opts.sort,\n },\n })\n emitSuccess(res.data, out)\n}\n"],"mappings":";;;AAUA,eAAsB,IACpB,MACA,OACA,KACA;CAcA,aAAY,MAZG,eAAe,MADZ,eAAe,OAAO,GAAG,GACR,KACZ,EAAE,QAGtB,UAAU,EACX,OAAO;EACL,MAAM,KAAK;EACX,MAAM,KAAK;EACX,OAAO,KAAK;EACZ,QAAQ,KAAK;CACf,EACF,CAAC,GACe,MAAM,GAAG;AAC3B"}
|