Comments (6)
I encounter the same problem just in a hour, I use zenrpc to build server side rpc server. And I try to convert its smd schema into openrpc and generate client from the converted one. But the problem is zenrpc have the concept called namespace, which just add namespace in from of the method name. And cursed the openrpc generator generated invalid typescript like this.
/**
*
*/
// tslint:disable-next-line:max-line-length
public user.Login: UserLogin = (...params) => {
return this.request("user.Login", params);
}
from generator.
I figured out a workaround - I just wrote a post-generation script, that replaces dots with underscores in the final file. Here is the function, it's quite naive, but works:
import { readJson, readFile, writeFile } from "fs-extra";
import { OpenrpcDocument as OpenRPC, MethodObject } from "@open-rpc/meta-schema";
const fixMethodsWithDots = async (openrpcFilePath: string, generatedFilePath: string, finalOutputPath: string) => {
const openrpcDocument: OpenRPC = await readJson(openrpcFilePath);
let generatedFileContents: string = await readFile(generatedFilePath, "utf-8");
const methodNames: string[] = openrpcDocument.methods.map(method => (<MethodObject>method).name);
const methodNamesReplacements: [string, string][] = methodNames.map(methodName => (["public "+methodName, "public "+methodName.replace(".", "_")]));
for (const [withDot, withUnderscore] of methodNamesReplacements) {
generatedFileContents = generatedFileContents.replace(withDot, withUnderscore);
}
await writeFile(finalOutputPath, generatedFileContents);
}
I'll keep it for now, so it just works, but I'm really looking forward to this bugfix.
from generator.
I modify the master to generate code I want. https://github.com/Laysi/open-rpc-generator
It would generated nested class to move the method into its own namespace class.
...
public user = new class{
constructor(public superThis: Catcus) {
}
/**
*
*/
// tslint:disable-next-line:max-line-length
public Login: UserLogin = (...params) => {
return this.superThis.request("user.Login", params);
}
}
...
And I have add some tweak to made it working under angular environment and ci. Compare to openapi generator it still lack some custom field for further usage in template.
from generator.
Thanks for the issue and nice catch.
Im happy to implement or take a PR for the initially suggested fix. The nesting fix is very interesting, and I don't want to completely dismiss it, but its quite a bit bigger of a change. Great work on creating a fork to implement it though - really nice!
comment if you want to make a PR, otherwise ill put one together soon.
from generator.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
from generator.
Thanks for the issue and nice catch.
Im happy to implement or take a PR for the initially suggested fix. The nesting fix is very interesting, and I don't want to completely dismiss it, but its quite a bit bigger of a change. Great work on creating a fork to implement it though - really nice!
comment if you want to make a PR, otherwise ill put one together soon.
I'm glad to make a PR. :)
from generator.
Related Issues (20)
- Add golang client, server and dart client support HOT 3
- error on npm install HOT 1
- Error building generated gatsby docs HOT 1
- Configurable clients HOT 5
- Update generated JS client to latest npm packages & node LTS HOT 1
- Update dependencies and node version on docs generator HOT 1
- Error when using generator wtih: open-rpc-generator generate HOT 1
- Add explicit outputDir options per component HOT 2
- Running open-rpc-generator generate -c overwrites package.json HOT 1
- params by-name keys are incorrectly mapped HOT 1
- Additional Properties Typing specificity HOT 1
- FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory HOT 6
- New Language Support: Markdown
- Option to only include api playground in generated docs
- Add java client generator
- Add python client (modern using typing)
- Allow injection or configuration of transport client HOT 1
- Lean Clients
- "RangeError: Maximum call stack size exceeded" when adding rpc.discover method HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from generator.