@taqueria/plugin-archetype 0.54.3 → 0.54.4
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/decompile.ts +97 -0
- package/index.js +9 -0
- package/index.js.map +1 -1
- package/index.mjs +9 -0
- package/index.mjs.map +1 -1
- package/index.ts +9 -0
- package/package.json +2 -2
package/decompile.ts
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import {
|
|
2
|
+
execCmd,
|
|
3
|
+
getContracts,
|
|
4
|
+
getDockerImage,
|
|
5
|
+
ProxyTaskArgs,
|
|
6
|
+
RequestArgs,
|
|
7
|
+
sendAsyncErr,
|
|
8
|
+
sendAsyncRes,
|
|
9
|
+
sendErr,
|
|
10
|
+
sendJsonRes,
|
|
11
|
+
} from '@taqueria/node-sdk';
|
|
12
|
+
import { basename, extname, join } from 'path';
|
|
13
|
+
import { match } from 'ts-pattern';
|
|
14
|
+
|
|
15
|
+
// Should point to the latest stable version, so it needs to be updated as part of our release process.
|
|
16
|
+
const ARCHETYPE_DEFAULT_IMAGE = 'completium/archetype:1.5.2';
|
|
17
|
+
|
|
18
|
+
const ARCHETYPE_IMAGE_ENV_VAR = 'TAQ_ARCHETYPE_IMAGE';
|
|
19
|
+
|
|
20
|
+
export const getArchetypeDockerImage = (): string => getDockerImage(ARCHETYPE_DEFAULT_IMAGE, ARCHETYPE_IMAGE_ENV_VAR);
|
|
21
|
+
|
|
22
|
+
interface Opts extends ProxyTaskArgs.t {
|
|
23
|
+
sourceFile?: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const getInputFilename = (opts: Opts) => (sourceFile: string) => {
|
|
27
|
+
const inputFile = basename(sourceFile, extname(sourceFile));
|
|
28
|
+
return join(opts.config.contractsDir ?? 'contracts', `${inputFile}.arl`);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const getContractArtifactFilename = (opts: Opts) => (sourceFile: string) => {
|
|
32
|
+
const outFile = basename(sourceFile, extname(sourceFile));
|
|
33
|
+
return join(opts.config.artifactsDir ?? 'contracts', `${outFile}.tz`);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const getDecompileCommand = (opts: Opts) => (sourceFile: string) => {
|
|
37
|
+
const { projectDir } = opts;
|
|
38
|
+
const inputFile = getInputFilename(opts)(sourceFile);
|
|
39
|
+
const baseCommand =
|
|
40
|
+
`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \"${projectDir}\":/project -u $(id -u):$(id -g) -w /project ${getArchetypeDockerImage()} -d ${inputFile}`;
|
|
41
|
+
const outFile = `-o ${getContractArtifactFilename(opts)(sourceFile)}`;
|
|
42
|
+
const cmd = `${baseCommand} ${outFile}`;
|
|
43
|
+
return cmd;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const decompileContract = (opts: Opts) => (sourceFile: string): Promise<{ contract: string; artifact: string }> =>
|
|
47
|
+
// const sourceAbspath = join(opts.contractsDir, sourceFile)
|
|
48
|
+
execCmd(getDecompileCommand(opts)(sourceFile))
|
|
49
|
+
.then(({ stderr }) => { // How should we output warnings?
|
|
50
|
+
if (stderr.length > 0) sendErr(stderr);
|
|
51
|
+
return {
|
|
52
|
+
contract: sourceFile,
|
|
53
|
+
artifact: getContractArtifactFilename(opts)(sourceFile),
|
|
54
|
+
};
|
|
55
|
+
})
|
|
56
|
+
.catch(err => {
|
|
57
|
+
sendErr(' ');
|
|
58
|
+
sendErr(err.message.split('\n').slice(1).join('\n'));
|
|
59
|
+
return Promise.resolve({
|
|
60
|
+
contract: sourceFile,
|
|
61
|
+
artifact: 'Not decompiled',
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
const decompileAll = (opts: Opts): Promise<{ contract: string; artifact: string }[]> => {
|
|
66
|
+
const contracts = getContracts(/\.arl$/, opts.config);
|
|
67
|
+
return Promise.all(contracts)
|
|
68
|
+
.then(entries => entries.map(decompileContract(opts)))
|
|
69
|
+
.then(processes =>
|
|
70
|
+
processes.length > 0
|
|
71
|
+
? processes
|
|
72
|
+
: [{ contract: 'None found', artifact: 'N/A' }]
|
|
73
|
+
)
|
|
74
|
+
.then(promises => Promise.all(promises));
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const decompile = (parsedArgs: RequestArgs.t) => {
|
|
78
|
+
const unsafeOpts = parsedArgs as unknown as Opts;
|
|
79
|
+
return match(unsafeOpts)
|
|
80
|
+
.when(unsafeOpts => unsafeOpts.task === 'get-image', () => sendAsyncRes(getArchetypeDockerImage()))
|
|
81
|
+
.otherwise(() => {
|
|
82
|
+
const p = unsafeOpts.sourceFile
|
|
83
|
+
? decompileContract(unsafeOpts)(unsafeOpts.sourceFile)
|
|
84
|
+
.then(result => [result])
|
|
85
|
+
: decompileAll(unsafeOpts)
|
|
86
|
+
.then(results => {
|
|
87
|
+
if (results.length === 0) sendErr('No contracts found to decompile.');
|
|
88
|
+
return results;
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
return p
|
|
92
|
+
.then(sendJsonRes)
|
|
93
|
+
.catch(err => sendAsyncErr(err, false));
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export default decompile;
|
package/index.js
CHANGED
|
@@ -107,6 +107,15 @@ import_node_sdk3.Plugin.create((i18n) => ({
|
|
|
107
107
|
handler: "proxy",
|
|
108
108
|
encoding: "json"
|
|
109
109
|
}),
|
|
110
|
+
import_node_sdk3.Task.create({
|
|
111
|
+
task: "decompile",
|
|
112
|
+
command: "decompile [sourceFile]",
|
|
113
|
+
aliases: ["d", "decompile-archetype"],
|
|
114
|
+
description: "Decompile a Michelson smart contract to Archetype source code",
|
|
115
|
+
options: [],
|
|
116
|
+
handler: "proxy",
|
|
117
|
+
encoding: "json"
|
|
118
|
+
}),
|
|
110
119
|
import_node_sdk3.Task.create({
|
|
111
120
|
task: "get-image",
|
|
112
121
|
command: "get-image",
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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: '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.1';\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":["import_node_sdk","unsafeOpts","import_node_sdk"]}
|
|
1
|
+
{"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.1';\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":";;;AAAA,IAAAA,mBAAsD;;;ACAtD,sBAUO;AACP,kBAAwC;AACxC,wBAAsB;AAGtB,IAAM,0BAA0B;AAEhC,IAAM,0BAA0B;AAEzB,IAAM,0BAA0B,UAAc,gCAAe,yBAAyB,uBAAuB;AAMpH,IAAM,mBAAmB,CAAC,SAAe,CAAC,eAAuB;AAChE,QAAM,gBAAY,sBAAS,gBAAY,qBAAQ,UAAU,CAAC;AAC1D,aAAO,kBAAK,KAAK,OAAO,gBAAgB,aAAa,GAAG,SAAS,MAAM;AACxE;AAEA,IAAM,8BAA8B,CAAC,SAAe,CAAC,eAAuB;AAC3E,QAAM,cAAU,sBAAS,gBAAY,qBAAQ,UAAU,CAAC;AACxD,aAAO,kBAAK,KAAK,OAAO,gBAAgB,aAAa,GAAG,OAAO,KAAK;AACrE;AAEA,IAAM,oBAAoB,CAAC,SAAe,CAAC,eAAuB;AACjE,QAAM,EAAE,WAAW,IAAI;AACvB,QAAM,YAAY,iBAAiB,IAAI,EAAE,UAAU;AACnD,QAAM,cACL,2DAA4D,UAAU,+CAAgD,wBAAwB,CAAC,IAAI,SAAS;AAC7J,QAAM,UAAU,MAAM,4BAA4B,IAAI,EAAE,UAAU,CAAC;AACnE,QAAM,MAAM,GAAG,WAAW,IAAI,OAAO;AACrC,SAAO;AACR;AAEA,IAAM,kBAAkB,CAAC,SAAe,CAAC;AAAA;AAAA,MAExC,yBAAQ,kBAAkB,IAAI,EAAE,UAAU,CAAC,EACzC,KAAK,CAAC,EAAE,OAAO,MAAM;AACrB,QAAI,OAAO,SAAS;AAAG,mCAAQ,MAAM;AACrC,WAAO;AAAA,MACN,UAAU;AAAA,MACV,UAAU,4BAA4B,IAAI,EAAE,UAAU;AAAA,IACvD;AAAA,EACD,CAAC,EACA,MAAM,SAAO;AACb,iCAAQ,GAAG;AACX,iCAAQ,IAAI,QAAQ,MAAM,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC;AACnD,WAAO,QAAQ,QAAQ;AAAA,MACtB,UAAU;AAAA,MACV,UAAU;AAAA,IACX,CAAC;AAAA,EACF,CAAC;AAAA;AAEH,IAAM,aAAa,CAAC,SAAkE;AACrF,QAAM,gBAAY,8BAAa,UAAU,KAAK,MAAM;AACpD,SAAO,QAAQ,IAAI,SAAS,EAC1B,KAAK,aAAW,QAAQ,IAAI,gBAAgB,IAAI,CAAC,CAAC,EAClD;AAAA,IAAK,eACL,UAAU,SAAS,IAChB,YACA,CAAC,EAAE,UAAU,cAAc,UAAU,MAAM,CAAC;AAAA,EAChD,EACC,KAAK,cAAY,QAAQ,IAAI,QAAQ,CAAC;AACzC;AAEA,IAAM,UAAU,CAAC,eAA8B;AAC9C,QAAM,aAAa;AACnB,aAAO,yBAAM,UAAU,EACrB,KAAK,CAAAC,gBAAcA,YAAW,SAAS,aAAa,UAAM,8BAAa,wBAAwB,CAAC,CAAC,EACjG,UAAU,MAAM;AAChB,UAAM,IAAI,WAAW,aAClB,gBAAgB,UAAU,EAAE,WAAW,UAAU,EACjD,KAAK,YAAU,CAAC,MAAM,CAAC,IACvB,WAAW,UAAU,EACrB,KAAK,aAAW;AAChB,UAAI,QAAQ,WAAW;AAAG,qCAAQ,gCAAgC;AAClE,aAAO;AAAA,IACR,CAAC;AAEH,WAAO,EACL,KAAK,2BAAW,EAChB,MAAM,aAAO,8BAAa,KAAK,KAAK,CAAC;AAAA,EACxC,CAAC;AACH;AAEA,IAAO,kBAAQ;;;AChGf,IAAAC,mBAA0C;AAC1C,sBAA0B;;;ACDnB,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ADQ5B,IAAM,oBAAoB,OAAO,iBAAyB;AACzD,QAAM,cAAc,aAAa,MAAM,QAAQ;AAC/C,MAAI;AAAa;AACjB,aAAO,+BAAa,IAAI,YAAY,iCAAiC;AACtE;AAEA,IAAM,iBAAiB,CAAC,SAAe;AACtC,QAAM,eAAe,KAAK;AAC1B,QAAM,eAAe,GAAG,KAAK,OAAO,UAAU,IAAI,KAAK,OAAO,YAAY;AAC1E,SAAO,kBAAkB,YAAY,EACnC,KAAK,WAAK,2BAAU,GAAG,YAAY,IAAI,YAAY,IAAI,YAAY,CAAC;AACvE;AAEA,IAAO,yBAAQ;;;AFjBf,wBAAO,OAAO,WAAS;AAAA,EACtB,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,IACN,sBAAK,OAAO;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS,CAAC,KAAK,mBAAmB;AAAA,MAClC,aAAa;AAAA,MACb,SAAS,CAAC;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,IACX,CAAC;AAAA,IACD,sBAAK,OAAO;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS,CAAC,KAAK,qBAAqB;AAAA,MACpC,aAAa;AAAA,MACb,SAAS,CAAC;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,IACX,CAAC;AAAA,IACD,sBAAK,OAAO;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,MACb,SAAS;AAAA,MACT,QAAQ;AAAA,IACT,CAAC;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACV,0BAAS,OAAO;AAAA,MACf,UAAU;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,QACZ,+BAAc,OAAO;AAAA,UACpB,aAAa;AAAA,UACb,MAAM;AAAA,UACN,aAAa;AAAA,QACd,CAAC;AAAA,MACF;AAAA,MACA,SAAS;AAAA,IACV,CAAC;AAAA,EACF;AAAA,EACA,OAAO;AACR,IAAI,QAAQ,IAAI;","names":["import_node_sdk","unsafeOpts","import_node_sdk"]}
|
package/index.mjs
CHANGED
|
@@ -113,6 +113,15 @@ Plugin.create((i18n) => ({
|
|
|
113
113
|
handler: "proxy",
|
|
114
114
|
encoding: "json"
|
|
115
115
|
}),
|
|
116
|
+
Task.create({
|
|
117
|
+
task: "decompile",
|
|
118
|
+
command: "decompile [sourceFile]",
|
|
119
|
+
aliases: ["d", "decompile-archetype"],
|
|
120
|
+
description: "Decompile a Michelson smart contract to Archetype source code",
|
|
121
|
+
options: [],
|
|
122
|
+
handler: "proxy",
|
|
123
|
+
encoding: "json"
|
|
124
|
+
}),
|
|
116
125
|
Task.create({
|
|
117
126
|
task: "get-image",
|
|
118
127
|
command: "get-image",
|
package/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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: '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.1';\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":";AAAA,SAAS,QAAQ,eAAe,MAAM,gBAAgB;;;ACAtD;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,UAAU,SAAS,YAAY;AACxC,SAAS,aAAa;AAGtB,IAAM,0BAA0B;AAEhC,IAAM,0BAA0B;AAEzB,IAAM,0BAA0B,MAAc,eAAe,yBAAyB,uBAAuB;AAMpH,IAAM,mBAAmB,CAAC,SAAe,CAAC,eAAuB;AAChE,QAAM,YAAY,SAAS,YAAY,QAAQ,UAAU,CAAC;AAC1D,SAAO,KAAK,KAAK,OAAO,gBAAgB,aAAa,GAAG,SAAS,MAAM;AACxE;AAEA,IAAM,8BAA8B,CAAC,SAAe,CAAC,eAAuB;AAC3E,QAAM,UAAU,SAAS,YAAY,QAAQ,UAAU,CAAC;AACxD,SAAO,KAAK,KAAK,OAAO,gBAAgB,aAAa,GAAG,OAAO,KAAK;AACrE;AAEA,IAAM,oBAAoB,CAAC,SAAe,CAAC,eAAuB;AACjE,QAAM,EAAE,WAAW,IAAI;AACvB,QAAM,YAAY,iBAAiB,IAAI,EAAE,UAAU;AACnD,QAAM,cACL,2DAA4D,UAAU,+CAAgD,wBAAwB,CAAC,IAAI,SAAS;AAC7J,QAAM,UAAU,MAAM,4BAA4B,IAAI,EAAE,UAAU,CAAC;AACnE,QAAM,MAAM,GAAG,WAAW,IAAI,OAAO;AACrC,SAAO;AACR;AAEA,IAAM,kBAAkB,CAAC,SAAe,CAAC;AAAA;AAAA,EAExC,QAAQ,kBAAkB,IAAI,EAAE,UAAU,CAAC,EACzC,KAAK,CAAC,EAAE,OAAO,MAAM;AACrB,QAAI,OAAO,SAAS;AAAG,cAAQ,MAAM;AACrC,WAAO;AAAA,MACN,UAAU;AAAA,MACV,UAAU,4BAA4B,IAAI,EAAE,UAAU;AAAA,IACvD;AAAA,EACD,CAAC,EACA,MAAM,SAAO;AACb,YAAQ,GAAG;AACX,YAAQ,IAAI,QAAQ,MAAM,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC;AACnD,WAAO,QAAQ,QAAQ;AAAA,MACtB,UAAU;AAAA,MACV,UAAU;AAAA,IACX,CAAC;AAAA,EACF,CAAC;AAAA;AAEH,IAAM,aAAa,CAAC,SAAkE;AACrF,QAAM,YAAY,aAAa,UAAU,KAAK,MAAM;AACpD,SAAO,QAAQ,IAAI,SAAS,EAC1B,KAAK,aAAW,QAAQ,IAAI,gBAAgB,IAAI,CAAC,CAAC,EAClD;AAAA,IAAK,eACL,UAAU,SAAS,IAChB,YACA,CAAC,EAAE,UAAU,cAAc,UAAU,MAAM,CAAC;AAAA,EAChD,EACC,KAAK,cAAY,QAAQ,IAAI,QAAQ,CAAC;AACzC;AAEA,IAAM,UAAU,CAAC,eAA8B;AAC9C,QAAM,aAAa;AACnB,SAAO,MAAM,UAAU,EACrB,KAAK,CAAAA,gBAAcA,YAAW,SAAS,aAAa,MAAM,aAAa,wBAAwB,CAAC,CAAC,EACjG,UAAU,MAAM;AAChB,UAAM,IAAI,WAAW,aAClB,gBAAgB,UAAU,EAAE,WAAW,UAAU,EACjD,KAAK,YAAU,CAAC,MAAM,CAAC,IACvB,WAAW,UAAU,EACrB,KAAK,aAAW;AAChB,UAAI,QAAQ,WAAW;AAAG,gBAAQ,gCAAgC;AAClE,aAAO;AAAA,IACR,CAAC;AAEH,WAAO,EACL,KAAK,WAAW,EAChB,MAAM,SAAO,aAAa,KAAK,KAAK,CAAC;AAAA,EACxC,CAAC;AACH;AAEA,IAAO,kBAAQ;;;AChGf,SAAsB,gBAAAC,qBAAoB;AAC1C,SAAS,iBAAiB;;;ACDnB,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ADQ5B,IAAM,oBAAoB,OAAO,iBAAyB;AACzD,QAAM,cAAc,aAAa,MAAM,QAAQ;AAC/C,MAAI;AAAa;AACjB,SAAOC,cAAa,IAAI,YAAY,iCAAiC;AACtE;AAEA,IAAM,iBAAiB,CAAC,SAAe;AACtC,QAAM,eAAe,KAAK;AAC1B,QAAM,eAAe,GAAG,KAAK,OAAO,UAAU,IAAI,KAAK,OAAO,YAAY;AAC1E,SAAO,kBAAkB,YAAY,EACnC,KAAK,OAAK,UAAU,GAAG,YAAY,IAAI,YAAY,IAAI,YAAY,CAAC;AACvE;AAEA,IAAO,yBAAQ;;;AFjBf,OAAO,OAAO,WAAS;AAAA,EACtB,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,IACN,KAAK,OAAO;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS,CAAC,KAAK,mBAAmB;AAAA,MAClC,aAAa;AAAA,MACb,SAAS,CAAC;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,IACX,CAAC;AAAA,IACD,KAAK,OAAO;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,MACb,SAAS;AAAA,MACT,QAAQ;AAAA,IACT,CAAC;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACV,SAAS,OAAO;AAAA,MACf,UAAU;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,QACZ,cAAc,OAAO;AAAA,UACpB,aAAa;AAAA,UACb,MAAM;AAAA,UACN,aAAa;AAAA,QACd,CAAC;AAAA,MACF;AAAA,MACA,SAAS;AAAA,IACV,CAAC;AAAA,EACF;AAAA,EACA,OAAO;AACR,IAAI,QAAQ,IAAI;","names":["unsafeOpts","sendAsyncErr","sendAsyncErr"]}
|
|
1
|
+
{"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.1';\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"]}
|
package/index.ts
CHANGED
|
@@ -16,6 +16,15 @@ Plugin.create(i18n => ({
|
|
|
16
16
|
handler: 'proxy',
|
|
17
17
|
encoding: 'json',
|
|
18
18
|
}),
|
|
19
|
+
Task.create({
|
|
20
|
+
task: 'decompile',
|
|
21
|
+
command: 'decompile [sourceFile]',
|
|
22
|
+
aliases: ['d', 'decompile-archetype'],
|
|
23
|
+
description: 'Decompile a Michelson smart contract to Archetype source code',
|
|
24
|
+
options: [],
|
|
25
|
+
handler: 'proxy',
|
|
26
|
+
encoding: 'json',
|
|
27
|
+
}),
|
|
19
28
|
Task.create({
|
|
20
29
|
task: 'get-image',
|
|
21
30
|
command: 'get-image',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taqueria/plugin-archetype",
|
|
3
|
-
"version": "0.54.
|
|
3
|
+
"version": "0.54.4",
|
|
4
4
|
"description": "A taqueria plugin for compiling Archetype smart contracts",
|
|
5
5
|
"targets": {
|
|
6
6
|
"default": {
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
},
|
|
41
41
|
"homepage": "https://github.com/pinnacle-labs/taqueria#readme",
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@taqueria/node-sdk": "^0.54.
|
|
43
|
+
"@taqueria/node-sdk": "^0.54.4",
|
|
44
44
|
"fast-glob": "^3.3.1",
|
|
45
45
|
"ts-pattern": "^5.0.6"
|
|
46
46
|
},
|