@dedot/codegen 0.1.1-next.77a2d8eb.4 → 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.
@@ -7,7 +7,7 @@ class ConstructorQueryGen extends QueryGen_js_1.QueryGen {
7
7
  generate(useSubPaths = false) {
8
8
  this.typesGen.clearCache();
9
9
  this.typesGen.typeImports.addKnownType('GenericSubstrateApi');
10
- this.typesGen.typeImports.addContractType('GenericConstructorQuery', 'GenericConstructorQueryCall', 'ConstructorCallOptions', 'ContractInstantiateResult');
10
+ this.typesGen.typeImports.addContractType('GenericConstructorQuery', 'GenericConstructorQueryCall', 'GenericConstructorCallResult', 'ConstructorCallOptions', 'ContractInstantiateResult');
11
11
  const { constructors } = this.contractMetadata.spec;
12
12
  const constructorsOut = this.doGenerate(constructors, 'ConstructorCallOptions');
13
13
  const importTypes = this.typesGen.typeImports.toImports({ useSubPaths });
@@ -15,10 +15,13 @@ class ConstructorQueryGen extends QueryGen_js_1.QueryGen {
15
15
  return (0, utils_js_1.beautifySourceCode)(template({ importTypes, constructorsOut }));
16
16
  }
17
17
  generateMethodDef(def) {
18
- const { args } = def;
18
+ const { args, returnType } = def;
19
19
  args.forEach(({ type: { type } }) => this.importType(type));
20
20
  const paramsOut = this.generateParamsOut(args);
21
- return `GenericConstructorQueryCall<ChainApi, (${paramsOut && `${paramsOut},`} options: ConstructorCallOptions) => Promise<ContractInstantiateResult<ChainApi>>>`;
21
+ const typeOutRaw = this.typesGen.generateType(returnType.type, 0, true);
22
+ // Unwrap langError result
23
+ const typeOut = typeOutRaw.match(/^(\w+)<(.*), (.*)>$/).at(2);
24
+ return `GenericConstructorQueryCall<ChainApi, (${paramsOut && `${paramsOut},`} options: ConstructorCallOptions) => Promise<GenericConstructorCallResult<${typeOut}, ContractInstantiateResult<ChainApi>>>>`;
22
25
  }
23
26
  }
24
27
  exports.ConstructorQueryGen = ConstructorQueryGen;
@@ -7,18 +7,23 @@ const utils_js_1 = require("../../utils.js");
7
7
  const SUFFIX = 'contract_api';
8
8
  class IndexGen {
9
9
  contractMetadata;
10
- constructor(contractMetadata) {
10
+ typesGen;
11
+ constructor(contractMetadata, typesGen) {
11
12
  this.contractMetadata = contractMetadata;
13
+ this.typesGen = typesGen;
12
14
  }
13
15
  generate(useSubPaths = false) {
14
16
  const contractName = (0, utils_1.stringPascalCase)(`${this.contractMetadata.contract.name}_${SUFFIX}`);
17
+ const langErrorId = this.contractMetadata.spec.lang_error.type;
18
+ const langErrorName = this.typesGen.cleanPath(this.contractMetadata.types[langErrorId].type.path);
15
19
  const typeImports = new index_js_1.TypeImports();
16
20
  typeImports.addKnownType('VersionedGenericSubstrateApi', 'RpcVersion', 'RpcV2');
17
21
  typeImports.addContractType('GenericContractApi');
18
22
  typeImports.addChainType('SubstrateApi');
23
+ typeImports.addPortableType(langErrorName);
19
24
  const importTypes = typeImports.toImports({ useSubPaths });
20
25
  const template = (0, utils_js_1.compileTemplate)('typink/templates/index.hbs');
21
- return (0, utils_js_1.beautifySourceCode)(template({ contractName, importTypes }));
26
+ return (0, utils_js_1.beautifySourceCode)(template({ contractName, langErrorName, importTypes }));
22
27
  }
23
28
  }
24
29
  exports.IndexGen = IndexGen;
@@ -35,7 +35,9 @@ class QueryGen {
35
35
  this.importType(returnType.type);
36
36
  args.forEach(({ type: { type } }) => this.importType(type));
37
37
  const paramsOut = this.generateParamsOut(args);
38
- const typeOut = this.typesGen.generateType(returnType.type, 0, true);
38
+ const typeOutRaw = this.typesGen.generateType(returnType.type, 0, true);
39
+ // Unwrap langError result
40
+ const typeOut = typeOutRaw.match(/^(\w+)<(.*), (.*)>$/).at(2);
39
41
  return `GenericContractQueryCall<ChainApi, (${paramsOut && `${paramsOut},`} options: ContractCallOptions) => Promise<GenericContractCallResult<${typeOut}, ContractCallResult<ChainApi>>>>`;
40
42
  }
41
43
  generateParamsOut(args) {
@@ -28,7 +28,7 @@ async function generateContractTypes(metadata, contract, outDir = '.', extension
28
28
  const constructorTxGen = new index_js_1.ConstructorTxGen(contractMetadata, typesGen);
29
29
  const constructorQueryGen = new index_js_1.ConstructorQueryGen(contractMetadata, typesGen);
30
30
  const eventsGen = new index_js_1.EventsGen(contractMetadata, typesGen);
31
- const indexGen = new index_js_1.IndexGen(contractMetadata);
31
+ const indexGen = new index_js_1.IndexGen(contractMetadata, typesGen);
32
32
  fs_1.default.writeFileSync(typesFileName, await typesGen.generate(useSubPaths));
33
33
  fs_1.default.writeFileSync(queryTypesFileName, await queryGen.generate(useSubPaths));
34
34
  fs_1.default.writeFileSync(txTypesFileName, await txGen.generate(useSubPaths));
@@ -13,4 +13,9 @@ export interface {{{contractName}}}<Rv extends RpcVersion = RpcV2, ChainApi exte
13
13
  constructorQuery: ConstructorQuery<ChainApi[Rv]>;
14
14
  constructorTx: ConstructorTx<ChainApi[Rv]>;
15
15
  events: ContractEvents<ChainApi[Rv]>;
16
+
17
+ types: {
18
+ LangError: {{{langErrorName}}};
19
+ ChainApi: ChainApi[Rv];
20
+ };
16
21
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dedot/codegen",
3
- "version": "0.1.1-next.77a2d8eb.4+77a2d8e",
3
+ "version": "0.2.0",
4
4
  "description": "Generate types",
5
5
  "author": "Thang X. Vu <thang@coongcrafts.io>",
6
6
  "homepage": "https://github.com/dedotdev/dedot/tree/main/packages/codegen",
@@ -18,14 +18,14 @@
18
18
  "copy": "cp -R ./src/chaintypes/templates ./dist/chaintypes && cp -R ./src/chaintypes/templates ./dist/cjs/chaintypes && cp -R ./src/typink/templates ./dist/typink && cp -R ./src/typink/templates ./dist/cjs/typink"
19
19
  },
20
20
  "dependencies": {
21
- "@dedot/api": "0.1.1-next.77a2d8eb.4+77a2d8e",
22
- "@dedot/codecs": "0.1.1-next.77a2d8eb.4+77a2d8e",
23
- "@dedot/contracts": "0.1.1-next.77a2d8eb.4+77a2d8e",
24
- "@dedot/providers": "0.1.1-next.77a2d8eb.4+77a2d8e",
25
- "@dedot/runtime-specs": "0.1.1-next.77a2d8eb.4+77a2d8e",
26
- "@dedot/shape": "0.1.1-next.77a2d8eb.4+77a2d8e",
27
- "@dedot/types": "0.1.1-next.77a2d8eb.4+77a2d8e",
28
- "@dedot/utils": "0.1.1-next.77a2d8eb.4+77a2d8e",
21
+ "@dedot/api": "0.2.0",
22
+ "@dedot/codecs": "0.2.0",
23
+ "@dedot/contracts": "0.2.0",
24
+ "@dedot/providers": "0.2.0",
25
+ "@dedot/runtime-specs": "0.2.0",
26
+ "@dedot/shape": "0.2.0",
27
+ "@dedot/types": "0.2.0",
28
+ "@dedot/utils": "0.2.0",
29
29
  "handlebars": "^4.7.8",
30
30
  "prettier": "^3.3.3"
31
31
  },
@@ -34,7 +34,7 @@
34
34
  "directory": "dist"
35
35
  },
36
36
  "license": "Apache-2.0",
37
- "gitHead": "77a2d8eb1aa950c978c1057657ef39b9061b3969",
37
+ "gitHead": "f29e8784997251518df1e33ef782f1d87207b126",
38
38
  "module": "./index.js",
39
39
  "types": "./index.d.ts",
40
40
  "exports": {
@@ -4,7 +4,7 @@ export class ConstructorQueryGen extends QueryGen {
4
4
  generate(useSubPaths = false) {
5
5
  this.typesGen.clearCache();
6
6
  this.typesGen.typeImports.addKnownType('GenericSubstrateApi');
7
- this.typesGen.typeImports.addContractType('GenericConstructorQuery', 'GenericConstructorQueryCall', 'ConstructorCallOptions', 'ContractInstantiateResult');
7
+ this.typesGen.typeImports.addContractType('GenericConstructorQuery', 'GenericConstructorQueryCall', 'GenericConstructorCallResult', 'ConstructorCallOptions', 'ContractInstantiateResult');
8
8
  const { constructors } = this.contractMetadata.spec;
9
9
  const constructorsOut = this.doGenerate(constructors, 'ConstructorCallOptions');
10
10
  const importTypes = this.typesGen.typeImports.toImports({ useSubPaths });
@@ -12,9 +12,12 @@ export class ConstructorQueryGen extends QueryGen {
12
12
  return beautifySourceCode(template({ importTypes, constructorsOut }));
13
13
  }
14
14
  generateMethodDef(def) {
15
- const { args } = def;
15
+ const { args, returnType } = def;
16
16
  args.forEach(({ type: { type } }) => this.importType(type));
17
17
  const paramsOut = this.generateParamsOut(args);
18
- return `GenericConstructorQueryCall<ChainApi, (${paramsOut && `${paramsOut},`} options: ConstructorCallOptions) => Promise<ContractInstantiateResult<ChainApi>>>`;
18
+ const typeOutRaw = this.typesGen.generateType(returnType.type, 0, true);
19
+ // Unwrap langError result
20
+ const typeOut = typeOutRaw.match(/^(\w+)<(.*), (.*)>$/).at(2);
21
+ return `GenericConstructorQueryCall<ChainApi, (${paramsOut && `${paramsOut},`} options: ConstructorCallOptions) => Promise<GenericConstructorCallResult<${typeOut}, ContractInstantiateResult<ChainApi>>>>`;
19
22
  }
20
23
  }
@@ -1,6 +1,8 @@
1
1
  import { ContractMetadata } from '@dedot/contracts';
2
+ import { TypesGen } from './TypesGen.js';
2
3
  export declare class IndexGen {
3
4
  contractMetadata: ContractMetadata;
4
- constructor(contractMetadata: ContractMetadata);
5
+ typesGen: TypesGen;
6
+ constructor(contractMetadata: ContractMetadata, typesGen: TypesGen);
5
7
  generate(useSubPaths?: boolean): Promise<string>;
6
8
  }
@@ -4,17 +4,22 @@ import { beautifySourceCode, compileTemplate } from '../../utils.js';
4
4
  const SUFFIX = 'contract_api';
5
5
  export class IndexGen {
6
6
  contractMetadata;
7
- constructor(contractMetadata) {
7
+ typesGen;
8
+ constructor(contractMetadata, typesGen) {
8
9
  this.contractMetadata = contractMetadata;
10
+ this.typesGen = typesGen;
9
11
  }
10
12
  generate(useSubPaths = false) {
11
13
  const contractName = stringPascalCase(`${this.contractMetadata.contract.name}_${SUFFIX}`);
14
+ const langErrorId = this.contractMetadata.spec.lang_error.type;
15
+ const langErrorName = this.typesGen.cleanPath(this.contractMetadata.types[langErrorId].type.path);
12
16
  const typeImports = new TypeImports();
13
17
  typeImports.addKnownType('VersionedGenericSubstrateApi', 'RpcVersion', 'RpcV2');
14
18
  typeImports.addContractType('GenericContractApi');
15
19
  typeImports.addChainType('SubstrateApi');
20
+ typeImports.addPortableType(langErrorName);
16
21
  const importTypes = typeImports.toImports({ useSubPaths });
17
22
  const template = compileTemplate('typink/templates/index.hbs');
18
- return beautifySourceCode(template({ contractName, importTypes }));
23
+ return beautifySourceCode(template({ contractName, langErrorName, importTypes }));
19
24
  }
20
25
  }
@@ -32,7 +32,9 @@ export class QueryGen {
32
32
  this.importType(returnType.type);
33
33
  args.forEach(({ type: { type } }) => this.importType(type));
34
34
  const paramsOut = this.generateParamsOut(args);
35
- const typeOut = this.typesGen.generateType(returnType.type, 0, true);
35
+ const typeOutRaw = this.typesGen.generateType(returnType.type, 0, true);
36
+ // Unwrap langError result
37
+ const typeOut = typeOutRaw.match(/^(\w+)<(.*), (.*)>$/).at(2);
36
38
  return `GenericContractQueryCall<ChainApi, (${paramsOut && `${paramsOut},`} options: ContractCallOptions) => Promise<GenericContractCallResult<${typeOut}, ContractCallResult<ChainApi>>>>`;
37
39
  }
38
40
  generateParamsOut(args) {
package/typink/index.js CHANGED
@@ -22,7 +22,7 @@ export async function generateContractTypes(metadata, contract, outDir = '.', ex
22
22
  const constructorTxGen = new ConstructorTxGen(contractMetadata, typesGen);
23
23
  const constructorQueryGen = new ConstructorQueryGen(contractMetadata, typesGen);
24
24
  const eventsGen = new EventsGen(contractMetadata, typesGen);
25
- const indexGen = new IndexGen(contractMetadata);
25
+ const indexGen = new IndexGen(contractMetadata, typesGen);
26
26
  fs.writeFileSync(typesFileName, await typesGen.generate(useSubPaths));
27
27
  fs.writeFileSync(queryTypesFileName, await queryGen.generate(useSubPaths));
28
28
  fs.writeFileSync(txTypesFileName, await txGen.generate(useSubPaths));
@@ -13,4 +13,9 @@ export interface {{{contractName}}}<Rv extends RpcVersion = RpcV2, ChainApi exte
13
13
  constructorQuery: ConstructorQuery<ChainApi[Rv]>;
14
14
  constructorTx: ConstructorTx<ChainApi[Rv]>;
15
15
  events: ContractEvents<ChainApi[Rv]>;
16
+
17
+ types: {
18
+ LangError: {{{langErrorName}}};
19
+ ChainApi: ChainApi[Rv];
20
+ };
16
21
  }