@taqueria/plugin-contract-types 0.3.0 → 0.4.0-rc2

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.
@@ -8,111 +8,118 @@ import { typeAliasesFileContent } from './type-aliases-file-content';
8
8
  import { typeUtilsFileContent } from './type-utils-file-content';
9
9
 
10
10
  const fs = {
11
- mkdir: promisify(fsRaw.mkdir),
12
- copyFile: promisify(fsRaw.copyFile),
13
- readdir: promisify(fsRaw.readdir),
14
- readFile: promisify(fsRaw.readFile),
15
- writeFile: promisify(fsRaw.writeFile),
16
- stat: promisify(fsRaw.stat),
17
- exists: fsRaw.existsSync,
11
+ mkdir: promisify(fsRaw.mkdir),
12
+ copyFile: promisify(fsRaw.copyFile),
13
+ readdir: promisify(fsRaw.readdir),
14
+ readFile: promisify(fsRaw.readFile),
15
+ writeFile: promisify(fsRaw.writeFile),
16
+ stat: promisify(fsRaw.stat),
17
+ exists: fsRaw.existsSync,
18
18
  };
19
19
 
20
20
  const getAllFiles = async (rootPath: string, filter: (fullPath: string) => boolean): Promise<string[]> => {
21
- const allFiles = [] as string[];
21
+ const allFiles = [] as string[];
22
22
 
23
- const getAllFilesRecursive = async (dirPath: string) => {
24
- let files = await fs.readdir(dirPath, { withFileTypes: true });
23
+ const getAllFilesRecursive = async (dirPath: string) => {
24
+ let files = await fs.readdir(dirPath, { withFileTypes: true });
25
25
 
26
- for (const f of files) {
27
- const subPath = path.resolve(dirPath, f.name);
26
+ for (const f of files) {
27
+ const subPath = path.resolve(dirPath, f.name);
28
28
 
29
- if (f.isDirectory()) {
30
- await getAllFilesRecursive(subPath);
31
- continue;
32
- }
29
+ if (f.isDirectory()) {
30
+ await getAllFilesRecursive(subPath);
31
+ continue;
32
+ }
33
33
 
34
- if (!filter(subPath)) {
35
- continue;
36
- }
34
+ if (!filter(subPath)) {
35
+ continue;
36
+ }
37
37
 
38
- allFiles.push(subPath);
39
- }
40
- }
38
+ allFiles.push(subPath);
39
+ }
40
+ };
41
41
 
42
- await getAllFilesRecursive(rootPath);
43
- return allFiles;
44
- }
42
+ await getAllFilesRecursive(rootPath);
43
+ return allFiles;
44
+ };
45
45
 
46
46
  export const generateContractTypesProcessContractFiles = async ({
47
- inputTzContractDirectory,
48
- inputFiles,
49
- outputTypescriptDirectory,
50
- format,
51
- typeAliasMode,
47
+ inputTzContractDirectory,
48
+ inputFiles,
49
+ outputTypescriptDirectory,
50
+ format,
51
+ typeAliasMode,
52
52
  }: {
53
- inputTzContractDirectory: string;
54
- inputFiles?: string[];
55
- outputTypescriptDirectory: string;
56
- format: 'tz' | 'json',
57
- typeAliasMode: 'local' | 'file' | 'library' | 'simple',
53
+ inputTzContractDirectory: string;
54
+ inputFiles?: string[];
55
+ outputTypescriptDirectory: string;
56
+ format: 'tz' | 'json';
57
+ typeAliasMode: 'local' | 'file' | 'library' | 'simple';
58
58
  }): Promise<void> => {
59
-
60
- console.log(`Generating Types: ${path.resolve(inputTzContractDirectory)} => ${path.resolve(outputTypescriptDirectory)}`);
61
-
62
- const ext = '.' + format;
63
- const filesAll = await getAllFiles(inputTzContractDirectory, x => x.endsWith(ext));
64
- const files = inputFiles ? filesAll.filter(f => inputFiles.some(inputFile => f.endsWith(inputFile))) : filesAll;
65
-
66
- console.log(`Contracts Found: ${[``, ...files].join(`\n\t- `)}`);
67
-
68
- const typeAliasImportPath = `@taquito/contract-type-generator`;
69
-
70
- const typeAliasData: TypeAliasData = typeAliasMode === 'local' ? { mode: typeAliasMode, fileContent: typeAliasesFileContent }
71
- : typeAliasMode === 'file' ? { mode: typeAliasMode, importPath: `./type-aliases` }
72
- : typeAliasMode === 'library' ? { mode: typeAliasMode, importPath: typeAliasImportPath }
73
- : { mode: 'simple' };
74
-
75
- if (typeAliasMode === 'file') {
76
- // Copy the type alias file
77
- await fs.mkdir(outputTypescriptDirectory, { recursive: true });
78
- await fs.writeFile(path.join(outputTypescriptDirectory, './type-aliases.ts'), typeAliasesFileContent);
79
- }
80
-
81
- // Copy the type utils file
82
- const typeUtilsData: TypeUtilsData = { importPath: `./type-utils` };
83
- await fs.mkdir(outputTypescriptDirectory, { recursive: true });
84
- await fs.writeFile(path.join(outputTypescriptDirectory, './type-utils.ts'), typeUtilsFileContent);
85
-
86
- for (const fullPath of files) {
87
- const fileRelativePath = fullPath.replace(path.resolve(inputTzContractDirectory), '');
88
- const fileName = fileRelativePath.replace(ext, '');
89
- const inputFilePath = path.join(inputTzContractDirectory, fileRelativePath);
90
- const typesOutputFilePath = path.join(outputTypescriptDirectory, fileRelativePath.replace(ext, `.types.ts`));
91
- const codeContentOutputFilePath = path.join(outputTypescriptDirectory, fileRelativePath.replace(ext, `.code.ts`));
92
- const schemaContentOutputFilePath = path.join(outputTypescriptDirectory, fileRelativePath.replace(ext, `.schema.json`));
93
- console.log(`Processing ${fileRelativePath}...`);
94
-
95
- try {
96
- const contractTypeName = normalizeContractName(fileName);
97
-
98
- const michelsonCode = await fs.readFile(inputFilePath, { encoding: `utf8` });
99
-
100
- const {
101
- schemaOutput,
102
- typescriptCodeOutput: { typesFileContent, contractCodeFileContent }
103
- } = generateContractTypesFromMichelsonCode(michelsonCode, contractTypeName, format, typeAliasData, typeUtilsData);
104
-
105
- // Write output (ensure dir exists)
106
- await fs.mkdir(path.dirname(typesOutputFilePath), { recursive: true });
107
- await fs.writeFile(typesOutputFilePath, typesFileContent);
108
- await fs.writeFile(codeContentOutputFilePath, contractCodeFileContent);
109
-
110
- const debugSchema = false;
111
- if(debugSchema){
112
- await fs.writeFile(schemaContentOutputFilePath, JSON.stringify(schemaOutput, null, 2));
113
- }
114
- } catch (err: unknown) {
115
- console.error(`❌ Could not process ${fileRelativePath}`, { err });
116
- }
117
- }
118
- };
59
+ console.log(
60
+ `Generating Types: ${path.resolve(inputTzContractDirectory)} => ${path.resolve(outputTypescriptDirectory)}`,
61
+ );
62
+
63
+ const ext = '.' + format;
64
+ const filesAll = await getAllFiles(inputTzContractDirectory, x => x.endsWith(ext));
65
+ const files = inputFiles ? filesAll.filter(f => inputFiles.some(inputFile => f.endsWith(inputFile))) : filesAll;
66
+
67
+ console.log(`Contracts Found: ${[``, ...files].join(`\n\t- `)}`);
68
+
69
+ const typeAliasImportPath = `@taquito/contract-type-generator`;
70
+
71
+ const typeAliasData: TypeAliasData = typeAliasMode === 'local'
72
+ ? { mode: typeAliasMode, fileContent: typeAliasesFileContent }
73
+ : typeAliasMode === 'file'
74
+ ? { mode: typeAliasMode, importPath: `./type-aliases` }
75
+ : typeAliasMode === 'library'
76
+ ? { mode: typeAliasMode, importPath: typeAliasImportPath }
77
+ : { mode: 'simple' };
78
+
79
+ if (typeAliasMode === 'file') {
80
+ // Copy the type alias file
81
+ await fs.mkdir(outputTypescriptDirectory, { recursive: true });
82
+ await fs.writeFile(path.join(outputTypescriptDirectory, './type-aliases.ts'), typeAliasesFileContent);
83
+ }
84
+
85
+ // Copy the type utils file
86
+ const typeUtilsData: TypeUtilsData = { importPath: `./type-utils` };
87
+ await fs.mkdir(outputTypescriptDirectory, { recursive: true });
88
+ await fs.writeFile(path.join(outputTypescriptDirectory, './type-utils.ts'), typeUtilsFileContent);
89
+
90
+ for (const fullPath of files) {
91
+ const fileRelativePath = fullPath.replace(path.resolve(inputTzContractDirectory), '');
92
+ const fileName = fileRelativePath.replace(ext, '');
93
+ const inputFilePath = path.join(inputTzContractDirectory, fileRelativePath);
94
+ const typesOutputFilePath = path.join(outputTypescriptDirectory, fileRelativePath.replace(ext, `.types.ts`));
95
+ const codeContentOutputFilePath = path.join(outputTypescriptDirectory, fileRelativePath.replace(ext, `.code.ts`));
96
+ const schemaContentOutputFilePath = path.join(
97
+ outputTypescriptDirectory,
98
+ fileRelativePath.replace(ext, `.schema.json`),
99
+ );
100
+ console.log(`Processing ${fileRelativePath}...`);
101
+
102
+ try {
103
+ const contractTypeName = normalizeContractName(fileName);
104
+
105
+ const michelsonCode = await fs.readFile(inputFilePath, { encoding: `utf8` });
106
+
107
+ const {
108
+ schemaOutput,
109
+ typescriptCodeOutput: { typesFileContent, contractCodeFileContent },
110
+ } = generateContractTypesFromMichelsonCode(michelsonCode, contractTypeName, format, typeAliasData, typeUtilsData);
111
+
112
+ // Write output (ensure dir exists)
113
+ await fs.mkdir(path.dirname(typesOutputFilePath), { recursive: true });
114
+ await fs.writeFile(typesOutputFilePath, typesFileContent);
115
+ await fs.writeFile(codeContentOutputFilePath, contractCodeFileContent);
116
+
117
+ const debugSchema = false;
118
+ if (debugSchema) {
119
+ await fs.writeFile(schemaContentOutputFilePath, JSON.stringify(schemaOutput, null, 2));
120
+ }
121
+ } catch (err: unknown) {
122
+ console.error(`❌ Could not process ${fileRelativePath}`, { err });
123
+ }
124
+ }
125
+ };
package/src/cli.ts CHANGED
@@ -1,29 +1,40 @@
1
1
  import { generateContractTypesProcessContractFiles } from './cli-process';
2
2
 
3
3
  export const run = async (): Promise<void> => {
4
- const argv = process.argv;
5
- const argsGenerateFile = argv.some(a => a.startsWith(`--g`)) ? argv.slice(argv.findIndex(a => a.startsWith(`--g`)) + 1) : undefined;
6
- const argsUseJson = argv.some(a => a.startsWith(`--json`)) ? true : false;
7
- const argsTypeAliasMode = argv.some(a => a.startsWith(`--types`)) ? argv.slice(argv.findIndex(a => a.startsWith(`--types`)) + 1) : undefined;
4
+ const argv = process.argv;
5
+ const argsGenerateFile = argv.some(a => a.startsWith(`--g`))
6
+ ? argv.slice(argv.findIndex(a => a.startsWith(`--g`)) + 1)
7
+ : undefined;
8
+ const argsUseJson = argv.some(a => a.startsWith(`--json`)) ? true : false;
9
+ const argsTypeAliasMode = argv.some(a => a.startsWith(`--types`))
10
+ ? argv.slice(argv.findIndex(a => a.startsWith(`--types`)) + 1)
11
+ : undefined;
8
12
 
9
- console.log(`contract-type-generator\n\t${argv.join(`\n\t`)}`);
13
+ console.log(`contract-type-generator\n\t${argv.join(`\n\t`)}`);
10
14
 
11
- if (argsGenerateFile) {
12
- const [inputTzContractDirectory, outputTypescriptDirectory] = argsGenerateFile;
13
- const format = argsUseJson ? 'json' : 'tz';
14
- const [typeAliasModeArg] = argsTypeAliasMode ?? [];
15
+ if (argsGenerateFile) {
16
+ const [inputTzContractDirectory, outputTypescriptDirectory] = argsGenerateFile;
17
+ const format = argsUseJson ? 'json' : 'tz';
18
+ const [typeAliasModeArg] = argsTypeAliasMode ?? [];
15
19
 
16
- // Library is default mode
17
- const typeAliasMode =
18
- typeAliasModeArg === 'local' ? 'local'
19
- : typeAliasModeArg === 'file' ? 'file'
20
- : typeAliasModeArg === 'simple' ? 'simple'
21
- : 'library';
22
- await generateContractTypesProcessContractFiles({ inputTzContractDirectory, outputTypescriptDirectory, format, typeAliasMode });
23
- return;
24
- }
20
+ // Library is default mode
21
+ const typeAliasMode = typeAliasModeArg === 'local'
22
+ ? 'local'
23
+ : typeAliasModeArg === 'file'
24
+ ? 'file'
25
+ : typeAliasModeArg === 'simple'
26
+ ? 'simple'
27
+ : 'library';
28
+ await generateContractTypesProcessContractFiles({
29
+ inputTzContractDirectory,
30
+ outputTypescriptDirectory,
31
+ format,
32
+ typeAliasMode,
33
+ });
34
+ return;
35
+ }
25
36
 
26
- console.log(`
37
+ console.log(`
27
38
  contract-type-generator
28
39
 
29
40
  Example usages:
@@ -1,19 +1,18 @@
1
-
2
1
  export class GenerateApiError implements Error {
3
- name = `GenerateApiError`;
4
- constructor(public message: string, readonly data: unknown) {
5
- console.error(`❌ GenerateApiError: ${message}`, data);
6
- }
2
+ name = `GenerateApiError`;
3
+ constructor(public message: string, readonly data: unknown) {
4
+ console.error(`❌ GenerateApiError: ${message}`, data);
5
+ }
7
6
  }
8
7
 
9
8
  export const assertExhaustive = (value: never, message: string): void => {
10
- console.error(message, { value });
9
+ console.error(message, { value });
11
10
  };
12
11
 
13
12
  export const reduceFlatMap = <T>(out: T[], x: T[]): T[] => {
14
- out.push(...x);
15
- return out;
16
- }
13
+ out.push(...x);
14
+ return out;
15
+ };
17
16
 
18
17
  // const reduceFlatMapTest = () => {
19
18
  // const items = [['a'], ['b']];
@@ -1,6 +1,7 @@
1
- export const normalizeContractName = (text: string) => text
2
- .replace(/[^A-Za-z0-9]/g, '_')
3
- .split("_")
4
- .filter(x => x)
5
- .map(x => x[0].toUpperCase() + x.substring(1))
6
- .join('');
1
+ export const normalizeContractName = (text: string) =>
2
+ text
3
+ .replace(/[^A-Za-z0-9]/g, '_')
4
+ .split('_')
5
+ .filter(x => x)
6
+ .map(x => x[0].toUpperCase() + x.substring(1))
7
+ .join('');