Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions testbeds/component-model/src/calculator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ export type Types = {
};
export namespace calculator {
export type Operation = Types.Operation;
export const Operation = Types.Operation;
export type Imports = {
generate: () => string;
};
Expand Down
4 changes: 2 additions & 2 deletions wasm-component-model/src/tools/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ async function run(options: Options): Promise<number> {
if (semVersion === null) {
process.stderr.write(`wasm-tools --version didn't provide a parsable version number. Output was ${output}.\n`);
return 1;
} else if (!semverGte(semVersion, '1.200.0')) {
process.stderr.write(`wit2ts required wasm-tools >= 1.200.0, but found version ${version}.\n`);
} else if (!semverGte(semVersion, '1.226.0')) {
process.stderr.write(`wit2ts required wasm-tools >= 1.226.0, but found version ${version}.\n`);
return 1;
}
let data: string;
Expand Down
2 changes: 1 addition & 1 deletion wasm-component-model/src/tools/wit-json.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ interface AbstractCallable {
name: string;
docs?: Documentation | undefined;
params: Param[];
results: TypeObject[];
result?: TypeReference | undefined;
}

export interface Func extends AbstractCallable {
Expand Down
51 changes: 20 additions & 31 deletions wasm-component-model/src/tools/wit2ts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -649,20 +649,19 @@ class SymbolTable {
if (seenCallables.has(callable)) {
return;
}
for (const result of Object.values(callable.results)) {
if (TypeReference.isNumber(result.type)) {
const type = this.getType(result.type);
if (TypeKind.isResult(type.kind)) {
if (type.kind.result.err !== null) {
if (TypeReference.isString(type.kind.result.err)) {
this.resultErrorTypes.add(type.kind.result.err);
} else {
let errorType = this.getType(type.kind.result.err);
while (TypeKind.isReference(errorType.kind)) {
errorType = this.getType(errorType.kind.type);
}
this.resultErrorTypes.add(errorType);
const result = callable.result;
if (result !== undefined && TypeReference.isNumber(result)) {
const type = this.getType(result);
if (TypeKind.isResult(type.kind)) {
if (type.kind.result.err !== null) {
if (TypeReference.isString(type.kind.result.err)) {
this.resultErrorTypes.add(type.kind.result.err);
} else {
let errorType = this.getType(type.kind.result.err);
while (TypeKind.isReference(errorType.kind)) {
errorType = this.getType(errorType.kind.type);
}
this.resultErrorTypes.add(errorType);
}
}
}
Expand Down Expand Up @@ -1517,12 +1516,10 @@ class TypeFlattener {

public flattenResult(callable: Callable): string[] {
const result: string[] = [];
if (callable.results.length === 0) {
if (callable.result === undefined) {
result.push('void');
} else {
for (const r of callable.results) {
this.flattenResultType(result, r.type);
}
this.flattenResultType(result, callable.result);
}
return result;
}
Expand Down Expand Up @@ -3858,12 +3855,8 @@ namespace ResourceEmitter {
}
let returnType: string = 'void';
const context = TypeScript.TypePrinterContext.create(TypeUsage.witFunction);
if (this.method.results !== null && omitReturn === false) {
if (this.method.results.length === 1) {
returnType = printers.typeScript.printTypeReference(this.method.results[0].type, context);
} else if (this.method.results.length > 1) {
returnType = `[${this.method.results.map(r => printers.typeScript.printTypeReference(r.type, context)).join(', ')}]`;
}
if (this.method.result !== undefined && omitReturn === false) {
returnType = printers.typeScript.printTypeReference(this.method.result, context);
}
return [params, paramNames, returnType, context.errorClasses.length > 0 ? context.errorClasses : undefined];
}
Expand Down Expand Up @@ -4075,10 +4068,8 @@ function CallableEmitter<C extends Callable, P extends Interface | ResourceType
const pName = nameProvider.type.name(this.parent as ResourceType);
metaReturnType = `new ${MetaModel.OwnType}(${pName}_Handle)`;
} else {
if (this.callable.results.length === 1) {
metaReturnType = this.context.printers.metaModel.printTypeReference(this.callable.results[0].type, TypeUsage.witFunction);
} else if (this.callable.results.length > 1) {
metaReturnType = `[${this.callable.results.map(r => this.context.printers.metaModel.printTypeReference(r.type, TypeUsage.witFunction)).join(', ')}]`;
if (this.callable.result !== undefined) {
metaReturnType = this.context.printers.metaModel.printTypeReference(this.callable.result, TypeUsage.witFunction);
}
}
return [metaDataParams, metaReturnType];
Expand Down Expand Up @@ -4140,10 +4131,8 @@ function CallableEmitter<C extends Callable, P extends Interface | ResourceType
const result: { return: string | undefined; exceptions: string[] | undefined } = { return: undefined, exceptions: undefined };
const context = TypeScript.TypePrinterContext.create(usage);
let returnType: string | undefined = undefined;
if (this.callable.results.length === 1) {
returnType = this.context.printers.typeScript.printTypeReference(this.callable.results[0].type, context);
} else if (this.callable.results.length > 1) {
returnType = `[${this.callable.results.map(r => this.context.printers.typeScript.printTypeReference(r.type, context)).join(', ')}]`;
if (this.callable.result !== undefined) {
returnType = this.context.printers.typeScript.printTypeReference(this.callable.result, context);
}
result.return = returnType;
result.exceptions = context.errorClasses.length > 0 ? context.errorClasses : undefined;
Expand Down