@taqueria/plugin-archetype
Version:
A taqueria plugin for compiling Archetype smart contracts
1 lines • 9.27 kB
Source Map (JSON)
{"version":3,"sources":["index.ts","compile.ts","createContract.ts","archetype_template.ts"],"sourcesContent":["import { Plugin, PositionalArg, Task, Template } from '@taqueria/node-sdk';\nimport compile from './compile';\nimport createContract from './createContract';\n\nPlugin.create(i18n => ({\n\tschema: '1.0',\n\tversion: '0.1',\n\talias: 'archetype',\n\ttasks: [\n\t\tTask.create({\n\t\t\ttask: 'compile',\n\t\t\tcommand: 'compile [sourceFile]',\n\t\t\taliases: ['c', 'compile-archetype'],\n\t\t\tdescription: 'Compile a smart contract written in a Archetype syntax to Michelson code',\n\t\t\toptions: [],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'json',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'decompile',\n\t\t\tcommand: 'decompile [sourceFile]',\n\t\t\taliases: ['d', 'decompile-archetype'],\n\t\t\tdescription: 'Decompile a Michelson smart contract to Archetype source code',\n\t\t\toptions: [],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'json',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'get-image',\n\t\t\tcommand: 'get-image',\n\t\t\tdescription: 'Gets the name of the image to be used',\n\t\t\thandler: 'proxy',\n\t\t\thidden: true,\n\t\t}),\n\t],\n\ttemplates: [\n\t\tTemplate.create({\n\t\t\ttemplate: 'archetypeContract',\n\t\t\tcommand: 'archetypeContract <sourceFileName>',\n\t\t\tdescription: 'Create a Archetype contract with boilerplate code',\n\t\t\tpositionals: [\n\t\t\t\tPositionalArg.create({\n\t\t\t\t\tplaceholder: 'sourceFileName',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'The name of the Archetype contract to generate',\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: createContract,\n\t\t}),\n\t],\n\tproxy: compile,\n}), process.argv);\n","import {\n\texecCmd,\n\tgetContracts,\n\tgetDockerImage,\n\tProxyTaskArgs,\n\tRequestArgs,\n\tsendAsyncErr,\n\tsendAsyncRes,\n\tsendErr,\n\tsendJsonRes,\n} from '@taqueria/node-sdk';\nimport { basename, extname, join } from 'path';\nimport { match } from 'ts-pattern';\n\n// Should point to the latest stable version, so it needs to be updated as part of our release process.\nconst ARCHETYPE_DEFAULT_IMAGE = 'completium/archetype:1.5.2';\n\nconst ARCHETYPE_IMAGE_ENV_VAR = 'TAQ_ARCHETYPE_IMAGE';\n\nexport const getArchetypeDockerImage = (): string => getDockerImage(ARCHETYPE_DEFAULT_IMAGE, ARCHETYPE_IMAGE_ENV_VAR);\n\ninterface Opts extends ProxyTaskArgs.t {\n\tsourceFile?: string;\n}\n\nconst getInputFilename = (opts: Opts) => (sourceFile: string) => {\n\tconst inputFile = basename(sourceFile, extname(sourceFile));\n\treturn join(opts.config.contractsDir ?? 'contracts', `${inputFile}.arl`);\n};\n\nconst getContractArtifactFilename = (opts: Opts) => (sourceFile: string) => {\n\tconst outFile = basename(sourceFile, extname(sourceFile));\n\treturn join(opts.config.artifactsDir ?? 'contracts', `${outFile}.tz`);\n};\n\nconst getCompileCommand = (opts: Opts) => (sourceFile: string) => {\n\tconst { projectDir } = opts;\n\tconst inputFile = getInputFilename(opts)(sourceFile);\n\tconst baseCommand =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -u $(id -u):$(id -g) -w /project ${getArchetypeDockerImage()} ${inputFile}`;\n\tconst outFile = `-o ${getContractArtifactFilename(opts)(sourceFile)}`;\n\tconst cmd = `${baseCommand} ${outFile}`;\n\treturn cmd;\n};\n\nconst compileContract = (opts: Opts) => (sourceFile: string): Promise<{ contract: string; artifact: string }> =>\n\t// const sourceAbspath = join(opts.contractsDir, sourceFile)\n\texecCmd(getCompileCommand(opts)(sourceFile))\n\t\t.then(({ stderr }) => { // How should we output warnings?\n\t\t\tif (stderr.length > 0) sendErr(stderr);\n\t\t\treturn {\n\t\t\t\tcontract: sourceFile,\n\t\t\t\tartifact: getContractArtifactFilename(opts)(sourceFile),\n\t\t\t};\n\t\t})\n\t\t.catch(err => {\n\t\t\tsendErr(' ');\n\t\t\tsendErr(err.message.split('\\n').slice(1).join('\\n'));\n\t\t\treturn Promise.resolve({\n\t\t\t\tcontract: sourceFile,\n\t\t\t\tartifact: 'Not compiled',\n\t\t\t});\n\t\t});\n\nconst compileAll = (opts: Opts): Promise<{ contract: string; artifact: string }[]> => {\n\tconst contracts = getContracts(/\\.arl$/, opts.config);\n\treturn Promise.all(contracts)\n\t\t.then(entries => entries.map(compileContract(opts)))\n\t\t.then(processes =>\n\t\t\tprocesses.length > 0\n\t\t\t\t? processes\n\t\t\t\t: [{ contract: 'None found', artifact: 'N/A' }]\n\t\t)\n\t\t.then(promises => Promise.all(promises));\n};\n\nconst compile = (parsedArgs: RequestArgs.t) => {\n\tconst unsafeOpts = parsedArgs as unknown as Opts;\n\treturn match(unsafeOpts)\n\t\t.when(unsafeOpts => unsafeOpts.task === 'get-image', () => sendAsyncRes(getArchetypeDockerImage()))\n\t\t.otherwise(() => {\n\t\t\tconst p = unsafeOpts.sourceFile\n\t\t\t\t? compileContract(unsafeOpts)(unsafeOpts.sourceFile)\n\t\t\t\t\t.then(result => [result])\n\t\t\t\t: compileAll(unsafeOpts)\n\t\t\t\t\t.then(results => {\n\t\t\t\t\t\tif (results.length === 0) sendErr('No contracts found to compile.');\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t});\n\n\t\t\treturn p\n\t\t\t\t.then(sendJsonRes)\n\t\t\t\t.catch(err => sendAsyncErr(err, false));\n\t\t});\n};\n\nexport default compile;\n","import { RequestArgs, sendAsyncErr } from '@taqueria/node-sdk';\nimport { writeFile } from 'fs/promises';\nimport { arl_template } from './archetype_template';\n\ninterface Opts extends RequestArgs.t {\n\tsourceFileName?: string;\n}\n\nconst validateExtension = async (contractName: string) => {\n\tconst matchResult = contractName.match(/\\.arl$/);\n\tif (matchResult) return;\n\treturn sendAsyncErr(`\"${contractName}\" doesn't have extension \"arl\".`);\n};\n\nconst createContract = (args: Opts) => {\n\tconst contractName = args.sourceFileName as string;\n\tconst contractsDir = `${args.config.projectDir}/${args.config.contractsDir}`;\n\treturn validateExtension(contractName)\n\t\t.then(_ => writeFile(`${contractsDir}/${contractName}`, arl_template));\n};\n\nexport default createContract;\n","export const arl_template = `\narchetype hello\n\nvariable msg : string = \"Hello\"\n\nentry input(name : string) {\n msg += \" \" + name\n}\n`;\n"],"mappings":"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","names":["unsafeOpts","sendAsyncErr","sendAsyncErr"]}