@taqueria/plugin-contract-types 0.1.2 → 0.2.0
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/example/contracts/example-contract-10.tz +7 -0
- package/example/contracts/example-contract-11.tz +7 -0
- package/example/types-file/example-contract-10.code.ts +6 -0
- package/example/types-file/example-contract-10.types.ts +25 -0
- package/example/types-file/example-contract-11.code.ts +6 -0
- package/example/types-file/example-contract-11.types.ts +27 -0
- package/index.js +17 -36
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/src/generator/contract-parser.ts +4 -3
- package/src/generator/typescript-output.ts +3 -3
- package/tasks.ts +8 -14
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
|
|
2
|
+
export const ExampleContract10Code: { __type: 'ExampleContract10Code', protocol: string, code: object[] } = {
|
|
3
|
+
__type: 'ExampleContract10Code',
|
|
4
|
+
protocol: 'PsDELPH1Kxsxt8f9eWbxQeRxkjfbxoqM52jvs5Y5fBxWWh4ifpo',
|
|
5
|
+
code: JSON.parse(`[{"prim":"parameter","args":[{"prim":"pair","annots":["%update_token_metadata"],"args":[{"prim":"nat"},{"prim":"bytes"}]}]},{"prim":"storage","args":[{"prim":"nat","annots":["%total_supply"]}]}]`)
|
|
6
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
|
|
2
|
+
import { ContractAbstractionFromContractType, WalletContractAbstractionFromContractType } from './type-utils';
|
|
3
|
+
import { bytes, nat } from './type-aliases';
|
|
4
|
+
|
|
5
|
+
type Storage = {
|
|
6
|
+
total_supply: nat;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
type Methods = {
|
|
10
|
+
update_token_metadata: (
|
|
11
|
+
_0: nat,
|
|
12
|
+
_1: bytes,
|
|
13
|
+
) => Promise<void>;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
type MethodsObject = {
|
|
17
|
+
update_token_metadata: (params: {
|
|
18
|
+
0: nat,
|
|
19
|
+
1: bytes,
|
|
20
|
+
}) => Promise<void>;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
type contractTypes = { methods: Methods, methodsObject: MethodsObject, storage: Storage, code: { __type: 'ExampleContract10Code', protocol: string, code: object[] } };
|
|
24
|
+
export type ExampleContract10ContractType = ContractAbstractionFromContractType<contractTypes>;
|
|
25
|
+
export type ExampleContract10WalletType = WalletContractAbstractionFromContractType<contractTypes>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
|
|
2
|
+
export const ExampleContract11Code: { __type: 'ExampleContract11Code', protocol: string, code: object[] } = {
|
|
3
|
+
__type: 'ExampleContract11Code',
|
|
4
|
+
protocol: 'PsDELPH1Kxsxt8f9eWbxQeRxkjfbxoqM52jvs5Y5fBxWWh4ifpo',
|
|
5
|
+
code: JSON.parse(`[{"prim":"parameter","args":[{"prim":"list","annots":["%mint"],"args":[{"prim":"pair","args":[{"prim":"nat","annots":["%token_id"]},{"prim":"bytes","annots":["%ipfs_hash"]},{"prim":"address","annots":["%owner"]}]}]}]},{"prim":"storage","args":[{"prim":"nat","annots":["%total_supply"]}]}]`)
|
|
6
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
|
|
2
|
+
import { ContractAbstractionFromContractType, WalletContractAbstractionFromContractType } from './type-utils';
|
|
3
|
+
import { address, bytes, nat } from './type-aliases';
|
|
4
|
+
|
|
5
|
+
type Storage = {
|
|
6
|
+
total_supply: nat;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
type Methods = {
|
|
10
|
+
mint: (param: Array<{
|
|
11
|
+
token_id: nat;
|
|
12
|
+
ipfs_hash: bytes;
|
|
13
|
+
owner: address;
|
|
14
|
+
}>) => Promise<void>;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
type MethodsObject = {
|
|
18
|
+
mint: (param: Array<{
|
|
19
|
+
token_id: nat;
|
|
20
|
+
ipfs_hash: bytes;
|
|
21
|
+
owner: address;
|
|
22
|
+
}>) => Promise<void>;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
type contractTypes = { methods: Methods, methodsObject: MethodsObject, storage: Storage, code: { __type: 'ExampleContract11Code', protocol: string, code: object[] } };
|
|
26
|
+
export type ExampleContract11ContractType = ContractAbstractionFromContractType<contractTypes>;
|
|
27
|
+
export type ExampleContract11WalletType = WalletContractAbstractionFromContractType<contractTypes>;
|
package/index.js
CHANGED
|
@@ -171,11 +171,10 @@ const $b95e97a0bb3bf047$var$visitType = (node, options)=>{
|
|
|
171
171
|
args: node.args,
|
|
172
172
|
fields: fields
|
|
173
173
|
});
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
});
|
|
174
|
+
// Disabled Check: Apparently pairs can have more than 2 items
|
|
175
|
+
// if (fields.length !== 2) {
|
|
176
|
+
// throw new GenerateApiError(`pair: Expected 2 items`, { node, length: fields.length, fields });
|
|
177
|
+
// }
|
|
179
178
|
// Flatten with unnamed child pairs
|
|
180
179
|
const fieldsFlat = fields.map((x)=>(!x.name || options?.ignorePairName) && x.type.kind === 'object' ? x.type.fields : [
|
|
181
180
|
x
|
|
@@ -310,8 +309,7 @@ const $4e7cd4eb63db9934$export$eb0413f5ee90780 = (methods, storage)=>{
|
|
|
310
309
|
return vars.reduce((out, x, i)=>{
|
|
311
310
|
out[x.name ?? i] = getSchemaType(x.type);
|
|
312
311
|
return out;
|
|
313
|
-
}, {
|
|
314
|
-
});
|
|
312
|
+
}, {});
|
|
315
313
|
};
|
|
316
314
|
const getSchemaType = (t)=>{
|
|
317
315
|
// console.log('getSchemaType', { t });
|
|
@@ -329,8 +327,7 @@ const $4e7cd4eb63db9934$export$eb0413f5ee90780 = (methods, storage)=>{
|
|
|
329
327
|
params: x.args.length === 1 && !x.args[0].name ? getSchemaType(x.args[0].type) : getSchemaObjectType(x.args ?? [])
|
|
330
328
|
};
|
|
331
329
|
return out;
|
|
332
|
-
}, {
|
|
333
|
-
});
|
|
330
|
+
}, {});
|
|
334
331
|
const schemaStorage = getSchemaType(storage.storage);
|
|
335
332
|
return {
|
|
336
333
|
methods: schemaMethods,
|
|
@@ -409,8 +406,7 @@ ${tabs(indent)}`;
|
|
|
409
406
|
addTypeAlias(typeAlias);
|
|
410
407
|
return `${typeAlias.aliasType}<${typeToCode(t.map.key, indent)}, ${typeToCode(t.map.value, indent)}>`;
|
|
411
408
|
}
|
|
412
|
-
if (t.kind === `object`) return `{${toIndentedItems(indent, {
|
|
413
|
-
}, t.fields.map((a, i)=>varToCode(a, i, indent + 1) + `;`
|
|
409
|
+
if (t.kind === `object`) return `{${toIndentedItems(indent, {}, t.fields.map((a, i)=>varToCode(a, i, indent + 1) + `;`
|
|
414
410
|
))}}`;
|
|
415
411
|
if (t.kind === `union`) {
|
|
416
412
|
const getUnionItem = (a, i)=>{
|
|
@@ -418,8 +414,7 @@ ${tabs(indent)}`;
|
|
|
418
414
|
// Keep on single line if already on single line
|
|
419
415
|
if (!itemCode.includes(`\n`)) return `{ ${itemCode} }`;
|
|
420
416
|
// Indent if multi-line (and remake with extra indent)
|
|
421
|
-
return `{${toIndentedItems(indent + 1, {
|
|
422
|
-
}, [
|
|
417
|
+
return `{${toIndentedItems(indent + 1, {}, [
|
|
423
418
|
`${varToCode(a, i, indent + 2)}`
|
|
424
419
|
])}}`;
|
|
425
420
|
};
|
|
@@ -442,17 +437,16 @@ ${tabs(indent)}`;
|
|
|
442
437
|
t: t
|
|
443
438
|
});
|
|
444
439
|
};
|
|
445
|
-
const varToCode = (t, i, indent)=>{
|
|
446
|
-
return `${t.name ?? i}${t.type.optional ? `?` : ``}: ${typeToCode(t.type, indent)}`;
|
|
440
|
+
const varToCode = (t, i, indent, numberVarNamePrefix = '')=>{
|
|
441
|
+
return `${t.name ?? `${numberVarNamePrefix}${i}`}${t.type.optional ? `?` : ``}: ${typeToCode(t.type, indent)}`;
|
|
447
442
|
};
|
|
448
443
|
const argsToCode = (args, indent, asObject)=>{
|
|
449
444
|
if (args.length === 1) {
|
|
450
445
|
if (args[0].type.kind === `unit`) return ``;
|
|
451
446
|
return `${args[0].name ?? `param`}: ${typeToCode(args[0].type, indent + 1)}`;
|
|
452
447
|
}
|
|
453
|
-
const result = `${toIndentedItems(indent, {
|
|
454
|
-
|
|
455
|
-
).map((a, i)=>varToCode(a, i, indent + 1) + `,`
|
|
448
|
+
const result = `${toIndentedItems(indent, {}, args.filter((x)=>x.name || x.type.kind !== `unit`
|
|
449
|
+
).map((a, i)=>varToCode(a, i, indent + 1, asObject ? '' : '_') + `,`
|
|
456
450
|
))}`;
|
|
457
451
|
if (asObject) return `params: {${result}}`;
|
|
458
452
|
return result;
|
|
@@ -462,8 +456,7 @@ ${tabs(indent)}`;
|
|
|
462
456
|
const methodCode = `${x.name}: (${argsToCode(x.args, indent + 1, false)}) => Promise<void>;`;
|
|
463
457
|
return methodCode;
|
|
464
458
|
});
|
|
465
|
-
const methodsTypeCode = `type Methods = {${toIndentedItems(indent, {
|
|
466
|
-
}, methodFields)}};`;
|
|
459
|
+
const methodsTypeCode = `type Methods = {${toIndentedItems(indent, {}, methodFields)}};`;
|
|
467
460
|
return methodsTypeCode;
|
|
468
461
|
};
|
|
469
462
|
const methodsObjectToCode = (indent)=>{
|
|
@@ -471,8 +464,7 @@ ${tabs(indent)}`;
|
|
|
471
464
|
const methodCode = `${x.name}: (${argsToCode(x.args, indent + 1, true)}) => Promise<void>;`;
|
|
472
465
|
return methodCode;
|
|
473
466
|
});
|
|
474
|
-
const methodsTypeCode = `type MethodsObject = {${toIndentedItems(indent, {
|
|
475
|
-
}, methodFields)}};`;
|
|
467
|
+
const methodsTypeCode = `type MethodsObject = {${toIndentedItems(indent, {}, methodFields)}};`;
|
|
476
468
|
return methodsTypeCode;
|
|
477
469
|
};
|
|
478
470
|
const storageToCode = (indent)=>{
|
|
@@ -500,8 +492,7 @@ ${tabs(indent)}`;
|
|
|
500
492
|
entry.names.sort((a, b)=>a.localeCompare(b)
|
|
501
493
|
);
|
|
502
494
|
return out;
|
|
503
|
-
}, {
|
|
504
|
-
});
|
|
495
|
+
}, {});
|
|
505
496
|
const simpleTypeMappingImportsText = Object.keys(simpleTypeMappingImportsFrom).map((k)=>{
|
|
506
497
|
const entry = simpleTypeMappingImportsFrom[k];
|
|
507
498
|
const items = [
|
|
@@ -861,25 +852,15 @@ const $3beaa6d78a95a243$var$generateContractTypesAll = async (parsedArgs)=>{
|
|
|
861
852
|
return await Promise.all(files.map($3beaa6d78a95a243$var$generateContractTypes(parsedArgs)));
|
|
862
853
|
};
|
|
863
854
|
const $3beaa6d78a95a243$export$3350b7b754d5c00c = (parsedArgs)=>{
|
|
855
|
+
debugger;
|
|
864
856
|
parsedArgs.typescriptDir = parsedArgs.typescriptDir || 'types';
|
|
865
|
-
// WORKAROUND: Redirect console.log
|
|
866
|
-
const strOutLog = [];
|
|
867
|
-
const consoleLogOrig = console.log;
|
|
868
|
-
console.log = (message, data)=>{
|
|
869
|
-
strOutLog.push(`${message}${data ? `\n${JSON.stringify(data, null, 2)}` : ''}`);
|
|
870
|
-
};
|
|
871
857
|
console.log('generateTypes', {
|
|
872
858
|
typescriptDir: parsedArgs.typescriptDir
|
|
873
859
|
});
|
|
874
860
|
const argsTyped = parsedArgs;
|
|
875
861
|
const p = argsTyped.contract ? $3beaa6d78a95a243$var$generateContractTypes(argsTyped)(argsTyped.contract) : $3beaa6d78a95a243$var$generateContractTypesAll(argsTyped);
|
|
876
862
|
return p.then((data)=>{
|
|
877
|
-
console.log
|
|
878
|
-
return {
|
|
879
|
-
status: 'success',
|
|
880
|
-
stdout: `${strOutLog.join('\n')}${Array.isArray(data) ? data.join("\n") : data}`,
|
|
881
|
-
stderr: ""
|
|
882
|
-
};
|
|
863
|
+
console.log(Array.isArray(data) ? data.join("\n") : data);
|
|
883
864
|
});
|
|
884
865
|
};
|
|
885
866
|
const $3beaa6d78a95a243$export$7191f9b9098a3ea4 = {
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["taqueria-plugin-contract-types/index.ts","taqueria-plugin-contract-types/tasks.ts","taqueria-plugin-contract-types/src/cli-process.ts","taqueria-plugin-contract-types/src/generator/contract-name.ts","taqueria-plugin-contract-types/src/generator/process.ts","taqueria-plugin-contract-types/src/generator/common.ts","taqueria-plugin-contract-types/src/generator/contract-parser.ts","taqueria-plugin-contract-types/src/generator/schema-output.ts","taqueria-plugin-contract-types/src/generator/typescript-output.ts","taqueria-plugin-contract-types/src/type-aliases-file-content.ts","taqueria-plugin-contract-types/src/type-utils-file-content.ts"],"sourcesContent":["import {Plugin, Task, Option, PositionalArg} from '@taqueria/node-sdk'\nimport type { i18n} from '@taqueria/node-sdk/types'\nimport {tasks} from './tasks'\n\nPlugin.create((i18n: i18n) => ({\n alias: \"contract-types\",\n schema: \"1.0\",\n version: \"0.1\",\n tasks: [\n Task.create({\n task: \"generate types\",\n command: \"generate types [typescriptDir]\",\n description: \"Generate types for a contract to be used with taquito\",\n positionals: [\n PositionalArg.create({\n placeholder: \"typescriptDir\",\n description: \"The output directory for the generated type files\",\n defaultValue: \"types\",\n })\n ],\n options: [\n Option.create({\n shortFlag: \"t\",\n flag: \"typeAliasMode\",\n choices: ['file', 'simple'],\n description: \"The type aliases used in the generated types\"\n }),\n ],\n aliases: [\"gen types\", \"gentypes\"],\n handler: \"proxy\"\n }),\n ],\n proxy: tasks.generateTypes,\n}), process.argv)","import { SanitizedArgs, ActionResponse, Failure, LikeAPromise, ProxyAction } from \"@taqueria/node-sdk/types\";\nimport glob from 'fast-glob'\nimport { join } from 'path'\nimport { generateContractTypesProcessContractFiles } from \"./src/cli-process\";\n\ntype PluginOpts = {\n // TODO: Document these\n typescriptDir: string,\n typeAliasMode?: 'local' | 'file' | 'library' | 'simple',\n};\ntype Opts = SanitizedArgs & Record<string, unknown>;\n\nconst getContractAbspath = (contractFilename: string, parsedArgs: Opts) => \n join(parsedArgs.artifactsDir, /\\.tz$/.test(contractFilename) ? contractFilename : `${contractFilename}.tz`)\n\n\nconst generateContractTypes = (parsedArgs: Opts & PluginOpts) => async (contractFilename: string) : Promise<string> => {\n const contractAbspath = getContractAbspath(contractFilename, parsedArgs);\n await generateContractTypesProcessContractFiles({\n inputTzContractDirectory: parsedArgs.artifactsDir,\n inputFiles: [contractAbspath],\n outputTypescriptDirectory: parsedArgs.typescriptDir,\n format: 'tz',\n typeAliasMode: parsedArgs.typeAliasMode ?? 'file',\n });\n\n return `${contractFilename}: Types generated`;\n}\n\nconst generateContractTypesAll = async (parsedArgs: Opts & PluginOpts) : Promise<string[]> => {\n const files = await glob(\"**/*.tz\", {cwd: parsedArgs.artifactsDir});\n return await Promise.all(files.map(generateContractTypes(parsedArgs)));\n}\n\nexport const generateTypes = <T>(parsedArgs: Opts): LikeAPromise<ActionResponse, Failure<T>> => {\n parsedArgs.typescriptDir = parsedArgs.typescriptDir || 'types';\n\n // WORKAROUND: Redirect console.log\n const strOutLog = [] as string[];\n const consoleLogOrig = console.log;\n console.log = (message:string, data?:unknown) => {\n strOutLog.push(`${message}${data?`\\n${JSON.stringify(data,null,2)}`:''}`);\n }\n console.log('generateTypes', { \n typescriptDir: parsedArgs.typescriptDir\n });\n\n const argsTyped = parsedArgs as Opts & PluginOpts;\n\n const p = argsTyped.contract\n ? generateContractTypes(argsTyped) (argsTyped.contract as string)\n : generateContractTypesAll(argsTyped)\n\n return p.then(data => {\n console.log = consoleLogOrig;\n return ({\n status: 'success',\n stdout: `${strOutLog.join('\\n')}${Array.isArray(data) ? data.join(\"\\n\") : data}`,\n stderr: \"\"\n });\n })\n}\n\nexport const tasks = {\n generateTypes,\n} ","import fsRaw from 'fs';\nimport path from 'path';\nimport { promisify } from 'util';\nimport { normalizeContractName } from './generator/contract-name';\nimport { generateContractTypesFromMichelsonCode } from './generator/process';\nimport { TypeAliasData, TypeUtilsData } from './generator/typescript-output';\nimport { typeAliasesFileContent } from './type-aliases-file-content';\nimport { typeUtilsFileContent } from './type-utils-file-content';\n\nconst fs = {\n mkdir: promisify(fsRaw.mkdir),\n copyFile: promisify(fsRaw.copyFile),\n readdir: promisify(fsRaw.readdir),\n readFile: promisify(fsRaw.readFile),\n writeFile: promisify(fsRaw.writeFile),\n stat: promisify(fsRaw.stat),\n exists: fsRaw.existsSync,\n};\n\nconst getAllFiles = async (rootPath: string, filter: (fullPath: string) => boolean): Promise<string[]> => {\n const allFiles = [] as string[];\n\n const getAllFilesRecursive = async (dirPath: string) => {\n let files = await fs.readdir(dirPath, { withFileTypes: true });\n\n for (const f of files) {\n const subPath = path.resolve(dirPath, f.name);\n\n if (f.isDirectory()) {\n await getAllFilesRecursive(subPath);\n continue;\n }\n\n if (!filter(subPath)) {\n continue;\n }\n\n allFiles.push(subPath);\n }\n }\n\n await getAllFilesRecursive(rootPath);\n return allFiles;\n}\n\nexport const generateContractTypesProcessContractFiles = async ({\n inputTzContractDirectory,\n inputFiles,\n outputTypescriptDirectory,\n format,\n typeAliasMode,\n}: {\n inputTzContractDirectory: string;\n inputFiles?: string[];\n outputTypescriptDirectory: string;\n format: 'tz' | 'json',\n typeAliasMode: 'local' | 'file' | 'library' | 'simple',\n}): Promise<void> => {\n\n console.log(`Generating Types: ${path.resolve(inputTzContractDirectory)} => ${path.resolve(outputTypescriptDirectory)}`);\n\n const ext = '.' + format;\n const filesAll = await getAllFiles(inputTzContractDirectory, x => x.endsWith(ext));\n const files = inputFiles ? filesAll.filter(f => inputFiles.some(inputFile => f.endsWith(inputFile))) : filesAll;\n\n console.log(`Contracts Found: ${[``, ...files].join(`\\n\\t- `)}`);\n\n const typeAliasImportPath = `@taquito/contract-type-generator`;\n\n const typeAliasData: TypeAliasData = typeAliasMode === 'local' ? { mode: typeAliasMode, fileContent: typeAliasesFileContent }\n : typeAliasMode === 'file' ? { mode: typeAliasMode, importPath: `./type-aliases` }\n : typeAliasMode === 'library' ? { mode: typeAliasMode, importPath: typeAliasImportPath }\n : { mode: 'simple' };\n\n if (typeAliasMode === 'file') {\n // Copy the type alias file\n await fs.mkdir(outputTypescriptDirectory, { recursive: true });\n await fs.writeFile(path.join(outputTypescriptDirectory, './type-aliases.ts'), typeAliasesFileContent);\n }\n\n // Copy the type utils file\n const typeUtilsData: TypeUtilsData = { importPath: `./type-utils` };\n await fs.mkdir(outputTypescriptDirectory, { recursive: true });\n await fs.writeFile(path.join(outputTypescriptDirectory, './type-utils.ts'), typeUtilsFileContent);\n\n for (const fullPath of files) {\n const fileRelativePath = fullPath.replace(path.resolve(inputTzContractDirectory), '');\n const fileName = fileRelativePath.replace(ext, '');\n const inputFilePath = path.join(inputTzContractDirectory, fileRelativePath);\n const typesOutputFilePath = path.join(outputTypescriptDirectory, fileRelativePath.replace(ext, `.types.ts`));\n const codeContentOutputFilePath = path.join(outputTypescriptDirectory, fileRelativePath.replace(ext, `.code.ts`));\n const schemaContentOutputFilePath = path.join(outputTypescriptDirectory, fileRelativePath.replace(ext, `.schema.json`));\n console.log(`Processing ${fileRelativePath}...`);\n\n try {\n const contractTypeName = normalizeContractName(fileName);\n\n const michelsonCode = await fs.readFile(inputFilePath, { encoding: `utf8` });\n\n const {\n schemaOutput,\n typescriptCodeOutput: { typesFileContent, contractCodeFileContent }\n } = generateContractTypesFromMichelsonCode(michelsonCode, contractTypeName, format, typeAliasData, typeUtilsData);\n\n // Write output (ensure dir exists)\n await fs.mkdir(path.dirname(typesOutputFilePath), { recursive: true });\n await fs.writeFile(typesOutputFilePath, typesFileContent);\n await fs.writeFile(codeContentOutputFilePath, contractCodeFileContent);\n\n const debugSchema = false;\n if(debugSchema){\n await fs.writeFile(schemaContentOutputFilePath, JSON.stringify(schemaOutput, null, 2));\n }\n } catch (err: unknown) {\n console.error(`❌ Could not process ${fileRelativePath}`, { err });\n }\n }\n};","export const normalizeContractName = (text: string) => text\n .replace(/[^A-Za-z0-9]/g, '_')\n .split(\"_\")\n .filter(x => x)\n .map(x => x[0].toUpperCase() + x.substring(1))\n .join('');\n","import * as M from '@taquito/michel-codec';\nimport { GenerateApiError } from './common';\nimport { parseContractStorage, parseContractParameter } from './contract-parser';\nimport { SchemaOutput, toSchema } from './schema-output';\nimport { TypescriptCodeOutput, toTypescriptCode, TypeAliasData, TypeUtilsData } from './typescript-output';\n\nconst parseContractWithMinimalProtocolLevel = (contractScript: string, format: 'tz' | 'json', contractLevelIndex: number): { contract: M.MichelsonContract, protocol: { name: string, key: string } } => {\n const contractLevels = [\n { name: 'PsDELPH1', key: M.Protocol.PsDELPH1 },\n { name: 'PtEdo2Zk', key: M.Protocol.PtEdo2Zk },\n { name: 'PsFLorena', key: M.Protocol.PsFLorena },\n ];\n\n const protocol = contractLevels[contractLevelIndex];\n if (!protocol) {\n throw new GenerateApiError(`Could not parse contract script`, contractScript);\n }\n\n const p = new M.Parser({ protocol: protocol.key });\n\n try {\n const contract = (format === 'tz' ? p.parseScript(contractScript) : p.parseJSON(JSON.parse(contractScript))) as M.MichelsonContract;\n if (contract) {\n return {\n contract,\n protocol,\n };\n }\n } catch {\n // Ignore parse errors\n }\n\n // Try again with next level\n return parseContractWithMinimalProtocolLevel(contractScript, format, contractLevelIndex + 1);\n};\n\nexport const generateContractTypesFromMichelsonCode = (contractScript: string, contractName: string, format: 'tz' | 'json', typeAliasData: TypeAliasData, typeUtilsData: TypeUtilsData): {\n schemaOutput: SchemaOutput;\n typescriptCodeOutput: TypescriptCodeOutput;\n parsedContract: M.MichelsonContract;\n minimalProtocol: string;\n} => {\n\n const p = new M.Parser({ protocol: M.Protocol.PsFLorena });\n\n const { contract, protocol } = parseContractWithMinimalProtocolLevel(contractScript, format, 0);\n\n const contractStorage = contract.find(x => x.prim === `storage`) as undefined | M.MichelsonContractStorage;\n const contractParameter = contract.find(x => x.prim === `parameter`) as undefined | M.MichelsonContractParameter;\n\n const storageResult = contractStorage && parseContractStorage(contractStorage);\n const storage = storageResult ?? { storage: { kind: `object`, raw: { prim: `never` } as M.MichelsonType, fields: [] } };\n\n const parameterResult = contractParameter && parseContractParameter(contractParameter);\n const methods = parameterResult?.methods ?? [];\n const schemaOutput = toSchema(methods, storage);\n\n const typescriptCode = toTypescriptCode(storage, methods, contractName, contract, protocol, typeAliasData, typeUtilsData);\n\n return {\n schemaOutput,\n typescriptCodeOutput: typescriptCode,\n parsedContract: contract,\n minimalProtocol: protocol.key,\n };\n};\n","\nexport class GenerateApiError implements Error {\n name = `GenerateApiError`;\n constructor(public message: string, readonly data: unknown) {\n console.error(`❌ GenerateApiError: ${message}`, data);\n }\n}\n\nexport const assertExhaustive = (value: never, message: string): void => {\n console.error(message, { value });\n};\n\nexport const reduceFlatMap = <T>(out: T[], x: T[]): T[] => {\n out.push(...x);\n return out;\n}\n\n// const reduceFlatMapTest = () => {\n// const items = [['a'], ['b']];\n// const itemsFlat = items.reduce(reduceFlatMap);\n// };\n","import * as M from '@taquito/michel-codec';\nimport { assertExhaustive, GenerateApiError, reduceFlatMap } from './common';\n\nexport type TypedStorage = {\n storage: TypedType;\n};\nexport type TypedParameter = {\n methods: TypedMethod[];\n};\nexport type TypedMethod = {\n name: string;\n args: TypedVar[];\n};\nexport type TypedVar = {\n name?: string;\n type: TypedType;\n};\nexport type TypedType = {\n raw: M.MichelsonType;\n optional?: boolean;\n} & (\n {\n kind: 'unit';\n } | {\n kind: 'never';\n } | {\n kind: 'unknown';\n } | {\n kind: 'value';\n value: string;\n typescriptType: 'string' | 'boolean' | 'number' | 'Date';\n } | {\n kind: 'union';\n union: TypedVar[];\n } | {\n kind: 'object';\n fields: TypedVar[];\n } | {\n kind: 'array';\n array: { item: TypedType };\n } | {\n kind: 'map';\n map: { key: TypedType, value: TypedType, isBigMap: boolean };\n }\n );\n\nconst toDebugSource = (node: M.MichelsonType) => {\n return JSON.stringify(node);\n};\n\nexport const parseContractStorage = (storage: M.MichelsonContractStorage): TypedStorage => {\n const fields = storage.args\n .map(x => visitVar(x))\n .reduce(reduceFlatMap, []);\n\n if(fields.length === 1 && !fields[0].name){\n return {\n storage: fields[0].type\n };\n }\n\n return {\n storage: {\n kind: `object` as const,\n raw: storage as unknown as M.MichelsonType,\n fields,\n },\n };\n};\n\nexport const parseContractParameter = (parameter: M.MichelsonContractParameter): TypedParameter => {\n return {\n methods: parameter.args\n .map(x => visitContractParameterEndpoint(x as MMethod))\n .reduce(reduceFlatMap, []),\n };\n};\n\n\ntype MMethod = M.MichelsonTypeOr<[M.MichelsonType, M.MichelsonType]>;\nconst visitContractParameterEndpoint = (node: MMethod): TypedMethod[] => {\n\n // console.log('visitContractParameterEndpoint', { node });\n\n // Sub endpoints (i.e. admin endpoints that are imported)\n if (node.prim === `or`) {\n return node.args.map(x => visitContractParameterEndpoint(x as MMethod)).reduce(reduceFlatMap, []);\n }\n\n // Sub endpoints as a list with a single or (i.e. admin endpoints that are imported)\n if (node.prim === `list` && node.args.length as number === 1 && (node.args[0] as MMethod)?.prim === `or`) {\n return node.args.map(x => visitContractParameterEndpoint(x as MMethod)).reduce(reduceFlatMap, []);\n }\n\n const nameRaw = node.annots?.[0];\n const name = nameRaw?.startsWith('%') ? nameRaw.substr(1) : null;\n\n if (!name) {\n console.warn(`Unknown method: ${node.prim as string}`, { node, args: node.args });\n return [];\n }\n\n const nodeType = visitType(node, { ignorePairName: node.prim === 'pair' });\n\n // Method args are usually objects\n if (nodeType.kind === 'object') {\n return [{ name, args: nodeType.fields }];\n }\n\n // Simple methods can have a single unnamed argument\n return [{\n name,\n args: [{ type: nodeType }],\n }];\n};\n\n// type PrimOf<T extends M.MichelsonType> = T extends { prim: infer U } ? U : never;\n// type WithPrim<T extends M.MichelsonType, P extends PrimOf<T>> = T extends { prim: P } ? T : never;\n// const isPrimType = <TPrim extends PrimOf<M.MichelsonType>>(node: undefined | null | M.MichelsonType, prim: TPrim): node is WithPrim<M.MichelsonType, TPrim> => {\n// return (node && 'prim' in node && node.prim === prim) || false;\n// };\n\ntype MVarArgs = M.MichelsonType;\nconst visitVar = (node: MVarArgs): TypedVar[] => {\n const name = `annots` in node && node.annots?.length === 1 ? node.annots[0].substr(1) : undefined;\n const type = visitType(node);\n\n return [{\n name,\n type,\n }];\n};\n\ntype MType = M.MichelsonType;\nconst visitType = (node: MType, options?: { ignorePairName?: boolean }): TypedType => {\n // console.log('visitType', { node });\n // const debug_source = toDebugSource(node);\n\n // if (typeof node === `string`) {\n // return { kind: `value`, raw: node, value: node, typescriptType: `string` };\n // }\n\n if (!(`prim` in node)) {\n // Unknown\n console.error(`visitType no prim`, { node });\n return { kind: `unknown`, raw: node };\n }\n\n // Union\n if (node.prim === `or`) {\n const unionVars = node.args.map(x => visitVar(x)).reduce(reduceFlatMap, []).map(x => x);\n\n // Flatten with child unions\n const union = unionVars.map(x => !x.name && x.type.kind === 'union' ? x.type.union : [x]).reduce(reduceFlatMap, []);\n // const union = unionVars.map(x=>x.type);\n\n // const union = unionVars.map(x => x.type);\n\n // Flatten with child unions\n\n // const rightSide = union[1];\n // if (rightSide.kind === `union`) {\n // union.pop();\n // union.push(...rightSide.union);\n // }\n\n if (union.some(x => !x)) {\n throw new GenerateApiError(`or: Some fields are null`, { node });\n }\n return {\n kind: `union`,\n raw: node,\n union,\n };\n }\n\n // Intersect\n if (node.prim === `pair`) {\n const fields = node.args.map(x => visitVar(x)).reduce(reduceFlatMap, []);\n if (fields.some(x => !x)) {\n throw new GenerateApiError(`pair: Some fields are null`, { node, args: node.args, fields });\n }\n if (fields.length !== 2) {\n throw new GenerateApiError(`pair: Expected 2 items`, { node, length: fields.length, fields });\n }\n\n // Flatten with unnamed child pairs\n const fieldsFlat = fields.map(x => (!x.name || options?.ignorePairName) && x.type.kind === 'object' ? x.type.fields : [x]).reduce(reduceFlatMap, []);\n\n return {\n kind: `object`,\n raw: node,\n fields: fieldsFlat,\n };\n }\n\n // list\n if (node.prim === `list`\n || node.prim === `set`\n ) {\n if (node.args.length !== 1) {\n throw new GenerateApiError(`list does not have 1 arg`, { node, args: node.args });\n }\n\n const arrayItem = visitType(node.args[0]);\n if (!arrayItem) {\n throw new GenerateApiError(`arrayItem are null`, { node, args: node.args, arrayItem });\n }\n return {\n kind: `array`,\n raw: node,\n array: { item: arrayItem },\n };\n }\n\n // map\n if (node.prim === `map`\n || node.prim === `big_map`\n ) {\n if (node.args.length !== 2) {\n throw new GenerateApiError(`map does not have 2 args`, { node, args: node.args });\n }\n\n const mapKey = visitType(node.args[0]);\n const mapValue = visitType(node.args[1]);\n if (!mapKey || !mapValue) {\n throw new GenerateApiError(`map is missing key or value`, { node, args: node.args, mapKey, mapValue });\n }\n return {\n kind: `map`,\n raw: node,\n map: {\n key: mapKey,\n value: mapValue,\n isBigMap: node.prim === `big_map`,\n },\n };\n }\n\n // option\n if (node.prim === `option`) {\n return {\n ...visitType(node.args[0]),\n optional: true,\n };\n }\n\n // boolean\n if (node.prim === `bool`) {\n return {\n kind: `value`,\n raw: node,\n value: node.prim,\n typescriptType: `boolean`,\n };\n }\n\n // numbers\n if (node.prim === `nat`\n || node.prim === `int`\n || node.prim === `mutez`\n ) {\n return {\n kind: `value`,\n raw: node,\n value: node.prim,\n typescriptType: `number`,\n };\n }\n\n // Date\n if (node.prim === `timestamp`\n\n ) {\n return {\n kind: `value`,\n raw: node,\n value: node.prim,\n typescriptType: `Date`,\n };\n }\n\n // strings\n if (node.prim === `address`\n || node.prim === `key`\n || node.prim === `key_hash`\n || node.prim === `chain_id`\n || node.prim === `string`\n || node.prim === `signature`\n || node.prim === `ticket`\n || node.prim === `bls12_381_fr`\n || node.prim === `bls12_381_g1`\n || node.prim === `bls12_381_g2`\n || node.prim === `sapling_state`\n || node.prim === `sapling_transaction`\n || node.prim === `contract`\n ) {\n return {\n kind: `value`,\n raw: node,\n value: node.prim,\n typescriptType: `string`,\n };\n }\n\n\n // void\n if (node.prim === `unit`) {\n return {\n kind: `unit`,\n raw: node,\n };\n }\n\n // bytes?\n if (node.prim === `bytes`) {\n return {\n kind: `value`,\n raw: node,\n value: node.prim,\n typescriptType: `string`,\n };\n }\n\n // misc?\n if (node.prim === `lambda`\n || node.prim === `operation`\n ) {\n return {\n kind: `value`,\n raw: node,\n value: node.prim,\n typescriptType: `string`,\n };\n }\n\n // chest\n if(node.prim === 'chest'){\n throw new Error('Not Implemented: chest');\n }\n if(node.prim === 'chest_key'){\n throw new Error('Not Implemented: chest_key');\n }\n\n // never\n if (node.prim === `never`\n ) {\n return {\n kind: `never`,\n raw: node,\n };\n }\n\n\n // Unknown\n assertExhaustive(node, `Unknown type`);\n throw new GenerateApiError(`Unknown type`, { node });\n};\n","import { GenerateApiError } from './common';\nimport { TypedMethod, TypedVar, TypedType, TypedStorage } from './contract-parser';\n\ntype SchemaObjectType = { [name: string]: SchemaType };\ntype SchemaType = string | SchemaType[] | SchemaObjectType;\ntype SchemaMethods = {\n [name: string]: {\n params: SchemaType;\n };\n};\nexport type SchemaOutput = {\n methods: SchemaMethods;\n storage: SchemaType;\n};\n\nexport const toSchema = (methods: TypedMethod[], storage: TypedStorage): SchemaOutput => {\n\n const getSchemaObjectType = (vars: TypedVar[]) => {\n // console.log('getSchemaObjectType', { vars });\n\n if (vars.some(x => !x)) {\n throw new GenerateApiError(`getSchemaObjectType has null vars`, { vars });\n }\n\n return vars.reduce((out, x, i) => {\n out[x.name ?? i] = getSchemaType(x.type);\n return out;\n }, {} as SchemaObjectType);\n };\n\n const getSchemaType = (t: TypedType): SchemaType => {\n // console.log('getSchemaType', { t });\n\n return (t.kind === `value` && t.value ? t.value : null)\n ?? (t.kind === `array` && t.array ? [getSchemaType(t.array.item)] : null)\n ?? (t.kind === `map` && t.map ? [`map`, getSchemaType(t.map.key), getSchemaType(t.map.value)] : null)\n ?? (t.kind === `object` && t.fields ? getSchemaObjectType(t.fields) : null)\n ?? (t.kind === `unit` ? `unit` : null)\n ?? (t.kind === `never` ? `never` : null)\n ?? `${t.raw as unknown as string}`;\n };\n\n const schemaMethods = methods.reduce((out, x) => {\n // console.log('schemaMethods', { x });\n\n out[x.name] = {\n params: x.args.length === 1 && !x.args[0].name ? getSchemaType(x.args[0].type) : getSchemaObjectType(x.args ?? []),\n };\n return out;\n }, {} as SchemaMethods);\n\n const schemaStorage = getSchemaType(storage.storage);\n\n return {\n methods: schemaMethods,\n storage: schemaStorage,\n };\n};\n","import { assertExhaustive, GenerateApiError, reduceFlatMap } from './common';\nimport { TypedStorage, TypedMethod, TypedType, TypedVar } from './contract-parser';\n\nexport type TypescriptCodeOutput = {\n typesFileContent: string;\n contractCodeFileContent: string;\n storage: string;\n methods: string;\n methodsObject: string;\n};\n\nexport type TypeAliasData = {\n mode: 'local',\n fileContent?: string,\n} | {\n mode: 'file' | 'library',\n importPath?: string,\n} | {\n mode: 'simple',\n};\nexport type TypeUtilsData = {\n importPath: string,\n};\n\nexport const toTypescriptCode = (storage: TypedStorage, methods: TypedMethod[], contractName: string, parsedContract: unknown, protocol: { name: string, key: string }, typeAliasData: TypeAliasData, typeUtilsData: TypeUtilsData): TypescriptCodeOutput => {\n type TypeAlias = { aliasType: string, simpleTypeDefinition: string, simpleTypeImports?: { name: string, isDefault?: boolean, from: string }[] };\n const usedStrictTypes = [] as TypeAlias[];\n const addTypeAlias = (strictType: TypeAlias) => {\n if (!usedStrictTypes.some(x => x.aliasType === strictType.aliasType)) {\n usedStrictTypes.push(strictType);\n }\n };\n\n // Not really tabs :)\n const tabs = (indent: number) => Array(indent).fill(` `).join(``);\n const toIndentedItems = (indent: number, delimeters: { afterItem?: string, beforeItem?: string }, items: string[]) => {\n return `\n${tabs(indent + 1)}${items.join(`${delimeters.afterItem ?? ``}\n${tabs(indent + 1)}${delimeters.beforeItem ?? ``}`)}\n${tabs(indent)}`;\n };\n\n const typeToCode = (t: TypedType, indent: number): string => {\n if (t.kind === `value`) {\n // return `${t.typescriptType}`;\n\n const prim = `prim` in t.raw ? t.raw.prim : `unknown`;\n\n // Strict mode\n if (t.typescriptType === `boolean`\n || t.typescriptType === `string` && prim === `string`\n ) {\n return `${t.typescriptType}`;\n }\n\n if (t.typescriptType === 'number') {\n const simpleBaseType = `string | BigNumber | number`;\n const typeAlias: TypeAlias = { aliasType: prim, simpleTypeDefinition: `type ${prim} = ${simpleBaseType};`, simpleTypeImports: [{ name: 'BigNumber', isDefault: true, from: 'bignumber.js' }] };\n addTypeAlias(typeAlias);\n\n return typeAlias.aliasType;\n }\n\n const simpleBaseType = t.typescriptType === 'Date' ? 'Date | string' : t.typescriptType;\n const typeAlias: TypeAlias = { aliasType: prim, simpleTypeDefinition: `type ${prim} = ${simpleBaseType};` };\n addTypeAlias(typeAlias);\n\n return typeAlias.aliasType;\n }\n if (t.kind === `array`) {\n return `Array<${typeToCode(t.array.item, indent)}>`;\n }\n if (t.kind === `map`) {\n\n const typeAlias: TypeAlias = t.map.isBigMap\n ? { aliasType: `BigMap`, simpleTypeDefinition: 'type BigMap<K, T> = MichelsonMap<K, T>;', simpleTypeImports: [{ name: 'MichelsonMap', from: '@taquito/taquito' }] }\n : { aliasType: `MMap`, simpleTypeDefinition: 'type MMap<K, T> = MichelsonMap<K, T>;', simpleTypeImports: [{ name: 'MichelsonMap', from: '@taquito/taquito' }] };\n addTypeAlias(typeAlias);\n\n return `${typeAlias.aliasType}<${typeToCode(t.map.key, indent)}, ${typeToCode(t.map.value, indent)}>`;\n }\n if (t.kind === `object`) {\n return `{${toIndentedItems(indent, {},\n t.fields.map((a, i) => varToCode(a, i, indent + 1) + `;`),\n )}}`;\n }\n if (t.kind === `union`) {\n\n const getUnionItem = (a: TypedVar, i: number) => {\n const itemCode = `${varToCode(a, i, indent + 1)}`;\n\n // Keep on single line if already on single line\n if (!itemCode.includes(`\\n`)) {\n return `{ ${itemCode} }`;\n }\n\n // Indent if multi-line (and remake with extra indent)\n return `{${toIndentedItems(indent + 1, {}, [`${varToCode(a, i, indent + 2)}`])}}`;\n };\n\n return `(${toIndentedItems(indent, { beforeItem: `| ` },\n t.union.map(getUnionItem),\n )})`;\n }\n if (t.kind === `unit`) {\n const typeAlias: TypeAlias = { aliasType: `unit`, simpleTypeDefinition: `type unit = (true | undefined);`, };\n addTypeAlias(typeAlias);\n return typeAlias.aliasType;\n }\n if (t.kind === `never`) {\n return `never`;\n }\n if (t.kind === `unknown`) {\n return `unknown`;\n }\n\n assertExhaustive(t, `Unknown type`);\n throw new GenerateApiError(`Unknown type node`, { t });\n };\n\n const varToCode = (t: TypedVar, i: number, indent: number): string => {\n return `${t.name ?? i}${t.type.optional ? `?` : ``}: ${typeToCode(t.type, indent)}`;\n };\n\n const argsToCode = (args: TypedVar[], indent: number, asObject: boolean): string => {\n if (args.length === 1) {\n if (args[0].type.kind === `unit`) { return ``; }\n return `${args[0].name ?? `param`}: ${typeToCode(args[0].type, indent + 1)}`;\n }\n\n const result = `${toIndentedItems(indent, {},\n args.filter(x => x.name || x.type.kind !== `unit`).map((a, i) => varToCode(a, i, indent + 1) + `,`),\n )}`;\n\n if(asObject){\n return `params: {${result}}`;\n }\n\n return result;\n };\n\n const methodsToCode = (indent: number) => {\n const methodFields = methods.map(x => {\n const methodCode = `${x.name}: (${argsToCode(x.args, indent + 1, false)}) => Promise<void>;`;\n return methodCode;\n });\n\n const methodsTypeCode = `type Methods = {${toIndentedItems(indent, {}, methodFields)}};`;\n return methodsTypeCode;\n };\n const methodsObjectToCode = (indent: number) => {\n const methodFields = methods.map(x => {\n const methodCode = `${x.name}: (${argsToCode(x.args, indent + 1, true)}) => Promise<void>;`;\n return methodCode;\n });\n\n const methodsTypeCode = `type MethodsObject = {${toIndentedItems(indent, {}, methodFields)}};`;\n return methodsTypeCode;\n };\n\n const storageToCode = (indent: number) => {\n const storageTypeCode = `type Storage = ${typeToCode(storage.storage, indent)};`;\n return storageTypeCode;\n };\n\n const methodsCode = methodsToCode(0);\n const methodsObjectCode = methodsObjectToCode(0);\n const storageCode = storageToCode(0);\n\n // Simple type aliases\n const simpleTypeMappingImportsAll = new Map(usedStrictTypes.map(x => x.simpleTypeImports ?? []).reduce(reduceFlatMap, []).map(x => [`${x?.from}:${x?.name}:${x?.isDefault}`, x]));\n const simpleTypeMappingImportsFrom = [...simpleTypeMappingImportsAll.values()].reduce((out, x) => {\n const entry = out[x.from] ?? (out[x.from] = { names: [] });\n if (x.isDefault) {\n entry.default = x.name;\n } else {\n entry.names.push(x.name);\n }\n entry.names.sort((a, b) => a.localeCompare(b));\n return out;\n }, {} as { [from: string]: { names: string[], default?: string } });\n\n const simpleTypeMappingImportsText = Object.keys(simpleTypeMappingImportsFrom)\n .map(k => {\n const entry = simpleTypeMappingImportsFrom[k];\n const items = [entry.default, entry.names.length ? `{ ${entry.names.join(', ')} }` : ''].filter(x => x);\n return `import ${items.join(', ')} from '${k}';\\n`;\n })\n .join('');\n\n const simpleTypeMapping = usedStrictTypes\n .sort((a, b) => a.aliasType.localeCompare(b.aliasType))\n .map(x => x.simpleTypeDefinition).join(`\\n`);\n\n const typeUtilsDefinitions =\n `import { ContractAbstractionFromContractType, WalletContractAbstractionFromContractType } from '${typeUtilsData.importPath}';`;\n\n const typeAliasesDefinitions =\n typeAliasData.mode === 'simple' ? `${simpleTypeMappingImportsText}${simpleTypeMapping}`\n : typeAliasData.mode === 'local' ? typeAliasData.fileContent\n : `import { ${usedStrictTypes.map(x => x.aliasType).join(`, `)} } from '${typeAliasData.importPath}';`;\n\n const contractTypeName = `${contractName}ContractType`;\n const walletTypeName = `${contractName}WalletType`;\n const codeName = `${contractName}Code`;\n\n const typesFileContent = `\n${typeUtilsDefinitions}\n${typeAliasesDefinitions}\n\n${storageCode}\n\n${methodsCode}\n\n${methodsObjectCode}\n\ntype contractTypes = { methods: Methods, methodsObject: MethodsObject, storage: Storage, code: { __type: '${codeName}', protocol: string, code: object[] } };\nexport type ${contractTypeName} = ContractAbstractionFromContractType<contractTypes>;\nexport type ${walletTypeName} = WalletContractAbstractionFromContractType<contractTypes>;\n`;\n\n const contractCodeFileContent = `\nexport const ${codeName}: { __type: '${codeName}', protocol: string, code: object[] } = {\n __type: '${codeName}',\n protocol: '${protocol.key}',\n code: JSON.parse(\\`${JSON.stringify(parsedContract)}\\`)\n};\n`;\n return {\n typesFileContent,\n contractCodeFileContent,\n storage: storageCode,\n methods: methodsCode,\n methodsObject: methodsObjectCode,\n };\n\n};\n\n\n","// This is required for copying the type aliases to a local file\nexport const typeAliasesFileContent = `\nimport { BigNumber } from 'bignumber.js';\nimport { MichelsonMap } from '@taquito/taquito';\n\nexport type unit = (true | undefined) & { __type: 'unit' };\n\nexport type address = string & { __type: 'address' };\nexport type bytes = string & { __type: 'bytes' };\nexport type contract = string & { __type: 'contract' };\nexport type operation = string & { __type: 'operation' };\nexport type key = string & { __type: 'key' };\nexport type key_hash = string & { __type: 'key_hash' };\nexport type signature = string & { __type: 'signature' };\nexport type ticket = string & { __type: 'ticket' };\n\nexport type timestamp = string & { __type: 'timestamp' };\n\nexport type int = BigNumber & { __type: 'int' };\nexport type nat = BigNumber & { __type: 'nat' };\n\nexport type mutez = BigNumber & { __type: 'mutez' };\nexport type tez = BigNumber & { __type: 'tez' };\n\ntype MapKey = Array<any> | object | string | boolean | number;\nexport type MMap<K extends MapKey, V> = Omit<MichelsonMap<K, V>, 'get'> & { get: (key: K) => V };\nexport type BigMap<K extends MapKey, V> = Omit<MichelsonMap<K, V>, 'get'> & { get: (key: K) => Promise<V> };\n\n\nconst createStringTypeTas = <T extends string>() => {\n return (value: string): T => value as T;\n};\n\nconst createBigNumberTypeTas = <T extends BigNumber>() => {\n return (value: number | BigNumber | string): T => new BigNumber(value) as T;\n};\n\ntype asMapParamOf<K, V> = K extends string ? { [key: string]: V } | Array<{ key: K, value: V }>\n : K extends number ? { [key: number]: V } | Array<{ key: K, value: V }>\n : Array<{ key: K, value: V }>;\n\nfunction asMap<K extends MapKey, V>(value: asMapParamOf<K, V>): MMap<K, V> {\n const m = new MichelsonMap<K, V>();\n if (Array.isArray(value)) {\n const vArray = value as Array<{ key: K, value: V }>;\n vArray.forEach(x => m.set(x.key, x.value));\n } else {\n const vObject = value as { [key: string]: V };\n Object.keys(vObject).forEach(key => m.set(key as unknown as K, vObject[key]));\n }\n return m as MMap<K, V>;\n}\nconst asBigMap = <K extends MapKey, V>(value: asMapParamOf<K, V>) => asMap(value) as unknown as BigMap<K, V>;\n\nfunction add<T extends BigNumber>(a: T, b: T): T {\n return a.plus(b) as T;\n}\nfunction subtract<T extends BigNumber>(a: T, b: T): T {\n return a.minus(b) as T;\n}\n\n/** tas: Tezos 'as' casting for strict types */\nexport const tas = {\n address: createStringTypeTas<address>(),\n bytes: createStringTypeTas<bytes>(),\n contract: createStringTypeTas<contract>(),\n timestamp: (value: string | Date): timestamp => new Date(value).toISOString() as timestamp,\n\n int: createBigNumberTypeTas<int>(),\n nat: createBigNumberTypeTas<nat>(),\n mutez: createBigNumberTypeTas<mutez>(),\n tez: createBigNumberTypeTas<tez>(),\n\n map: asMap,\n bigMap: asBigMap,\n\n // Operations\n add,\n subtract,\n\n // To number\n number: (value: string | BigNumber) => Number(value + ''),\n};\n`;","// This is required for copying the type utils to a local file\nexport const typeUtilsFileContent = `\nimport { ContractAbstraction, ContractMethod, ContractMethodObject, ContractProvider, Wallet } from '@taquito/taquito';\n\ntype BaseContractType = { methods: unknown, methodsObject: unknown, storage: unknown };\n\ntype ContractMethodsOf<T extends ContractProvider | Wallet, TContract extends BaseContractType> = {\n[M in keyof TContract['methods']]:\nTContract['methods'][M] extends (...args: infer A) => unknown\n? (...args: A) => ContractMethod<T>\n: never\n};\ntype ContractMethodsObjectsOf<T extends ContractProvider | Wallet, TContract extends BaseContractType> = {\n[M in keyof TContract['methodsObject']]:\nTContract['methodsObject'][M] extends (...args: infer A) => unknown\n? (...args: A) => ContractMethodObject<T>\n: never\n};\ntype ContractStorageOf<TContract extends BaseContractType> = TContract['storage'];\n\nexport type ContractAbstractionFromContractType<TContract extends BaseContractType> = \n ContractAbstraction<ContractProvider, \n ContractMethodsOf<ContractProvider, TContract>,\n ContractMethodsObjectsOf<ContractProvider, TContract>,\n {},\n {},\n ContractStorageOf<TContract>\n >;\n\nexport type WalletContractAbstractionFromContractType<TContract extends BaseContractType> = \n ContractAbstraction<Wallet, \n ContractMethodsOf<Wallet, TContract>,\n ContractMethodsObjectsOf<Wallet, TContract>,\n {},\n {},\n ContractStorageOf<TContract>\n >;\n`;"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../"}
|
|
1
|
+
{"mappings":"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","sources":["taqueria-plugin-contract-types/index.ts","taqueria-plugin-contract-types/tasks.ts","taqueria-plugin-contract-types/src/cli-process.ts","taqueria-plugin-contract-types/src/generator/contract-name.ts","taqueria-plugin-contract-types/src/generator/process.ts","taqueria-plugin-contract-types/src/generator/common.ts","taqueria-plugin-contract-types/src/generator/contract-parser.ts","taqueria-plugin-contract-types/src/generator/schema-output.ts","taqueria-plugin-contract-types/src/generator/typescript-output.ts","taqueria-plugin-contract-types/src/type-aliases-file-content.ts","taqueria-plugin-contract-types/src/type-utils-file-content.ts"],"sourcesContent":["import {Plugin, Task, Option, PositionalArg} from '@taqueria/node-sdk'\nimport type { i18n} from '@taqueria/node-sdk/types'\nimport {tasks} from './tasks'\n\nPlugin.create((i18n: i18n) => ({\n alias: \"contract-types\",\n schema: \"1.0\",\n version: \"0.1\",\n tasks: [\n Task.create({\n task: \"generate types\",\n command: \"generate types [typescriptDir]\",\n description: \"Generate types for a contract to be used with taquito\",\n positionals: [\n PositionalArg.create({\n placeholder: \"typescriptDir\",\n description: \"The output directory for the generated type files\",\n defaultValue: \"types\",\n })\n ],\n options: [\n Option.create({\n shortFlag: \"t\",\n flag: \"typeAliasMode\",\n choices: ['file', 'simple'],\n description: \"The type aliases used in the generated types\"\n }),\n ],\n aliases: [\"gen types\", \"gentypes\"],\n handler: \"proxy\"\n }),\n ],\n proxy: tasks.generateTypes,\n}), process.argv)","import { SanitizedArgs, PluginResponse, Failure, LikeAPromise } from \"@taqueria/node-sdk/types\";\nimport glob from 'fast-glob'\nimport { join } from 'path'\nimport { generateContractTypesProcessContractFiles } from \"./src/cli-process\";\n\ntype PluginOpts = {\n // TODO: Document these\n typescriptDir: string,\n typeAliasMode?: 'local' | 'file' | 'library' | 'simple',\n};\ntype Opts = SanitizedArgs & Record<string, unknown>;\n\nconst getContractAbspath = (contractFilename: string, parsedArgs: Opts) => \n join(parsedArgs.artifactsDir, /\\.tz$/.test(contractFilename) ? contractFilename : `${contractFilename}.tz`)\n\n\nconst generateContractTypes = (parsedArgs: Opts & PluginOpts) => async (contractFilename: string) : Promise<string> => {\n const contractAbspath = getContractAbspath(contractFilename, parsedArgs);\n await generateContractTypesProcessContractFiles({\n inputTzContractDirectory: parsedArgs.artifactsDir,\n inputFiles: [contractAbspath],\n outputTypescriptDirectory: parsedArgs.typescriptDir,\n format: 'tz',\n typeAliasMode: parsedArgs.typeAliasMode ?? 'file',\n });\n\n return `${contractFilename}: Types generated`;\n}\n\nconst generateContractTypesAll = async (parsedArgs: Opts & PluginOpts) : Promise<string[]> => {\n const files = await glob(\"**/*.tz\", {cwd: parsedArgs.artifactsDir});\n return await Promise.all(files.map(generateContractTypes(parsedArgs)));\n}\n\nexport const generateTypes = <T>(parsedArgs: Opts): LikeAPromise<PluginResponse, Failure<T>> => {\n debugger\n parsedArgs.typescriptDir = parsedArgs.typescriptDir || 'types';\n\n console.log('generateTypes', { \n typescriptDir: parsedArgs.typescriptDir\n });\n\n const argsTyped = parsedArgs as Opts & PluginOpts;\n\n const p = argsTyped.contract\n ? generateContractTypes(argsTyped) (argsTyped.contract as string)\n : generateContractTypesAll(argsTyped)\n\n return p.then(data => {\n console.log(\n (Array.isArray(data))\n ? data.join(\"\\n\")\n : data\n )\n })\n}\n\nexport const tasks = {\n generateTypes,\n} ","import fsRaw from 'fs';\nimport path from 'path';\nimport { promisify } from 'util';\nimport { normalizeContractName } from './generator/contract-name';\nimport { generateContractTypesFromMichelsonCode } from './generator/process';\nimport { TypeAliasData, TypeUtilsData } from './generator/typescript-output';\nimport { typeAliasesFileContent } from './type-aliases-file-content';\nimport { typeUtilsFileContent } from './type-utils-file-content';\n\nconst fs = {\n mkdir: promisify(fsRaw.mkdir),\n copyFile: promisify(fsRaw.copyFile),\n readdir: promisify(fsRaw.readdir),\n readFile: promisify(fsRaw.readFile),\n writeFile: promisify(fsRaw.writeFile),\n stat: promisify(fsRaw.stat),\n exists: fsRaw.existsSync,\n};\n\nconst getAllFiles = async (rootPath: string, filter: (fullPath: string) => boolean): Promise<string[]> => {\n const allFiles = [] as string[];\n\n const getAllFilesRecursive = async (dirPath: string) => {\n let files = await fs.readdir(dirPath, { withFileTypes: true });\n\n for (const f of files) {\n const subPath = path.resolve(dirPath, f.name);\n\n if (f.isDirectory()) {\n await getAllFilesRecursive(subPath);\n continue;\n }\n\n if (!filter(subPath)) {\n continue;\n }\n\n allFiles.push(subPath);\n }\n }\n\n await getAllFilesRecursive(rootPath);\n return allFiles;\n}\n\nexport const generateContractTypesProcessContractFiles = async ({\n inputTzContractDirectory,\n inputFiles,\n outputTypescriptDirectory,\n format,\n typeAliasMode,\n}: {\n inputTzContractDirectory: string;\n inputFiles?: string[];\n outputTypescriptDirectory: string;\n format: 'tz' | 'json',\n typeAliasMode: 'local' | 'file' | 'library' | 'simple',\n}): Promise<void> => {\n\n console.log(`Generating Types: ${path.resolve(inputTzContractDirectory)} => ${path.resolve(outputTypescriptDirectory)}`);\n\n const ext = '.' + format;\n const filesAll = await getAllFiles(inputTzContractDirectory, x => x.endsWith(ext));\n const files = inputFiles ? filesAll.filter(f => inputFiles.some(inputFile => f.endsWith(inputFile))) : filesAll;\n\n console.log(`Contracts Found: ${[``, ...files].join(`\\n\\t- `)}`);\n\n const typeAliasImportPath = `@taquito/contract-type-generator`;\n\n const typeAliasData: TypeAliasData = typeAliasMode === 'local' ? { mode: typeAliasMode, fileContent: typeAliasesFileContent }\n : typeAliasMode === 'file' ? { mode: typeAliasMode, importPath: `./type-aliases` }\n : typeAliasMode === 'library' ? { mode: typeAliasMode, importPath: typeAliasImportPath }\n : { mode: 'simple' };\n\n if (typeAliasMode === 'file') {\n // Copy the type alias file\n await fs.mkdir(outputTypescriptDirectory, { recursive: true });\n await fs.writeFile(path.join(outputTypescriptDirectory, './type-aliases.ts'), typeAliasesFileContent);\n }\n\n // Copy the type utils file\n const typeUtilsData: TypeUtilsData = { importPath: `./type-utils` };\n await fs.mkdir(outputTypescriptDirectory, { recursive: true });\n await fs.writeFile(path.join(outputTypescriptDirectory, './type-utils.ts'), typeUtilsFileContent);\n\n for (const fullPath of files) {\n const fileRelativePath = fullPath.replace(path.resolve(inputTzContractDirectory), '');\n const fileName = fileRelativePath.replace(ext, '');\n const inputFilePath = path.join(inputTzContractDirectory, fileRelativePath);\n const typesOutputFilePath = path.join(outputTypescriptDirectory, fileRelativePath.replace(ext, `.types.ts`));\n const codeContentOutputFilePath = path.join(outputTypescriptDirectory, fileRelativePath.replace(ext, `.code.ts`));\n const schemaContentOutputFilePath = path.join(outputTypescriptDirectory, fileRelativePath.replace(ext, `.schema.json`));\n console.log(`Processing ${fileRelativePath}...`);\n\n try {\n const contractTypeName = normalizeContractName(fileName);\n\n const michelsonCode = await fs.readFile(inputFilePath, { encoding: `utf8` });\n\n const {\n schemaOutput,\n typescriptCodeOutput: { typesFileContent, contractCodeFileContent }\n } = generateContractTypesFromMichelsonCode(michelsonCode, contractTypeName, format, typeAliasData, typeUtilsData);\n\n // Write output (ensure dir exists)\n await fs.mkdir(path.dirname(typesOutputFilePath), { recursive: true });\n await fs.writeFile(typesOutputFilePath, typesFileContent);\n await fs.writeFile(codeContentOutputFilePath, contractCodeFileContent);\n\n const debugSchema = false;\n if(debugSchema){\n await fs.writeFile(schemaContentOutputFilePath, JSON.stringify(schemaOutput, null, 2));\n }\n } catch (err: unknown) {\n console.error(`❌ Could not process ${fileRelativePath}`, { err });\n }\n }\n};","export const normalizeContractName = (text: string) => text\n .replace(/[^A-Za-z0-9]/g, '_')\n .split(\"_\")\n .filter(x => x)\n .map(x => x[0].toUpperCase() + x.substring(1))\n .join('');\n","import * as M from '@taquito/michel-codec';\nimport { GenerateApiError } from './common';\nimport { parseContractStorage, parseContractParameter } from './contract-parser';\nimport { SchemaOutput, toSchema } from './schema-output';\nimport { TypescriptCodeOutput, toTypescriptCode, TypeAliasData, TypeUtilsData } from './typescript-output';\n\nconst parseContractWithMinimalProtocolLevel = (contractScript: string, format: 'tz' | 'json', contractLevelIndex: number): { contract: M.MichelsonContract, protocol: { name: string, key: string } } => {\n const contractLevels = [\n { name: 'PsDELPH1', key: M.Protocol.PsDELPH1 },\n { name: 'PtEdo2Zk', key: M.Protocol.PtEdo2Zk },\n { name: 'PsFLorena', key: M.Protocol.PsFLorena },\n ];\n\n const protocol = contractLevels[contractLevelIndex];\n if (!protocol) {\n throw new GenerateApiError(`Could not parse contract script`, contractScript);\n }\n\n const p = new M.Parser({ protocol: protocol.key });\n\n try {\n const contract = (format === 'tz' ? p.parseScript(contractScript) : p.parseJSON(JSON.parse(contractScript))) as M.MichelsonContract;\n if (contract) {\n return {\n contract,\n protocol,\n };\n }\n } catch {\n // Ignore parse errors\n }\n\n // Try again with next level\n return parseContractWithMinimalProtocolLevel(contractScript, format, contractLevelIndex + 1);\n};\n\nexport const generateContractTypesFromMichelsonCode = (contractScript: string, contractName: string, format: 'tz' | 'json', typeAliasData: TypeAliasData, typeUtilsData: TypeUtilsData): {\n schemaOutput: SchemaOutput;\n typescriptCodeOutput: TypescriptCodeOutput;\n parsedContract: M.MichelsonContract;\n minimalProtocol: string;\n} => {\n\n const p = new M.Parser({ protocol: M.Protocol.PsFLorena });\n\n const { contract, protocol } = parseContractWithMinimalProtocolLevel(contractScript, format, 0);\n\n const contractStorage = contract.find(x => x.prim === `storage`) as undefined | M.MichelsonContractStorage;\n const contractParameter = contract.find(x => x.prim === `parameter`) as undefined | M.MichelsonContractParameter;\n\n const storageResult = contractStorage && parseContractStorage(contractStorage);\n const storage = storageResult ?? { storage: { kind: `object`, raw: { prim: `never` } as M.MichelsonType, fields: [] } };\n\n const parameterResult = contractParameter && parseContractParameter(contractParameter);\n const methods = parameterResult?.methods ?? [];\n const schemaOutput = toSchema(methods, storage);\n\n const typescriptCode = toTypescriptCode(storage, methods, contractName, contract, protocol, typeAliasData, typeUtilsData);\n\n return {\n schemaOutput,\n typescriptCodeOutput: typescriptCode,\n parsedContract: contract,\n minimalProtocol: protocol.key,\n };\n};\n","\nexport class GenerateApiError implements Error {\n name = `GenerateApiError`;\n constructor(public message: string, readonly data: unknown) {\n console.error(`❌ GenerateApiError: ${message}`, data);\n }\n}\n\nexport const assertExhaustive = (value: never, message: string): void => {\n console.error(message, { value });\n};\n\nexport const reduceFlatMap = <T>(out: T[], x: T[]): T[] => {\n out.push(...x);\n return out;\n}\n\n// const reduceFlatMapTest = () => {\n// const items = [['a'], ['b']];\n// const itemsFlat = items.reduce(reduceFlatMap);\n// };\n","import * as M from '@taquito/michel-codec';\nimport { assertExhaustive, GenerateApiError, reduceFlatMap } from './common';\n\nexport type TypedStorage = {\n storage: TypedType;\n};\nexport type TypedParameter = {\n methods: TypedMethod[];\n};\nexport type TypedMethod = {\n name: string;\n args: TypedVar[];\n};\nexport type TypedVar = {\n name?: string;\n type: TypedType;\n};\nexport type TypedType = {\n raw: M.MichelsonType;\n optional?: boolean;\n} & (\n {\n kind: 'unit';\n } | {\n kind: 'never';\n } | {\n kind: 'unknown';\n } | {\n kind: 'value';\n value: string;\n typescriptType: 'string' | 'boolean' | 'number' | 'Date';\n } | {\n kind: 'union';\n union: TypedVar[];\n } | {\n kind: 'object';\n fields: TypedVar[];\n } | {\n kind: 'array';\n array: { item: TypedType };\n } | {\n kind: 'map';\n map: { key: TypedType, value: TypedType, isBigMap: boolean };\n }\n );\n\nconst toDebugSource = (node: M.MichelsonType) => {\n return JSON.stringify(node);\n};\n\nexport const parseContractStorage = (storage: M.MichelsonContractStorage): TypedStorage => {\n const fields = storage.args\n .map(x => visitVar(x))\n .reduce(reduceFlatMap, []);\n\n if(fields.length === 1 && !fields[0].name){\n return {\n storage: fields[0].type\n };\n }\n\n return {\n storage: {\n kind: `object` as const,\n raw: storage as unknown as M.MichelsonType,\n fields,\n },\n };\n};\n\nexport const parseContractParameter = (parameter: M.MichelsonContractParameter): TypedParameter => {\n return {\n methods: parameter.args\n .map(x => visitContractParameterEndpoint(x as MMethod))\n .reduce(reduceFlatMap, []),\n };\n};\n\n\ntype MMethod = M.MichelsonTypeOr<[M.MichelsonType, M.MichelsonType]>;\nconst visitContractParameterEndpoint = (node: MMethod): TypedMethod[] => {\n\n // console.log('visitContractParameterEndpoint', { node });\n\n // Sub endpoints (i.e. admin endpoints that are imported)\n if (node.prim === `or`) {\n return node.args.map(x => visitContractParameterEndpoint(x as MMethod)).reduce(reduceFlatMap, []);\n }\n\n // Sub endpoints as a list with a single or (i.e. admin endpoints that are imported)\n if (node.prim === `list` && node.args.length as number === 1 && (node.args[0] as MMethod)?.prim === `or`) {\n return node.args.map(x => visitContractParameterEndpoint(x as MMethod)).reduce(reduceFlatMap, []);\n }\n\n const nameRaw = node.annots?.[0];\n const name = nameRaw?.startsWith('%') ? nameRaw.substr(1) : null;\n\n if (!name) {\n console.warn(`Unknown method: ${node.prim as string}`, { node, args: node.args });\n return [];\n }\n\n const nodeType = visitType(node, { ignorePairName: node.prim === 'pair' });\n\n // Method args are usually objects\n if (nodeType.kind === 'object') {\n return [{ name, args: nodeType.fields }];\n }\n\n // Simple methods can have a single unnamed argument\n return [{\n name,\n args: [{ type: nodeType }],\n }];\n};\n\n// type PrimOf<T extends M.MichelsonType> = T extends { prim: infer U } ? U : never;\n// type WithPrim<T extends M.MichelsonType, P extends PrimOf<T>> = T extends { prim: P } ? T : never;\n// const isPrimType = <TPrim extends PrimOf<M.MichelsonType>>(node: undefined | null | M.MichelsonType, prim: TPrim): node is WithPrim<M.MichelsonType, TPrim> => {\n// return (node && 'prim' in node && node.prim === prim) || false;\n// };\n\ntype MVarArgs = M.MichelsonType;\nconst visitVar = (node: MVarArgs): TypedVar[] => {\n const name = `annots` in node && node.annots?.length === 1 ? node.annots[0].substr(1) : undefined;\n const type = visitType(node);\n\n return [{\n name,\n type,\n }];\n};\n\ntype MType = M.MichelsonType;\nconst visitType = (node: MType, options?: { ignorePairName?: boolean }): TypedType => {\n // console.log('visitType', { node });\n // const debug_source = toDebugSource(node);\n\n // if (typeof node === `string`) {\n // return { kind: `value`, raw: node, value: node, typescriptType: `string` };\n // }\n\n if (!(`prim` in node)) {\n // Unknown\n console.error(`visitType no prim`, { node });\n return { kind: `unknown`, raw: node };\n }\n\n // Union\n if (node.prim === `or`) {\n const unionVars = node.args.map(x => visitVar(x)).reduce(reduceFlatMap, []).map(x => x);\n\n // Flatten with child unions\n const union = unionVars.map(x => !x.name && x.type.kind === 'union' ? x.type.union : [x]).reduce(reduceFlatMap, []);\n // const union = unionVars.map(x=>x.type);\n\n // const union = unionVars.map(x => x.type);\n\n // Flatten with child unions\n\n // const rightSide = union[1];\n // if (rightSide.kind === `union`) {\n // union.pop();\n // union.push(...rightSide.union);\n // }\n\n if (union.some(x => !x)) {\n throw new GenerateApiError(`or: Some fields are null`, { node });\n }\n return {\n kind: `union`,\n raw: node,\n union,\n };\n }\n\n // Intersect\n if (node.prim === `pair`) {\n const fields = node.args.map(x => visitVar(x)).reduce(reduceFlatMap, []);\n if (fields.some(x => !x)) {\n throw new GenerateApiError(`pair: Some fields are null`, { node, args: node.args, fields });\n }\n // Disabled Check: Apparently pairs can have more than 2 items\n // if (fields.length !== 2) {\n // throw new GenerateApiError(`pair: Expected 2 items`, { node, length: fields.length, fields });\n // }\n\n // Flatten with unnamed child pairs\n const fieldsFlat = fields.map(x => (!x.name || options?.ignorePairName) && x.type.kind === 'object' ? x.type.fields : [x]).reduce(reduceFlatMap, []);\n\n return {\n kind: `object`,\n raw: node,\n fields: fieldsFlat,\n };\n }\n\n // list\n if (node.prim === `list`\n || node.prim === `set`\n ) {\n if (node.args.length !== 1) {\n throw new GenerateApiError(`list does not have 1 arg`, { node, args: node.args });\n }\n\n const arrayItem = visitType(node.args[0]);\n if (!arrayItem) {\n throw new GenerateApiError(`arrayItem are null`, { node, args: node.args, arrayItem });\n }\n return {\n kind: `array`,\n raw: node,\n array: { item: arrayItem },\n };\n }\n\n // map\n if (node.prim === `map`\n || node.prim === `big_map`\n ) {\n if (node.args.length !== 2) {\n throw new GenerateApiError(`map does not have 2 args`, { node, args: node.args });\n }\n\n const mapKey = visitType(node.args[0]);\n const mapValue = visitType(node.args[1]);\n if (!mapKey || !mapValue) {\n throw new GenerateApiError(`map is missing key or value`, { node, args: node.args, mapKey, mapValue });\n }\n return {\n kind: `map`,\n raw: node,\n map: {\n key: mapKey,\n value: mapValue,\n isBigMap: node.prim === `big_map`,\n },\n };\n }\n\n // option\n if (node.prim === `option`) {\n return {\n ...visitType(node.args[0]),\n optional: true,\n };\n }\n\n // boolean\n if (node.prim === `bool`) {\n return {\n kind: `value`,\n raw: node,\n value: node.prim,\n typescriptType: `boolean`,\n };\n }\n\n // numbers\n if (node.prim === `nat`\n || node.prim === `int`\n || node.prim === `mutez`\n ) {\n return {\n kind: `value`,\n raw: node,\n value: node.prim,\n typescriptType: `number`,\n };\n }\n\n // Date\n if (node.prim === `timestamp`\n\n ) {\n return {\n kind: `value`,\n raw: node,\n value: node.prim,\n typescriptType: `Date`,\n };\n }\n\n // strings\n if (node.prim === `address`\n || node.prim === `key`\n || node.prim === `key_hash`\n || node.prim === `chain_id`\n || node.prim === `string`\n || node.prim === `signature`\n || node.prim === `ticket`\n || node.prim === `bls12_381_fr`\n || node.prim === `bls12_381_g1`\n || node.prim === `bls12_381_g2`\n || node.prim === `sapling_state`\n || node.prim === `sapling_transaction`\n || node.prim === `contract`\n ) {\n return {\n kind: `value`,\n raw: node,\n value: node.prim,\n typescriptType: `string`,\n };\n }\n\n\n // void\n if (node.prim === `unit`) {\n return {\n kind: `unit`,\n raw: node,\n };\n }\n\n // bytes?\n if (node.prim === `bytes`) {\n return {\n kind: `value`,\n raw: node,\n value: node.prim,\n typescriptType: `string`,\n };\n }\n\n // misc?\n if (node.prim === `lambda`\n || node.prim === `operation`\n ) {\n return {\n kind: `value`,\n raw: node,\n value: node.prim,\n typescriptType: `string`,\n };\n }\n\n // chest\n if(node.prim === 'chest'){\n throw new Error('Not Implemented: chest');\n }\n if(node.prim === 'chest_key'){\n throw new Error('Not Implemented: chest_key');\n }\n\n // never\n if (node.prim === `never`\n ) {\n return {\n kind: `never`,\n raw: node,\n };\n }\n\n\n // Unknown\n assertExhaustive(node, `Unknown type`);\n throw new GenerateApiError(`Unknown type`, { node });\n};\n","import { GenerateApiError } from './common';\nimport { TypedMethod, TypedVar, TypedType, TypedStorage } from './contract-parser';\n\ntype SchemaObjectType = { [name: string]: SchemaType };\ntype SchemaType = string | SchemaType[] | SchemaObjectType;\ntype SchemaMethods = {\n [name: string]: {\n params: SchemaType;\n };\n};\nexport type SchemaOutput = {\n methods: SchemaMethods;\n storage: SchemaType;\n};\n\nexport const toSchema = (methods: TypedMethod[], storage: TypedStorage): SchemaOutput => {\n\n const getSchemaObjectType = (vars: TypedVar[]) => {\n // console.log('getSchemaObjectType', { vars });\n\n if (vars.some(x => !x)) {\n throw new GenerateApiError(`getSchemaObjectType has null vars`, { vars });\n }\n\n return vars.reduce((out, x, i) => {\n out[x.name ?? i] = getSchemaType(x.type);\n return out;\n }, {} as SchemaObjectType);\n };\n\n const getSchemaType = (t: TypedType): SchemaType => {\n // console.log('getSchemaType', { t });\n\n return (t.kind === `value` && t.value ? t.value : null)\n ?? (t.kind === `array` && t.array ? [getSchemaType(t.array.item)] : null)\n ?? (t.kind === `map` && t.map ? [`map`, getSchemaType(t.map.key), getSchemaType(t.map.value)] : null)\n ?? (t.kind === `object` && t.fields ? getSchemaObjectType(t.fields) : null)\n ?? (t.kind === `unit` ? `unit` : null)\n ?? (t.kind === `never` ? `never` : null)\n ?? `${t.raw as unknown as string}`;\n };\n\n const schemaMethods = methods.reduce((out, x) => {\n // console.log('schemaMethods', { x });\n\n out[x.name] = {\n params: x.args.length === 1 && !x.args[0].name ? getSchemaType(x.args[0].type) : getSchemaObjectType(x.args ?? []),\n };\n return out;\n }, {} as SchemaMethods);\n\n const schemaStorage = getSchemaType(storage.storage);\n\n return {\n methods: schemaMethods,\n storage: schemaStorage,\n };\n};\n","import { assertExhaustive, GenerateApiError, reduceFlatMap } from './common';\nimport { TypedStorage, TypedMethod, TypedType, TypedVar } from './contract-parser';\n\nexport type TypescriptCodeOutput = {\n typesFileContent: string;\n contractCodeFileContent: string;\n storage: string;\n methods: string;\n methodsObject: string;\n};\n\nexport type TypeAliasData = {\n mode: 'local',\n fileContent?: string,\n} | {\n mode: 'file' | 'library',\n importPath?: string,\n} | {\n mode: 'simple',\n};\nexport type TypeUtilsData = {\n importPath: string,\n};\n\nexport const toTypescriptCode = (storage: TypedStorage, methods: TypedMethod[], contractName: string, parsedContract: unknown, protocol: { name: string, key: string }, typeAliasData: TypeAliasData, typeUtilsData: TypeUtilsData): TypescriptCodeOutput => {\n type TypeAlias = { aliasType: string, simpleTypeDefinition: string, simpleTypeImports?: { name: string, isDefault?: boolean, from: string }[] };\n const usedStrictTypes = [] as TypeAlias[];\n const addTypeAlias = (strictType: TypeAlias) => {\n if (!usedStrictTypes.some(x => x.aliasType === strictType.aliasType)) {\n usedStrictTypes.push(strictType);\n }\n };\n\n // Not really tabs :)\n const tabs = (indent: number) => Array(indent).fill(` `).join(``);\n const toIndentedItems = (indent: number, delimeters: { afterItem?: string, beforeItem?: string }, items: string[]) => {\n return `\n${tabs(indent + 1)}${items.join(`${delimeters.afterItem ?? ``}\n${tabs(indent + 1)}${delimeters.beforeItem ?? ``}`)}\n${tabs(indent)}`;\n };\n\n const typeToCode = (t: TypedType, indent: number): string => {\n if (t.kind === `value`) {\n // return `${t.typescriptType}`;\n\n const prim = `prim` in t.raw ? t.raw.prim : `unknown`;\n\n // Strict mode\n if (t.typescriptType === `boolean`\n || t.typescriptType === `string` && prim === `string`\n ) {\n return `${t.typescriptType}`;\n }\n\n if (t.typescriptType === 'number') {\n const simpleBaseType = `string | BigNumber | number`;\n const typeAlias: TypeAlias = { aliasType: prim, simpleTypeDefinition: `type ${prim} = ${simpleBaseType};`, simpleTypeImports: [{ name: 'BigNumber', isDefault: true, from: 'bignumber.js' }] };\n addTypeAlias(typeAlias);\n\n return typeAlias.aliasType;\n }\n\n const simpleBaseType = t.typescriptType === 'Date' ? 'Date | string' : t.typescriptType;\n const typeAlias: TypeAlias = { aliasType: prim, simpleTypeDefinition: `type ${prim} = ${simpleBaseType};` };\n addTypeAlias(typeAlias);\n\n return typeAlias.aliasType;\n }\n if (t.kind === `array`) {\n return `Array<${typeToCode(t.array.item, indent)}>`;\n }\n if (t.kind === `map`) {\n\n const typeAlias: TypeAlias = t.map.isBigMap\n ? { aliasType: `BigMap`, simpleTypeDefinition: 'type BigMap<K, T> = MichelsonMap<K, T>;', simpleTypeImports: [{ name: 'MichelsonMap', from: '@taquito/taquito' }] }\n : { aliasType: `MMap`, simpleTypeDefinition: 'type MMap<K, T> = MichelsonMap<K, T>;', simpleTypeImports: [{ name: 'MichelsonMap', from: '@taquito/taquito' }] };\n addTypeAlias(typeAlias);\n\n return `${typeAlias.aliasType}<${typeToCode(t.map.key, indent)}, ${typeToCode(t.map.value, indent)}>`;\n }\n if (t.kind === `object`) {\n return `{${toIndentedItems(indent, {},\n t.fields.map((a, i) => varToCode(a, i, indent + 1) + `;`),\n )}}`;\n }\n if (t.kind === `union`) {\n\n const getUnionItem = (a: TypedVar, i: number) => {\n const itemCode = `${varToCode(a, i, indent + 1)}`;\n\n // Keep on single line if already on single line\n if (!itemCode.includes(`\\n`)) {\n return `{ ${itemCode} }`;\n }\n\n // Indent if multi-line (and remake with extra indent)\n return `{${toIndentedItems(indent + 1, {}, [`${varToCode(a, i, indent + 2)}`])}}`;\n };\n\n return `(${toIndentedItems(indent, { beforeItem: `| ` },\n t.union.map(getUnionItem),\n )})`;\n }\n if (t.kind === `unit`) {\n const typeAlias: TypeAlias = { aliasType: `unit`, simpleTypeDefinition: `type unit = (true | undefined);`, };\n addTypeAlias(typeAlias);\n return typeAlias.aliasType;\n }\n if (t.kind === `never`) {\n return `never`;\n }\n if (t.kind === `unknown`) {\n return `unknown`;\n }\n\n assertExhaustive(t, `Unknown type`);\n throw new GenerateApiError(`Unknown type node`, { t });\n };\n\n const varToCode = (t: TypedVar, i: number, indent: number, numberVarNamePrefix = ''): string => {\n return `${t.name ?? `${numberVarNamePrefix}${i}`}${t.type.optional ? `?` : ``}: ${typeToCode(t.type, indent)}`;\n };\n\n const argsToCode = (args: TypedVar[], indent: number, asObject: boolean): string => {\n if (args.length === 1) {\n if (args[0].type.kind === `unit`) { return ``; }\n return `${args[0].name ?? `param`}: ${typeToCode(args[0].type, indent + 1)}`;\n }\n\n const result = `${toIndentedItems(indent, {},\n args.filter(x => x.name || x.type.kind !== `unit`).map((a, i) => varToCode(a, i, indent + 1, asObject ? '' : '_') + `,`),\n )}`;\n\n if(asObject){\n return `params: {${result}}`;\n }\n\n return result;\n };\n\n const methodsToCode = (indent: number) => {\n const methodFields = methods.map(x => {\n const methodCode = `${x.name}: (${argsToCode(x.args, indent + 1, false)}) => Promise<void>;`;\n return methodCode;\n });\n\n const methodsTypeCode = `type Methods = {${toIndentedItems(indent, {}, methodFields)}};`;\n return methodsTypeCode;\n };\n const methodsObjectToCode = (indent: number) => {\n const methodFields = methods.map(x => {\n const methodCode = `${x.name}: (${argsToCode(x.args, indent + 1, true)}) => Promise<void>;`;\n return methodCode;\n });\n\n const methodsTypeCode = `type MethodsObject = {${toIndentedItems(indent, {}, methodFields)}};`;\n return methodsTypeCode;\n };\n\n const storageToCode = (indent: number) => {\n const storageTypeCode = `type Storage = ${typeToCode(storage.storage, indent)};`;\n return storageTypeCode;\n };\n\n const methodsCode = methodsToCode(0);\n const methodsObjectCode = methodsObjectToCode(0);\n const storageCode = storageToCode(0);\n\n // Simple type aliases\n const simpleTypeMappingImportsAll = new Map(usedStrictTypes.map(x => x.simpleTypeImports ?? []).reduce(reduceFlatMap, []).map(x => [`${x?.from}:${x?.name}:${x?.isDefault}`, x]));\n const simpleTypeMappingImportsFrom = [...simpleTypeMappingImportsAll.values()].reduce((out, x) => {\n const entry = out[x.from] ?? (out[x.from] = { names: [] });\n if (x.isDefault) {\n entry.default = x.name;\n } else {\n entry.names.push(x.name);\n }\n entry.names.sort((a, b) => a.localeCompare(b));\n return out;\n }, {} as { [from: string]: { names: string[], default?: string } });\n\n const simpleTypeMappingImportsText = Object.keys(simpleTypeMappingImportsFrom)\n .map(k => {\n const entry = simpleTypeMappingImportsFrom[k];\n const items = [entry.default, entry.names.length ? `{ ${entry.names.join(', ')} }` : ''].filter(x => x);\n return `import ${items.join(', ')} from '${k}';\\n`;\n })\n .join('');\n\n const simpleTypeMapping = usedStrictTypes\n .sort((a, b) => a.aliasType.localeCompare(b.aliasType))\n .map(x => x.simpleTypeDefinition).join(`\\n`);\n\n const typeUtilsDefinitions =\n `import { ContractAbstractionFromContractType, WalletContractAbstractionFromContractType } from '${typeUtilsData.importPath}';`;\n\n const typeAliasesDefinitions =\n typeAliasData.mode === 'simple' ? `${simpleTypeMappingImportsText}${simpleTypeMapping}`\n : typeAliasData.mode === 'local' ? typeAliasData.fileContent\n : `import { ${usedStrictTypes.map(x => x.aliasType).join(`, `)} } from '${typeAliasData.importPath}';`;\n\n const contractTypeName = `${contractName}ContractType`;\n const walletTypeName = `${contractName}WalletType`;\n const codeName = `${contractName}Code`;\n\n const typesFileContent = `\n${typeUtilsDefinitions}\n${typeAliasesDefinitions}\n\n${storageCode}\n\n${methodsCode}\n\n${methodsObjectCode}\n\ntype contractTypes = { methods: Methods, methodsObject: MethodsObject, storage: Storage, code: { __type: '${codeName}', protocol: string, code: object[] } };\nexport type ${contractTypeName} = ContractAbstractionFromContractType<contractTypes>;\nexport type ${walletTypeName} = WalletContractAbstractionFromContractType<contractTypes>;\n`;\n\n const contractCodeFileContent = `\nexport const ${codeName}: { __type: '${codeName}', protocol: string, code: object[] } = {\n __type: '${codeName}',\n protocol: '${protocol.key}',\n code: JSON.parse(\\`${JSON.stringify(parsedContract)}\\`)\n};\n`;\n return {\n typesFileContent,\n contractCodeFileContent,\n storage: storageCode,\n methods: methodsCode,\n methodsObject: methodsObjectCode,\n };\n\n};\n\n\n","// This is required for copying the type aliases to a local file\nexport const typeAliasesFileContent = `\nimport { BigNumber } from 'bignumber.js';\nimport { MichelsonMap } from '@taquito/taquito';\n\nexport type unit = (true | undefined) & { __type: 'unit' };\n\nexport type address = string & { __type: 'address' };\nexport type bytes = string & { __type: 'bytes' };\nexport type contract = string & { __type: 'contract' };\nexport type operation = string & { __type: 'operation' };\nexport type key = string & { __type: 'key' };\nexport type key_hash = string & { __type: 'key_hash' };\nexport type signature = string & { __type: 'signature' };\nexport type ticket = string & { __type: 'ticket' };\n\nexport type timestamp = string & { __type: 'timestamp' };\n\nexport type int = BigNumber & { __type: 'int' };\nexport type nat = BigNumber & { __type: 'nat' };\n\nexport type mutez = BigNumber & { __type: 'mutez' };\nexport type tez = BigNumber & { __type: 'tez' };\n\ntype MapKey = Array<any> | object | string | boolean | number;\nexport type MMap<K extends MapKey, V> = Omit<MichelsonMap<K, V>, 'get'> & { get: (key: K) => V };\nexport type BigMap<K extends MapKey, V> = Omit<MichelsonMap<K, V>, 'get'> & { get: (key: K) => Promise<V> };\n\n\nconst createStringTypeTas = <T extends string>() => {\n return (value: string): T => value as T;\n};\n\nconst createBigNumberTypeTas = <T extends BigNumber>() => {\n return (value: number | BigNumber | string): T => new BigNumber(value) as T;\n};\n\ntype asMapParamOf<K, V> = K extends string ? { [key: string]: V } | Array<{ key: K, value: V }>\n : K extends number ? { [key: number]: V } | Array<{ key: K, value: V }>\n : Array<{ key: K, value: V }>;\n\nfunction asMap<K extends MapKey, V>(value: asMapParamOf<K, V>): MMap<K, V> {\n const m = new MichelsonMap<K, V>();\n if (Array.isArray(value)) {\n const vArray = value as Array<{ key: K, value: V }>;\n vArray.forEach(x => m.set(x.key, x.value));\n } else {\n const vObject = value as { [key: string]: V };\n Object.keys(vObject).forEach(key => m.set(key as unknown as K, vObject[key]));\n }\n return m as MMap<K, V>;\n}\nconst asBigMap = <K extends MapKey, V>(value: asMapParamOf<K, V>) => asMap(value) as unknown as BigMap<K, V>;\n\nfunction add<T extends BigNumber>(a: T, b: T): T {\n return a.plus(b) as T;\n}\nfunction subtract<T extends BigNumber>(a: T, b: T): T {\n return a.minus(b) as T;\n}\n\n/** tas: Tezos 'as' casting for strict types */\nexport const tas = {\n address: createStringTypeTas<address>(),\n bytes: createStringTypeTas<bytes>(),\n contract: createStringTypeTas<contract>(),\n timestamp: (value: string | Date): timestamp => new Date(value).toISOString() as timestamp,\n\n int: createBigNumberTypeTas<int>(),\n nat: createBigNumberTypeTas<nat>(),\n mutez: createBigNumberTypeTas<mutez>(),\n tez: createBigNumberTypeTas<tez>(),\n\n map: asMap,\n bigMap: asBigMap,\n\n // Operations\n add,\n subtract,\n\n // To number\n number: (value: string | BigNumber) => Number(value + ''),\n};\n`;","// This is required for copying the type utils to a local file\nexport const typeUtilsFileContent = `\nimport { ContractAbstraction, ContractMethod, ContractMethodObject, ContractProvider, Wallet } from '@taquito/taquito';\n\ntype BaseContractType = { methods: unknown, methodsObject: unknown, storage: unknown };\n\ntype ContractMethodsOf<T extends ContractProvider | Wallet, TContract extends BaseContractType> = {\n[M in keyof TContract['methods']]:\nTContract['methods'][M] extends (...args: infer A) => unknown\n? (...args: A) => ContractMethod<T>\n: never\n};\ntype ContractMethodsObjectsOf<T extends ContractProvider | Wallet, TContract extends BaseContractType> = {\n[M in keyof TContract['methodsObject']]:\nTContract['methodsObject'][M] extends (...args: infer A) => unknown\n? (...args: A) => ContractMethodObject<T>\n: never\n};\ntype ContractStorageOf<TContract extends BaseContractType> = TContract['storage'];\n\nexport type ContractAbstractionFromContractType<TContract extends BaseContractType> = \n ContractAbstraction<ContractProvider, \n ContractMethodsOf<ContractProvider, TContract>,\n ContractMethodsObjectsOf<ContractProvider, TContract>,\n {},\n {},\n ContractStorageOf<TContract>\n >;\n\nexport type WalletContractAbstractionFromContractType<TContract extends BaseContractType> = \n ContractAbstraction<Wallet, \n ContractMethodsOf<Wallet, TContract>,\n ContractMethodsObjectsOf<Wallet, TContract>,\n {},\n {},\n ContractStorageOf<TContract>\n >;\n`;"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taqueria/plugin-contract-types",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"targets": {
|
|
6
6
|
"default": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@taquito/taquito": "^11.2.0",
|
|
45
45
|
"bignumber.js": "^9.0.2",
|
|
46
46
|
"fast-glob": "^3.2.10",
|
|
47
|
-
"@taqueria/node-sdk": "^0.
|
|
47
|
+
"@taqueria/node-sdk": "^0.2.0"
|
|
48
48
|
},
|
|
49
49
|
"jest": {
|
|
50
50
|
"transform": {
|
|
@@ -180,9 +180,10 @@ const visitType = (node: MType, options?: { ignorePairName?: boolean }): TypedTy
|
|
|
180
180
|
if (fields.some(x => !x)) {
|
|
181
181
|
throw new GenerateApiError(`pair: Some fields are null`, { node, args: node.args, fields });
|
|
182
182
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
}
|
|
183
|
+
// Disabled Check: Apparently pairs can have more than 2 items
|
|
184
|
+
// if (fields.length !== 2) {
|
|
185
|
+
// throw new GenerateApiError(`pair: Expected 2 items`, { node, length: fields.length, fields });
|
|
186
|
+
// }
|
|
186
187
|
|
|
187
188
|
// Flatten with unnamed child pairs
|
|
188
189
|
const fieldsFlat = fields.map(x => (!x.name || options?.ignorePairName) && x.type.kind === 'object' ? x.type.fields : [x]).reduce(reduceFlatMap, []);
|
|
@@ -118,8 +118,8 @@ ${tabs(indent)}`;
|
|
|
118
118
|
throw new GenerateApiError(`Unknown type node`, { t });
|
|
119
119
|
};
|
|
120
120
|
|
|
121
|
-
const varToCode = (t: TypedVar, i: number, indent: number): string => {
|
|
122
|
-
return `${t.name ?? i}${t.type.optional ? `?` : ``}: ${typeToCode(t.type, indent)}`;
|
|
121
|
+
const varToCode = (t: TypedVar, i: number, indent: number, numberVarNamePrefix = ''): string => {
|
|
122
|
+
return `${t.name ?? `${numberVarNamePrefix}${i}`}${t.type.optional ? `?` : ``}: ${typeToCode(t.type, indent)}`;
|
|
123
123
|
};
|
|
124
124
|
|
|
125
125
|
const argsToCode = (args: TypedVar[], indent: number, asObject: boolean): string => {
|
|
@@ -129,7 +129,7 @@ ${tabs(indent)}`;
|
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
const result = `${toIndentedItems(indent, {},
|
|
132
|
-
args.filter(x => x.name || x.type.kind !== `unit`).map((a, i) => varToCode(a, i, indent + 1) + `,`),
|
|
132
|
+
args.filter(x => x.name || x.type.kind !== `unit`).map((a, i) => varToCode(a, i, indent + 1, asObject ? '' : '_') + `,`),
|
|
133
133
|
)}`;
|
|
134
134
|
|
|
135
135
|
if(asObject){
|
package/tasks.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SanitizedArgs,
|
|
1
|
+
import { SanitizedArgs, PluginResponse, Failure, LikeAPromise } from "@taqueria/node-sdk/types";
|
|
2
2
|
import glob from 'fast-glob'
|
|
3
3
|
import { join } from 'path'
|
|
4
4
|
import { generateContractTypesProcessContractFiles } from "./src/cli-process";
|
|
@@ -32,15 +32,10 @@ const generateContractTypesAll = async (parsedArgs: Opts & PluginOpts) : Promise
|
|
|
32
32
|
return await Promise.all(files.map(generateContractTypes(parsedArgs)));
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
export const generateTypes = <T>(parsedArgs: Opts): LikeAPromise<
|
|
35
|
+
export const generateTypes = <T>(parsedArgs: Opts): LikeAPromise<PluginResponse, Failure<T>> => {
|
|
36
|
+
debugger
|
|
36
37
|
parsedArgs.typescriptDir = parsedArgs.typescriptDir || 'types';
|
|
37
38
|
|
|
38
|
-
// WORKAROUND: Redirect console.log
|
|
39
|
-
const strOutLog = [] as string[];
|
|
40
|
-
const consoleLogOrig = console.log;
|
|
41
|
-
console.log = (message:string, data?:unknown) => {
|
|
42
|
-
strOutLog.push(`${message}${data?`\n${JSON.stringify(data,null,2)}`:''}`);
|
|
43
|
-
}
|
|
44
39
|
console.log('generateTypes', {
|
|
45
40
|
typescriptDir: parsedArgs.typescriptDir
|
|
46
41
|
});
|
|
@@ -52,12 +47,11 @@ export const generateTypes = <T>(parsedArgs: Opts): LikeAPromise<ActionResponse,
|
|
|
52
47
|
: generateContractTypesAll(argsTyped)
|
|
53
48
|
|
|
54
49
|
return p.then(data => {
|
|
55
|
-
console.log
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
});
|
|
50
|
+
console.log(
|
|
51
|
+
(Array.isArray(data))
|
|
52
|
+
? data.join("\n")
|
|
53
|
+
: data
|
|
54
|
+
)
|
|
61
55
|
})
|
|
62
56
|
}
|
|
63
57
|
|