Closed BryanHunt closed 1 year ago
Hi @BryanHunt
Please note we needed to change the way classes are exported, see #104 to check the changes you need to do in your imports.
I did change my imports. This is what I'm using now ...
import { MediaTypeObject } from 'openapi3-ts/src/model/openapi31';
Am I missing something else?
If you don't have additional import errors it will be fine.
Sorry, I'm not following. What will be fine?
I meant, if there are no more import errors, its complete. You don't need to change anything else.
With that import in my comment above, I get the build failure that I originally reported.
Updated the original comment to make this more clear.
Ok. I see. Extension names are now checked to be starting with the prefix x-
(per the spec)
See: specification-extension.ts
export type IExtensionName = `x-${string}`;
export type IExtensionType = any;
export type ISpecificationExtension = {
[extensionName: IExtensionName]: IExtensionType;
};
If you need to force the types to bypass the check, you can do:
return obj[extensionName as IExtensionName];
Or use the static methods to retrieve and set the extensions:
export class SpecificationExtension implements ISpecificationExtension {
[extensionName: IExtensionName]: any;
static isValidExtension(extensionName: string): boolean {
return /^x-/.test(extensionName);
}
getExtension(extensionName: string): any {
if (!SpecificationExtension.isValidExtension(extensionName)) {
throw new Error(
`Invalid specification extension: '${extensionName}'. Extensions must start with prefix 'x-`
);
}
if (this[extensionName]) {
return this[extensionName];
}
return null;
}
addExtension(extensionName: string, payload: any): void {
if (!SpecificationExtension.isValidExtension(extensionName)) {
throw new Error(
`Invalid specification extension: '${extensionName}'. Extensions must start with prefix 'x-`
);
}
this[extensionName] = payload;
}
...
I'm not using extensions. One of my modules that fails to build is using these two exact imports:
import { MediaTypeObject } from 'openapi3-ts/src/model/openapi31';
import { SecuritySchemeObject } from 'openapi3-ts/src/model/openapi31';
Ok. What version of typescript are you using?
tsc --version
Can you verify it with v. 5.0.2
Looks like https://www.typescriptlang.org/docs/handbook/2/template-literal-types.html is a new feature of the tsc compiler, introduced from TS 4.1
We are using 5.0.2
Can you share a minimal repro sample? I will try to debug and diagnose.
I'll see if I can put something together.
Thank you very much for the sample @BryanHunt
Root cause The difference is in the setting in tsconfig.json:
"noImplicitAny": true,
"noImplicitAny": false,
When importing the sources, the errors appears only in your side given the configuration. I am going to prepare a fix in the lib making tsconfig.json more strict.
Package publishing is now down on npmjs. I will publish v. 4.0.3
with the fix in #106 as soon as is back to live again.
Published as https://www.npmjs.com/package/openapi3-ts/v/4.0.3 Feel free to reopen the issue if you detect any other problem. Thanks @BryanHunt
My builds are fixed. Thanks the the quick response.
We are trying to update to 4.0.2 and our builds are broken with the following errors after changing my imports as documented.
Changed import to:
I get: