padrone 1.3.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +94 -0
- package/README.md +105 -284
- package/dist/{args-DFEI7_G_.mjs → args-D5PNDyNu.mjs} +46 -21
- package/dist/args-D5PNDyNu.mjs.map +1 -0
- package/dist/chunk-CjcI7cDX.mjs +15 -0
- package/dist/codegen/index.d.mts +28 -3
- package/dist/codegen/index.d.mts.map +1 -1
- package/dist/codegen/index.mjs +169 -19
- package/dist/codegen/index.mjs.map +1 -1
- package/dist/command-utils-B1D-HqCd.mjs +1117 -0
- package/dist/command-utils-B1D-HqCd.mjs.map +1 -0
- package/dist/completion.d.mts +1 -1
- package/dist/completion.d.mts.map +1 -1
- package/dist/completion.mjs +77 -29
- package/dist/completion.mjs.map +1 -1
- package/dist/docs/index.d.mts +22 -2
- package/dist/docs/index.d.mts.map +1 -1
- package/dist/docs/index.mjs +94 -7
- package/dist/docs/index.mjs.map +1 -1
- package/dist/errors-BiVrBgi6.mjs +114 -0
- package/dist/errors-BiVrBgi6.mjs.map +1 -0
- package/dist/{formatter-XroimS3Q.d.mts → formatter-DtHzbP22.d.mts} +35 -5
- package/dist/formatter-DtHzbP22.d.mts.map +1 -0
- package/dist/help-bbmu9-qd.mjs +735 -0
- package/dist/help-bbmu9-qd.mjs.map +1 -0
- package/dist/index.d.mts +32 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +495 -267
- package/dist/index.mjs.map +1 -1
- package/dist/mcp-mLWIdUIu.mjs +379 -0
- package/dist/mcp-mLWIdUIu.mjs.map +1 -0
- package/dist/serve-B0u43DK7.mjs +404 -0
- package/dist/serve-B0u43DK7.mjs.map +1 -0
- package/dist/stream-BcC146Ud.mjs +56 -0
- package/dist/stream-BcC146Ud.mjs.map +1 -0
- package/dist/test.d.mts +1 -1
- package/dist/test.mjs +4 -15
- package/dist/test.mjs.map +1 -1
- package/dist/{types-BS7RP5Ls.d.mts → types-Ch8Mk6Qb.d.mts} +311 -63
- package/dist/types-Ch8Mk6Qb.d.mts.map +1 -0
- package/dist/{update-check-EbNDkzyV.mjs → update-check-CFX1FV3v.mjs} +2 -2
- package/dist/{update-check-EbNDkzyV.mjs.map → update-check-CFX1FV3v.mjs.map} +1 -1
- package/dist/zod.d.mts +32 -0
- package/dist/zod.d.mts.map +1 -0
- package/dist/zod.mjs +50 -0
- package/dist/zod.mjs.map +1 -0
- package/package.json +10 -2
- package/src/args.ts +76 -44
- package/src/cli/docs.ts +1 -7
- package/src/cli/doctor.ts +195 -10
- package/src/cli/index.ts +1 -1
- package/src/cli/init.ts +2 -3
- package/src/cli/link.ts +2 -2
- package/src/codegen/discovery.ts +80 -28
- package/src/codegen/index.ts +2 -1
- package/src/codegen/parsers/bash.ts +179 -0
- package/src/codegen/schema-to-code.ts +2 -1
- package/src/colorizer.ts +126 -13
- package/src/command-utils.ts +401 -23
- package/src/completion.ts +120 -47
- package/src/create.ts +483 -130
- package/src/docs/index.ts +122 -8
- package/src/formatter.ts +173 -125
- package/src/help.ts +46 -12
- package/src/index.ts +29 -1
- package/src/interactive.ts +45 -4
- package/src/mcp.ts +390 -0
- package/src/repl-loop.ts +16 -3
- package/src/runtime.ts +195 -2
- package/src/serve.ts +442 -0
- package/src/stream.ts +75 -0
- package/src/test.ts +7 -16
- package/src/type-utils.ts +28 -4
- package/src/types.ts +212 -30
- package/src/wrap.ts +23 -25
- package/src/zod.ts +50 -0
- package/dist/args-DFEI7_G_.mjs.map +0 -1
- package/dist/chunk-y_GBKt04.mjs +0 -5
- package/dist/formatter-XroimS3Q.d.mts.map +0 -1
- package/dist/help-CgGP7hQU.mjs +0 -1229
- package/dist/help-CgGP7hQU.mjs.map +0 -1
- package/dist/types-BS7RP5Ls.d.mts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-Ch8Mk6Qb.d.mts","names":[],"sources":["../src/args.ts","../src/help.ts","../src/mcp.ts","../src/runtime.ts","../src/serve.ts","../src/type-utils.ts","../src/update-check.ts","../src/wrap.ts","../src/types.ts"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { n as __require } from "./chunk-CjcI7cDX.mjs";
|
|
2
2
|
//#region src/update-check.ts
|
|
3
3
|
/**
|
|
4
4
|
* Parses an interval string like '1d', '12h', '30m', '1w' into milliseconds.
|
|
@@ -143,4 +143,4 @@ function noop() {}
|
|
|
143
143
|
//#endregion
|
|
144
144
|
export { createUpdateChecker };
|
|
145
145
|
|
|
146
|
-
//# sourceMappingURL=update-check-
|
|
146
|
+
//# sourceMappingURL=update-check-CFX1FV3v.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-check-EbNDkzyV.mjs","names":[],"sources":["../src/update-check.ts"],"sourcesContent":["import type { ResolvedPadroneRuntime } from './runtime.ts';\n\n/**\n * Configuration for the update check feature.\n */\nexport type UpdateCheckConfig = {\n /**\n * The npm package name to check. Defaults to the program name.\n */\n packageName?: string;\n /**\n * Registry to check for updates.\n * - `'npm'` — checks the npm registry (default)\n * - A URL string — custom registry endpoint that returns JSON with a `version` or `dist-tags.latest` field\n */\n registry?: 'npm' | string;\n /**\n * How often to check for updates. Accepts shorthand like `'1d'`, `'12h'`, `'30m'`.\n * Defaults to `'1d'` (once per day).\n */\n interval?: string;\n /**\n * Path to the cache file for storing the last check timestamp and latest version.\n * Defaults to `~/.config/<programName>-update-check.json`.\n */\n cache?: string;\n /**\n * Environment variable name to disable update checks (e.g. `'MYAPP_NO_UPDATE_CHECK'`).\n * When set to a truthy value, update checks are skipped.\n * Defaults to `'<PROGRAM_NAME>_NO_UPDATE_CHECK'` (uppercased, hyphens to underscores).\n */\n disableEnvVar?: string;\n};\n\ntype CacheData = {\n lastCheck: number;\n latestVersion: string;\n};\n\n/**\n * Parses an interval string like '1d', '12h', '30m', '1w' into milliseconds.\n */\nexport function parseInterval(interval: string): number {\n const match = interval.match(/^(\\d+)\\s*(ms|s|m|h|d|w)$/);\n if (!match) return 86_400_000; // default 1d\n\n const value = parseInt(match[1]!, 10);\n const unit = match[2]!;\n\n switch (unit) {\n case 'ms':\n return value;\n case 's':\n return value * 1000;\n case 'm':\n return value * 60_000;\n case 'h':\n return value * 3_600_000;\n case 'd':\n return value * 86_400_000;\n case 'w':\n return value * 604_800_000;\n default:\n return 86_400_000;\n }\n}\n\n/**\n * Compares two semver version strings.\n * Returns true if `latest` is newer than `current`.\n */\nexport function isNewerVersion(current: string, latest: string): boolean {\n const parse = (v: string) => {\n const cleaned = v.replace(/^v/, '');\n const parts = cleaned.split('-');\n const nums = parts[0]!.split('.').map(Number);\n return { major: nums[0] ?? 0, minor: nums[1] ?? 0, patch: nums[2] ?? 0, prerelease: parts[1] };\n };\n\n const c = parse(current);\n const l = parse(latest);\n\n // Don't notify about pre-release versions unless user is already on a pre-release\n if (l.prerelease && !c.prerelease) return false;\n\n if (l.major !== c.major) return l.major > c.major;\n if (l.minor !== c.minor) return l.minor > c.minor;\n if (l.patch !== c.patch) return l.patch > c.patch;\n return false;\n}\n\n/**\n * Reads the update check cache file.\n */\nfunction readCache(cachePath: string): CacheData | undefined {\n try {\n const { existsSync, readFileSync } = require('node:fs') as typeof import('node:fs');\n if (!existsSync(cachePath)) return undefined;\n const data = JSON.parse(readFileSync(cachePath, 'utf-8'));\n if (typeof data.lastCheck === 'number' && typeof data.latestVersion === 'string') {\n return data as CacheData;\n }\n } catch {\n // Ignore errors\n }\n return undefined;\n}\n\n/**\n * Writes the update check cache file.\n */\nfunction writeCache(cachePath: string, data: CacheData): void {\n try {\n const { existsSync, mkdirSync, writeFileSync } = require('node:fs') as typeof import('node:fs');\n const { dirname } = require('node:path') as typeof import('node:path');\n const dir = dirname(cachePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(cachePath, JSON.stringify(data), 'utf-8');\n } catch {\n // Ignore errors — cache is best-effort\n }\n}\n\n/**\n * Resolves the cache path, expanding `~` to the home directory.\n */\nfunction resolveCachePath(cachePath: string): string {\n const { homedir } = require('node:os') as typeof import('node:os');\n const { resolve } = require('node:path') as typeof import('node:path');\n if (cachePath.startsWith('~')) {\n return cachePath.replace('~', homedir());\n }\n return resolve(cachePath);\n}\n\n/**\n * Fetches the latest version from the registry.\n */\nasync function fetchLatestVersion(packageName: string, registry: string): Promise<string | undefined> {\n const url = registry === 'npm' ? `https://registry.npmjs.org/${encodeURIComponent(packageName)}/latest` : registry;\n\n try {\n const response = await fetch(url);\n if (!response.ok) return undefined;\n const data = (await response.json()) as Record<string, unknown>;\n\n // npm registry returns { version: \"x.y.z\" }\n if (typeof data.version === 'string') return data.version;\n\n // Custom endpoint may return { \"dist-tags\": { latest: \"x.y.z\" } }\n const distTags = data['dist-tags'] as Record<string, string> | undefined;\n if (distTags?.latest) return distTags.latest;\n } catch {\n // Network errors are expected (offline, firewall, etc.)\n }\n return undefined;\n}\n\n/**\n * Formats the update notification message.\n */\nexport function formatUpdateMessage(currentVersion: string, latestVersion: string, packageName: string): string {\n const updateCommand = `npm update -g ${packageName}`;\n return `\\n Update available: ${currentVersion} \\u2192 ${latestVersion}\\n Run \"${updateCommand}\" to update\\n`;\n}\n\n/**\n * Checks for updates in the background. Returns a function that, when called,\n * prints the update notification if a newer version was found.\n *\n * This is designed to be non-blocking: the check starts immediately but the\n * result is only consumed after command execution completes.\n */\nexport function createUpdateChecker(\n programName: string,\n currentVersion: string,\n config: UpdateCheckConfig,\n runtime: ResolvedPadroneRuntime,\n): () => void {\n const packageName = config.packageName ?? programName;\n const registry = config.registry ?? 'npm';\n const intervalMs = parseInterval(config.interval ?? '1d');\n const disableEnvVar = config.disableEnvVar ?? `${programName.toUpperCase().replace(/-/g, '_')}_NO_UPDATE_CHECK`;\n\n const defaultCachePath = `~/.config/${programName}-update-check.json`;\n const cachePath = resolveCachePath(config.cache ?? defaultCachePath);\n\n // Check if disabled\n const env = runtime.env();\n if (env.CI || env.CONTINUOUS_INTEGRATION) return noop;\n if (env[disableEnvVar]) return noop;\n if (typeof process !== 'undefined' && !process.stdout?.isTTY) return noop;\n\n // Check cache — if we checked recently, use cached result\n const cached = readCache(cachePath);\n if (cached && Date.now() - cached.lastCheck < intervalMs) {\n // Use cached version for display\n if (isNewerVersion(currentVersion, cached.latestVersion)) {\n return () => {\n runtime.error(formatUpdateMessage(currentVersion, cached.latestVersion, packageName));\n };\n }\n return noop;\n }\n\n // Start background fetch\n const fetchPromise = fetchLatestVersion(packageName, registry).then((latestVersion) => {\n if (latestVersion) {\n writeCache(cachePath, { lastCheck: Date.now(), latestVersion });\n if (isNewerVersion(currentVersion, latestVersion)) {\n return latestVersion;\n }\n }\n return undefined;\n });\n\n // Return a function that blocks on the result (briefly — the fetch should be done by now)\n let resolved: string | undefined | null = null; // null = not yet resolved\n fetchPromise.then(\n (v) => {\n resolved = v;\n },\n () => {\n resolved = undefined;\n },\n );\n\n return () => {\n // If the fetch already resolved, use the result synchronously\n if (resolved !== null) {\n if (resolved) {\n runtime.error(formatUpdateMessage(currentVersion, resolved, packageName));\n }\n return;\n }\n\n // Otherwise, we can't block — just skip this time.\n // The cache will be written when the promise resolves, so next invocation will show the message.\n };\n}\n\nfunction noop() {}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"update-check-CFX1FV3v.mjs","names":[],"sources":["../src/update-check.ts"],"sourcesContent":["import type { ResolvedPadroneRuntime } from './runtime.ts';\n\n/**\n * Configuration for the update check feature.\n */\nexport type UpdateCheckConfig = {\n /**\n * The npm package name to check. Defaults to the program name.\n */\n packageName?: string;\n /**\n * Registry to check for updates.\n * - `'npm'` — checks the npm registry (default)\n * - A URL string — custom registry endpoint that returns JSON with a `version` or `dist-tags.latest` field\n */\n registry?: 'npm' | string;\n /**\n * How often to check for updates. Accepts shorthand like `'1d'`, `'12h'`, `'30m'`.\n * Defaults to `'1d'` (once per day).\n */\n interval?: string;\n /**\n * Path to the cache file for storing the last check timestamp and latest version.\n * Defaults to `~/.config/<programName>-update-check.json`.\n */\n cache?: string;\n /**\n * Environment variable name to disable update checks (e.g. `'MYAPP_NO_UPDATE_CHECK'`).\n * When set to a truthy value, update checks are skipped.\n * Defaults to `'<PROGRAM_NAME>_NO_UPDATE_CHECK'` (uppercased, hyphens to underscores).\n */\n disableEnvVar?: string;\n};\n\ntype CacheData = {\n lastCheck: number;\n latestVersion: string;\n};\n\n/**\n * Parses an interval string like '1d', '12h', '30m', '1w' into milliseconds.\n */\nexport function parseInterval(interval: string): number {\n const match = interval.match(/^(\\d+)\\s*(ms|s|m|h|d|w)$/);\n if (!match) return 86_400_000; // default 1d\n\n const value = parseInt(match[1]!, 10);\n const unit = match[2]!;\n\n switch (unit) {\n case 'ms':\n return value;\n case 's':\n return value * 1000;\n case 'm':\n return value * 60_000;\n case 'h':\n return value * 3_600_000;\n case 'd':\n return value * 86_400_000;\n case 'w':\n return value * 604_800_000;\n default:\n return 86_400_000;\n }\n}\n\n/**\n * Compares two semver version strings.\n * Returns true if `latest` is newer than `current`.\n */\nexport function isNewerVersion(current: string, latest: string): boolean {\n const parse = (v: string) => {\n const cleaned = v.replace(/^v/, '');\n const parts = cleaned.split('-');\n const nums = parts[0]!.split('.').map(Number);\n return { major: nums[0] ?? 0, minor: nums[1] ?? 0, patch: nums[2] ?? 0, prerelease: parts[1] };\n };\n\n const c = parse(current);\n const l = parse(latest);\n\n // Don't notify about pre-release versions unless user is already on a pre-release\n if (l.prerelease && !c.prerelease) return false;\n\n if (l.major !== c.major) return l.major > c.major;\n if (l.minor !== c.minor) return l.minor > c.minor;\n if (l.patch !== c.patch) return l.patch > c.patch;\n return false;\n}\n\n/**\n * Reads the update check cache file.\n */\nfunction readCache(cachePath: string): CacheData | undefined {\n try {\n const { existsSync, readFileSync } = require('node:fs') as typeof import('node:fs');\n if (!existsSync(cachePath)) return undefined;\n const data = JSON.parse(readFileSync(cachePath, 'utf-8'));\n if (typeof data.lastCheck === 'number' && typeof data.latestVersion === 'string') {\n return data as CacheData;\n }\n } catch {\n // Ignore errors\n }\n return undefined;\n}\n\n/**\n * Writes the update check cache file.\n */\nfunction writeCache(cachePath: string, data: CacheData): void {\n try {\n const { existsSync, mkdirSync, writeFileSync } = require('node:fs') as typeof import('node:fs');\n const { dirname } = require('node:path') as typeof import('node:path');\n const dir = dirname(cachePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(cachePath, JSON.stringify(data), 'utf-8');\n } catch {\n // Ignore errors — cache is best-effort\n }\n}\n\n/**\n * Resolves the cache path, expanding `~` to the home directory.\n */\nfunction resolveCachePath(cachePath: string): string {\n const { homedir } = require('node:os') as typeof import('node:os');\n const { resolve } = require('node:path') as typeof import('node:path');\n if (cachePath.startsWith('~')) {\n return cachePath.replace('~', homedir());\n }\n return resolve(cachePath);\n}\n\n/**\n * Fetches the latest version from the registry.\n */\nasync function fetchLatestVersion(packageName: string, registry: string): Promise<string | undefined> {\n const url = registry === 'npm' ? `https://registry.npmjs.org/${encodeURIComponent(packageName)}/latest` : registry;\n\n try {\n const response = await fetch(url);\n if (!response.ok) return undefined;\n const data = (await response.json()) as Record<string, unknown>;\n\n // npm registry returns { version: \"x.y.z\" }\n if (typeof data.version === 'string') return data.version;\n\n // Custom endpoint may return { \"dist-tags\": { latest: \"x.y.z\" } }\n const distTags = data['dist-tags'] as Record<string, string> | undefined;\n if (distTags?.latest) return distTags.latest;\n } catch {\n // Network errors are expected (offline, firewall, etc.)\n }\n return undefined;\n}\n\n/**\n * Formats the update notification message.\n */\nexport function formatUpdateMessage(currentVersion: string, latestVersion: string, packageName: string): string {\n const updateCommand = `npm update -g ${packageName}`;\n return `\\n Update available: ${currentVersion} \\u2192 ${latestVersion}\\n Run \"${updateCommand}\" to update\\n`;\n}\n\n/**\n * Checks for updates in the background. Returns a function that, when called,\n * prints the update notification if a newer version was found.\n *\n * This is designed to be non-blocking: the check starts immediately but the\n * result is only consumed after command execution completes.\n */\nexport function createUpdateChecker(\n programName: string,\n currentVersion: string,\n config: UpdateCheckConfig,\n runtime: ResolvedPadroneRuntime,\n): () => void {\n const packageName = config.packageName ?? programName;\n const registry = config.registry ?? 'npm';\n const intervalMs = parseInterval(config.interval ?? '1d');\n const disableEnvVar = config.disableEnvVar ?? `${programName.toUpperCase().replace(/-/g, '_')}_NO_UPDATE_CHECK`;\n\n const defaultCachePath = `~/.config/${programName}-update-check.json`;\n const cachePath = resolveCachePath(config.cache ?? defaultCachePath);\n\n // Check if disabled\n const env = runtime.env();\n if (env.CI || env.CONTINUOUS_INTEGRATION) return noop;\n if (env[disableEnvVar]) return noop;\n if (typeof process !== 'undefined' && !process.stdout?.isTTY) return noop;\n\n // Check cache — if we checked recently, use cached result\n const cached = readCache(cachePath);\n if (cached && Date.now() - cached.lastCheck < intervalMs) {\n // Use cached version for display\n if (isNewerVersion(currentVersion, cached.latestVersion)) {\n return () => {\n runtime.error(formatUpdateMessage(currentVersion, cached.latestVersion, packageName));\n };\n }\n return noop;\n }\n\n // Start background fetch\n const fetchPromise = fetchLatestVersion(packageName, registry).then((latestVersion) => {\n if (latestVersion) {\n writeCache(cachePath, { lastCheck: Date.now(), latestVersion });\n if (isNewerVersion(currentVersion, latestVersion)) {\n return latestVersion;\n }\n }\n return undefined;\n });\n\n // Return a function that blocks on the result (briefly — the fetch should be done by now)\n let resolved: string | undefined | null = null; // null = not yet resolved\n fetchPromise.then(\n (v) => {\n resolved = v;\n },\n () => {\n resolved = undefined;\n },\n );\n\n return () => {\n // If the fetch already resolved, use the result synchronously\n if (resolved !== null) {\n if (resolved) {\n runtime.error(formatUpdateMessage(currentVersion, resolved, packageName));\n }\n return;\n }\n\n // Otherwise, we can't block — just skip this time.\n // The cache will be written when the promise resolves, so next invocation will show the message.\n };\n}\n\nfunction noop() {}\n"],"mappings":"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"}
|
package/dist/zod.d.mts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { h as PadroneSchema } from "./types-Ch8Mk6Qb.mjs";
|
|
2
|
+
import * as z from "zod/v4";
|
|
3
|
+
|
|
4
|
+
//#region src/zod.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Creates a Zod schema for an async stream field, ready to use in `.arguments()`.
|
|
7
|
+
* Wraps `z.custom<AsyncIterable<T>>()` with the `asyncStream()` metadata automatically.
|
|
8
|
+
*
|
|
9
|
+
* @param itemSchema - Optional item schema for per-item validation.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { zodAsyncStream } from 'padrone/zod';
|
|
14
|
+
*
|
|
15
|
+
* // String lines
|
|
16
|
+
* z.object({ lines: zodAsyncStream() })
|
|
17
|
+
*
|
|
18
|
+
* // Typed items — each line JSON.parse'd and validated
|
|
19
|
+
* const recordSchema = z.object({ name: z.string(), age: z.number() });
|
|
20
|
+
* z.object({ records: zodAsyncStream(jsonCodec(recordSchema)) })
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
declare function zodAsyncStream<T = string>(itemSchema?: PadroneSchema<unknown, T>): z.ZodCustom<AsyncIterable<T>, AsyncIterable<T>>;
|
|
24
|
+
/**
|
|
25
|
+
* JSON codec for Zod schemas
|
|
26
|
+
* @see https://zod.dev/codecs?id=jsonschema
|
|
27
|
+
* Unlike the example in the docs, this codec also handles the case where the input is already an object
|
|
28
|
+
*/
|
|
29
|
+
declare const jsonCodec: <T extends z.ZodType>(schema: T) => z.ZodCodec<z.ZodUnion<readonly [z.ZodString, z.ZodUnknown]>, T>;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { jsonCodec, zodAsyncStream };
|
|
32
|
+
//# sourceMappingURL=zod.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod.d.mts","names":[],"sources":["../src/zod.ts"],"mappings":";;;;;;AAsBA;;;;;;;;;;;;;;;;iBAAgB,cAAA,YAAA,CAA2B,UAAA,GAAa,aAAA,UAAuB,CAAA,IAAE,CAAA,CAAA,SAAA,CAAA,aAAA,CAAA,CAAA,GAAA,aAAA,CAAA,CAAA;;;;;;cASpE,SAAA,aAAuB,CAAA,CAAE,OAAA,EAAS,MAAA,EAAQ,CAAA,KAAC,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,QAAA,WAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CAAA,UAAA,IAAA,CAAA"}
|
package/dist/zod.mjs
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { t as asyncStream } from "./stream-BcC146Ud.mjs";
|
|
2
|
+
import * as z from "zod/v4";
|
|
3
|
+
//#region src/zod.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a Zod schema for an async stream field, ready to use in `.arguments()`.
|
|
6
|
+
* Wraps `z.custom<AsyncIterable<T>>()` with the `asyncStream()` metadata automatically.
|
|
7
|
+
*
|
|
8
|
+
* @param itemSchema - Optional item schema for per-item validation.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { zodAsyncStream } from 'padrone/zod';
|
|
13
|
+
*
|
|
14
|
+
* // String lines
|
|
15
|
+
* z.object({ lines: zodAsyncStream() })
|
|
16
|
+
*
|
|
17
|
+
* // Typed items — each line JSON.parse'd and validated
|
|
18
|
+
* const recordSchema = z.object({ name: z.string(), age: z.number() });
|
|
19
|
+
* z.object({ records: zodAsyncStream(jsonCodec(recordSchema)) })
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
function zodAsyncStream(itemSchema) {
|
|
23
|
+
return z.custom().meta(asyncStream(itemSchema));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* JSON codec for Zod schemas
|
|
27
|
+
* @see https://zod.dev/codecs?id=jsonschema
|
|
28
|
+
* Unlike the example in the docs, this codec also handles the case where the input is already an object
|
|
29
|
+
*/
|
|
30
|
+
const jsonCodec = (schema) => z.codec(z.union([z.string(), z.unknown()]), schema, {
|
|
31
|
+
decode: (jsonString, ctx) => {
|
|
32
|
+
try {
|
|
33
|
+
if (typeof jsonString !== "string") return jsonString;
|
|
34
|
+
return JSON.parse(jsonString);
|
|
35
|
+
} catch (err) {
|
|
36
|
+
ctx.issues.push({
|
|
37
|
+
code: "invalid_format",
|
|
38
|
+
format: "json",
|
|
39
|
+
input: typeof jsonString === "string" ? jsonString : JSON.stringify(jsonString),
|
|
40
|
+
message: err.message
|
|
41
|
+
});
|
|
42
|
+
return z.NEVER;
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
encode: (value) => JSON.stringify(value)
|
|
46
|
+
});
|
|
47
|
+
//#endregion
|
|
48
|
+
export { jsonCodec, zodAsyncStream };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=zod.mjs.map
|
package/dist/zod.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod.mjs","names":[],"sources":["../src/zod.ts"],"sourcesContent":["import * as z from 'zod/v4';\nimport { asyncStream } from './stream.ts';\nimport type { PadroneSchema } from './types.ts';\n\n/**\n * Creates a Zod schema for an async stream field, ready to use in `.arguments()`.\n * Wraps `z.custom<AsyncIterable<T>>()` with the `asyncStream()` metadata automatically.\n *\n * @param itemSchema - Optional item schema for per-item validation.\n *\n * @example\n * ```ts\n * import { zodAsyncStream } from 'padrone/zod';\n *\n * // String lines\n * z.object({ lines: zodAsyncStream() })\n *\n * // Typed items — each line JSON.parse'd and validated\n * const recordSchema = z.object({ name: z.string(), age: z.number() });\n * z.object({ records: zodAsyncStream(jsonCodec(recordSchema)) })\n * ```\n */\nexport function zodAsyncStream<T = string>(itemSchema?: PadroneSchema<unknown, T>) {\n return z.custom<AsyncIterable<T>>().meta(asyncStream(itemSchema));\n}\n\n/**\n * JSON codec for Zod schemas\n * @see https://zod.dev/codecs?id=jsonschema\n * Unlike the example in the docs, this codec also handles the case where the input is already an object\n */\nexport const jsonCodec = <T extends z.ZodType>(schema: T) =>\n z.codec(z.union([z.string(), z.unknown()]), schema, {\n decode: (jsonString, ctx) => {\n try {\n // HACK: in some cases the object is already deserialized, we just need to validate it\n if (typeof jsonString !== 'string') return jsonString as z.input<T>;\n return JSON.parse(jsonString) as z.input<T>;\n } catch (err: any) {\n ctx.issues.push({\n code: 'invalid_format',\n format: 'json',\n input: typeof jsonString === 'string' ? jsonString : JSON.stringify(jsonString),\n message: err.message,\n });\n return z.NEVER;\n }\n },\n encode: (value) => JSON.stringify(value),\n });\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAsBA,SAAgB,eAA2B,YAAwC;AACjF,QAAO,EAAE,QAA0B,CAAC,KAAK,YAAY,WAAW,CAAC;;;;;;;AAQnE,MAAa,aAAkC,WAC7C,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC,EAAE,QAAQ;CAClD,SAAS,YAAY,QAAQ;AAC3B,MAAI;AAEF,OAAI,OAAO,eAAe,SAAU,QAAO;AAC3C,UAAO,KAAK,MAAM,WAAW;WACtB,KAAU;AACjB,OAAI,OAAO,KAAK;IACd,MAAM;IACN,QAAQ;IACR,OAAO,OAAO,eAAe,WAAW,aAAa,KAAK,UAAU,WAAW;IAC/E,SAAS,IAAI;IACd,CAAC;AACF,UAAO,EAAE;;;CAGb,SAAS,UAAU,KAAK,UAAU,MAAM;CACzC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "padrone",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "Create type-safe, interactive CLI apps with Zod schemas",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -81,6 +81,14 @@
|
|
|
81
81
|
},
|
|
82
82
|
"source": "./src/docs/index.ts"
|
|
83
83
|
},
|
|
84
|
+
"./zod": {
|
|
85
|
+
"padrone@dev": "./src/zod.ts",
|
|
86
|
+
"import": {
|
|
87
|
+
"types": "./dist/zod.d.mts",
|
|
88
|
+
"default": "./dist/zod.mjs"
|
|
89
|
+
},
|
|
90
|
+
"source": "./src/zod.ts"
|
|
91
|
+
},
|
|
84
92
|
"./completion": {
|
|
85
93
|
"padrone@dev": "./src/completion.ts",
|
|
86
94
|
"import": {
|
|
@@ -92,7 +100,7 @@
|
|
|
92
100
|
"./package.json": "./package.json"
|
|
93
101
|
},
|
|
94
102
|
"scripts": {
|
|
95
|
-
"build": "tsdown src/index.ts src/test.ts src/codegen/index.ts src/docs/index.ts src/completion.ts --dts --sourcemap",
|
|
103
|
+
"build": "tsdown src/index.ts src/test.ts src/zod.ts src/codegen/index.ts src/docs/index.ts src/completion.ts --dts --sourcemap",
|
|
96
104
|
"start": "bun --conditions=padrone@dev src/cli/index.ts",
|
|
97
105
|
"dev": "bun --conditions=padrone@dev --watch src/cli/index.ts",
|
|
98
106
|
"test": "bun test --conditions=padrone@dev",
|
package/src/args.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { StandardJSONSchemaV1 } from '@standard-schema/spec';
|
|
1
|
+
import type { StandardJSONSchemaV1, StandardSchemaV1 } from '@standard-schema/spec';
|
|
2
|
+
import { asyncStreamRegistry } from './stream.ts';
|
|
2
3
|
|
|
3
4
|
type Letter =
|
|
4
5
|
| 'a'
|
|
@@ -34,18 +35,20 @@ export type SingleChar = Letter | Uppercase<Letter>;
|
|
|
34
35
|
export interface PadroneFieldMeta {
|
|
35
36
|
description?: string;
|
|
36
37
|
/** Single-character short flags (stackable: `-abc` = `-a -b -c`). Used with single dash. */
|
|
37
|
-
flags?: SingleChar[] | SingleChar;
|
|
38
|
+
flags?: readonly SingleChar[] | SingleChar;
|
|
38
39
|
/** Multi-character alternative long names. Used with double dash (e.g. `--dry-run` for `--dryRun`). */
|
|
39
|
-
alias?: string[] | string;
|
|
40
|
+
alias?: readonly string[] | string;
|
|
40
41
|
deprecated?: boolean | string;
|
|
41
42
|
hidden?: boolean;
|
|
42
|
-
examples?: unknown[];
|
|
43
|
+
examples?: readonly unknown[];
|
|
44
|
+
/** Group name for organizing this option under a labeled section in help output. */
|
|
45
|
+
group?: string;
|
|
43
46
|
}
|
|
44
47
|
|
|
45
48
|
type PositionalArgs<TObj> =
|
|
46
49
|
TObj extends Record<string, any>
|
|
47
50
|
? {
|
|
48
|
-
[K in keyof TObj]: TObj[K] extends Array<any> ? `...${K & string}` : K & string;
|
|
51
|
+
[K in keyof TObj]: NonNullable<TObj[K]> extends Array<any> ? `...${K & string}` | (K & string) : K & string;
|
|
49
52
|
}[keyof TObj]
|
|
50
53
|
: string;
|
|
51
54
|
|
|
@@ -63,19 +66,11 @@ type PositionalArgs<TObj> =
|
|
|
63
66
|
*/
|
|
64
67
|
/**
|
|
65
68
|
* Configuration for reading from stdin and mapping it to an argument field.
|
|
69
|
+
* Simply specify the field name — the read mode is inferred from the schema:
|
|
70
|
+
* - `string` field → reads all stdin as text
|
|
71
|
+
* - `string[]` field → reads stdin line-by-line
|
|
66
72
|
*/
|
|
67
|
-
export type StdinConfig<TObj = Record<string, any>> =
|
|
68
|
-
| (keyof TObj & string)
|
|
69
|
-
| {
|
|
70
|
-
/** The argument field to populate with stdin data. */
|
|
71
|
-
field: keyof TObj & string;
|
|
72
|
-
/**
|
|
73
|
-
* How to consume stdin:
|
|
74
|
-
* - `'text'` (default): read all stdin as a single string.
|
|
75
|
-
* - `'lines'`: read stdin as an array of lines (string[]).
|
|
76
|
-
*/
|
|
77
|
-
as?: 'text' | 'lines';
|
|
78
|
-
};
|
|
73
|
+
export type StdinConfig<TObj = Record<string, any>> = keyof TObj & string;
|
|
79
74
|
|
|
80
75
|
export interface PadroneArgsSchemaMeta<TObj = Record<string, any>> {
|
|
81
76
|
/**
|
|
@@ -83,7 +78,7 @@ export interface PadroneArgsSchemaMeta<TObj = Record<string, any>> {
|
|
|
83
78
|
* Order in array determines position. Use '...name' prefix for variadic args.
|
|
84
79
|
* @example ['source', '...files', 'dest'] - 'files' captures multiple values
|
|
85
80
|
*/
|
|
86
|
-
positional?: PositionalArgs<TObj>[];
|
|
81
|
+
positional?: readonly PositionalArgs<TObj>[];
|
|
87
82
|
/**
|
|
88
83
|
* Per-argument metadata.
|
|
89
84
|
*/
|
|
@@ -108,21 +103,19 @@ export interface PadroneArgsSchemaMeta<TObj = Record<string, any>> {
|
|
|
108
103
|
* Read from stdin and inject the data into the specified argument field.
|
|
109
104
|
* Only reads when stdin is piped (not a TTY) and the field wasn't already provided via CLI flags.
|
|
110
105
|
*
|
|
111
|
-
*
|
|
112
|
-
* - `
|
|
113
|
-
*
|
|
106
|
+
* The read mode is inferred from the schema type of the target field:
|
|
107
|
+
* - `string` field → reads all stdin as a single string
|
|
108
|
+
* - `string[]` field → reads stdin line-by-line into an array
|
|
114
109
|
*
|
|
115
110
|
* Precedence: CLI flags > stdin > env vars > config file > schema defaults.
|
|
116
111
|
*
|
|
117
112
|
* @example
|
|
118
113
|
* ```ts
|
|
119
|
-
* //
|
|
114
|
+
* // Read all stdin as text into 'data' field
|
|
120
115
|
* .arguments(z.object({ data: z.string() }), { stdin: 'data' })
|
|
121
116
|
*
|
|
122
|
-
* //
|
|
123
|
-
* .arguments(z.object({ lines: z.string().array() }), {
|
|
124
|
-
* stdin: { field: 'lines', as: 'lines' },
|
|
125
|
-
* })
|
|
117
|
+
* // Read stdin lines into 'lines' field (inferred from array schema)
|
|
118
|
+
* .arguments(z.object({ lines: z.string().array() }), { stdin: 'lines' })
|
|
126
119
|
* ```
|
|
127
120
|
*/
|
|
128
121
|
stdin?: StdinConfig<TObj>;
|
|
@@ -142,7 +135,7 @@ export interface PadroneArgsSchemaMeta<TObj = Record<string, any>> {
|
|
|
142
135
|
* })
|
|
143
136
|
* ```
|
|
144
137
|
*/
|
|
145
|
-
interactive?: true | (keyof TObj & string)[];
|
|
138
|
+
interactive?: true | readonly (keyof TObj & string)[];
|
|
146
139
|
/**
|
|
147
140
|
* Optional fields offered after required interactive prompts.
|
|
148
141
|
* Users are shown a multi-select to choose which of these fields to configure.
|
|
@@ -157,7 +150,7 @@ export interface PadroneArgsSchemaMeta<TObj = Record<string, any>> {
|
|
|
157
150
|
* })
|
|
158
151
|
* ```
|
|
159
152
|
*/
|
|
160
|
-
optionalInteractive?: true | (keyof TObj & string)[];
|
|
153
|
+
optionalInteractive?: true | readonly (keyof TObj & string)[];
|
|
161
154
|
}
|
|
162
155
|
|
|
163
156
|
/**
|
|
@@ -170,17 +163,50 @@ export function camelToKebab(str: string): string | null {
|
|
|
170
163
|
}
|
|
171
164
|
|
|
172
165
|
/**
|
|
173
|
-
*
|
|
166
|
+
* Returns the stdin field name from the config.
|
|
174
167
|
*/
|
|
175
|
-
export function parseStdinConfig(stdin: StdinConfig):
|
|
176
|
-
|
|
177
|
-
|
|
168
|
+
export function parseStdinConfig(stdin: StdinConfig): string {
|
|
169
|
+
return stdin;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/** Options passed to `jsonSchema.input()` to handle unrepresentable types like `z.custom()`. */
|
|
173
|
+
export const JSON_SCHEMA_OPTS = { target: 'draft-2020-12', libraryOptions: { unrepresentable: 'any' } } as const;
|
|
174
|
+
|
|
175
|
+
function getFieldJsonSchema(schema: StandardJSONSchemaV1 | undefined, field: string): Record<string, any> | undefined {
|
|
176
|
+
if (!schema) return undefined;
|
|
177
|
+
try {
|
|
178
|
+
const jsonSchema = schema['~standard'].jsonSchema.input(JSON_SCHEMA_OPTS) as Record<string, any>;
|
|
179
|
+
if (jsonSchema.type === 'object' && jsonSchema.properties) return jsonSchema.properties[field];
|
|
180
|
+
} catch {}
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Checks if a field in the schema is an array type (e.g. `z.string().array()`).
|
|
186
|
+
*/
|
|
187
|
+
export function isArrayField(schema: StandardJSONSchemaV1 | undefined, field: string): boolean {
|
|
188
|
+
return getFieldJsonSchema(schema, field)?.type === 'array';
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Checks if a field is an async stream (marked with `asyncStream()` metadata).
|
|
193
|
+
* Returns the item schema if provided, or `true` if it's a plain string stream.
|
|
194
|
+
*/
|
|
195
|
+
export function isAsyncStreamField(schema: StandardJSONSchemaV1 | undefined, field: string): { itemSchema?: StandardSchemaV1 } | false {
|
|
196
|
+
const prop = getFieldJsonSchema(schema, field);
|
|
197
|
+
const asyncStreamId = prop?.asyncStream;
|
|
198
|
+
if (asyncStreamId && asyncStreamRegistry.has(asyncStreamId)) {
|
|
199
|
+
const meta = asyncStreamRegistry.get(asyncStreamId);
|
|
200
|
+
return { itemSchema: meta?.itemSchema };
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return false;
|
|
178
204
|
}
|
|
179
205
|
|
|
180
206
|
/**
|
|
181
207
|
* Parse positional configuration to extract names and variadic info.
|
|
182
208
|
*/
|
|
183
|
-
export function parsePositionalConfig(positional: string[]): { name: string; variadic: boolean }[] {
|
|
209
|
+
export function parsePositionalConfig(positional: readonly string[]): { name: string; variadic: boolean }[] {
|
|
184
210
|
return positional.map((p) => {
|
|
185
211
|
const isVariadic = p.startsWith('...');
|
|
186
212
|
const name = isVariadic ? p.slice(3) : p;
|
|
@@ -198,7 +224,7 @@ interface SchemaMetadataResult {
|
|
|
198
224
|
aliases: Record<string, string>;
|
|
199
225
|
}
|
|
200
226
|
|
|
201
|
-
function addEntries(target: Record<string, string>, key: string, items: string | string[], filter?: (item: string) => boolean) {
|
|
227
|
+
function addEntries(target: Record<string, string>, key: string, items: string | readonly string[], filter?: (item: string) => boolean) {
|
|
202
228
|
const list = typeof items === 'string' ? [items] : items;
|
|
203
229
|
for (const item of list) {
|
|
204
230
|
if (typeof item === 'string' && item && item !== key && !(item in target) && (!filter || filter(item))) {
|
|
@@ -236,7 +262,7 @@ export function extractSchemaMetadata(
|
|
|
236
262
|
|
|
237
263
|
// Extract from JSON schema properties
|
|
238
264
|
try {
|
|
239
|
-
const jsonSchema = schema['~standard'].jsonSchema.input(
|
|
265
|
+
const jsonSchema = schema['~standard'].jsonSchema.input(JSON_SCHEMA_OPTS) as Record<string, any>;
|
|
240
266
|
if (jsonSchema.type === 'object' && jsonSchema.properties) {
|
|
241
267
|
for (const [propertyName, propertySchema] of Object.entries(jsonSchema.properties as Record<string, any>)) {
|
|
242
268
|
if (!propertySchema) continue;
|
|
@@ -357,7 +383,7 @@ export function preprocessArgs(data: Record<string, unknown>, ctx: ParseArgsCont
|
|
|
357
383
|
export function coerceArgs(data: Record<string, unknown>, schema: StandardJSONSchemaV1): Record<string, unknown> {
|
|
358
384
|
let properties: Record<string, any>;
|
|
359
385
|
try {
|
|
360
|
-
const jsonSchema = schema['~standard'].jsonSchema.input(
|
|
386
|
+
const jsonSchema = schema['~standard'].jsonSchema.input(JSON_SCHEMA_OPTS) as Record<string, any>;
|
|
361
387
|
if (jsonSchema.type !== 'object' || !jsonSchema.properties) return data;
|
|
362
388
|
properties = jsonSchema.properties;
|
|
363
389
|
} catch {
|
|
@@ -379,13 +405,16 @@ export function coerceArgs(data: Record<string, unknown>, schema: StandardJSONSc
|
|
|
379
405
|
}
|
|
380
406
|
} else if (targetType === 'boolean') {
|
|
381
407
|
if (typeof value === 'string') {
|
|
382
|
-
|
|
383
|
-
|
|
408
|
+
const lower = value.toLowerCase();
|
|
409
|
+
if (lower === 'true' || lower === '1' || lower === 'yes' || lower === 'on') result[key] = true;
|
|
410
|
+
else if (lower === 'false' || lower === '0' || lower === 'no' || lower === 'off') result[key] = false;
|
|
384
411
|
}
|
|
385
|
-
} else if (targetType === 'array'
|
|
412
|
+
} else if (targetType === 'array') {
|
|
413
|
+
// Coerce single items to array
|
|
414
|
+
const arr = Array.isArray(value) ? value : [value];
|
|
386
415
|
const itemType = prop.items?.type as string | undefined;
|
|
387
416
|
if (itemType === 'number' || itemType === 'integer') {
|
|
388
|
-
result[key] =
|
|
417
|
+
result[key] = arr.map((v) => {
|
|
389
418
|
if (typeof v === 'string') {
|
|
390
419
|
const num = Number(v);
|
|
391
420
|
return Number.isNaN(num) ? v : num;
|
|
@@ -393,13 +422,16 @@ export function coerceArgs(data: Record<string, unknown>, schema: StandardJSONSc
|
|
|
393
422
|
return v;
|
|
394
423
|
});
|
|
395
424
|
} else if (itemType === 'boolean') {
|
|
396
|
-
result[key] =
|
|
425
|
+
result[key] = arr.map((v) => {
|
|
397
426
|
if (typeof v === 'string') {
|
|
398
|
-
|
|
399
|
-
if (
|
|
427
|
+
const lower = v.toLowerCase();
|
|
428
|
+
if (lower === 'true' || lower === '1' || lower === 'yes' || lower === 'on') return true;
|
|
429
|
+
if (lower === 'false' || lower === '0' || lower === 'no' || lower === 'off') return false;
|
|
400
430
|
}
|
|
401
431
|
return v;
|
|
402
432
|
});
|
|
433
|
+
} else if (!Array.isArray(value)) {
|
|
434
|
+
result[key] = arr;
|
|
403
435
|
}
|
|
404
436
|
}
|
|
405
437
|
}
|
|
@@ -425,7 +457,7 @@ export function detectUnknownArgs(
|
|
|
425
457
|
let properties: Record<string, any>;
|
|
426
458
|
let isLoose = false;
|
|
427
459
|
try {
|
|
428
|
-
const jsonSchema = schema['~standard'].jsonSchema.input(
|
|
460
|
+
const jsonSchema = schema['~standard'].jsonSchema.input(JSON_SCHEMA_OPTS) as Record<string, any>;
|
|
429
461
|
if (jsonSchema.type !== 'object' || !jsonSchema.properties) return [];
|
|
430
462
|
properties = jsonSchema.properties;
|
|
431
463
|
// If additionalProperties is set (true, {}, or a schema), the schema allows extra keys
|
package/src/cli/docs.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
|
-
import {
|
|
2
|
+
import { isPadroneProgram } from '../command-utils.ts';
|
|
3
3
|
import { type DocsFormat, generateDocs } from '../docs/index.ts';
|
|
4
4
|
import type { PadroneActionContext } from '../types.ts';
|
|
5
5
|
|
|
@@ -78,9 +78,3 @@ function findProgram(mod: Record<string, unknown>): any {
|
|
|
78
78
|
|
|
79
79
|
return null;
|
|
80
80
|
}
|
|
81
|
-
|
|
82
|
-
function isPadroneProgram(value: unknown): boolean {
|
|
83
|
-
if (!value || typeof value !== 'object') return false;
|
|
84
|
-
// A PadroneProgram has the internal command symbol (set by createPadrone)
|
|
85
|
-
return commandSymbol in value;
|
|
86
|
-
}
|