@taqueria/plugin-ligo 0.25.23-rc → 0.25.30-rc

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/README.md CHANGED
@@ -55,6 +55,16 @@ Lastly, `taq compile hello.mligo` will compile `hello.mligo` and emit `hello.tz`
55
55
 
56
56
  The `--json` flag will make the task emit JSON-encoded Michelson instead of pure Michelson `.tz`
57
57
 
58
+ ## The `taq compile-all` Task
59
+
60
+ Basic usage is:
61
+
62
+ ```shell
63
+ taq compile-all
64
+ ```
65
+
66
+ It works just like the `compile` task but it compiles all main contracts, a.k.a contracts with a `main` function.
67
+
58
68
  ## The `taq test` Task
59
69
 
60
70
  Basic usage is:
package/_readme.eta CHANGED
@@ -60,6 +60,16 @@ Lastly, `taq compile hello.mligo` will compile `hello.mligo` and emit `hello.tz`
60
60
 
61
61
  The `--json` flag will make the task emit JSON-encoded Michelson instead of pure Michelson `.tz`
62
62
 
63
+ ## The `taq compile-all` Task
64
+
65
+ Basic usage is:
66
+
67
+ ```shell
68
+ taq compile-all
69
+ ```
70
+
71
+ It works just like the `compile` task but it compiles all main contracts, a.k.a contracts with a `main` function.
72
+
63
73
  ## The `taq test` Task
64
74
 
65
75
  Basic usage is:
package/common.ts CHANGED
@@ -11,14 +11,18 @@ export interface CompileOpts extends ProxyTaskArgs.t {
11
11
  json: boolean;
12
12
  }
13
13
 
14
+ export interface CompileAllOpts extends ProxyTaskArgs.t {
15
+ json: boolean;
16
+ }
17
+
14
18
  export interface TestOpts extends RequestArgs.t {
15
19
  task?: string;
16
20
  sourceFile?: string;
17
21
  }
18
22
 
19
- export type IntersectionOpts = LigoOpts & CompileOpts & TestOpts;
23
+ export type IntersectionOpts = LigoOpts & CompileOpts & CompileAllOpts & TestOpts;
20
24
 
21
- type UnionOpts = LigoOpts | CompileOpts | TestOpts;
25
+ type UnionOpts = LigoOpts | CompileOpts | CompileAllOpts | TestOpts;
22
26
 
23
27
  // Should point to the latest stable version, so it needs to be updated as part of our release process.
24
28
  const LIGO_DEFAULT_IMAGE = 'ligolang/ligo:0.57.0';
@@ -27,7 +31,10 @@ const LIGO_IMAGE_ENV_VAR = 'TAQ_LIGO_IMAGE';
27
31
 
28
32
  export const getLigoDockerImage = (): string => getDockerImage(LIGO_DEFAULT_IMAGE, LIGO_IMAGE_ENV_VAR);
29
33
 
30
- export const getInputFilename = (parsedArgs: UnionOpts, sourceFile: string): string =>
34
+ export const getInputFilenameAbsPath = (parsedArgs: UnionOpts, sourceFile: string): string =>
35
+ join(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? 'contracts', sourceFile);
36
+
37
+ export const getInputFilenameRelPath = (parsedArgs: UnionOpts, sourceFile: string): string =>
31
38
  join(parsedArgs.config.contractsDir ?? 'contracts', sourceFile);
32
39
 
33
40
  export const emitExternalError = (err: unknown, sourceFile: string): void => {
package/compile-all.ts ADDED
@@ -0,0 +1,29 @@
1
+ import { sendErr, sendJsonRes } from '@taqueria/node-sdk';
2
+ import glob from 'fast-glob';
3
+ import { readFile } from 'fs/promises';
4
+ import { join } from 'path';
5
+ import { CompileAllOpts as Opts, CompileOpts, getInputFilenameAbsPath } from './common';
6
+ import { compileContractWithStorageAndParameter, TableRow } from './compile';
7
+
8
+ const isMainContract = (parsedArgs: Opts, contactFilename: string): Promise<boolean> =>
9
+ readFile(getInputFilenameAbsPath(parsedArgs, contactFilename), 'utf8')
10
+ .then(data => /(const|let|function)\s+main/.test(data));
11
+
12
+ const compileAll = async (parsedArgs: Opts): Promise<void> => {
13
+ let p: Promise<TableRow[]>[] = [];
14
+
15
+ const contractFilenames = await glob(
16
+ ['**/*.ligo', '**/*.religo', '**/*.mligo', '**/*.jsligo'],
17
+ { cwd: join(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? 'contracts'), absolute: false },
18
+ );
19
+
20
+ for (const filename of contractFilenames) {
21
+ if (await isMainContract(parsedArgs, filename)) {
22
+ p.push(compileContractWithStorageAndParameter(parsedArgs as CompileOpts, filename));
23
+ }
24
+ }
25
+
26
+ return Promise.all(p).then(tables => tables.flat()).then(sendJsonRes).catch(err => sendErr(err, false));
27
+ };
28
+
29
+ export default compileAll;
package/compile.ts CHANGED
@@ -1,9 +1,15 @@
1
1
  import { execCmd, getArch, getArtifactsDir, sendAsyncErr, sendErr, sendJsonRes, sendWarn } from '@taqueria/node-sdk';
2
2
  import { access, readFile, writeFile } from 'fs/promises';
3
3
  import { basename, extname, join } from 'path';
4
- import { CompileOpts as Opts, emitExternalError, getInputFilename, getLigoDockerImage } from './common';
4
+ import {
5
+ CompileOpts as Opts,
6
+ emitExternalError,
7
+ getInputFilenameAbsPath,
8
+ getInputFilenameRelPath,
9
+ getLigoDockerImage,
10
+ } from './common';
5
11
 
6
- type TableRow = { contract: string; artifact: string };
12
+ export type TableRow = { contract: string; artifact: string };
7
13
 
8
14
  export type ExprKind = 'storage' | 'default_storage' | 'parameter';
9
15
 
@@ -67,7 +73,7 @@ const getCompileContractCmd = (parsedArgs: Opts, sourceFile: string): string =>
67
73
  if (!projectDir) throw `No project directory provided`;
68
74
  const baseCmd =
69
75
  `DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \"${projectDir}\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} compile contract`;
70
- const inputFile = getInputFilename(parsedArgs, sourceFile);
76
+ const inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);
71
77
  const outputFile = `-o ${getOutputContractFilename(parsedArgs, sourceFile)}`;
72
78
  const flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';
73
79
  const cmd = `${baseCmd} ${inputFile} ${outputFile} ${flags}`;
@@ -80,7 +86,7 @@ const getCompileExprCmd = (parsedArgs: Opts, sourceFile: string, exprKind: ExprK
80
86
  const compilerType = isStorageKind(exprKind) ? 'storage' : 'parameter';
81
87
  const baseCmd =
82
88
  `DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \"${projectDir}\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} compile ${compilerType}`;
83
- const inputFile = getInputFilename(parsedArgs, sourceFile);
89
+ const inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);
84
90
  const outputFile = `-o ${getOutputExprFilename(parsedArgs, sourceFile, exprKind, exprName)}`;
85
91
  const flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';
86
92
  const cmd = `${baseCmd} ${inputFile} ${exprName} ${outputFile} ${flags}`;
@@ -127,7 +133,7 @@ const compileExpr = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind) =
127
133
  });
128
134
 
129
135
  const getExprNames = (parsedArgs: Opts, sourceFile: string): Promise<string[]> =>
130
- readFile(getInputFilename(parsedArgs, sourceFile), 'utf8')
136
+ readFile(getInputFilenameAbsPath(parsedArgs, sourceFile), 'utf8')
131
137
  .then(data => data.match(/(?<=\n\s*(let|const)\s+)[a-zA-Z0-9_]+/g) ?? []);
132
138
 
133
139
  const compileExprs = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind): Promise<TableRow[]> =>
@@ -154,7 +160,7 @@ const compileExprs = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind):
154
160
  // TODO: Just for backwards compatibility. Can be deleted in the future.
155
161
  const tryLegacyStorageNamingConvention = (parsedArgs: Opts, sourceFile: string) => {
156
162
  const storageListFile = `${removeExt(sourceFile)}.storages${extractExt(sourceFile)}`;
157
- const storageListFilename = getInputFilename(parsedArgs, storageListFile);
163
+ const storageListFilename = getInputFilenameAbsPath(parsedArgs, storageListFile);
158
164
  return access(storageListFilename).then(() => {
159
165
  sendWarn(
160
166
  `Warning: The naming convention of "<CONTRACT>.storages.<EXTENSION>" is deprecated and renamed to "<CONTRACT>.storageList.<EXTENSION>". Please adjust your storage file names accordingly\n`,
@@ -166,7 +172,7 @@ const tryLegacyStorageNamingConvention = (parsedArgs: Opts, sourceFile: string)
166
172
  // TODO: Just for backwards compatibility. Can be deleted in the future.
167
173
  const tryLegacyParameterNamingConvention = (parsedArgs: Opts, sourceFile: string) => {
168
174
  const parameterListFile = `${removeExt(sourceFile)}.parameters${extractExt(sourceFile)}`;
169
- const parameterListFilename = getInputFilename(parsedArgs, parameterListFile);
175
+ const parameterListFilename = getInputFilenameAbsPath(parsedArgs, parameterListFile);
170
176
  return access(parameterListFilename).then(() => {
171
177
  sendWarn(
172
178
  `Warning: The naming convention of "<CONTRACT>.parameters.<EXTENSION>" is deprecated and renamed to "<CONTRACT>.parameterList.<EXTENSION>". Please adjust your parameter file names accordingly\n`,
@@ -206,12 +212,15 @@ const initContentForParameter = (sourceFile: string): string => {
206
212
  return linkToContract + instruction + syntax;
207
213
  };
208
214
 
209
- const compileContractWithStorageAndParameter = async (parsedArgs: Opts, sourceFile: string): Promise<TableRow[]> => {
215
+ export const compileContractWithStorageAndParameter = async (
216
+ parsedArgs: Opts,
217
+ sourceFile: string,
218
+ ): Promise<TableRow[]> => {
210
219
  const contractCompileResult = await compileContract(parsedArgs, sourceFile);
211
220
  if (contractCompileResult.artifact === COMPILE_ERR_MSG) return [contractCompileResult];
212
221
 
213
222
  const storageListFile = `${removeExt(sourceFile)}.storageList${extractExt(sourceFile)}`;
214
- const storageListFilename = getInputFilename(parsedArgs, storageListFile);
223
+ const storageListFilename = getInputFilenameAbsPath(parsedArgs, storageListFile);
215
224
  const storageCompileResult = await (access(storageListFilename)
216
225
  .then(() => compileExprs(parsedArgs, storageListFile, 'storage'))
217
226
  .catch(() => tryLegacyStorageNamingConvention(parsedArgs, sourceFile))
@@ -219,11 +228,11 @@ const compileContractWithStorageAndParameter = async (parsedArgs: Opts, sourceFi
219
228
  sendWarn(
220
229
  `Note: storage file associated with "${sourceFile}" can't be found, so "${storageListFile}" has been created for you. Use this file to define all initial storage values for this contract\n`,
221
230
  );
222
- writeFile(join(parsedArgs.config.projectDir, storageListFilename), initContentForStorage(sourceFile), 'utf8');
231
+ writeFile(storageListFilename, initContentForStorage(sourceFile), 'utf8');
223
232
  }));
224
233
 
225
234
  const parameterListFile = `${removeExt(sourceFile)}.parameterList${extractExt(sourceFile)}`;
226
- const parameterListFilename = getInputFilename(parsedArgs, parameterListFile);
235
+ const parameterListFilename = getInputFilenameAbsPath(parsedArgs, parameterListFile);
227
236
  const parameterCompileResult = await (access(parameterListFilename)
228
237
  .then(() => compileExprs(parsedArgs, parameterListFile, 'parameter'))
229
238
  .catch(() => tryLegacyParameterNamingConvention(parsedArgs, sourceFile))
@@ -231,7 +240,7 @@ const compileContractWithStorageAndParameter = async (parsedArgs: Opts, sourceFi
231
240
  sendWarn(
232
241
  `Note: parameter file associated with "${sourceFile}" can't be found, so "${parameterListFile}" has been created for you. Use this file to define all parameter values for this contract\n`,
233
242
  );
234
- writeFile(join(parsedArgs.config.projectDir, parameterListFilename), initContentForParameter(sourceFile), 'utf8');
243
+ writeFile(parameterListFilename, initContentForParameter(sourceFile), 'utf8');
235
244
  }));
236
245
 
237
246
  let compileResults: TableRow[] = [contractCompileResult];
package/index.js CHANGED
@@ -1,7 +1,25 @@
1
1
  "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
18
+ mod
19
+ ));
2
20
 
3
21
  // index.ts
4
- var import_node_sdk7 = require("@taqueria/node-sdk");
22
+ var import_node_sdk8 = require("@taqueria/node-sdk");
5
23
 
6
24
  // createContract.ts
7
25
  var import_node_sdk = require("@taqueria/node-sdk");
@@ -156,7 +174,7 @@ var createContract = (args) => {
156
174
  var createContract_default = createContract;
157
175
 
158
176
  // main.ts
159
- var import_node_sdk6 = require("@taqueria/node-sdk");
177
+ var import_node_sdk7 = require("@taqueria/node-sdk");
160
178
 
161
179
  // common.ts
162
180
  var import_node_sdk2 = require("@taqueria/node-sdk");
@@ -164,7 +182,8 @@ var import_path = require("path");
164
182
  var LIGO_DEFAULT_IMAGE = "ligolang/ligo:0.57.0";
165
183
  var LIGO_IMAGE_ENV_VAR = "TAQ_LIGO_IMAGE";
166
184
  var getLigoDockerImage = () => (0, import_node_sdk2.getDockerImage)(LIGO_DEFAULT_IMAGE, LIGO_IMAGE_ENV_VAR);
167
- var getInputFilename = (parsedArgs, sourceFile) => (0, import_path.join)(parsedArgs.config.contractsDir ?? "contracts", sourceFile);
185
+ var getInputFilenameAbsPath = (parsedArgs, sourceFile) => (0, import_path.join)(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? "contracts", sourceFile);
186
+ var getInputFilenameRelPath = (parsedArgs, sourceFile) => (0, import_path.join)(parsedArgs.config.contractsDir ?? "contracts", sourceFile);
168
187
  var emitExternalError = (err, sourceFile) => {
169
188
  (0, import_node_sdk2.sendErr)(`
170
189
  === Error messages for ${sourceFile} ===`);
@@ -215,7 +234,7 @@ var getCompileContractCmd = (parsedArgs, sourceFile) => {
215
234
  if (!projectDir)
216
235
  throw `No project directory provided`;
217
236
  const baseCmd = `DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v "${projectDir}":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} compile contract`;
218
- const inputFile = getInputFilename(parsedArgs, sourceFile);
237
+ const inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);
219
238
  const outputFile = `-o ${getOutputContractFilename(parsedArgs, sourceFile)}`;
220
239
  const flags = isOutputFormatJSON(parsedArgs) ? " --michelson-format json " : "";
221
240
  const cmd = `${baseCmd} ${inputFile} ${outputFile} ${flags}`;
@@ -227,7 +246,7 @@ var getCompileExprCmd = (parsedArgs, sourceFile, exprKind, exprName) => {
227
246
  throw `No project directory provided`;
228
247
  const compilerType = isStorageKind(exprKind) ? "storage" : "parameter";
229
248
  const baseCmd = `DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v "${projectDir}":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} compile ${compilerType}`;
230
- const inputFile = getInputFilename(parsedArgs, sourceFile);
249
+ const inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);
231
250
  const outputFile = `-o ${getOutputExprFilename(parsedArgs, sourceFile, exprKind, exprName)}`;
232
251
  const flags = isOutputFormatJSON(parsedArgs) ? " --michelson-format json " : "";
233
252
  const cmd = `${baseCmd} ${inputFile} ${exprName} ${outputFile} ${flags}`;
@@ -261,7 +280,7 @@ var compileExpr = (parsedArgs, sourceFile, exprKind) => (exprName) => (0, import
261
280
  artifact: COMPILE_ERR_MSG
262
281
  };
263
282
  });
264
- var getExprNames = (parsedArgs, sourceFile) => (0, import_promises2.readFile)(getInputFilename(parsedArgs, sourceFile), "utf8").then((data) => data.match(/(?<=\n\s*(let|const)\s+)[a-zA-Z0-9_]+/g) ?? []);
283
+ var getExprNames = (parsedArgs, sourceFile) => (0, import_promises2.readFile)(getInputFilenameAbsPath(parsedArgs, sourceFile), "utf8").then((data) => data.match(/(?<=\n\s*(let|const)\s+)[a-zA-Z0-9_]+/g) ?? []);
265
284
  var compileExprs = (parsedArgs, sourceFile, exprKind) => getExprNames(parsedArgs, sourceFile).then((exprNames) => {
266
285
  if (exprNames.length === 0)
267
286
  return [];
@@ -281,7 +300,7 @@ var compileExprs = (parsedArgs, sourceFile, exprKind) => getExprNames(parsedArgs
281
300
  }).then(mergeArtifactsOutput(sourceFile));
282
301
  var tryLegacyStorageNamingConvention = (parsedArgs, sourceFile) => {
283
302
  const storageListFile = `${removeExt(sourceFile)}.storages${extractExt(sourceFile)}`;
284
- const storageListFilename = getInputFilename(parsedArgs, storageListFile);
303
+ const storageListFilename = getInputFilenameAbsPath(parsedArgs, storageListFile);
285
304
  return (0, import_promises2.access)(storageListFilename).then(() => {
286
305
  (0, import_node_sdk3.sendWarn)(
287
306
  `Warning: The naming convention of "<CONTRACT>.storages.<EXTENSION>" is deprecated and renamed to "<CONTRACT>.storageList.<EXTENSION>". Please adjust your storage file names accordingly
@@ -292,7 +311,7 @@ var tryLegacyStorageNamingConvention = (parsedArgs, sourceFile) => {
292
311
  };
293
312
  var tryLegacyParameterNamingConvention = (parsedArgs, sourceFile) => {
294
313
  const parameterListFile = `${removeExt(sourceFile)}.parameters${extractExt(sourceFile)}`;
295
- const parameterListFilename = getInputFilename(parsedArgs, parameterListFile);
314
+ const parameterListFilename = getInputFilenameAbsPath(parsedArgs, parameterListFile);
296
315
  return (0, import_promises2.access)(parameterListFilename).then(() => {
297
316
  (0, import_node_sdk3.sendWarn)(
298
317
  `Warning: The naming convention of "<CONTRACT>.parameters.<EXTENSION>" is deprecated and renamed to "<CONTRACT>.parameterList.<EXTENSION>". Please adjust your parameter file names accordingly
@@ -340,22 +359,22 @@ var compileContractWithStorageAndParameter = async (parsedArgs, sourceFile) => {
340
359
  if (contractCompileResult.artifact === COMPILE_ERR_MSG)
341
360
  return [contractCompileResult];
342
361
  const storageListFile = `${removeExt(sourceFile)}.storageList${extractExt(sourceFile)}`;
343
- const storageListFilename = getInputFilename(parsedArgs, storageListFile);
362
+ const storageListFilename = getInputFilenameAbsPath(parsedArgs, storageListFile);
344
363
  const storageCompileResult = await (0, import_promises2.access)(storageListFilename).then(() => compileExprs(parsedArgs, storageListFile, "storage")).catch(() => tryLegacyStorageNamingConvention(parsedArgs, sourceFile)).catch(() => {
345
364
  (0, import_node_sdk3.sendWarn)(
346
365
  `Note: storage file associated with "${sourceFile}" can't be found, so "${storageListFile}" has been created for you. Use this file to define all initial storage values for this contract
347
366
  `
348
367
  );
349
- (0, import_promises2.writeFile)((0, import_path2.join)(parsedArgs.config.projectDir, storageListFilename), initContentForStorage(sourceFile), "utf8");
368
+ (0, import_promises2.writeFile)(storageListFilename, initContentForStorage(sourceFile), "utf8");
350
369
  });
351
370
  const parameterListFile = `${removeExt(sourceFile)}.parameterList${extractExt(sourceFile)}`;
352
- const parameterListFilename = getInputFilename(parsedArgs, parameterListFile);
371
+ const parameterListFilename = getInputFilenameAbsPath(parsedArgs, parameterListFile);
353
372
  const parameterCompileResult = await (0, import_promises2.access)(parameterListFilename).then(() => compileExprs(parsedArgs, parameterListFile, "parameter")).catch(() => tryLegacyParameterNamingConvention(parsedArgs, sourceFile)).catch(() => {
354
373
  (0, import_node_sdk3.sendWarn)(
355
374
  `Note: parameter file associated with "${sourceFile}" can't be found, so "${parameterListFile}" has been created for you. Use this file to define all parameter values for this contract
356
375
  `
357
376
  );
358
- (0, import_promises2.writeFile)((0, import_path2.join)(parsedArgs.config.projectDir, parameterListFilename), initContentForParameter(sourceFile), "utf8");
377
+ (0, import_promises2.writeFile)(parameterListFilename, initContentForParameter(sourceFile), "utf8");
359
378
  });
360
379
  let compileResults = [contractCompileResult];
361
380
  if (storageCompileResult)
@@ -393,8 +412,29 @@ var compile = (parsedArgs) => {
393
412
  };
394
413
  var compile_default = compile;
395
414
 
396
- // ligo.ts
415
+ // compile-all.ts
397
416
  var import_node_sdk4 = require("@taqueria/node-sdk");
417
+ var import_fast_glob = __toESM(require("fast-glob"));
418
+ var import_promises3 = require("fs/promises");
419
+ var import_path3 = require("path");
420
+ var isMainContract = (parsedArgs, contactFilename) => (0, import_promises3.readFile)(getInputFilenameAbsPath(parsedArgs, contactFilename), "utf8").then((data) => /(const|let|function)\s+main/.test(data));
421
+ var compileAll = async (parsedArgs) => {
422
+ let p = [];
423
+ const contractFilenames = await (0, import_fast_glob.default)(
424
+ ["**/*.ligo", "**/*.religo", "**/*.mligo", "**/*.jsligo"],
425
+ { cwd: (0, import_path3.join)(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? "contracts"), absolute: false }
426
+ );
427
+ for (const filename of contractFilenames) {
428
+ if (await isMainContract(parsedArgs, filename)) {
429
+ p.push(compileContractWithStorageAndParameter(parsedArgs, filename));
430
+ }
431
+ }
432
+ return Promise.all(p).then((tables) => tables.flat()).then(import_node_sdk4.sendJsonRes).catch((err) => (0, import_node_sdk4.sendErr)(err, false));
433
+ };
434
+ var compile_all_default = compileAll;
435
+
436
+ // ligo.ts
437
+ var import_node_sdk5 = require("@taqueria/node-sdk");
398
438
  var getArbitraryLigoCmd = (parsedArgs, userArgs) => {
399
439
  const projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;
400
440
  if (!projectDir)
@@ -411,29 +451,29 @@ var getArbitraryLigoCmd = (parsedArgs, userArgs) => {
411
451
  envVars
412
452
  ];
413
453
  };
414
- var runArbitraryLigoCmd = (parsedArgs, cmd) => (0, import_node_sdk4.getArch)().then(() => getArbitraryLigoCmd(parsedArgs, cmd)).then(([cmd2, envVars]) => (0, import_node_sdk4.spawnCmd)(cmd2, envVars)).then(
454
+ var runArbitraryLigoCmd = (parsedArgs, cmd) => (0, import_node_sdk5.getArch)().then(() => getArbitraryLigoCmd(parsedArgs, cmd)).then(([cmd2, envVars]) => (0, import_node_sdk5.spawnCmd)(cmd2, envVars)).then(
415
455
  (code) => code !== null && code === 0 ? `Command "${cmd}" ran successfully by LIGO` : `Command "${cmd}" failed. Please check your command`
416
- ).catch((err) => (0, import_node_sdk4.sendAsyncErr)(`An internal error has occurred: ${err.message}`));
456
+ ).catch((err) => (0, import_node_sdk5.sendAsyncErr)(`An internal error has occurred: ${err.message}`));
417
457
  var ligo = (parsedArgs) => {
418
458
  const args = parsedArgs.command;
419
- return runArbitraryLigoCmd(parsedArgs, args).then(import_node_sdk4.sendRes).catch((err) => (0, import_node_sdk4.sendAsyncErr)(err, false));
459
+ return runArbitraryLigoCmd(parsedArgs, args).then(import_node_sdk5.sendRes).catch((err) => (0, import_node_sdk5.sendAsyncErr)(err, false));
420
460
  };
421
461
  var ligo_default = ligo;
422
462
 
423
463
  // test.ts
424
- var import_node_sdk5 = require("@taqueria/node-sdk");
464
+ var import_node_sdk6 = require("@taqueria/node-sdk");
425
465
  var getTestContractCmd = (parsedArgs, sourceFile) => {
426
466
  const projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;
427
467
  if (!projectDir)
428
468
  throw `No project directory provided`;
429
469
  const baseCmd = `DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v "${projectDir}":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} run test`;
430
- const inputFile = getInputFilename(parsedArgs, sourceFile);
470
+ const inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);
431
471
  const cmd = `${baseCmd} ${inputFile}`;
432
472
  return cmd;
433
473
  };
434
- var testContract = (parsedArgs, sourceFile) => (0, import_node_sdk5.getArch)().then(() => getTestContractCmd(parsedArgs, sourceFile)).then(import_node_sdk5.execCmd).then(({ stdout, stderr }) => {
474
+ var testContract = (parsedArgs, sourceFile) => (0, import_node_sdk6.getArch)().then(() => getTestContractCmd(parsedArgs, sourceFile)).then(import_node_sdk6.execCmd).then(({ stdout, stderr }) => {
435
475
  if (stderr.length > 0)
436
- (0, import_node_sdk5.sendWarn)(stderr);
476
+ (0, import_node_sdk6.sendWarn)(stderr);
437
477
  const result = "\u{1F389} All tests passed \u{1F389}";
438
478
  return {
439
479
  contract: sourceFile,
@@ -450,9 +490,9 @@ ${result}` : result
450
490
  var test = (parsedArgs) => {
451
491
  const sourceFile = parsedArgs.sourceFile;
452
492
  if (!sourceFile)
453
- return (0, import_node_sdk5.sendAsyncErr)(`No source file provided`);
454
- return testContract(parsedArgs, sourceFile).then((result) => [result]).then(import_node_sdk5.sendJsonRes).catch(
455
- (err) => (0, import_node_sdk5.sendAsyncErr)(err, false)
493
+ return (0, import_node_sdk6.sendAsyncErr)(`No source file provided`);
494
+ return testContract(parsedArgs, sourceFile).then((result) => [result]).then(import_node_sdk6.sendJsonRes).catch(
495
+ (err) => (0, import_node_sdk6.sendAsyncErr)(err, false)
456
496
  );
457
497
  };
458
498
  var test_default = test;
@@ -465,28 +505,30 @@ var main = (parsedArgs) => {
465
505
  return ligo_default(unsafeOpts);
466
506
  case "compile":
467
507
  return compile_default(unsafeOpts);
508
+ case "compile-all":
509
+ return compile_all_default(unsafeOpts);
468
510
  case "test":
469
511
  return test_default(parsedArgs);
470
512
  case "get-image":
471
- return (0, import_node_sdk6.sendAsyncRes)(getLigoDockerImage());
513
+ return (0, import_node_sdk7.sendAsyncRes)(getLigoDockerImage());
472
514
  default:
473
- return (0, import_node_sdk6.sendAsyncErr)(`${unsafeOpts.task} is not an understood task by the LIGO plugin`);
515
+ return (0, import_node_sdk7.sendAsyncErr)(`${unsafeOpts.task} is not an understood task by the LIGO plugin`);
474
516
  }
475
517
  };
476
518
  var main_default = main;
477
519
 
478
520
  // index.ts
479
- import_node_sdk7.Plugin.create((i18n) => ({
521
+ import_node_sdk8.Plugin.create((i18n) => ({
480
522
  schema: "1.0",
481
523
  version: "0.1",
482
524
  alias: "ligo",
483
525
  tasks: [
484
- import_node_sdk7.Task.create({
526
+ import_node_sdk8.Task.create({
485
527
  task: "ligo",
486
528
  command: "ligo",
487
529
  description: "This task allows you to run arbitrary LIGO native commands. Note that they might not benefit from the abstractions provided by Taqueria",
488
530
  options: [
489
- import_node_sdk7.Option.create({
531
+ import_node_sdk8.Option.create({
490
532
  shortFlag: "c",
491
533
  flag: "command",
492
534
  type: "string",
@@ -497,13 +539,27 @@ import_node_sdk7.Plugin.create((i18n) => ({
497
539
  handler: "proxy",
498
540
  encoding: "none"
499
541
  }),
500
- import_node_sdk7.Task.create({
542
+ import_node_sdk8.Task.create({
501
543
  task: "compile",
502
544
  command: "compile <sourceFile>",
503
545
  aliases: ["c", "compile-ligo"],
504
546
  description: "Compile a smart contract written in a LIGO syntax to Michelson code, along with its associated storage/parameter list files if they are found",
505
547
  options: [
506
- import_node_sdk7.Option.create({
548
+ import_node_sdk8.Option.create({
549
+ flag: "json",
550
+ boolean: true,
551
+ description: "Emit JSON-encoded Michelson"
552
+ })
553
+ ],
554
+ handler: "proxy",
555
+ encoding: "json"
556
+ }),
557
+ import_node_sdk8.Task.create({
558
+ task: "compile-all",
559
+ command: "compile-all",
560
+ description: "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",
561
+ options: [
562
+ import_node_sdk8.Option.create({
507
563
  flag: "json",
508
564
  boolean: true,
509
565
  description: "Emit JSON-encoded Michelson"
@@ -512,14 +568,14 @@ import_node_sdk7.Plugin.create((i18n) => ({
512
568
  handler: "proxy",
513
569
  encoding: "json"
514
570
  }),
515
- import_node_sdk7.Task.create({
571
+ import_node_sdk8.Task.create({
516
572
  task: "test",
517
573
  command: "test <sourceFile>",
518
574
  description: "Test a smart contract written in LIGO",
519
575
  handler: "proxy",
520
576
  encoding: "json"
521
577
  }),
522
- import_node_sdk7.Task.create({
578
+ import_node_sdk8.Task.create({
523
579
  task: "get-image",
524
580
  command: "get-image",
525
581
  description: "Gets the name of the image to be used",
@@ -528,19 +584,19 @@ import_node_sdk7.Plugin.create((i18n) => ({
528
584
  })
529
585
  ],
530
586
  templates: [
531
- import_node_sdk7.Template.create({
587
+ import_node_sdk8.Template.create({
532
588
  template: "contract",
533
589
  command: "contract <sourceFileName>",
534
590
  description: "Create a LIGO contract with boilerplate code",
535
591
  positionals: [
536
- import_node_sdk7.PositionalArg.create({
592
+ import_node_sdk8.PositionalArg.create({
537
593
  placeholder: "sourceFileName",
538
594
  type: "string",
539
595
  description: "The name of the LIGO contract to generate"
540
596
  })
541
597
  ],
542
598
  options: [
543
- import_node_sdk7.Option.create({
599
+ import_node_sdk8.Option.create({
544
600
  shortFlag: "s",
545
601
  flag: "syntax",
546
602
  type: "string",
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts","createContract.ts","ligo_templates.ts","main.ts","common.ts","compile.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],\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}), process.argv);\n","import { experimental, sendAsyncErr } from '@taqueria/node-sdk';\nimport { RequestArgs } from '@taqueria/node-sdk';\nimport { writeFile } from 'fs/promises';\nimport { jsligo_template, mligo_template, pascaligo_template, religo_template } from './ligo_templates';\n\ninterface Opts extends RequestArgs.t {\n\tsourceFileName?: string;\n\tsyntax?: string;\n}\n\nconst registerContract = (arg: Opts, contractName: string) => {\n\texperimental.registerContract(arg, contractName);\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 === 'ligo') return pascaligo_template;\n\tif (syntax === 'religo') return religo_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 === 'ligo') return pascaligo_template;\n\t\tif (ext === 'religo') return religo_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\t\t.then(_ => registerContract(unsafeOpts, contractName));\n};\n\nexport default createContract;\n","export const mligo_template = `\ntype storage = int\n\ntype parameter =\n Increment of int\n| Decrement of int\n| Reset\n\ntype return = operation list * storage\n\n// Two entrypoints\n\nlet add (store, delta : storage * int) : storage = store + delta\nlet sub (store, delta : storage * int) : storage = store - delta\n\n(* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. *)\n \nlet main (action, store : parameter * storage) : return =\n ([] : operation list), // No operations\n (match action with\n Increment (n) -> add (store, n)\n | Decrement (n) -> sub (store, n)\n | Reset -> 0)\n`;\n\nexport const pascaligo_template = `\ntype storage is int\n\ntype parameter is\n Increment of int\n| Decrement of int\n| Reset\n\ntype return is list (operation) * storage\n\n// Two entrypoints\n\nfunction add (const store : storage; const delta : int) : storage is \n store + delta\n\nfunction sub (const store : storage; const delta : int) : storage is \n store - delta\n\n(* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. *)\n \nfunction main (const action : parameter; const store : storage) : return is\n ((nil : list (operation)), // No operations\n case action of [\n Increment (n) -> add (store, n)\n | Decrement (n) -> sub (store, n)\n | Reset -> 0\n ])\n`;\n\nexport const religo_template = `\ntype storage = int;\n\ntype parameter =\n Increment (int)\n| Decrement (int)\n| Reset;\n\ntype return = (list (operation), storage);\n\n// Two entrypoints\n\nlet add = ((store, delta) : (storage, int)) : storage => store + delta;\nlet sub = ((store, delta) : (storage, int)) : storage => store - delta;\n\n/* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. */\n \nlet main = ((action, store) : (parameter, storage)) : return => {\n (([] : list (operation)), // No operations\n (switch (action) {\n | Increment (n) => add ((store, n))\n | Decrement (n) => sub ((store, n))\n | Reset => 0}))\n};\n`;\n\nexport const jsligo_template = `\ntype storage = int;\n\ntype parameter =\n [\"Increment\", int]\n| [\"Decrement\", int]\n| [\"Reset\"];\n\ntype ret = [list<operation>, storage];\n\n// Two entrypoints\n\nconst add = ([store, delta] : [storage, int]) : storage => store + delta;\nconst sub = ([store, delta] : [storage, int]) : storage => store - delta;\n\n/* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. */\n\nconst main = ([action, store] : [parameter, storage]) : ret => {\n return [list([]) as list<operation>, // No operations\n match (action, {\n Increment:(n: int) => add ([store, n]),\n Decrement:(n: int) => sub ([store, n]),\n Reset :() => 0})]\n};\n`;\n","import { RequestArgs, sendAsyncErr, sendAsyncRes } from '@taqueria/node-sdk';\nimport { getLigoDockerImage, IntersectionOpts as Opts } from './common';\nimport compile from './compile';\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 '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}\n\nexport interface TestOpts extends RequestArgs.t {\n\ttask?: string;\n\tsourceFile?: string;\n}\n\nexport type IntersectionOpts = LigoOpts & CompileOpts & TestOpts;\n\ntype UnionOpts = LigoOpts | CompileOpts | 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.57.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 getInputFilename = (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 { execCmd, getArch, getArtifactsDir, sendAsyncErr, sendErr, sendJsonRes, sendWarn } from '@taqueria/node-sdk';\nimport { access, readFile, writeFile } from 'fs/promises';\nimport { basename, extname, join } from 'path';\nimport { CompileOpts as Opts, emitExternalError, getInputFilename, getLigoDockerImage } from './common';\n\ntype TableRow = { contract: string; artifact: string };\n\nexport type ExprKind = 'storage' | 'default_storage' | 'parameter';\n\nconst COMPILE_ERR_MSG: string = 'Not compiled';\n\nconst isStorageKind = (exprKind: ExprKind): boolean => exprKind === 'storage' || exprKind === 'default_storage';\n\nconst isLIGOFile = (sourceFile: string): boolean => /.+\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nconst isStorageListFile = (sourceFile: string): boolean =>\n\t/.+\\.(storageList|storages)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nconst isParameterListFile = (sourceFile: string): boolean =>\n\t/.+\\.(parameterList|parameters)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nconst isContractFile = (sourceFile: string): boolean =>\n\tisLIGOFile(sourceFile) && !isStorageListFile(sourceFile) && !isParameterListFile(sourceFile);\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, sourceFile: string): string => {\n\tconst outputFile = basename(sourceFile, extname(sourceFile));\n\tconst ext = isOutputFormatJSON(parsedArgs) ? '.json' : '.tz';\n\treturn join(getArtifactsDir(parsedArgs), `${outputFile}${ext}`);\n};\n\n// Get the contract name that the storage/parameter file is associated with\n// e.g. If sourceFile is token.storageList.mligo, then it'll return token.mligo\nconst getContractNameForExpr = (sourceFile: string, exprKind: ExprKind): string => {\n\ttry {\n\t\treturn isStorageKind(exprKind)\n\t\t\t? sourceFile.match(/.+(?=\\.(?:storageList|storages)\\.(ligo|religo|mligo|jsligo))/)!.join('.')\n\t\t\t: sourceFile.match(/.+(?=\\.(?:parameterList|parameters)\\.(ligo|religo|mligo|jsligo))/)!.join('.');\n\t} catch (err) {\n\t\tthrow new Error(`Something went wrong internally when dealing with filename format: ${err}`);\n\t}\n};\n\n// If sourceFile is token.storageList.mligo, then it'll return token.storage.{storageName}.tz\nconst getOutputExprFilename = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind, exprName: string): string => {\n\tconst contractName = basename(getContractNameForExpr(sourceFile, exprKind), extname(sourceFile));\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 = (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()} compile contract`;\n\tconst inputFile = getInputFilename(parsedArgs, sourceFile);\n\tconst outputFile = `-o ${getOutputContractFilename(parsedArgs, sourceFile)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\tconst cmd = `${baseCmd} ${inputFile} ${outputFile} ${flags}`;\n\treturn cmd;\n};\n\nconst getCompileExprCmd = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind, exprName: string): string => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `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 = getInputFilename(parsedArgs, sourceFile);\n\tconst outputFile = `-o ${getOutputExprFilename(parsedArgs, sourceFile, exprKind, exprName)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\tconst cmd = `${baseCmd} ${inputFile} ${exprName} ${outputFile} ${flags}`;\n\treturn cmd;\n};\n\nconst compileContract = (parsedArgs: Opts, sourceFile: string): Promise<TableRow> =>\n\tgetArch()\n\t\t.then(() => getCompileContractCmd(parsedArgs, sourceFile))\n\t\t.then(execCmd)\n\t\t.then(({ stderr }) => {\n\t\t\tif (stderr.length > 0) sendWarn(stderr);\n\t\t\treturn {\n\t\t\t\tcontract: sourceFile,\n\t\t\t\tartifact: getOutputContractFilename(parsedArgs, sourceFile),\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\tartifact: COMPILE_ERR_MSG,\n\t\t\t};\n\t\t});\n\nconst compileExpr = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind) =>\n\t(exprName: string): Promise<TableRow> =>\n\t\tgetArch()\n\t\t\t.then(() => getCompileExprCmd(parsedArgs, sourceFile, 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\treturn {\n\t\t\t\t\tcontract: sourceFile,\n\t\t\t\t\tartifact: getOutputExprFilename(parsedArgs, sourceFile, exprKind, exprName),\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\tcontract: sourceFile,\n\t\t\t\t\tartifact: COMPILE_ERR_MSG,\n\t\t\t\t};\n\t\t\t});\n\nconst getExprNames = (parsedArgs: Opts, sourceFile: string): Promise<string[]> =>\n\treadFile(getInputFilename(parsedArgs, sourceFile), 'utf8')\n\t\t.then(data => data.match(/(?<=\\n\\s*(let|const)\\s+)[a-zA-Z0-9_]+/g) ?? []);\n\nconst compileExprs = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind): 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, firstExprKind)(firstExprName);\n\t\t\tconst restExprResults = restExprNames.map(compileExpr(parsedArgs, sourceFile, 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\tcontract: sourceFile,\n\t\t\t\tartifact: `No ${isStorageKind(exprKind) ? 'storage' : 'parameter'} values compiled`,\n\t\t\t}];\n\t\t})\n\t\t.then(mergeArtifactsOutput(sourceFile));\n\n// TODO: Just for backwards compatibility. Can be deleted in the future.\nconst tryLegacyStorageNamingConvention = (parsedArgs: Opts, sourceFile: string) => {\n\tconst storageListFile = `${removeExt(sourceFile)}.storages${extractExt(sourceFile)}`;\n\tconst storageListFilename = getInputFilename(parsedArgs, storageListFile);\n\treturn access(storageListFilename).then(() => {\n\t\tsendWarn(\n\t\t\t`Warning: The naming convention of \"<CONTRACT>.storages.<EXTENSION>\" is deprecated and renamed to \"<CONTRACT>.storageList.<EXTENSION>\". Please adjust your storage file names accordingly\\n`,\n\t\t);\n\t\treturn compileExprs(parsedArgs, storageListFile, 'storage');\n\t});\n};\n\n// TODO: Just for backwards compatibility. Can be deleted in the future.\nconst tryLegacyParameterNamingConvention = (parsedArgs: Opts, sourceFile: string) => {\n\tconst parameterListFile = `${removeExt(sourceFile)}.parameters${extractExt(sourceFile)}`;\n\tconst parameterListFilename = getInputFilename(parsedArgs, parameterListFile);\n\treturn access(parameterListFilename).then(() => {\n\t\tsendWarn(\n\t\t\t`Warning: The naming convention of \"<CONTRACT>.parameters.<EXTENSION>\" is deprecated and renamed to \"<CONTRACT>.parameterList.<EXTENSION>\". Please adjust your parameter file names accordingly\\n`,\n\t\t);\n\t\treturn compileExprs(parsedArgs, parameterListFile, 'parameter');\n\t});\n};\n\nconst initContentForStorage = (sourceFile: string): string => {\n\tconst linkToContract = `#include \"${sourceFile}\"\\n\\n`;\n\n\tconst instruction =\n\t\t'// Define your initial storage values as a list of LIGO variable definitions,\\n// the first of which will be considered the default value to be used for origination later on\\n';\n\n\tconst ext = extractExt(sourceFile);\n\tlet syntax = '';\n\tif (ext === '.ligo') syntax = '// E.g. const aStorageValue : aStorageType = 10;\\n\\n';\n\telse if (ext === '.religo') syntax = '// E.g. let aStorageValue : aStorageType = 10;\\n\\n';\n\telse if (ext === '.mligo') syntax = '// E.g. let aStorageValue : aStorageType = 10\\n\\n';\n\telse if (ext === '.jsligo') syntax = '// E.g. const aStorageValue : aStorageType = 10;\\n\\n';\n\n\treturn linkToContract + instruction + syntax;\n};\n\nconst initContentForParameter = (sourceFile: string): string => {\n\tconst linkToContract = `#include \"${sourceFile}\"\\n\\n`;\n\n\tconst instruction = '// Define your parameter values as a list of LIGO variable definitions\\n';\n\n\tconst ext = extractExt(sourceFile);\n\tlet syntax = '';\n\tif (ext === '.ligo') syntax = '// E.g. const aParameterValue : aParameterType = Increment(1);\\n\\n';\n\telse if (ext === '.religo') syntax = '// E.g. let aParameterValue : aParameterType = (Increment (1));\\n\\n';\n\telse if (ext === '.mligo') syntax = '// E.g. let aParameterValue : aParameterType = Increment 1\\n\\n';\n\telse if (ext === '.jsligo') syntax = '// E.g. const aParameterValue : aParameterType = (Increment (1));\\n\\n';\n\n\treturn linkToContract + instruction + syntax;\n};\n\nconst compileContractWithStorageAndParameter = async (parsedArgs: Opts, sourceFile: string): Promise<TableRow[]> => {\n\tconst contractCompileResult = await compileContract(parsedArgs, sourceFile);\n\tif (contractCompileResult.artifact === COMPILE_ERR_MSG) return [contractCompileResult];\n\n\tconst storageListFile = `${removeExt(sourceFile)}.storageList${extractExt(sourceFile)}`;\n\tconst storageListFilename = getInputFilename(parsedArgs, storageListFile);\n\tconst storageCompileResult = await (access(storageListFilename)\n\t\t.then(() => compileExprs(parsedArgs, storageListFile, 'storage'))\n\t\t.catch(() => tryLegacyStorageNamingConvention(parsedArgs, sourceFile))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: storage file associated with \"${sourceFile}\" 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\twriteFile(join(parsedArgs.config.projectDir, storageListFilename), initContentForStorage(sourceFile), 'utf8');\n\t\t}));\n\n\tconst parameterListFile = `${removeExt(sourceFile)}.parameterList${extractExt(sourceFile)}`;\n\tconst parameterListFilename = getInputFilename(parsedArgs, parameterListFile);\n\tconst parameterCompileResult = await (access(parameterListFilename)\n\t\t.then(() => compileExprs(parsedArgs, parameterListFile, 'parameter'))\n\t\t.catch(() => tryLegacyParameterNamingConvention(parsedArgs, sourceFile))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: parameter file associated with \"${sourceFile}\" 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\twriteFile(join(parsedArgs.config.projectDir, parameterListFilename), initContentForParameter(sourceFile), 'utf8');\n\t\t}));\n\n\tlet compileResults: TableRow[] = [contractCompileResult];\n\tif (storageCompileResult) compileResults = compileResults.concat(storageCompileResult);\n\tif (parameterCompileResult) compileResults = compileResults.concat(parameterCompileResult);\n\treturn compileResults;\n};\n\n/*\nCompiling storage/parameter file amounts to compiling multiple expressions in that file,\nresulting in multiple rows with the same file name but different artifact names.\nThis will merge these rows into one row with just one mention of the file name.\ne.g.\n┌─────────────────────────┬─────────────────────────────────────────────┐\n│ Contract │ Artifact │\n├─────────────────────────┼─────────────────────────────────────────────┤\n│ hello.storageList.mligo │ artifacts/hello.default_storage.storage1.tz │\n├─────────────────────────┼─────────────────────────────────────────────┤\n│ hello.storageList.mligo │ artifacts/hello.storage.storage2.tz │\n└─────────────────────────┴─────────────────────────────────────────────┘\n\t\t\t\t\t\t\t\tversus\n┌─────────────────────────┬─────────────────────────────────────────────┐\n│ Contract │ Artifact │\n├─────────────────────────┼─────────────────────────────────────────────┤\n│ hello.storageList.mligo │ artifacts/hello.default_storage.storage1.tz │\n│ │ artifacts/hello.storage.storage2.tz │\n└─────────────────────────┴─────────────────────────────────────────────┘\n*/\nconst mergeArtifactsOutput = (sourceFile: string) =>\n\t(tableRows: TableRow[]): TableRow[] => {\n\t\tconst artifactsOutput = tableRows.reduce(\n\t\t\t(acc: string, row: TableRow) => row.artifact === COMPILE_ERR_MSG ? acc : `${acc}${row.artifact}\\n`,\n\t\t\t'',\n\t\t);\n\t\treturn [{\n\t\t\tcontract: sourceFile,\n\t\t\tartifact: artifactsOutput,\n\t\t}];\n\t};\n\nconst compile = (parsedArgs: Opts): Promise<void> => {\n\tconst sourceFile = parsedArgs.sourceFile!;\n\tlet p: Promise<TableRow[]>;\n\tif (isStorageListFile(sourceFile)) p = compileExprs(parsedArgs, sourceFile, 'storage');\n\telse if (isParameterListFile(sourceFile)) p = compileExprs(parsedArgs, sourceFile, 'parameter');\n\telse if (isContractFile(sourceFile)) p = compileContractWithStorageAndParameter(parsedArgs, sourceFile);\n\telse {\n\t\treturn sendAsyncErr(\n\t\t\t`${sourceFile} doesn't have a valid LIGO extension ('.ligo', '.religo', '.mligo' or '.jsligo')`,\n\t\t);\n\t}\n\treturn p.then(sendJsonRes).catch(err => sendErr(err, false));\n};\n\nexport default compile;\nexport const ___TEST___ = {\n\tgetContractNameForExpr,\n\tgetOutputExprFilename,\n};\n","import { getArch, sendAsyncErr, sendRes, spawnCmd } from '@taqueria/node-sdk';\nimport { getLigoDockerImage, LigoOpts as Opts } from './common';\n\nconst getArbitraryLigoCmd = (parsedArgs: Opts, userArgs: string): [string, Record<string, string>] => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `No project directory provided`;\n\tconst binary = 'docker';\n\tconst baseArgs = ['run', '--rm', '-v', `${projectDir}:/project`, '-w', '/project', getLigoDockerImage()];\n\tconst processedUserArgs = userArgs.split(' ').map(arg => arg.startsWith('\\\\-') ? arg.substring(1) : arg).filter(arg =>\n\t\targ\n\t);\n\tconst args = baseArgs.concat(processedUserArgs);\n\tconst envVars = { 'DOCKER_DEFAULT_PLATFORM': 'linux/amd64' };\n\treturn [\n\t\t[binary, ...args].join(' '),\n\t\tenvVars,\n\t];\n};\n\nconst runArbitraryLigoCmd = (parsedArgs: Opts, cmd: string): Promise<string> =>\n\tgetArch()\n\t\t.then(() => getArbitraryLigoCmd(parsedArgs, 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, getInputFilename, 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 = getInputFilename(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","import_node_sdk","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],\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}), process.argv);\n","import { experimental, sendAsyncErr } from '@taqueria/node-sdk';\nimport { RequestArgs } from '@taqueria/node-sdk';\nimport { writeFile } from 'fs/promises';\nimport { jsligo_template, mligo_template, pascaligo_template, religo_template } from './ligo_templates';\n\ninterface Opts extends RequestArgs.t {\n\tsourceFileName?: string;\n\tsyntax?: string;\n}\n\nconst registerContract = (arg: Opts, contractName: string) => {\n\texperimental.registerContract(arg, contractName);\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 === 'ligo') return pascaligo_template;\n\tif (syntax === 'religo') return religo_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 === 'ligo') return pascaligo_template;\n\t\tif (ext === 'religo') return religo_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\t\t.then(_ => registerContract(unsafeOpts, contractName));\n};\n\nexport default createContract;\n","export const mligo_template = `\ntype storage = int\n\ntype parameter =\n Increment of int\n| Decrement of int\n| Reset\n\ntype return = operation list * storage\n\n// Two entrypoints\n\nlet add (store, delta : storage * int) : storage = store + delta\nlet sub (store, delta : storage * int) : storage = store - delta\n\n(* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. *)\n \nlet main (action, store : parameter * storage) : return =\n ([] : operation list), // No operations\n (match action with\n Increment (n) -> add (store, n)\n | Decrement (n) -> sub (store, n)\n | Reset -> 0)\n`;\n\nexport const pascaligo_template = `\ntype storage is int\n\ntype parameter is\n Increment of int\n| Decrement of int\n| Reset\n\ntype return is list (operation) * storage\n\n// Two entrypoints\n\nfunction add (const store : storage; const delta : int) : storage is \n store + delta\n\nfunction sub (const store : storage; const delta : int) : storage is \n store - delta\n\n(* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. *)\n \nfunction main (const action : parameter; const store : storage) : return is\n ((nil : list (operation)), // No operations\n case action of [\n Increment (n) -> add (store, n)\n | Decrement (n) -> sub (store, n)\n | Reset -> 0\n ])\n`;\n\nexport const religo_template = `\ntype storage = int;\n\ntype parameter =\n Increment (int)\n| Decrement (int)\n| Reset;\n\ntype return = (list (operation), storage);\n\n// Two entrypoints\n\nlet add = ((store, delta) : (storage, int)) : storage => store + delta;\nlet sub = ((store, delta) : (storage, int)) : storage => store - delta;\n\n/* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. */\n \nlet main = ((action, store) : (parameter, storage)) : return => {\n (([] : list (operation)), // No operations\n (switch (action) {\n | Increment (n) => add ((store, n))\n | Decrement (n) => sub ((store, n))\n | Reset => 0}))\n};\n`;\n\nexport const jsligo_template = `\ntype storage = int;\n\ntype parameter =\n [\"Increment\", int]\n| [\"Decrement\", int]\n| [\"Reset\"];\n\ntype ret = [list<operation>, storage];\n\n// Two entrypoints\n\nconst add = ([store, delta] : [storage, int]) : storage => store + delta;\nconst sub = ([store, delta] : [storage, int]) : storage => store - delta;\n\n/* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. */\n\nconst main = ([action, store] : [parameter, storage]) : ret => {\n return [list([]) as list<operation>, // No operations\n match (action, {\n Increment:(n: int) => add ([store, n]),\n Decrement:(n: int) => sub ([store, n]),\n Reset :() => 0})]\n};\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}\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\ntype 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.57.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 { execCmd, getArch, getArtifactsDir, sendAsyncErr, sendErr, sendJsonRes, sendWarn } 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} from './common';\n\nexport type TableRow = { contract: string; artifact: string };\n\nexport type ExprKind = 'storage' | 'default_storage' | 'parameter';\n\nconst COMPILE_ERR_MSG: string = 'Not compiled';\n\nconst isStorageKind = (exprKind: ExprKind): boolean => exprKind === 'storage' || exprKind === 'default_storage';\n\nconst isLIGOFile = (sourceFile: string): boolean => /.+\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nconst isStorageListFile = (sourceFile: string): boolean =>\n\t/.+\\.(storageList|storages)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nconst isParameterListFile = (sourceFile: string): boolean =>\n\t/.+\\.(parameterList|parameters)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nconst isContractFile = (sourceFile: string): boolean =>\n\tisLIGOFile(sourceFile) && !isStorageListFile(sourceFile) && !isParameterListFile(sourceFile);\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, sourceFile: string): string => {\n\tconst outputFile = basename(sourceFile, extname(sourceFile));\n\tconst ext = isOutputFormatJSON(parsedArgs) ? '.json' : '.tz';\n\treturn join(getArtifactsDir(parsedArgs), `${outputFile}${ext}`);\n};\n\n// Get the contract name that the storage/parameter file is associated with\n// e.g. If sourceFile is token.storageList.mligo, then it'll return token.mligo\nconst getContractNameForExpr = (sourceFile: string, exprKind: ExprKind): string => {\n\ttry {\n\t\treturn isStorageKind(exprKind)\n\t\t\t? sourceFile.match(/.+(?=\\.(?:storageList|storages)\\.(ligo|religo|mligo|jsligo))/)!.join('.')\n\t\t\t: sourceFile.match(/.+(?=\\.(?:parameterList|parameters)\\.(ligo|religo|mligo|jsligo))/)!.join('.');\n\t} catch (err) {\n\t\tthrow new Error(`Something went wrong internally when dealing with filename format: ${err}`);\n\t}\n};\n\n// If sourceFile is token.storageList.mligo, then it'll return token.storage.{storageName}.tz\nconst getOutputExprFilename = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind, exprName: string): string => {\n\tconst contractName = basename(getContractNameForExpr(sourceFile, exprKind), extname(sourceFile));\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 = (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()} compile contract`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst outputFile = `-o ${getOutputContractFilename(parsedArgs, sourceFile)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\tconst cmd = `${baseCmd} ${inputFile} ${outputFile} ${flags}`;\n\treturn cmd;\n};\n\nconst getCompileExprCmd = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind, exprName: string): string => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `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, sourceFile, exprKind, exprName)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\tconst cmd = `${baseCmd} ${inputFile} ${exprName} ${outputFile} ${flags}`;\n\treturn cmd;\n};\n\nconst compileContract = (parsedArgs: Opts, sourceFile: string): Promise<TableRow> =>\n\tgetArch()\n\t\t.then(() => getCompileContractCmd(parsedArgs, sourceFile))\n\t\t.then(execCmd)\n\t\t.then(({ stderr }) => {\n\t\t\tif (stderr.length > 0) sendWarn(stderr);\n\t\t\treturn {\n\t\t\t\tcontract: sourceFile,\n\t\t\t\tartifact: getOutputContractFilename(parsedArgs, sourceFile),\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\tartifact: COMPILE_ERR_MSG,\n\t\t\t};\n\t\t});\n\nconst compileExpr = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind) =>\n\t(exprName: string): Promise<TableRow> =>\n\t\tgetArch()\n\t\t\t.then(() => getCompileExprCmd(parsedArgs, sourceFile, 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\treturn {\n\t\t\t\t\tcontract: sourceFile,\n\t\t\t\t\tartifact: getOutputExprFilename(parsedArgs, sourceFile, exprKind, exprName),\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\tcontract: sourceFile,\n\t\t\t\t\tartifact: COMPILE_ERR_MSG,\n\t\t\t\t};\n\t\t\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 = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind): 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, firstExprKind)(firstExprName);\n\t\t\tconst restExprResults = restExprNames.map(compileExpr(parsedArgs, sourceFile, 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\tcontract: sourceFile,\n\t\t\t\tartifact: `No ${isStorageKind(exprKind) ? 'storage' : 'parameter'} values compiled`,\n\t\t\t}];\n\t\t})\n\t\t.then(mergeArtifactsOutput(sourceFile));\n\n// TODO: Just for backwards compatibility. Can be deleted in the future.\nconst tryLegacyStorageNamingConvention = (parsedArgs: Opts, sourceFile: string) => {\n\tconst storageListFile = `${removeExt(sourceFile)}.storages${extractExt(sourceFile)}`;\n\tconst storageListFilename = getInputFilenameAbsPath(parsedArgs, storageListFile);\n\treturn access(storageListFilename).then(() => {\n\t\tsendWarn(\n\t\t\t`Warning: The naming convention of \"<CONTRACT>.storages.<EXTENSION>\" is deprecated and renamed to \"<CONTRACT>.storageList.<EXTENSION>\". Please adjust your storage file names accordingly\\n`,\n\t\t);\n\t\treturn compileExprs(parsedArgs, storageListFile, 'storage');\n\t});\n};\n\n// TODO: Just for backwards compatibility. Can be deleted in the future.\nconst tryLegacyParameterNamingConvention = (parsedArgs: Opts, sourceFile: string) => {\n\tconst parameterListFile = `${removeExt(sourceFile)}.parameters${extractExt(sourceFile)}`;\n\tconst parameterListFilename = getInputFilenameAbsPath(parsedArgs, parameterListFile);\n\treturn access(parameterListFilename).then(() => {\n\t\tsendWarn(\n\t\t\t`Warning: The naming convention of \"<CONTRACT>.parameters.<EXTENSION>\" is deprecated and renamed to \"<CONTRACT>.parameterList.<EXTENSION>\". Please adjust your parameter file names accordingly\\n`,\n\t\t);\n\t\treturn compileExprs(parsedArgs, parameterListFile, 'parameter');\n\t});\n};\n\nconst initContentForStorage = (sourceFile: string): string => {\n\tconst linkToContract = `#include \"${sourceFile}\"\\n\\n`;\n\n\tconst instruction =\n\t\t'// Define your initial storage values as a list of LIGO variable definitions,\\n// the first of which will be considered the default value to be used for origination later on\\n';\n\n\tconst ext = extractExt(sourceFile);\n\tlet syntax = '';\n\tif (ext === '.ligo') syntax = '// E.g. const aStorageValue : aStorageType = 10;\\n\\n';\n\telse if (ext === '.religo') syntax = '// E.g. let aStorageValue : aStorageType = 10;\\n\\n';\n\telse if (ext === '.mligo') syntax = '// E.g. let aStorageValue : aStorageType = 10\\n\\n';\n\telse if (ext === '.jsligo') syntax = '// E.g. const aStorageValue : aStorageType = 10;\\n\\n';\n\n\treturn linkToContract + instruction + syntax;\n};\n\nconst initContentForParameter = (sourceFile: string): string => {\n\tconst linkToContract = `#include \"${sourceFile}\"\\n\\n`;\n\n\tconst instruction = '// Define your parameter values as a list of LIGO variable definitions\\n';\n\n\tconst ext = extractExt(sourceFile);\n\tlet syntax = '';\n\tif (ext === '.ligo') syntax = '// E.g. const aParameterValue : aParameterType = Increment(1);\\n\\n';\n\telse if (ext === '.religo') syntax = '// E.g. let aParameterValue : aParameterType = (Increment (1));\\n\\n';\n\telse if (ext === '.mligo') syntax = '// E.g. let aParameterValue : aParameterType = Increment 1\\n\\n';\n\telse if (ext === '.jsligo') syntax = '// E.g. const aParameterValue : aParameterType = (Increment (1));\\n\\n';\n\n\treturn linkToContract + instruction + syntax;\n};\n\nexport const compileContractWithStorageAndParameter = async (\n\tparsedArgs: Opts,\n\tsourceFile: string,\n): Promise<TableRow[]> => {\n\tconst contractCompileResult = await compileContract(parsedArgs, sourceFile);\n\tif (contractCompileResult.artifact === COMPILE_ERR_MSG) return [contractCompileResult];\n\n\tconst storageListFile = `${removeExt(sourceFile)}.storageList${extractExt(sourceFile)}`;\n\tconst storageListFilename = getInputFilenameAbsPath(parsedArgs, storageListFile);\n\tconst storageCompileResult = await (access(storageListFilename)\n\t\t.then(() => compileExprs(parsedArgs, storageListFile, 'storage'))\n\t\t.catch(() => tryLegacyStorageNamingConvention(parsedArgs, sourceFile))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: storage file associated with \"${sourceFile}\" 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\twriteFile(storageListFilename, initContentForStorage(sourceFile), 'utf8');\n\t\t}));\n\n\tconst parameterListFile = `${removeExt(sourceFile)}.parameterList${extractExt(sourceFile)}`;\n\tconst parameterListFilename = getInputFilenameAbsPath(parsedArgs, parameterListFile);\n\tconst parameterCompileResult = await (access(parameterListFilename)\n\t\t.then(() => compileExprs(parsedArgs, parameterListFile, 'parameter'))\n\t\t.catch(() => tryLegacyParameterNamingConvention(parsedArgs, sourceFile))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: parameter file associated with \"${sourceFile}\" 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\twriteFile(parameterListFilename, initContentForParameter(sourceFile), 'utf8');\n\t\t}));\n\n\tlet compileResults: TableRow[] = [contractCompileResult];\n\tif (storageCompileResult) compileResults = compileResults.concat(storageCompileResult);\n\tif (parameterCompileResult) compileResults = compileResults.concat(parameterCompileResult);\n\treturn compileResults;\n};\n\n/*\nCompiling storage/parameter file amounts to compiling multiple expressions in that file,\nresulting in multiple rows with the same file name but different artifact names.\nThis will merge these rows into one row with just one mention of the file name.\ne.g.\n┌─────────────────────────┬─────────────────────────────────────────────┐\n│ Contract │ Artifact │\n├─────────────────────────┼─────────────────────────────────────────────┤\n│ hello.storageList.mligo │ artifacts/hello.default_storage.storage1.tz │\n├─────────────────────────┼─────────────────────────────────────────────┤\n│ hello.storageList.mligo │ artifacts/hello.storage.storage2.tz │\n└─────────────────────────┴─────────────────────────────────────────────┘\n\t\t\t\t\t\t\t\tversus\n┌─────────────────────────┬─────────────────────────────────────────────┐\n│ Contract │ Artifact │\n├─────────────────────────┼─────────────────────────────────────────────┤\n│ hello.storageList.mligo │ artifacts/hello.default_storage.storage1.tz │\n│ │ artifacts/hello.storage.storage2.tz │\n└─────────────────────────┴─────────────────────────────────────────────┘\n*/\nconst mergeArtifactsOutput = (sourceFile: string) =>\n\t(tableRows: TableRow[]): TableRow[] => {\n\t\tconst artifactsOutput = tableRows.reduce(\n\t\t\t(acc: string, row: TableRow) => row.artifact === COMPILE_ERR_MSG ? acc : `${acc}${row.artifact}\\n`,\n\t\t\t'',\n\t\t);\n\t\treturn [{\n\t\t\tcontract: sourceFile,\n\t\t\tartifact: artifactsOutput,\n\t\t}];\n\t};\n\nconst compile = (parsedArgs: Opts): Promise<void> => {\n\tconst sourceFile = parsedArgs.sourceFile!;\n\tlet p: Promise<TableRow[]>;\n\tif (isStorageListFile(sourceFile)) p = compileExprs(parsedArgs, sourceFile, 'storage');\n\telse if (isParameterListFile(sourceFile)) p = compileExprs(parsedArgs, sourceFile, 'parameter');\n\telse if (isContractFile(sourceFile)) p = compileContractWithStorageAndParameter(parsedArgs, sourceFile);\n\telse {\n\t\treturn sendAsyncErr(\n\t\t\t`${sourceFile} doesn't have a valid LIGO extension ('.ligo', '.religo', '.mligo' or '.jsligo')`,\n\t\t);\n\t}\n\treturn p.then(sendJsonRes).catch(err => sendErr(err, false));\n};\n\nexport default compile;\nexport const ___TEST___ = {\n\tgetContractNameForExpr,\n\tgetOutputExprFilename,\n};\n","import { sendErr, sendJsonRes } from '@taqueria/node-sdk';\nimport glob from 'fast-glob';\nimport { readFile } from 'fs/promises';\nimport { join } from 'path';\nimport { CompileAllOpts as Opts, CompileOpts, getInputFilenameAbsPath } from './common';\nimport { compileContractWithStorageAndParameter, TableRow } from './compile';\n\nconst isMainContract = (parsedArgs: Opts, contactFilename: string): Promise<boolean> =>\n\treadFile(getInputFilenameAbsPath(parsedArgs, contactFilename), 'utf8')\n\t\t.then(data => /(const|let|function)\\s+main/.test(data));\n\nconst compileAll = async (parsedArgs: Opts): Promise<void> => {\n\tlet p: Promise<TableRow[]>[] = [];\n\n\tconst contractFilenames = await glob(\n\t\t['**/*.ligo', '**/*.religo', '**/*.mligo', '**/*.jsligo'],\n\t\t{ cwd: join(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? 'contracts'), absolute: false },\n\t);\n\n\tfor (const filename of contractFilenames) {\n\t\tif (await isMainContract(parsedArgs, filename)) {\n\t\t\tp.push(compileContractWithStorageAndParameter(parsedArgs as CompileOpts, filename));\n\t\t}\n\t}\n\n\treturn Promise.all(p).then(tables => tables.flat()).then(sendJsonRes).catch(err => sendErr(err, false));\n};\n\nexport default compileAll;\n","import { getArch, sendAsyncErr, sendRes, spawnCmd } from '@taqueria/node-sdk';\nimport { getLigoDockerImage, LigoOpts as Opts } from './common';\n\nconst getArbitraryLigoCmd = (parsedArgs: Opts, userArgs: string): [string, Record<string, string>] => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `No project directory provided`;\n\tconst binary = 'docker';\n\tconst baseArgs = ['run', '--rm', '-v', `${projectDir}:/project`, '-w', '/project', getLigoDockerImage()];\n\tconst processedUserArgs = userArgs.split(' ').map(arg => arg.startsWith('\\\\-') ? arg.substring(1) : arg).filter(arg =>\n\t\targ\n\t);\n\tconst args = baseArgs.concat(processedUserArgs);\n\tconst envVars = { 'DOCKER_DEFAULT_PLATFORM': 'linux/amd64' };\n\treturn [\n\t\t[binary, ...args].join(' '),\n\t\tenvVars,\n\t];\n};\n\nconst runArbitraryLigoCmd = (parsedArgs: Opts, cmd: string): Promise<string> =>\n\tgetArch()\n\t\t.then(() => getArbitraryLigoCmd(parsedArgs, 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","import_node_sdk","import_promises","import_path","glob","import_node_sdk","cmd","import_node_sdk"]}
package/index.mjs CHANGED
@@ -162,7 +162,8 @@ import { join } from "path";
162
162
  var LIGO_DEFAULT_IMAGE = "ligolang/ligo:0.57.0";
163
163
  var LIGO_IMAGE_ENV_VAR = "TAQ_LIGO_IMAGE";
164
164
  var getLigoDockerImage = () => getDockerImage(LIGO_DEFAULT_IMAGE, LIGO_IMAGE_ENV_VAR);
165
- var getInputFilename = (parsedArgs, sourceFile) => join(parsedArgs.config.contractsDir ?? "contracts", sourceFile);
165
+ var getInputFilenameAbsPath = (parsedArgs, sourceFile) => join(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? "contracts", sourceFile);
166
+ var getInputFilenameRelPath = (parsedArgs, sourceFile) => join(parsedArgs.config.contractsDir ?? "contracts", sourceFile);
166
167
  var emitExternalError = (err, sourceFile) => {
167
168
  sendErr(`
168
169
  === Error messages for ${sourceFile} ===`);
@@ -213,7 +214,7 @@ var getCompileContractCmd = (parsedArgs, sourceFile) => {
213
214
  if (!projectDir)
214
215
  throw `No project directory provided`;
215
216
  const baseCmd = `DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v "${projectDir}":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} compile contract`;
216
- const inputFile = getInputFilename(parsedArgs, sourceFile);
217
+ const inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);
217
218
  const outputFile = `-o ${getOutputContractFilename(parsedArgs, sourceFile)}`;
218
219
  const flags = isOutputFormatJSON(parsedArgs) ? " --michelson-format json " : "";
219
220
  const cmd = `${baseCmd} ${inputFile} ${outputFile} ${flags}`;
@@ -225,7 +226,7 @@ var getCompileExprCmd = (parsedArgs, sourceFile, exprKind, exprName) => {
225
226
  throw `No project directory provided`;
226
227
  const compilerType = isStorageKind(exprKind) ? "storage" : "parameter";
227
228
  const baseCmd = `DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v "${projectDir}":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} compile ${compilerType}`;
228
- const inputFile = getInputFilename(parsedArgs, sourceFile);
229
+ const inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);
229
230
  const outputFile = `-o ${getOutputExprFilename(parsedArgs, sourceFile, exprKind, exprName)}`;
230
231
  const flags = isOutputFormatJSON(parsedArgs) ? " --michelson-format json " : "";
231
232
  const cmd = `${baseCmd} ${inputFile} ${exprName} ${outputFile} ${flags}`;
@@ -259,7 +260,7 @@ var compileExpr = (parsedArgs, sourceFile, exprKind) => (exprName) => getArch().
259
260
  artifact: COMPILE_ERR_MSG
260
261
  };
261
262
  });
262
- var getExprNames = (parsedArgs, sourceFile) => readFile(getInputFilename(parsedArgs, sourceFile), "utf8").then((data) => data.match(/(?<=\n\s*(let|const)\s+)[a-zA-Z0-9_]+/g) ?? []);
263
+ var getExprNames = (parsedArgs, sourceFile) => readFile(getInputFilenameAbsPath(parsedArgs, sourceFile), "utf8").then((data) => data.match(/(?<=\n\s*(let|const)\s+)[a-zA-Z0-9_]+/g) ?? []);
263
264
  var compileExprs = (parsedArgs, sourceFile, exprKind) => getExprNames(parsedArgs, sourceFile).then((exprNames) => {
264
265
  if (exprNames.length === 0)
265
266
  return [];
@@ -279,7 +280,7 @@ var compileExprs = (parsedArgs, sourceFile, exprKind) => getExprNames(parsedArgs
279
280
  }).then(mergeArtifactsOutput(sourceFile));
280
281
  var tryLegacyStorageNamingConvention = (parsedArgs, sourceFile) => {
281
282
  const storageListFile = `${removeExt(sourceFile)}.storages${extractExt(sourceFile)}`;
282
- const storageListFilename = getInputFilename(parsedArgs, storageListFile);
283
+ const storageListFilename = getInputFilenameAbsPath(parsedArgs, storageListFile);
283
284
  return access(storageListFilename).then(() => {
284
285
  sendWarn(
285
286
  `Warning: The naming convention of "<CONTRACT>.storages.<EXTENSION>" is deprecated and renamed to "<CONTRACT>.storageList.<EXTENSION>". Please adjust your storage file names accordingly
@@ -290,7 +291,7 @@ var tryLegacyStorageNamingConvention = (parsedArgs, sourceFile) => {
290
291
  };
291
292
  var tryLegacyParameterNamingConvention = (parsedArgs, sourceFile) => {
292
293
  const parameterListFile = `${removeExt(sourceFile)}.parameters${extractExt(sourceFile)}`;
293
- const parameterListFilename = getInputFilename(parsedArgs, parameterListFile);
294
+ const parameterListFilename = getInputFilenameAbsPath(parsedArgs, parameterListFile);
294
295
  return access(parameterListFilename).then(() => {
295
296
  sendWarn(
296
297
  `Warning: The naming convention of "<CONTRACT>.parameters.<EXTENSION>" is deprecated and renamed to "<CONTRACT>.parameterList.<EXTENSION>". Please adjust your parameter file names accordingly
@@ -338,22 +339,22 @@ var compileContractWithStorageAndParameter = async (parsedArgs, sourceFile) => {
338
339
  if (contractCompileResult.artifact === COMPILE_ERR_MSG)
339
340
  return [contractCompileResult];
340
341
  const storageListFile = `${removeExt(sourceFile)}.storageList${extractExt(sourceFile)}`;
341
- const storageListFilename = getInputFilename(parsedArgs, storageListFile);
342
+ const storageListFilename = getInputFilenameAbsPath(parsedArgs, storageListFile);
342
343
  const storageCompileResult = await access(storageListFilename).then(() => compileExprs(parsedArgs, storageListFile, "storage")).catch(() => tryLegacyStorageNamingConvention(parsedArgs, sourceFile)).catch(() => {
343
344
  sendWarn(
344
345
  `Note: storage file associated with "${sourceFile}" can't be found, so "${storageListFile}" has been created for you. Use this file to define all initial storage values for this contract
345
346
  `
346
347
  );
347
- writeFile2(join2(parsedArgs.config.projectDir, storageListFilename), initContentForStorage(sourceFile), "utf8");
348
+ writeFile2(storageListFilename, initContentForStorage(sourceFile), "utf8");
348
349
  });
349
350
  const parameterListFile = `${removeExt(sourceFile)}.parameterList${extractExt(sourceFile)}`;
350
- const parameterListFilename = getInputFilename(parsedArgs, parameterListFile);
351
+ const parameterListFilename = getInputFilenameAbsPath(parsedArgs, parameterListFile);
351
352
  const parameterCompileResult = await access(parameterListFilename).then(() => compileExprs(parsedArgs, parameterListFile, "parameter")).catch(() => tryLegacyParameterNamingConvention(parsedArgs, sourceFile)).catch(() => {
352
353
  sendWarn(
353
354
  `Note: parameter file associated with "${sourceFile}" can't be found, so "${parameterListFile}" has been created for you. Use this file to define all parameter values for this contract
354
355
  `
355
356
  );
356
- writeFile2(join2(parsedArgs.config.projectDir, parameterListFilename), initContentForParameter(sourceFile), "utf8");
357
+ writeFile2(parameterListFilename, initContentForParameter(sourceFile), "utf8");
357
358
  });
358
359
  let compileResults = [contractCompileResult];
359
360
  if (storageCompileResult)
@@ -391,6 +392,27 @@ var compile = (parsedArgs) => {
391
392
  };
392
393
  var compile_default = compile;
393
394
 
395
+ // compile-all.ts
396
+ import { sendErr as sendErr3, sendJsonRes as sendJsonRes2 } from "@taqueria/node-sdk";
397
+ import glob from "fast-glob";
398
+ import { readFile as readFile2 } from "fs/promises";
399
+ import { join as join3 } from "path";
400
+ var isMainContract = (parsedArgs, contactFilename) => readFile2(getInputFilenameAbsPath(parsedArgs, contactFilename), "utf8").then((data) => /(const|let|function)\s+main/.test(data));
401
+ var compileAll = async (parsedArgs) => {
402
+ let p = [];
403
+ const contractFilenames = await glob(
404
+ ["**/*.ligo", "**/*.religo", "**/*.mligo", "**/*.jsligo"],
405
+ { cwd: join3(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? "contracts"), absolute: false }
406
+ );
407
+ for (const filename of contractFilenames) {
408
+ if (await isMainContract(parsedArgs, filename)) {
409
+ p.push(compileContractWithStorageAndParameter(parsedArgs, filename));
410
+ }
411
+ }
412
+ return Promise.all(p).then((tables) => tables.flat()).then(sendJsonRes2).catch((err) => sendErr3(err, false));
413
+ };
414
+ var compile_all_default = compileAll;
415
+
394
416
  // ligo.ts
395
417
  import { getArch as getArch2, sendAsyncErr as sendAsyncErr3, sendRes, spawnCmd } from "@taqueria/node-sdk";
396
418
  var getArbitraryLigoCmd = (parsedArgs, userArgs) => {
@@ -419,13 +441,13 @@ var ligo = (parsedArgs) => {
419
441
  var ligo_default = ligo;
420
442
 
421
443
  // test.ts
422
- import { execCmd as execCmd2, getArch as getArch3, sendAsyncErr as sendAsyncErr4, sendJsonRes as sendJsonRes2, sendWarn as sendWarn2 } from "@taqueria/node-sdk";
444
+ import { execCmd as execCmd2, getArch as getArch3, sendAsyncErr as sendAsyncErr4, sendJsonRes as sendJsonRes3, sendWarn as sendWarn2 } from "@taqueria/node-sdk";
423
445
  var getTestContractCmd = (parsedArgs, sourceFile) => {
424
446
  const projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;
425
447
  if (!projectDir)
426
448
  throw `No project directory provided`;
427
449
  const baseCmd = `DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v "${projectDir}":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} run test`;
428
- const inputFile = getInputFilename(parsedArgs, sourceFile);
450
+ const inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);
429
451
  const cmd = `${baseCmd} ${inputFile}`;
430
452
  return cmd;
431
453
  };
@@ -449,7 +471,7 @@ var test = (parsedArgs) => {
449
471
  const sourceFile = parsedArgs.sourceFile;
450
472
  if (!sourceFile)
451
473
  return sendAsyncErr4(`No source file provided`);
452
- return testContract(parsedArgs, sourceFile).then((result) => [result]).then(sendJsonRes2).catch(
474
+ return testContract(parsedArgs, sourceFile).then((result) => [result]).then(sendJsonRes3).catch(
453
475
  (err) => sendAsyncErr4(err, false)
454
476
  );
455
477
  };
@@ -463,6 +485,8 @@ var main = (parsedArgs) => {
463
485
  return ligo_default(unsafeOpts);
464
486
  case "compile":
465
487
  return compile_default(unsafeOpts);
488
+ case "compile-all":
489
+ return compile_all_default(unsafeOpts);
466
490
  case "test":
467
491
  return test_default(parsedArgs);
468
492
  case "get-image":
@@ -510,6 +534,20 @@ Plugin.create((i18n) => ({
510
534
  handler: "proxy",
511
535
  encoding: "json"
512
536
  }),
537
+ Task.create({
538
+ task: "compile-all",
539
+ command: "compile-all",
540
+ description: "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",
541
+ options: [
542
+ Option.create({
543
+ flag: "json",
544
+ boolean: true,
545
+ description: "Emit JSON-encoded Michelson"
546
+ })
547
+ ],
548
+ handler: "proxy",
549
+ encoding: "json"
550
+ }),
513
551
  Task.create({
514
552
  task: "test",
515
553
  command: "test <sourceFile>",
package/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts","createContract.ts","ligo_templates.ts","main.ts","common.ts","compile.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],\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}), process.argv);\n","import { experimental, sendAsyncErr } from '@taqueria/node-sdk';\nimport { RequestArgs } from '@taqueria/node-sdk';\nimport { writeFile } from 'fs/promises';\nimport { jsligo_template, mligo_template, pascaligo_template, religo_template } from './ligo_templates';\n\ninterface Opts extends RequestArgs.t {\n\tsourceFileName?: string;\n\tsyntax?: string;\n}\n\nconst registerContract = (arg: Opts, contractName: string) => {\n\texperimental.registerContract(arg, contractName);\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 === 'ligo') return pascaligo_template;\n\tif (syntax === 'religo') return religo_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 === 'ligo') return pascaligo_template;\n\t\tif (ext === 'religo') return religo_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\t\t.then(_ => registerContract(unsafeOpts, contractName));\n};\n\nexport default createContract;\n","export const mligo_template = `\ntype storage = int\n\ntype parameter =\n Increment of int\n| Decrement of int\n| Reset\n\ntype return = operation list * storage\n\n// Two entrypoints\n\nlet add (store, delta : storage * int) : storage = store + delta\nlet sub (store, delta : storage * int) : storage = store - delta\n\n(* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. *)\n \nlet main (action, store : parameter * storage) : return =\n ([] : operation list), // No operations\n (match action with\n Increment (n) -> add (store, n)\n | Decrement (n) -> sub (store, n)\n | Reset -> 0)\n`;\n\nexport const pascaligo_template = `\ntype storage is int\n\ntype parameter is\n Increment of int\n| Decrement of int\n| Reset\n\ntype return is list (operation) * storage\n\n// Two entrypoints\n\nfunction add (const store : storage; const delta : int) : storage is \n store + delta\n\nfunction sub (const store : storage; const delta : int) : storage is \n store - delta\n\n(* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. *)\n \nfunction main (const action : parameter; const store : storage) : return is\n ((nil : list (operation)), // No operations\n case action of [\n Increment (n) -> add (store, n)\n | Decrement (n) -> sub (store, n)\n | Reset -> 0\n ])\n`;\n\nexport const religo_template = `\ntype storage = int;\n\ntype parameter =\n Increment (int)\n| Decrement (int)\n| Reset;\n\ntype return = (list (operation), storage);\n\n// Two entrypoints\n\nlet add = ((store, delta) : (storage, int)) : storage => store + delta;\nlet sub = ((store, delta) : (storage, int)) : storage => store - delta;\n\n/* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. */\n \nlet main = ((action, store) : (parameter, storage)) : return => {\n (([] : list (operation)), // No operations\n (switch (action) {\n | Increment (n) => add ((store, n))\n | Decrement (n) => sub ((store, n))\n | Reset => 0}))\n};\n`;\n\nexport const jsligo_template = `\ntype storage = int;\n\ntype parameter =\n [\"Increment\", int]\n| [\"Decrement\", int]\n| [\"Reset\"];\n\ntype ret = [list<operation>, storage];\n\n// Two entrypoints\n\nconst add = ([store, delta] : [storage, int]) : storage => store + delta;\nconst sub = ([store, delta] : [storage, int]) : storage => store - delta;\n\n/* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. */\n\nconst main = ([action, store] : [parameter, storage]) : ret => {\n return [list([]) as list<operation>, // No operations\n match (action, {\n Increment:(n: int) => add ([store, n]),\n Decrement:(n: int) => sub ([store, n]),\n Reset :() => 0})]\n};\n`;\n","import { RequestArgs, sendAsyncErr, sendAsyncRes } from '@taqueria/node-sdk';\nimport { getLigoDockerImage, IntersectionOpts as Opts } from './common';\nimport compile from './compile';\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 '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}\n\nexport interface TestOpts extends RequestArgs.t {\n\ttask?: string;\n\tsourceFile?: string;\n}\n\nexport type IntersectionOpts = LigoOpts & CompileOpts & TestOpts;\n\ntype UnionOpts = LigoOpts | CompileOpts | 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.57.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 getInputFilename = (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 { execCmd, getArch, getArtifactsDir, sendAsyncErr, sendErr, sendJsonRes, sendWarn } from '@taqueria/node-sdk';\nimport { access, readFile, writeFile } from 'fs/promises';\nimport { basename, extname, join } from 'path';\nimport { CompileOpts as Opts, emitExternalError, getInputFilename, getLigoDockerImage } from './common';\n\ntype TableRow = { contract: string; artifact: string };\n\nexport type ExprKind = 'storage' | 'default_storage' | 'parameter';\n\nconst COMPILE_ERR_MSG: string = 'Not compiled';\n\nconst isStorageKind = (exprKind: ExprKind): boolean => exprKind === 'storage' || exprKind === 'default_storage';\n\nconst isLIGOFile = (sourceFile: string): boolean => /.+\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nconst isStorageListFile = (sourceFile: string): boolean =>\n\t/.+\\.(storageList|storages)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nconst isParameterListFile = (sourceFile: string): boolean =>\n\t/.+\\.(parameterList|parameters)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nconst isContractFile = (sourceFile: string): boolean =>\n\tisLIGOFile(sourceFile) && !isStorageListFile(sourceFile) && !isParameterListFile(sourceFile);\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, sourceFile: string): string => {\n\tconst outputFile = basename(sourceFile, extname(sourceFile));\n\tconst ext = isOutputFormatJSON(parsedArgs) ? '.json' : '.tz';\n\treturn join(getArtifactsDir(parsedArgs), `${outputFile}${ext}`);\n};\n\n// Get the contract name that the storage/parameter file is associated with\n// e.g. If sourceFile is token.storageList.mligo, then it'll return token.mligo\nconst getContractNameForExpr = (sourceFile: string, exprKind: ExprKind): string => {\n\ttry {\n\t\treturn isStorageKind(exprKind)\n\t\t\t? sourceFile.match(/.+(?=\\.(?:storageList|storages)\\.(ligo|religo|mligo|jsligo))/)!.join('.')\n\t\t\t: sourceFile.match(/.+(?=\\.(?:parameterList|parameters)\\.(ligo|religo|mligo|jsligo))/)!.join('.');\n\t} catch (err) {\n\t\tthrow new Error(`Something went wrong internally when dealing with filename format: ${err}`);\n\t}\n};\n\n// If sourceFile is token.storageList.mligo, then it'll return token.storage.{storageName}.tz\nconst getOutputExprFilename = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind, exprName: string): string => {\n\tconst contractName = basename(getContractNameForExpr(sourceFile, exprKind), extname(sourceFile));\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 = (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()} compile contract`;\n\tconst inputFile = getInputFilename(parsedArgs, sourceFile);\n\tconst outputFile = `-o ${getOutputContractFilename(parsedArgs, sourceFile)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\tconst cmd = `${baseCmd} ${inputFile} ${outputFile} ${flags}`;\n\treturn cmd;\n};\n\nconst getCompileExprCmd = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind, exprName: string): string => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `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 = getInputFilename(parsedArgs, sourceFile);\n\tconst outputFile = `-o ${getOutputExprFilename(parsedArgs, sourceFile, exprKind, exprName)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\tconst cmd = `${baseCmd} ${inputFile} ${exprName} ${outputFile} ${flags}`;\n\treturn cmd;\n};\n\nconst compileContract = (parsedArgs: Opts, sourceFile: string): Promise<TableRow> =>\n\tgetArch()\n\t\t.then(() => getCompileContractCmd(parsedArgs, sourceFile))\n\t\t.then(execCmd)\n\t\t.then(({ stderr }) => {\n\t\t\tif (stderr.length > 0) sendWarn(stderr);\n\t\t\treturn {\n\t\t\t\tcontract: sourceFile,\n\t\t\t\tartifact: getOutputContractFilename(parsedArgs, sourceFile),\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\tartifact: COMPILE_ERR_MSG,\n\t\t\t};\n\t\t});\n\nconst compileExpr = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind) =>\n\t(exprName: string): Promise<TableRow> =>\n\t\tgetArch()\n\t\t\t.then(() => getCompileExprCmd(parsedArgs, sourceFile, 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\treturn {\n\t\t\t\t\tcontract: sourceFile,\n\t\t\t\t\tartifact: getOutputExprFilename(parsedArgs, sourceFile, exprKind, exprName),\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\tcontract: sourceFile,\n\t\t\t\t\tartifact: COMPILE_ERR_MSG,\n\t\t\t\t};\n\t\t\t});\n\nconst getExprNames = (parsedArgs: Opts, sourceFile: string): Promise<string[]> =>\n\treadFile(getInputFilename(parsedArgs, sourceFile), 'utf8')\n\t\t.then(data => data.match(/(?<=\\n\\s*(let|const)\\s+)[a-zA-Z0-9_]+/g) ?? []);\n\nconst compileExprs = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind): 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, firstExprKind)(firstExprName);\n\t\t\tconst restExprResults = restExprNames.map(compileExpr(parsedArgs, sourceFile, 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\tcontract: sourceFile,\n\t\t\t\tartifact: `No ${isStorageKind(exprKind) ? 'storage' : 'parameter'} values compiled`,\n\t\t\t}];\n\t\t})\n\t\t.then(mergeArtifactsOutput(sourceFile));\n\n// TODO: Just for backwards compatibility. Can be deleted in the future.\nconst tryLegacyStorageNamingConvention = (parsedArgs: Opts, sourceFile: string) => {\n\tconst storageListFile = `${removeExt(sourceFile)}.storages${extractExt(sourceFile)}`;\n\tconst storageListFilename = getInputFilename(parsedArgs, storageListFile);\n\treturn access(storageListFilename).then(() => {\n\t\tsendWarn(\n\t\t\t`Warning: The naming convention of \"<CONTRACT>.storages.<EXTENSION>\" is deprecated and renamed to \"<CONTRACT>.storageList.<EXTENSION>\". Please adjust your storage file names accordingly\\n`,\n\t\t);\n\t\treturn compileExprs(parsedArgs, storageListFile, 'storage');\n\t});\n};\n\n// TODO: Just for backwards compatibility. Can be deleted in the future.\nconst tryLegacyParameterNamingConvention = (parsedArgs: Opts, sourceFile: string) => {\n\tconst parameterListFile = `${removeExt(sourceFile)}.parameters${extractExt(sourceFile)}`;\n\tconst parameterListFilename = getInputFilename(parsedArgs, parameterListFile);\n\treturn access(parameterListFilename).then(() => {\n\t\tsendWarn(\n\t\t\t`Warning: The naming convention of \"<CONTRACT>.parameters.<EXTENSION>\" is deprecated and renamed to \"<CONTRACT>.parameterList.<EXTENSION>\". Please adjust your parameter file names accordingly\\n`,\n\t\t);\n\t\treturn compileExprs(parsedArgs, parameterListFile, 'parameter');\n\t});\n};\n\nconst initContentForStorage = (sourceFile: string): string => {\n\tconst linkToContract = `#include \"${sourceFile}\"\\n\\n`;\n\n\tconst instruction =\n\t\t'// Define your initial storage values as a list of LIGO variable definitions,\\n// the first of which will be considered the default value to be used for origination later on\\n';\n\n\tconst ext = extractExt(sourceFile);\n\tlet syntax = '';\n\tif (ext === '.ligo') syntax = '// E.g. const aStorageValue : aStorageType = 10;\\n\\n';\n\telse if (ext === '.religo') syntax = '// E.g. let aStorageValue : aStorageType = 10;\\n\\n';\n\telse if (ext === '.mligo') syntax = '// E.g. let aStorageValue : aStorageType = 10\\n\\n';\n\telse if (ext === '.jsligo') syntax = '// E.g. const aStorageValue : aStorageType = 10;\\n\\n';\n\n\treturn linkToContract + instruction + syntax;\n};\n\nconst initContentForParameter = (sourceFile: string): string => {\n\tconst linkToContract = `#include \"${sourceFile}\"\\n\\n`;\n\n\tconst instruction = '// Define your parameter values as a list of LIGO variable definitions\\n';\n\n\tconst ext = extractExt(sourceFile);\n\tlet syntax = '';\n\tif (ext === '.ligo') syntax = '// E.g. const aParameterValue : aParameterType = Increment(1);\\n\\n';\n\telse if (ext === '.religo') syntax = '// E.g. let aParameterValue : aParameterType = (Increment (1));\\n\\n';\n\telse if (ext === '.mligo') syntax = '// E.g. let aParameterValue : aParameterType = Increment 1\\n\\n';\n\telse if (ext === '.jsligo') syntax = '// E.g. const aParameterValue : aParameterType = (Increment (1));\\n\\n';\n\n\treturn linkToContract + instruction + syntax;\n};\n\nconst compileContractWithStorageAndParameter = async (parsedArgs: Opts, sourceFile: string): Promise<TableRow[]> => {\n\tconst contractCompileResult = await compileContract(parsedArgs, sourceFile);\n\tif (contractCompileResult.artifact === COMPILE_ERR_MSG) return [contractCompileResult];\n\n\tconst storageListFile = `${removeExt(sourceFile)}.storageList${extractExt(sourceFile)}`;\n\tconst storageListFilename = getInputFilename(parsedArgs, storageListFile);\n\tconst storageCompileResult = await (access(storageListFilename)\n\t\t.then(() => compileExprs(parsedArgs, storageListFile, 'storage'))\n\t\t.catch(() => tryLegacyStorageNamingConvention(parsedArgs, sourceFile))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: storage file associated with \"${sourceFile}\" 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\twriteFile(join(parsedArgs.config.projectDir, storageListFilename), initContentForStorage(sourceFile), 'utf8');\n\t\t}));\n\n\tconst parameterListFile = `${removeExt(sourceFile)}.parameterList${extractExt(sourceFile)}`;\n\tconst parameterListFilename = getInputFilename(parsedArgs, parameterListFile);\n\tconst parameterCompileResult = await (access(parameterListFilename)\n\t\t.then(() => compileExprs(parsedArgs, parameterListFile, 'parameter'))\n\t\t.catch(() => tryLegacyParameterNamingConvention(parsedArgs, sourceFile))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: parameter file associated with \"${sourceFile}\" 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\twriteFile(join(parsedArgs.config.projectDir, parameterListFilename), initContentForParameter(sourceFile), 'utf8');\n\t\t}));\n\n\tlet compileResults: TableRow[] = [contractCompileResult];\n\tif (storageCompileResult) compileResults = compileResults.concat(storageCompileResult);\n\tif (parameterCompileResult) compileResults = compileResults.concat(parameterCompileResult);\n\treturn compileResults;\n};\n\n/*\nCompiling storage/parameter file amounts to compiling multiple expressions in that file,\nresulting in multiple rows with the same file name but different artifact names.\nThis will merge these rows into one row with just one mention of the file name.\ne.g.\n┌─────────────────────────┬─────────────────────────────────────────────┐\n│ Contract │ Artifact │\n├─────────────────────────┼─────────────────────────────────────────────┤\n│ hello.storageList.mligo │ artifacts/hello.default_storage.storage1.tz │\n├─────────────────────────┼─────────────────────────────────────────────┤\n│ hello.storageList.mligo │ artifacts/hello.storage.storage2.tz │\n└─────────────────────────┴─────────────────────────────────────────────┘\n\t\t\t\t\t\t\t\tversus\n┌─────────────────────────┬─────────────────────────────────────────────┐\n│ Contract │ Artifact │\n├─────────────────────────┼─────────────────────────────────────────────┤\n│ hello.storageList.mligo │ artifacts/hello.default_storage.storage1.tz │\n│ │ artifacts/hello.storage.storage2.tz │\n└─────────────────────────┴─────────────────────────────────────────────┘\n*/\nconst mergeArtifactsOutput = (sourceFile: string) =>\n\t(tableRows: TableRow[]): TableRow[] => {\n\t\tconst artifactsOutput = tableRows.reduce(\n\t\t\t(acc: string, row: TableRow) => row.artifact === COMPILE_ERR_MSG ? acc : `${acc}${row.artifact}\\n`,\n\t\t\t'',\n\t\t);\n\t\treturn [{\n\t\t\tcontract: sourceFile,\n\t\t\tartifact: artifactsOutput,\n\t\t}];\n\t};\n\nconst compile = (parsedArgs: Opts): Promise<void> => {\n\tconst sourceFile = parsedArgs.sourceFile!;\n\tlet p: Promise<TableRow[]>;\n\tif (isStorageListFile(sourceFile)) p = compileExprs(parsedArgs, sourceFile, 'storage');\n\telse if (isParameterListFile(sourceFile)) p = compileExprs(parsedArgs, sourceFile, 'parameter');\n\telse if (isContractFile(sourceFile)) p = compileContractWithStorageAndParameter(parsedArgs, sourceFile);\n\telse {\n\t\treturn sendAsyncErr(\n\t\t\t`${sourceFile} doesn't have a valid LIGO extension ('.ligo', '.religo', '.mligo' or '.jsligo')`,\n\t\t);\n\t}\n\treturn p.then(sendJsonRes).catch(err => sendErr(err, false));\n};\n\nexport default compile;\nexport const ___TEST___ = {\n\tgetContractNameForExpr,\n\tgetOutputExprFilename,\n};\n","import { getArch, sendAsyncErr, sendRes, spawnCmd } from '@taqueria/node-sdk';\nimport { getLigoDockerImage, LigoOpts as Opts } from './common';\n\nconst getArbitraryLigoCmd = (parsedArgs: Opts, userArgs: string): [string, Record<string, string>] => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `No project directory provided`;\n\tconst binary = 'docker';\n\tconst baseArgs = ['run', '--rm', '-v', `${projectDir}:/project`, '-w', '/project', getLigoDockerImage()];\n\tconst processedUserArgs = userArgs.split(' ').map(arg => arg.startsWith('\\\\-') ? arg.substring(1) : arg).filter(arg =>\n\t\targ\n\t);\n\tconst args = baseArgs.concat(processedUserArgs);\n\tconst envVars = { 'DOCKER_DEFAULT_PLATFORM': 'linux/amd64' };\n\treturn [\n\t\t[binary, ...args].join(' '),\n\t\tenvVars,\n\t];\n};\n\nconst runArbitraryLigoCmd = (parsedArgs: Opts, cmd: string): Promise<string> =>\n\tgetArch()\n\t\t.then(() => getArbitraryLigoCmd(parsedArgs, 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, getInputFilename, 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 = getInputFilename(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","sendAsyncErr","sendErr","writeFile","join","join","writeFile","sendAsyncErr","sendErr","getArch","sendAsyncErr","getArch","cmd","sendAsyncErr","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],\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}), process.argv);\n","import { experimental, sendAsyncErr } from '@taqueria/node-sdk';\nimport { RequestArgs } from '@taqueria/node-sdk';\nimport { writeFile } from 'fs/promises';\nimport { jsligo_template, mligo_template, pascaligo_template, religo_template } from './ligo_templates';\n\ninterface Opts extends RequestArgs.t {\n\tsourceFileName?: string;\n\tsyntax?: string;\n}\n\nconst registerContract = (arg: Opts, contractName: string) => {\n\texperimental.registerContract(arg, contractName);\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 === 'ligo') return pascaligo_template;\n\tif (syntax === 'religo') return religo_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 === 'ligo') return pascaligo_template;\n\t\tif (ext === 'religo') return religo_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\t\t.then(_ => registerContract(unsafeOpts, contractName));\n};\n\nexport default createContract;\n","export const mligo_template = `\ntype storage = int\n\ntype parameter =\n Increment of int\n| Decrement of int\n| Reset\n\ntype return = operation list * storage\n\n// Two entrypoints\n\nlet add (store, delta : storage * int) : storage = store + delta\nlet sub (store, delta : storage * int) : storage = store - delta\n\n(* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. *)\n \nlet main (action, store : parameter * storage) : return =\n ([] : operation list), // No operations\n (match action with\n Increment (n) -> add (store, n)\n | Decrement (n) -> sub (store, n)\n | Reset -> 0)\n`;\n\nexport const pascaligo_template = `\ntype storage is int\n\ntype parameter is\n Increment of int\n| Decrement of int\n| Reset\n\ntype return is list (operation) * storage\n\n// Two entrypoints\n\nfunction add (const store : storage; const delta : int) : storage is \n store + delta\n\nfunction sub (const store : storage; const delta : int) : storage is \n store - delta\n\n(* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. *)\n \nfunction main (const action : parameter; const store : storage) : return is\n ((nil : list (operation)), // No operations\n case action of [\n Increment (n) -> add (store, n)\n | Decrement (n) -> sub (store, n)\n | Reset -> 0\n ])\n`;\n\nexport const religo_template = `\ntype storage = int;\n\ntype parameter =\n Increment (int)\n| Decrement (int)\n| Reset;\n\ntype return = (list (operation), storage);\n\n// Two entrypoints\n\nlet add = ((store, delta) : (storage, int)) : storage => store + delta;\nlet sub = ((store, delta) : (storage, int)) : storage => store - delta;\n\n/* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. */\n \nlet main = ((action, store) : (parameter, storage)) : return => {\n (([] : list (operation)), // No operations\n (switch (action) {\n | Increment (n) => add ((store, n))\n | Decrement (n) => sub ((store, n))\n | Reset => 0}))\n};\n`;\n\nexport const jsligo_template = `\ntype storage = int;\n\ntype parameter =\n [\"Increment\", int]\n| [\"Decrement\", int]\n| [\"Reset\"];\n\ntype ret = [list<operation>, storage];\n\n// Two entrypoints\n\nconst add = ([store, delta] : [storage, int]) : storage => store + delta;\nconst sub = ([store, delta] : [storage, int]) : storage => store - delta;\n\n/* Main access point that dispatches to the entrypoints according to\n the smart contract parameter. */\n\nconst main = ([action, store] : [parameter, storage]) : ret => {\n return [list([]) as list<operation>, // No operations\n match (action, {\n Increment:(n: int) => add ([store, n]),\n Decrement:(n: int) => sub ([store, n]),\n Reset :() => 0})]\n};\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}\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\ntype 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.57.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 { execCmd, getArch, getArtifactsDir, sendAsyncErr, sendErr, sendJsonRes, sendWarn } 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} from './common';\n\nexport type TableRow = { contract: string; artifact: string };\n\nexport type ExprKind = 'storage' | 'default_storage' | 'parameter';\n\nconst COMPILE_ERR_MSG: string = 'Not compiled';\n\nconst isStorageKind = (exprKind: ExprKind): boolean => exprKind === 'storage' || exprKind === 'default_storage';\n\nconst isLIGOFile = (sourceFile: string): boolean => /.+\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nconst isStorageListFile = (sourceFile: string): boolean =>\n\t/.+\\.(storageList|storages)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nconst isParameterListFile = (sourceFile: string): boolean =>\n\t/.+\\.(parameterList|parameters)\\.(ligo|religo|mligo|jsligo)$/.test(sourceFile);\n\nconst isContractFile = (sourceFile: string): boolean =>\n\tisLIGOFile(sourceFile) && !isStorageListFile(sourceFile) && !isParameterListFile(sourceFile);\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, sourceFile: string): string => {\n\tconst outputFile = basename(sourceFile, extname(sourceFile));\n\tconst ext = isOutputFormatJSON(parsedArgs) ? '.json' : '.tz';\n\treturn join(getArtifactsDir(parsedArgs), `${outputFile}${ext}`);\n};\n\n// Get the contract name that the storage/parameter file is associated with\n// e.g. If sourceFile is token.storageList.mligo, then it'll return token.mligo\nconst getContractNameForExpr = (sourceFile: string, exprKind: ExprKind): string => {\n\ttry {\n\t\treturn isStorageKind(exprKind)\n\t\t\t? sourceFile.match(/.+(?=\\.(?:storageList|storages)\\.(ligo|religo|mligo|jsligo))/)!.join('.')\n\t\t\t: sourceFile.match(/.+(?=\\.(?:parameterList|parameters)\\.(ligo|religo|mligo|jsligo))/)!.join('.');\n\t} catch (err) {\n\t\tthrow new Error(`Something went wrong internally when dealing with filename format: ${err}`);\n\t}\n};\n\n// If sourceFile is token.storageList.mligo, then it'll return token.storage.{storageName}.tz\nconst getOutputExprFilename = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind, exprName: string): string => {\n\tconst contractName = basename(getContractNameForExpr(sourceFile, exprKind), extname(sourceFile));\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 = (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()} compile contract`;\n\tconst inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);\n\tconst outputFile = `-o ${getOutputContractFilename(parsedArgs, sourceFile)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\tconst cmd = `${baseCmd} ${inputFile} ${outputFile} ${flags}`;\n\treturn cmd;\n};\n\nconst getCompileExprCmd = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind, exprName: string): string => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `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, sourceFile, exprKind, exprName)}`;\n\tconst flags = isOutputFormatJSON(parsedArgs) ? ' --michelson-format json ' : '';\n\tconst cmd = `${baseCmd} ${inputFile} ${exprName} ${outputFile} ${flags}`;\n\treturn cmd;\n};\n\nconst compileContract = (parsedArgs: Opts, sourceFile: string): Promise<TableRow> =>\n\tgetArch()\n\t\t.then(() => getCompileContractCmd(parsedArgs, sourceFile))\n\t\t.then(execCmd)\n\t\t.then(({ stderr }) => {\n\t\t\tif (stderr.length > 0) sendWarn(stderr);\n\t\t\treturn {\n\t\t\t\tcontract: sourceFile,\n\t\t\t\tartifact: getOutputContractFilename(parsedArgs, sourceFile),\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\tartifact: COMPILE_ERR_MSG,\n\t\t\t};\n\t\t});\n\nconst compileExpr = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind) =>\n\t(exprName: string): Promise<TableRow> =>\n\t\tgetArch()\n\t\t\t.then(() => getCompileExprCmd(parsedArgs, sourceFile, 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\treturn {\n\t\t\t\t\tcontract: sourceFile,\n\t\t\t\t\tartifact: getOutputExprFilename(parsedArgs, sourceFile, exprKind, exprName),\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\tcontract: sourceFile,\n\t\t\t\t\tartifact: COMPILE_ERR_MSG,\n\t\t\t\t};\n\t\t\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 = (parsedArgs: Opts, sourceFile: string, exprKind: ExprKind): 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, firstExprKind)(firstExprName);\n\t\t\tconst restExprResults = restExprNames.map(compileExpr(parsedArgs, sourceFile, 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\tcontract: sourceFile,\n\t\t\t\tartifact: `No ${isStorageKind(exprKind) ? 'storage' : 'parameter'} values compiled`,\n\t\t\t}];\n\t\t})\n\t\t.then(mergeArtifactsOutput(sourceFile));\n\n// TODO: Just for backwards compatibility. Can be deleted in the future.\nconst tryLegacyStorageNamingConvention = (parsedArgs: Opts, sourceFile: string) => {\n\tconst storageListFile = `${removeExt(sourceFile)}.storages${extractExt(sourceFile)}`;\n\tconst storageListFilename = getInputFilenameAbsPath(parsedArgs, storageListFile);\n\treturn access(storageListFilename).then(() => {\n\t\tsendWarn(\n\t\t\t`Warning: The naming convention of \"<CONTRACT>.storages.<EXTENSION>\" is deprecated and renamed to \"<CONTRACT>.storageList.<EXTENSION>\". Please adjust your storage file names accordingly\\n`,\n\t\t);\n\t\treturn compileExprs(parsedArgs, storageListFile, 'storage');\n\t});\n};\n\n// TODO: Just for backwards compatibility. Can be deleted in the future.\nconst tryLegacyParameterNamingConvention = (parsedArgs: Opts, sourceFile: string) => {\n\tconst parameterListFile = `${removeExt(sourceFile)}.parameters${extractExt(sourceFile)}`;\n\tconst parameterListFilename = getInputFilenameAbsPath(parsedArgs, parameterListFile);\n\treturn access(parameterListFilename).then(() => {\n\t\tsendWarn(\n\t\t\t`Warning: The naming convention of \"<CONTRACT>.parameters.<EXTENSION>\" is deprecated and renamed to \"<CONTRACT>.parameterList.<EXTENSION>\". Please adjust your parameter file names accordingly\\n`,\n\t\t);\n\t\treturn compileExprs(parsedArgs, parameterListFile, 'parameter');\n\t});\n};\n\nconst initContentForStorage = (sourceFile: string): string => {\n\tconst linkToContract = `#include \"${sourceFile}\"\\n\\n`;\n\n\tconst instruction =\n\t\t'// Define your initial storage values as a list of LIGO variable definitions,\\n// the first of which will be considered the default value to be used for origination later on\\n';\n\n\tconst ext = extractExt(sourceFile);\n\tlet syntax = '';\n\tif (ext === '.ligo') syntax = '// E.g. const aStorageValue : aStorageType = 10;\\n\\n';\n\telse if (ext === '.religo') syntax = '// E.g. let aStorageValue : aStorageType = 10;\\n\\n';\n\telse if (ext === '.mligo') syntax = '// E.g. let aStorageValue : aStorageType = 10\\n\\n';\n\telse if (ext === '.jsligo') syntax = '// E.g. const aStorageValue : aStorageType = 10;\\n\\n';\n\n\treturn linkToContract + instruction + syntax;\n};\n\nconst initContentForParameter = (sourceFile: string): string => {\n\tconst linkToContract = `#include \"${sourceFile}\"\\n\\n`;\n\n\tconst instruction = '// Define your parameter values as a list of LIGO variable definitions\\n';\n\n\tconst ext = extractExt(sourceFile);\n\tlet syntax = '';\n\tif (ext === '.ligo') syntax = '// E.g. const aParameterValue : aParameterType = Increment(1);\\n\\n';\n\telse if (ext === '.religo') syntax = '// E.g. let aParameterValue : aParameterType = (Increment (1));\\n\\n';\n\telse if (ext === '.mligo') syntax = '// E.g. let aParameterValue : aParameterType = Increment 1\\n\\n';\n\telse if (ext === '.jsligo') syntax = '// E.g. const aParameterValue : aParameterType = (Increment (1));\\n\\n';\n\n\treturn linkToContract + instruction + syntax;\n};\n\nexport const compileContractWithStorageAndParameter = async (\n\tparsedArgs: Opts,\n\tsourceFile: string,\n): Promise<TableRow[]> => {\n\tconst contractCompileResult = await compileContract(parsedArgs, sourceFile);\n\tif (contractCompileResult.artifact === COMPILE_ERR_MSG) return [contractCompileResult];\n\n\tconst storageListFile = `${removeExt(sourceFile)}.storageList${extractExt(sourceFile)}`;\n\tconst storageListFilename = getInputFilenameAbsPath(parsedArgs, storageListFile);\n\tconst storageCompileResult = await (access(storageListFilename)\n\t\t.then(() => compileExprs(parsedArgs, storageListFile, 'storage'))\n\t\t.catch(() => tryLegacyStorageNamingConvention(parsedArgs, sourceFile))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: storage file associated with \"${sourceFile}\" 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\twriteFile(storageListFilename, initContentForStorage(sourceFile), 'utf8');\n\t\t}));\n\n\tconst parameterListFile = `${removeExt(sourceFile)}.parameterList${extractExt(sourceFile)}`;\n\tconst parameterListFilename = getInputFilenameAbsPath(parsedArgs, parameterListFile);\n\tconst parameterCompileResult = await (access(parameterListFilename)\n\t\t.then(() => compileExprs(parsedArgs, parameterListFile, 'parameter'))\n\t\t.catch(() => tryLegacyParameterNamingConvention(parsedArgs, sourceFile))\n\t\t.catch(() => {\n\t\t\tsendWarn(\n\t\t\t\t`Note: parameter file associated with \"${sourceFile}\" 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\twriteFile(parameterListFilename, initContentForParameter(sourceFile), 'utf8');\n\t\t}));\n\n\tlet compileResults: TableRow[] = [contractCompileResult];\n\tif (storageCompileResult) compileResults = compileResults.concat(storageCompileResult);\n\tif (parameterCompileResult) compileResults = compileResults.concat(parameterCompileResult);\n\treturn compileResults;\n};\n\n/*\nCompiling storage/parameter file amounts to compiling multiple expressions in that file,\nresulting in multiple rows with the same file name but different artifact names.\nThis will merge these rows into one row with just one mention of the file name.\ne.g.\n┌─────────────────────────┬─────────────────────────────────────────────┐\n│ Contract │ Artifact │\n├─────────────────────────┼─────────────────────────────────────────────┤\n│ hello.storageList.mligo │ artifacts/hello.default_storage.storage1.tz │\n├─────────────────────────┼─────────────────────────────────────────────┤\n│ hello.storageList.mligo │ artifacts/hello.storage.storage2.tz │\n└─────────────────────────┴─────────────────────────────────────────────┘\n\t\t\t\t\t\t\t\tversus\n┌─────────────────────────┬─────────────────────────────────────────────┐\n│ Contract │ Artifact │\n├─────────────────────────┼─────────────────────────────────────────────┤\n│ hello.storageList.mligo │ artifacts/hello.default_storage.storage1.tz │\n│ │ artifacts/hello.storage.storage2.tz │\n└─────────────────────────┴─────────────────────────────────────────────┘\n*/\nconst mergeArtifactsOutput = (sourceFile: string) =>\n\t(tableRows: TableRow[]): TableRow[] => {\n\t\tconst artifactsOutput = tableRows.reduce(\n\t\t\t(acc: string, row: TableRow) => row.artifact === COMPILE_ERR_MSG ? acc : `${acc}${row.artifact}\\n`,\n\t\t\t'',\n\t\t);\n\t\treturn [{\n\t\t\tcontract: sourceFile,\n\t\t\tartifact: artifactsOutput,\n\t\t}];\n\t};\n\nconst compile = (parsedArgs: Opts): Promise<void> => {\n\tconst sourceFile = parsedArgs.sourceFile!;\n\tlet p: Promise<TableRow[]>;\n\tif (isStorageListFile(sourceFile)) p = compileExprs(parsedArgs, sourceFile, 'storage');\n\telse if (isParameterListFile(sourceFile)) p = compileExprs(parsedArgs, sourceFile, 'parameter');\n\telse if (isContractFile(sourceFile)) p = compileContractWithStorageAndParameter(parsedArgs, sourceFile);\n\telse {\n\t\treturn sendAsyncErr(\n\t\t\t`${sourceFile} doesn't have a valid LIGO extension ('.ligo', '.religo', '.mligo' or '.jsligo')`,\n\t\t);\n\t}\n\treturn p.then(sendJsonRes).catch(err => sendErr(err, false));\n};\n\nexport default compile;\nexport const ___TEST___ = {\n\tgetContractNameForExpr,\n\tgetOutputExprFilename,\n};\n","import { sendErr, sendJsonRes } from '@taqueria/node-sdk';\nimport glob from 'fast-glob';\nimport { readFile } from 'fs/promises';\nimport { join } from 'path';\nimport { CompileAllOpts as Opts, CompileOpts, getInputFilenameAbsPath } from './common';\nimport { compileContractWithStorageAndParameter, TableRow } from './compile';\n\nconst isMainContract = (parsedArgs: Opts, contactFilename: string): Promise<boolean> =>\n\treadFile(getInputFilenameAbsPath(parsedArgs, contactFilename), 'utf8')\n\t\t.then(data => /(const|let|function)\\s+main/.test(data));\n\nconst compileAll = async (parsedArgs: Opts): Promise<void> => {\n\tlet p: Promise<TableRow[]>[] = [];\n\n\tconst contractFilenames = await glob(\n\t\t['**/*.ligo', '**/*.religo', '**/*.mligo', '**/*.jsligo'],\n\t\t{ cwd: join(parsedArgs.config.projectDir, parsedArgs.config.contractsDir ?? 'contracts'), absolute: false },\n\t);\n\n\tfor (const filename of contractFilenames) {\n\t\tif (await isMainContract(parsedArgs, filename)) {\n\t\t\tp.push(compileContractWithStorageAndParameter(parsedArgs as CompileOpts, filename));\n\t\t}\n\t}\n\n\treturn Promise.all(p).then(tables => tables.flat()).then(sendJsonRes).catch(err => sendErr(err, false));\n};\n\nexport default compileAll;\n","import { getArch, sendAsyncErr, sendRes, spawnCmd } from '@taqueria/node-sdk';\nimport { getLigoDockerImage, LigoOpts as Opts } from './common';\n\nconst getArbitraryLigoCmd = (parsedArgs: Opts, userArgs: string): [string, Record<string, string>] => {\n\tconst projectDir = process.env.PROJECT_DIR ?? parsedArgs.projectDir;\n\tif (!projectDir) throw `No project directory provided`;\n\tconst binary = 'docker';\n\tconst baseArgs = ['run', '--rm', '-v', `${projectDir}:/project`, '-w', '/project', getLigoDockerImage()];\n\tconst processedUserArgs = userArgs.split(' ').map(arg => arg.startsWith('\\\\-') ? arg.substring(1) : arg).filter(arg =>\n\t\targ\n\t);\n\tconst args = baseArgs.concat(processedUserArgs);\n\tconst envVars = { 'DOCKER_DEFAULT_PLATFORM': 'linux/amd64' };\n\treturn [\n\t\t[binary, ...args].join(' '),\n\t\tenvVars,\n\t];\n};\n\nconst runArbitraryLigoCmd = (parsedArgs: Opts, cmd: string): Promise<string> =>\n\tgetArch()\n\t\t.then(() => getArbitraryLigoCmd(parsedArgs, 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","sendAsyncErr","sendErr","writeFile","join","join","writeFile","sendAsyncErr","sendErr","sendErr","sendJsonRes","readFile","join","readFile","join","sendJsonRes","sendErr","getArch","sendAsyncErr","getArch","cmd","sendAsyncErr","execCmd","getArch","sendAsyncErr","sendJsonRes","sendWarn","getArch","execCmd","sendWarn","sendAsyncErr","sendJsonRes","sendAsyncErr"]}
package/index.ts CHANGED
@@ -40,6 +40,21 @@ Plugin.create(i18n => ({
40
40
  handler: 'proxy',
41
41
  encoding: 'json',
42
42
  }),
43
+ Task.create({
44
+ task: 'compile-all',
45
+ command: 'compile-all',
46
+ description:
47
+ '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',
48
+ options: [
49
+ Option.create({
50
+ flag: 'json',
51
+ boolean: true,
52
+ description: 'Emit JSON-encoded Michelson',
53
+ }),
54
+ ],
55
+ handler: 'proxy',
56
+ encoding: 'json',
57
+ }),
43
58
  Task.create({
44
59
  task: 'test',
45
60
  command: 'test <sourceFile>',
package/main.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { RequestArgs, sendAsyncErr, sendAsyncRes } from '@taqueria/node-sdk';
2
2
  import { getLigoDockerImage, IntersectionOpts as Opts } from './common';
3
3
  import compile from './compile';
4
+ import compileAll from './compile-all';
4
5
  import ligo from './ligo';
5
6
  import test from './test';
6
7
 
@@ -11,6 +12,8 @@ const main = (parsedArgs: RequestArgs.t): Promise<void> => {
11
12
  return ligo(unsafeOpts);
12
13
  case 'compile':
13
14
  return compile(unsafeOpts);
15
+ case 'compile-all':
16
+ return compileAll(unsafeOpts);
14
17
  case 'test':
15
18
  return test(parsedArgs);
16
19
  case 'get-image':
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taqueria/plugin-ligo",
3
- "version": "0.25.23-rc",
3
+ "version": "0.25.30-rc",
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/ecadlabs/taqueria#readme",
43
43
  "dependencies": {
44
- "@taqueria/node-sdk": "^0.25.23-rc",
44
+ "@taqueria/node-sdk": "^0.25.30-rc",
45
45
  "fast-glob": "^3.2.11"
46
46
  },
47
47
  "devDependencies": {
package/test.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { execCmd, getArch, sendAsyncErr, sendJsonRes, sendWarn } from '@taqueria/node-sdk';
2
- import { emitExternalError, getInputFilename, getLigoDockerImage, TestOpts as Opts } from './common';
2
+ import { emitExternalError, getInputFilenameRelPath, getLigoDockerImage, TestOpts as Opts } from './common';
3
3
 
4
4
  type TableRow = { contract: string; testResults: string };
5
5
 
@@ -8,7 +8,7 @@ const getTestContractCmd = (parsedArgs: Opts, sourceFile: string): string => {
8
8
  if (!projectDir) throw `No project directory provided`;
9
9
  const baseCmd =
10
10
  `DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v \"${projectDir}\":/project -w /project -u $(id -u):$(id -g) ${getLigoDockerImage()} run test`;
11
- const inputFile = getInputFilename(parsedArgs, sourceFile);
11
+ const inputFile = getInputFilenameRelPath(parsedArgs, sourceFile);
12
12
  const cmd = `${baseCmd} ${inputFile}`;
13
13
  return cmd;
14
14
  };