@taqueria/plugin-ligo 0.40.0 → 0.40.2
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/compile.ts +27 -3
- package/index.js +23 -1
- package/index.js.map +1 -1
- package/index.mjs +24 -2
- package/index.mjs.map +1 -1
- package/package.json +2 -2
package/compile.ts
CHANGED
|
@@ -8,8 +8,10 @@ import {
|
|
|
8
8
|
sendRes,
|
|
9
9
|
sendWarn,
|
|
10
10
|
} from '@taqueria/node-sdk';
|
|
11
|
+
import { createReadStream } from 'fs';
|
|
11
12
|
import { access, readFile, writeFile } from 'fs/promises';
|
|
12
13
|
import { basename, extname, join } from 'path';
|
|
14
|
+
import * as readline from 'readline';
|
|
13
15
|
import {
|
|
14
16
|
CompileOpts as Opts,
|
|
15
17
|
emitExternalError,
|
|
@@ -223,9 +225,31 @@ const compileExpr =
|
|
|
223
225
|
});
|
|
224
226
|
};
|
|
225
227
|
|
|
226
|
-
const getExprNames = (parsedArgs: Opts, sourceFile: string): Promise<string[]> =>
|
|
227
|
-
|
|
228
|
-
|
|
228
|
+
const getExprNames = (parsedArgs: Opts, sourceFile: string): Promise<string[]> => {
|
|
229
|
+
return new Promise((resolve, reject) => {
|
|
230
|
+
const inputFilePath = getInputFilenameAbsPath(parsedArgs, sourceFile);
|
|
231
|
+
const readInterface = readline.createInterface({
|
|
232
|
+
input: createReadStream(inputFilePath),
|
|
233
|
+
output: process.stdout,
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
const variableNames: string[] = [];
|
|
237
|
+
|
|
238
|
+
readInterface.on('line', function(line) {
|
|
239
|
+
// Skip lines that start with a comment
|
|
240
|
+
if (!line.trim().startsWith('//')) {
|
|
241
|
+
const matches = line.match(/(?<=\s*(let|const)\s+)[a-zA-Z0-9_]+/g);
|
|
242
|
+
if (matches) {
|
|
243
|
+
variableNames.push(...matches);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
readInterface.on('close', function() {
|
|
249
|
+
resolve(variableNames);
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
};
|
|
229
253
|
|
|
230
254
|
const compileExprs = (
|
|
231
255
|
parsedArgs: Opts,
|
package/index.js
CHANGED
|
@@ -111,8 +111,10 @@ var emitExternalError = (err, sourceFile) => {
|
|
|
111
111
|
|
|
112
112
|
// compile.ts
|
|
113
113
|
var import_node_sdk3 = require("@taqueria/node-sdk");
|
|
114
|
+
var import_fs = require("fs");
|
|
114
115
|
var import_promises2 = require("fs/promises");
|
|
115
116
|
var import_path2 = require("path");
|
|
117
|
+
var readline = __toESM(require("readline"));
|
|
116
118
|
var COMPILE_ERR_MSG = "Not compiled";
|
|
117
119
|
var isStorageKind = (exprKind) => exprKind === "storage" || exprKind === "default_storage";
|
|
118
120
|
var isSupportedLigoSyntax = (sourceFile) => /\.(mligo|jsligo)$/.test(sourceFile);
|
|
@@ -261,7 +263,27 @@ var compileExpr = (parsedArgs, sourceFile, module2, exprKind) => (exprName) => {
|
|
|
261
263
|
};
|
|
262
264
|
});
|
|
263
265
|
};
|
|
264
|
-
var getExprNames = (parsedArgs, sourceFile) =>
|
|
266
|
+
var getExprNames = (parsedArgs, sourceFile) => {
|
|
267
|
+
return new Promise((resolve, reject) => {
|
|
268
|
+
const inputFilePath = getInputFilenameAbsPath(parsedArgs, sourceFile);
|
|
269
|
+
const readInterface = readline.createInterface({
|
|
270
|
+
input: (0, import_fs.createReadStream)(inputFilePath),
|
|
271
|
+
output: process.stdout
|
|
272
|
+
});
|
|
273
|
+
const variableNames = [];
|
|
274
|
+
readInterface.on("line", function(line) {
|
|
275
|
+
if (!line.trim().startsWith("//")) {
|
|
276
|
+
const matches = line.match(/(?<=\s*(let|const)\s+)[a-zA-Z0-9_]+/g);
|
|
277
|
+
if (matches) {
|
|
278
|
+
variableNames.push(...matches);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
readInterface.on("close", function() {
|
|
283
|
+
resolve(variableNames);
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
};
|
|
265
287
|
var compileExprs = (parsedArgs, sourceFile, module2, exprKind) => getExprNames(parsedArgs, sourceFile).then((exprNames) => {
|
|
266
288
|
if (exprNames.length === 0)
|
|
267
289
|
return [];
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts","createContract.ts","ligo_templates.ts","main.ts","common.ts","compile.ts","compile-all.ts","ligo.ts","test.ts"],"sourcesContent":["import { Option, Plugin, PositionalArg, Task, Template } from '@taqueria/node-sdk';\nimport createContract from './createContract';\nimport main from './main';\n\nPlugin.create(i18n => ({\n\tschema: '1.0',\n\tversion: '0.1',\n\talias: 'ligo',\n\ttasks: [\n\t\tTask.create({\n\t\t\ttask: 'ligo',\n\t\t\tcommand: 'ligo',\n\t\t\tdescription:\n\t\t\t\t'This task allows you to run arbitrary LIGO native commands. Note that they might not benefit from the abstractions provided by Taqueria',\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tshortFlag: 'c',\n\t\t\t\t\tflag: 'command',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'The command to be passed to the underlying LIGO binary, wrapped in quotes',\n\t\t\t\t\trequired: true,\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'none',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'compile',\n\t\t\tcommand: 'compile <sourceFile>',\n\t\t\taliases: ['c', 'compile-ligo'],\n\t\t\tdescription:\n\t\t\t\t'Compile a smart contract written in a LIGO syntax to Michelson code, along with its associated storage/parameter list files if they are found',\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tflag: 'json',\n\t\t\t\t\tboolean: true,\n\t\t\t\t\tdescription: 'Emit JSON-encoded Michelson',\n\t\t\t\t}),\n\t\t\t\tOption.create({\n\t\t\t\t\tflag: 'module',\n\t\t\t\t\tshortFlag: 'm',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'The LIGO module to be compiled',\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'json',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'compile-all',\n\t\t\tcommand: 'compile-all',\n\t\t\tdescription:\n\t\t\t\t'Compile all main smart contracts written in a LIGO syntax to Michelson code, along with their associated storage/parameter list files if they are found',\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tflag: 'json',\n\t\t\t\t\tboolean: true,\n\t\t\t\t\tdescription: 'Emit JSON-encoded Michelson',\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'json',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'test',\n\t\t\tcommand: 'test <sourceFile>',\n\t\t\tdescription: 'Test a smart contract written in LIGO',\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: 'contract',\n\t\t\tcommand: 'contract <sourceFileName>',\n\t\t\tdescription: 'Create a LIGO 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 LIGO contract to generate',\n\t\t\t\t}),\n\t\t\t],\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tshortFlag: 's',\n\t\t\t\t\tflag: 'syntax',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'The syntax used in the contract',\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: createContract,\n\t\t}),\n\t],\n\tproxy: main,\n\tpostInstall: `node ${__dirname}/postinstall.js`,\n}), process.argv);\n","import { sendAsyncErr } from '@taqueria/node-sdk';\nimport { RequestArgs } from '@taqueria/node-sdk';\nimport { writeFile } from 'fs/promises';\nimport { jsligo_template, mligo_template } from './ligo_templates';\n\ninterface Opts extends RequestArgs.t {\n\tsourceFileName?: string;\n\tsyntax?: string;\n}\n\nconst getLigoTemplate = async (contractName: string, syntax: string | undefined): Promise<string> => {\n\tconst matchResult = contractName.match(/\\.[^.]+$/);\n\tconst ext = matchResult ? matchResult[0].substring(1) : null;\n\n\tif (syntax === 'mligo') return mligo_template;\n\tif (syntax === 'jsligo') return jsligo_template;\n\n\tif (syntax === undefined) {\n\t\tif (ext === 'mligo') return mligo_template;\n\t\tif (ext === 'jsligo') return jsligo_template;\n\t\treturn sendAsyncErr(\n\t\t\t`Unable to infer LIGO syntax from \"${contractName}\". Please specify a LIGO syntax via the --syntax option`,\n\t\t);\n\t} else {\n\t\treturn sendAsyncErr(`\"${syntax}\" is not a valid syntax. Please specify a valid LIGO syntax`);\n\t}\n};\n\nconst createContract = (args: RequestArgs.t) => {\n\tconst unsafeOpts = args as unknown as Opts;\n\tconst contractName = unsafeOpts.sourceFileName as string;\n\tconst syntax = unsafeOpts.syntax;\n\tconst contractsDir = `${args.config.projectDir}/${args.config.contractsDir}`;\n\treturn getLigoTemplate(contractName, syntax)\n\t\t.then(ligo_template => writeFile(`${contractsDir}/${contractName}`, ligo_template));\n};\n\nexport default createContract;\n","export const mligo_template = `\ntype storage = int\ntype return = operation list * storage\n\n(* Three entrypoints *)\n[@entry] let increment (delta : int) (store : storage) : return =\n [], store + delta\n[@entry] let decrement (delta : int) (store : storage) : return =\n [], store - delta\n[@entry] let reset (() : unit) (_ : storage) : return =\n [], 0\n`;\n\n\nexport const jsligo_template = `\ntype storage = int;\ntype ret = [list<operation>, storage];\n\n// Three entrypoints\n\n// @entry\nconst increment = (delta : int, store : storage) : ret =>\n [list([]), store + delta];\n\n// @entry\nconst decrement = (delta : int, store : storage) : ret =>\n [list([]), store - delta];\n\n// @entry\nconst reset = (_ : unit, _ : storage) : ret =>\n [list([]), 0];\n`;\n","import { RequestArgs, sendAsyncErr, sendAsyncRes } from '@taqueria/node-sdk';\nimport { getLigoDockerImage, IntersectionOpts as Opts } from './common';\nimport compile from './compile';\nimport compileAll from './compile-all';\nimport ligo from './ligo';\nimport test from './test';\n\nconst main = (parsedArgs: RequestArgs.t): Promise<void> => {\n\tconst unsafeOpts = parsedArgs as unknown as Opts;\n\tswitch (unsafeOpts.task) {\n\t\tcase 'ligo':\n\t\t\treturn ligo(unsafeOpts);\n\t\tcase 'compile':\n\t\t\treturn compile(unsafeOpts);\n\t\tcase 'compile-all':\n\t\t\treturn compileAll(unsafeOpts);\n\t\tcase 'test':\n\t\t\treturn test(parsedArgs);\n\t\tcase 'get-image':\n\t\t\treturn sendAsyncRes(getLigoDockerImage());\n\t\tdefault:\n\t\t\treturn sendAsyncErr(`${unsafeOpts.task} is not an understood task by the LIGO plugin`);\n\t}\n};\n\nexport default main;\n","import { getDockerImage, sendErr } from '@taqueria/node-sdk';\nimport { ProxyTaskArgs, RequestArgs } from '@taqueria/node-sdk/types';\nimport { join } from 'path';\n\nexport interface LigoOpts extends ProxyTaskArgs.t {\n\tcommand: string;\n}\n\nexport interface CompileOpts extends ProxyTaskArgs.t {\n\tsourceFile: string;\n\tjson: boolean;\n\tmodule?: string;\n}\n\nexport interface CompileAllOpts extends ProxyTaskArgs.t {\n\tjson: boolean;\n}\n\nexport interface TestOpts extends RequestArgs.t {\n\ttask?: string;\n\tsourceFile?: string;\n}\n\nexport type IntersectionOpts = LigoOpts & CompileOpts & CompileAllOpts & TestOpts;\n\nexport type UnionOpts = LigoOpts | CompileOpts | CompileAllOpts | TestOpts;\n\n// Should point to the latest stable version, so it needs to be updated as part of our release process.\nconst LIGO_DEFAULT_IMAGE = 'ligolang/ligo:0.73.0';\n\nconst LIGO_IMAGE_ENV_VAR = 'TAQ_LIGO_IMAGE';\n\nexport const getLigoDockerImage = (): string => getDockerImage(LIGO_DEFAULT_IMAGE, LIGO_IMAGE_ENV_VAR);\n\nexport const getInputFilenameAbsPath = (parsedArgs: UnionOpts, sourceFile: string): string =>\n\tjoin(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? 'contracts', sourceFile);\n\nexport const getInputFilenameRelPath = (parsedArgs: UnionOpts, sourceFile: string): string =>\n\tjoin(parsedArgs.config.contractsDir ?? 'contracts', sourceFile);\n\nexport const emitExternalError = (err: unknown, sourceFile: string): void => {\n\tsendErr(`\\n=== Error messages for ${sourceFile} ===`);\n\terr instanceof Error ? sendErr(err.message.replace(/Command failed.+?\\n/, '')) : sendErr(err as any);\n\tsendErr(`\\n===`);\n};\n","import {\n\texecCmd,\n\tgetArch,\n\tgetArtifactsDir,\n\tsendAsyncErr,\n\tsendErr,\n\tsendJsonRes,\n\tsendRes,\n\tsendWarn,\n} from '@taqueria/node-sdk';\nimport { access, readFile, writeFile } from 'fs/promises';\nimport { basename, extname, join } from 'path';\nimport {\n\tCompileOpts as Opts,\n\temitExternalError,\n\tgetInputFilenameAbsPath,\n\tgetInputFilenameRelPath,\n\tgetLigoDockerImage,\n\tUnionOpts,\n} from './common';\n\nexport type TableRow = { source: string; artifact: string };\n\nexport type ExprKind = 'storage' | 'default_storage' | 'parameter';\n\nexport type ModuleInfo = {\n\tmoduleName: string;\n\tsourceName: string;\n\tsourceFile: string;\n\tsyntax: 'mligo' | 'jsligo' | 'religo' | 'ligo';\n\ttype: 'file-main' | 'file-entry' | 'module-main' | 'module-entry';\n};\n\nconst COMPILE_ERR_MSG: string = 'Not compiled';\n\nconst isStorageKind = (exprKind: ExprKind): boolean => exprKind === 'storage' || exprKind === 'default_storage';\n\nexport const isSupportedLigoSyntax = (sourceFile: string) => /\\.(mligo|jsligo)$/.test(sourceFile);\n\nexport const isUnsupportedLigoSyntax = (sourceFile: string) => /\\.(ligo|religo)$/.test(sourceFile);\n\nexport const isLIGOFile = (sourceFile: string) =>\n\tisSupportedLigoSyntax(sourceFile) || isUnsupportedLigoSyntax(sourceFile);\n\nexport const isStorageListFile = (sourceFile: string): boolean =>\n\t/.+\\.(storageList|storages)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nexport const isParameterListFile = (sourceFile: string): boolean =>\n\t/.+\\.(parameterList|parameters)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nexport const listContractModules = async (parsedArgs: UnionOpts, sourceFile: string): Promise<ModuleInfo[]> => {\n\ttry {\n\t\tawait getArch();\n\t\tconst cmd = await getListDeclarationsCmd(parsedArgs, sourceFile);\n\t\tconst { stderr, stdout } = await execCmd(cmd);\n\t\tif (stderr.length > 0) return Promise.reject(stderr);\n\n\t\treturn JSON.parse(stdout).declarations.reduce(\n\t\t\t(acc: ModuleInfo[], decl: string) => {\n\t\t\t\t// We need to process delcarations (decl) like so:\n\t\t\t\t// 1. If the decl is equal to the string \"main\", then the module type is \"file-main\" and the name of the module is the sourceFile.\n\t\t\t\t// 2. If the decl is equal to $main, then the module type is \"file-entry\" and the name fo the module is the sourceFile.\n\t\t\t\t// 3. If the decl ends with .main, then the module type is \"module-main\" and the name of the module is the decl without the .main suffix.\n\t\t\t\t// 4. If the decl ends with .$main, then the module type is \"module-entry\" and the name of the module is the decl without the .$main suffix.\n\t\t\t\t// Otherwise, this is not a declaration we care about.\n\t\t\t\tconst srcFile = removeExt(basename(sourceFile));\n\t\t\t\tconst syntax = extractExt(sourceFile).replace('.', '');\n\n\t\t\t\tif (decl === 'main') {\n\t\t\t\t\treturn [...acc, { moduleName: srcFile, sourceName: sourceFile, sourceFile, type: 'file-main', syntax }];\n\t\t\t\t} else if (decl === '$main') {\n\t\t\t\t\treturn [...acc, { moduleName: srcFile, sourceName: sourceFile, sourceFile, type: 'file-entry', syntax }];\n\t\t\t\t} else if (decl.endsWith('.main')) {\n\t\t\t\t\tconst moduleName = decl.replace(/\\.main$/, '');\n\t\t\t\t\treturn [...acc, {\n\t\t\t\t\t\tmoduleName,\n\t\t\t\t\t\tsourceName: `${sourceFile}/${moduleName}`,\n\t\t\t\t\t\tsourceFile,\n\t\t\t\t\t\ttype: 'module-main',\n\t\t\t\t\t\tsyntax,\n\t\t\t\t\t}];\n\t\t\t\t} else if (decl.endsWith('.$main')) {\n\t\t\t\t\tconst moduleName = decl.replace(/\\.\\$main$/, '');\n\t\t\t\t\treturn [...acc, {\n\t\t\t\t\t\tmoduleName,\n\t\t\t\t\t\tsourceName: `${sourceFile}/${moduleName}`,\n\t\t\t\t\t\tsourceFile,\n\t\t\t\t\t\ttype: 'module-entry',\n\t\t\t\t\t\tsyntax,\n\t\t\t\t\t}];\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t[],\n\t\t);\n\t} catch (err) {\n\t\temitExternalError(err, sourceFile);\n\t\treturn [];\n\t}\n};\n\nconst getListDeclarationsCmd = async (parsedArgs: UnionOpts, sourceFile: string): Promise<string> => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw new Error(`No project directory provided`);\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} info list-declarations`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst flags = '--display-format json';\n\tconst cmd = `${baseCmd} ${inputFile} ${flags}`;\n\treturn cmd;\n};\n\nconst extractExt = (path: string): string => {\n\tconst matchResult = path.match(/\\.(ligo|religo|mligo|jsligo)$/);\n\treturn matchResult ? matchResult[0] : '';\n};\n\nconst removeExt = (path: string): string => {\n\tconst extRegex = new RegExp(extractExt(path));\n\treturn path.replace(extRegex, '');\n};\n\nconst isOutputFormatJSON = (parsedArgs: Opts): boolean => parsedArgs.json;\n\nconst getOutputContractFilename = (parsedArgs: Opts, module: ModuleInfo): string => {\n\tconst ext = isOutputFormatJSON(parsedArgs) ? '.json' : '.tz';\n\treturn join(getArtifactsDir(parsedArgs), `${module.moduleName}${ext}`);\n};\n\nconst getOutputExprFilename = (parsedArgs: Opts, module: ModuleInfo, exprKind: ExprKind, exprName: string): string => {\n\tconst contractName = module.moduleName;\n\tconst ext = isOutputFormatJSON(parsedArgs) ? '.json' : '.tz';\n\tconst outputFile = exprKind === 'default_storage'\n\t\t? `${contractName}.default_storage${ext}`\n\t\t: `${contractName}.${exprKind}.${exprName}${ext}`;\n\treturn join(getArtifactsDir(parsedArgs), `${outputFile}`);\n};\n\nconst getCompileContractCmd = async (parsedArgs: Opts, sourceFile: string, module: ModuleInfo): Promise<string> => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw new Error(`No project directory provided`);\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} compile contract`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst outputFile = `-o ${getOutputContractFilename(parsedArgs, module)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\tconst moduleFlag = module.type.startsWith('file-') ? '' : `-m ${module.moduleName}`;\n\tconst cmd = `${baseCmd} ${inputFile} ${outputFile} ${flags}${moduleFlag}`;\n\treturn cmd;\n};\n\nconst getCompileExprCmd = (\n\tparsedArgs: Opts,\n\tsourceFile: string,\n\tmodule: ModuleInfo,\n\texprKind: ExprKind,\n\texprName: string,\n): string => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw new Error(`No project directory provided`);\n\tconst compilerType = isStorageKind(exprKind) ? 'storage' : 'parameter';\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} compile ${compilerType}`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst outputFile = `-o ${getOutputExprFilename(parsedArgs, module, exprKind, exprName)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\n\t// Parameter and Storage list files are expected to import the smart contract file as the \"Contract\" module.\n\tconst moduleFlag = (() => {\n\t\tswitch (module.type) {\n\t\t\tcase 'file-main':\n\t\t\tcase 'file-entry':\n\t\t\t\treturn '-m Contract';\n\t\t\tdefault:\n\t\t\t\treturn `-m Contract.${module.moduleName}`;\n\t\t}\n\t})();\n\n\tconst cmd = `${baseCmd} ${inputFile} ${exprName} ${outputFile} ${flags} ${moduleFlag}`;\n\treturn cmd;\n};\n\nconst compileContract = async (parsedArgs: Opts, sourceFile: string, module: ModuleInfo): Promise<TableRow> => {\n\ttry {\n\t\tawait getArch();\n\t\tconst cmd = await getCompileContractCmd(parsedArgs, sourceFile, module);\n\t\tconst { stderr } = await execCmd(cmd);\n\t\tif (stderr.length > 0) sendWarn(stderr);\n\n\t\treturn {\n\t\t\tsource: module.sourceName,\n\t\t\tartifact: getOutputContractFilename(parsedArgs, module),\n\t\t};\n\t} catch (err) {\n\t\temitExternalError(err, sourceFile);\n\t\treturn {\n\t\t\tsource: module.sourceName,\n\t\t\tartifact: COMPILE_ERR_MSG,\n\t\t};\n\t}\n};\n\nconst compileExpr =\n\t(parsedArgs: Opts, sourceFile: string, module: ModuleInfo, exprKind: ExprKind) =>\n\t(exprName: string): Promise<TableRow> => {\n\t\treturn getArch()\n\t\t\t.then(() => getCompileExprCmd(parsedArgs, sourceFile, module, exprKind, exprName))\n\t\t\t.then(execCmd)\n\t\t\t.then(({ stderr }) => {\n\t\t\t\tif (stderr.length > 0) sendWarn(stderr);\n\t\t\t\tconst artifactName = getOutputExprFilename(parsedArgs, module, exprKind, exprName);\n\t\t\t\treturn {\n\t\t\t\t\tsource: module.sourceName,\n\t\t\t\t\tartifact: artifactName,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\temitExternalError(err, sourceFile);\n\t\t\t\treturn {\n\t\t\t\t\tsource: module.sourceName,\n\t\t\t\t\tartifact: `${sourceFile} not compiled`,\n\t\t\t\t};\n\t\t\t});\n\t};\n\nconst getExprNames = (parsedArgs: Opts, sourceFile: string): Promise<string[]> =>\n\treadFile(getInputFilenameAbsPath(parsedArgs, sourceFile), 'utf8')\n\t\t.then(data => data.match(/(?<=\\n\\s*(let|const)\\s+)[a-zA-Z0-9_]+/g) ?? []);\n\nconst compileExprs = (\n\tparsedArgs: Opts,\n\tsourceFile: string,\n\tmodule: ModuleInfo,\n\texprKind: ExprKind,\n): Promise<TableRow[]> =>\n\tgetExprNames(parsedArgs, sourceFile)\n\t\t.then(exprNames => {\n\t\t\tif (exprNames.length === 0) return [];\n\t\t\tconst firstExprName = exprNames.slice(0, 1)[0];\n\t\t\tconst restExprNames = exprNames.slice(1, exprNames.length);\n\t\t\tconst firstExprKind = isStorageKind(exprKind) ? 'default_storage' : 'parameter';\n\t\t\tconst restExprKind = isStorageKind(exprKind) ? 'storage' : 'parameter';\n\t\t\tconst firstExprResult = compileExpr(parsedArgs, sourceFile, module, firstExprKind)(firstExprName);\n\t\t\tconst restExprResults = restExprNames.map(compileExpr(parsedArgs, sourceFile, module, restExprKind));\n\t\t\treturn Promise.all([firstExprResult].concat(restExprResults));\n\t\t})\n\t\t.catch(err => {\n\t\t\temitExternalError(err, sourceFile);\n\t\t\treturn [{\n\t\t\t\tsource: module.sourceName,\n\t\t\t\tartifact: `No ${isStorageKind(exprKind) ? 'storage' : 'parameter'} expressions compiled`,\n\t\t\t}];\n\t\t})\n\t\t.then(results =>\n\t\t\tresults.length > 0 ? results : [{\n\t\t\t\tsource: module.sourceName,\n\t\t\t\tartifact: `No ${isStorageKind(exprKind) ? 'storage' : 'parameter'} expressions found`,\n\t\t\t}]\n\t\t);\n\nconst initContentForStorage = (module: ModuleInfo): string => {\n\tconst linkToContract = `#import \"${module.sourceFile}\" \"Contract\"\\n\\n`;\n\tconst instruction =\n\t\t'// Define your initial storage values as a list of LIGO variable definitions, the first of which will be considered the default value to be used for origination later on\\n';\n\n\tconst syntax = (() => {\n\t\tconst pair = [module.syntax, module.type].join('-');\n\t\tswitch (pair) {\n\t\t\tcase 'mligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t'// E.g. let storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t'// E.g. let storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t`// E.g. let storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t`// E.g. let storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"storage\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t'// E.g. const storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t'// E.g. const storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"storage\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t`// E.g. const storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t`// E.g. const storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn [];\n\t\t}\n\t})();\n\treturn linkToContract + instruction + syntax.join('\\n');\n};\n\nconst initContentForParameter = (module: ModuleInfo): string => {\n\tconst linkToContract = `#import \"${module.sourceFile}\" \"Contract\"\\n\\n`;\n\tconst instruction = '// Define your parameter values as a list of LIGO variable definitions\\n';\n\n\tconst syntax = (() => {\n\t\tconst pair = [module.syntax, module.type].join('-');\n\t\tswitch (pair) {\n\t\t\tcase 'mligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. let default_parameter : Contract.parameter = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. let default_parameter : parameter_of Contract = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. let default_parameter : Contract.${module.moduleName}.parameter = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. let default_parameter : parameter_of Contract.${module.moduleName} = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"parameter\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. const default_parameter : Contract.parameter = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. const default_parameter : parameter_of Contract = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"parameter\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. const default_parameter : Contract.${module.moduleName}.parameter = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. const default_parameter : parameter_of Contract.${module.moduleName} = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn [];\n\t\t}\n\t})();\n\n\treturn linkToContract + instruction + syntax.join('\\n');\n};\n\nexport const compileContractWithStorageAndParameter = async (\n\tparsedArgs: Opts,\n\tsourceFile: string,\n\tmodule: ModuleInfo,\n): Promise<TableRow[]> => {\n\tconst contractCompileResult = await compileContract(parsedArgs, sourceFile, module);\n\tif (contractCompileResult.artifact === COMPILE_ERR_MSG) return [contractCompileResult];\n\n\tconst storageListFile = `${module.moduleName}.storageList${extractExt(sourceFile)}`;\n\tconst storageListFilename = getInputFilenameAbsPath(parsedArgs, storageListFile);\n\tconst storageCompileResult = await access(storageListFilename)\n\t\t.then(() => compileExprs(parsedArgs, storageListFile, module, 'storage'))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: storage file associated with \"${module.moduleName}\" can't be found, so \"${storageListFile}\" has been created for you. Use this file to define all initial storage values for this contract\\n`,\n\t\t\t);\n\t\t\treturn writeFile(storageListFilename, initContentForStorage(module), 'utf8');\n\t\t});\n\n\tconst parameterListFile = `${module.moduleName}.parameterList${extractExt(sourceFile)}`;\n\tconst parameterListFilename = getInputFilenameAbsPath(parsedArgs, parameterListFile);\n\tconst parameterCompileResult = await access(parameterListFilename)\n\t\t.then(() => compileExprs(parsedArgs, parameterListFile, module, 'parameter'))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: parameter file associated with \"${module.moduleName}\" can't be found, so \"${parameterListFile}\" has been created for you. Use this file to define all parameter values for this contract\\n`,\n\t\t\t);\n\t\t\treturn writeFile(parameterListFilename, initContentForParameter(module), 'utf8');\n\t\t});\n\n\tconst storageArtifacts = storageCompileResult ? storageCompileResult.map(res => res.artifact).join('\\n') : '';\n\tconst parameterArtifacts = parameterCompileResult ? parameterCompileResult.map(res => res.artifact).join('\\n') : '';\n\n\tconst combinedArtifact = [\n\t\tcontractCompileResult.artifact,\n\t\tstorageArtifacts,\n\t\tparameterArtifacts,\n\t].filter(Boolean).join('\\n');\n\n\tconst combinedRow: TableRow = {\n\t\tsource: module.sourceName,\n\t\tartifact: combinedArtifact,\n\t};\n\n\treturn [combinedRow];\n};\n\nexport const compile = async (parsedArgs: Opts): Promise<void> => {\n\tconst sourceFile = parsedArgs.sourceFile;\n\tif (!isLIGOFile(sourceFile)) {\n\t\tsendErr(`${sourceFile} is not a LIGO file`);\n\t\treturn;\n\t}\n\tif (isStorageListFile(sourceFile) || isParameterListFile(sourceFile)) {\n\t\tsendErr(`Storage and parameter list files are not meant to be compiled directly`);\n\t\treturn;\n\t}\n\tif (isUnsupportedLigoSyntax(sourceFile)) {\n\t\tsendErr(`Unsupported LIGO syntax detected in ${sourceFile}. Note, we only support .jsligo and .mligo files.`);\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst modules = await listContractModules(parsedArgs, sourceFile);\n\t\tif (modules.length === 0) {\n\t\t\treturn sendJsonRes([\n\t\t\t\t{\n\t\t\t\t\tsource: sourceFile,\n\t\t\t\t\tartifact: `No contract modules found in \"${sourceFile}\"`,\n\t\t\t\t},\n\t\t\t]);\n\t\t}\n\n\t\tlet allCompileResults: TableRow[] = [];\n\t\tfor (const module of modules) {\n\t\t\t// If we're only to compile a particular module, then we'll skip any that don't match\n\t\t\tif (parsedArgs.module && parsedArgs.module !== module.moduleName) continue;\n\n\t\t\tconst compileResults = await compileContractWithStorageAndParameter(parsedArgs, sourceFile, module);\n\t\t\tallCompileResults = allCompileResults.concat(compileResults);\n\t\t}\n\n\t\tsendJsonRes(allCompileResults, { footer: `\\nCompiled ${allCompileResults.length} contract(s) in \"${sourceFile}\"` });\n\t} catch (err) {\n\t\tsendErr(`Error processing \"${sourceFile}\": ${err}`);\n\t}\n};\n\nexport default compile;\n","import { sendErr, sendJsonRes } from '@taqueria/node-sdk';\nimport glob from 'fast-glob';\nimport { join } from 'path';\nimport { CompileAllOpts, CompileAllOpts as Opts, CompileOpts } from './common';\nimport {\n\tcompileContractWithStorageAndParameter,\n\tisParameterListFile,\n\tisStorageListFile,\n\tlistContractModules,\n\tTableRow,\n} from './compile';\n\nconst compileAll = async (parsedArgs: Opts): Promise<void> => {\n\tlet compilePromises: Promise<TableRow[]>[] = [];\n\n\tconst contractFilenames = await glob(\n\t\t['**/*.ligo', '**/*.religo', '**/*.mligo', '**/*.jsligo'],\n\t\t{\n\t\t\tcwd: join(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? 'contracts'),\n\t\t\tabsolute: false,\n\t\t},\n\t);\n\n\tfor (const filename of contractFilenames) {\n\t\tif (isStorageListFile(filename) || isParameterListFile(filename)) continue;\n\t\tconst moduleNames = await listContractModules(parsedArgs as unknown as CompileAllOpts, filename);\n\t\tfor (const moduleName of moduleNames) {\n\t\t\tcompilePromises.push(compileContractWithStorageAndParameter(parsedArgs as CompileOpts, filename, moduleName));\n\t\t}\n\t}\n\n\treturn Promise.all(compilePromises)\n\t\t.then(tables => tables.flat())\n\t\t.then(sendJsonRes)\n\t\t.catch(err => sendErr(err, false));\n};\n\nexport default compileAll;\n","import { execCmd, getArch, sendAsyncErr, sendRes, spawnCmd } from '@taqueria/node-sdk';\nimport { readJsonFile, writeJsonFile } from '@taqueria/node-sdk';\nimport { join } from 'path';\nimport { getLigoDockerImage, LigoOpts as Opts } from './common';\n\nconst getArbitraryLigoCmd = (\n\tparsedArgs: Opts,\n\tuid: string,\n\tgid: string,\n\tuserArgs: string,\n): [string, Record<string, string>] => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `No project directory provided`;\n\n\tconst userMap = uid && gid ? `${uid}:${gid}` : uid;\n\tconst userMapArgs = uid ? ['-u', userMap] : [];\n\n\tconst binary = 'docker';\n\tconst baseArgs = [\n\t\t'run',\n\t\t'--rm',\n\t\t'-v',\n\t\t`${projectDir}:/project`,\n\t\t'-w',\n\t\t'/project',\n\t\t...userMapArgs,\n\t\tgetLigoDockerImage(),\n\t];\n\tconst processedUserArgs = userArgs.split(' ').map(arg => arg.startsWith('\\\\-') ? arg.substring(1) : arg).filter(arg =>\n\t\targ\n\t);\n\tconst args = [...baseArgs, ...processedUserArgs, '--skip-analytics'];\n\tconst envVars = { 'DOCKER_DEFAULT_PLATFORM': 'linux/amd64' };\n\treturn [\n\t\t[binary, ...args].join(' '),\n\t\tenvVars,\n\t];\n};\n\nconst ensureEsyExists = async (parsedArgs: Opts): Promise<string> => {\n\tconst esyJsonPath = join(parsedArgs.projectDir, 'esy.json');\n\n\ttry {\n\t\treturn await readJsonFile(esyJsonPath);\n\t} catch {\n\t\treturn await writeJsonFile(esyJsonPath)({});\n\t}\n};\n\nconst runArbitraryLigoCmd = (parsedArgs: Opts, cmd: string): Promise<string> =>\n\tensureEsyExists(parsedArgs)\n\t\t.then(getArch)\n\t\t.then(async () => {\n\t\t\tconst uid = await execCmd('id -u');\n\t\t\tconst gid = await execCmd('id -g');\n\t\t\treturn [uid.stdout.trim(), gid.stdout.trim()];\n\t\t})\n\t\t.then(([uid, gid]) => getArbitraryLigoCmd(parsedArgs, uid, gid, cmd))\n\t\t.then(([cmd, envVars]) => spawnCmd(cmd, envVars))\n\t\t.then(code =>\n\t\t\tcode !== null && code === 0\n\t\t\t\t? `Command \"${cmd}\" ran successfully by LIGO`\n\t\t\t\t: `Command \"${cmd}\" failed. Please check your command`\n\t\t)\n\t\t.catch(err => sendAsyncErr(`An internal error has occurred: ${err.message}`));\n\nconst ligo = (parsedArgs: Opts): Promise<void> => {\n\tconst args = parsedArgs.command;\n\treturn runArbitraryLigoCmd(parsedArgs, args).then(sendRes).catch(err => sendAsyncErr(err, false));\n};\n\nexport default ligo;\n","import { execCmd, getArch, sendAsyncErr, sendJsonRes, sendWarn } from '@taqueria/node-sdk';\nimport { emitExternalError, getInputFilenameRelPath, getLigoDockerImage, TestOpts as Opts } from './common';\n\ntype TableRow = { contract: string; testResults: string };\n\nconst getTestContractCmd = (parsedArgs: Opts, sourceFile: string): string => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `No project directory provided`;\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} run test`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst cmd = `${baseCmd} ${inputFile}`;\n\treturn cmd;\n};\n\nconst testContract = (parsedArgs: Opts, sourceFile: string): Promise<TableRow> =>\n\tgetArch()\n\t\t.then(() => getTestContractCmd(parsedArgs, sourceFile))\n\t\t.then(execCmd)\n\t\t.then(({ stdout, stderr }) => {\n\t\t\tif (stderr.length > 0) sendWarn(stderr);\n\t\t\tconst result = '🎉 All tests passed 🎉';\n\t\t\treturn {\n\t\t\t\tcontract: sourceFile,\n\t\t\t\ttestResults: stdout.length > 0 ? `${stdout}\\n${result}` : result,\n\t\t\t};\n\t\t})\n\t\t.catch(err => {\n\t\t\temitExternalError(err, sourceFile);\n\t\t\treturn {\n\t\t\t\tcontract: sourceFile,\n\t\t\t\ttestResults: 'Some tests failed :(',\n\t\t\t};\n\t\t});\n\nconst test = (parsedArgs: Opts): Promise<void> => {\n\tconst sourceFile = parsedArgs.sourceFile;\n\tif (!sourceFile) return sendAsyncErr(`No source file provided`);\n\treturn testContract(parsedArgs, sourceFile).then(result => [result]).then(sendJsonRes).catch(err =>\n\t\tsendAsyncErr(err, false)\n\t);\n};\n\nexport default test;\n"],"mappings":"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","names":["import_node_sdk","import_node_sdk","import_node_sdk","import_node_sdk","import_promises","import_path","module","import_node_sdk","import_path","glob","import_node_sdk","import_path","cmd","import_node_sdk"]}
|
|
1
|
+
{"version":3,"sources":["index.ts","createContract.ts","ligo_templates.ts","main.ts","common.ts","compile.ts","compile-all.ts","ligo.ts","test.ts"],"sourcesContent":["import { Option, Plugin, PositionalArg, Task, Template } from '@taqueria/node-sdk';\nimport createContract from './createContract';\nimport main from './main';\n\nPlugin.create(i18n => ({\n\tschema: '1.0',\n\tversion: '0.1',\n\talias: 'ligo',\n\ttasks: [\n\t\tTask.create({\n\t\t\ttask: 'ligo',\n\t\t\tcommand: 'ligo',\n\t\t\tdescription:\n\t\t\t\t'This task allows you to run arbitrary LIGO native commands. Note that they might not benefit from the abstractions provided by Taqueria',\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tshortFlag: 'c',\n\t\t\t\t\tflag: 'command',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'The command to be passed to the underlying LIGO binary, wrapped in quotes',\n\t\t\t\t\trequired: true,\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'none',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'compile',\n\t\t\tcommand: 'compile <sourceFile>',\n\t\t\taliases: ['c', 'compile-ligo'],\n\t\t\tdescription:\n\t\t\t\t'Compile a smart contract written in a LIGO syntax to Michelson code, along with its associated storage/parameter list files if they are found',\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tflag: 'json',\n\t\t\t\t\tboolean: true,\n\t\t\t\t\tdescription: 'Emit JSON-encoded Michelson',\n\t\t\t\t}),\n\t\t\t\tOption.create({\n\t\t\t\t\tflag: 'module',\n\t\t\t\t\tshortFlag: 'm',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'The LIGO module to be compiled',\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'json',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'compile-all',\n\t\t\tcommand: 'compile-all',\n\t\t\tdescription:\n\t\t\t\t'Compile all main smart contracts written in a LIGO syntax to Michelson code, along with their associated storage/parameter list files if they are found',\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tflag: 'json',\n\t\t\t\t\tboolean: true,\n\t\t\t\t\tdescription: 'Emit JSON-encoded Michelson',\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'json',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'test',\n\t\t\tcommand: 'test <sourceFile>',\n\t\t\tdescription: 'Test a smart contract written in LIGO',\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: 'contract',\n\t\t\tcommand: 'contract <sourceFileName>',\n\t\t\tdescription: 'Create a LIGO 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 LIGO contract to generate',\n\t\t\t\t}),\n\t\t\t],\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tshortFlag: 's',\n\t\t\t\t\tflag: 'syntax',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'The syntax used in the contract',\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: createContract,\n\t\t}),\n\t],\n\tproxy: main,\n\tpostInstall: `node ${__dirname}/postinstall.js`,\n}), process.argv);\n","import { sendAsyncErr } from '@taqueria/node-sdk';\nimport { RequestArgs } from '@taqueria/node-sdk';\nimport { writeFile } from 'fs/promises';\nimport { jsligo_template, mligo_template } from './ligo_templates';\n\ninterface Opts extends RequestArgs.t {\n\tsourceFileName?: string;\n\tsyntax?: string;\n}\n\nconst getLigoTemplate = async (contractName: string, syntax: string | undefined): Promise<string> => {\n\tconst matchResult = contractName.match(/\\.[^.]+$/);\n\tconst ext = matchResult ? matchResult[0].substring(1) : null;\n\n\tif (syntax === 'mligo') return mligo_template;\n\tif (syntax === 'jsligo') return jsligo_template;\n\n\tif (syntax === undefined) {\n\t\tif (ext === 'mligo') return mligo_template;\n\t\tif (ext === 'jsligo') return jsligo_template;\n\t\treturn sendAsyncErr(\n\t\t\t`Unable to infer LIGO syntax from \"${contractName}\". Please specify a LIGO syntax via the --syntax option`,\n\t\t);\n\t} else {\n\t\treturn sendAsyncErr(`\"${syntax}\" is not a valid syntax. Please specify a valid LIGO syntax`);\n\t}\n};\n\nconst createContract = (args: RequestArgs.t) => {\n\tconst unsafeOpts = args as unknown as Opts;\n\tconst contractName = unsafeOpts.sourceFileName as string;\n\tconst syntax = unsafeOpts.syntax;\n\tconst contractsDir = `${args.config.projectDir}/${args.config.contractsDir}`;\n\treturn getLigoTemplate(contractName, syntax)\n\t\t.then(ligo_template => writeFile(`${contractsDir}/${contractName}`, ligo_template));\n};\n\nexport default createContract;\n","export const mligo_template = `\ntype storage = int\ntype return = operation list * storage\n\n(* Three entrypoints *)\n[@entry] let increment (delta : int) (store : storage) : return =\n [], store + delta\n[@entry] let decrement (delta : int) (store : storage) : return =\n [], store - delta\n[@entry] let reset (() : unit) (_ : storage) : return =\n [], 0\n`;\n\n\nexport const jsligo_template = `\ntype storage = int;\ntype ret = [list<operation>, storage];\n\n// Three entrypoints\n\n// @entry\nconst increment = (delta : int, store : storage) : ret =>\n [list([]), store + delta];\n\n// @entry\nconst decrement = (delta : int, store : storage) : ret =>\n [list([]), store - delta];\n\n// @entry\nconst reset = (_ : unit, _ : storage) : ret =>\n [list([]), 0];\n`;\n","import { RequestArgs, sendAsyncErr, sendAsyncRes } from '@taqueria/node-sdk';\nimport { getLigoDockerImage, IntersectionOpts as Opts } from './common';\nimport compile from './compile';\nimport compileAll from './compile-all';\nimport ligo from './ligo';\nimport test from './test';\n\nconst main = (parsedArgs: RequestArgs.t): Promise<void> => {\n\tconst unsafeOpts = parsedArgs as unknown as Opts;\n\tswitch (unsafeOpts.task) {\n\t\tcase 'ligo':\n\t\t\treturn ligo(unsafeOpts);\n\t\tcase 'compile':\n\t\t\treturn compile(unsafeOpts);\n\t\tcase 'compile-all':\n\t\t\treturn compileAll(unsafeOpts);\n\t\tcase 'test':\n\t\t\treturn test(parsedArgs);\n\t\tcase 'get-image':\n\t\t\treturn sendAsyncRes(getLigoDockerImage());\n\t\tdefault:\n\t\t\treturn sendAsyncErr(`${unsafeOpts.task} is not an understood task by the LIGO plugin`);\n\t}\n};\n\nexport default main;\n","import { getDockerImage, sendErr } from '@taqueria/node-sdk';\nimport { ProxyTaskArgs, RequestArgs } from '@taqueria/node-sdk/types';\nimport { join } from 'path';\n\nexport interface LigoOpts extends ProxyTaskArgs.t {\n\tcommand: string;\n}\n\nexport interface CompileOpts extends ProxyTaskArgs.t {\n\tsourceFile: string;\n\tjson: boolean;\n\tmodule?: string;\n}\n\nexport interface CompileAllOpts extends ProxyTaskArgs.t {\n\tjson: boolean;\n}\n\nexport interface TestOpts extends RequestArgs.t {\n\ttask?: string;\n\tsourceFile?: string;\n}\n\nexport type IntersectionOpts = LigoOpts & CompileOpts & CompileAllOpts & TestOpts;\n\nexport type UnionOpts = LigoOpts | CompileOpts | CompileAllOpts | TestOpts;\n\n// Should point to the latest stable version, so it needs to be updated as part of our release process.\nconst LIGO_DEFAULT_IMAGE = 'ligolang/ligo:0.73.0';\n\nconst LIGO_IMAGE_ENV_VAR = 'TAQ_LIGO_IMAGE';\n\nexport const getLigoDockerImage = (): string => getDockerImage(LIGO_DEFAULT_IMAGE, LIGO_IMAGE_ENV_VAR);\n\nexport const getInputFilenameAbsPath = (parsedArgs: UnionOpts, sourceFile: string): string =>\n\tjoin(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? 'contracts', sourceFile);\n\nexport const getInputFilenameRelPath = (parsedArgs: UnionOpts, sourceFile: string): string =>\n\tjoin(parsedArgs.config.contractsDir ?? 'contracts', sourceFile);\n\nexport const emitExternalError = (err: unknown, sourceFile: string): void => {\n\tsendErr(`\\n=== Error messages for ${sourceFile} ===`);\n\terr instanceof Error ? sendErr(err.message.replace(/Command failed.+?\\n/, '')) : sendErr(err as any);\n\tsendErr(`\\n===`);\n};\n","import {\n\texecCmd,\n\tgetArch,\n\tgetArtifactsDir,\n\tsendAsyncErr,\n\tsendErr,\n\tsendJsonRes,\n\tsendRes,\n\tsendWarn,\n} from '@taqueria/node-sdk';\nimport { createReadStream } from 'fs';\nimport { access, readFile, writeFile } from 'fs/promises';\nimport { basename, extname, join } from 'path';\nimport * as readline from 'readline';\nimport {\n\tCompileOpts as Opts,\n\temitExternalError,\n\tgetInputFilenameAbsPath,\n\tgetInputFilenameRelPath,\n\tgetLigoDockerImage,\n\tUnionOpts,\n} from './common';\n\nexport type TableRow = { source: string; artifact: string };\n\nexport type ExprKind = 'storage' | 'default_storage' | 'parameter';\n\nexport type ModuleInfo = {\n\tmoduleName: string;\n\tsourceName: string;\n\tsourceFile: string;\n\tsyntax: 'mligo' | 'jsligo' | 'religo' | 'ligo';\n\ttype: 'file-main' | 'file-entry' | 'module-main' | 'module-entry';\n};\n\nconst COMPILE_ERR_MSG: string = 'Not compiled';\n\nconst isStorageKind = (exprKind: ExprKind): boolean => exprKind === 'storage' || exprKind === 'default_storage';\n\nexport const isSupportedLigoSyntax = (sourceFile: string) => /\\.(mligo|jsligo)$/.test(sourceFile);\n\nexport const isUnsupportedLigoSyntax = (sourceFile: string) => /\\.(ligo|religo)$/.test(sourceFile);\n\nexport const isLIGOFile = (sourceFile: string) =>\n\tisSupportedLigoSyntax(sourceFile) || isUnsupportedLigoSyntax(sourceFile);\n\nexport const isStorageListFile = (sourceFile: string): boolean =>\n\t/.+\\.(storageList|storages)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nexport const isParameterListFile = (sourceFile: string): boolean =>\n\t/.+\\.(parameterList|parameters)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nexport const listContractModules = async (parsedArgs: UnionOpts, sourceFile: string): Promise<ModuleInfo[]> => {\n\ttry {\n\t\tawait getArch();\n\t\tconst cmd = await getListDeclarationsCmd(parsedArgs, sourceFile);\n\t\tconst { stderr, stdout } = await execCmd(cmd);\n\t\tif (stderr.length > 0) return Promise.reject(stderr);\n\n\t\treturn JSON.parse(stdout).declarations.reduce(\n\t\t\t(acc: ModuleInfo[], decl: string) => {\n\t\t\t\t// We need to process delcarations (decl) like so:\n\t\t\t\t// 1. If the decl is equal to the string \"main\", then the module type is \"file-main\" and the name of the module is the sourceFile.\n\t\t\t\t// 2. If the decl is equal to $main, then the module type is \"file-entry\" and the name fo the module is the sourceFile.\n\t\t\t\t// 3. If the decl ends with .main, then the module type is \"module-main\" and the name of the module is the decl without the .main suffix.\n\t\t\t\t// 4. If the decl ends with .$main, then the module type is \"module-entry\" and the name of the module is the decl without the .$main suffix.\n\t\t\t\t// Otherwise, this is not a declaration we care about.\n\t\t\t\tconst srcFile = removeExt(basename(sourceFile));\n\t\t\t\tconst syntax = extractExt(sourceFile).replace('.', '');\n\n\t\t\t\tif (decl === 'main') {\n\t\t\t\t\treturn [...acc, { moduleName: srcFile, sourceName: sourceFile, sourceFile, type: 'file-main', syntax }];\n\t\t\t\t} else if (decl === '$main') {\n\t\t\t\t\treturn [...acc, { moduleName: srcFile, sourceName: sourceFile, sourceFile, type: 'file-entry', syntax }];\n\t\t\t\t} else if (decl.endsWith('.main')) {\n\t\t\t\t\tconst moduleName = decl.replace(/\\.main$/, '');\n\t\t\t\t\treturn [...acc, {\n\t\t\t\t\t\tmoduleName,\n\t\t\t\t\t\tsourceName: `${sourceFile}/${moduleName}`,\n\t\t\t\t\t\tsourceFile,\n\t\t\t\t\t\ttype: 'module-main',\n\t\t\t\t\t\tsyntax,\n\t\t\t\t\t}];\n\t\t\t\t} else if (decl.endsWith('.$main')) {\n\t\t\t\t\tconst moduleName = decl.replace(/\\.\\$main$/, '');\n\t\t\t\t\treturn [...acc, {\n\t\t\t\t\t\tmoduleName,\n\t\t\t\t\t\tsourceName: `${sourceFile}/${moduleName}`,\n\t\t\t\t\t\tsourceFile,\n\t\t\t\t\t\ttype: 'module-entry',\n\t\t\t\t\t\tsyntax,\n\t\t\t\t\t}];\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t[],\n\t\t);\n\t} catch (err) {\n\t\temitExternalError(err, sourceFile);\n\t\treturn [];\n\t}\n};\n\nconst getListDeclarationsCmd = async (parsedArgs: UnionOpts, sourceFile: string): Promise<string> => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw new Error(`No project directory provided`);\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} info list-declarations`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst flags = '--display-format json';\n\tconst cmd = `${baseCmd} ${inputFile} ${flags}`;\n\treturn cmd;\n};\n\nconst extractExt = (path: string): string => {\n\tconst matchResult = path.match(/\\.(ligo|religo|mligo|jsligo)$/);\n\treturn matchResult ? matchResult[0] : '';\n};\n\nconst removeExt = (path: string): string => {\n\tconst extRegex = new RegExp(extractExt(path));\n\treturn path.replace(extRegex, '');\n};\n\nconst isOutputFormatJSON = (parsedArgs: Opts): boolean => parsedArgs.json;\n\nconst getOutputContractFilename = (parsedArgs: Opts, module: ModuleInfo): string => {\n\tconst ext = isOutputFormatJSON(parsedArgs) ? '.json' : '.tz';\n\treturn join(getArtifactsDir(parsedArgs), `${module.moduleName}${ext}`);\n};\n\nconst getOutputExprFilename = (parsedArgs: Opts, module: ModuleInfo, exprKind: ExprKind, exprName: string): string => {\n\tconst contractName = module.moduleName;\n\tconst ext = isOutputFormatJSON(parsedArgs) ? '.json' : '.tz';\n\tconst outputFile = exprKind === 'default_storage'\n\t\t? `${contractName}.default_storage${ext}`\n\t\t: `${contractName}.${exprKind}.${exprName}${ext}`;\n\treturn join(getArtifactsDir(parsedArgs), `${outputFile}`);\n};\n\nconst getCompileContractCmd = async (parsedArgs: Opts, sourceFile: string, module: ModuleInfo): Promise<string> => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw new Error(`No project directory provided`);\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} compile contract`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst outputFile = `-o ${getOutputContractFilename(parsedArgs, module)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\tconst moduleFlag = module.type.startsWith('file-') ? '' : `-m ${module.moduleName}`;\n\tconst cmd = `${baseCmd} ${inputFile} ${outputFile} ${flags}${moduleFlag}`;\n\treturn cmd;\n};\n\nconst getCompileExprCmd = (\n\tparsedArgs: Opts,\n\tsourceFile: string,\n\tmodule: ModuleInfo,\n\texprKind: ExprKind,\n\texprName: string,\n): string => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw new Error(`No project directory provided`);\n\tconst compilerType = isStorageKind(exprKind) ? 'storage' : 'parameter';\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} compile ${compilerType}`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst outputFile = `-o ${getOutputExprFilename(parsedArgs, module, exprKind, exprName)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\n\t// Parameter and Storage list files are expected to import the smart contract file as the \"Contract\" module.\n\tconst moduleFlag = (() => {\n\t\tswitch (module.type) {\n\t\t\tcase 'file-main':\n\t\t\tcase 'file-entry':\n\t\t\t\treturn '-m Contract';\n\t\t\tdefault:\n\t\t\t\treturn `-m Contract.${module.moduleName}`;\n\t\t}\n\t})();\n\n\tconst cmd = `${baseCmd} ${inputFile} ${exprName} ${outputFile} ${flags} ${moduleFlag}`;\n\treturn cmd;\n};\n\nconst compileContract = async (parsedArgs: Opts, sourceFile: string, module: ModuleInfo): Promise<TableRow> => {\n\ttry {\n\t\tawait getArch();\n\t\tconst cmd = await getCompileContractCmd(parsedArgs, sourceFile, module);\n\t\tconst { stderr } = await execCmd(cmd);\n\t\tif (stderr.length > 0) sendWarn(stderr);\n\n\t\treturn {\n\t\t\tsource: module.sourceName,\n\t\t\tartifact: getOutputContractFilename(parsedArgs, module),\n\t\t};\n\t} catch (err) {\n\t\temitExternalError(err, sourceFile);\n\t\treturn {\n\t\t\tsource: module.sourceName,\n\t\t\tartifact: COMPILE_ERR_MSG,\n\t\t};\n\t}\n};\n\nconst compileExpr =\n\t(parsedArgs: Opts, sourceFile: string, module: ModuleInfo, exprKind: ExprKind) =>\n\t(exprName: string): Promise<TableRow> => {\n\t\treturn getArch()\n\t\t\t.then(() => getCompileExprCmd(parsedArgs, sourceFile, module, exprKind, exprName))\n\t\t\t.then(execCmd)\n\t\t\t.then(({ stderr }) => {\n\t\t\t\tif (stderr.length > 0) sendWarn(stderr);\n\t\t\t\tconst artifactName = getOutputExprFilename(parsedArgs, module, exprKind, exprName);\n\t\t\t\treturn {\n\t\t\t\t\tsource: module.sourceName,\n\t\t\t\t\tartifact: artifactName,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\temitExternalError(err, sourceFile);\n\t\t\t\treturn {\n\t\t\t\t\tsource: module.sourceName,\n\t\t\t\t\tartifact: `${sourceFile} not compiled`,\n\t\t\t\t};\n\t\t\t});\n\t};\n\nconst getExprNames = (parsedArgs: Opts, sourceFile: string): Promise<string[]> => {\n\treturn new Promise((resolve, reject) => {\n\t\tconst inputFilePath = getInputFilenameAbsPath(parsedArgs, sourceFile);\n\t\tconst readInterface = readline.createInterface({\n\t\t\tinput: createReadStream(inputFilePath),\n\t\t\toutput: process.stdout,\n\t\t});\n\n\t\tconst variableNames: string[] = [];\n\n\t\treadInterface.on('line', function(line) {\n\t\t\t// Skip lines that start with a comment\n\t\t\tif (!line.trim().startsWith('//')) {\n\t\t\t\tconst matches = line.match(/(?<=\\s*(let|const)\\s+)[a-zA-Z0-9_]+/g);\n\t\t\t\tif (matches) {\n\t\t\t\t\tvariableNames.push(...matches);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treadInterface.on('close', function() {\n\t\t\tresolve(variableNames);\n\t\t});\n\t});\n};\n\nconst compileExprs = (\n\tparsedArgs: Opts,\n\tsourceFile: string,\n\tmodule: ModuleInfo,\n\texprKind: ExprKind,\n): Promise<TableRow[]> =>\n\tgetExprNames(parsedArgs, sourceFile)\n\t\t.then(exprNames => {\n\t\t\tif (exprNames.length === 0) return [];\n\t\t\tconst firstExprName = exprNames.slice(0, 1)[0];\n\t\t\tconst restExprNames = exprNames.slice(1, exprNames.length);\n\t\t\tconst firstExprKind = isStorageKind(exprKind) ? 'default_storage' : 'parameter';\n\t\t\tconst restExprKind = isStorageKind(exprKind) ? 'storage' : 'parameter';\n\t\t\tconst firstExprResult = compileExpr(parsedArgs, sourceFile, module, firstExprKind)(firstExprName);\n\t\t\tconst restExprResults = restExprNames.map(compileExpr(parsedArgs, sourceFile, module, restExprKind));\n\t\t\treturn Promise.all([firstExprResult].concat(restExprResults));\n\t\t})\n\t\t.catch(err => {\n\t\t\temitExternalError(err, sourceFile);\n\t\t\treturn [{\n\t\t\t\tsource: module.sourceName,\n\t\t\t\tartifact: `No ${isStorageKind(exprKind) ? 'storage' : 'parameter'} expressions compiled`,\n\t\t\t}];\n\t\t})\n\t\t.then(results =>\n\t\t\tresults.length > 0 ? results : [{\n\t\t\t\tsource: module.sourceName,\n\t\t\t\tartifact: `No ${isStorageKind(exprKind) ? 'storage' : 'parameter'} expressions found`,\n\t\t\t}]\n\t\t);\n\nconst initContentForStorage = (module: ModuleInfo): string => {\n\tconst linkToContract = `#import \"${module.sourceFile}\" \"Contract\"\\n\\n`;\n\tconst instruction =\n\t\t'// Define your initial storage values as a list of LIGO variable definitions, the first of which will be considered the default value to be used for origination later on\\n';\n\n\tconst syntax = (() => {\n\t\tconst pair = [module.syntax, module.type].join('-');\n\t\tswitch (pair) {\n\t\t\tcase 'mligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t'// E.g. let storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t'// E.g. let storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t`// E.g. let storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t`// E.g. let storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"storage\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t'// E.g. const storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t'// E.g. const storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"storage\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t`// E.g. const storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t`// E.g. const storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn [];\n\t\t}\n\t})();\n\treturn linkToContract + instruction + syntax.join('\\n');\n};\n\nconst initContentForParameter = (module: ModuleInfo): string => {\n\tconst linkToContract = `#import \"${module.sourceFile}\" \"Contract\"\\n\\n`;\n\tconst instruction = '// Define your parameter values as a list of LIGO variable definitions\\n';\n\n\tconst syntax = (() => {\n\t\tconst pair = [module.syntax, module.type].join('-');\n\t\tswitch (pair) {\n\t\t\tcase 'mligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. let default_parameter : Contract.parameter = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. let default_parameter : parameter_of Contract = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. let default_parameter : Contract.${module.moduleName}.parameter = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. let default_parameter : parameter_of Contract.${module.moduleName} = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"parameter\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. const default_parameter : Contract.parameter = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. const default_parameter : parameter_of Contract = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"parameter\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. const default_parameter : Contract.${module.moduleName}.parameter = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. const default_parameter : parameter_of Contract.${module.moduleName} = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn [];\n\t\t}\n\t})();\n\n\treturn linkToContract + instruction + syntax.join('\\n');\n};\n\nexport const compileContractWithStorageAndParameter = async (\n\tparsedArgs: Opts,\n\tsourceFile: string,\n\tmodule: ModuleInfo,\n): Promise<TableRow[]> => {\n\tconst contractCompileResult = await compileContract(parsedArgs, sourceFile, module);\n\tif (contractCompileResult.artifact === COMPILE_ERR_MSG) return [contractCompileResult];\n\n\tconst storageListFile = `${module.moduleName}.storageList${extractExt(sourceFile)}`;\n\tconst storageListFilename = getInputFilenameAbsPath(parsedArgs, storageListFile);\n\tconst storageCompileResult = await access(storageListFilename)\n\t\t.then(() => compileExprs(parsedArgs, storageListFile, module, 'storage'))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: storage file associated with \"${module.moduleName}\" can't be found, so \"${storageListFile}\" has been created for you. Use this file to define all initial storage values for this contract\\n`,\n\t\t\t);\n\t\t\treturn writeFile(storageListFilename, initContentForStorage(module), 'utf8');\n\t\t});\n\n\tconst parameterListFile = `${module.moduleName}.parameterList${extractExt(sourceFile)}`;\n\tconst parameterListFilename = getInputFilenameAbsPath(parsedArgs, parameterListFile);\n\tconst parameterCompileResult = await access(parameterListFilename)\n\t\t.then(() => compileExprs(parsedArgs, parameterListFile, module, 'parameter'))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: parameter file associated with \"${module.moduleName}\" can't be found, so \"${parameterListFile}\" has been created for you. Use this file to define all parameter values for this contract\\n`,\n\t\t\t);\n\t\t\treturn writeFile(parameterListFilename, initContentForParameter(module), 'utf8');\n\t\t});\n\n\tconst storageArtifacts = storageCompileResult ? storageCompileResult.map(res => res.artifact).join('\\n') : '';\n\tconst parameterArtifacts = parameterCompileResult ? parameterCompileResult.map(res => res.artifact).join('\\n') : '';\n\n\tconst combinedArtifact = [\n\t\tcontractCompileResult.artifact,\n\t\tstorageArtifacts,\n\t\tparameterArtifacts,\n\t].filter(Boolean).join('\\n');\n\n\tconst combinedRow: TableRow = {\n\t\tsource: module.sourceName,\n\t\tartifact: combinedArtifact,\n\t};\n\n\treturn [combinedRow];\n};\n\nexport const compile = async (parsedArgs: Opts): Promise<void> => {\n\tconst sourceFile = parsedArgs.sourceFile;\n\tif (!isLIGOFile(sourceFile)) {\n\t\tsendErr(`${sourceFile} is not a LIGO file`);\n\t\treturn;\n\t}\n\tif (isStorageListFile(sourceFile) || isParameterListFile(sourceFile)) {\n\t\tsendErr(`Storage and parameter list files are not meant to be compiled directly`);\n\t\treturn;\n\t}\n\tif (isUnsupportedLigoSyntax(sourceFile)) {\n\t\tsendErr(`Unsupported LIGO syntax detected in ${sourceFile}. Note, we only support .jsligo and .mligo files.`);\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst modules = await listContractModules(parsedArgs, sourceFile);\n\t\tif (modules.length === 0) {\n\t\t\treturn sendJsonRes([\n\t\t\t\t{\n\t\t\t\t\tsource: sourceFile,\n\t\t\t\t\tartifact: `No contract modules found in \"${sourceFile}\"`,\n\t\t\t\t},\n\t\t\t]);\n\t\t}\n\n\t\tlet allCompileResults: TableRow[] = [];\n\t\tfor (const module of modules) {\n\t\t\t// If we're only to compile a particular module, then we'll skip any that don't match\n\t\t\tif (parsedArgs.module && parsedArgs.module !== module.moduleName) continue;\n\n\t\t\tconst compileResults = await compileContractWithStorageAndParameter(parsedArgs, sourceFile, module);\n\t\t\tallCompileResults = allCompileResults.concat(compileResults);\n\t\t}\n\n\t\tsendJsonRes(allCompileResults, { footer: `\\nCompiled ${allCompileResults.length} contract(s) in \"${sourceFile}\"` });\n\t} catch (err) {\n\t\tsendErr(`Error processing \"${sourceFile}\": ${err}`);\n\t}\n};\n\nexport default compile;\n","import { sendErr, sendJsonRes } from '@taqueria/node-sdk';\nimport glob from 'fast-glob';\nimport { join } from 'path';\nimport { CompileAllOpts, CompileAllOpts as Opts, CompileOpts } from './common';\nimport {\n\tcompileContractWithStorageAndParameter,\n\tisParameterListFile,\n\tisStorageListFile,\n\tlistContractModules,\n\tTableRow,\n} from './compile';\n\nconst compileAll = async (parsedArgs: Opts): Promise<void> => {\n\tlet compilePromises: Promise<TableRow[]>[] = [];\n\n\tconst contractFilenames = await glob(\n\t\t['**/*.ligo', '**/*.religo', '**/*.mligo', '**/*.jsligo'],\n\t\t{\n\t\t\tcwd: join(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? 'contracts'),\n\t\t\tabsolute: false,\n\t\t},\n\t);\n\n\tfor (const filename of contractFilenames) {\n\t\tif (isStorageListFile(filename) || isParameterListFile(filename)) continue;\n\t\tconst moduleNames = await listContractModules(parsedArgs as unknown as CompileAllOpts, filename);\n\t\tfor (const moduleName of moduleNames) {\n\t\t\tcompilePromises.push(compileContractWithStorageAndParameter(parsedArgs as CompileOpts, filename, moduleName));\n\t\t}\n\t}\n\n\treturn Promise.all(compilePromises)\n\t\t.then(tables => tables.flat())\n\t\t.then(sendJsonRes)\n\t\t.catch(err => sendErr(err, false));\n};\n\nexport default compileAll;\n","import { execCmd, getArch, sendAsyncErr, sendRes, spawnCmd } from '@taqueria/node-sdk';\nimport { readJsonFile, writeJsonFile } from '@taqueria/node-sdk';\nimport { join } from 'path';\nimport { getLigoDockerImage, LigoOpts as Opts } from './common';\n\nconst getArbitraryLigoCmd = (\n\tparsedArgs: Opts,\n\tuid: string,\n\tgid: string,\n\tuserArgs: string,\n): [string, Record<string, string>] => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `No project directory provided`;\n\n\tconst userMap = uid && gid ? `${uid}:${gid}` : uid;\n\tconst userMapArgs = uid ? ['-u', userMap] : [];\n\n\tconst binary = 'docker';\n\tconst baseArgs = [\n\t\t'run',\n\t\t'--rm',\n\t\t'-v',\n\t\t`${projectDir}:/project`,\n\t\t'-w',\n\t\t'/project',\n\t\t...userMapArgs,\n\t\tgetLigoDockerImage(),\n\t];\n\tconst processedUserArgs = userArgs.split(' ').map(arg => arg.startsWith('\\\\-') ? arg.substring(1) : arg).filter(arg =>\n\t\targ\n\t);\n\tconst args = [...baseArgs, ...processedUserArgs, '--skip-analytics'];\n\tconst envVars = { 'DOCKER_DEFAULT_PLATFORM': 'linux/amd64' };\n\treturn [\n\t\t[binary, ...args].join(' '),\n\t\tenvVars,\n\t];\n};\n\nconst ensureEsyExists = async (parsedArgs: Opts): Promise<string> => {\n\tconst esyJsonPath = join(parsedArgs.projectDir, 'esy.json');\n\n\ttry {\n\t\treturn await readJsonFile(esyJsonPath);\n\t} catch {\n\t\treturn await writeJsonFile(esyJsonPath)({});\n\t}\n};\n\nconst runArbitraryLigoCmd = (parsedArgs: Opts, cmd: string): Promise<string> =>\n\tensureEsyExists(parsedArgs)\n\t\t.then(getArch)\n\t\t.then(async () => {\n\t\t\tconst uid = await execCmd('id -u');\n\t\t\tconst gid = await execCmd('id -g');\n\t\t\treturn [uid.stdout.trim(), gid.stdout.trim()];\n\t\t})\n\t\t.then(([uid, gid]) => getArbitraryLigoCmd(parsedArgs, uid, gid, cmd))\n\t\t.then(([cmd, envVars]) => spawnCmd(cmd, envVars))\n\t\t.then(code =>\n\t\t\tcode !== null && code === 0\n\t\t\t\t? `Command \"${cmd}\" ran successfully by LIGO`\n\t\t\t\t: `Command \"${cmd}\" failed. Please check your command`\n\t\t)\n\t\t.catch(err => sendAsyncErr(`An internal error has occurred: ${err.message}`));\n\nconst ligo = (parsedArgs: Opts): Promise<void> => {\n\tconst args = parsedArgs.command;\n\treturn runArbitraryLigoCmd(parsedArgs, args).then(sendRes).catch(err => sendAsyncErr(err, false));\n};\n\nexport default ligo;\n","import { execCmd, getArch, sendAsyncErr, sendJsonRes, sendWarn } from '@taqueria/node-sdk';\nimport { emitExternalError, getInputFilenameRelPath, getLigoDockerImage, TestOpts as Opts } from './common';\n\ntype TableRow = { contract: string; testResults: string };\n\nconst getTestContractCmd = (parsedArgs: Opts, sourceFile: string): string => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `No project directory provided`;\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} run test`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst cmd = `${baseCmd} ${inputFile}`;\n\treturn cmd;\n};\n\nconst testContract = (parsedArgs: Opts, sourceFile: string): Promise<TableRow> =>\n\tgetArch()\n\t\t.then(() => getTestContractCmd(parsedArgs, sourceFile))\n\t\t.then(execCmd)\n\t\t.then(({ stdout, stderr }) => {\n\t\t\tif (stderr.length > 0) sendWarn(stderr);\n\t\t\tconst result = '🎉 All tests passed 🎉';\n\t\t\treturn {\n\t\t\t\tcontract: sourceFile,\n\t\t\t\ttestResults: stdout.length > 0 ? `${stdout}\\n${result}` : result,\n\t\t\t};\n\t\t})\n\t\t.catch(err => {\n\t\t\temitExternalError(err, sourceFile);\n\t\t\treturn {\n\t\t\t\tcontract: sourceFile,\n\t\t\t\ttestResults: 'Some tests failed :(',\n\t\t\t};\n\t\t});\n\nconst test = (parsedArgs: Opts): Promise<void> => {\n\tconst sourceFile = parsedArgs.sourceFile;\n\tif (!sourceFile) return sendAsyncErr(`No source file provided`);\n\treturn testContract(parsedArgs, sourceFile).then(result => [result]).then(sendJsonRes).catch(err =>\n\t\tsendAsyncErr(err, false)\n\t);\n};\n\nexport default test;\n"],"mappings":"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","names":["import_node_sdk","import_node_sdk","import_node_sdk","import_node_sdk","import_promises","import_path","module","import_node_sdk","import_path","glob","import_node_sdk","import_path","cmd","import_node_sdk"]}
|
package/index.mjs
CHANGED
|
@@ -94,8 +94,10 @@ import {
|
|
|
94
94
|
sendJsonRes,
|
|
95
95
|
sendWarn
|
|
96
96
|
} from "@taqueria/node-sdk";
|
|
97
|
-
import {
|
|
97
|
+
import { createReadStream } from "fs";
|
|
98
|
+
import { access, writeFile as writeFile2 } from "fs/promises";
|
|
98
99
|
import { basename, join as join2 } from "path";
|
|
100
|
+
import * as readline from "readline";
|
|
99
101
|
var COMPILE_ERR_MSG = "Not compiled";
|
|
100
102
|
var isStorageKind = (exprKind) => exprKind === "storage" || exprKind === "default_storage";
|
|
101
103
|
var isSupportedLigoSyntax = (sourceFile) => /\.(mligo|jsligo)$/.test(sourceFile);
|
|
@@ -244,7 +246,27 @@ var compileExpr = (parsedArgs, sourceFile, module, exprKind) => (exprName) => {
|
|
|
244
246
|
};
|
|
245
247
|
});
|
|
246
248
|
};
|
|
247
|
-
var getExprNames = (parsedArgs, sourceFile) =>
|
|
249
|
+
var getExprNames = (parsedArgs, sourceFile) => {
|
|
250
|
+
return new Promise((resolve, reject) => {
|
|
251
|
+
const inputFilePath = getInputFilenameAbsPath(parsedArgs, sourceFile);
|
|
252
|
+
const readInterface = readline.createInterface({
|
|
253
|
+
input: createReadStream(inputFilePath),
|
|
254
|
+
output: process.stdout
|
|
255
|
+
});
|
|
256
|
+
const variableNames = [];
|
|
257
|
+
readInterface.on("line", function(line) {
|
|
258
|
+
if (!line.trim().startsWith("//")) {
|
|
259
|
+
const matches = line.match(/(?<=\s*(let|const)\s+)[a-zA-Z0-9_]+/g);
|
|
260
|
+
if (matches) {
|
|
261
|
+
variableNames.push(...matches);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
readInterface.on("close", function() {
|
|
266
|
+
resolve(variableNames);
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
};
|
|
248
270
|
var compileExprs = (parsedArgs, sourceFile, module, exprKind) => getExprNames(parsedArgs, sourceFile).then((exprNames) => {
|
|
249
271
|
if (exprNames.length === 0)
|
|
250
272
|
return [];
|
package/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts","createContract.ts","ligo_templates.ts","main.ts","common.ts","compile.ts","compile-all.ts","ligo.ts","test.ts"],"sourcesContent":["import { Option, Plugin, PositionalArg, Task, Template } from '@taqueria/node-sdk';\nimport createContract from './createContract';\nimport main from './main';\n\nPlugin.create(i18n => ({\n\tschema: '1.0',\n\tversion: '0.1',\n\talias: 'ligo',\n\ttasks: [\n\t\tTask.create({\n\t\t\ttask: 'ligo',\n\t\t\tcommand: 'ligo',\n\t\t\tdescription:\n\t\t\t\t'This task allows you to run arbitrary LIGO native commands. Note that they might not benefit from the abstractions provided by Taqueria',\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tshortFlag: 'c',\n\t\t\t\t\tflag: 'command',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'The command to be passed to the underlying LIGO binary, wrapped in quotes',\n\t\t\t\t\trequired: true,\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'none',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'compile',\n\t\t\tcommand: 'compile <sourceFile>',\n\t\t\taliases: ['c', 'compile-ligo'],\n\t\t\tdescription:\n\t\t\t\t'Compile a smart contract written in a LIGO syntax to Michelson code, along with its associated storage/parameter list files if they are found',\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tflag: 'json',\n\t\t\t\t\tboolean: true,\n\t\t\t\t\tdescription: 'Emit JSON-encoded Michelson',\n\t\t\t\t}),\n\t\t\t\tOption.create({\n\t\t\t\t\tflag: 'module',\n\t\t\t\t\tshortFlag: 'm',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'The LIGO module to be compiled',\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'json',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'compile-all',\n\t\t\tcommand: 'compile-all',\n\t\t\tdescription:\n\t\t\t\t'Compile all main smart contracts written in a LIGO syntax to Michelson code, along with their associated storage/parameter list files if they are found',\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tflag: 'json',\n\t\t\t\t\tboolean: true,\n\t\t\t\t\tdescription: 'Emit JSON-encoded Michelson',\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'json',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'test',\n\t\t\tcommand: 'test <sourceFile>',\n\t\t\tdescription: 'Test a smart contract written in LIGO',\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: 'contract',\n\t\t\tcommand: 'contract <sourceFileName>',\n\t\t\tdescription: 'Create a LIGO 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 LIGO contract to generate',\n\t\t\t\t}),\n\t\t\t],\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tshortFlag: 's',\n\t\t\t\t\tflag: 'syntax',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'The syntax used in the contract',\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: createContract,\n\t\t}),\n\t],\n\tproxy: main,\n\tpostInstall: `node ${__dirname}/postinstall.js`,\n}), process.argv);\n","import { sendAsyncErr } from '@taqueria/node-sdk';\nimport { RequestArgs } from '@taqueria/node-sdk';\nimport { writeFile } from 'fs/promises';\nimport { jsligo_template, mligo_template } from './ligo_templates';\n\ninterface Opts extends RequestArgs.t {\n\tsourceFileName?: string;\n\tsyntax?: string;\n}\n\nconst getLigoTemplate = async (contractName: string, syntax: string | undefined): Promise<string> => {\n\tconst matchResult = contractName.match(/\\.[^.]+$/);\n\tconst ext = matchResult ? matchResult[0].substring(1) : null;\n\n\tif (syntax === 'mligo') return mligo_template;\n\tif (syntax === 'jsligo') return jsligo_template;\n\n\tif (syntax === undefined) {\n\t\tif (ext === 'mligo') return mligo_template;\n\t\tif (ext === 'jsligo') return jsligo_template;\n\t\treturn sendAsyncErr(\n\t\t\t`Unable to infer LIGO syntax from \"${contractName}\". Please specify a LIGO syntax via the --syntax option`,\n\t\t);\n\t} else {\n\t\treturn sendAsyncErr(`\"${syntax}\" is not a valid syntax. Please specify a valid LIGO syntax`);\n\t}\n};\n\nconst createContract = (args: RequestArgs.t) => {\n\tconst unsafeOpts = args as unknown as Opts;\n\tconst contractName = unsafeOpts.sourceFileName as string;\n\tconst syntax = unsafeOpts.syntax;\n\tconst contractsDir = `${args.config.projectDir}/${args.config.contractsDir}`;\n\treturn getLigoTemplate(contractName, syntax)\n\t\t.then(ligo_template => writeFile(`${contractsDir}/${contractName}`, ligo_template));\n};\n\nexport default createContract;\n","export const mligo_template = `\ntype storage = int\ntype return = operation list * storage\n\n(* Three entrypoints *)\n[@entry] let increment (delta : int) (store : storage) : return =\n [], store + delta\n[@entry] let decrement (delta : int) (store : storage) : return =\n [], store - delta\n[@entry] let reset (() : unit) (_ : storage) : return =\n [], 0\n`;\n\n\nexport const jsligo_template = `\ntype storage = int;\ntype ret = [list<operation>, storage];\n\n// Three entrypoints\n\n// @entry\nconst increment = (delta : int, store : storage) : ret =>\n [list([]), store + delta];\n\n// @entry\nconst decrement = (delta : int, store : storage) : ret =>\n [list([]), store - delta];\n\n// @entry\nconst reset = (_ : unit, _ : storage) : ret =>\n [list([]), 0];\n`;\n","import { RequestArgs, sendAsyncErr, sendAsyncRes } from '@taqueria/node-sdk';\nimport { getLigoDockerImage, IntersectionOpts as Opts } from './common';\nimport compile from './compile';\nimport compileAll from './compile-all';\nimport ligo from './ligo';\nimport test from './test';\n\nconst main = (parsedArgs: RequestArgs.t): Promise<void> => {\n\tconst unsafeOpts = parsedArgs as unknown as Opts;\n\tswitch (unsafeOpts.task) {\n\t\tcase 'ligo':\n\t\t\treturn ligo(unsafeOpts);\n\t\tcase 'compile':\n\t\t\treturn compile(unsafeOpts);\n\t\tcase 'compile-all':\n\t\t\treturn compileAll(unsafeOpts);\n\t\tcase 'test':\n\t\t\treturn test(parsedArgs);\n\t\tcase 'get-image':\n\t\t\treturn sendAsyncRes(getLigoDockerImage());\n\t\tdefault:\n\t\t\treturn sendAsyncErr(`${unsafeOpts.task} is not an understood task by the LIGO plugin`);\n\t}\n};\n\nexport default main;\n","import { getDockerImage, sendErr } from '@taqueria/node-sdk';\nimport { ProxyTaskArgs, RequestArgs } from '@taqueria/node-sdk/types';\nimport { join } from 'path';\n\nexport interface LigoOpts extends ProxyTaskArgs.t {\n\tcommand: string;\n}\n\nexport interface CompileOpts extends ProxyTaskArgs.t {\n\tsourceFile: string;\n\tjson: boolean;\n\tmodule?: string;\n}\n\nexport interface CompileAllOpts extends ProxyTaskArgs.t {\n\tjson: boolean;\n}\n\nexport interface TestOpts extends RequestArgs.t {\n\ttask?: string;\n\tsourceFile?: string;\n}\n\nexport type IntersectionOpts = LigoOpts & CompileOpts & CompileAllOpts & TestOpts;\n\nexport type UnionOpts = LigoOpts | CompileOpts | CompileAllOpts | TestOpts;\n\n// Should point to the latest stable version, so it needs to be updated as part of our release process.\nconst LIGO_DEFAULT_IMAGE = 'ligolang/ligo:0.73.0';\n\nconst LIGO_IMAGE_ENV_VAR = 'TAQ_LIGO_IMAGE';\n\nexport const getLigoDockerImage = (): string => getDockerImage(LIGO_DEFAULT_IMAGE, LIGO_IMAGE_ENV_VAR);\n\nexport const getInputFilenameAbsPath = (parsedArgs: UnionOpts, sourceFile: string): string =>\n\tjoin(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? 'contracts', sourceFile);\n\nexport const getInputFilenameRelPath = (parsedArgs: UnionOpts, sourceFile: string): string =>\n\tjoin(parsedArgs.config.contractsDir ?? 'contracts', sourceFile);\n\nexport const emitExternalError = (err: unknown, sourceFile: string): void => {\n\tsendErr(`\\n=== Error messages for ${sourceFile} ===`);\n\terr instanceof Error ? sendErr(err.message.replace(/Command failed.+?\\n/, '')) : sendErr(err as any);\n\tsendErr(`\\n===`);\n};\n","import {\n\texecCmd,\n\tgetArch,\n\tgetArtifactsDir,\n\tsendAsyncErr,\n\tsendErr,\n\tsendJsonRes,\n\tsendRes,\n\tsendWarn,\n} from '@taqueria/node-sdk';\nimport { access, readFile, writeFile } from 'fs/promises';\nimport { basename, extname, join } from 'path';\nimport {\n\tCompileOpts as Opts,\n\temitExternalError,\n\tgetInputFilenameAbsPath,\n\tgetInputFilenameRelPath,\n\tgetLigoDockerImage,\n\tUnionOpts,\n} from './common';\n\nexport type TableRow = { source: string; artifact: string };\n\nexport type ExprKind = 'storage' | 'default_storage' | 'parameter';\n\nexport type ModuleInfo = {\n\tmoduleName: string;\n\tsourceName: string;\n\tsourceFile: string;\n\tsyntax: 'mligo' | 'jsligo' | 'religo' | 'ligo';\n\ttype: 'file-main' | 'file-entry' | 'module-main' | 'module-entry';\n};\n\nconst COMPILE_ERR_MSG: string = 'Not compiled';\n\nconst isStorageKind = (exprKind: ExprKind): boolean => exprKind === 'storage' || exprKind === 'default_storage';\n\nexport const isSupportedLigoSyntax = (sourceFile: string) => /\\.(mligo|jsligo)$/.test(sourceFile);\n\nexport const isUnsupportedLigoSyntax = (sourceFile: string) => /\\.(ligo|religo)$/.test(sourceFile);\n\nexport const isLIGOFile = (sourceFile: string) =>\n\tisSupportedLigoSyntax(sourceFile) || isUnsupportedLigoSyntax(sourceFile);\n\nexport const isStorageListFile = (sourceFile: string): boolean =>\n\t/.+\\.(storageList|storages)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nexport const isParameterListFile = (sourceFile: string): boolean =>\n\t/.+\\.(parameterList|parameters)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nexport const listContractModules = async (parsedArgs: UnionOpts, sourceFile: string): Promise<ModuleInfo[]> => {\n\ttry {\n\t\tawait getArch();\n\t\tconst cmd = await getListDeclarationsCmd(parsedArgs, sourceFile);\n\t\tconst { stderr, stdout } = await execCmd(cmd);\n\t\tif (stderr.length > 0) return Promise.reject(stderr);\n\n\t\treturn JSON.parse(stdout).declarations.reduce(\n\t\t\t(acc: ModuleInfo[], decl: string) => {\n\t\t\t\t// We need to process delcarations (decl) like so:\n\t\t\t\t// 1. If the decl is equal to the string \"main\", then the module type is \"file-main\" and the name of the module is the sourceFile.\n\t\t\t\t// 2. If the decl is equal to $main, then the module type is \"file-entry\" and the name fo the module is the sourceFile.\n\t\t\t\t// 3. If the decl ends with .main, then the module type is \"module-main\" and the name of the module is the decl without the .main suffix.\n\t\t\t\t// 4. If the decl ends with .$main, then the module type is \"module-entry\" and the name of the module is the decl without the .$main suffix.\n\t\t\t\t// Otherwise, this is not a declaration we care about.\n\t\t\t\tconst srcFile = removeExt(basename(sourceFile));\n\t\t\t\tconst syntax = extractExt(sourceFile).replace('.', '');\n\n\t\t\t\tif (decl === 'main') {\n\t\t\t\t\treturn [...acc, { moduleName: srcFile, sourceName: sourceFile, sourceFile, type: 'file-main', syntax }];\n\t\t\t\t} else if (decl === '$main') {\n\t\t\t\t\treturn [...acc, { moduleName: srcFile, sourceName: sourceFile, sourceFile, type: 'file-entry', syntax }];\n\t\t\t\t} else if (decl.endsWith('.main')) {\n\t\t\t\t\tconst moduleName = decl.replace(/\\.main$/, '');\n\t\t\t\t\treturn [...acc, {\n\t\t\t\t\t\tmoduleName,\n\t\t\t\t\t\tsourceName: `${sourceFile}/${moduleName}`,\n\t\t\t\t\t\tsourceFile,\n\t\t\t\t\t\ttype: 'module-main',\n\t\t\t\t\t\tsyntax,\n\t\t\t\t\t}];\n\t\t\t\t} else if (decl.endsWith('.$main')) {\n\t\t\t\t\tconst moduleName = decl.replace(/\\.\\$main$/, '');\n\t\t\t\t\treturn [...acc, {\n\t\t\t\t\t\tmoduleName,\n\t\t\t\t\t\tsourceName: `${sourceFile}/${moduleName}`,\n\t\t\t\t\t\tsourceFile,\n\t\t\t\t\t\ttype: 'module-entry',\n\t\t\t\t\t\tsyntax,\n\t\t\t\t\t}];\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t[],\n\t\t);\n\t} catch (err) {\n\t\temitExternalError(err, sourceFile);\n\t\treturn [];\n\t}\n};\n\nconst getListDeclarationsCmd = async (parsedArgs: UnionOpts, sourceFile: string): Promise<string> => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw new Error(`No project directory provided`);\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} info list-declarations`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst flags = '--display-format json';\n\tconst cmd = `${baseCmd} ${inputFile} ${flags}`;\n\treturn cmd;\n};\n\nconst extractExt = (path: string): string => {\n\tconst matchResult = path.match(/\\.(ligo|religo|mligo|jsligo)$/);\n\treturn matchResult ? matchResult[0] : '';\n};\n\nconst removeExt = (path: string): string => {\n\tconst extRegex = new RegExp(extractExt(path));\n\treturn path.replace(extRegex, '');\n};\n\nconst isOutputFormatJSON = (parsedArgs: Opts): boolean => parsedArgs.json;\n\nconst getOutputContractFilename = (parsedArgs: Opts, module: ModuleInfo): string => {\n\tconst ext = isOutputFormatJSON(parsedArgs) ? '.json' : '.tz';\n\treturn join(getArtifactsDir(parsedArgs), `${module.moduleName}${ext}`);\n};\n\nconst getOutputExprFilename = (parsedArgs: Opts, module: ModuleInfo, exprKind: ExprKind, exprName: string): string => {\n\tconst contractName = module.moduleName;\n\tconst ext = isOutputFormatJSON(parsedArgs) ? '.json' : '.tz';\n\tconst outputFile = exprKind === 'default_storage'\n\t\t? `${contractName}.default_storage${ext}`\n\t\t: `${contractName}.${exprKind}.${exprName}${ext}`;\n\treturn join(getArtifactsDir(parsedArgs), `${outputFile}`);\n};\n\nconst getCompileContractCmd = async (parsedArgs: Opts, sourceFile: string, module: ModuleInfo): Promise<string> => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw new Error(`No project directory provided`);\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} compile contract`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst outputFile = `-o ${getOutputContractFilename(parsedArgs, module)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\tconst moduleFlag = module.type.startsWith('file-') ? '' : `-m ${module.moduleName}`;\n\tconst cmd = `${baseCmd} ${inputFile} ${outputFile} ${flags}${moduleFlag}`;\n\treturn cmd;\n};\n\nconst getCompileExprCmd = (\n\tparsedArgs: Opts,\n\tsourceFile: string,\n\tmodule: ModuleInfo,\n\texprKind: ExprKind,\n\texprName: string,\n): string => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw new Error(`No project directory provided`);\n\tconst compilerType = isStorageKind(exprKind) ? 'storage' : 'parameter';\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} compile ${compilerType}`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst outputFile = `-o ${getOutputExprFilename(parsedArgs, module, exprKind, exprName)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\n\t// Parameter and Storage list files are expected to import the smart contract file as the \"Contract\" module.\n\tconst moduleFlag = (() => {\n\t\tswitch (module.type) {\n\t\t\tcase 'file-main':\n\t\t\tcase 'file-entry':\n\t\t\t\treturn '-m Contract';\n\t\t\tdefault:\n\t\t\t\treturn `-m Contract.${module.moduleName}`;\n\t\t}\n\t})();\n\n\tconst cmd = `${baseCmd} ${inputFile} ${exprName} ${outputFile} ${flags} ${moduleFlag}`;\n\treturn cmd;\n};\n\nconst compileContract = async (parsedArgs: Opts, sourceFile: string, module: ModuleInfo): Promise<TableRow> => {\n\ttry {\n\t\tawait getArch();\n\t\tconst cmd = await getCompileContractCmd(parsedArgs, sourceFile, module);\n\t\tconst { stderr } = await execCmd(cmd);\n\t\tif (stderr.length > 0) sendWarn(stderr);\n\n\t\treturn {\n\t\t\tsource: module.sourceName,\n\t\t\tartifact: getOutputContractFilename(parsedArgs, module),\n\t\t};\n\t} catch (err) {\n\t\temitExternalError(err, sourceFile);\n\t\treturn {\n\t\t\tsource: module.sourceName,\n\t\t\tartifact: COMPILE_ERR_MSG,\n\t\t};\n\t}\n};\n\nconst compileExpr =\n\t(parsedArgs: Opts, sourceFile: string, module: ModuleInfo, exprKind: ExprKind) =>\n\t(exprName: string): Promise<TableRow> => {\n\t\treturn getArch()\n\t\t\t.then(() => getCompileExprCmd(parsedArgs, sourceFile, module, exprKind, exprName))\n\t\t\t.then(execCmd)\n\t\t\t.then(({ stderr }) => {\n\t\t\t\tif (stderr.length > 0) sendWarn(stderr);\n\t\t\t\tconst artifactName = getOutputExprFilename(parsedArgs, module, exprKind, exprName);\n\t\t\t\treturn {\n\t\t\t\t\tsource: module.sourceName,\n\t\t\t\t\tartifact: artifactName,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\temitExternalError(err, sourceFile);\n\t\t\t\treturn {\n\t\t\t\t\tsource: module.sourceName,\n\t\t\t\t\tartifact: `${sourceFile} not compiled`,\n\t\t\t\t};\n\t\t\t});\n\t};\n\nconst getExprNames = (parsedArgs: Opts, sourceFile: string): Promise<string[]> =>\n\treadFile(getInputFilenameAbsPath(parsedArgs, sourceFile), 'utf8')\n\t\t.then(data => data.match(/(?<=\\n\\s*(let|const)\\s+)[a-zA-Z0-9_]+/g) ?? []);\n\nconst compileExprs = (\n\tparsedArgs: Opts,\n\tsourceFile: string,\n\tmodule: ModuleInfo,\n\texprKind: ExprKind,\n): Promise<TableRow[]> =>\n\tgetExprNames(parsedArgs, sourceFile)\n\t\t.then(exprNames => {\n\t\t\tif (exprNames.length === 0) return [];\n\t\t\tconst firstExprName = exprNames.slice(0, 1)[0];\n\t\t\tconst restExprNames = exprNames.slice(1, exprNames.length);\n\t\t\tconst firstExprKind = isStorageKind(exprKind) ? 'default_storage' : 'parameter';\n\t\t\tconst restExprKind = isStorageKind(exprKind) ? 'storage' : 'parameter';\n\t\t\tconst firstExprResult = compileExpr(parsedArgs, sourceFile, module, firstExprKind)(firstExprName);\n\t\t\tconst restExprResults = restExprNames.map(compileExpr(parsedArgs, sourceFile, module, restExprKind));\n\t\t\treturn Promise.all([firstExprResult].concat(restExprResults));\n\t\t})\n\t\t.catch(err => {\n\t\t\temitExternalError(err, sourceFile);\n\t\t\treturn [{\n\t\t\t\tsource: module.sourceName,\n\t\t\t\tartifact: `No ${isStorageKind(exprKind) ? 'storage' : 'parameter'} expressions compiled`,\n\t\t\t}];\n\t\t})\n\t\t.then(results =>\n\t\t\tresults.length > 0 ? results : [{\n\t\t\t\tsource: module.sourceName,\n\t\t\t\tartifact: `No ${isStorageKind(exprKind) ? 'storage' : 'parameter'} expressions found`,\n\t\t\t}]\n\t\t);\n\nconst initContentForStorage = (module: ModuleInfo): string => {\n\tconst linkToContract = `#import \"${module.sourceFile}\" \"Contract\"\\n\\n`;\n\tconst instruction =\n\t\t'// Define your initial storage values as a list of LIGO variable definitions, the first of which will be considered the default value to be used for origination later on\\n';\n\n\tconst syntax = (() => {\n\t\tconst pair = [module.syntax, module.type].join('-');\n\t\tswitch (pair) {\n\t\t\tcase 'mligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t'// E.g. let storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t'// E.g. let storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t`// E.g. let storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t`// E.g. let storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"storage\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t'// E.g. const storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t'// E.g. const storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"storage\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t`// E.g. const storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t`// E.g. const storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn [];\n\t\t}\n\t})();\n\treturn linkToContract + instruction + syntax.join('\\n');\n};\n\nconst initContentForParameter = (module: ModuleInfo): string => {\n\tconst linkToContract = `#import \"${module.sourceFile}\" \"Contract\"\\n\\n`;\n\tconst instruction = '// Define your parameter values as a list of LIGO variable definitions\\n';\n\n\tconst syntax = (() => {\n\t\tconst pair = [module.syntax, module.type].join('-');\n\t\tswitch (pair) {\n\t\t\tcase 'mligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. let default_parameter : Contract.parameter = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. let default_parameter : parameter_of Contract = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. let default_parameter : Contract.${module.moduleName}.parameter = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. let default_parameter : parameter_of Contract.${module.moduleName} = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"parameter\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. const default_parameter : Contract.parameter = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. const default_parameter : parameter_of Contract = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"parameter\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. const default_parameter : Contract.${module.moduleName}.parameter = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. const default_parameter : parameter_of Contract.${module.moduleName} = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn [];\n\t\t}\n\t})();\n\n\treturn linkToContract + instruction + syntax.join('\\n');\n};\n\nexport const compileContractWithStorageAndParameter = async (\n\tparsedArgs: Opts,\n\tsourceFile: string,\n\tmodule: ModuleInfo,\n): Promise<TableRow[]> => {\n\tconst contractCompileResult = await compileContract(parsedArgs, sourceFile, module);\n\tif (contractCompileResult.artifact === COMPILE_ERR_MSG) return [contractCompileResult];\n\n\tconst storageListFile = `${module.moduleName}.storageList${extractExt(sourceFile)}`;\n\tconst storageListFilename = getInputFilenameAbsPath(parsedArgs, storageListFile);\n\tconst storageCompileResult = await access(storageListFilename)\n\t\t.then(() => compileExprs(parsedArgs, storageListFile, module, 'storage'))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: storage file associated with \"${module.moduleName}\" can't be found, so \"${storageListFile}\" has been created for you. Use this file to define all initial storage values for this contract\\n`,\n\t\t\t);\n\t\t\treturn writeFile(storageListFilename, initContentForStorage(module), 'utf8');\n\t\t});\n\n\tconst parameterListFile = `${module.moduleName}.parameterList${extractExt(sourceFile)}`;\n\tconst parameterListFilename = getInputFilenameAbsPath(parsedArgs, parameterListFile);\n\tconst parameterCompileResult = await access(parameterListFilename)\n\t\t.then(() => compileExprs(parsedArgs, parameterListFile, module, 'parameter'))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: parameter file associated with \"${module.moduleName}\" can't be found, so \"${parameterListFile}\" has been created for you. Use this file to define all parameter values for this contract\\n`,\n\t\t\t);\n\t\t\treturn writeFile(parameterListFilename, initContentForParameter(module), 'utf8');\n\t\t});\n\n\tconst storageArtifacts = storageCompileResult ? storageCompileResult.map(res => res.artifact).join('\\n') : '';\n\tconst parameterArtifacts = parameterCompileResult ? parameterCompileResult.map(res => res.artifact).join('\\n') : '';\n\n\tconst combinedArtifact = [\n\t\tcontractCompileResult.artifact,\n\t\tstorageArtifacts,\n\t\tparameterArtifacts,\n\t].filter(Boolean).join('\\n');\n\n\tconst combinedRow: TableRow = {\n\t\tsource: module.sourceName,\n\t\tartifact: combinedArtifact,\n\t};\n\n\treturn [combinedRow];\n};\n\nexport const compile = async (parsedArgs: Opts): Promise<void> => {\n\tconst sourceFile = parsedArgs.sourceFile;\n\tif (!isLIGOFile(sourceFile)) {\n\t\tsendErr(`${sourceFile} is not a LIGO file`);\n\t\treturn;\n\t}\n\tif (isStorageListFile(sourceFile) || isParameterListFile(sourceFile)) {\n\t\tsendErr(`Storage and parameter list files are not meant to be compiled directly`);\n\t\treturn;\n\t}\n\tif (isUnsupportedLigoSyntax(sourceFile)) {\n\t\tsendErr(`Unsupported LIGO syntax detected in ${sourceFile}. Note, we only support .jsligo and .mligo files.`);\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst modules = await listContractModules(parsedArgs, sourceFile);\n\t\tif (modules.length === 0) {\n\t\t\treturn sendJsonRes([\n\t\t\t\t{\n\t\t\t\t\tsource: sourceFile,\n\t\t\t\t\tartifact: `No contract modules found in \"${sourceFile}\"`,\n\t\t\t\t},\n\t\t\t]);\n\t\t}\n\n\t\tlet allCompileResults: TableRow[] = [];\n\t\tfor (const module of modules) {\n\t\t\t// If we're only to compile a particular module, then we'll skip any that don't match\n\t\t\tif (parsedArgs.module && parsedArgs.module !== module.moduleName) continue;\n\n\t\t\tconst compileResults = await compileContractWithStorageAndParameter(parsedArgs, sourceFile, module);\n\t\t\tallCompileResults = allCompileResults.concat(compileResults);\n\t\t}\n\n\t\tsendJsonRes(allCompileResults, { footer: `\\nCompiled ${allCompileResults.length} contract(s) in \"${sourceFile}\"` });\n\t} catch (err) {\n\t\tsendErr(`Error processing \"${sourceFile}\": ${err}`);\n\t}\n};\n\nexport default compile;\n","import { sendErr, sendJsonRes } from '@taqueria/node-sdk';\nimport glob from 'fast-glob';\nimport { join } from 'path';\nimport { CompileAllOpts, CompileAllOpts as Opts, CompileOpts } from './common';\nimport {\n\tcompileContractWithStorageAndParameter,\n\tisParameterListFile,\n\tisStorageListFile,\n\tlistContractModules,\n\tTableRow,\n} from './compile';\n\nconst compileAll = async (parsedArgs: Opts): Promise<void> => {\n\tlet compilePromises: Promise<TableRow[]>[] = [];\n\n\tconst contractFilenames = await glob(\n\t\t['**/*.ligo', '**/*.religo', '**/*.mligo', '**/*.jsligo'],\n\t\t{\n\t\t\tcwd: join(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? 'contracts'),\n\t\t\tabsolute: false,\n\t\t},\n\t);\n\n\tfor (const filename of contractFilenames) {\n\t\tif (isStorageListFile(filename) || isParameterListFile(filename)) continue;\n\t\tconst moduleNames = await listContractModules(parsedArgs as unknown as CompileAllOpts, filename);\n\t\tfor (const moduleName of moduleNames) {\n\t\t\tcompilePromises.push(compileContractWithStorageAndParameter(parsedArgs as CompileOpts, filename, moduleName));\n\t\t}\n\t}\n\n\treturn Promise.all(compilePromises)\n\t\t.then(tables => tables.flat())\n\t\t.then(sendJsonRes)\n\t\t.catch(err => sendErr(err, false));\n};\n\nexport default compileAll;\n","import { execCmd, getArch, sendAsyncErr, sendRes, spawnCmd } from '@taqueria/node-sdk';\nimport { readJsonFile, writeJsonFile } from '@taqueria/node-sdk';\nimport { join } from 'path';\nimport { getLigoDockerImage, LigoOpts as Opts } from './common';\n\nconst getArbitraryLigoCmd = (\n\tparsedArgs: Opts,\n\tuid: string,\n\tgid: string,\n\tuserArgs: string,\n): [string, Record<string, string>] => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `No project directory provided`;\n\n\tconst userMap = uid && gid ? `${uid}:${gid}` : uid;\n\tconst userMapArgs = uid ? ['-u', userMap] : [];\n\n\tconst binary = 'docker';\n\tconst baseArgs = [\n\t\t'run',\n\t\t'--rm',\n\t\t'-v',\n\t\t`${projectDir}:/project`,\n\t\t'-w',\n\t\t'/project',\n\t\t...userMapArgs,\n\t\tgetLigoDockerImage(),\n\t];\n\tconst processedUserArgs = userArgs.split(' ').map(arg => arg.startsWith('\\\\-') ? arg.substring(1) : arg).filter(arg =>\n\t\targ\n\t);\n\tconst args = [...baseArgs, ...processedUserArgs, '--skip-analytics'];\n\tconst envVars = { 'DOCKER_DEFAULT_PLATFORM': 'linux/amd64' };\n\treturn [\n\t\t[binary, ...args].join(' '),\n\t\tenvVars,\n\t];\n};\n\nconst ensureEsyExists = async (parsedArgs: Opts): Promise<string> => {\n\tconst esyJsonPath = join(parsedArgs.projectDir, 'esy.json');\n\n\ttry {\n\t\treturn await readJsonFile(esyJsonPath);\n\t} catch {\n\t\treturn await writeJsonFile(esyJsonPath)({});\n\t}\n};\n\nconst runArbitraryLigoCmd = (parsedArgs: Opts, cmd: string): Promise<string> =>\n\tensureEsyExists(parsedArgs)\n\t\t.then(getArch)\n\t\t.then(async () => {\n\t\t\tconst uid = await execCmd('id -u');\n\t\t\tconst gid = await execCmd('id -g');\n\t\t\treturn [uid.stdout.trim(), gid.stdout.trim()];\n\t\t})\n\t\t.then(([uid, gid]) => getArbitraryLigoCmd(parsedArgs, uid, gid, cmd))\n\t\t.then(([cmd, envVars]) => spawnCmd(cmd, envVars))\n\t\t.then(code =>\n\t\t\tcode !== null && code === 0\n\t\t\t\t? `Command \"${cmd}\" ran successfully by LIGO`\n\t\t\t\t: `Command \"${cmd}\" failed. Please check your command`\n\t\t)\n\t\t.catch(err => sendAsyncErr(`An internal error has occurred: ${err.message}`));\n\nconst ligo = (parsedArgs: Opts): Promise<void> => {\n\tconst args = parsedArgs.command;\n\treturn runArbitraryLigoCmd(parsedArgs, args).then(sendRes).catch(err => sendAsyncErr(err, false));\n};\n\nexport default ligo;\n","import { execCmd, getArch, sendAsyncErr, sendJsonRes, sendWarn } from '@taqueria/node-sdk';\nimport { emitExternalError, getInputFilenameRelPath, getLigoDockerImage, TestOpts as Opts } from './common';\n\ntype TableRow = { contract: string; testResults: string };\n\nconst getTestContractCmd = (parsedArgs: Opts, sourceFile: string): string => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `No project directory provided`;\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} run test`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst cmd = `${baseCmd} ${inputFile}`;\n\treturn cmd;\n};\n\nconst testContract = (parsedArgs: Opts, sourceFile: string): Promise<TableRow> =>\n\tgetArch()\n\t\t.then(() => getTestContractCmd(parsedArgs, sourceFile))\n\t\t.then(execCmd)\n\t\t.then(({ stdout, stderr }) => {\n\t\t\tif (stderr.length > 0) sendWarn(stderr);\n\t\t\tconst result = '🎉 All tests passed 🎉';\n\t\t\treturn {\n\t\t\t\tcontract: sourceFile,\n\t\t\t\ttestResults: stdout.length > 0 ? `${stdout}\\n${result}` : result,\n\t\t\t};\n\t\t})\n\t\t.catch(err => {\n\t\t\temitExternalError(err, sourceFile);\n\t\t\treturn {\n\t\t\t\tcontract: sourceFile,\n\t\t\t\ttestResults: 'Some tests failed :(',\n\t\t\t};\n\t\t});\n\nconst test = (parsedArgs: Opts): Promise<void> => {\n\tconst sourceFile = parsedArgs.sourceFile;\n\tif (!sourceFile) return sendAsyncErr(`No source file provided`);\n\treturn testContract(parsedArgs, sourceFile).then(result => [result]).then(sendJsonRes).catch(err =>\n\t\tsendAsyncErr(err, false)\n\t);\n};\n\nexport default test;\n"],"mappings":"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","names":["sendAsyncErr","sendErr","writeFile","join","join","writeFile","sendErr","sendErr","sendJsonRes","join","join","sendJsonRes","sendErr","execCmd","getArch","sendAsyncErr","sendRes","join","join","getArch","execCmd","cmd","sendAsyncErr","sendRes","execCmd","getArch","sendAsyncErr","sendJsonRes","sendWarn","getArch","execCmd","sendWarn","sendAsyncErr","sendJsonRes","sendAsyncErr"]}
|
|
1
|
+
{"version":3,"sources":["index.ts","createContract.ts","ligo_templates.ts","main.ts","common.ts","compile.ts","compile-all.ts","ligo.ts","test.ts"],"sourcesContent":["import { Option, Plugin, PositionalArg, Task, Template } from '@taqueria/node-sdk';\nimport createContract from './createContract';\nimport main from './main';\n\nPlugin.create(i18n => ({\n\tschema: '1.0',\n\tversion: '0.1',\n\talias: 'ligo',\n\ttasks: [\n\t\tTask.create({\n\t\t\ttask: 'ligo',\n\t\t\tcommand: 'ligo',\n\t\t\tdescription:\n\t\t\t\t'This task allows you to run arbitrary LIGO native commands. Note that they might not benefit from the abstractions provided by Taqueria',\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tshortFlag: 'c',\n\t\t\t\t\tflag: 'command',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'The command to be passed to the underlying LIGO binary, wrapped in quotes',\n\t\t\t\t\trequired: true,\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'none',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'compile',\n\t\t\tcommand: 'compile <sourceFile>',\n\t\t\taliases: ['c', 'compile-ligo'],\n\t\t\tdescription:\n\t\t\t\t'Compile a smart contract written in a LIGO syntax to Michelson code, along with its associated storage/parameter list files if they are found',\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tflag: 'json',\n\t\t\t\t\tboolean: true,\n\t\t\t\t\tdescription: 'Emit JSON-encoded Michelson',\n\t\t\t\t}),\n\t\t\t\tOption.create({\n\t\t\t\t\tflag: 'module',\n\t\t\t\t\tshortFlag: 'm',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'The LIGO module to be compiled',\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'json',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'compile-all',\n\t\t\tcommand: 'compile-all',\n\t\t\tdescription:\n\t\t\t\t'Compile all main smart contracts written in a LIGO syntax to Michelson code, along with their associated storage/parameter list files if they are found',\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tflag: 'json',\n\t\t\t\t\tboolean: true,\n\t\t\t\t\tdescription: 'Emit JSON-encoded Michelson',\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'json',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'test',\n\t\t\tcommand: 'test <sourceFile>',\n\t\t\tdescription: 'Test a smart contract written in LIGO',\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: 'contract',\n\t\t\tcommand: 'contract <sourceFileName>',\n\t\t\tdescription: 'Create a LIGO 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 LIGO contract to generate',\n\t\t\t\t}),\n\t\t\t],\n\t\t\toptions: [\n\t\t\t\tOption.create({\n\t\t\t\t\tshortFlag: 's',\n\t\t\t\t\tflag: 'syntax',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdescription: 'The syntax used in the contract',\n\t\t\t\t}),\n\t\t\t],\n\t\t\thandler: createContract,\n\t\t}),\n\t],\n\tproxy: main,\n\tpostInstall: `node ${__dirname}/postinstall.js`,\n}), process.argv);\n","import { sendAsyncErr } from '@taqueria/node-sdk';\nimport { RequestArgs } from '@taqueria/node-sdk';\nimport { writeFile } from 'fs/promises';\nimport { jsligo_template, mligo_template } from './ligo_templates';\n\ninterface Opts extends RequestArgs.t {\n\tsourceFileName?: string;\n\tsyntax?: string;\n}\n\nconst getLigoTemplate = async (contractName: string, syntax: string | undefined): Promise<string> => {\n\tconst matchResult = contractName.match(/\\.[^.]+$/);\n\tconst ext = matchResult ? matchResult[0].substring(1) : null;\n\n\tif (syntax === 'mligo') return mligo_template;\n\tif (syntax === 'jsligo') return jsligo_template;\n\n\tif (syntax === undefined) {\n\t\tif (ext === 'mligo') return mligo_template;\n\t\tif (ext === 'jsligo') return jsligo_template;\n\t\treturn sendAsyncErr(\n\t\t\t`Unable to infer LIGO syntax from \"${contractName}\". Please specify a LIGO syntax via the --syntax option`,\n\t\t);\n\t} else {\n\t\treturn sendAsyncErr(`\"${syntax}\" is not a valid syntax. Please specify a valid LIGO syntax`);\n\t}\n};\n\nconst createContract = (args: RequestArgs.t) => {\n\tconst unsafeOpts = args as unknown as Opts;\n\tconst contractName = unsafeOpts.sourceFileName as string;\n\tconst syntax = unsafeOpts.syntax;\n\tconst contractsDir = `${args.config.projectDir}/${args.config.contractsDir}`;\n\treturn getLigoTemplate(contractName, syntax)\n\t\t.then(ligo_template => writeFile(`${contractsDir}/${contractName}`, ligo_template));\n};\n\nexport default createContract;\n","export const mligo_template = `\ntype storage = int\ntype return = operation list * storage\n\n(* Three entrypoints *)\n[@entry] let increment (delta : int) (store : storage) : return =\n [], store + delta\n[@entry] let decrement (delta : int) (store : storage) : return =\n [], store - delta\n[@entry] let reset (() : unit) (_ : storage) : return =\n [], 0\n`;\n\n\nexport const jsligo_template = `\ntype storage = int;\ntype ret = [list<operation>, storage];\n\n// Three entrypoints\n\n// @entry\nconst increment = (delta : int, store : storage) : ret =>\n [list([]), store + delta];\n\n// @entry\nconst decrement = (delta : int, store : storage) : ret =>\n [list([]), store - delta];\n\n// @entry\nconst reset = (_ : unit, _ : storage) : ret =>\n [list([]), 0];\n`;\n","import { RequestArgs, sendAsyncErr, sendAsyncRes } from '@taqueria/node-sdk';\nimport { getLigoDockerImage, IntersectionOpts as Opts } from './common';\nimport compile from './compile';\nimport compileAll from './compile-all';\nimport ligo from './ligo';\nimport test from './test';\n\nconst main = (parsedArgs: RequestArgs.t): Promise<void> => {\n\tconst unsafeOpts = parsedArgs as unknown as Opts;\n\tswitch (unsafeOpts.task) {\n\t\tcase 'ligo':\n\t\t\treturn ligo(unsafeOpts);\n\t\tcase 'compile':\n\t\t\treturn compile(unsafeOpts);\n\t\tcase 'compile-all':\n\t\t\treturn compileAll(unsafeOpts);\n\t\tcase 'test':\n\t\t\treturn test(parsedArgs);\n\t\tcase 'get-image':\n\t\t\treturn sendAsyncRes(getLigoDockerImage());\n\t\tdefault:\n\t\t\treturn sendAsyncErr(`${unsafeOpts.task} is not an understood task by the LIGO plugin`);\n\t}\n};\n\nexport default main;\n","import { getDockerImage, sendErr } from '@taqueria/node-sdk';\nimport { ProxyTaskArgs, RequestArgs } from '@taqueria/node-sdk/types';\nimport { join } from 'path';\n\nexport interface LigoOpts extends ProxyTaskArgs.t {\n\tcommand: string;\n}\n\nexport interface CompileOpts extends ProxyTaskArgs.t {\n\tsourceFile: string;\n\tjson: boolean;\n\tmodule?: string;\n}\n\nexport interface CompileAllOpts extends ProxyTaskArgs.t {\n\tjson: boolean;\n}\n\nexport interface TestOpts extends RequestArgs.t {\n\ttask?: string;\n\tsourceFile?: string;\n}\n\nexport type IntersectionOpts = LigoOpts & CompileOpts & CompileAllOpts & TestOpts;\n\nexport type UnionOpts = LigoOpts | CompileOpts | CompileAllOpts | TestOpts;\n\n// Should point to the latest stable version, so it needs to be updated as part of our release process.\nconst LIGO_DEFAULT_IMAGE = 'ligolang/ligo:0.73.0';\n\nconst LIGO_IMAGE_ENV_VAR = 'TAQ_LIGO_IMAGE';\n\nexport const getLigoDockerImage = (): string => getDockerImage(LIGO_DEFAULT_IMAGE, LIGO_IMAGE_ENV_VAR);\n\nexport const getInputFilenameAbsPath = (parsedArgs: UnionOpts, sourceFile: string): string =>\n\tjoin(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? 'contracts', sourceFile);\n\nexport const getInputFilenameRelPath = (parsedArgs: UnionOpts, sourceFile: string): string =>\n\tjoin(parsedArgs.config.contractsDir ?? 'contracts', sourceFile);\n\nexport const emitExternalError = (err: unknown, sourceFile: string): void => {\n\tsendErr(`\\n=== Error messages for ${sourceFile} ===`);\n\terr instanceof Error ? sendErr(err.message.replace(/Command failed.+?\\n/, '')) : sendErr(err as any);\n\tsendErr(`\\n===`);\n};\n","import {\n\texecCmd,\n\tgetArch,\n\tgetArtifactsDir,\n\tsendAsyncErr,\n\tsendErr,\n\tsendJsonRes,\n\tsendRes,\n\tsendWarn,\n} from '@taqueria/node-sdk';\nimport { createReadStream } from 'fs';\nimport { access, readFile, writeFile } from 'fs/promises';\nimport { basename, extname, join } from 'path';\nimport * as readline from 'readline';\nimport {\n\tCompileOpts as Opts,\n\temitExternalError,\n\tgetInputFilenameAbsPath,\n\tgetInputFilenameRelPath,\n\tgetLigoDockerImage,\n\tUnionOpts,\n} from './common';\n\nexport type TableRow = { source: string; artifact: string };\n\nexport type ExprKind = 'storage' | 'default_storage' | 'parameter';\n\nexport type ModuleInfo = {\n\tmoduleName: string;\n\tsourceName: string;\n\tsourceFile: string;\n\tsyntax: 'mligo' | 'jsligo' | 'religo' | 'ligo';\n\ttype: 'file-main' | 'file-entry' | 'module-main' | 'module-entry';\n};\n\nconst COMPILE_ERR_MSG: string = 'Not compiled';\n\nconst isStorageKind = (exprKind: ExprKind): boolean => exprKind === 'storage' || exprKind === 'default_storage';\n\nexport const isSupportedLigoSyntax = (sourceFile: string) => /\\.(mligo|jsligo)$/.test(sourceFile);\n\nexport const isUnsupportedLigoSyntax = (sourceFile: string) => /\\.(ligo|religo)$/.test(sourceFile);\n\nexport const isLIGOFile = (sourceFile: string) =>\n\tisSupportedLigoSyntax(sourceFile) || isUnsupportedLigoSyntax(sourceFile);\n\nexport const isStorageListFile = (sourceFile: string): boolean =>\n\t/.+\\.(storageList|storages)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nexport const isParameterListFile = (sourceFile: string): boolean =>\n\t/.+\\.(parameterList|parameters)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nexport const listContractModules = async (parsedArgs: UnionOpts, sourceFile: string): Promise<ModuleInfo[]> => {\n\ttry {\n\t\tawait getArch();\n\t\tconst cmd = await getListDeclarationsCmd(parsedArgs, sourceFile);\n\t\tconst { stderr, stdout } = await execCmd(cmd);\n\t\tif (stderr.length > 0) return Promise.reject(stderr);\n\n\t\treturn JSON.parse(stdout).declarations.reduce(\n\t\t\t(acc: ModuleInfo[], decl: string) => {\n\t\t\t\t// We need to process delcarations (decl) like so:\n\t\t\t\t// 1. If the decl is equal to the string \"main\", then the module type is \"file-main\" and the name of the module is the sourceFile.\n\t\t\t\t// 2. If the decl is equal to $main, then the module type is \"file-entry\" and the name fo the module is the sourceFile.\n\t\t\t\t// 3. If the decl ends with .main, then the module type is \"module-main\" and the name of the module is the decl without the .main suffix.\n\t\t\t\t// 4. If the decl ends with .$main, then the module type is \"module-entry\" and the name of the module is the decl without the .$main suffix.\n\t\t\t\t// Otherwise, this is not a declaration we care about.\n\t\t\t\tconst srcFile = removeExt(basename(sourceFile));\n\t\t\t\tconst syntax = extractExt(sourceFile).replace('.', '');\n\n\t\t\t\tif (decl === 'main') {\n\t\t\t\t\treturn [...acc, { moduleName: srcFile, sourceName: sourceFile, sourceFile, type: 'file-main', syntax }];\n\t\t\t\t} else if (decl === '$main') {\n\t\t\t\t\treturn [...acc, { moduleName: srcFile, sourceName: sourceFile, sourceFile, type: 'file-entry', syntax }];\n\t\t\t\t} else if (decl.endsWith('.main')) {\n\t\t\t\t\tconst moduleName = decl.replace(/\\.main$/, '');\n\t\t\t\t\treturn [...acc, {\n\t\t\t\t\t\tmoduleName,\n\t\t\t\t\t\tsourceName: `${sourceFile}/${moduleName}`,\n\t\t\t\t\t\tsourceFile,\n\t\t\t\t\t\ttype: 'module-main',\n\t\t\t\t\t\tsyntax,\n\t\t\t\t\t}];\n\t\t\t\t} else if (decl.endsWith('.$main')) {\n\t\t\t\t\tconst moduleName = decl.replace(/\\.\\$main$/, '');\n\t\t\t\t\treturn [...acc, {\n\t\t\t\t\t\tmoduleName,\n\t\t\t\t\t\tsourceName: `${sourceFile}/${moduleName}`,\n\t\t\t\t\t\tsourceFile,\n\t\t\t\t\t\ttype: 'module-entry',\n\t\t\t\t\t\tsyntax,\n\t\t\t\t\t}];\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t[],\n\t\t);\n\t} catch (err) {\n\t\temitExternalError(err, sourceFile);\n\t\treturn [];\n\t}\n};\n\nconst getListDeclarationsCmd = async (parsedArgs: UnionOpts, sourceFile: string): Promise<string> => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw new Error(`No project directory provided`);\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} info list-declarations`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst flags = '--display-format json';\n\tconst cmd = `${baseCmd} ${inputFile} ${flags}`;\n\treturn cmd;\n};\n\nconst extractExt = (path: string): string => {\n\tconst matchResult = path.match(/\\.(ligo|religo|mligo|jsligo)$/);\n\treturn matchResult ? matchResult[0] : '';\n};\n\nconst removeExt = (path: string): string => {\n\tconst extRegex = new RegExp(extractExt(path));\n\treturn path.replace(extRegex, '');\n};\n\nconst isOutputFormatJSON = (parsedArgs: Opts): boolean => parsedArgs.json;\n\nconst getOutputContractFilename = (parsedArgs: Opts, module: ModuleInfo): string => {\n\tconst ext = isOutputFormatJSON(parsedArgs) ? '.json' : '.tz';\n\treturn join(getArtifactsDir(parsedArgs), `${module.moduleName}${ext}`);\n};\n\nconst getOutputExprFilename = (parsedArgs: Opts, module: ModuleInfo, exprKind: ExprKind, exprName: string): string => {\n\tconst contractName = module.moduleName;\n\tconst ext = isOutputFormatJSON(parsedArgs) ? '.json' : '.tz';\n\tconst outputFile = exprKind === 'default_storage'\n\t\t? `${contractName}.default_storage${ext}`\n\t\t: `${contractName}.${exprKind}.${exprName}${ext}`;\n\treturn join(getArtifactsDir(parsedArgs), `${outputFile}`);\n};\n\nconst getCompileContractCmd = async (parsedArgs: Opts, sourceFile: string, module: ModuleInfo): Promise<string> => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw new Error(`No project directory provided`);\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} compile contract`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst outputFile = `-o ${getOutputContractFilename(parsedArgs, module)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\tconst moduleFlag = module.type.startsWith('file-') ? '' : `-m ${module.moduleName}`;\n\tconst cmd = `${baseCmd} ${inputFile} ${outputFile} ${flags}${moduleFlag}`;\n\treturn cmd;\n};\n\nconst getCompileExprCmd = (\n\tparsedArgs: Opts,\n\tsourceFile: string,\n\tmodule: ModuleInfo,\n\texprKind: ExprKind,\n\texprName: string,\n): string => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw new Error(`No project directory provided`);\n\tconst compilerType = isStorageKind(exprKind) ? 'storage' : 'parameter';\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} compile ${compilerType}`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst outputFile = `-o ${getOutputExprFilename(parsedArgs, module, exprKind, exprName)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\n\t// Parameter and Storage list files are expected to import the smart contract file as the \"Contract\" module.\n\tconst moduleFlag = (() => {\n\t\tswitch (module.type) {\n\t\t\tcase 'file-main':\n\t\t\tcase 'file-entry':\n\t\t\t\treturn '-m Contract';\n\t\t\tdefault:\n\t\t\t\treturn `-m Contract.${module.moduleName}`;\n\t\t}\n\t})();\n\n\tconst cmd = `${baseCmd} ${inputFile} ${exprName} ${outputFile} ${flags} ${moduleFlag}`;\n\treturn cmd;\n};\n\nconst compileContract = async (parsedArgs: Opts, sourceFile: string, module: ModuleInfo): Promise<TableRow> => {\n\ttry {\n\t\tawait getArch();\n\t\tconst cmd = await getCompileContractCmd(parsedArgs, sourceFile, module);\n\t\tconst { stderr } = await execCmd(cmd);\n\t\tif (stderr.length > 0) sendWarn(stderr);\n\n\t\treturn {\n\t\t\tsource: module.sourceName,\n\t\t\tartifact: getOutputContractFilename(parsedArgs, module),\n\t\t};\n\t} catch (err) {\n\t\temitExternalError(err, sourceFile);\n\t\treturn {\n\t\t\tsource: module.sourceName,\n\t\t\tartifact: COMPILE_ERR_MSG,\n\t\t};\n\t}\n};\n\nconst compileExpr =\n\t(parsedArgs: Opts, sourceFile: string, module: ModuleInfo, exprKind: ExprKind) =>\n\t(exprName: string): Promise<TableRow> => {\n\t\treturn getArch()\n\t\t\t.then(() => getCompileExprCmd(parsedArgs, sourceFile, module, exprKind, exprName))\n\t\t\t.then(execCmd)\n\t\t\t.then(({ stderr }) => {\n\t\t\t\tif (stderr.length > 0) sendWarn(stderr);\n\t\t\t\tconst artifactName = getOutputExprFilename(parsedArgs, module, exprKind, exprName);\n\t\t\t\treturn {\n\t\t\t\t\tsource: module.sourceName,\n\t\t\t\t\tartifact: artifactName,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\temitExternalError(err, sourceFile);\n\t\t\t\treturn {\n\t\t\t\t\tsource: module.sourceName,\n\t\t\t\t\tartifact: `${sourceFile} not compiled`,\n\t\t\t\t};\n\t\t\t});\n\t};\n\nconst getExprNames = (parsedArgs: Opts, sourceFile: string): Promise<string[]> => {\n\treturn new Promise((resolve, reject) => {\n\t\tconst inputFilePath = getInputFilenameAbsPath(parsedArgs, sourceFile);\n\t\tconst readInterface = readline.createInterface({\n\t\t\tinput: createReadStream(inputFilePath),\n\t\t\toutput: process.stdout,\n\t\t});\n\n\t\tconst variableNames: string[] = [];\n\n\t\treadInterface.on('line', function(line) {\n\t\t\t// Skip lines that start with a comment\n\t\t\tif (!line.trim().startsWith('//')) {\n\t\t\t\tconst matches = line.match(/(?<=\\s*(let|const)\\s+)[a-zA-Z0-9_]+/g);\n\t\t\t\tif (matches) {\n\t\t\t\t\tvariableNames.push(...matches);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treadInterface.on('close', function() {\n\t\t\tresolve(variableNames);\n\t\t});\n\t});\n};\n\nconst compileExprs = (\n\tparsedArgs: Opts,\n\tsourceFile: string,\n\tmodule: ModuleInfo,\n\texprKind: ExprKind,\n): Promise<TableRow[]> =>\n\tgetExprNames(parsedArgs, sourceFile)\n\t\t.then(exprNames => {\n\t\t\tif (exprNames.length === 0) return [];\n\t\t\tconst firstExprName = exprNames.slice(0, 1)[0];\n\t\t\tconst restExprNames = exprNames.slice(1, exprNames.length);\n\t\t\tconst firstExprKind = isStorageKind(exprKind) ? 'default_storage' : 'parameter';\n\t\t\tconst restExprKind = isStorageKind(exprKind) ? 'storage' : 'parameter';\n\t\t\tconst firstExprResult = compileExpr(parsedArgs, sourceFile, module, firstExprKind)(firstExprName);\n\t\t\tconst restExprResults = restExprNames.map(compileExpr(parsedArgs, sourceFile, module, restExprKind));\n\t\t\treturn Promise.all([firstExprResult].concat(restExprResults));\n\t\t})\n\t\t.catch(err => {\n\t\t\temitExternalError(err, sourceFile);\n\t\t\treturn [{\n\t\t\t\tsource: module.sourceName,\n\t\t\t\tartifact: `No ${isStorageKind(exprKind) ? 'storage' : 'parameter'} expressions compiled`,\n\t\t\t}];\n\t\t})\n\t\t.then(results =>\n\t\t\tresults.length > 0 ? results : [{\n\t\t\t\tsource: module.sourceName,\n\t\t\t\tartifact: `No ${isStorageKind(exprKind) ? 'storage' : 'parameter'} expressions found`,\n\t\t\t}]\n\t\t);\n\nconst initContentForStorage = (module: ModuleInfo): string => {\n\tconst linkToContract = `#import \"${module.sourceFile}\" \"Contract\"\\n\\n`;\n\tconst instruction =\n\t\t'// Define your initial storage values as a list of LIGO variable definitions, the first of which will be considered the default value to be used for origination later on\\n';\n\n\tconst syntax = (() => {\n\t\tconst pair = [module.syntax, module.type].join('-');\n\t\tswitch (pair) {\n\t\t\tcase 'mligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t'// E.g. let storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t'// E.g. let storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t`// E.g. let storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract',\n\t\t\t\t\t`// E.g. let storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"storage\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t'// E.g. const storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t'// E.g. const storage : Contract.storage = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"storage\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t`// E.g. const storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your storage is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const storage = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your storage from the contract. This assumes that you have exported your `storage` type from the contract file.',\n\t\t\t\t\t`// E.g. const storage : Contract.${module.moduleName}.storage = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn [];\n\t\t}\n\t})();\n\treturn linkToContract + instruction + syntax.join('\\n');\n};\n\nconst initContentForParameter = (module: ModuleInfo): string => {\n\tconst linkToContract = `#import \"${module.sourceFile}\" \"Contract\"\\n\\n`;\n\tconst instruction = '// Define your parameter values as a list of LIGO variable definitions\\n';\n\n\tconst syntax = (() => {\n\t\tconst pair = [module.syntax, module.type].join('-');\n\t\tswitch (pair) {\n\t\t\tcase 'mligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. let default_parameter : Contract.parameter = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. let default_parameter : parameter_of Contract = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. let default_parameter : Contract.${module.moduleName}.parameter = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'mligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a named module. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. let default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. let default_parameter : parameter_of Contract.${module.moduleName} = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"parameter\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. const default_parameter : Contract.parameter = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-file-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was not within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t'// E.g. const default_parameter : parameter_of Contract = 10',\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-main':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with a main function that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t`// NOTE: The \"parameter\" type should be exported from the contract file (${module.sourceFile})`,\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. const default_parameter : Contract.${module.moduleName}.parameter = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tcase 'jsligo-module-entry':\n\t\t\t\treturn [\n\t\t\t\t\t'// When this file was created, the smart contract was defined with an entrypoint using `@entry` that was within a namespace. As such, the examples below are written with that assumption in mind.',\n\t\t\t\t\t'',\n\t\t\t\t\t'// If your parameter is a simple value, you can define it directly',\n\t\t\t\t\t'// E.g. const default_parameter = 10',\n\t\t\t\t\t'',\n\t\t\t\t\t'// For added type-safety, you can reference the type of your parameter from the contract',\n\t\t\t\t\t`// E.g. const default_parameter : parameter_of Contract.${module.moduleName} = 10`,\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn [];\n\t\t}\n\t})();\n\n\treturn linkToContract + instruction + syntax.join('\\n');\n};\n\nexport const compileContractWithStorageAndParameter = async (\n\tparsedArgs: Opts,\n\tsourceFile: string,\n\tmodule: ModuleInfo,\n): Promise<TableRow[]> => {\n\tconst contractCompileResult = await compileContract(parsedArgs, sourceFile, module);\n\tif (contractCompileResult.artifact === COMPILE_ERR_MSG) return [contractCompileResult];\n\n\tconst storageListFile = `${module.moduleName}.storageList${extractExt(sourceFile)}`;\n\tconst storageListFilename = getInputFilenameAbsPath(parsedArgs, storageListFile);\n\tconst storageCompileResult = await access(storageListFilename)\n\t\t.then(() => compileExprs(parsedArgs, storageListFile, module, 'storage'))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: storage file associated with \"${module.moduleName}\" can't be found, so \"${storageListFile}\" has been created for you. Use this file to define all initial storage values for this contract\\n`,\n\t\t\t);\n\t\t\treturn writeFile(storageListFilename, initContentForStorage(module), 'utf8');\n\t\t});\n\n\tconst parameterListFile = `${module.moduleName}.parameterList${extractExt(sourceFile)}`;\n\tconst parameterListFilename = getInputFilenameAbsPath(parsedArgs, parameterListFile);\n\tconst parameterCompileResult = await access(parameterListFilename)\n\t\t.then(() => compileExprs(parsedArgs, parameterListFile, module, 'parameter'))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: parameter file associated with \"${module.moduleName}\" can't be found, so \"${parameterListFile}\" has been created for you. Use this file to define all parameter values for this contract\\n`,\n\t\t\t);\n\t\t\treturn writeFile(parameterListFilename, initContentForParameter(module), 'utf8');\n\t\t});\n\n\tconst storageArtifacts = storageCompileResult ? storageCompileResult.map(res => res.artifact).join('\\n') : '';\n\tconst parameterArtifacts = parameterCompileResult ? parameterCompileResult.map(res => res.artifact).join('\\n') : '';\n\n\tconst combinedArtifact = [\n\t\tcontractCompileResult.artifact,\n\t\tstorageArtifacts,\n\t\tparameterArtifacts,\n\t].filter(Boolean).join('\\n');\n\n\tconst combinedRow: TableRow = {\n\t\tsource: module.sourceName,\n\t\tartifact: combinedArtifact,\n\t};\n\n\treturn [combinedRow];\n};\n\nexport const compile = async (parsedArgs: Opts): Promise<void> => {\n\tconst sourceFile = parsedArgs.sourceFile;\n\tif (!isLIGOFile(sourceFile)) {\n\t\tsendErr(`${sourceFile} is not a LIGO file`);\n\t\treturn;\n\t}\n\tif (isStorageListFile(sourceFile) || isParameterListFile(sourceFile)) {\n\t\tsendErr(`Storage and parameter list files are not meant to be compiled directly`);\n\t\treturn;\n\t}\n\tif (isUnsupportedLigoSyntax(sourceFile)) {\n\t\tsendErr(`Unsupported LIGO syntax detected in ${sourceFile}. Note, we only support .jsligo and .mligo files.`);\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst modules = await listContractModules(parsedArgs, sourceFile);\n\t\tif (modules.length === 0) {\n\t\t\treturn sendJsonRes([\n\t\t\t\t{\n\t\t\t\t\tsource: sourceFile,\n\t\t\t\t\tartifact: `No contract modules found in \"${sourceFile}\"`,\n\t\t\t\t},\n\t\t\t]);\n\t\t}\n\n\t\tlet allCompileResults: TableRow[] = [];\n\t\tfor (const module of modules) {\n\t\t\t// If we're only to compile a particular module, then we'll skip any that don't match\n\t\t\tif (parsedArgs.module && parsedArgs.module !== module.moduleName) continue;\n\n\t\t\tconst compileResults = await compileContractWithStorageAndParameter(parsedArgs, sourceFile, module);\n\t\t\tallCompileResults = allCompileResults.concat(compileResults);\n\t\t}\n\n\t\tsendJsonRes(allCompileResults, { footer: `\\nCompiled ${allCompileResults.length} contract(s) in \"${sourceFile}\"` });\n\t} catch (err) {\n\t\tsendErr(`Error processing \"${sourceFile}\": ${err}`);\n\t}\n};\n\nexport default compile;\n","import { sendErr, sendJsonRes } from '@taqueria/node-sdk';\nimport glob from 'fast-glob';\nimport { join } from 'path';\nimport { CompileAllOpts, CompileAllOpts as Opts, CompileOpts } from './common';\nimport {\n\tcompileContractWithStorageAndParameter,\n\tisParameterListFile,\n\tisStorageListFile,\n\tlistContractModules,\n\tTableRow,\n} from './compile';\n\nconst compileAll = async (parsedArgs: Opts): Promise<void> => {\n\tlet compilePromises: Promise<TableRow[]>[] = [];\n\n\tconst contractFilenames = await glob(\n\t\t['**/*.ligo', '**/*.religo', '**/*.mligo', '**/*.jsligo'],\n\t\t{\n\t\t\tcwd: join(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? 'contracts'),\n\t\t\tabsolute: false,\n\t\t},\n\t);\n\n\tfor (const filename of contractFilenames) {\n\t\tif (isStorageListFile(filename) || isParameterListFile(filename)) continue;\n\t\tconst moduleNames = await listContractModules(parsedArgs as unknown as CompileAllOpts, filename);\n\t\tfor (const moduleName of moduleNames) {\n\t\t\tcompilePromises.push(compileContractWithStorageAndParameter(parsedArgs as CompileOpts, filename, moduleName));\n\t\t}\n\t}\n\n\treturn Promise.all(compilePromises)\n\t\t.then(tables => tables.flat())\n\t\t.then(sendJsonRes)\n\t\t.catch(err => sendErr(err, false));\n};\n\nexport default compileAll;\n","import { execCmd, getArch, sendAsyncErr, sendRes, spawnCmd } from '@taqueria/node-sdk';\nimport { readJsonFile, writeJsonFile } from '@taqueria/node-sdk';\nimport { join } from 'path';\nimport { getLigoDockerImage, LigoOpts as Opts } from './common';\n\nconst getArbitraryLigoCmd = (\n\tparsedArgs: Opts,\n\tuid: string,\n\tgid: string,\n\tuserArgs: string,\n): [string, Record<string, string>] => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `No project directory provided`;\n\n\tconst userMap = uid && gid ? `${uid}:${gid}` : uid;\n\tconst userMapArgs = uid ? ['-u', userMap] : [];\n\n\tconst binary = 'docker';\n\tconst baseArgs = [\n\t\t'run',\n\t\t'--rm',\n\t\t'-v',\n\t\t`${projectDir}:/project`,\n\t\t'-w',\n\t\t'/project',\n\t\t...userMapArgs,\n\t\tgetLigoDockerImage(),\n\t];\n\tconst processedUserArgs = userArgs.split(' ').map(arg => arg.startsWith('\\\\-') ? arg.substring(1) : arg).filter(arg =>\n\t\targ\n\t);\n\tconst args = [...baseArgs, ...processedUserArgs, '--skip-analytics'];\n\tconst envVars = { 'DOCKER_DEFAULT_PLATFORM': 'linux/amd64' };\n\treturn [\n\t\t[binary, ...args].join(' '),\n\t\tenvVars,\n\t];\n};\n\nconst ensureEsyExists = async (parsedArgs: Opts): Promise<string> => {\n\tconst esyJsonPath = join(parsedArgs.projectDir, 'esy.json');\n\n\ttry {\n\t\treturn await readJsonFile(esyJsonPath);\n\t} catch {\n\t\treturn await writeJsonFile(esyJsonPath)({});\n\t}\n};\n\nconst runArbitraryLigoCmd = (parsedArgs: Opts, cmd: string): Promise<string> =>\n\tensureEsyExists(parsedArgs)\n\t\t.then(getArch)\n\t\t.then(async () => {\n\t\t\tconst uid = await execCmd('id -u');\n\t\t\tconst gid = await execCmd('id -g');\n\t\t\treturn [uid.stdout.trim(), gid.stdout.trim()];\n\t\t})\n\t\t.then(([uid, gid]) => getArbitraryLigoCmd(parsedArgs, uid, gid, cmd))\n\t\t.then(([cmd, envVars]) => spawnCmd(cmd, envVars))\n\t\t.then(code =>\n\t\t\tcode !== null && code === 0\n\t\t\t\t? `Command \"${cmd}\" ran successfully by LIGO`\n\t\t\t\t: `Command \"${cmd}\" failed. Please check your command`\n\t\t)\n\t\t.catch(err => sendAsyncErr(`An internal error has occurred: ${err.message}`));\n\nconst ligo = (parsedArgs: Opts): Promise<void> => {\n\tconst args = parsedArgs.command;\n\treturn runArbitraryLigoCmd(parsedArgs, args).then(sendRes).catch(err => sendAsyncErr(err, false));\n};\n\nexport default ligo;\n","import { execCmd, getArch, sendAsyncErr, sendJsonRes, sendWarn } from '@taqueria/node-sdk';\nimport { emitExternalError, getInputFilenameRelPath, getLigoDockerImage, TestOpts as Opts } from './common';\n\ntype TableRow = { contract: string; testResults: string };\n\nconst getTestContractCmd = (parsedArgs: Opts, sourceFile: string): string => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `No project directory provided`;\n\tconst baseCmd =\n\t\t`DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \\\"${projectDir}\\\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} run test`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst cmd = `${baseCmd} ${inputFile}`;\n\treturn cmd;\n};\n\nconst testContract = (parsedArgs: Opts, sourceFile: string): Promise<TableRow> =>\n\tgetArch()\n\t\t.then(() => getTestContractCmd(parsedArgs, sourceFile))\n\t\t.then(execCmd)\n\t\t.then(({ stdout, stderr }) => {\n\t\t\tif (stderr.length > 0) sendWarn(stderr);\n\t\t\tconst result = '🎉 All tests passed 🎉';\n\t\t\treturn {\n\t\t\t\tcontract: sourceFile,\n\t\t\t\ttestResults: stdout.length > 0 ? `${stdout}\\n${result}` : result,\n\t\t\t};\n\t\t})\n\t\t.catch(err => {\n\t\t\temitExternalError(err, sourceFile);\n\t\t\treturn {\n\t\t\t\tcontract: sourceFile,\n\t\t\t\ttestResults: 'Some tests failed :(',\n\t\t\t};\n\t\t});\n\nconst test = (parsedArgs: Opts): Promise<void> => {\n\tconst sourceFile = parsedArgs.sourceFile;\n\tif (!sourceFile) return sendAsyncErr(`No source file provided`);\n\treturn testContract(parsedArgs, sourceFile).then(result => [result]).then(sendJsonRes).catch(err =>\n\t\tsendAsyncErr(err, false)\n\t);\n};\n\nexport default test;\n"],"mappings":"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","names":["sendAsyncErr","sendErr","writeFile","join","join","writeFile","sendErr","sendErr","sendJsonRes","join","join","sendJsonRes","sendErr","execCmd","getArch","sendAsyncErr","sendRes","join","join","getArch","execCmd","cmd","sendAsyncErr","sendRes","execCmd","getArch","sendAsyncErr","sendJsonRes","sendWarn","getArch","execCmd","sendWarn","sendAsyncErr","sendJsonRes","sendAsyncErr"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taqueria/plugin-ligo",
|
|
3
|
-
"version": "0.40.
|
|
3
|
+
"version": "0.40.2",
|
|
4
4
|
"description": "A taqueria plugin for compiling LIGO smart contracts",
|
|
5
5
|
"targets": {
|
|
6
6
|
"default": {
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
"homepage": "https://github.com/pinnacle-labs/taqueria#readme",
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@taqueria/node-sdk": "^0.40.
|
|
44
|
+
"@taqueria/node-sdk": "^0.40.2",
|
|
45
45
|
"fast-glob": "^3.3.1"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|