Skip to content

Commit

Permalink
feat(ts): exports all the generated namespaces (#184)
Browse files Browse the repository at this point in the history
  • Loading branch information
ygrishajev committed Apr 4, 2024
1 parent 14b1f7d commit 4148a5c
Show file tree
Hide file tree
Showing 213 changed files with 552 additions and 531 deletions.
4 changes: 2 additions & 2 deletions script/protocgen-legacy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ for dir in $proto_dirs; do
-I "vendor/github.com/cosmos/cosmos-sdk/third_party/proto" \
--plugin="${AKASH_TS_NODE_BIN}/protoc-gen-ts_proto" \
--ts_proto_out="${AKASH_TS_ROOT}/src/generated" \
--ts_proto_opt=esModuleInterop=true,forceLong=long,outputTypeRegistry=true,useExactTypes=false \
--ts_proto_opt=esModuleInterop=true,forceLong=long,outputTypeRegistry=true,useExactTypes=false,outputIndex=true \
$(find "${dir}" -maxdepth 1 -name '*.proto')
done

Expand Down Expand Up @@ -72,7 +72,7 @@ for dir in $proto_dirs; do
-I "vendor/github.com/cosmos/cosmos-sdk/third_party/proto" \
--plugin="${AKASH_TS_NODE_BIN}/protoc-gen-ts_proto" \
--ts_proto_out="${AKASH_TS_ROOT}/src/generated" \
--ts_proto_opt=esModuleInterop=true,forceLong=long,outputTypeRegistry=true,useExactTypes=false \
--ts_proto_opt=esModuleInterop=true,forceLong=long,outputTypeRegistry=true,useExactTypes=false,outputIndex=true \
$(find "${dir}" -maxdepth 1 -name '*.proto')
done

Expand Down
39 changes: 39 additions & 0 deletions ts/.bin/generate-exports.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/usr/bin/env ts-node

import * as fs from 'fs';
import * as path from 'path';

const distDir = path.resolve(__dirname, '../dist/generated');
const files = fs.readdirSync(distDir);
const paths = files.reduce(
(acc, file) => {
const match = file.match(/index.(.*)\.d\.ts/);

if (match) {
const dottedPath = match[1];
const slashedPath = dottedPath.replace(/\./g, '/');
const resolvedPath = `./dist/generated/index.${dottedPath}`;

acc.tsconfig[`@akashnetwork/akash-api/${slashedPath}`] = [resolvedPath];
acc.package[`./${slashedPath}`] = `${resolvedPath}.js`;
}

return acc;
},
{ package: {}, tsconfig: {} },
);

const tsconfigPaths = path.resolve(__dirname, '../tsconfig.paths.json');
fs.writeFileSync(
tsconfigPaths,
JSON.stringify({ compilerOptions: { paths: paths.tsconfig } }, null, 2),
);

const packageJson = JSON.parse(
fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf8'),
);
packageJson.exports = paths.package;
fs.writeFileSync(
path.resolve(__dirname, '../package.json'),
JSON.stringify(packageJson, null, 2),
);
13 changes: 13 additions & 0 deletions ts/.bin/remove-exports.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/usr/bin/env ts-node

import * as fs from 'fs';
import * as path from 'path';

const packageJson = JSON.parse(
fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf8'),
);
delete packageJson.exports;
fs.writeFileSync(
path.resolve(__dirname, '../package.json'),
JSON.stringify(packageJson, null, 2),
);
1 change: 1 addition & 0 deletions ts/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
/dist
/build
/node_modules
tsconfig.paths.json

# Logs
logs
Expand Down
2 changes: 1 addition & 1 deletion ts/.husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1 +1 @@
ts/node_modules/.bin/lint-staged --cwd ts
ts/node_modules/.bin/lint-staged --cwd ts
40 changes: 40 additions & 0 deletions ts/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Akash API TypeScript Bindings

[![npm version](https://badge.fury.io/js/%40akashnetwork%2Fakash-api.svg)](https://badge.fury.io/js/%40akashnetwork%2Fakash-api)
[![License: Apache-2.0](https://img.shields.io/badge/License-apache2.0-yellow.svg)](https://opensource.org/license/apache-2-0)

This package provides TypeScript bindings for the Akash API, generated from protobuf definitions.

## Installation

To install the package, run:

```bash
npm install @akashnetwork/akash-api
```

## Usage

You can import the generated namespaces from the package like this:
```typescript
import * as akashDeploymentV1beta1 from '@akashnetwork/akash-api/akash/deployment/v1beta1';
import * as akashDiscoveryV1 from '@akashnetwork/akash-api/akash/discovery/v1';
// ... and so on for other namespaces
```

### TypeScript 4.5 and above
If you're using TypeScript 4.5 or above, the package exports all the paths of the generated namespaces, so you can import them directly.

### TypeScript below 4.5
If you're using a version of TypeScript below 4.5, the package provides a tsconfig.paths.json file that you can extend in your local TypeScript configuration to resolve the paths. Here's how you can do it: In your tsconfig.json file, add the following:
```json
{
"extends": "@akashnetwork/akash-api/tsconfig.paths.json"
}
```

### Contributing
Contributions are welcome. Please submit a pull request or create an issue to discuss the changes you want to make.

### License
This package is licensed under the Apache-2.0.
128 changes: 30 additions & 98 deletions ts/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 4148a5c

Please sign in to comment.