@clarigen/cli 3.1.0 → 3.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/dist/index.cjs +65 -61
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -146
- package/dist/index.d.ts +12 -146
- package/dist/index.js +63 -59
- package/dist/index.js.map +1 -1
- package/dist/run-cli.cjs +63 -59
- package/dist/run-cli.cjs.map +1 -1
- package/dist/run-cli.js +63 -59
- package/dist/run-cli.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/docs/markdown.ts","../src/logger.ts","../src/docs/index.ts","../src/utils.ts","../src/config.ts","../src/clarinet-config.ts","../src/files/docs.ts","../src/files/variables.ts","../src/declaration.ts","../src/files/base.ts","../src/files/accounts.ts","../src/files/identifiers.ts","../src/files/esm.ts","../src/deployments.ts"],"sourcesContent":["import type { Session, SessionContract } from '../session';\nimport { getContractName, getTypeString } from '@clarigen/core';\nimport {\n ClaridocContract,\n ClaridocFunction,\n ClaridocItem,\n ClaridocMap,\n ClaridocParam,\n ClaridocVariable,\n // Comments,\n createContractDocInfo,\n} from './index';\nimport { basename } from 'path';\nimport { sortContracts } from '../utils';\n\nexport function generateMarkdown({\n contract,\n contractFile,\n withToc = true,\n}: {\n contract: SessionContract;\n contractFile?: string;\n withToc?: boolean;\n}) {\n const contractName = getContractName(contract.contract_id, false);\n const doc = createContractDocInfo({\n contractSrc: contract.source,\n abi: contract.contract_interface,\n });\n\n const functions = doc.functions.map(fn => markdownFunction(fn, contractFile));\n const maps = doc.maps.map(map => markdownMap(map, contractFile));\n const vars = doc.variables\n .filter(v => v.abi.access === 'variable')\n .map(v => markdownVar(v, contractFile));\n const constants = doc.variables\n .filter(v => v.abi.access === 'constant')\n .map(v => markdownVar(v, contractFile));\n let fileLine = '';\n if (contractFile) {\n const fileName = basename(contractFile);\n fileLine = `\\n[\\`${fileName}\\`](${contractFile})`;\n }\n\n return `\n# ${contractName}\n${fileLine}\n\n${doc.comments.join('\\n\\n')}\n\n${withToc ? markdownTOC(doc) : ''}\n\n## Functions\n\n${functions.join('\\n\\n')}\n\n## Maps\n\n${maps.join('\\n\\n')}\n\n## Variables\n\n${vars.join('\\n\\n')}\n\n## Constants\n\n${constants.join('\\n\\n')}\n `;\n}\n\nexport function markdownFunction(fn: ClaridocFunction, contractFile?: string) {\n const params = mdParams(fn);\n const returnType = getTypeString(fn.abi.outputs.type);\n const paramSigs = fn.abi.args.map(arg => {\n return `(${arg.name} ${getTypeString(arg.type)})`;\n });\n\n const startLine = fn.startLine + 1;\n\n let link = '';\n if (contractFile) {\n link = `[View in file](${contractFile}#L${startLine})`;\n }\n\n const source = `<details>\n <summary>Source code:</summary>\n\n\\`\\`\\`clarity\n${fn.source.join('\\n')}\n\\`\\`\\`\n</details>\n`;\n\n const sig = `(define-${fn.abi.access.replace('_', '-')} (${fn.abi.name} (${paramSigs.join(\n ' '\n )}) ${returnType})`;\n\n return `### ${fn.abi.name}\n\n${link}\n\n\\`${sig}\\`\n\n${fn.comments.text.join('\\n')}\n\n${source}\n\n${params}`;\n}\n\nfunction mdParams(fn: ClaridocFunction) {\n if (fn.abi.args.length === 0) return '';\n const hasDescription = Object.values(fn.comments.params).some(p => p.comments.length > 0);\n const params = Object.values(fn.comments.params).map(p => markdownParam(p, hasDescription));\n // const hasDescription = params.some(p => p.includes('Description'));\n\n return `**Parameters:**\n\n| Name | Type | ${hasDescription ? 'Description |' : ''}\n| --- | --- | ${hasDescription ? '--- |' : ''}\n${params.join('\\n')}`;\n}\n\nfunction markdownParam(param: ClaridocParam, withDescription: boolean) {\n const typeString = getTypeString(param.abi.type);\n const base = `| ${param.abi.name} | ${typeString} |`;\n if (!withDescription) return base;\n return `${base} ${param.comments.join(' ')} |`;\n // return `| ${param.abi.name} | ${typeString} | ${param.comments.join(' ')} |`;\n}\n\nfunction markdownMap(map: ClaridocMap, contractFile?: string) {\n const startLine = map.startLine + 1;\n\n let link = '';\n if (contractFile) {\n link = `[View in file](${contractFile}#L${startLine})`;\n }\n\n return `### ${map.abi.name}\n\n${map.comments.text.join('\\n')}\n\n\\`\\`\\`clarity\n${map.source.join('\\n')}\n\\`\\`\\`\n\n${link}`;\n}\n\nfunction markdownVar(variable: ClaridocVariable, contractFile?: string) {\n const startLine = variable.startLine + 1;\n\n let link = '';\n if (contractFile) {\n link = `[View in file](${contractFile}#L${startLine})`;\n }\n\n const sig = variable.abi.access === 'variable' ? getTypeString(variable.abi.type) : '';\n\n return `### ${variable.abi.name}\n\n${sig}\n\n${variable.comments.text.join('\\n')}\n\n\\`\\`\\`clarity\n${variable.source.join('\\n')}\n\\`\\`\\`\n\n${link}`;\n}\n\nfunction markdownTOC(contract: ClaridocContract) {\n const publics = contract.functions.filter(fn => fn.abi.access === 'public');\n const readOnly = contract.functions.filter(fn => fn.abi.access === 'read_only');\n const privates = contract.functions.filter(fn => fn.abi.access === 'private');\n const maps = contract.maps;\n const constants = contract.variables.filter(v => v.abi.access === 'constant');\n const vars = contract.variables.filter(v => v.abi.access === 'variable');\n\n function tocLine(fn: ClaridocItem) {\n const name = fn.abi.name;\n return `- [\\`${name}\\`](#${name.toLowerCase().replaceAll('?', '')})`;\n }\n\n return `**Public functions:**\n\n${publics.map(tocLine).join('\\n')}\n\n**Read-only functions:**\n\n${readOnly.map(tocLine).join('\\n')}\n\n**Private functions:**\n\n${privates.map(tocLine).join('\\n')}\n\n**Maps**\n\n${maps.map(tocLine).join('\\n')}\n\n**Variables**\n\n${vars.map(tocLine).join('\\n')}\n\n**Constants**\n\n${constants.map(tocLine).join('\\n')}\n`;\n}\n\nexport function generateReadme(session: Session, excluded: Record<string, boolean>) {\n const contractLines: string[] = [];\n sortContracts(session.contracts).forEach(contract => {\n const name = getContractName(contract.contract_id, false);\n if (excluded[name]) return;\n const fileName = `${name}.md`;\n const line = `- [\\`${name}\\`](${fileName})`;\n contractLines.push(line);\n });\n const fileContents = `# Contracts\n \n ${contractLines.join('\\n')}\n `;\n\n return fileContents;\n}\n\n// function md(strings: TemplateStringsArray, ..._values: any) {\n// const raw = String.raw({ raw: strings }, ..._values);\n// const fixed = raw.split('\\n').map((s) => s.trim()).join('\\n');\n// return fixed;\n// }\n","import { pino } from 'pino';\nimport pinoPretty from 'pino-pretty';\n\nexport const colorizedClarigen = `\\x1b[33m[Clarigen]\\x1b[0m`;\n\nexport const logger = pino(\n pinoPretty({\n colorize: true,\n ignore: 'pid,hostname,time',\n messageFormat: `${colorizedClarigen} {msg}`,\n minimumLevel: 'debug',\n })\n);\nlogger.level = 'info';\n\nexport const log = logger;\n","import {\n ClarityAbi,\n ClarityAbiArg,\n ClarityAbiFunction,\n ClarityAbiMap,\n ClarityAbiVariable,\n} from '@clarigen/core';\nimport { Config } from '../config';\nimport { logger } from '../logger';\nimport { spawn } from 'child_process';\n\nexport const FN_TYPES = ['read-only', 'public', 'private'] as const;\n\nexport const VAR_TYPES = ['map', 'data-var', 'constant'] as const;\n\ntype ClarityAbiItem = ClarityAbiFunction | ClarityAbiMap | ClarityAbiVariable;\n\ntype ClaridocItemType<T extends ClarityAbiItem> = {\n abi: T;\n comments: Comments;\n startLine: number;\n source: string[];\n};\n\nexport type ClaridocFunction = ClaridocItemType<ClarityAbiFunction>;\nexport type ClaridocMap = ClaridocItemType<ClarityAbiMap>;\nexport type ClaridocVariable = ClaridocItemType<ClarityAbiVariable>;\n\nexport interface ClaridocItem {\n abi: ClarityAbiItem;\n comments: Comments;\n startLine: number;\n source: string[];\n}\n// export type ClaridocItem = ClaridocFunction | ClaridocMap | ClaridocVariable;\n\nexport interface Comments {\n params: Record<string, ClaridocParam>;\n text: string[];\n}\n\nexport interface ClaridocContract {\n functions: ClaridocFunction[];\n maps: ClaridocMap[];\n variables: ClaridocVariable[];\n comments: string[];\n}\n\nexport interface ClaridocParam {\n abi: ClarityAbiArg;\n comments: string[];\n}\n\nexport function createContractDocInfo({\n contractSrc,\n abi,\n}: {\n contractSrc: string;\n abi: ClarityAbi;\n}): ClaridocContract {\n const lines = contractSrc.split('\\n');\n let comments: string[] = [];\n let parensCount = 0;\n let currentFn: ClaridocItem | undefined;\n // const functions: ClaridocFunction[] = [];\n const contract: ClaridocContract = {\n comments: [],\n functions: [],\n variables: [],\n maps: [],\n };\n lines.forEach((line, lineNumber) => {\n // Are we processing a function?\n if (currentFn) {\n currentFn.source.push(line);\n parensCount = traceParens(line, parensCount);\n if (parensCount === 0) {\n // end of fn\n pushItem(contract, currentFn);\n // contract.functions.push(currentFn);\n currentFn = undefined;\n }\n return;\n }\n // Are we gathering comments?\n if (isComment(line)) {\n const comment = line.replace(/^\\s*;;\\s*/g, '');\n if (contract.comments.length === lineNumber) {\n // Top-level contract comments\n contract.comments.push(comment);\n } else {\n // Aggregate for a function\n comments.push(comment);\n }\n return;\n }\n\n // Is this the start of a fn?\n // const name = getFnName(line);\n const name = findItemNameFromLine(line);\n if (typeof name === 'undefined') {\n // Not a comment or fn start, clear comments.\n comments = [];\n } else {\n // New function found.\n // const abiFn = abi.functions.find((fn) => {\n // return fn.name === name;\n // })\n const abiFn = findAbiItemByName(abi, name);\n if (!abiFn) {\n console.debug(`[claridoc]: Unable to find ABI for function \\`${name}\\`. Probably a bug.`);\n return;\n }\n parensCount = traceParens(line, 0);\n const metaComments = parseComments(comments, abiFn);\n currentFn = {\n abi: abiFn,\n comments: metaComments,\n startLine: lineNumber,\n source: [line],\n };\n if (parensCount === 0) {\n // end of fn - single line fn\n // contract.functions.push(currentFn);\n pushItem(contract, currentFn);\n currentFn = undefined;\n }\n comments = [];\n }\n });\n return contract;\n}\n\nfunction pushItem(contract: ClaridocContract, item: ClaridocItem) {\n if ('args' in item.abi) {\n contract.functions.push(item as ClaridocFunction);\n } else if ('key' in item.abi) {\n contract.maps.push(item as ClaridocMap);\n } else if ('access' in item.abi) {\n contract.variables.push(item as ClaridocVariable);\n }\n}\n\nfunction clarityNameMatcher(line: string) {\n return /[\\w|\\-|\\?|\\!]+/.exec(line);\n}\n\nfunction findItemNameFromLine(line: string): string | undefined {\n const fnType = FN_TYPES.find(type => {\n return line.startsWith(`(define-${type}`);\n });\n if (fnType) {\n const prefix = `(define-${fnType} (`;\n const startString = line.slice(prefix.length);\n const match = clarityNameMatcher(startString);\n if (!match) {\n console.debug(`[claridocs]: Unable to determine function name from line:\\n \\`${line}\\``);\n return;\n }\n return match[0];\n }\n for (const type of VAR_TYPES) {\n const prefix = `(define-${type} `;\n if (!line.startsWith(prefix)) continue;\n\n const startString = line.slice(prefix.length);\n const match = clarityNameMatcher(startString);\n if (!match) {\n console.debug(`[claridocs]: Unable to determine ${type} name from line:\\n \\`${line}\\``);\n return;\n }\n return match[0];\n }\n return undefined;\n}\n\nfunction findAbiItemByName(abi: ClarityAbi, name: string): ClarityAbiItem | undefined {\n const fn = abi.functions.find(fn => {\n return fn.name === name;\n });\n if (fn) return fn;\n const map = abi.maps.find(m => m.name === name);\n if (map) return map;\n const v = abi.variables.find(v => v.name === name);\n return v;\n}\n\nexport function isComment(line: string) {\n return line.startsWith(';;');\n}\n\nexport function getFnName(line: string) {\n const fnType = FN_TYPES.find(type => {\n return line.startsWith(`(define-${type}`);\n });\n if (typeof fnType === 'undefined') return;\n const prefix = `(define-${fnType} (`;\n const startString = line.slice(prefix.length);\n const match = clarityNameMatcher(startString);\n if (!match) {\n console.debug(`[claridocs]: Unable to determine function name from line:\\n \\`${line}\\``);\n return;\n }\n return match[0];\n}\n\nexport function traceParens(line: string, count: number) {\n let newCount = count;\n line.split('').forEach(char => {\n if (char === '(') newCount++;\n if (char === ')') newCount--;\n });\n return newCount;\n}\n\nexport function parseComments(comments: string[], abi: ClarityAbiItem): Comments {\n // const params: Record<string, ClaridocParam> = {};\n let curParam: string | undefined;\n // const newComments: string[] = [];\n const parsed: Comments = {\n text: [],\n params: {},\n };\n comments.forEach(line => {\n const paramMatches = /\\s*@param\\s([\\w|\\-]+)([;|-|\\s]*)(.*)/.exec(line);\n\n if (paramMatches === null) {\n if (!curParam || line.trim() === '') {\n curParam = undefined;\n parsed.text.push(line);\n } else {\n parsed.params[curParam].comments.push(line);\n }\n return;\n }\n\n if (!('args' in abi)) return;\n const [_full, name, _separator, rest] = paramMatches;\n const arg = abi.args.find(arg => arg.name === name);\n if (!arg) {\n console.debug(`[claridocs]: Unable to find ABI for @param ${name}`);\n return;\n }\n curParam = name;\n parsed.params[curParam] = {\n abi: arg,\n comments: [rest],\n };\n });\n\n if ('args' in abi) {\n abi.args.forEach(arg => {\n if (!parsed.params[arg.name]) {\n parsed.params[arg.name] = {\n abi: arg,\n comments: [],\n };\n }\n });\n }\n\n return parsed;\n}\n\nexport async function afterDocs(config: Config): Promise<void> {\n const command = config.docs?.after;\n if (!command) return;\n logger.debug(`Running after docs command: ${command}`);\n const parts = command.split(' ');\n const [cmd, ...args] = parts;\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n cwd: config.cwd,\n stdio: 'inherit',\n });\n child.on('error', reject);\n child.on('exit', code => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with code ${code ?? 'unknown'}`));\n }\n });\n });\n}\n","// import { dirname, relative, resolve } from '../deps.ts';\nimport { getContractName, toCamelCase } from '@clarigen/core';\n// export { getContractName, toCamelCase, toKebabCase } from '@clarigen/core';\nimport { stat, mkdir, writeFile as fsWriteFile } from 'fs/promises';\nimport { dirname, resolve, relative } from 'path';\n\nexport function encodeVariableName(name: string) {\n if (/^[A-Z\\-_]*$/.test(name)) return name.replaceAll('-', '_');\n return toCamelCase(name);\n}\n\nexport async function fileExists(filename: string): Promise<boolean> {\n try {\n await stat(filename);\n // successful, file or directory must exist\n return true;\n } catch (error) {\n return false;\n // if (error.code === 'ENOENT') {\n // // file or directory does not exist\n // return false;\n // } else {\n // // unexpected error, maybe permissions, pass it along\n // throw error;\n // }\n }\n}\n\nexport async function writeFile(path: string, contents: string) {\n const dir = dirname(path);\n await mkdir(dir, { recursive: true });\n await fsWriteFile(path, contents, 'utf-8');\n return path;\n}\n\nexport function cwdRelative(path: string) {\n return relative(process.cwd(), path);\n}\n\n// Sort contracts alphabetically by their contract name.\n// Used to preserve ordering when generating files\nexport function sortContracts<T extends { contract_id: string }>(contracts: T[]): T[] {\n const nameSorted = [...contracts].sort((a, b) => {\n if (getContractName(a.contract_id, false) < getContractName(b.contract_id, false)) {\n return -1;\n }\n return 1;\n });\n return nameSorted;\n}\n","import { z } from 'zod';\nimport { log, logger } from './logger';\nimport { fileExists, writeFile } from './utils';\nimport { ClarinetConfig, getClarinetConfig } from './clarinet-config';\nimport { dirname, join, relative, resolve } from 'path';\nimport { stringify, parse } from '@iarna/toml';\nimport { readFile } from 'fs/promises';\n\nexport const CONFIG_FILE = 'Clarigen.toml' as const;\n\nexport enum OutputType {\n ESM = 'types',\n ESM_OLD = 'esm',\n Docs = 'docs',\n}\n\nconst typesSchema = z\n .object({\n output: z.string().optional(),\n outputs: z.array(z.string()).optional(),\n include_accounts: z.boolean().optional(),\n after: z.string().optional(),\n include_boot_contracts: z.boolean().optional(),\n watch_folders: z.array(z.string()).optional(),\n })\n .optional();\n\nexport const ConfigFileSchema = z.object({\n clarinet: z.string(),\n [OutputType.ESM]: typesSchema,\n [OutputType.ESM_OLD]: typesSchema,\n [OutputType.Docs]: z\n .object({\n output: z.string().optional(),\n outputs: z.array(z.string()).optional(),\n exclude: z.array(z.string()).optional(),\n after: z.string().optional(),\n })\n .optional(),\n});\n\nexport type ConfigFile = z.infer<typeof ConfigFileSchema>;\n\nexport const defaultConfigFile: ConfigFile = {\n clarinet: './Clarinet.toml',\n};\n\nexport class Config {\n public configFile: ConfigFile;\n public clarinet: ClarinetConfig;\n public cwd: string;\n\n constructor(config: ConfigFile, clarinet: ClarinetConfig, cwd?: string) {\n this.configFile = config;\n this.clarinet = clarinet;\n this.cwd = cwd ?? process.cwd();\n }\n\n public static async load(cwd?: string) {\n const config = await getConfig(cwd);\n if (config[OutputType.ESM_OLD]) {\n config[OutputType.ESM] = config[OutputType.ESM_OLD];\n delete config[OutputType.ESM_OLD];\n }\n const clarinet = await getClarinetConfig(resolve(cwd ?? '', config.clarinet));\n return new this(config, clarinet, cwd);\n }\n\n getOutputs(type: OutputType): string[] {\n const singlePath = this.configFile[type]?.output;\n const multiPath = this.configFile[type]?.outputs || [];\n if (singlePath !== undefined) return [singlePath];\n return multiPath;\n }\n\n outputResolve(type: OutputType, filePath?: string): string[] | null {\n const outputs = this.getOutputs(type);\n if (!this.supports(type)) return null;\n return outputs.map(path => {\n return resolve(this.cwd, path, filePath || '');\n });\n }\n\n async writeOutput(type: OutputType, contents: string, filePath?: string) {\n const paths = this.outputResolve(type, filePath);\n if (paths === null) return null;\n await Promise.all(\n paths.map(async path => {\n await writeFile(path, contents);\n log.debug(`Generated ${type} file at ${relative(this.cwd, path)}`);\n })\n );\n return paths;\n }\n\n supports(type: OutputType) {\n return this.getOutputs(type).length > 0;\n }\n\n type(type: OutputType) {\n return this.configFile[type];\n }\n\n get esm() {\n return this.configFile[OutputType.ESM];\n }\n get docs() {\n return this.configFile[OutputType.Docs];\n }\n\n clarinetFile() {\n return resolve(this.cwd, this.configFile.clarinet);\n }\n\n joinFromClarinet(filePath: string) {\n const baseDir = dirname(this.clarinetFile());\n return join(baseDir, filePath);\n }\n}\n\nexport function configFilePath(cwd?: string) {\n return resolve(cwd ?? process.cwd(), CONFIG_FILE);\n}\n\nexport async function saveConfig(config: ConfigFile) {\n const configToml = stringify({ ...config });\n await writeFile(configFilePath(), configToml);\n}\n\n// memoize / singleton\nlet sessionConfig: ConfigFile | undefined;\n\nexport async function getConfig(cwd?: string): Promise<ConfigFile> {\n if (typeof sessionConfig !== 'undefined') return sessionConfig;\n const path = configFilePath(cwd);\n if (await fileExists(path)) {\n const toml = await readFile(path, 'utf-8');\n const parsedToml = parse(toml);\n const parseResult = ConfigFileSchema.safeParse(parsedToml);\n if (parseResult.success) {\n sessionConfig = parseResult.data;\n } else {\n logger.error('Error parsing Clarigen.toml:');\n parseResult.error.errors.forEach(e => {\n logger.error(`${e.path.join('.')}: ${e.message}`);\n });\n throw new Error('Error parsing Clarigen.toml');\n }\n } else {\n sessionConfig = defaultConfigFile;\n }\n return sessionConfig;\n}\n","import { z } from 'zod';\nimport { readFile } from 'fs/promises';\nimport { parse } from '@iarna/toml';\n\nexport const ClarinetConfigSchema = z.object({\n project: z.object({\n requirements: z.array(z.object({ contract_id: z.string() })).optional(),\n cache_location: z.object({ path: z.string() }).optional(),\n }),\n contracts: z.record(z.string(), z.object({ path: z.string() })).optional(),\n});\n\nexport type ClarinetConfig = z.infer<typeof ClarinetConfigSchema>;\n\nexport async function getClarinetConfig(path: string): Promise<ClarinetConfig> {\n const file = await readFile(path, 'utf-8');\n const config = ClarinetConfigSchema.parse(parse(file));\n return config;\n}\n","import { SessionWithVariables } from '../session';\nimport { Config, OutputType } from '../config';\nimport { log } from '../logger';\nimport { getContractName } from '@clarigen/core';\nimport { relative, extname } from 'path';\nimport { generateMarkdown, generateReadme } from '../docs/markdown';\nimport { afterDocs } from '../docs';\n\nexport async function generateDocs({\n session,\n config,\n}: {\n session: SessionWithVariables;\n config: Config;\n}) {\n const docs = config.configFile[OutputType.Docs];\n const docsBase = docs?.output;\n if (!docsBase) {\n warnNoDocs();\n return;\n }\n const docsPathExt = extname(docsBase);\n if (docsPathExt) {\n log.warn(`Docs output path ('${docsBase}') looks like a file - it needs to be a directory.`);\n }\n const excluded: Record<string, boolean> = Object.fromEntries(\n (docs.exclude || []).map(e => {\n return [e, true];\n })\n );\n log.debug(`Generating docs at path \\`${docsBase}\\``);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const docsBaseFolder = config.outputResolve(OutputType.Docs, './')![0];\n const paths = await Promise.all(\n session.contracts.map(async contract => {\n const name = getContractName(contract.contract_id, false);\n if (excluded[name]) return null;\n const docFile = `${name}.md`;\n // location of\n const contractPathDef = config.clarinet.contracts?.[name]?.path;\n let contractFile: string | undefined;\n // if we have the contract file, make a relative link\n if (contractPathDef) {\n const contractPathFull = config.joinFromClarinet(contractPathDef);\n contractFile = relative(docsBaseFolder, contractPathFull);\n } else {\n // TODO: probably a requirement\n log.debug(`Couldn't find contract file from Clarinet.toml for contract ${name}`);\n }\n\n const md = generateMarkdown({ contract, contractFile });\n\n // log.debug(`Writing docs markdown file at ${cwdRelative(docPathFull)}`);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const path = (await config.writeOutput(OutputType.Docs, md, docFile))!;\n return path[0];\n })\n );\n\n const readme = generateReadme(session, excluded);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n paths.push((await config.writeOutput(OutputType.Docs, readme, 'README.md'))![0]);\n await afterDocs(config);\n}\n\nfunction warnNoDocs() {\n log.warn(\n `\\nClarigen config file doesn't include an output directory for docs.\n\nTo generate docs, specify 'docs.output' in your config file:\n\n[docs]\noutput = \"docs/\"\n `.trimEnd()\n );\n}\n","import type { Simnet } from '@hirosystems/clarinet-sdk';\nimport { logger } from '../logger';\nimport { Session, SessionContract } from '../session';\nimport {\n ClarityAbiTypeTuple,\n ClarityAbiVariable,\n cvToValue,\n getContractName,\n} from '@clarigen/core';\nimport { serialize } from './base';\n\nexport function getVariablesV2(contract: SessionContract, simnet: Simnet, verbose?: boolean) {\n const [deployer] = contract.contract_id.split('.');\n const fakeId = `${getContractName(contract.contract_id)}-vars`;\n logger.debug(`Deploying ${contract.contract_id} for variables.`);\n\n if (!contract.source) {\n logger.debug(\n `Contract ${getContractName(contract.contract_id)} has no source. Skipping variables.`\n );\n return {};\n }\n\n if (contract.contract_interface.variables.length === 0) {\n logger.info(`Contract ${getContractName(contract.contract_id, false)} has no variables`);\n return {};\n }\n\n let varFn = `{\\n`;\n\n const varLines = contract.contract_interface.variables.map(variable => {\n let varLine = `${variable.name}: `;\n if (variable.access === 'constant') {\n varLine += `${variable.name}`;\n } else {\n varLine += `(var-get ${variable.name})`;\n }\n return varLine;\n });\n varFn += varLines.map(l => ` ${l},`).join('\\n');\n\n varFn += '\\n}';\n\n const fullSrc = contract.source + `\\n\\n${varFn}`;\n try {\n const receipt = simnet.deployContract(\n fakeId,\n fullSrc,\n {\n clarityVersion: 3,\n },\n deployer\n );\n const result = receipt.result;\n\n const varsAbi: Writeable<ClarityAbiTypeTuple> = {\n tuple: [],\n };\n contract.contract_interface.variables.forEach(v => {\n const _v = v as unknown as Writeable<ClarityAbiVariable>;\n varsAbi.tuple.push({\n type: _v.type,\n name: _v.name,\n });\n });\n\n if (verbose) {\n // const cv = cvConvertHiro(result);\n // console.log('cv', cv);\n // console.log(esCvToValue(cvConvertHiro(result), true));\n logger.info(cvToValue(result, true));\n }\n\n // return esCvToValue(cvConvertHiro(result), true);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return cvToValue(result, true);\n } catch (error) {\n logger.warn(\n { err: error },\n `Error getting variables for ${getContractName(contract.contract_id, false)}`\n );\n // logger.error(`Source code: ${contract.source} with type ${String(typeof contract.source)}`);\n // logger.error(fullSrc);\n return {};\n }\n}\n\ntype Writeable<T> = { -readonly [P in keyof T]: Writeable<T[P]> };\n\nexport function mapVariables(session: Session, simnet: Simnet) {\n return session.contracts.map(contract => {\n const vars = getVariablesV2(contract, simnet);\n return serialize(vars);\n });\n}\n","import {\n isClarityAbiBuffer,\n isClarityAbiList,\n isClarityAbiOptional,\n isClarityAbiPrimitive,\n isClarityAbiResponse,\n isClarityAbiStringAscii,\n isClarityAbiStringUtf8,\n isClarityAbiTuple,\n ClarityAbiType,\n ClarityAbiTypeTraitReference,\n isClarityAbiTraitReference,\n} from '@clarigen/core';\n// import { ClarityAbiArg, ClarityAbiFunction, ClarityAbiType } from '../types.ts';\nimport { toCamelCase, ClarityAbiArg, ClarityAbiFunction } from '@clarigen/core';\n\nexport const jsTypeFromAbiType = (val: ClarityAbiType, isArgument = false): string => {\n if (isClarityAbiPrimitive(val)) {\n if (val === 'uint128') {\n if (isArgument) return 'number | bigint';\n return 'bigint';\n } else if (val === 'int128') {\n if (isArgument) return 'number | bigint';\n return 'bigint';\n } else if (val === 'bool') {\n return 'boolean';\n } else if (val === 'principal') {\n return 'string';\n } else if (val === 'none') {\n return 'null';\n } else if (val === 'trait_reference') {\n return 'string';\n } else {\n throw new Error(`Unexpected Clarity ABI type primitive: ${JSON.stringify(val)}`);\n }\n } else if (isClarityAbiBuffer(val)) {\n return 'Uint8Array';\n } else if (isClarityAbiResponse(val)) {\n const ok = jsTypeFromAbiType(val.response.ok, isArgument);\n const err = jsTypeFromAbiType(val.response.error, isArgument);\n return `Response<${ok}, ${err}>`;\n } else if (isClarityAbiOptional(val)) {\n const innerType = jsTypeFromAbiType(val.optional, isArgument);\n return `${innerType} | null`;\n } else if (isClarityAbiTuple(val)) {\n const tupleDefs: string[] = [];\n val.tuple.forEach(({ name, type }) => {\n const camelName = toCamelCase(name);\n const innerType = jsTypeFromAbiType(type, isArgument);\n tupleDefs.push(`\"${camelName}\": ${innerType};`);\n });\n return `{\n ${tupleDefs.join('\\n ')}\n}`;\n } else if (isClarityAbiList(val)) {\n const innerType = jsTypeFromAbiType(val.list.type, isArgument);\n return `${innerType}[]`;\n } else if (isClarityAbiStringAscii(val)) {\n return 'string';\n } else if (isClarityAbiStringUtf8(val)) {\n return 'string';\n } else if (isClarityAbiTraitReference(val)) {\n return 'string';\n } else {\n throw new Error(`Unexpected Clarity ABI type: ${JSON.stringify(val)}`);\n }\n};\n\nexport function abiArgType(arg: ClarityAbiArg) {\n const nativeType = jsTypeFromAbiType(arg.type, true);\n const argName = getArgName(arg.name);\n return `${argName}: TypedAbiArg<${nativeType}, \"${argName}\">`;\n}\n\nexport function abiFunctionType(abiFunction: ClarityAbiFunction) {\n const args = abiFunction.args.map(abiArgType);\n const retType = jsTypeFromAbiType(abiFunction.outputs.type);\n const argsTuple = `[${args.join(', ')}]`;\n return `TypedAbiFunction<${argsTuple}, ${retType}>`;\n}\n\n// Check if it's a reserved word, and then camelCase\nexport function getArgName(name: string) {\n const camel = toCamelCase(name);\n const prefix = RESERVED[camel] ? '_' : '';\n return `${prefix}${camel}`;\n}\n\nfunction _hash(...words: string[]) {\n const h: Record<string, boolean> = {};\n for (const word of words) {\n h[word] = true;\n }\n return h;\n}\n\nconst RESERVED = _hash(\n // Keywords, ES6 11.6.2.1, http://www.ecma-international.org/ecma-262/6.0/index.html#sec-keywords\n 'break',\n 'do',\n 'in',\n 'typeof',\n 'case',\n 'else',\n 'instanceof',\n 'var',\n 'catch',\n 'export',\n 'new',\n 'void',\n 'class',\n 'extends',\n 'return',\n 'while',\n 'const',\n 'finally',\n 'super',\n 'with',\n 'continue',\n 'for',\n 'switch',\n 'yield',\n 'debugger',\n 'function',\n 'this',\n 'default',\n 'if',\n 'throw',\n 'delete',\n 'import',\n 'try',\n // Future Reserved Words, ES6 11.6.2.2\n // http://www.ecma-international.org/ecma-262/6.0/index.html#sec-future-reserved-words\n 'enum',\n 'await',\n // NullLiteral & BooleanLiteral\n 'null',\n 'true',\n 'false'\n);\n","import { abiFunctionType, jsTypeFromAbiType } from '../declaration';\nimport type { SessionContract, SessionWithVariables } from '../session';\nimport { encodeVariableName, sortContracts } from '../utils';\nimport { toCamelCase, ClarityAbiVariable } from '@clarigen/core';\nimport { generateAccountsCode } from './accounts';\nimport { generateIdentifiersCode } from './identifiers';\nimport { inspect, InspectOptions } from 'util';\n\nexport function generateContractMeta(contract: SessionContract, constants: string) {\n const abi = contract.contract_interface;\n const functionLines: string[] = [];\n const { functions, maps, variables, non_fungible_tokens, ...rest } = abi;\n\n functions.forEach(func => {\n let functionLine = `${toCamelCase(func.name)}: `;\n const funcDef = JSON.stringify(func);\n functionLine += funcDef;\n const functionType = abiFunctionType(func);\n functionLine += ` as ${functionType}`;\n functionLines.push(functionLine);\n });\n\n const mapLines = maps.map(map => {\n let mapLine = `${toCamelCase(map.name)}: `;\n const keyType = jsTypeFromAbiType(map.key, true);\n const valType = jsTypeFromAbiType(map.value);\n mapLine += JSON.stringify(map);\n mapLine += ` as TypedAbiMap<${keyType}, ${valType}>`;\n return mapLine;\n });\n\n const otherAbi = JSON.stringify(rest);\n const contractName = contract.contract_id.split('.')[1];\n\n const variableLines = encodeVariables(variables);\n\n const nftLines = non_fungible_tokens.map(nft => {\n return JSON.stringify(nft);\n });\n\n return `{\n ${serializeLines('functions', functionLines)}\n ${serializeLines('maps', mapLines)}\n ${serializeLines('variables', variableLines)}\n constants: ${constants},\n ${serializeArray('non_fungible_tokens', nftLines)}\n ${otherAbi.slice(1, -1)},\n contractName: '${contractName}',\n }`;\n}\n\nexport const TYPE_IMPORTS = `import type { TypedAbiArg, TypedAbiFunction, TypedAbiMap, TypedAbiVariable, Response } from '@clarigen/core';`;\n\nexport function generateBaseFile(session: SessionWithVariables) {\n const combined = session.contracts.map((c, i) => ({\n ...c,\n constants: session.variables[i],\n }));\n const contractDefs = sortContracts(combined).map(contract => {\n const meta = generateContractMeta(contract, contract.constants);\n const id = contract.contract_id.split('.')[1];\n const keyName = toCamelCase(id);\n return `${keyName}: ${meta}`;\n });\n\n const file = `\n${TYPE_IMPORTS}\n\nexport const contracts = {\n ${contractDefs.join(',\\n')}\n} as const;\n\nexport const accounts = ${generateAccountsCode(session.accounts)} as const;\n\n${generateIdentifiersCode(session)}\n\nexport const simnet = {\n accounts,\n contracts,\n identifiers,\n} as const;\n\n`;\n return file;\n}\n\nexport function encodeVariables(variables: ClarityAbiVariable[]) {\n return variables.map(v => {\n let varLine = `${encodeVariableName(v.name)}: `;\n const type = jsTypeFromAbiType(v.type);\n const varJSON = serialize(v);\n varLine += `${varJSON} as TypedAbiVariable<${type}>`;\n return varLine;\n });\n}\n\n// Extend the Uint8Array prototype in TypeScript to include util.inspect.custom\ndeclare global {\n interface Uint8Array {\n [inspect.custom](depth: number, options: InspectOptions): string;\n }\n}\n\nUint8Array.prototype[inspect.custom] = function (depth: number, options: InspectOptions) {\n return `Uint8Array.from([${this.join(',')}])`;\n};\n\nexport function serialize(obj: any) {\n return inspect(obj, {\n // showHidden: false,\n // depth: 100,\n // colors: false,\n showHidden: false,\n // iterableLimit: 100000,\n compact: false,\n // trailingComma: true,\n depth: 100,\n colors: false,\n maxArrayLength: Infinity,\n maxStringLength: Infinity,\n breakLength: Infinity,\n numericSeparator: true,\n // strAbbreviateSize: 100000,\n });\n}\n\nfunction serializeLines(key: string, lines: string[]) {\n return `\"${key}\": {\n ${lines.join(',\\n ')}\n },`;\n}\n\nfunction serializeArray(key: string, lines: string[]) {\n return `\"${key}\": [\n ${lines.join(',\\n ')}\n ],`;\n}\n","import { Session, SessionAccount } from '../session';\n\nexport function generateAccountsCode(accounts: SessionAccount[]) {\n const sortedAccounts = sortAccounts(accounts);\n const namedAccounts = Object.fromEntries(\n sortedAccounts.map(a => {\n const { name, ...rest } = a;\n return [name, rest];\n })\n );\n // return `export const accounts = ${JSON.stringify(namedAccounts)} as const;`;\n return JSON.stringify(namedAccounts);\n}\n\n// Sort accounts alphabetically by their name.\n// Used to preserve ordering when generating files\nexport function sortAccounts(accounts: SessionAccount[]): SessionAccount[] {\n const nameSorted = [...accounts].sort((a, b) => {\n if (a.name < b.name) {\n return -1;\n }\n return 1;\n });\n return nameSorted;\n}\n","import { getContractName } from '@clarigen/core';\nimport { Session } from '../session';\nimport { sortContracts } from '../utils';\n\nexport function generateIdentifiers(session: Session) {\n const identifiers = Object.fromEntries(\n sortContracts(session.contracts).map(c => {\n const contractName = getContractName(c.contract_id);\n return [contractName, c.contract_id];\n })\n );\n return identifiers;\n}\n\nexport function generateIdentifiersCode(session: Session) {\n const identifiers = generateIdentifiers(session);\n\n return `export const identifiers = ${JSON.stringify(identifiers)} as const`;\n}\n","import { readFile } from 'fs/promises';\nimport { join, dirname, relative } from 'path';\nimport { Config } from '../config';\nimport { parse } from 'yaml';\nimport {\n Batch,\n DeploymentPlan,\n getContractTxs,\n getDeploymentContract,\n getDeploymentTxPath,\n getIdentifier,\n SimnetDeploymentPlan,\n Transaction,\n} from '../deployments';\nimport { getContractName } from '@clarigen/core';\nimport { cwdRelative, sortContracts } from '../utils';\nimport { Session } from '../session';\nimport { spawn } from 'child_process';\nimport { logger } from '../logger';\n\nexport async function parseDeployment(path: string) {\n const contents = await readFile(path, 'utf-8');\n const parsed = parse(contents);\n return parsed as Plan;\n}\n\nexport const DEPLOYMENT_NETWORKS = ['devnet', 'simnet', 'testnet', 'mainnet'] as const;\nexport type DeploymentNetwork = (typeof DEPLOYMENT_NETWORKS)[number];\n\ntype Plan = DeploymentPlan | undefined;\ntype DeploymentsMap = {\n [key in DeploymentNetwork]: Plan;\n};\n\nexport async function getDeployments(config: Config): Promise<DeploymentsMap> {\n const entries = await Promise.all(\n DEPLOYMENT_NETWORKS.map(async network => {\n const file = `default.${network}-plan.yaml`;\n const path = join(dirname(config.clarinetFile()), 'deployments', file);\n let plan: Plan;\n try {\n plan = await parseDeployment(path);\n } catch (_) {}\n return [network, plan] as [DeploymentNetwork, Plan];\n })\n );\n return Object.fromEntries(entries) as DeploymentsMap;\n}\n\nexport async function generateESMFile({\n baseFile,\n session,\n config,\n}: {\n baseFile: string;\n session: Session;\n config: Config;\n}) {\n const deployments = await getDeployments(config);\n const contractDeployments = collectContractDeployments(session, deployments, config);\n\n const simnet = generateSimnetCode(config, deployments, session);\n\n return `${baseFile}\nexport const deployments = ${JSON.stringify(contractDeployments)} as const;\n${simnet}\nexport const project = {\n contracts,\n deployments,\n} as const;\n `;\n}\n\nexport type ContractDeployments = {\n [key in DeploymentNetwork]: string | null;\n};\n\nexport type FullContractDeployments = {\n [contractName: string]: ContractDeployments;\n};\n\nfunction insertNetworkId(\n deployments: FullContractDeployments,\n identifier: string,\n network: DeploymentNetwork\n) {\n const name = getContractName(identifier);\n if (!deployments[name]) {\n // log.debug(`Not setting deployment ID for ${name} on ${network}`);\n return;\n }\n if (deployments[name][network] === null) {\n deployments[name][network] = identifier;\n }\n}\n\nexport function collectContractDeployments(\n session: Session,\n deployments: DeploymentsMap,\n config: Config\n): FullContractDeployments {\n const full = Object.fromEntries(\n sortContracts(session.contracts).map(contract => {\n const contractName = getContractName(contract.contract_id);\n const contractDeployments = Object.fromEntries(\n DEPLOYMENT_NETWORKS.map(network => {\n const deployment = deployments[network];\n if (typeof deployment === 'undefined') {\n return [network, null];\n }\n try {\n const contractName = contract.contract_id.split('.')[1];\n const tx = getDeploymentContract(contractName, deployment);\n const id = getIdentifier(tx);\n return [network, id];\n } catch (_) {\n return [network, null];\n }\n })\n ) as ContractDeployments;\n return [contractName, contractDeployments];\n })\n ) as FullContractDeployments;\n\n const deployer = session.accounts.find(a => a.name === 'deployer');\n\n // handle defaults when there is no deployment file\n config.clarinet.project.requirements?.forEach(({ contract_id }) => {\n insertNetworkId(full, contract_id, 'mainnet');\n const contractName = contract_id.split('.')[1];\n if (deployer) {\n const devnetId = `${deployer.address}.${contractName}`;\n insertNetworkId(full, devnetId, 'devnet');\n }\n });\n\n session.contracts.forEach(contract => {\n insertNetworkId(full, contract.contract_id, 'devnet');\n insertNetworkId(full, contract.contract_id, 'simnet');\n });\n\n return full;\n}\n\nexport function collectDeploymentFiles(\n deployments: DeploymentsMap,\n clarinetFolder: string,\n cwd: string\n) {\n if (!deployments.simnet) return [];\n const simnet = deployments.simnet as SimnetDeploymentPlan;\n const txs = getContractTxs(simnet.plan.batches as Batch<Transaction>[]);\n const entries = txs.map(tx => {\n const id = getIdentifier(tx);\n const contractFile = getDeploymentTxPath(tx);\n return {\n identifier: id,\n file: relative(cwd, join(clarinetFolder, contractFile)),\n };\n });\n return entries;\n}\n\nfunction generateSimnetCode(config: Config, deployments: DeploymentsMap, _session: Session) {\n if (!config.esm?.include_accounts) return '';\n\n const clarinetFolder = dirname(config.clarinetFile());\n\n const files = collectDeploymentFiles(deployments, clarinetFolder, config.cwd);\n // const accounts = generateAccountsCode(session);\n\n return `\nexport const simnetDeployment = ${JSON.stringify(files)};\n`;\n // ${accounts}\n\n // export const simnet = {\n // deployment: simnetDeployment,\n // accounts,\n // };\n}\n\nexport async function afterESM(config: Config): Promise<void> {\n const command = config.esm?.after;\n if (!command) return;\n logger.debug(`Running after ESM command: ${command}`);\n const parts = command.split(' ');\n const [cmd, ...args] = parts;\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n cwd: config.cwd,\n stdio: 'inherit',\n });\n child.on('error', reject);\n child.on('exit', code => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with code ${code ?? 'unknown'}`));\n }\n });\n });\n}\n","interface EmulatedContractPublishTransaction {\n 'emulated-contract-publish': {\n 'contract-name': string;\n 'emulated-sender': string;\n path: string;\n };\n}\n\ninterface RequirementPublishTransaction {\n 'requirement-publish': {\n 'contract-id': string;\n 'remap-sender': string;\n 'remap-principals': Record<string, string>;\n path: string;\n };\n}\n\ninterface ContractPublishTransaction {\n 'contract-publish': {\n 'contract-name': string;\n 'expected-sender': string;\n path: string;\n };\n}\n\ninterface ContractCallTransaction {\n 'contract-call': {\n 'contract-id': string;\n 'expected-sender': string;\n parameters: Readonly<string[]>;\n method: string;\n };\n}\n\ninterface EmulatedContractCallTransaction {\n 'emulated-contract-call': {\n 'contract-id': string;\n 'emulated-sender': string;\n parameters: Readonly<string[]>;\n method: string;\n };\n}\n\ninterface BtcTransferTransaction {\n 'btc-transfer': {\n 'expected-sender': string;\n recipient: string;\n 'sats-per-byte': string;\n 'sats-amount': string;\n };\n}\n\n// <clarinet>/components/deployments/src/types.rs\n// <TransactionSpecification>\nexport type Transaction =\n | EmulatedContractPublishTransaction\n | RequirementPublishTransaction\n | ContractPublishTransaction\n | EmulatedContractCallTransaction\n | BtcTransferTransaction\n | ContractCallTransaction;\n\nexport type ContractTransaction =\n | EmulatedContractPublishTransaction\n | RequirementPublishTransaction\n | ContractPublishTransaction;\n\n// type Batch = Transaction[];\nexport interface Batch<T extends Transaction> {\n id: number;\n transactions: Readonly<T[]>;\n}\n\ninterface SimnetAccount {\n address: string;\n name: string;\n balance: string;\n}\n\nexport interface SimnetAccountDeployer extends SimnetAccount {\n name: 'deployer';\n}\n\nexport interface SimnetDeploymentPlan {\n network: 'simnet';\n genesis: {\n wallets: Readonly<[SimnetAccountDeployer, ...SimnetAccount[]]>;\n contracts: Readonly<string[]>;\n };\n plan: {\n batches: Readonly<\n Batch<EmulatedContractPublishTransaction | EmulatedContractCallTransaction>[]\n >;\n };\n}\n\nexport interface DevnetDeploymentPlan {\n network: 'devnet';\n plan: {\n batches: Readonly<\n Batch<\n | RequirementPublishTransaction\n | ContractPublishTransaction\n | ContractCallTransaction\n | BtcTransferTransaction\n >[]\n >;\n };\n}\n\nexport type TestnetDeploymentPlan = Omit<DevnetDeploymentPlan, 'network'> & {\n network: 'testnet';\n};\n\nexport interface MainnetDeploymentPlan {\n network: 'mainnet';\n plan: {\n batches: Readonly<\n Batch<ContractPublishTransaction | ContractCallTransaction | BtcTransferTransaction>[]\n >;\n };\n}\n\nexport type DeploymentPlan =\n | SimnetDeploymentPlan\n | DevnetDeploymentPlan\n | TestnetDeploymentPlan\n | MainnetDeploymentPlan;\n\nexport function flatBatch<T extends Transaction>(batches: Batch<T>[]) {\n // const start: T[][] = [];\n const txs: T[] = [];\n batches.forEach(batch => txs.push(...batch.transactions));\n return txs;\n}\n\nexport function getContractTxs(batches: Batch<Transaction>[]): ContractTransaction[] {\n const txs = flatBatch(batches);\n return txs.filter(isContractTx);\n}\n\nexport function getDeploymentContract(\n contractName: string,\n deployment: DeploymentPlan\n): ContractTransaction {\n const txs: Transaction[] = flatBatch(deployment.plan.batches as Batch<Transaction>[]);\n for (const tx of txs) {\n if (!isContractTx(tx)) continue;\n if ('requirement-publish' in tx) {\n const [_, name] = tx['requirement-publish']['contract-id'].split('.');\n if (name === contractName) {\n return tx;\n }\n } else if ('emulated-contract-publish' in tx) {\n if (tx['emulated-contract-publish']['contract-name'] === contractName) {\n return tx;\n }\n } else if ('contract-publish' in tx) {\n const contract = tx['contract-publish'];\n if (contract['contract-name'] === contractName) {\n return tx;\n }\n }\n }\n throw new Error(`Unable to find deployment tx for contract '${contractName}'`);\n}\n\nexport function getDeploymentTxPath(tx: ContractTransaction): string {\n if (!isContractTx(tx)) {\n throw new Error('Unable to get path for tx type.');\n }\n if ('requirement-publish' in tx) {\n return tx['requirement-publish'].path;\n } else if ('emulated-contract-publish' in tx) {\n const contract = tx['emulated-contract-publish'];\n return contract.path;\n } else if ('contract-publish' in tx) {\n const contract = tx['contract-publish'];\n return contract.path;\n }\n throw new Error('Couldnt get path for deployment tx.');\n}\n\nexport function getIdentifier(tx: ContractTransaction): string {\n if (!isContractTx(tx)) {\n throw new Error('Unable to get ID for tx type.');\n }\n if ('requirement-publish' in tx) {\n const spec = tx['requirement-publish'];\n const [_, name] = spec['contract-id'].split('.');\n return `${spec['remap-sender']}.${name}`;\n } else if ('emulated-contract-publish' in tx) {\n const contract = tx['emulated-contract-publish'];\n return `${contract['emulated-sender']}.${contract['contract-name']}`;\n } else if ('contract-publish' in tx) {\n const contract = tx['contract-publish'];\n return `${contract['expected-sender']}.${contract['contract-name']}`;\n }\n throw new Error(`Unable to find ID for contract.`);\n}\n\nexport function isContractTx(tx: Transaction): tx is ContractTransaction {\n if ('contract-call' in tx) return false;\n if ('btc-transfer' in tx) return false;\n if ('emulated-contract-call' in tx) return false;\n return true;\n}\n"],"mappings":";AACA,SAAS,mBAAAA,kBAAiB,qBAAqB;;;ACD/C,SAAS,YAAY;AACrB,OAAO,gBAAgB;AAEhB,IAAM,oBAAoB;AAE1B,IAAM,SAAS;AAAA,EACpB,WAAW;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,eAAe,GAAG,iBAAiB;AAAA,IACnC,cAAc;AAAA,EAChB,CAAC;AACH;AACA,OAAO,QAAQ;AAER,IAAM,MAAM;;;ACNnB,SAAS,aAAa;AAEf,IAAM,WAAW,CAAC,aAAa,UAAU,SAAS;AAElD,IAAM,YAAY,CAAC,OAAO,YAAY,UAAU;AAwChD,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AACF,GAGqB;AACnB,QAAM,QAAQ,YAAY,MAAM,IAAI;AACpC,MAAI,WAAqB,CAAC;AAC1B,MAAI,cAAc;AAClB,MAAI;AAEJ,QAAM,WAA6B;AAAA,IACjC,UAAU,CAAC;AAAA,IACX,WAAW,CAAC;AAAA,IACZ,WAAW,CAAC;AAAA,IACZ,MAAM,CAAC;AAAA,EACT;AACA,QAAM,QAAQ,CAAC,MAAM,eAAe;AAElC,QAAI,WAAW;AACb,gBAAU,OAAO,KAAK,IAAI;AAC1B,oBAAc,YAAY,MAAM,WAAW;AAC3C,UAAI,gBAAgB,GAAG;AAErB,iBAAS,UAAU,SAAS;AAE5B,oBAAY;AAAA,MACd;AACA;AAAA,IACF;AAEA,QAAI,UAAU,IAAI,GAAG;AACnB,YAAM,UAAU,KAAK,QAAQ,cAAc,EAAE;AAC7C,UAAI,SAAS,SAAS,WAAW,YAAY;AAE3C,iBAAS,SAAS,KAAK,OAAO;AAAA,MAChC,OAAO;AAEL,iBAAS,KAAK,OAAO;AAAA,MACvB;AACA;AAAA,IACF;AAIA,UAAM,OAAO,qBAAqB,IAAI;AACtC,QAAI,OAAO,SAAS,aAAa;AAE/B,iBAAW,CAAC;AAAA,IACd,OAAO;AAKL,YAAM,QAAQ,kBAAkB,KAAK,IAAI;AACzC,UAAI,CAAC,OAAO;AACV,gBAAQ,MAAM,iDAAiD,IAAI,qBAAqB;AACxF;AAAA,MACF;AACA,oBAAc,YAAY,MAAM,CAAC;AACjC,YAAM,eAAe,cAAc,UAAU,KAAK;AAClD,kBAAY;AAAA,QACV,KAAK;AAAA,QACL,UAAU;AAAA,QACV,WAAW;AAAA,QACX,QAAQ,CAAC,IAAI;AAAA,MACf;AACA,UAAI,gBAAgB,GAAG;AAGrB,iBAAS,UAAU,SAAS;AAC5B,oBAAY;AAAA,MACd;AACA,iBAAW,CAAC;AAAA,IACd;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAEA,SAAS,SAAS,UAA4B,MAAoB;AAChE,MAAI,UAAU,KAAK,KAAK;AACtB,aAAS,UAAU,KAAK,IAAwB;AAAA,EAClD,WAAW,SAAS,KAAK,KAAK;AAC5B,aAAS,KAAK,KAAK,IAAmB;AAAA,EACxC,WAAW,YAAY,KAAK,KAAK;AAC/B,aAAS,UAAU,KAAK,IAAwB;AAAA,EAClD;AACF;AAEA,SAAS,mBAAmB,MAAc;AACxC,SAAO,iBAAiB,KAAK,IAAI;AACnC;AAEA,SAAS,qBAAqB,MAAkC;AAC9D,QAAM,SAAS,SAAS,KAAK,UAAQ;AACnC,WAAO,KAAK,WAAW,WAAW,IAAI,EAAE;AAAA,EAC1C,CAAC;AACD,MAAI,QAAQ;AACV,UAAM,SAAS,WAAW,MAAM;AAChC,UAAM,cAAc,KAAK,MAAM,OAAO,MAAM;AAC5C,UAAM,QAAQ,mBAAmB,WAAW;AAC5C,QAAI,CAAC,OAAO;AACV,cAAQ,MAAM;AAAA,MAAkE,IAAI,IAAI;AACxF;AAAA,IACF;AACA,WAAO,MAAM,CAAC;AAAA,EAChB;AACA,aAAW,QAAQ,WAAW;AAC5B,UAAM,SAAS,WAAW,IAAI;AAC9B,QAAI,CAAC,KAAK,WAAW,MAAM,EAAG;AAE9B,UAAM,cAAc,KAAK,MAAM,OAAO,MAAM;AAC5C,UAAM,QAAQ,mBAAmB,WAAW;AAC5C,QAAI,CAAC,OAAO;AACV,cAAQ,MAAM,oCAAoC,IAAI;AAAA,MAAyB,IAAI,IAAI;AACvF;AAAA,IACF;AACA,WAAO,MAAM,CAAC;AAAA,EAChB;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,KAAiB,MAA0C;AACpF,QAAM,KAAK,IAAI,UAAU,KAAK,CAAAC,QAAM;AAClC,WAAOA,IAAG,SAAS;AAAA,EACrB,CAAC;AACD,MAAI,GAAI,QAAO;AACf,QAAM,MAAM,IAAI,KAAK,KAAK,OAAK,EAAE,SAAS,IAAI;AAC9C,MAAI,IAAK,QAAO;AAChB,QAAM,IAAI,IAAI,UAAU,KAAK,CAAAC,OAAKA,GAAE,SAAS,IAAI;AACjD,SAAO;AACT;AAEO,SAAS,UAAU,MAAc;AACtC,SAAO,KAAK,WAAW,IAAI;AAC7B;AAEO,SAAS,UAAU,MAAc;AACtC,QAAM,SAAS,SAAS,KAAK,UAAQ;AACnC,WAAO,KAAK,WAAW,WAAW,IAAI,EAAE;AAAA,EAC1C,CAAC;AACD,MAAI,OAAO,WAAW,YAAa;AACnC,QAAM,SAAS,WAAW,MAAM;AAChC,QAAM,cAAc,KAAK,MAAM,OAAO,MAAM;AAC5C,QAAM,QAAQ,mBAAmB,WAAW;AAC5C,MAAI,CAAC,OAAO;AACV,YAAQ,MAAM;AAAA,MAAkE,IAAI,IAAI;AACxF;AAAA,EACF;AACA,SAAO,MAAM,CAAC;AAChB;AAEO,SAAS,YAAY,MAAc,OAAe;AACvD,MAAI,WAAW;AACf,OAAK,MAAM,EAAE,EAAE,QAAQ,UAAQ;AAC7B,QAAI,SAAS,IAAK;AAClB,QAAI,SAAS,IAAK;AAAA,EACpB,CAAC;AACD,SAAO;AACT;AAEO,SAAS,cAAc,UAAoB,KAA+B;AAE/E,MAAI;AAEJ,QAAM,SAAmB;AAAA,IACvB,MAAM,CAAC;AAAA,IACP,QAAQ,CAAC;AAAA,EACX;AACA,WAAS,QAAQ,UAAQ;AACvB,UAAM,eAAe,uCAAuC,KAAK,IAAI;AAErE,QAAI,iBAAiB,MAAM;AACzB,UAAI,CAAC,YAAY,KAAK,KAAK,MAAM,IAAI;AACnC,mBAAW;AACX,eAAO,KAAK,KAAK,IAAI;AAAA,MACvB,OAAO;AACL,eAAO,OAAO,QAAQ,EAAE,SAAS,KAAK,IAAI;AAAA,MAC5C;AACA;AAAA,IACF;AAEA,QAAI,EAAE,UAAU,KAAM;AACtB,UAAM,CAAC,OAAO,MAAM,YAAY,IAAI,IAAI;AACxC,UAAM,MAAM,IAAI,KAAK,KAAK,CAAAC,SAAOA,KAAI,SAAS,IAAI;AAClD,QAAI,CAAC,KAAK;AACR,cAAQ,MAAM,8CAA8C,IAAI,EAAE;AAClE;AAAA,IACF;AACA,eAAW;AACX,WAAO,OAAO,QAAQ,IAAI;AAAA,MACxB,KAAK;AAAA,MACL,UAAU,CAAC,IAAI;AAAA,IACjB;AAAA,EACF,CAAC;AAED,MAAI,UAAU,KAAK;AACjB,QAAI,KAAK,QAAQ,SAAO;AACtB,UAAI,CAAC,OAAO,OAAO,IAAI,IAAI,GAAG;AAC5B,eAAO,OAAO,IAAI,IAAI,IAAI;AAAA,UACxB,KAAK;AAAA,UACL,UAAU,CAAC;AAAA,QACb;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,eAAsB,UAAU,QAA+B;AAxQ/D;AAyQE,QAAM,WAAU,YAAO,SAAP,mBAAa;AAC7B,MAAI,CAAC,QAAS;AACd,SAAO,MAAM,+BAA+B,OAAO,EAAE;AACrD,QAAM,QAAQ,QAAQ,MAAM,GAAG;AAC/B,QAAM,CAAC,KAAK,GAAG,IAAI,IAAI;AACvB,SAAO,IAAI,QAAQ,CAACC,UAAS,WAAW;AACtC,UAAM,QAAQ,MAAM,KAAK,MAAM;AAAA,MAC7B,KAAK,OAAO;AAAA,MACZ,OAAO;AAAA,IACT,CAAC;AACD,UAAM,GAAG,SAAS,MAAM;AACxB,UAAM,GAAG,QAAQ,UAAQ;AACvB,UAAI,SAAS,GAAG;AACd,QAAAA,SAAQ;AAAA,MACV,OAAO;AACL,eAAO,IAAI,MAAM,4BAA4B,QAAQ,SAAS,EAAE,CAAC;AAAA,MACnE;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;;;AFhRA,SAAS,gBAAgB;;;AGXzB,SAAS,iBAAiB,mBAAmB;AAE7C,SAAS,MAAM,OAAO,aAAa,mBAAmB;AACtD,SAAS,SAAkB,gBAAgB;AAEpC,SAAS,mBAAmB,MAAc;AAC/C,MAAI,cAAc,KAAK,IAAI,EAAG,QAAO,KAAK,WAAW,KAAK,GAAG;AAC7D,SAAO,YAAY,IAAI;AACzB;AAEA,eAAsB,WAAW,UAAoC;AACnE,MAAI;AACF,UAAM,KAAK,QAAQ;AAEnB,WAAO;AAAA,EACT,SAAS,OAAO;AACd,WAAO;AAAA,EAQT;AACF;AAEA,eAAsB,UAAU,MAAc,UAAkB;AAC9D,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC,QAAM,YAAY,MAAM,UAAU,OAAO;AACzC,SAAO;AACT;AAEO,SAAS,YAAY,MAAc;AACxC,SAAO,SAAS,QAAQ,IAAI,GAAG,IAAI;AACrC;AAIO,SAAS,cAAiD,WAAqB;AACpF,QAAM,aAAa,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,MAAM;AAC/C,QAAI,gBAAgB,EAAE,aAAa,KAAK,IAAI,gBAAgB,EAAE,aAAa,KAAK,GAAG;AACjF,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,CAAC;AACD,SAAO;AACT;;;AHlCO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,UAAU;AACZ,GAIG;AACD,QAAM,eAAeC,iBAAgB,SAAS,aAAa,KAAK;AAChE,QAAM,MAAM,sBAAsB;AAAA,IAChC,aAAa,SAAS;AAAA,IACtB,KAAK,SAAS;AAAA,EAChB,CAAC;AAED,QAAM,YAAY,IAAI,UAAU,IAAI,QAAM,iBAAiB,IAAI,YAAY,CAAC;AAC5E,QAAM,OAAO,IAAI,KAAK,IAAI,SAAO,YAAY,KAAK,YAAY,CAAC;AAC/D,QAAM,OAAO,IAAI,UACd,OAAO,OAAK,EAAE,IAAI,WAAW,UAAU,EACvC,IAAI,OAAK,YAAY,GAAG,YAAY,CAAC;AACxC,QAAM,YAAY,IAAI,UACnB,OAAO,OAAK,EAAE,IAAI,WAAW,UAAU,EACvC,IAAI,OAAK,YAAY,GAAG,YAAY,CAAC;AACxC,MAAI,WAAW;AACf,MAAI,cAAc;AAChB,UAAM,WAAW,SAAS,YAAY;AACtC,eAAW;AAAA,KAAQ,QAAQ,OAAO,YAAY;AAAA,EAChD;AAEA,SAAO;AAAA,IACL,YAAY;AAAA,EACd,QAAQ;AAAA;AAAA,EAER,IAAI,SAAS,KAAK,MAAM,CAAC;AAAA;AAAA,EAEzB,UAAU,YAAY,GAAG,IAAI,EAAE;AAAA;AAAA;AAAA;AAAA,EAI/B,UAAU,KAAK,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA,EAItB,KAAK,KAAK,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA,EAIjB,KAAK,KAAK,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA,EAIjB,UAAU,KAAK,MAAM,CAAC;AAAA;AAExB;AAEO,SAAS,iBAAiB,IAAsB,cAAuB;AAC5E,QAAM,SAAS,SAAS,EAAE;AAC1B,QAAM,aAAa,cAAc,GAAG,IAAI,QAAQ,IAAI;AACpD,QAAM,YAAY,GAAG,IAAI,KAAK,IAAI,SAAO;AACvC,WAAO,IAAI,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,CAAC;AAAA,EAChD,CAAC;AAED,QAAM,YAAY,GAAG,YAAY;AAEjC,MAAI,OAAO;AACX,MAAI,cAAc;AAChB,WAAO,kBAAkB,YAAY,KAAK,SAAS;AAAA,EACrD;AAEA,QAAM,SAAS;AAAA;AAAA;AAAA;AAAA,EAIf,GAAG,OAAO,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAKpB,QAAM,MAAM,WAAW,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,IAAI,KAAK,UAAU;AAAA,IACnF;AAAA,EACF,CAAC,KAAK,UAAU;AAEhB,SAAO,OAAO,GAAG,IAAI,IAAI;AAAA;AAAA,EAEzB,IAAI;AAAA;AAAA,IAEF,GAAG;AAAA;AAAA,EAEL,GAAG,SAAS,KAAK,KAAK,IAAI,CAAC;AAAA;AAAA,EAE3B,MAAM;AAAA;AAAA,EAEN,MAAM;AACR;AAEA,SAAS,SAAS,IAAsB;AACtC,MAAI,GAAG,IAAI,KAAK,WAAW,EAAG,QAAO;AACrC,QAAM,iBAAiB,OAAO,OAAO,GAAG,SAAS,MAAM,EAAE,KAAK,OAAK,EAAE,SAAS,SAAS,CAAC;AACxF,QAAM,SAAS,OAAO,OAAO,GAAG,SAAS,MAAM,EAAE,IAAI,OAAK,cAAc,GAAG,cAAc,CAAC;AAG1F,SAAO;AAAA;AAAA,kBAES,iBAAiB,kBAAkB,EAAE;AAAA,gBACvC,iBAAiB,UAAU,EAAE;AAAA,EAC3C,OAAO,KAAK,IAAI,CAAC;AACnB;AAEA,SAAS,cAAc,OAAsB,iBAA0B;AACrE,QAAM,aAAa,cAAc,MAAM,IAAI,IAAI;AAC/C,QAAM,OAAO,KAAK,MAAM,IAAI,IAAI,MAAM,UAAU;AAChD,MAAI,CAAC,gBAAiB,QAAO;AAC7B,SAAO,GAAG,IAAI,IAAI,MAAM,SAAS,KAAK,GAAG,CAAC;AAE5C;AAEA,SAAS,YAAY,KAAkB,cAAuB;AAC5D,QAAM,YAAY,IAAI,YAAY;AAElC,MAAI,OAAO;AACX,MAAI,cAAc;AAChB,WAAO,kBAAkB,YAAY,KAAK,SAAS;AAAA,EACrD;AAEA,SAAO,OAAO,IAAI,IAAI,IAAI;AAAA;AAAA,EAE1B,IAAI,SAAS,KAAK,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,EAG5B,IAAI,OAAO,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,EAGrB,IAAI;AACN;AAEA,SAAS,YAAY,UAA4B,cAAuB;AACtE,QAAM,YAAY,SAAS,YAAY;AAEvC,MAAI,OAAO;AACX,MAAI,cAAc;AAChB,WAAO,kBAAkB,YAAY,KAAK,SAAS;AAAA,EACrD;AAEA,QAAM,MAAM,SAAS,IAAI,WAAW,aAAa,cAAc,SAAS,IAAI,IAAI,IAAI;AAEpF,SAAO,OAAO,SAAS,IAAI,IAAI;AAAA;AAAA,EAE/B,GAAG;AAAA;AAAA,EAEH,SAAS,SAAS,KAAK,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,EAGjC,SAAS,OAAO,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,EAG1B,IAAI;AACN;AAEA,SAAS,YAAY,UAA4B;AAC/C,QAAM,UAAU,SAAS,UAAU,OAAO,QAAM,GAAG,IAAI,WAAW,QAAQ;AAC1E,QAAM,WAAW,SAAS,UAAU,OAAO,QAAM,GAAG,IAAI,WAAW,WAAW;AAC9E,QAAM,WAAW,SAAS,UAAU,OAAO,QAAM,GAAG,IAAI,WAAW,SAAS;AAC5E,QAAM,OAAO,SAAS;AACtB,QAAM,YAAY,SAAS,UAAU,OAAO,OAAK,EAAE,IAAI,WAAW,UAAU;AAC5E,QAAM,OAAO,SAAS,UAAU,OAAO,OAAK,EAAE,IAAI,WAAW,UAAU;AAEvE,WAAS,QAAQ,IAAkB;AACjC,UAAM,OAAO,GAAG,IAAI;AACpB,WAAO,QAAQ,IAAI,QAAQ,KAAK,YAAY,EAAE,WAAW,KAAK,EAAE,CAAC;AAAA,EACnE;AAEA,SAAO;AAAA;AAAA,EAEP,QAAQ,IAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,EAI/B,SAAS,IAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,EAIhC,SAAS,IAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,EAIhC,KAAK,IAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,EAI5B,KAAK,IAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,EAI5B,UAAU,IAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA;AAEnC;AAEO,SAAS,eAAe,SAAkB,UAAmC;AAClF,QAAM,gBAA0B,CAAC;AACjC,gBAAc,QAAQ,SAAS,EAAE,QAAQ,cAAY;AACnD,UAAM,OAAOA,iBAAgB,SAAS,aAAa,KAAK;AACxD,QAAI,SAAS,IAAI,EAAG;AACpB,UAAM,WAAW,GAAG,IAAI;AACxB,UAAM,OAAO,QAAQ,IAAI,OAAO,QAAQ;AACxC,kBAAc,KAAK,IAAI;AAAA,EACzB,CAAC;AACD,QAAM,eAAe;AAAA;AAAA,IAEnB,cAAc,KAAK,IAAI,CAAC;AAAA;AAG1B,SAAO;AACT;;;AInOA,SAAS,KAAAC,UAAS;;;ACAlB,SAAS,SAAS;AAClB,SAAS,gBAAgB;AACzB,SAAS,aAAa;AAEf,IAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,SAAS,EAAE,OAAO;AAAA,IAChB,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS;AAAA,IACtE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS;AAAA,EAC1D,CAAC;AAAA,EACD,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS;AAC3E,CAAC;AAID,eAAsB,kBAAkB,MAAuC;AAC7E,QAAM,OAAO,MAAM,SAAS,MAAM,OAAO;AACzC,QAAM,SAAS,qBAAqB,MAAM,MAAM,IAAI,CAAC;AACrD,SAAO;AACT;;;ADdA,SAAS,WAAAC,UAAS,MAAM,YAAAC,WAAU,WAAAC,gBAAe;AACjD,SAAS,WAAW,SAAAC,cAAa;AACjC,SAAS,YAAAC,iBAAgB;AAElB,IAAM,cAAc;AAEpB,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,YAAA,SAAM;AACN,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,UAAO;AAHG,SAAAA;AAAA,GAAA;AAMZ,IAAM,cAAcC,GACjB,OAAO;AAAA,EACN,QAAQA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,SAASA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACtC,kBAAkBA,GAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,wBAAwBA,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC7C,eAAeA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAC9C,CAAC,EACA,SAAS;AAEL,IAAM,mBAAmBA,GAAE,OAAO;AAAA,EACvC,UAAUA,GAAE,OAAO;AAAA,EACnB,CAAC,iBAAc,GAAG;AAAA,EAClB,CAAC,mBAAkB,GAAG;AAAA,EACtB,CAAC,iBAAe,GAAGA,GAChB,OAAO;AAAA,IACN,QAAQA,GAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,SAASA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACtC,SAASA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACtC,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,CAAC,EACA,SAAS;AACd,CAAC;AAIM,IAAM,oBAAgC;AAAA,EAC3C,UAAU;AACZ;AAEO,IAAM,SAAN,MAAa;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EAEP,YAAY,QAAoB,UAA0B,KAAc;AACtE,SAAK,aAAa;AAClB,SAAK,WAAW;AAChB,SAAK,MAAM,OAAO,QAAQ,IAAI;AAAA,EAChC;AAAA,EAEA,aAAoB,KAAK,KAAc;AACrC,UAAM,SAAS,MAAM,UAAU,GAAG;AAClC,QAAI,OAAO,mBAAkB,GAAG;AAC9B,aAAO,iBAAc,IAAI,OAAO,mBAAkB;AAClD,aAAO,OAAO,mBAAkB;AAAA,IAClC;AACA,UAAM,WAAW,MAAM,kBAAkBJ,SAAQ,OAAO,IAAI,OAAO,QAAQ,CAAC;AAC5E,WAAO,IAAI,KAAK,QAAQ,UAAU,GAAG;AAAA,EACvC;AAAA,EAEA,WAAW,MAA4B;AApEzC;AAqEI,UAAM,cAAa,UAAK,WAAW,IAAI,MAApB,mBAAuB;AAC1C,UAAM,cAAY,UAAK,WAAW,IAAI,MAApB,mBAAuB,YAAW,CAAC;AACrD,QAAI,eAAe,OAAW,QAAO,CAAC,UAAU;AAChD,WAAO;AAAA,EACT;AAAA,EAEA,cAAc,MAAkB,UAAoC;AAClE,UAAM,UAAU,KAAK,WAAW,IAAI;AACpC,QAAI,CAAC,KAAK,SAAS,IAAI,EAAG,QAAO;AACjC,WAAO,QAAQ,IAAI,UAAQ;AACzB,aAAOA,SAAQ,KAAK,KAAK,MAAM,YAAY,EAAE;AAAA,IAC/C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,MAAkB,UAAkB,UAAmB;AACvE,UAAM,QAAQ,KAAK,cAAc,MAAM,QAAQ;AAC/C,QAAI,UAAU,KAAM,QAAO;AAC3B,UAAM,QAAQ;AAAA,MACZ,MAAM,IAAI,OAAM,SAAQ;AACtB,cAAM,UAAU,MAAM,QAAQ;AAC9B,YAAI,MAAM,aAAa,IAAI,YAAYD,UAAS,KAAK,KAAK,IAAI,CAAC,EAAE;AAAA,MACnE,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,MAAkB;AACzB,WAAO,KAAK,WAAW,IAAI,EAAE,SAAS;AAAA,EACxC;AAAA,EAEA,KAAK,MAAkB;AACrB,WAAO,KAAK,WAAW,IAAI;AAAA,EAC7B;AAAA,EAEA,IAAI,MAAM;AACR,WAAO,KAAK,WAAW,iBAAc;AAAA,EACvC;AAAA,EACA,IAAI,OAAO;AACT,WAAO,KAAK,WAAW,iBAAe;AAAA,EACxC;AAAA,EAEA,eAAe;AACb,WAAOC,SAAQ,KAAK,KAAK,KAAK,WAAW,QAAQ;AAAA,EACnD;AAAA,EAEA,iBAAiB,UAAkB;AACjC,UAAM,UAAUF,SAAQ,KAAK,aAAa,CAAC;AAC3C,WAAO,KAAK,SAAS,QAAQ;AAAA,EAC/B;AACF;AAEO,SAAS,eAAe,KAAc;AAC3C,SAAOE,SAAQ,OAAO,QAAQ,IAAI,GAAG,WAAW;AAClD;AAEA,eAAsB,WAAW,QAAoB;AACnD,QAAM,aAAa,UAAU,EAAE,GAAG,OAAO,CAAC;AAC1C,QAAM,UAAU,eAAe,GAAG,UAAU;AAC9C;AAGA,IAAI;AAEJ,eAAsB,UAAU,KAAmC;AACjE,MAAI,OAAO,kBAAkB,YAAa,QAAO;AACjD,QAAM,OAAO,eAAe,GAAG;AAC/B,MAAI,MAAM,WAAW,IAAI,GAAG;AAC1B,UAAM,OAAO,MAAME,UAAS,MAAM,OAAO;AACzC,UAAM,aAAaD,OAAM,IAAI;AAC7B,UAAM,cAAc,iBAAiB,UAAU,UAAU;AACzD,QAAI,YAAY,SAAS;AACvB,sBAAgB,YAAY;AAAA,IAC9B,OAAO;AACL,aAAO,MAAM,8BAA8B;AAC3C,kBAAY,MAAM,OAAO,QAAQ,OAAK;AACpC,eAAO,MAAM,GAAG,EAAE,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE;AAAA,MAClD,CAAC;AACD,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAAA,EACF,OAAO;AACL,oBAAgB;AAAA,EAClB;AACA,SAAO;AACT;;;AErJA,SAAS,mBAAAI,wBAAuB;AAChC,SAAS,YAAAC,WAAU,eAAe;AAIlC,eAAsB,aAAa;AAAA,EACjC;AAAA,EACA;AACF,GAGG;AACD,QAAM,OAAO,OAAO,4BAA0B;AAC9C,QAAM,WAAW,6BAAM;AACvB,MAAI,CAAC,UAAU;AACb,eAAW;AACX;AAAA,EACF;AACA,QAAM,cAAc,QAAQ,QAAQ;AACpC,MAAI,aAAa;AACf,QAAI,KAAK,sBAAsB,QAAQ,oDAAoD;AAAA,EAC7F;AACA,QAAM,WAAoC,OAAO;AAAA,KAC9C,KAAK,WAAW,CAAC,GAAG,IAAI,OAAK;AAC5B,aAAO,CAAC,GAAG,IAAI;AAAA,IACjB,CAAC;AAAA,EACH;AACA,MAAI,MAAM,6BAA6B,QAAQ,IAAI;AAEnD,QAAM,iBAAiB,OAAO,iCAA+B,IAAI,EAAG,CAAC;AACrE,QAAM,QAAQ,MAAM,QAAQ;AAAA,IAC1B,QAAQ,UAAU,IAAI,OAAM,aAAY;AAlC5C;AAmCM,YAAM,OAAOC,iBAAgB,SAAS,aAAa,KAAK;AACxD,UAAI,SAAS,IAAI,EAAG,QAAO;AAC3B,YAAM,UAAU,GAAG,IAAI;AAEvB,YAAM,mBAAkB,kBAAO,SAAS,cAAhB,mBAA4B,UAA5B,mBAAmC;AAC3D,UAAI;AAEJ,UAAI,iBAAiB;AACnB,cAAM,mBAAmB,OAAO,iBAAiB,eAAe;AAChE,uBAAeC,UAAS,gBAAgB,gBAAgB;AAAA,MAC1D,OAAO;AAEL,YAAI,MAAM,+DAA+D,IAAI,EAAE;AAAA,MACjF;AAEA,YAAM,KAAK,iBAAiB,EAAE,UAAU,aAAa,CAAC;AAItD,YAAM,OAAQ,MAAM,OAAO,+BAA6B,IAAI,OAAO;AACnE,aAAO,KAAK,CAAC;AAAA,IACf,CAAC;AAAA,EACH;AAEA,QAAM,SAAS,eAAe,SAAS,QAAQ;AAG/C,QAAM,MAAM,MAAM,OAAO,+BAA6B,QAAQ,WAAW,GAAI,CAAC,CAAC;AAC/E,QAAM,UAAU,MAAM;AACxB;AAEA,SAAS,aAAa;AACpB,MAAI;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,QAAQ;AAAA,EACV;AACF;;;ACzEA;AAAA,EAGE;AAAA,EACA,mBAAAC;AAAA,OACK;;;ACRP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,OACK;AAEP,SAAS,eAAAC,oBAAsD;AAExD,IAAM,oBAAoB,CAAC,KAAqB,aAAa,UAAkB;AACpF,MAAI,sBAAsB,GAAG,GAAG;AAC9B,QAAI,QAAQ,WAAW;AACrB,UAAI,WAAY,QAAO;AACvB,aAAO;AAAA,IACT,WAAW,QAAQ,UAAU;AAC3B,UAAI,WAAY,QAAO;AACvB,aAAO;AAAA,IACT,WAAW,QAAQ,QAAQ;AACzB,aAAO;AAAA,IACT,WAAW,QAAQ,aAAa;AAC9B,aAAO;AAAA,IACT,WAAW,QAAQ,QAAQ;AACzB,aAAO;AAAA,IACT,WAAW,QAAQ,mBAAmB;AACpC,aAAO;AAAA,IACT,OAAO;AACL,YAAM,IAAI,MAAM,0CAA0C,KAAK,UAAU,GAAG,CAAC,EAAE;AAAA,IACjF;AAAA,EACF,WAAW,mBAAmB,GAAG,GAAG;AAClC,WAAO;AAAA,EACT,WAAW,qBAAqB,GAAG,GAAG;AACpC,UAAM,KAAK,kBAAkB,IAAI,SAAS,IAAI,UAAU;AACxD,UAAM,MAAM,kBAAkB,IAAI,SAAS,OAAO,UAAU;AAC5D,WAAO,YAAY,EAAE,KAAK,GAAG;AAAA,EAC/B,WAAW,qBAAqB,GAAG,GAAG;AACpC,UAAM,YAAY,kBAAkB,IAAI,UAAU,UAAU;AAC5D,WAAO,GAAG,SAAS;AAAA,EACrB,WAAW,kBAAkB,GAAG,GAAG;AACjC,UAAM,YAAsB,CAAC;AAC7B,QAAI,MAAM,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM;AACpC,YAAM,YAAYA,aAAY,IAAI;AAClC,YAAM,YAAY,kBAAkB,MAAM,UAAU;AACpD,gBAAU,KAAK,IAAI,SAAS,MAAM,SAAS,GAAG;AAAA,IAChD,CAAC;AACD,WAAO;AAAA,IACP,UAAU,KAAK,MAAM,CAAC;AAAA;AAAA,EAExB,WAAW,iBAAiB,GAAG,GAAG;AAChC,UAAM,YAAY,kBAAkB,IAAI,KAAK,MAAM,UAAU;AAC7D,WAAO,GAAG,SAAS;AAAA,EACrB,WAAW,wBAAwB,GAAG,GAAG;AACvC,WAAO;AAAA,EACT,WAAW,uBAAuB,GAAG,GAAG;AACtC,WAAO;AAAA,EACT,WAAW,2BAA2B,GAAG,GAAG;AAC1C,WAAO;AAAA,EACT,OAAO;AACL,UAAM,IAAI,MAAM,gCAAgC,KAAK,UAAU,GAAG,CAAC,EAAE;AAAA,EACvE;AACF;AAEO,SAAS,WAAW,KAAoB;AAC7C,QAAM,aAAa,kBAAkB,IAAI,MAAM,IAAI;AACnD,QAAM,UAAU,WAAW,IAAI,IAAI;AACnC,SAAO,GAAG,OAAO,iBAAiB,UAAU,MAAM,OAAO;AAC3D;AAEO,SAAS,gBAAgB,aAAiC;AAC/D,QAAM,OAAO,YAAY,KAAK,IAAI,UAAU;AAC5C,QAAM,UAAU,kBAAkB,YAAY,QAAQ,IAAI;AAC1D,QAAM,YAAY,IAAI,KAAK,KAAK,IAAI,CAAC;AACrC,SAAO,oBAAoB,SAAS,KAAK,OAAO;AAClD;AAGO,SAAS,WAAW,MAAc;AACvC,QAAM,QAAQA,aAAY,IAAI;AAC9B,QAAM,SAAS,SAAS,KAAK,IAAI,MAAM;AACvC,SAAO,GAAG,MAAM,GAAG,KAAK;AAC1B;AAEA,SAAS,SAAS,OAAiB;AACjC,QAAM,IAA6B,CAAC;AACpC,aAAW,QAAQ,OAAO;AACxB,MAAE,IAAI,IAAI;AAAA,EACZ;AACA,SAAO;AACT;AAEA,IAAM,WAAW;AAAA;AAAA,EAEf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AACF;;;ACxIA,SAAS,eAAAC,oBAAuC;;;ACDzC,SAAS,qBAAqB,UAA4B;AAC/D,QAAM,iBAAiB,aAAa,QAAQ;AAC5C,QAAM,gBAAgB,OAAO;AAAA,IAC3B,eAAe,IAAI,OAAK;AACtB,YAAM,EAAE,MAAM,GAAG,KAAK,IAAI;AAC1B,aAAO,CAAC,MAAM,IAAI;AAAA,IACpB,CAAC;AAAA,EACH;AAEA,SAAO,KAAK,UAAU,aAAa;AACrC;AAIO,SAAS,aAAa,UAA8C;AACzE,QAAM,aAAa,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM;AAC9C,QAAI,EAAE,OAAO,EAAE,MAAM;AACnB,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,CAAC;AACD,SAAO;AACT;;;ACxBA,SAAS,mBAAAC,wBAAuB;AAIzB,SAAS,oBAAoB,SAAkB;AACpD,QAAM,cAAc,OAAO;AAAA,IACzB,cAAc,QAAQ,SAAS,EAAE,IAAI,OAAK;AACxC,YAAM,eAAeC,iBAAgB,EAAE,WAAW;AAClD,aAAO,CAAC,cAAc,EAAE,WAAW;AAAA,IACrC,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEO,SAAS,wBAAwB,SAAkB;AACxD,QAAM,cAAc,oBAAoB,OAAO;AAE/C,SAAO,8BAA8B,KAAK,UAAU,WAAW,CAAC;AAClE;;;AFZA,SAAS,eAA+B;AAEjC,SAAS,qBAAqB,UAA2B,WAAmB;AACjF,QAAM,MAAM,SAAS;AACrB,QAAM,gBAA0B,CAAC;AACjC,QAAM,EAAE,WAAW,MAAM,WAAW,qBAAqB,GAAG,KAAK,IAAI;AAErE,YAAU,QAAQ,UAAQ;AACxB,QAAI,eAAe,GAAGC,aAAY,KAAK,IAAI,CAAC;AAC5C,UAAM,UAAU,KAAK,UAAU,IAAI;AACnC,oBAAgB;AAChB,UAAM,eAAe,gBAAgB,IAAI;AACzC,oBAAgB,OAAO,YAAY;AACnC,kBAAc,KAAK,YAAY;AAAA,EACjC,CAAC;AAED,QAAM,WAAW,KAAK,IAAI,SAAO;AAC/B,QAAI,UAAU,GAAGA,aAAY,IAAI,IAAI,CAAC;AACtC,UAAM,UAAU,kBAAkB,IAAI,KAAK,IAAI;AAC/C,UAAM,UAAU,kBAAkB,IAAI,KAAK;AAC3C,eAAW,KAAK,UAAU,GAAG;AAC7B,eAAW,mBAAmB,OAAO,KAAK,OAAO;AACjD,WAAO;AAAA,EACT,CAAC;AAED,QAAM,WAAW,KAAK,UAAU,IAAI;AACpC,QAAM,eAAe,SAAS,YAAY,MAAM,GAAG,EAAE,CAAC;AAEtD,QAAM,gBAAgB,gBAAgB,SAAS;AAE/C,QAAM,WAAW,oBAAoB,IAAI,SAAO;AAC9C,WAAO,KAAK,UAAU,GAAG;AAAA,EAC3B,CAAC;AAED,SAAO;AAAA,IACL,eAAe,aAAa,aAAa,CAAC;AAAA,IAC1C,eAAe,QAAQ,QAAQ,CAAC;AAAA,IAChC,eAAe,aAAa,aAAa,CAAC;AAAA,eAC/B,SAAS;AAAA,IACpB,eAAe,uBAAuB,QAAQ,CAAC;AAAA,IAC/C,SAAS,MAAM,GAAG,EAAE,CAAC;AAAA,mBACN,YAAY;AAAA;AAE/B;AAEO,IAAM,eAAe;AAErB,SAAS,iBAAiB,SAA+B;AAC9D,QAAM,WAAW,QAAQ,UAAU,IAAI,CAAC,GAAG,OAAO;AAAA,IAChD,GAAG;AAAA,IACH,WAAW,QAAQ,UAAU,CAAC;AAAA,EAChC,EAAE;AACF,QAAM,eAAe,cAAc,QAAQ,EAAE,IAAI,cAAY;AAC3D,UAAM,OAAO,qBAAqB,UAAU,SAAS,SAAS;AAC9D,UAAM,KAAK,SAAS,YAAY,MAAM,GAAG,EAAE,CAAC;AAC5C,UAAM,UAAUA,aAAY,EAAE;AAC9B,WAAO,GAAG,OAAO,KAAK,IAAI;AAAA,EAC5B,CAAC;AAED,QAAM,OAAO;AAAA,EACb,YAAY;AAAA;AAAA;AAAA,IAGV,aAAa,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA,0BAGF,qBAAqB,QAAQ,QAAQ,CAAC;AAAA;AAAA,EAE9D,wBAAwB,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAShC,SAAO;AACT;AAEO,SAAS,gBAAgB,WAAiC;AAC/D,SAAO,UAAU,IAAI,OAAK;AACxB,QAAI,UAAU,GAAG,mBAAmB,EAAE,IAAI,CAAC;AAC3C,UAAM,OAAO,kBAAkB,EAAE,IAAI;AACrC,UAAM,UAAU,UAAU,CAAC;AAC3B,eAAW,GAAG,OAAO,wBAAwB,IAAI;AACjD,WAAO;AAAA,EACT,CAAC;AACH;AASA,WAAW,UAAU,QAAQ,MAAM,IAAI,SAAU,OAAe,SAAyB;AACvF,SAAO,oBAAoB,KAAK,KAAK,GAAG,CAAC;AAC3C;AAEO,SAAS,UAAU,KAAU;AAClC,SAAO,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA,IAIlB,YAAY;AAAA;AAAA,IAEZ,SAAS;AAAA;AAAA,IAET,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,kBAAkB;AAAA;AAAA,EAEpB,CAAC;AACH;AAEA,SAAS,eAAe,KAAa,OAAiB;AACpD,SAAO,IAAI,GAAG;AAAA,MACV,MAAM,KAAK,SAAS,CAAC;AAAA;AAE3B;AAEA,SAAS,eAAe,KAAa,OAAiB;AACpD,SAAO,IAAI,GAAG;AAAA,MACV,MAAM,KAAK,SAAS,CAAC;AAAA;AAE3B;;;AF7HO,SAAS,eAAe,UAA2B,QAAgB,SAAmB;AAC3F,QAAM,CAAC,QAAQ,IAAI,SAAS,YAAY,MAAM,GAAG;AACjD,QAAM,SAAS,GAAGC,iBAAgB,SAAS,WAAW,CAAC;AACvD,SAAO,MAAM,aAAa,SAAS,WAAW,iBAAiB;AAE/D,MAAI,CAAC,SAAS,QAAQ;AACpB,WAAO;AAAA,MACL,YAAYA,iBAAgB,SAAS,WAAW,CAAC;AAAA,IACnD;AACA,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,SAAS,mBAAmB,UAAU,WAAW,GAAG;AACtD,WAAO,KAAK,YAAYA,iBAAgB,SAAS,aAAa,KAAK,CAAC,mBAAmB;AACvF,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,QAAQ;AAAA;AAEZ,QAAM,WAAW,SAAS,mBAAmB,UAAU,IAAI,cAAY;AACrE,QAAI,UAAU,GAAG,SAAS,IAAI;AAC9B,QAAI,SAAS,WAAW,YAAY;AAClC,iBAAW,GAAG,SAAS,IAAI;AAAA,IAC7B,OAAO;AACL,iBAAW,YAAY,SAAS,IAAI;AAAA,IACtC;AACA,WAAO;AAAA,EACT,CAAC;AACD,WAAS,SAAS,IAAI,OAAK,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI;AAE9C,WAAS;AAET,QAAM,UAAU,SAAS,SAAS;AAAA;AAAA,EAAO,KAAK;AAC9C,MAAI;AACF,UAAM,UAAU,OAAO;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,QACE,gBAAgB;AAAA,MAClB;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,QAAQ;AAEvB,UAAM,UAA0C;AAAA,MAC9C,OAAO,CAAC;AAAA,IACV;AACA,aAAS,mBAAmB,UAAU,QAAQ,OAAK;AACjD,YAAM,KAAK;AACX,cAAQ,MAAM,KAAK;AAAA,QACjB,MAAM,GAAG;AAAA,QACT,MAAM,GAAG;AAAA,MACX,CAAC;AAAA,IACH,CAAC;AAED,QAAI,SAAS;AAIX,aAAO,KAAK,UAAU,QAAQ,IAAI,CAAC;AAAA,IACrC;AAIA,WAAO,UAAU,QAAQ,IAAI;AAAA,EAC/B,SAAS,OAAO;AACd,WAAO;AAAA,MACL,EAAE,KAAK,MAAM;AAAA,MACb,+BAA+BA,iBAAgB,SAAS,aAAa,KAAK,CAAC;AAAA,IAC7E;AAGA,WAAO,CAAC;AAAA,EACV;AACF;AAIO,SAAS,aAAa,SAAkB,QAAgB;AAC7D,SAAO,QAAQ,UAAU,IAAI,cAAY;AACvC,UAAM,OAAO,eAAe,UAAU,MAAM;AAC5C,WAAO,UAAU,IAAI;AAAA,EACvB,CAAC;AACH;;;AK9FA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,QAAAC,OAAM,WAAAC,UAAS,YAAAC,iBAAgB;AAExC,SAAS,SAAAC,cAAa;;;AC8Hf,SAAS,UAAiC,SAAqB;AAEpE,QAAM,MAAW,CAAC;AAClB,UAAQ,QAAQ,WAAS,IAAI,KAAK,GAAG,MAAM,YAAY,CAAC;AACxD,SAAO;AACT;AAEO,SAAS,eAAe,SAAsD;AACnF,QAAM,MAAM,UAAU,OAAO;AAC7B,SAAO,IAAI,OAAO,YAAY;AAChC;AAEO,SAAS,sBACd,cACA,YACqB;AACrB,QAAM,MAAqB,UAAU,WAAW,KAAK,OAA+B;AACpF,aAAW,MAAM,KAAK;AACpB,QAAI,CAAC,aAAa,EAAE,EAAG;AACvB,QAAI,yBAAyB,IAAI;AAC/B,YAAM,CAAC,GAAG,IAAI,IAAI,GAAG,qBAAqB,EAAE,aAAa,EAAE,MAAM,GAAG;AACpE,UAAI,SAAS,cAAc;AACzB,eAAO;AAAA,MACT;AAAA,IACF,WAAW,+BAA+B,IAAI;AAC5C,UAAI,GAAG,2BAA2B,EAAE,eAAe,MAAM,cAAc;AACrE,eAAO;AAAA,MACT;AAAA,IACF,WAAW,sBAAsB,IAAI;AACnC,YAAM,WAAW,GAAG,kBAAkB;AACtC,UAAI,SAAS,eAAe,MAAM,cAAc;AAC9C,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,QAAM,IAAI,MAAM,8CAA8C,YAAY,GAAG;AAC/E;AAEO,SAAS,oBAAoB,IAAiC;AACnE,MAAI,CAAC,aAAa,EAAE,GAAG;AACrB,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACnD;AACA,MAAI,yBAAyB,IAAI;AAC/B,WAAO,GAAG,qBAAqB,EAAE;AAAA,EACnC,WAAW,+BAA+B,IAAI;AAC5C,UAAM,WAAW,GAAG,2BAA2B;AAC/C,WAAO,SAAS;AAAA,EAClB,WAAW,sBAAsB,IAAI;AACnC,UAAM,WAAW,GAAG,kBAAkB;AACtC,WAAO,SAAS;AAAA,EAClB;AACA,QAAM,IAAI,MAAM,qCAAqC;AACvD;AAEO,SAAS,cAAc,IAAiC;AAC7D,MAAI,CAAC,aAAa,EAAE,GAAG;AACrB,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AACA,MAAI,yBAAyB,IAAI;AAC/B,UAAM,OAAO,GAAG,qBAAqB;AACrC,UAAM,CAAC,GAAG,IAAI,IAAI,KAAK,aAAa,EAAE,MAAM,GAAG;AAC/C,WAAO,GAAG,KAAK,cAAc,CAAC,IAAI,IAAI;AAAA,EACxC,WAAW,+BAA+B,IAAI;AAC5C,UAAM,WAAW,GAAG,2BAA2B;AAC/C,WAAO,GAAG,SAAS,iBAAiB,CAAC,IAAI,SAAS,eAAe,CAAC;AAAA,EACpE,WAAW,sBAAsB,IAAI;AACnC,UAAM,WAAW,GAAG,kBAAkB;AACtC,WAAO,GAAG,SAAS,iBAAiB,CAAC,IAAI,SAAS,eAAe,CAAC;AAAA,EACpE;AACA,QAAM,IAAI,MAAM,iCAAiC;AACnD;AAEO,SAAS,aAAa,IAA4C;AACvE,MAAI,mBAAmB,GAAI,QAAO;AAClC,MAAI,kBAAkB,GAAI,QAAO;AACjC,MAAI,4BAA4B,GAAI,QAAO;AAC3C,SAAO;AACT;;;ADhMA,SAAS,mBAAAC,wBAAuB;AAGhC,SAAS,SAAAC,cAAa;AAGtB,eAAsB,gBAAgB,MAAc;AAClD,QAAM,WAAW,MAAMC,UAAS,MAAM,OAAO;AAC7C,QAAM,SAASC,OAAM,QAAQ;AAC7B,SAAO;AACT;AAEO,IAAM,sBAAsB,CAAC,UAAU,UAAU,WAAW,SAAS;AAQ5E,eAAsB,eAAe,QAAyC;AAC5E,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC5B,oBAAoB,IAAI,OAAM,YAAW;AACvC,YAAM,OAAO,WAAW,OAAO;AAC/B,YAAM,OAAOC,MAAKC,SAAQ,OAAO,aAAa,CAAC,GAAG,eAAe,IAAI;AACrE,UAAI;AACJ,UAAI;AACF,eAAO,MAAM,gBAAgB,IAAI;AAAA,MACnC,SAAS,GAAG;AAAA,MAAC;AACb,aAAO,CAAC,SAAS,IAAI;AAAA,IACvB,CAAC;AAAA,EACH;AACA,SAAO,OAAO,YAAY,OAAO;AACnC;AAEA,eAAsB,gBAAgB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,cAAc,MAAM,eAAe,MAAM;AAC/C,QAAM,sBAAsB,2BAA2B,SAAS,aAAa,MAAM;AAEnF,QAAM,SAAS,mBAAmB,QAAQ,aAAa,OAAO;AAE9D,SAAO,GAAG,QAAQ;AAAA,6BACS,KAAK,UAAU,mBAAmB,CAAC;AAAA,EAC9D,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAMR;AAUA,SAAS,gBACP,aACA,YACA,SACA;AACA,QAAM,OAAOC,iBAAgB,UAAU;AACvC,MAAI,CAAC,YAAY,IAAI,GAAG;AAEtB;AAAA,EACF;AACA,MAAI,YAAY,IAAI,EAAE,OAAO,MAAM,MAAM;AACvC,gBAAY,IAAI,EAAE,OAAO,IAAI;AAAA,EAC/B;AACF;AAEO,SAAS,2BACd,SACA,aACA,QACyB;AApG3B;AAqGE,QAAM,OAAO,OAAO;AAAA,IAClB,cAAc,QAAQ,SAAS,EAAE,IAAI,cAAY;AAC/C,YAAM,eAAeA,iBAAgB,SAAS,WAAW;AACzD,YAAM,sBAAsB,OAAO;AAAA,QACjC,oBAAoB,IAAI,aAAW;AACjC,gBAAM,aAAa,YAAY,OAAO;AACtC,cAAI,OAAO,eAAe,aAAa;AACrC,mBAAO,CAAC,SAAS,IAAI;AAAA,UACvB;AACA,cAAI;AACF,kBAAMC,gBAAe,SAAS,YAAY,MAAM,GAAG,EAAE,CAAC;AACtD,kBAAM,KAAK,sBAAsBA,eAAc,UAAU;AACzD,kBAAM,KAAK,cAAc,EAAE;AAC3B,mBAAO,CAAC,SAAS,EAAE;AAAA,UACrB,SAAS,GAAG;AACV,mBAAO,CAAC,SAAS,IAAI;AAAA,UACvB;AAAA,QACF,CAAC;AAAA,MACH;AACA,aAAO,CAAC,cAAc,mBAAmB;AAAA,IAC3C,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,QAAQ,SAAS,KAAK,OAAK,EAAE,SAAS,UAAU;AAGjE,eAAO,SAAS,QAAQ,iBAAxB,mBAAsC,QAAQ,CAAC,EAAE,YAAY,MAAM;AACjE,oBAAgB,MAAM,aAAa,SAAS;AAC5C,UAAM,eAAe,YAAY,MAAM,GAAG,EAAE,CAAC;AAC7C,QAAI,UAAU;AACZ,YAAM,WAAW,GAAG,SAAS,OAAO,IAAI,YAAY;AACpD,sBAAgB,MAAM,UAAU,QAAQ;AAAA,IAC1C;AAAA,EACF;AAEA,UAAQ,UAAU,QAAQ,cAAY;AACpC,oBAAgB,MAAM,SAAS,aAAa,QAAQ;AACpD,oBAAgB,MAAM,SAAS,aAAa,QAAQ;AAAA,EACtD,CAAC;AAED,SAAO;AACT;AAEO,SAAS,uBACd,aACA,gBACA,KACA;AACA,MAAI,CAAC,YAAY,OAAQ,QAAO,CAAC;AACjC,QAAM,SAAS,YAAY;AAC3B,QAAM,MAAM,eAAe,OAAO,KAAK,OAA+B;AACtE,QAAM,UAAU,IAAI,IAAI,QAAM;AAC5B,UAAM,KAAK,cAAc,EAAE;AAC3B,UAAM,eAAe,oBAAoB,EAAE;AAC3C,WAAO;AAAA,MACL,YAAY;AAAA,MACZ,MAAMC,UAAS,KAAKJ,MAAK,gBAAgB,YAAY,CAAC;AAAA,IACxD;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAEA,SAAS,mBAAmB,QAAgB,aAA6B,UAAmB;AAnK5F;AAoKE,MAAI,GAAC,YAAO,QAAP,mBAAY,kBAAkB,QAAO;AAE1C,QAAM,iBAAiBC,SAAQ,OAAO,aAAa,CAAC;AAEpD,QAAM,QAAQ,uBAAuB,aAAa,gBAAgB,OAAO,GAAG;AAG5E,SAAO;AAAA,kCACyB,KAAK,UAAU,KAAK,CAAC;AAAA;AAQvD;AAEA,eAAsB,SAAS,QAA+B;AAtL9D;AAuLE,QAAM,WAAU,YAAO,QAAP,mBAAY;AAC5B,MAAI,CAAC,QAAS;AACd,SAAO,MAAM,8BAA8B,OAAO,EAAE;AACpD,QAAM,QAAQ,QAAQ,MAAM,GAAG;AAC/B,QAAM,CAAC,KAAK,GAAG,IAAI,IAAI;AACvB,SAAO,IAAI,QAAQ,CAACI,UAAS,WAAW;AACtC,UAAM,QAAQC,OAAM,KAAK,MAAM;AAAA,MAC7B,KAAK,OAAO;AAAA,MACZ,OAAO;AAAA,IACT,CAAC;AACD,UAAM,GAAG,SAAS,MAAM;AACxB,UAAM,GAAG,QAAQ,UAAQ;AACvB,UAAI,SAAS,GAAG;AACd,QAAAD,SAAQ;AAAA,MACV,OAAO;AACL,eAAO,IAAI,MAAM,4BAA4B,QAAQ,SAAS,EAAE,CAAC;AAAA,MACnE;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;","names":["getContractName","fn","v","arg","resolve","getContractName","z","dirname","relative","resolve","parse","readFile","OutputType","z","getContractName","relative","getContractName","relative","getContractName","toCamelCase","toCamelCase","getContractName","getContractName","toCamelCase","getContractName","readFile","join","dirname","relative","parse","getContractName","spawn","readFile","parse","join","dirname","getContractName","contractName","relative","resolve","spawn"]}
|
|
1
|
+
{"version":3,"sources":["../src/docs/markdown.ts","../src/logger.ts","../src/docs/index.ts","../src/utils.ts","../src/config.ts","../src/clarinet-config.ts","../src/files/docs.ts","../src/files/variables.ts","../src/declaration.ts","../src/files/base.ts","../src/files/accounts.ts","../src/files/identifiers.ts","../src/files/esm.ts","../src/deployments.ts"],"sourcesContent":["import type { Session, SessionContract } from '../session';\nimport { getContractName, getTypeString } from '@clarigen/core';\nimport {\n ClaridocContract,\n ClaridocFunction,\n ClaridocItem,\n ClaridocMap,\n ClaridocParam,\n ClaridocVariable,\n // Comments,\n createContractDocInfo,\n} from './index';\nimport { basename } from 'path';\nimport { sortContracts } from '../utils';\n\nexport function generateMarkdown({\n contract,\n contractFile,\n withToc = true,\n}: {\n contract: SessionContract;\n contractFile?: string;\n withToc?: boolean;\n}) {\n const contractName = getContractName(contract.contract_id, false);\n const doc = createContractDocInfo({\n contractSrc: contract.source,\n abi: contract.contract_interface,\n });\n\n const functions = doc.functions.map(fn => markdownFunction(fn, contractFile));\n const maps = doc.maps.map(map => markdownMap(map, contractFile));\n const vars = doc.variables\n .filter(v => v.abi.access === 'variable')\n .map(v => markdownVar(v, contractFile));\n const constants = doc.variables\n .filter(v => v.abi.access === 'constant')\n .map(v => markdownVar(v, contractFile));\n let fileLine = '';\n if (contractFile) {\n const fileName = basename(contractFile);\n fileLine = `\\n[\\`${fileName}\\`](${contractFile})`;\n }\n\n return `\n# ${contractName}\n${fileLine}\n\n${doc.comments.join('\\n\\n')}\n\n${withToc ? markdownTOC(doc) : ''}\n\n## Functions\n\n${functions.join('\\n\\n')}\n\n## Maps\n\n${maps.join('\\n\\n')}\n\n## Variables\n\n${vars.join('\\n\\n')}\n\n## Constants\n\n${constants.join('\\n\\n')}\n `;\n}\n\nexport function markdownFunction(fn: ClaridocFunction, contractFile?: string) {\n const params = mdParams(fn);\n const returnType = getTypeString(fn.abi.outputs.type);\n const paramSigs = fn.abi.args.map(arg => {\n return `(${arg.name} ${getTypeString(arg.type)})`;\n });\n\n const startLine = fn.startLine + 1;\n\n let link = '';\n if (contractFile) {\n link = `[View in file](${contractFile}#L${startLine})`;\n }\n\n const source = `<details>\n <summary>Source code:</summary>\n\n\\`\\`\\`clarity\n${fn.source.join('\\n')}\n\\`\\`\\`\n</details>\n`;\n\n const sig = `(define-${fn.abi.access.replace('_', '-')} (${fn.abi.name} (${paramSigs.join(\n ' '\n )}) ${returnType})`;\n\n return `### ${fn.abi.name}\n\n${link}\n\n\\`${sig}\\`\n\n${fn.comments.text.join('\\n')}\n\n${source}\n\n${params}`;\n}\n\nfunction mdParams(fn: ClaridocFunction) {\n if (fn.abi.args.length === 0) return '';\n const hasDescription = Object.values(fn.comments.params).some(p => p.comments.length > 0);\n const params = Object.values(fn.comments.params).map(p => markdownParam(p, hasDescription));\n // const hasDescription = params.some(p => p.includes('Description'));\n\n return `**Parameters:**\n\n| Name | Type | ${hasDescription ? 'Description |' : ''}\n| --- | --- | ${hasDescription ? '--- |' : ''}\n${params.join('\\n')}`;\n}\n\nfunction markdownParam(param: ClaridocParam, withDescription: boolean) {\n const typeString = getTypeString(param.abi.type);\n const base = `| ${param.abi.name} | ${typeString} |`;\n if (!withDescription) return base;\n return `${base} ${param.comments.join(' ')} |`;\n // return `| ${param.abi.name} | ${typeString} | ${param.comments.join(' ')} |`;\n}\n\nfunction markdownMap(map: ClaridocMap, contractFile?: string) {\n const startLine = map.startLine + 1;\n\n let link = '';\n if (contractFile) {\n link = `[View in file](${contractFile}#L${startLine})`;\n }\n\n return `### ${map.abi.name}\n\n${map.comments.text.join('\\n')}\n\n\\`\\`\\`clarity\n${map.source.join('\\n')}\n\\`\\`\\`\n\n${link}`;\n}\n\nfunction markdownVar(variable: ClaridocVariable, contractFile?: string) {\n const startLine = variable.startLine + 1;\n\n let link = '';\n if (contractFile) {\n link = `[View in file](${contractFile}#L${startLine})`;\n }\n\n const sig = variable.abi.access === 'variable' ? getTypeString(variable.abi.type) : '';\n\n return `### ${variable.abi.name}\n\n${sig}\n\n${variable.comments.text.join('\\n')}\n\n\\`\\`\\`clarity\n${variable.source.join('\\n')}\n\\`\\`\\`\n\n${link}`;\n}\n\nfunction markdownTOC(contract: ClaridocContract) {\n const publics = contract.functions.filter(fn => fn.abi.access === 'public');\n const readOnly = contract.functions.filter(fn => fn.abi.access === 'read_only');\n const privates = contract.functions.filter(fn => fn.abi.access === 'private');\n const maps = contract.maps;\n const constants = contract.variables.filter(v => v.abi.access === 'constant');\n const vars = contract.variables.filter(v => v.abi.access === 'variable');\n\n function tocLine(fn: ClaridocItem) {\n const name = fn.abi.name;\n return `- [\\`${name}\\`](#${name.toLowerCase().replaceAll('?', '')})`;\n }\n\n return `**Public functions:**\n\n${publics.map(tocLine).join('\\n')}\n\n**Read-only functions:**\n\n${readOnly.map(tocLine).join('\\n')}\n\n**Private functions:**\n\n${privates.map(tocLine).join('\\n')}\n\n**Maps**\n\n${maps.map(tocLine).join('\\n')}\n\n**Variables**\n\n${vars.map(tocLine).join('\\n')}\n\n**Constants**\n\n${constants.map(tocLine).join('\\n')}\n`;\n}\n\nexport function generateReadme(session: Session, excluded: Record<string, boolean>) {\n const contractLines: string[] = [];\n sortContracts(session.contracts).forEach(contract => {\n const name = getContractName(contract.contract_id, false);\n if (excluded[name]) return;\n const fileName = `${name}.md`;\n const line = `- [\\`${name}\\`](${fileName})`;\n contractLines.push(line);\n });\n const fileContents = `# Contracts\n\n${contractLines.join('\\n')}\n `;\n\n return fileContents;\n}\n\n// function md(strings: TemplateStringsArray, ..._values: any) {\n// const raw = String.raw({ raw: strings }, ..._values);\n// const fixed = raw.split('\\n').map((s) => s.trim()).join('\\n');\n// return fixed;\n// }\n","import { pino } from 'pino';\nimport pinoPretty from 'pino-pretty';\n\nexport const colorizedClarigen = `\\x1b[33m[Clarigen]\\x1b[0m`;\n\nexport const logger = pino(\n pinoPretty({\n colorize: true,\n ignore: 'pid,hostname,time',\n messageFormat: `${colorizedClarigen} {msg}`,\n minimumLevel: 'debug',\n })\n);\nlogger.level = 'info';\n\nexport const log = logger;\n","import {\n ClarityAbi,\n ClarityAbiArg,\n ClarityAbiFunction,\n ClarityAbiMap,\n ClarityAbiVariable,\n} from '@clarigen/core';\nimport { Config } from '../config';\nimport { logger } from '../logger';\nimport { spawn } from 'child_process';\n\nexport const FN_TYPES = ['read-only', 'public', 'private'] as const;\n\nexport const VAR_TYPES = ['map', 'data-var', 'constant'] as const;\n\ntype ClarityAbiItem = ClarityAbiFunction | ClarityAbiMap | ClarityAbiVariable;\n\ntype ClaridocItemType<T extends ClarityAbiItem> = {\n abi: T;\n comments: Comments;\n startLine: number;\n source: string[];\n};\n\nexport type ClaridocFunction = ClaridocItemType<ClarityAbiFunction>;\nexport type ClaridocMap = ClaridocItemType<ClarityAbiMap>;\nexport type ClaridocVariable = ClaridocItemType<ClarityAbiVariable>;\n\nexport interface ClaridocItem {\n abi: ClarityAbiItem;\n comments: Comments;\n startLine: number;\n source: string[];\n}\n// export type ClaridocItem = ClaridocFunction | ClaridocMap | ClaridocVariable;\n\nexport interface Comments {\n params: Record<string, ClaridocParam>;\n text: string[];\n}\n\nexport interface ClaridocContract {\n functions: ClaridocFunction[];\n maps: ClaridocMap[];\n variables: ClaridocVariable[];\n comments: string[];\n}\n\nexport interface ClaridocParam {\n abi: ClarityAbiArg;\n comments: string[];\n}\n\nexport function createContractDocInfo({\n contractSrc,\n abi,\n}: {\n contractSrc: string;\n abi: ClarityAbi;\n}): ClaridocContract {\n const lines = contractSrc.split('\\n');\n let comments: string[] = [];\n let parensCount = 0;\n let currentFn: ClaridocItem | undefined;\n // const functions: ClaridocFunction[] = [];\n const contract: ClaridocContract = {\n comments: [],\n functions: [],\n variables: [],\n maps: [],\n };\n lines.forEach((line, lineNumber) => {\n // Are we processing a function?\n if (currentFn) {\n currentFn.source.push(line);\n parensCount = traceParens(line, parensCount);\n if (parensCount === 0) {\n // end of fn\n pushItem(contract, currentFn);\n // contract.functions.push(currentFn);\n currentFn = undefined;\n }\n return;\n }\n // Are we gathering comments?\n if (isComment(line)) {\n const comment = line.replace(/^\\s*;;\\s*/g, '');\n if (contract.comments.length === lineNumber) {\n // Top-level contract comments\n contract.comments.push(comment);\n } else {\n // Aggregate for a function\n comments.push(comment);\n }\n return;\n }\n\n // Is this the start of a fn?\n // const name = getFnName(line);\n const name = findItemNameFromLine(line);\n if (typeof name === 'undefined') {\n // Not a comment or fn start, clear comments.\n comments = [];\n } else {\n // New function found.\n // const abiFn = abi.functions.find((fn) => {\n // return fn.name === name;\n // })\n const abiFn = findAbiItemByName(abi, name);\n if (!abiFn) {\n console.debug(`[claridoc]: Unable to find ABI for function \\`${name}\\`. Probably a bug.`);\n return;\n }\n parensCount = traceParens(line, 0);\n const metaComments = parseComments(comments, abiFn);\n currentFn = {\n abi: abiFn,\n comments: metaComments,\n startLine: lineNumber,\n source: [line],\n };\n if (parensCount === 0) {\n // end of fn - single line fn\n // contract.functions.push(currentFn);\n pushItem(contract, currentFn);\n currentFn = undefined;\n }\n comments = [];\n }\n });\n return contract;\n}\n\nfunction pushItem(contract: ClaridocContract, item: ClaridocItem) {\n if ('args' in item.abi) {\n contract.functions.push(item as ClaridocFunction);\n } else if ('key' in item.abi) {\n contract.maps.push(item as ClaridocMap);\n } else if ('access' in item.abi) {\n contract.variables.push(item as ClaridocVariable);\n }\n}\n\nfunction clarityNameMatcher(line: string) {\n return /[\\w|\\-|\\?|\\!]+/.exec(line);\n}\n\nfunction findItemNameFromLine(line: string): string | undefined {\n const fnType = FN_TYPES.find(type => {\n return line.startsWith(`(define-${type}`);\n });\n if (fnType) {\n const prefix = `(define-${fnType} (`;\n const startString = line.slice(prefix.length);\n const match = clarityNameMatcher(startString);\n if (!match) {\n console.debug(`[claridocs]: Unable to determine function name from line:\\n \\`${line}\\``);\n return;\n }\n return match[0];\n }\n for (const type of VAR_TYPES) {\n const prefix = `(define-${type} `;\n if (!line.startsWith(prefix)) continue;\n\n const startString = line.slice(prefix.length);\n const match = clarityNameMatcher(startString);\n if (!match) {\n console.debug(`[claridocs]: Unable to determine ${type} name from line:\\n \\`${line}\\``);\n return;\n }\n return match[0];\n }\n return undefined;\n}\n\nfunction findAbiItemByName(abi: ClarityAbi, name: string): ClarityAbiItem | undefined {\n const fn = abi.functions.find(fn => {\n return fn.name === name;\n });\n if (fn) return fn;\n const map = abi.maps.find(m => m.name === name);\n if (map) return map;\n const v = abi.variables.find(v => v.name === name);\n return v;\n}\n\nexport function isComment(line: string) {\n return line.startsWith(';;');\n}\n\nexport function getFnName(line: string) {\n const fnType = FN_TYPES.find(type => {\n return line.startsWith(`(define-${type}`);\n });\n if (typeof fnType === 'undefined') return;\n const prefix = `(define-${fnType} (`;\n const startString = line.slice(prefix.length);\n const match = clarityNameMatcher(startString);\n if (!match) {\n console.debug(`[claridocs]: Unable to determine function name from line:\\n \\`${line}\\``);\n return;\n }\n return match[0];\n}\n\nexport function traceParens(line: string, count: number) {\n let newCount = count;\n line.split('').forEach(char => {\n if (char === '(') newCount++;\n if (char === ')') newCount--;\n });\n return newCount;\n}\n\nexport function parseComments(comments: string[], abi: ClarityAbiItem): Comments {\n // const params: Record<string, ClaridocParam> = {};\n let curParam: string | undefined;\n // const newComments: string[] = [];\n const parsed: Comments = {\n text: [],\n params: {},\n };\n comments.forEach(line => {\n const paramMatches = /\\s*@param\\s([\\w|\\-]+)([;|-|\\s]*)(.*)/.exec(line);\n\n if (paramMatches === null) {\n if (!curParam || line.trim() === '') {\n curParam = undefined;\n parsed.text.push(line);\n } else {\n parsed.params[curParam].comments.push(line);\n }\n return;\n }\n\n if (!('args' in abi)) return;\n const [_full, name, _separator, rest] = paramMatches;\n const arg = abi.args.find(arg => arg.name === name);\n if (!arg) {\n console.debug(`[claridocs]: Unable to find ABI for @param ${name}`);\n return;\n }\n curParam = name;\n parsed.params[curParam] = {\n abi: arg,\n comments: [rest],\n };\n });\n\n if ('args' in abi) {\n abi.args.forEach(arg => {\n if (!parsed.params[arg.name]) {\n parsed.params[arg.name] = {\n abi: arg,\n comments: [],\n };\n }\n });\n }\n\n return parsed;\n}\n\nexport async function afterDocs(config: Config): Promise<void> {\n const command = config.docs?.after;\n if (!command) return;\n logger.debug(`Running after docs command: ${command}`);\n const parts = command.split(' ');\n const [cmd, ...args] = parts;\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n cwd: config.cwd,\n stdio: 'inherit',\n });\n child.on('error', reject);\n child.on('exit', code => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with code ${code ?? 'unknown'}`));\n }\n });\n });\n}\n","// import { dirname, relative, resolve } from '../deps.ts';\nimport { getContractName, toCamelCase } from '@clarigen/core';\n// export { getContractName, toCamelCase, toKebabCase } from '@clarigen/core';\nimport { stat, mkdir, writeFile as fsWriteFile } from 'fs/promises';\nimport { dirname, resolve, relative } from 'path';\n\nexport function encodeVariableName(name: string) {\n if (/^[A-Z\\-_]*$/.test(name)) return name.replaceAll('-', '_');\n return toCamelCase(name);\n}\n\nexport async function fileExists(filename: string): Promise<boolean> {\n try {\n await stat(filename);\n // successful, file or directory must exist\n return true;\n } catch (error) {\n return false;\n // if (error.code === 'ENOENT') {\n // // file or directory does not exist\n // return false;\n // } else {\n // // unexpected error, maybe permissions, pass it along\n // throw error;\n // }\n }\n}\n\nexport async function writeFile(path: string, contents: string) {\n const dir = dirname(path);\n await mkdir(dir, { recursive: true });\n await fsWriteFile(path, contents, 'utf-8');\n return path;\n}\n\nexport function cwdRelative(path: string) {\n return relative(process.cwd(), path);\n}\n\n// Sort contracts alphabetically by their contract name.\n// Used to preserve ordering when generating files\nexport function sortContracts<T extends { contract_id: string }>(contracts: T[]): T[] {\n const nameSorted = [...contracts].sort((a, b) => {\n if (getContractName(a.contract_id, false) < getContractName(b.contract_id, false)) {\n return -1;\n }\n return 1;\n });\n return nameSorted;\n}\n","import { type } from 'arktype';\nimport { log, logger } from './logger';\nimport { fileExists, writeFile } from './utils';\nimport { ClarinetConfig, getClarinetConfig } from './clarinet-config';\nimport { dirname, join, relative, resolve } from 'path';\nimport { stringify, parse } from '@iarna/toml';\nimport { readFile } from 'fs/promises';\n\nexport const CONFIG_FILE = 'Clarigen.toml' as const;\n\nexport enum OutputType {\n ESM = 'types',\n ESM_OLD = 'esm',\n Docs = 'docs',\n}\n\nconst typesSchema = type({\n 'output?': type('string').describe('Path to the output file'),\n 'outputs?': type('string[]').describe('Paths to the output files'),\n 'include_accounts?': type('boolean').describe('Include accounts in the output'),\n 'after?': type('string').describe('Script to run after the output is generated'),\n 'include_boot_contracts?': type('boolean').describe('Include boot contracts in the output'),\n 'watch_folders?': type('string[]').describe('Folders to watch for changes'),\n}).optional();\n\nexport const ConfigFile = type({\n clarinet: type('string').describe('Path to the Clarinet config file'),\n [OutputType.ESM]: typesSchema,\n [OutputType.ESM_OLD]: typesSchema,\n [OutputType.Docs]: type({\n 'output?': type('string').describe('Path to docs output folder. Defaults to ./docs'),\n 'outputs?': type('string[]').describe('Paths to docs output folders'),\n 'exclude?': type('string[]').describe('Contracts to exclude from docs generation'),\n 'after?': type('string').describe('Script to run after docs are generated'),\n }).optional(),\n});\n\nexport type ConfigFile = typeof ConfigFile.infer;\n\nexport const defaultConfigFile: ConfigFile = {\n clarinet: './Clarinet.toml',\n};\n\nexport class Config {\n public configFile: ConfigFile;\n public clarinet: ClarinetConfig;\n public cwd: string;\n\n constructor(config: ConfigFile, clarinet: ClarinetConfig, cwd?: string) {\n this.configFile = config;\n this.clarinet = clarinet;\n this.cwd = cwd ?? process.cwd();\n }\n\n public static async load(cwd?: string) {\n const config = await getConfig(cwd);\n if (config[OutputType.ESM_OLD]) {\n config[OutputType.ESM] = config[OutputType.ESM_OLD];\n delete config[OutputType.ESM_OLD];\n }\n const clarinet = await getClarinetConfig(resolve(cwd ?? '', config.clarinet));\n return new this(config, clarinet, cwd);\n }\n\n getOutputs(type: OutputType): string[] {\n const singlePath = this.configFile[type]?.output;\n const multiPath = this.configFile[type]?.outputs || [];\n if (singlePath !== undefined) return [singlePath];\n return multiPath;\n }\n\n outputResolve(type: OutputType, filePath?: string): string[] | null {\n const outputs = this.getOutputs(type);\n if (!this.supports(type)) return null;\n return outputs.map(path => {\n return resolve(this.cwd, path, filePath || '');\n });\n }\n\n async writeOutput(type: OutputType, contents: string, filePath?: string) {\n const paths = this.outputResolve(type, filePath);\n if (paths === null) return null;\n await Promise.all(\n paths.map(async path => {\n await writeFile(path, contents);\n log.debug(`Generated ${type} file at ${relative(this.cwd, path)}`);\n })\n );\n return paths;\n }\n\n supports(type: OutputType) {\n return this.getOutputs(type).length > 0;\n }\n\n type(type: OutputType) {\n return this.configFile[type];\n }\n\n get esm() {\n return this.configFile[OutputType.ESM];\n }\n get docs() {\n return this.configFile[OutputType.Docs];\n }\n\n clarinetFile() {\n return resolve(this.cwd, this.configFile.clarinet);\n }\n\n joinFromClarinet(filePath: string) {\n const baseDir = dirname(this.clarinetFile());\n return join(baseDir, filePath);\n }\n}\n\nexport function configFilePath(cwd?: string) {\n return resolve(cwd ?? process.cwd(), CONFIG_FILE);\n}\n\nexport async function saveConfig(config: ConfigFile) {\n const configToml = stringify({ ...config });\n await writeFile(configFilePath(), configToml);\n}\n\n// memoize / singleton\nlet sessionConfig: ConfigFile | undefined;\n\nexport async function getConfig(cwd?: string): Promise<ConfigFile> {\n if (typeof sessionConfig !== 'undefined') return sessionConfig;\n const path = configFilePath(cwd);\n if (await fileExists(path)) {\n const toml = await readFile(path, 'utf-8');\n const parsedToml = parse(toml);\n const parsed = ConfigFile(parsedToml);\n if (parsed instanceof type.errors) {\n logger.error(`Error parsing Clarigen config: ${parsed.summary}`);\n throw new Error(`Error parsing Clarigen config: ${parsed.summary}`);\n }\n sessionConfig = parsed;\n } else {\n sessionConfig = defaultConfigFile;\n }\n return sessionConfig;\n}\n","import { type } from 'arktype';\nimport { readFile } from 'fs/promises';\nimport { parse } from '@iarna/toml';\n\nexport const ClarinetConfig = type({\n project: type({\n requirements: type({\n contract_id: type('string').describe('Contract ID'),\n })\n .array()\n .describe('Project requirements')\n .optional(),\n cache_location: type({\n path: type('string').describe('Cache location path'),\n }).optional(),\n }),\n contracts: type({\n '[string]': type({\n path: type('string').describe('Contract path'),\n }),\n }).optional(),\n});\n\nexport type ClarinetConfig = typeof ClarinetConfig.infer;\n\nexport async function getClarinetConfig(path: string): Promise<ClarinetConfig> {\n const file = await readFile(path, 'utf-8');\n const config = ClarinetConfig.assert(parse(file));\n return config;\n}\n","import { SessionWithVariables } from '../session';\nimport { Config, OutputType } from '../config';\nimport { log } from '../logger';\nimport { getContractName } from '@clarigen/core';\nimport { relative, extname } from 'path';\nimport { generateMarkdown, generateReadme } from '../docs/markdown';\nimport { afterDocs } from '../docs';\n\nexport async function generateDocs({\n session,\n config,\n}: {\n session: SessionWithVariables;\n config: Config;\n}) {\n const docs = config.configFile[OutputType.Docs];\n const docsBase = docs?.output;\n if (!docsBase) {\n warnNoDocs();\n return;\n }\n const docsPathExt = extname(docsBase);\n if (docsPathExt) {\n log.warn(`Docs output path ('${docsBase}') looks like a file - it needs to be a directory.`);\n }\n const excluded: Record<string, boolean> = Object.fromEntries(\n (docs.exclude || []).map(e => {\n return [e, true];\n })\n );\n log.debug(`Generating docs at path \\`${docsBase}\\``);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const docsBaseFolder = config.outputResolve(OutputType.Docs, './')![0];\n const paths = await Promise.all(\n session.contracts.map(async contract => {\n const name = getContractName(contract.contract_id, false);\n if (excluded[name]) return null;\n const docFile = `${name}.md`;\n // location of\n const contractPathDef = config.clarinet.contracts?.[name]?.path;\n let contractFile: string | undefined;\n // if we have the contract file, make a relative link\n if (contractPathDef) {\n const contractPathFull = config.joinFromClarinet(contractPathDef);\n contractFile = relative(docsBaseFolder, contractPathFull);\n } else {\n // TODO: probably a requirement\n log.debug(`Couldn't find contract file from Clarinet.toml for contract ${name}`);\n }\n\n const md = generateMarkdown({ contract, contractFile });\n\n // log.debug(`Writing docs markdown file at ${cwdRelative(docPathFull)}`);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const path = (await config.writeOutput(OutputType.Docs, md, docFile))!;\n return path[0];\n })\n );\n\n const readme = generateReadme(session, excluded);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n paths.push((await config.writeOutput(OutputType.Docs, readme, 'README.md'))![0]);\n await afterDocs(config);\n}\n\nfunction warnNoDocs() {\n log.warn(\n `\\nClarigen config file doesn't include an output directory for docs.\n\nTo generate docs, specify 'docs.output' in your config file:\n\n[docs]\noutput = \"docs/\"\n `.trimEnd()\n );\n}\n","import type { Simnet } from '@hirosystems/clarinet-sdk';\nimport { logger } from '../logger';\nimport { Session, SessionContract } from '../session';\nimport {\n ClarityAbiTypeTuple,\n ClarityAbiVariable,\n cvToValue,\n getContractName,\n} from '@clarigen/core';\nimport { serialize } from './base';\n\nexport function getVariablesV2(contract: SessionContract, simnet: Simnet, verbose?: boolean) {\n const [deployer] = contract.contract_id.split('.');\n const fakeId = `${getContractName(contract.contract_id)}-vars`;\n logger.debug(`Deploying ${contract.contract_id} for variables.`);\n\n if (!contract.source) {\n logger.debug(\n `Contract ${getContractName(contract.contract_id)} has no source. Skipping variables.`\n );\n return {};\n }\n\n if (contract.contract_interface.variables.length === 0) {\n logger.info(`Contract ${getContractName(contract.contract_id, false)} has no variables`);\n return {};\n }\n\n let varFn = `{\\n`;\n\n const varLines = contract.contract_interface.variables.map(variable => {\n let varLine = `${variable.name}: `;\n if (variable.access === 'constant') {\n varLine += `${variable.name}`;\n } else {\n varLine += `(var-get ${variable.name})`;\n }\n return varLine;\n });\n varFn += varLines.map(l => ` ${l},`).join('\\n');\n\n varFn += '\\n}';\n\n const fullSrc = contract.source + `\\n\\n${varFn}`;\n try {\n const receipt = simnet.deployContract(\n fakeId,\n fullSrc,\n {\n clarityVersion: 3,\n },\n deployer\n );\n const result = receipt.result;\n\n const varsAbi: Writeable<ClarityAbiTypeTuple> = {\n tuple: [],\n };\n contract.contract_interface.variables.forEach(v => {\n const _v = v as unknown as Writeable<ClarityAbiVariable>;\n varsAbi.tuple.push({\n type: _v.type,\n name: _v.name,\n });\n });\n\n if (verbose) {\n // const cv = cvConvertHiro(result);\n // console.log('cv', cv);\n // console.log(esCvToValue(cvConvertHiro(result), true));\n logger.info(cvToValue(result, true));\n }\n\n // return esCvToValue(cvConvertHiro(result), true);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return cvToValue(result, true);\n } catch (error) {\n logger.warn(\n { err: error },\n `Error getting variables for ${getContractName(contract.contract_id, false)}`\n );\n // logger.error(`Source code: ${contract.source} with type ${String(typeof contract.source)}`);\n // logger.error(fullSrc);\n return {};\n }\n}\n\ntype Writeable<T> = { -readonly [P in keyof T]: Writeable<T[P]> };\n\nexport function mapVariables(session: Session, simnet: Simnet) {\n return session.contracts.map(contract => {\n const vars = getVariablesV2(contract, simnet);\n return serialize(vars);\n });\n}\n","import {\n isClarityAbiBuffer,\n isClarityAbiList,\n isClarityAbiOptional,\n isClarityAbiPrimitive,\n isClarityAbiResponse,\n isClarityAbiStringAscii,\n isClarityAbiStringUtf8,\n isClarityAbiTuple,\n ClarityAbiType,\n ClarityAbiTypeTraitReference,\n isClarityAbiTraitReference,\n} from '@clarigen/core';\n// import { ClarityAbiArg, ClarityAbiFunction, ClarityAbiType } from '../types.ts';\nimport { toCamelCase, ClarityAbiArg, ClarityAbiFunction } from '@clarigen/core';\n\nexport const jsTypeFromAbiType = (val: ClarityAbiType, isArgument = false): string => {\n if (isClarityAbiPrimitive(val)) {\n if (val === 'uint128') {\n if (isArgument) return 'number | bigint';\n return 'bigint';\n } else if (val === 'int128') {\n if (isArgument) return 'number | bigint';\n return 'bigint';\n } else if (val === 'bool') {\n return 'boolean';\n } else if (val === 'principal') {\n return 'string';\n } else if (val === 'none') {\n return 'null';\n } else if (val === 'trait_reference') {\n return 'string';\n } else {\n throw new Error(`Unexpected Clarity ABI type primitive: ${JSON.stringify(val)}`);\n }\n } else if (isClarityAbiBuffer(val)) {\n return 'Uint8Array';\n } else if (isClarityAbiResponse(val)) {\n const ok = jsTypeFromAbiType(val.response.ok, isArgument);\n const err = jsTypeFromAbiType(val.response.error, isArgument);\n return `Response<${ok}, ${err}>`;\n } else if (isClarityAbiOptional(val)) {\n const innerType = jsTypeFromAbiType(val.optional, isArgument);\n return `${innerType} | null`;\n } else if (isClarityAbiTuple(val)) {\n const tupleDefs: string[] = [];\n val.tuple.forEach(({ name, type }) => {\n const camelName = toCamelCase(name);\n const innerType = jsTypeFromAbiType(type, isArgument);\n tupleDefs.push(`\"${camelName}\": ${innerType};`);\n });\n return `{\n ${tupleDefs.join('\\n ')}\n}`;\n } else if (isClarityAbiList(val)) {\n const innerType = jsTypeFromAbiType(val.list.type, isArgument);\n return `${innerType}[]`;\n } else if (isClarityAbiStringAscii(val)) {\n return 'string';\n } else if (isClarityAbiStringUtf8(val)) {\n return 'string';\n } else if (isClarityAbiTraitReference(val)) {\n return 'string';\n } else {\n throw new Error(`Unexpected Clarity ABI type: ${JSON.stringify(val)}`);\n }\n};\n\nexport function abiArgType(arg: ClarityAbiArg) {\n const nativeType = jsTypeFromAbiType(arg.type, true);\n const argName = getArgName(arg.name);\n return `${argName}: TypedAbiArg<${nativeType}, \"${argName}\">`;\n}\n\nexport function abiFunctionType(abiFunction: ClarityAbiFunction) {\n const args = abiFunction.args.map(abiArgType);\n const retType = jsTypeFromAbiType(abiFunction.outputs.type);\n const argsTuple = `[${args.join(', ')}]`;\n return `TypedAbiFunction<${argsTuple}, ${retType}>`;\n}\n\n// Check if it's a reserved word, and then camelCase\nexport function getArgName(name: string) {\n const camel = toCamelCase(name);\n const prefix = RESERVED[camel] ? '_' : '';\n return `${prefix}${camel}`;\n}\n\nfunction _hash(...words: string[]) {\n const h: Record<string, boolean> = {};\n for (const word of words) {\n h[word] = true;\n }\n return h;\n}\n\nconst RESERVED = _hash(\n // Keywords, ES6 11.6.2.1, http://www.ecma-international.org/ecma-262/6.0/index.html#sec-keywords\n 'break',\n 'do',\n 'in',\n 'typeof',\n 'case',\n 'else',\n 'instanceof',\n 'var',\n 'catch',\n 'export',\n 'new',\n 'void',\n 'class',\n 'extends',\n 'return',\n 'while',\n 'const',\n 'finally',\n 'super',\n 'with',\n 'continue',\n 'for',\n 'switch',\n 'yield',\n 'debugger',\n 'function',\n 'this',\n 'default',\n 'if',\n 'throw',\n 'delete',\n 'import',\n 'try',\n // Future Reserved Words, ES6 11.6.2.2\n // http://www.ecma-international.org/ecma-262/6.0/index.html#sec-future-reserved-words\n 'enum',\n 'await',\n // NullLiteral & BooleanLiteral\n 'null',\n 'true',\n 'false'\n);\n","import { abiFunctionType, jsTypeFromAbiType } from '../declaration';\nimport type { SessionContract, SessionWithVariables } from '../session';\nimport { encodeVariableName, sortContracts } from '../utils';\nimport { toCamelCase, ClarityAbiVariable } from '@clarigen/core';\nimport { generateAccountsCode } from './accounts';\nimport { generateIdentifiersCode } from './identifiers';\nimport { inspect, InspectOptions } from 'util';\n\nexport function generateContractMeta(contract: SessionContract, constants: string) {\n const abi = contract.contract_interface;\n const functionLines: string[] = [];\n const { functions, maps, variables, non_fungible_tokens, ...rest } = abi;\n\n functions.forEach(func => {\n let functionLine = `${toCamelCase(func.name)}: `;\n const funcDef = JSON.stringify(func);\n functionLine += funcDef;\n const functionType = abiFunctionType(func);\n functionLine += ` as ${functionType}`;\n functionLines.push(functionLine);\n });\n\n const mapLines = maps.map(map => {\n let mapLine = `${toCamelCase(map.name)}: `;\n const keyType = jsTypeFromAbiType(map.key, true);\n const valType = jsTypeFromAbiType(map.value);\n mapLine += JSON.stringify(map);\n mapLine += ` as TypedAbiMap<${keyType}, ${valType}>`;\n return mapLine;\n });\n\n const otherAbi = JSON.stringify(rest);\n const contractName = contract.contract_id.split('.')[1];\n\n const variableLines = encodeVariables(variables);\n\n const nftLines = non_fungible_tokens.map(nft => {\n return JSON.stringify(nft);\n });\n\n return `{\n ${serializeLines('functions', functionLines)}\n ${serializeLines('maps', mapLines)}\n ${serializeLines('variables', variableLines)}\n constants: ${constants},\n ${serializeArray('non_fungible_tokens', nftLines)}\n ${otherAbi.slice(1, -1)},\n contractName: '${contractName}',\n }`;\n}\n\nexport const TYPE_IMPORTS = `import type { TypedAbiArg, TypedAbiFunction, TypedAbiMap, TypedAbiVariable, Response } from '@clarigen/core';`;\n\nexport function generateBaseFile(session: SessionWithVariables) {\n const combined = session.contracts.map((c, i) => ({\n ...c,\n constants: session.variables[i],\n }));\n const contractDefs = sortContracts(combined).map(contract => {\n const meta = generateContractMeta(contract, contract.constants);\n const id = contract.contract_id.split('.')[1];\n const keyName = toCamelCase(id);\n return `${keyName}: ${meta}`;\n });\n\n const file = `\n${TYPE_IMPORTS}\n\nexport const contracts = {\n ${contractDefs.join(',\\n')}\n} as const;\n\nexport const accounts = ${generateAccountsCode(session.accounts)} as const;\n\n${generateIdentifiersCode(session)}\n\nexport const simnet = {\n accounts,\n contracts,\n identifiers,\n} as const;\n\n`;\n return file;\n}\n\nexport function encodeVariables(variables: ClarityAbiVariable[]) {\n return variables.map(v => {\n let varLine = `${encodeVariableName(v.name)}: `;\n const type = jsTypeFromAbiType(v.type);\n const varJSON = serialize(v);\n varLine += `${varJSON} as TypedAbiVariable<${type}>`;\n return varLine;\n });\n}\n\n// Extend the Uint8Array prototype in TypeScript to include util.inspect.custom\ndeclare global {\n interface Uint8Array {\n [inspect.custom](depth: number, options: InspectOptions): string;\n }\n}\n\nUint8Array.prototype[inspect.custom] = function (depth: number, options: InspectOptions) {\n return `Uint8Array.from([${this.join(',')}])`;\n};\n\nexport function serialize(obj: any) {\n return inspect(obj, {\n // showHidden: false,\n // depth: 100,\n // colors: false,\n showHidden: false,\n // iterableLimit: 100000,\n compact: false,\n // trailingComma: true,\n depth: 100,\n colors: false,\n maxArrayLength: Infinity,\n maxStringLength: Infinity,\n breakLength: Infinity,\n numericSeparator: true,\n // strAbbreviateSize: 100000,\n });\n}\n\nfunction serializeLines(key: string, lines: string[]) {\n return `\"${key}\": {\n ${lines.join(',\\n ')}\n },`;\n}\n\nfunction serializeArray(key: string, lines: string[]) {\n return `\"${key}\": [\n ${lines.join(',\\n ')}\n ],`;\n}\n","import { Session, SessionAccount } from '../session';\n\nexport function generateAccountsCode(accounts: SessionAccount[]) {\n const sortedAccounts = sortAccounts(accounts);\n const namedAccounts = Object.fromEntries(\n sortedAccounts.map(a => {\n const { name, ...rest } = a;\n return [name, rest];\n })\n );\n // return `export const accounts = ${JSON.stringify(namedAccounts)} as const;`;\n return JSON.stringify(namedAccounts);\n}\n\n// Sort accounts alphabetically by their name.\n// Used to preserve ordering when generating files\nexport function sortAccounts(accounts: SessionAccount[]): SessionAccount[] {\n const nameSorted = [...accounts].sort((a, b) => {\n if (a.name < b.name) {\n return -1;\n }\n return 1;\n });\n return nameSorted;\n}\n","import { getContractName } from '@clarigen/core';\nimport { Session } from '../session';\nimport { sortContracts } from '../utils';\n\nexport function generateIdentifiers(session: Session) {\n const identifiers = Object.fromEntries(\n sortContracts(session.contracts).map(c => {\n const contractName = getContractName(c.contract_id);\n return [contractName, c.contract_id];\n })\n );\n return identifiers;\n}\n\nexport function generateIdentifiersCode(session: Session) {\n const identifiers = generateIdentifiers(session);\n\n return `export const identifiers = ${JSON.stringify(identifiers)} as const`;\n}\n","import { readFile } from 'fs/promises';\nimport { join, dirname, relative } from 'path';\nimport { Config } from '../config';\nimport { parse } from 'yaml';\nimport {\n Batch,\n DeploymentPlan,\n getContractTxs,\n getDeploymentContract,\n getDeploymentTxPath,\n getIdentifier,\n SimnetDeploymentPlan,\n Transaction,\n} from '../deployments';\nimport { getContractName } from '@clarigen/core';\nimport { cwdRelative, sortContracts } from '../utils';\nimport { Session } from '../session';\nimport { spawn } from 'child_process';\nimport { logger } from '../logger';\n\nexport async function parseDeployment(path: string) {\n const contents = await readFile(path, 'utf-8');\n const parsed = parse(contents);\n return parsed as Plan;\n}\n\nexport const DEPLOYMENT_NETWORKS = ['devnet', 'simnet', 'testnet', 'mainnet'] as const;\nexport type DeploymentNetwork = (typeof DEPLOYMENT_NETWORKS)[number];\n\ntype Plan = DeploymentPlan | undefined;\ntype DeploymentsMap = {\n [key in DeploymentNetwork]: Plan;\n};\n\nexport async function getDeployments(config: Config): Promise<DeploymentsMap> {\n const entries = await Promise.all(\n DEPLOYMENT_NETWORKS.map(async network => {\n const file = `default.${network}-plan.yaml`;\n const path = join(dirname(config.clarinetFile()), 'deployments', file);\n let plan: Plan;\n try {\n plan = await parseDeployment(path);\n } catch (_) {}\n return [network, plan] as [DeploymentNetwork, Plan];\n })\n );\n return Object.fromEntries(entries) as DeploymentsMap;\n}\n\nexport async function generateESMFile({\n baseFile,\n session,\n config,\n}: {\n baseFile: string;\n session: Session;\n config: Config;\n}) {\n const deployments = await getDeployments(config);\n const contractDeployments = collectContractDeployments(session, deployments, config);\n\n const simnet = generateSimnetCode(config, deployments, session);\n\n return `${baseFile}\nexport const deployments = ${JSON.stringify(contractDeployments)} as const;\n${simnet}\nexport const project = {\n contracts,\n deployments,\n} as const;\n `;\n}\n\nexport type ContractDeployments = {\n [key in DeploymentNetwork]: string | null;\n};\n\nexport type FullContractDeployments = {\n [contractName: string]: ContractDeployments;\n};\n\nfunction insertNetworkId(\n deployments: FullContractDeployments,\n identifier: string,\n network: DeploymentNetwork\n) {\n const name = getContractName(identifier);\n if (!deployments[name]) {\n // log.debug(`Not setting deployment ID for ${name} on ${network}`);\n return;\n }\n if (deployments[name][network] === null) {\n deployments[name][network] = identifier;\n }\n}\n\nexport function collectContractDeployments(\n session: Session,\n deployments: DeploymentsMap,\n config: Config\n): FullContractDeployments {\n const full = Object.fromEntries(\n sortContracts(session.contracts).map(contract => {\n const contractName = getContractName(contract.contract_id);\n const contractDeployments = Object.fromEntries(\n DEPLOYMENT_NETWORKS.map(network => {\n const deployment = deployments[network];\n if (typeof deployment === 'undefined') {\n return [network, null];\n }\n try {\n const contractName = contract.contract_id.split('.')[1];\n const tx = getDeploymentContract(contractName, deployment);\n const id = getIdentifier(tx);\n return [network, id];\n } catch (_) {\n return [network, null];\n }\n })\n ) as ContractDeployments;\n return [contractName, contractDeployments];\n })\n ) as FullContractDeployments;\n\n const deployer = session.accounts.find(a => a.name === 'deployer');\n\n // handle defaults when there is no deployment file\n config.clarinet.project.requirements?.forEach(({ contract_id }) => {\n insertNetworkId(full, contract_id, 'mainnet');\n const contractName = contract_id.split('.')[1];\n if (deployer) {\n const devnetId = `${deployer.address}.${contractName}`;\n insertNetworkId(full, devnetId, 'devnet');\n }\n });\n\n session.contracts.forEach(contract => {\n insertNetworkId(full, contract.contract_id, 'devnet');\n insertNetworkId(full, contract.contract_id, 'simnet');\n });\n\n return full;\n}\n\nexport function collectDeploymentFiles(\n deployments: DeploymentsMap,\n clarinetFolder: string,\n cwd: string\n) {\n if (!deployments.simnet) return [];\n const simnet = deployments.simnet as SimnetDeploymentPlan;\n const txs = getContractTxs(simnet.plan.batches as Batch<Transaction>[]);\n const entries = txs.map(tx => {\n const id = getIdentifier(tx);\n const contractFile = getDeploymentTxPath(tx);\n return {\n identifier: id,\n file: relative(cwd, join(clarinetFolder, contractFile)),\n };\n });\n return entries;\n}\n\nfunction generateSimnetCode(config: Config, deployments: DeploymentsMap, _session: Session) {\n if (!config.esm?.include_accounts) return '';\n\n const clarinetFolder = dirname(config.clarinetFile());\n\n const files = collectDeploymentFiles(deployments, clarinetFolder, config.cwd);\n // const accounts = generateAccountsCode(session);\n\n return `\nexport const simnetDeployment = ${JSON.stringify(files)};\n`;\n // ${accounts}\n\n // export const simnet = {\n // deployment: simnetDeployment,\n // accounts,\n // };\n}\n\nexport async function afterESM(config: Config): Promise<void> {\n const command = config.esm?.after;\n if (!command) return;\n logger.debug(`Running after ESM command: ${command}`);\n const parts = command.split(' ');\n const [cmd, ...args] = parts;\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n cwd: config.cwd,\n stdio: 'inherit',\n });\n child.on('error', reject);\n child.on('exit', code => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with code ${code ?? 'unknown'}`));\n }\n });\n });\n}\n","interface EmulatedContractPublishTransaction {\n 'emulated-contract-publish': {\n 'contract-name': string;\n 'emulated-sender': string;\n path: string;\n };\n}\n\ninterface RequirementPublishTransaction {\n 'requirement-publish': {\n 'contract-id': string;\n 'remap-sender': string;\n 'remap-principals': Record<string, string>;\n path: string;\n };\n}\n\ninterface ContractPublishTransaction {\n 'contract-publish': {\n 'contract-name': string;\n 'expected-sender': string;\n path: string;\n };\n}\n\ninterface ContractCallTransaction {\n 'contract-call': {\n 'contract-id': string;\n 'expected-sender': string;\n parameters: Readonly<string[]>;\n method: string;\n };\n}\n\ninterface EmulatedContractCallTransaction {\n 'emulated-contract-call': {\n 'contract-id': string;\n 'emulated-sender': string;\n parameters: Readonly<string[]>;\n method: string;\n };\n}\n\ninterface BtcTransferTransaction {\n 'btc-transfer': {\n 'expected-sender': string;\n recipient: string;\n 'sats-per-byte': string;\n 'sats-amount': string;\n };\n}\n\n// <clarinet>/components/deployments/src/types.rs\n// <TransactionSpecification>\nexport type Transaction =\n | EmulatedContractPublishTransaction\n | RequirementPublishTransaction\n | ContractPublishTransaction\n | EmulatedContractCallTransaction\n | BtcTransferTransaction\n | ContractCallTransaction;\n\nexport type ContractTransaction =\n | EmulatedContractPublishTransaction\n | RequirementPublishTransaction\n | ContractPublishTransaction;\n\n// type Batch = Transaction[];\nexport interface Batch<T extends Transaction> {\n id: number;\n transactions: Readonly<T[]>;\n}\n\ninterface SimnetAccount {\n address: string;\n name: string;\n balance: string;\n}\n\nexport interface SimnetAccountDeployer extends SimnetAccount {\n name: 'deployer';\n}\n\nexport interface SimnetDeploymentPlan {\n network: 'simnet';\n genesis: {\n wallets: Readonly<[SimnetAccountDeployer, ...SimnetAccount[]]>;\n contracts: Readonly<string[]>;\n };\n plan: {\n batches: Readonly<\n Batch<EmulatedContractPublishTransaction | EmulatedContractCallTransaction>[]\n >;\n };\n}\n\nexport interface DevnetDeploymentPlan {\n network: 'devnet';\n plan: {\n batches: Readonly<\n Batch<\n | RequirementPublishTransaction\n | ContractPublishTransaction\n | ContractCallTransaction\n | BtcTransferTransaction\n >[]\n >;\n };\n}\n\nexport type TestnetDeploymentPlan = Omit<DevnetDeploymentPlan, 'network'> & {\n network: 'testnet';\n};\n\nexport interface MainnetDeploymentPlan {\n network: 'mainnet';\n plan: {\n batches: Readonly<\n Batch<ContractPublishTransaction | ContractCallTransaction | BtcTransferTransaction>[]\n >;\n };\n}\n\nexport type DeploymentPlan =\n | SimnetDeploymentPlan\n | DevnetDeploymentPlan\n | TestnetDeploymentPlan\n | MainnetDeploymentPlan;\n\nexport function flatBatch<T extends Transaction>(batches: Batch<T>[]) {\n // const start: T[][] = [];\n const txs: T[] = [];\n batches.forEach(batch => txs.push(...batch.transactions));\n return txs;\n}\n\nexport function getContractTxs(batches: Batch<Transaction>[]): ContractTransaction[] {\n const txs = flatBatch(batches);\n return txs.filter(isContractTx);\n}\n\nexport function getDeploymentContract(\n contractName: string,\n deployment: DeploymentPlan\n): ContractTransaction {\n const txs: Transaction[] = flatBatch(deployment.plan.batches as Batch<Transaction>[]);\n for (const tx of txs) {\n if (!isContractTx(tx)) continue;\n if ('requirement-publish' in tx) {\n const [_, name] = tx['requirement-publish']['contract-id'].split('.');\n if (name === contractName) {\n return tx;\n }\n } else if ('emulated-contract-publish' in tx) {\n if (tx['emulated-contract-publish']['contract-name'] === contractName) {\n return tx;\n }\n } else if ('contract-publish' in tx) {\n const contract = tx['contract-publish'];\n if (contract['contract-name'] === contractName) {\n return tx;\n }\n }\n }\n throw new Error(`Unable to find deployment tx for contract '${contractName}'`);\n}\n\nexport function getDeploymentTxPath(tx: ContractTransaction): string {\n if (!isContractTx(tx)) {\n throw new Error('Unable to get path for tx type.');\n }\n if ('requirement-publish' in tx) {\n return tx['requirement-publish'].path;\n } else if ('emulated-contract-publish' in tx) {\n const contract = tx['emulated-contract-publish'];\n return contract.path;\n } else if ('contract-publish' in tx) {\n const contract = tx['contract-publish'];\n return contract.path;\n }\n throw new Error('Couldnt get path for deployment tx.');\n}\n\nexport function getIdentifier(tx: ContractTransaction): string {\n if (!isContractTx(tx)) {\n throw new Error('Unable to get ID for tx type.');\n }\n if ('requirement-publish' in tx) {\n const spec = tx['requirement-publish'];\n const [_, name] = spec['contract-id'].split('.');\n return `${spec['remap-sender']}.${name}`;\n } else if ('emulated-contract-publish' in tx) {\n const contract = tx['emulated-contract-publish'];\n return `${contract['emulated-sender']}.${contract['contract-name']}`;\n } else if ('contract-publish' in tx) {\n const contract = tx['contract-publish'];\n return `${contract['expected-sender']}.${contract['contract-name']}`;\n }\n throw new Error(`Unable to find ID for contract.`);\n}\n\nexport function isContractTx(tx: Transaction): tx is ContractTransaction {\n if ('contract-call' in tx) return false;\n if ('btc-transfer' in tx) return false;\n if ('emulated-contract-call' in tx) return false;\n return true;\n}\n"],"mappings":"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","names":["getContractName","type","fn","v","arg","resolve","getContractName","type","dirname","relative","resolve","parse","readFile","OutputType","type","getContractName","relative","getContractName","relative","getContractName","toCamelCase","type","toCamelCase","getContractName","getContractName","toCamelCase","type","getContractName","readFile","join","dirname","relative","parse","getContractName","spawn","readFile","parse","join","dirname","getContractName","contractName","relative","resolve","spawn"]}
|
package/dist/run-cli.cjs
CHANGED
|
@@ -30,7 +30,7 @@ var import_clipanion6 = require("clipanion");
|
|
|
30
30
|
var import_clipanion2 = require("clipanion");
|
|
31
31
|
|
|
32
32
|
// src/config.ts
|
|
33
|
-
var
|
|
33
|
+
var import_arktype2 = require("arktype");
|
|
34
34
|
|
|
35
35
|
// src/logger.ts
|
|
36
36
|
var import_pino = require("pino");
|
|
@@ -80,19 +80,27 @@ function sortContracts(contracts) {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
// src/clarinet-config.ts
|
|
83
|
-
var
|
|
83
|
+
var import_arktype = require("arktype");
|
|
84
84
|
var import_promises2 = require("fs/promises");
|
|
85
85
|
var import_toml = require("@iarna/toml");
|
|
86
|
-
var
|
|
87
|
-
project:
|
|
88
|
-
requirements:
|
|
89
|
-
|
|
86
|
+
var ClarinetConfig = (0, import_arktype.type)({
|
|
87
|
+
project: (0, import_arktype.type)({
|
|
88
|
+
requirements: (0, import_arktype.type)({
|
|
89
|
+
contract_id: (0, import_arktype.type)("string").describe("Contract ID")
|
|
90
|
+
}).array().describe("Project requirements").optional(),
|
|
91
|
+
cache_location: (0, import_arktype.type)({
|
|
92
|
+
path: (0, import_arktype.type)("string").describe("Cache location path")
|
|
93
|
+
}).optional()
|
|
90
94
|
}),
|
|
91
|
-
contracts:
|
|
95
|
+
contracts: (0, import_arktype.type)({
|
|
96
|
+
"[string]": (0, import_arktype.type)({
|
|
97
|
+
path: (0, import_arktype.type)("string").describe("Contract path")
|
|
98
|
+
})
|
|
99
|
+
}).optional()
|
|
92
100
|
});
|
|
93
101
|
async function getClarinetConfig(path) {
|
|
94
102
|
const file = await (0, import_promises2.readFile)(path, "utf-8");
|
|
95
|
-
const config =
|
|
103
|
+
const config = ClarinetConfig.assert((0, import_toml.parse)(file));
|
|
96
104
|
return config;
|
|
97
105
|
}
|
|
98
106
|
|
|
@@ -101,23 +109,23 @@ var import_path2 = require("path");
|
|
|
101
109
|
var import_toml2 = require("@iarna/toml");
|
|
102
110
|
var import_promises3 = require("fs/promises");
|
|
103
111
|
var CONFIG_FILE = "Clarigen.toml";
|
|
104
|
-
var typesSchema =
|
|
105
|
-
output:
|
|
106
|
-
outputs:
|
|
107
|
-
include_accounts:
|
|
108
|
-
after:
|
|
109
|
-
include_boot_contracts:
|
|
110
|
-
watch_folders:
|
|
112
|
+
var typesSchema = (0, import_arktype2.type)({
|
|
113
|
+
"output?": (0, import_arktype2.type)("string").describe("Path to the output file"),
|
|
114
|
+
"outputs?": (0, import_arktype2.type)("string[]").describe("Paths to the output files"),
|
|
115
|
+
"include_accounts?": (0, import_arktype2.type)("boolean").describe("Include accounts in the output"),
|
|
116
|
+
"after?": (0, import_arktype2.type)("string").describe("Script to run after the output is generated"),
|
|
117
|
+
"include_boot_contracts?": (0, import_arktype2.type)("boolean").describe("Include boot contracts in the output"),
|
|
118
|
+
"watch_folders?": (0, import_arktype2.type)("string[]").describe("Folders to watch for changes")
|
|
111
119
|
}).optional();
|
|
112
|
-
var
|
|
113
|
-
clarinet:
|
|
120
|
+
var ConfigFile = (0, import_arktype2.type)({
|
|
121
|
+
clarinet: (0, import_arktype2.type)("string").describe("Path to the Clarinet config file"),
|
|
114
122
|
["types" /* ESM */]: typesSchema,
|
|
115
123
|
["esm" /* ESM_OLD */]: typesSchema,
|
|
116
|
-
["docs" /* Docs */]:
|
|
117
|
-
output:
|
|
118
|
-
outputs:
|
|
119
|
-
exclude:
|
|
120
|
-
after:
|
|
124
|
+
["docs" /* Docs */]: (0, import_arktype2.type)({
|
|
125
|
+
"output?": (0, import_arktype2.type)("string").describe("Path to docs output folder. Defaults to ./docs"),
|
|
126
|
+
"outputs?": (0, import_arktype2.type)("string[]").describe("Paths to docs output folders"),
|
|
127
|
+
"exclude?": (0, import_arktype2.type)("string[]").describe("Contracts to exclude from docs generation"),
|
|
128
|
+
"after?": (0, import_arktype2.type)("string").describe("Script to run after docs are generated")
|
|
121
129
|
}).optional()
|
|
122
130
|
});
|
|
123
131
|
var defaultConfigFile = {
|
|
@@ -141,36 +149,36 @@ var Config = class {
|
|
|
141
149
|
const clarinet = await getClarinetConfig((0, import_path2.resolve)(cwd ?? "", config.clarinet));
|
|
142
150
|
return new this(config, clarinet, cwd);
|
|
143
151
|
}
|
|
144
|
-
getOutputs(
|
|
152
|
+
getOutputs(type4) {
|
|
145
153
|
var _a, _b;
|
|
146
|
-
const singlePath = (_a = this.configFile[
|
|
147
|
-
const multiPath = ((_b = this.configFile[
|
|
154
|
+
const singlePath = (_a = this.configFile[type4]) == null ? void 0 : _a.output;
|
|
155
|
+
const multiPath = ((_b = this.configFile[type4]) == null ? void 0 : _b.outputs) || [];
|
|
148
156
|
if (singlePath !== void 0) return [singlePath];
|
|
149
157
|
return multiPath;
|
|
150
158
|
}
|
|
151
|
-
outputResolve(
|
|
152
|
-
const outputs = this.getOutputs(
|
|
153
|
-
if (!this.supports(
|
|
159
|
+
outputResolve(type4, filePath) {
|
|
160
|
+
const outputs = this.getOutputs(type4);
|
|
161
|
+
if (!this.supports(type4)) return null;
|
|
154
162
|
return outputs.map((path) => {
|
|
155
163
|
return (0, import_path2.resolve)(this.cwd, path, filePath || "");
|
|
156
164
|
});
|
|
157
165
|
}
|
|
158
|
-
async writeOutput(
|
|
159
|
-
const paths = this.outputResolve(
|
|
166
|
+
async writeOutput(type4, contents, filePath) {
|
|
167
|
+
const paths = this.outputResolve(type4, filePath);
|
|
160
168
|
if (paths === null) return null;
|
|
161
169
|
await Promise.all(
|
|
162
170
|
paths.map(async (path) => {
|
|
163
171
|
await writeFile(path, contents);
|
|
164
|
-
log.debug(`Generated ${
|
|
172
|
+
log.debug(`Generated ${type4} file at ${(0, import_path2.relative)(this.cwd, path)}`);
|
|
165
173
|
})
|
|
166
174
|
);
|
|
167
175
|
return paths;
|
|
168
176
|
}
|
|
169
|
-
supports(
|
|
170
|
-
return this.getOutputs(
|
|
177
|
+
supports(type4) {
|
|
178
|
+
return this.getOutputs(type4).length > 0;
|
|
171
179
|
}
|
|
172
|
-
type(
|
|
173
|
-
return this.configFile[
|
|
180
|
+
type(type4) {
|
|
181
|
+
return this.configFile[type4];
|
|
174
182
|
}
|
|
175
183
|
get esm() {
|
|
176
184
|
return this.configFile["types" /* ESM */];
|
|
@@ -196,16 +204,12 @@ async function getConfig(cwd) {
|
|
|
196
204
|
if (await fileExists(path)) {
|
|
197
205
|
const toml = await (0, import_promises3.readFile)(path, "utf-8");
|
|
198
206
|
const parsedToml = (0, import_toml2.parse)(toml);
|
|
199
|
-
const
|
|
200
|
-
if (
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
logger.error("Error parsing Clarigen.toml:");
|
|
204
|
-
parseResult.error.errors.forEach((e) => {
|
|
205
|
-
logger.error(`${e.path.join(".")}: ${e.message}`);
|
|
206
|
-
});
|
|
207
|
-
throw new Error("Error parsing Clarigen.toml");
|
|
207
|
+
const parsed = ConfigFile(parsedToml);
|
|
208
|
+
if (parsed instanceof import_arktype2.type.errors) {
|
|
209
|
+
logger.error(`Error parsing Clarigen config: ${parsed.summary}`);
|
|
210
|
+
throw new Error(`Error parsing Clarigen config: ${parsed.summary}`);
|
|
208
211
|
}
|
|
212
|
+
sessionConfig = parsed;
|
|
209
213
|
} else {
|
|
210
214
|
sessionConfig = defaultConfigFile;
|
|
211
215
|
}
|
|
@@ -214,7 +218,7 @@ async function getConfig(cwd) {
|
|
|
214
218
|
|
|
215
219
|
// src/commands/base-command.ts
|
|
216
220
|
var import_clipanion = require("clipanion");
|
|
217
|
-
var
|
|
221
|
+
var import_arktype3 = require("arktype");
|
|
218
222
|
var BaseCommand = class extends import_clipanion.Command {
|
|
219
223
|
verbose = import_clipanion.Option.Boolean("-v,--verbose", false, {
|
|
220
224
|
description: "Enable verbose logging"
|
|
@@ -226,8 +230,8 @@ var BaseCommand = class extends import_clipanion.Command {
|
|
|
226
230
|
}
|
|
227
231
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
228
232
|
async catch(error) {
|
|
229
|
-
if (error instanceof
|
|
230
|
-
logger.error(
|
|
233
|
+
if (error instanceof import_arktype3.type.errors) {
|
|
234
|
+
logger.error("Your configuration file is invalid.", error.summary);
|
|
231
235
|
return;
|
|
232
236
|
}
|
|
233
237
|
logger.error(error);
|
|
@@ -296,9 +300,9 @@ var jsTypeFromAbiType = (val, isArgument = false) => {
|
|
|
296
300
|
return `${innerType} | null`;
|
|
297
301
|
} else if ((0, import_core2.isClarityAbiTuple)(val)) {
|
|
298
302
|
const tupleDefs = [];
|
|
299
|
-
val.tuple.forEach(({ name, type }) => {
|
|
303
|
+
val.tuple.forEach(({ name, type: type4 }) => {
|
|
300
304
|
const camelName = (0, import_core3.toCamelCase)(name);
|
|
301
|
-
const innerType = jsTypeFromAbiType(
|
|
305
|
+
const innerType = jsTypeFromAbiType(type4, isArgument);
|
|
302
306
|
tupleDefs.push(`"${camelName}": ${innerType};`);
|
|
303
307
|
});
|
|
304
308
|
return `{
|
|
@@ -498,9 +502,9 @@ export const simnet = {
|
|
|
498
502
|
function encodeVariables(variables) {
|
|
499
503
|
return variables.map((v) => {
|
|
500
504
|
let varLine = `${encodeVariableName(v.name)}: `;
|
|
501
|
-
const
|
|
505
|
+
const type4 = jsTypeFromAbiType(v.type);
|
|
502
506
|
const varJSON = serialize(v);
|
|
503
|
-
varLine += `${varJSON} as TypedAbiVariable<${
|
|
507
|
+
varLine += `${varJSON} as TypedAbiVariable<${type4}>`;
|
|
504
508
|
return varLine;
|
|
505
509
|
});
|
|
506
510
|
}
|
|
@@ -1044,8 +1048,8 @@ function clarityNameMatcher(line) {
|
|
|
1044
1048
|
return /[\w|\-|\?|\!]+/.exec(line);
|
|
1045
1049
|
}
|
|
1046
1050
|
function findItemNameFromLine(line) {
|
|
1047
|
-
const fnType = FN_TYPES.find((
|
|
1048
|
-
return line.startsWith(`(define-${
|
|
1051
|
+
const fnType = FN_TYPES.find((type4) => {
|
|
1052
|
+
return line.startsWith(`(define-${type4}`);
|
|
1049
1053
|
});
|
|
1050
1054
|
if (fnType) {
|
|
1051
1055
|
const prefix = `(define-${fnType} (`;
|
|
@@ -1058,13 +1062,13 @@ function findItemNameFromLine(line) {
|
|
|
1058
1062
|
}
|
|
1059
1063
|
return match[0];
|
|
1060
1064
|
}
|
|
1061
|
-
for (const
|
|
1062
|
-
const prefix = `(define-${
|
|
1065
|
+
for (const type4 of VAR_TYPES) {
|
|
1066
|
+
const prefix = `(define-${type4} `;
|
|
1063
1067
|
if (!line.startsWith(prefix)) continue;
|
|
1064
1068
|
const startString = line.slice(prefix.length);
|
|
1065
1069
|
const match = clarityNameMatcher(startString);
|
|
1066
1070
|
if (!match) {
|
|
1067
|
-
console.debug(`[claridocs]: Unable to determine ${
|
|
1071
|
+
console.debug(`[claridocs]: Unable to determine ${type4} name from line:
|
|
1068
1072
|
\`${line}\``);
|
|
1069
1073
|
return;
|
|
1070
1074
|
}
|
|
@@ -1336,8 +1340,8 @@ function generateReadme(session, excluded) {
|
|
|
1336
1340
|
contractLines.push(line);
|
|
1337
1341
|
});
|
|
1338
1342
|
const fileContents = `# Contracts
|
|
1339
|
-
|
|
1340
|
-
|
|
1343
|
+
|
|
1344
|
+
${contractLines.join("\n")}
|
|
1341
1345
|
`;
|
|
1342
1346
|
return fileContents;
|
|
1343
1347
|
}
|
|
@@ -1482,7 +1486,7 @@ var InitConfigCommand = class extends BaseCommand {
|
|
|
1482
1486
|
};
|
|
1483
1487
|
|
|
1484
1488
|
// src/generated/version.ts
|
|
1485
|
-
var version = "3.1.
|
|
1489
|
+
var version = "3.1.1";
|
|
1486
1490
|
|
|
1487
1491
|
// src/run-cli.ts
|
|
1488
1492
|
var [node, script, ...args] = process.argv;
|