Allow import of http jrpc definitions inside local ones

This commit is contained in:
Fabian Stamm 2023-03-27 20:21:41 +02:00
parent 137a3659b7
commit 5106424a32
2 changed files with 12 additions and 14 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@hibas123/jrpcgen",
"version": "1.2.6",
"version": "1.2.11",
"main": "lib/index.js",
"license": "MIT",
"packageManager": "yarn@3.1.1",

View File

@ -18,7 +18,7 @@ import { ZIGTarget } from "./targets/zig";
import { DartTarget } from "./targets/dart";
import { URL } from "url";
class CatchedError extends Error { }
class CatchedError extends Error {}
const log = dbg("app");
@ -46,15 +46,19 @@ function indexToLineAndCol(src: string, index: number) {
return { line, col };
}
function resolve(base: string, ...parts: string[]) {
if (base.startsWith("http://") || base.startsWith("https://")) {
function resolve(base: string, sub?: string) {
if (sub && (sub.startsWith("http://") || sub.startsWith("https://"))) {
let u = new URL(sub);
return u.href;
} else if (base.startsWith("http://") || base.startsWith("https://")) {
let u = new URL(base);
for (const part of parts) {
u = new URL(part, u);
if (sub) {
u = new URL(sub, u);
}
return u.href;
} else {
return Path.resolve(base, ...parts);
if (!sub) return Path.resolve(base);
else return Path.resolve(Path.dirname(base), sub + ".jrpc");
}
}
@ -151,13 +155,7 @@ async function processFile(
let resolved: Parsed = [];
for (const statement of parsed) {
if (statement.type == "import") {
let res: string;
if (file.startsWith("http://") || file.startsWith("https://")) {
res = resolve(file, statement.path + ".jrpc");
} else {
const base = Path.dirname(file);
res = resolve(base, statement.path + ".jrpc");
}
let res = resolve(file, statement.path);
resolved.push(...((await processFile(ctx, res)) || []));
} else {
resolved.push(statement);