@sebastianwessel/isostate-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/diagnostics.ts","../src/runtime-digest.ts","../src/inspect.ts","../src/static-bundle.ts","../src/commands.ts"],"sourcesContent":["export interface StructuredError extends Error {\n\tcode?: string;\n\tdetails?: Record<string, unknown>;\n}\n\ninterface ValidationIssue {\n\tcode: string;\n\tmessage: string;\n\tlocation?: {\n\t\tfile?: string;\n\t\tline?: number;\n\t\tcolumn?: number;\n\t};\n}\n\nexport function formatValidationError(error: ValidationIssue): string {\n\treturn formatIssue('ERROR', error);\n}\n\nexport function formatValidationWarning(warning: ValidationIssue): string {\n\treturn formatIssue('WARN', warning);\n}\n\nexport function formatThrownError(error: unknown): string {\n\tif (isStructuredError(error) && error.code) {\n\t\treturn `ERROR ${error.code} ${error.message}`;\n\t}\n\n\tif (error instanceof Error) {\n\t\treturn `ERROR CLI_ERROR ${error.message}`;\n\t}\n\n\treturn 'ERROR CLI_ERROR Unknown CLI failure';\n}\n\nfunction formatIssue(level: 'ERROR' | 'WARN', issue: ValidationIssue): string {\n\tconst location = issue.location ? ` ${formatLocation(issue.location)}` : '';\n\treturn `${level} ${issue.code}${location} ${issue.message}`;\n}\n\nfunction formatLocation(location: NonNullable<ValidationIssue['location']>) {\n\tconst parts = [\n\t\tlocation.file,\n\t\tlocation.line === undefined ? undefined : String(location.line),\n\t\tlocation.column === undefined ? undefined : String(location.column)\n\t].filter((part): part is string => part !== undefined && part.length > 0);\n\n\treturn parts.length === 0 ? '' : `(${parts.join(':')})`;\n}\n\nfunction isStructuredError(error: unknown): error is StructuredError {\n\treturn error instanceof Error && 'code' in error;\n}\n","import { createHash } from 'node:crypto';\nimport type { RuntimeBundle } from '@sebastianwessel/isostate/dsl';\n\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue };\n\nexport function runtimeDigest(bundle: RuntimeBundle): string {\n\tconst { _digest, ...bundleWithoutDigest } = bundle;\n\treturn sha256Hex(canonicalStringify(bundleWithoutDigest));\n}\n\nexport function sha256Hex(input: string | Uint8Array): string {\n\treturn createHash('sha256').update(input).digest('hex');\n}\n\nfunction canonicalStringify(value: unknown): string {\n\treturn JSON.stringify(normalizeValue(value));\n}\n\nfunction normalizeValue<T>(value: T): T {\n\tif (Array.isArray(value)) {\n\t\treturn value.map((item) =>\n\t\t\titem === undefined ? null : normalizeValue(item)\n\t\t) as T;\n\t}\n\n\tif (!isPlainObject(value)) return value;\n\n\tconst normalized: Record<string, JsonValue> = {};\n\tfor (const key of Object.keys(value).sort()) {\n\t\tconst child = (value as Record<string, unknown>)[key];\n\t\tif (child !== undefined) {\n\t\t\tnormalized[key] = normalizeValue(child) as JsonValue;\n\t\t}\n\t}\n\n\treturn normalized as T;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { readFile } from 'node:fs/promises';\nimport { extname } from 'node:path';\nimport {\n\tfromJs,\n\tfromJson,\n\ttype RuntimeBundle\n} from '@sebastianwessel/isostate/dsl';\nimport type { CliIo, CliResult } from './commands.js';\nimport { runtimeDigest } from './runtime-digest.js';\n\nexport async function inspectCommand(\n\targs: string[],\n\tio: CliIo\n): Promise<CliResult> {\n\tconst parsed = parseInspectArgs(args);\n\tif (!parsed.ok) {\n\t\tio.stderr.error(parsed.error);\n\t\treturn { exitCode: 1 };\n\t}\n\n\tconst source = await readFile(parsed.input, 'utf8');\n\tconst bundle = parseBundle(parsed.input, source);\n\tvalidateDigest(bundle);\n\n\tconst assetCount = Object.keys(bundle.assets ?? {}).length;\n\tconst floorSize = bundle.floor.size.join('x');\n\tio.stdout.log(`format: ${bundle._format}`);\n\tio.stdout.log(`version: ${bundle._version}`);\n\tio.stdout.log(`scenes: ${bundle.scenes.length}`);\n\tio.stdout.log(`assets: ${assetCount}`);\n\tio.stdout.log(`layers: ${bundle.layers.length}`);\n\tio.stdout.log(`floor: ${floorSize}`);\n\tio.stdout.log(`digest: ${bundle._digest}`);\n\treturn { exitCode: 0 };\n}\n\nfunction parseInspectArgs(\n\targs: string[]\n): { ok: true; input: string } | { ok: false; error: string } {\n\tconst positionals = args.filter((arg) => !arg.startsWith('-'));\n\tconst input = positionals.at(0);\n\tif (!input) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: 'ERROR MISSING_INPUT Expected a runtime bundle file'\n\t\t};\n\t}\n\tif (positionals.length > 1) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: 'ERROR EXTRA_INPUT Expected exactly one runtime bundle file'\n\t\t};\n\t}\n\n\tconst unknown = args.find((arg) => arg.startsWith('-'));\n\tif (unknown) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: `ERROR UNKNOWN_OPTION Unknown option ${unknown}`\n\t\t};\n\t}\n\n\treturn { ok: true, input };\n}\n\nfunction parseBundle(path: string, source: string): RuntimeBundle {\n\tconst extension = extname(path).toLowerCase();\n\tif (extension === '.json') return fromJson(source);\n\tif (extension === '.js') return fromJs(source);\n\n\tconst error = new Error(`Unsupported runtime bundle extension for ${path}`);\n\tObject.defineProperty(error, 'code', {\n\t\tvalue: 'UNSUPPORTED_BUNDLE_FORMAT',\n\t\tenumerable: true\n\t});\n\tthrow error;\n}\n\nfunction validateDigest(bundle: RuntimeBundle): void {\n\tif (bundle._format !== 'isostate-runtime-bundle' || !bundle._version) {\n\t\tconst error = new Error('Invalid runtime bundle identity fields');\n\t\tObject.defineProperty(error, 'code', {\n\t\t\tvalue: 'INVALID_RUNTIME_BUNDLE',\n\t\t\tenumerable: true\n\t\t});\n\t\tthrow error;\n\t}\n\n\tif (runtimeDigest(bundle) !== bundle._digest) {\n\t\tconst error = new Error('Invalid runtime bundle digest');\n\t\tObject.defineProperty(error, 'code', {\n\t\t\tvalue: 'INVALID_RUNTIME_BUNDLE_DIGEST',\n\t\t\tenumerable: true\n\t\t});\n\t\tthrow error;\n\t}\n}\n","import {\n\tcopyFile,\n\tmkdir,\n\treadFile,\n\trename,\n\trm,\n\tstat,\n\twriteFile\n} from 'node:fs/promises';\nimport {\n\tbasename,\n\tdirname,\n\textname,\n\tisAbsolute,\n\tjoin,\n\tresolve,\n\tsep\n} from 'node:path';\nimport {\n\tcompileScene,\n\tparseScene,\n\ttype RuntimeBundle,\n\ttoJs,\n\tvalidateScene\n} from '@sebastianwessel/isostate/dsl';\nimport type { CliIo, CliResult } from './commands.js';\nimport {\n\tformatValidationError,\n\tformatValidationWarning\n} from './diagnostics.js';\nimport { runtimeDigest, sha256Hex } from './runtime-digest.js';\n\ntype RuntimeMode = 'copy' | 'external' | 'none';\ntype SceneDocument = ReturnType<typeof parseScene>;\n\ninterface BundleArgs {\n\tinput: string;\n\tout: string;\n\tassetDir: string;\n\tpublicAssetBase: string;\n\tsceneName: string;\n\truntime: RuntimeMode;\n}\n\ninterface AssetPlan {\n\tid: string;\n\tsource: string;\n\tfile: string;\n\turl: string;\n}\n\ninterface StaticBundleManifest {\n\tformat: 'isostate-static-bundle';\n\tversion: string;\n\tgeneratedAt: string;\n\tsource: { file: string };\n\truntime: { file?: string; mode: RuntimeMode };\n\tscene: { file: string; format: 'js'; digest: string };\n\tassets: Array<{\n\t\tid: string;\n\t\tsource: string;\n\t\tfile: string;\n\t\turl: string;\n\t\tdigest: string;\n\t}>;\n}\n\nconst DEFAULT_PUBLIC_ASSET_BASE = './assets';\nconst DEFAULT_SCENE_NAME = 'scene';\nconst RUNTIME_FILE = 'isostate.runtime.js';\nconst RUNTIME_SOURCE = new URL(\n\t'../../core/dist/browser/isostate.runtime.js',\n\timport.meta.url\n);\nconst PACKAGE_JSON = new URL('../package.json', import.meta.url);\n\nexport async function bundleCommand(\n\targs: string[],\n\tio: CliIo\n): Promise<CliResult> {\n\tconst parsed = parseBundleArgs(args);\n\tif (!parsed.ok) {\n\t\tio.stderr.error(parsed.error);\n\t\treturn { exitCode: 1 };\n\t}\n\n\tconst source = await readFile(parsed.input, 'utf8');\n\tconst document = parseScene(source);\n\tconst report = validateScene(document);\n\tfor (const warning of report.warnings) {\n\t\tio.stderr.error(formatValidationWarning(warning));\n\t}\n\tif (!report.isValid) {\n\t\tfor (const error of report.errors) {\n\t\t\tio.stderr.error(formatValidationError(error));\n\t\t}\n\t\treturn { exitCode: 1 };\n\t}\n\n\tconst bundle = compileScene(document);\n\tconst assetPlan = await planAssets(document, bundle, parsed);\n\tconst rewrittenBundle = rewriteAssetUrls(bundle, assetPlan);\n\tconst manifest = await createManifest(parsed, rewrittenBundle, assetPlan);\n\n\tawait writeBundleDirectory(parsed, rewrittenBundle, assetPlan, manifest);\n\tio.stdout.log(`BUNDLED ${parsed.out}`);\n\treturn { exitCode: 0 };\n}\n\nfunction parseBundleArgs(\n\targs: string[]\n): ({ ok: true } & BundleArgs) | { ok: false; error: string } {\n\tconst inputs = positionalArgs(\n\t\targs,\n\t\tnew Set([\n\t\t\t'--out',\n\t\t\t'--asset-dir',\n\t\t\t'--public-asset-base',\n\t\t\t'--scene-name',\n\t\t\t'--runtime'\n\t\t])\n\t);\n\tconst firstInput = inputs.at(0);\n\tif (!firstInput) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: 'ERROR MISSING_INPUT Expected an input .isostate.yaml file'\n\t\t};\n\t}\n\tif (inputs.length > 1) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: 'ERROR EXTRA_INPUT Expected exactly one input .isostate.yaml file'\n\t\t};\n\t}\n\n\tconst parsed: BundleArgs = {\n\t\tinput: firstInput,\n\t\tout: '',\n\t\tassetDir: dirname(firstInput),\n\t\tpublicAssetBase: DEFAULT_PUBLIC_ASSET_BASE,\n\t\tsceneName: DEFAULT_SCENE_NAME,\n\t\truntime: 'copy'\n\t};\n\n\tfor (let index = 0; index < args.length; index += 1) {\n\t\tconst arg = args[index];\n\t\tif (!arg.startsWith('-')) continue;\n\t\tconst value = args[index + 1];\n\t\tif (!value || value.startsWith('-')) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: `ERROR MISSING_OPTION ${arg} requires a value`\n\t\t\t};\n\t\t}\n\t\tif (!applyBundleOption(parsed, arg, value)) {\n\t\t\treturn { ok: false, error: `ERROR UNKNOWN_OPTION Unknown option ${arg}` };\n\t\t}\n\t\tindex += 1;\n\t}\n\n\tif (!parsed.out) {\n\t\treturn { ok: false, error: 'ERROR MISSING_OPTION --out requires a path' };\n\t}\n\n\treturn { ok: true, ...parsed };\n}\n\nfunction applyBundleOption(\n\targs: BundleArgs,\n\toption: string,\n\tvalue: string\n): boolean {\n\tswitch (option) {\n\t\tcase '--out':\n\t\t\targs.out = value;\n\t\t\treturn true;\n\t\tcase '--asset-dir':\n\t\t\targs.assetDir = value;\n\t\t\treturn true;\n\t\tcase '--public-asset-base':\n\t\t\targs.publicAssetBase = value;\n\t\t\treturn true;\n\t\tcase '--scene-name':\n\t\t\targs.sceneName = value;\n\t\t\treturn true;\n\t\tcase '--runtime':\n\t\t\tif (value !== 'copy' && value !== 'external' && value !== 'none') {\n\t\t\t\tthrow codedError(\n\t\t\t\t\t'UNSUPPORTED_RUNTIME_MODE',\n\t\t\t\t\t`Unsupported runtime mode \"${value}\"`\n\t\t\t\t);\n\t\t\t}\n\t\t\targs.runtime = value;\n\t\t\treturn true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nasync function planAssets(\n\tdocument: SceneDocument,\n\tbundle: RuntimeBundle,\n\targs: BundleArgs\n): Promise<AssetPlan[]> {\n\tconst assetIds = Object.keys(bundle.assets ?? {}).sort();\n\tconst usedFiles = new Set<string>();\n\tconst plans: AssetPlan[] = [];\n\n\tfor (const id of assetIds) {\n\t\tconst source = resolveAssetSource(document, id, args.assetDir);\n\t\tawait assertSvgFile(id, source);\n\t\tconst file = uniqueAssetFile(id, basename(source), usedFiles);\n\t\tplans.push({\n\t\t\tid,\n\t\t\tsource,\n\t\t\tfile,\n\t\t\turl: publicAssetUrl(args.publicAssetBase, file)\n\t\t});\n\t}\n\n\treturn plans;\n}\n\nfunction resolveAssetSource(\n\tdocument: SceneDocument,\n\tid: string,\n\tassetDir: string\n): string {\n\tconst entry = document.header.assets.find((asset) => asset.id === id);\n\tif (!entry) {\n\t\tthrow codedError('ASSET_SOURCE_MISSING', `Asset \"${id}\" is not declared`);\n\t}\n\n\tconst rawPath = entry.path ?? entry.id;\n\tconst withExtension = extname(rawPath) ? rawPath : `${rawPath}.svg`;\n\treturn isAbsolute(withExtension)\n\t\t? withExtension\n\t\t: resolve(assetDir, withExtension);\n}\n\nasync function assertSvgFile(id: string, source: string): Promise<void> {\n\tif (extname(source).toLowerCase() !== '.svg') {\n\t\tthrow codedError(\n\t\t\t'ASSET_NOT_SVG',\n\t\t\t`Asset \"${id}\" must resolve to an SVG file: ${source}`\n\t\t);\n\t}\n\n\ttry {\n\t\tconst stats = await stat(source);\n\t\tif (stats.isFile()) return;\n\t} catch {\n\t\tthrow codedError(\n\t\t\t'ASSET_RESOLUTION_FAILED',\n\t\t\t`Unable to resolve asset \"${id}\" at ${source}`\n\t\t);\n\t}\n\n\tthrow codedError('ASSET_NOT_FILE', `Asset \"${id}\" is not a file: ${source}`);\n}\n\nfunction uniqueAssetFile(\n\tid: string,\n\tsourceBasename: string,\n\tusedFiles: Set<string>\n): string {\n\tif (!usedFiles.has(sourceBasename)) {\n\t\tusedFiles.add(sourceBasename);\n\t\treturn sourceBasename;\n\t}\n\n\tconst candidate = `${id}-${sourceBasename}`;\n\tusedFiles.add(candidate);\n\treturn candidate;\n}\n\nfunction rewriteAssetUrls(\n\tbundle: RuntimeBundle,\n\tassetPlan: AssetPlan[]\n): RuntimeBundle {\n\tif (assetPlan.length === 0) return bundle;\n\n\tconst assets = { ...(bundle.assets ?? {}) };\n\tfor (const asset of assetPlan) {\n\t\tassets[asset.id] = { ...assets[asset.id], url: asset.url };\n\t}\n\n\tconst rewritten: RuntimeBundle = { ...bundle, assets };\n\treturn { ...rewritten, _digest: runtimeDigest(rewritten) };\n}\n\nasync function createManifest(\n\targs: BundleArgs,\n\tbundle: RuntimeBundle,\n\tassetPlan: AssetPlan[]\n): Promise<StaticBundleManifest> {\n\tconst assets = [];\n\tfor (const asset of assetPlan) {\n\t\tconst bytes = await readFile(asset.source);\n\t\tassets.push({\n\t\t\tid: asset.id,\n\t\t\tsource: slashPath(asset.source),\n\t\t\tfile: slashPath(join('assets', asset.file)),\n\t\t\turl: asset.url,\n\t\t\tdigest: sha256Hex(bytes)\n\t\t});\n\t}\n\n\tconst runtime =\n\t\targs.runtime === 'copy'\n\t\t\t? { mode: args.runtime, file: RUNTIME_FILE }\n\t\t\t: { mode: args.runtime };\n\n\treturn {\n\t\tformat: 'isostate-static-bundle',\n\t\tversion: await packageVersion(),\n\t\tgeneratedAt: new Date().toISOString(),\n\t\tsource: { file: slashPath(args.input) },\n\t\truntime,\n\t\tscene: {\n\t\t\tfile: `${args.sceneName}.isostate.js`,\n\t\t\tformat: 'js',\n\t\t\tdigest: bundle._digest\n\t\t},\n\t\tassets\n\t};\n}\n\nasync function writeBundleDirectory(\n\targs: BundleArgs,\n\tbundle: RuntimeBundle,\n\tassetPlan: AssetPlan[],\n\tmanifest: StaticBundleManifest\n): Promise<void> {\n\tconst out = resolve(args.out);\n\tconst temporary = `${out}.tmp-${process.pid}-${Date.now()}`;\n\tconst backup = `${out}.bak-${process.pid}-${Date.now()}`;\n\n\ttry {\n\t\tawait rm(temporary, { recursive: true, force: true });\n\t\tawait rm(backup, { recursive: true, force: true });\n\t\tawait mkdir(join(temporary, 'assets'), { recursive: true });\n\t\tawait writeFile(\n\t\t\tjoin(temporary, `${args.sceneName}.isostate.js`),\n\t\t\ttoJs(bundle),\n\t\t\t'utf8'\n\t\t);\n\t\tawait writeRuntimeArtifact(args.runtime, temporary);\n\t\tawait copyAssets(assetPlan, temporary);\n\t\tawait writeFile(\n\t\t\tjoin(temporary, 'manifest.json'),\n\t\t\t`${JSON.stringify(manifest, null, 2)}\\n`,\n\t\t\t'utf8'\n\t\t);\n\t\tlet hasExistingOutput = false;\n\t\ttry {\n\t\t\tawait rename(out, backup);\n\t\t\thasExistingOutput = true;\n\t\t} catch (error) {\n\t\t\tif (!isMissingPathError(error)) throw error;\n\t\t}\n\n\t\ttry {\n\t\t\tawait rename(temporary, out);\n\t\t} catch (error) {\n\t\t\tif (hasExistingOutput) {\n\t\t\t\tawait rename(backup, out);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (hasExistingOutput) {\n\t\t\tawait rm(backup, { recursive: true, force: true });\n\t\t}\n\t} catch (error) {\n\t\tawait rm(temporary, { recursive: true, force: true });\n\t\tawait rm(backup, { recursive: true, force: true });\n\t\tthrow error;\n\t}\n}\n\nasync function writeRuntimeArtifact(\n\tmode: RuntimeMode,\n\toutDir: string\n): Promise<void> {\n\tif (mode !== 'copy') return;\n\tawait copyFile(RUNTIME_SOURCE, join(outDir, RUNTIME_FILE));\n}\n\nasync function copyAssets(\n\tassetPlan: AssetPlan[],\n\toutDir: string\n): Promise<void> {\n\tfor (const asset of assetPlan) {\n\t\tawait copyFile(asset.source, join(outDir, 'assets', asset.file));\n\t}\n}\n\nasync function packageVersion(): Promise<string> {\n\tconst json = JSON.parse(await readFile(PACKAGE_JSON, 'utf8')) as {\n\t\tversion?: unknown;\n\t};\n\treturn typeof json.version === 'string' ? json.version : '0.0.0';\n}\n\nfunction positionalArgs(\n\targs: string[],\n\toptionsWithValues: Set<string>\n): string[] {\n\tconst positionals: string[] = [];\n\tfor (let index = 0; index < args.length; index += 1) {\n\t\tconst arg = args[index];\n\t\tif (arg === undefined) continue;\n\t\tif (optionsWithValues.has(arg)) {\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (!arg.startsWith('-')) {\n\t\t\tpositionals.push(arg);\n\t\t}\n\t}\n\treturn positionals;\n}\n\nfunction publicAssetUrl(base: string, file: string): string {\n\tconst trimmed = base.replace(/\\/+$/, '');\n\treturn trimmed ? `${trimmed}/${file}` : file;\n}\n\nfunction slashPath(path: string): string {\n\treturn path.split(sep).join('/');\n}\n\nfunction codedError(code: string, message: string): Error {\n\tconst error = new Error(message);\n\tObject.defineProperty(error, 'code', { value: code, enumerable: true });\n\treturn error;\n}\n\nfunction isMissingPathError(error: unknown): boolean {\n\treturn (\n\t\terror instanceof Error &&\n\t\t'code' in error &&\n\t\t(error as NodeJS.ErrnoException).code === 'ENOENT'\n\t);\n}\n","import { mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises';\nimport { dirname, extname, resolve } from 'node:path';\nimport {\n\tcompileScene,\n\tparseScene,\n\ttoJs,\n\ttoJson,\n\tvalidateScene\n} from '@sebastianwessel/isostate/dsl';\nimport {\n\tformatThrownError,\n\tformatValidationError,\n\tformatValidationWarning\n} from './diagnostics.js';\nimport { inspectCommand } from './inspect.js';\nimport { bundleCommand } from './static-bundle.js';\n\nexport interface CliIo {\n\tstdout: Pick<typeof console, 'log'>;\n\tstderr: Pick<typeof console, 'error'>;\n}\n\nexport interface CliResult {\n\texitCode: number;\n}\n\ntype BundleFormat = 'js' | 'json';\n\nconst DEFAULT_OUT = 'build/scene.isostate.js';\n\nexport async function runCli(\n\targs: string[],\n\tio: CliIo = { stdout: console, stderr: console }\n): Promise<CliResult> {\n\tconst [command, ...rest] = args;\n\n\ttry {\n\t\tswitch (command) {\n\t\t\tcase 'validate':\n\t\t\t\treturn await validateCommand(rest, io);\n\t\t\tcase 'compile':\n\t\t\t\treturn await compileCommand(rest, io);\n\t\t\tcase 'bundle':\n\t\t\t\treturn await bundleCommand(rest, io);\n\t\t\tcase 'inspect':\n\t\t\t\treturn await inspectCommand(rest, io);\n\t\t\tcase undefined:\n\t\t\t\tio.stderr.error('ERROR MISSING_COMMAND Expected a command');\n\t\t\t\treturn { exitCode: 1 };\n\t\t\tdefault:\n\t\t\t\tio.stderr.error(`ERROR UNKNOWN_COMMAND Unknown command \"${command}\"`);\n\t\t\t\treturn { exitCode: 1 };\n\t\t}\n\t} catch (error) {\n\t\tio.stderr.error(formatThrownError(error));\n\t\treturn { exitCode: 1 };\n\t}\n}\n\nasync function validateCommand(args: string[], io: CliIo): Promise<CliResult> {\n\tconst parsed = parseInputArgs(args);\n\tif (!parsed.ok) {\n\t\tio.stderr.error(parsed.error);\n\t\treturn { exitCode: 1 };\n\t}\n\n\tconst source = await readInput(parsed.input);\n\tconst document = parseScene(source);\n\tconst report = validateScene(document);\n\n\tfor (const warning of report.warnings) {\n\t\tio.stderr.error(formatValidationWarning(warning));\n\t}\n\n\tif (!report.isValid) {\n\t\tfor (const error of report.errors) {\n\t\t\tio.stderr.error(formatValidationError(error));\n\t\t}\n\t\treturn { exitCode: 1 };\n\t}\n\n\tio.stdout.log(\n\t\t`OK ${parsed.input} (${report.errors.length} errors, ${report.warnings.length} warnings)`\n\t);\n\treturn { exitCode: 0 };\n}\n\nasync function compileCommand(args: string[], io: CliIo): Promise<CliResult> {\n\tconst parsed = parseCompileArgs(args);\n\tif (!parsed.ok) {\n\t\tio.stderr.error(parsed.error);\n\t\treturn { exitCode: 1 };\n\t}\n\n\tconst source = await readInput(parsed.input);\n\tconst document = parseScene(source);\n\tconst report = validateScene(document);\n\n\tfor (const warning of report.warnings) {\n\t\tio.stderr.error(formatValidationWarning(warning));\n\t}\n\n\tif (!report.isValid) {\n\t\tfor (const error of report.errors) {\n\t\t\tio.stderr.error(formatValidationError(error));\n\t\t}\n\t\treturn { exitCode: 1 };\n\t}\n\n\tconst bundle = compileScene(document);\n\tconst output =\n\t\tparsed.format === 'js'\n\t\t\t? toJs(bundle, { minify: !parsed.pretty })\n\t\t\t: toJson(bundle);\n\n\tawait writeAtomic(parsed.out, output);\n\tio.stdout.log(`WROTE ${parsed.out}`);\n\treturn { exitCode: 0 };\n}\n\nfunction parseInputArgs(\n\targs: string[]\n): { ok: true; input: string } | { ok: false; error: string } {\n\tconst unknown = args.find((arg) => arg.startsWith('-'));\n\tif (unknown) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: `ERROR UNKNOWN_OPTION Unknown option ${unknown}`\n\t\t};\n\t}\n\n\tconst positionals = positionalArgs(args, new Set());\n\tconst input = positionals.at(0);\n\tif (!input) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: 'ERROR MISSING_INPUT Expected an input .isostate.yaml file'\n\t\t};\n\t}\n\tif (positionals.length > 1) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: 'ERROR EXTRA_INPUT Expected exactly one input .isostate.yaml file'\n\t\t};\n\t}\n\n\treturn { ok: true, input };\n}\n\nfunction parseCompileArgs(args: string[]):\n\t| {\n\t\t\tok: true;\n\t\t\tinput: string;\n\t\t\tout: string;\n\t\t\tformat: BundleFormat;\n\t\t\tpretty: boolean;\n\t }\n\t| { ok: false; error: string } {\n\tconst input = positionalArgs(args, new Set(['--out', '--format'])).at(0);\n\tconst positionals = positionalArgs(args, new Set(['--out', '--format']));\n\tif (!input) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: 'ERROR MISSING_INPUT Expected an input .isostate.yaml file'\n\t\t};\n\t}\n\tif (positionals.length > 1) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: 'ERROR EXTRA_INPUT Expected exactly one input .isostate.yaml file'\n\t\t};\n\t}\n\n\tlet out = DEFAULT_OUT;\n\tlet format: string | undefined;\n\tlet pretty = false;\n\n\tfor (let index = 0; index < args.length; index += 1) {\n\t\tconst arg = args[index];\n\t\tif (arg === '--pretty') {\n\t\t\tpretty = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (arg === '--out') {\n\t\t\tconst value = args[index + 1];\n\t\t\tif (!value || value.startsWith('-')) {\n\t\t\t\treturn {\n\t\t\t\t\tok: false,\n\t\t\t\t\terror: 'ERROR MISSING_OPTION --out requires a path'\n\t\t\t\t};\n\t\t\t}\n\t\t\tout = value;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (arg === '--format') {\n\t\t\tconst value = args[index + 1];\n\t\t\tif (!value || value.startsWith('-')) {\n\t\t\t\treturn {\n\t\t\t\t\tok: false,\n\t\t\t\t\terror: 'ERROR MISSING_OPTION --format requires js or json'\n\t\t\t\t};\n\t\t\t}\n\t\t\tformat = value;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (arg.startsWith('-')) {\n\t\t\treturn { ok: false, error: `ERROR UNKNOWN_OPTION Unknown option ${arg}` };\n\t\t}\n\t}\n\n\tconst inferredFormat = format ?? inferFormat(out);\n\tif (inferredFormat !== 'js' && inferredFormat !== 'json') {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: `ERROR UNSUPPORTED_FORMAT Unsupported format \"${inferredFormat}\"`\n\t\t};\n\t}\n\n\treturn { ok: true, input, out, format: inferredFormat, pretty };\n}\n\nfunction positionalArgs(\n\targs: string[],\n\toptionsWithValues: Set<string>\n): string[] {\n\tconst positionals: string[] = [];\n\tfor (let index = 0; index < args.length; index += 1) {\n\t\tconst arg = args[index];\n\t\tif (arg === undefined) continue;\n\t\tif (optionsWithValues.has(arg)) {\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (!arg.startsWith('-')) {\n\t\t\tpositionals.push(arg);\n\t\t}\n\t}\n\treturn positionals;\n}\n\nfunction inferFormat(out: string): string {\n\tconst extension = extname(out).toLowerCase();\n\tif (extension === '.json') return 'json';\n\treturn 'js';\n}\n\nasync function readInput(path: string): Promise<string> {\n\ttry {\n\t\treturn await readFile(path, 'utf8');\n\t} catch (error) {\n\t\tthrow wrapFsError('FILE_READ_FAILED', `Unable to read ${path}`, error);\n\t}\n}\n\nasync function writeAtomic(path: string, contents: string): Promise<void> {\n\tconst absolute = resolve(path);\n\tconst directory = dirname(absolute);\n\tconst temporary = `${absolute}.tmp-${process.pid}-${Date.now()}`;\n\n\ttry {\n\t\tawait mkdir(directory, { recursive: true });\n\t\tawait writeFile(temporary, contents, 'utf8');\n\t\tawait rename(temporary, absolute);\n\t} catch (error) {\n\t\tawait rm(temporary, { force: true });\n\t\tthrow wrapFsError('FILE_WRITE_FAILED', `Unable to write ${path}`, error);\n\t}\n}\n\nfunction wrapFsError(code: string, message: string, cause: unknown): Error {\n\tconst error = new Error(message);\n\tObject.defineProperty(error, 'code', { value: code, enumerable: true });\n\tObject.defineProperty(error, 'cause', { value: cause });\n\treturn error;\n}\n"],"names":["positionalArgs"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CliIo, CliResult } from './commands.js';
2
+ export declare function inspectCommand(args: string[], io: CliIo): Promise<CliResult>;
3
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGtD,wBAAsB,cAAc,CACnC,IAAI,EAAE,MAAM,EAAE,EACd,EAAE,EAAE,KAAK,GACP,OAAO,CAAC,SAAS,CAAC,CAqBpB"}
@@ -0,0 +1,4 @@
1
+ import type { RuntimeBundle } from '@sebastianwessel/isostate/dsl';
2
+ export declare function runtimeDigest(bundle: RuntimeBundle): string;
3
+ export declare function sha256Hex(input: string | Uint8Array): string;
4
+ //# sourceMappingURL=runtime-digest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-digest.d.ts","sourceRoot":"","sources":["../src/runtime-digest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAKnE,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAG3D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAE5D"}
@@ -0,0 +1,3 @@
1
+ import type { CliIo, CliResult } from './commands.js';
2
+ export declare function bundleCommand(args: string[], io: CliIo): Promise<CliResult>;
3
+ //# sourceMappingURL=static-bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-bundle.d.ts","sourceRoot":"","sources":["../src/static-bundle.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAmDtD,wBAAsB,aAAa,CAClC,IAAI,EAAE,MAAM,EAAE,EACd,EAAE,EAAE,KAAK,GACP,OAAO,CAAC,SAAS,CAAC,CA4BpB"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@sebastianwessel/isostate-cli",
3
+ "version": "0.1.0",
4
+ "description": "Command line tools for validating and compiling Isostate scene DSL files.",
5
+ "type": "module",
6
+ "bin": {
7
+ "isostate": "./dist/bin.js"
8
+ },
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "types": "./dist/index.d.ts",
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "publishConfig": {
20
+ "access": "public",
21
+ "registry": "https://registry.npmjs.org/"
22
+ },
23
+ "sideEffects": false,
24
+ "scripts": {
25
+ "build": "cd ../.. && bun run build",
26
+ "prepublishOnly": "cd ../.. && bun run build && bun run lint"
27
+ },
28
+ "dependencies": {
29
+ "@sebastianwessel/isostate": "0.1.0"
30
+ },
31
+ "peerDependencies": {
32
+ "yaml": "^2.9.0"
33
+ },
34
+ "engines": {
35
+ "node": ">=18.0.0"
36
+ },
37
+ "author": "Sebastian Wessel",
38
+ "license": "MIT",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+ssh://git@github.com/sebastianwessel/isostate.git",
42
+ "directory": "packages/cli"
43
+ }
44
+ }