New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@openapi-codegen/typescript

Package Overview
Dependencies
Maintainers
1
Versions
40
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@openapi-codegen/typescript - npm Package Compare versions

Comparing version 1.0.0 to 1.1.0

lib/core/createNamedImport.d.ts

5

lib/core/getVariablesType.d.ts

@@ -5,3 +5,3 @@ import ts from "typescript";

*/
export declare const getVariablesType: ({ requestBodyType, requestBodyOptional, headersType, headersOptional, pathParamsType, pathParamsOptional, queryParamsType, queryParamsOptional, contextTypeName, }: {
export declare const getVariablesType: ({ requestBodyType, requestBodyOptional, headersType, headersOptional, pathParamsType, pathParamsOptional, queryParamsType, queryParamsOptional, contextTypeName, withContextType, }: {
requestBodyType: ts.TypeNode;

@@ -16,2 +16,3 @@ requestBodyOptional: boolean;

contextTypeName: string;
}) => ts.IntersectionTypeNode | ts.IndexedAccessTypeNode;
withContextType: boolean;
}) => ts.TypeLiteralNode | ts.IntersectionTypeNode | ts.IndexedAccessTypeNode | ts.KeywordTypeNode<ts.SyntaxKind.VoidKeyword>;

23

lib/core/getVariablesType.js

@@ -9,3 +9,3 @@ "use strict";

*/
const getVariablesType = ({ requestBodyType, requestBodyOptional, headersType, headersOptional, pathParamsType, pathParamsOptional, queryParamsType, queryParamsOptional, contextTypeName, }) => {
const getVariablesType = ({ requestBodyType, requestBodyOptional, headersType, headersOptional, pathParamsType, pathParamsOptional, queryParamsType, queryParamsOptional, contextTypeName, withContextType, }) => {
const variablesItems = [];

@@ -36,11 +36,18 @@ const hasProperties = (node) => {

}
const fetcherOptionsType = typescript_1.factory.createIndexedAccessTypeNode(typescript_1.factory.createTypeReferenceNode(typescript_1.factory.createIdentifier(contextTypeName), undefined), typescript_1.factory.createLiteralTypeNode(typescript_1.factory.createStringLiteral("fetcherOptions")));
return variablesItems.length === 0
? fetcherOptionsType
: typescript_1.factory.createIntersectionTypeNode([
typescript_1.factory.createTypeLiteralNode(variablesItems),
fetcherOptionsType,
]);
if (withContextType) {
const fetcherOptionsType = typescript_1.factory.createIndexedAccessTypeNode(typescript_1.factory.createTypeReferenceNode(typescript_1.factory.createIdentifier(contextTypeName), undefined), typescript_1.factory.createLiteralTypeNode(typescript_1.factory.createStringLiteral("fetcherOptions")));
return variablesItems.length === 0
? fetcherOptionsType
: typescript_1.factory.createIntersectionTypeNode([
typescript_1.factory.createTypeLiteralNode(variablesItems),
fetcherOptionsType,
]);
}
else {
return variablesItems.length === 0
? typescript_1.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.VoidKeyword)
: typescript_1.factory.createTypeLiteralNode(variablesItems);
}
};
exports.getVariablesType = getVariablesType;
//# sourceMappingURL=getVariablesType.js.map

@@ -7,13 +7,9 @@ "use strict";

const c = (0, tslib_1.__importStar)(require("case"));
const schemaToTypeAliasDeclaration_1 = require("../core/schemaToTypeAliasDeclaration");
const getUsedImports_1 = require("../core/getUsedImports");
const getVariablesType_1 = require("../core/getVariablesType");
const paramsToSchema_1 = require("../core/paramsToSchema");
const getResponseType_1 = require("../core/getResponseType");
const getRequestBodyType_1 = require("../core/getRequestBodyType");
const getParamsGroupByType_1 = require("../core/getParamsGroupByType");
const isRequestBodyOptional_1 = require("../core/isRequestBodyOptional");
const createWatermark_1 = require("../core/createWatermark");
const createOperationFetcherFnNodes_1 = require("../core/createOperationFetcherFnNodes");
const isVerb_1 = require("../core/isVerb");
const isOperationObject_1 = require("../core/isOperationObject");
const getOperationTypes_1 = require("../core/getOperationTypes");
const createNamedImport_1 = require("../core/createNamedImport");
const fetcher_1 = require("../templates/fetcher");

@@ -64,98 +60,13 @@ const context_1 = require("../templates/context");

operationIds.push(operationId);
// Retrieve dataType
let dataType = (0, getResponseType_1.getResponseType)({
responses: operation.responses,
components: context.openAPIDocument.components,
filter: (statusCode) => statusCode.startsWith("2"),
const { dataType, errorType, requestBodyType, pathParamsType, variablesType, queryParamsType, headersType, declarationNodes, } = (0, getOperationTypes_1.getOperationTypes)({
contextTypeName,
openAPIDocument: context.openAPIDocument,
operation,
operationId,
printNodes,
injectedHeaders: config.injectedHeaders,
pathParameters: verbs.parameters,
withContextType: true,
});
// Retrieve errorType
let errorType = (0, getResponseType_1.getResponseType)({
responses: operation.responses,
components: context.openAPIDocument.components,
filter: (statusCode) => !statusCode.startsWith("2"),
printNodes,
});
// Retrieve requestBodyType
let requestBodyType = (0, getRequestBodyType_1.getRequestBodyType)({
requestBody: operation.requestBody,
components: context.openAPIDocument.components,
});
// Generate params types
const { pathParams, queryParams, headerParams } = (0, getParamsGroupByType_1.getParamsGroupByType)([...(verbs.parameters || []), ...(operation.parameters || [])], context.openAPIDocument.components);
// Check if types can be marked as optional (all properties are optional)
const requestBodyOptional = (0, isRequestBodyOptional_1.isRequestBodyOptional)({
requestBody: operation.requestBody,
components: context.openAPIDocument.components,
});
const headersOptional = headerParams.reduce((mem, p) => {
if ((config.injectedHeaders || []).includes(p.name))
return mem;
return mem && !p.required;
}, true);
const pathParamsOptional = pathParams.reduce((mem, p) => {
return mem && !p.required;
}, true);
const queryParamsOptional = queryParams.reduce((mem, p) => {
return mem && !p.required;
}, true);
if (pathParams.length > 0) {
nodes.push(...(0, schemaToTypeAliasDeclaration_1.schemaToTypeAliasDeclaration)(`${operationId}PathParams`, (0, paramsToSchema_1.paramsToSchema)(pathParams), {
currentComponent: null,
openAPIDocument: context.openAPIDocument,
}));
}
if (queryParams.length > 0) {
nodes.push(...(0, schemaToTypeAliasDeclaration_1.schemaToTypeAliasDeclaration)(`${operationId}QueryParams`, (0, paramsToSchema_1.paramsToSchema)(queryParams), {
currentComponent: null,
openAPIDocument: context.openAPIDocument,
}));
}
if (headerParams.length > 0) {
nodes.push(...(0, schemaToTypeAliasDeclaration_1.schemaToTypeAliasDeclaration)(`${operationId}Headers`, (0, paramsToSchema_1.paramsToSchema)(headerParams, config.injectedHeaders), {
currentComponent: null,
openAPIDocument: context.openAPIDocument,
}));
}
// Export error type if needed
if (shouldExtractNode(errorType)) {
const errorTypeIdentifier = c.pascal(`${operationId}Error`);
nodes.push(typescript_1.factory.createTypeAliasDeclaration(undefined, [typescript_1.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.factory.createIdentifier(errorTypeIdentifier), undefined, errorType));
errorType = typescript_1.factory.createTypeReferenceNode(errorTypeIdentifier);
}
// Export data type if needed
if (shouldExtractNode(dataType)) {
const dataTypeIdentifier = c.pascal(`${operationId}Response`);
nodes.push(typescript_1.factory.createTypeAliasDeclaration(undefined, [typescript_1.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.factory.createIdentifier(dataTypeIdentifier), undefined, dataType));
dataType = typescript_1.factory.createTypeReferenceNode(dataTypeIdentifier);
}
// Export requestBody type if needed
if (shouldExtractNode(requestBodyType)) {
const requestBodyIdentifier = c.pascal(`${operationId}RequestBody`);
nodes.push(typescript_1.factory.createTypeAliasDeclaration(undefined, [typescript_1.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.factory.createIdentifier(requestBodyIdentifier), undefined, requestBodyType));
requestBodyType = typescript_1.factory.createTypeReferenceNode(requestBodyIdentifier);
}
const pathParamsType = pathParams.length > 0
? typescript_1.factory.createTypeReferenceNode(`${c.pascal(operationId)}PathParams`)
: typescript_1.factory.createTypeLiteralNode([]);
const queryParamsType = queryParams.length > 0
? typescript_1.factory.createTypeReferenceNode(`${c.pascal(operationId)}QueryParams`)
: typescript_1.factory.createTypeLiteralNode([]);
const headersType = headerParams.length > 0
? typescript_1.factory.createTypeReferenceNode(`${c.pascal(operationId)}Headers`)
: typescript_1.factory.createTypeLiteralNode([]);
// Generate fetcher variables type
const variablesIdentifier = c.pascal(`${operationId}Variables`);
const variablesType = typescript_1.factory.createTypeReferenceNode(variablesIdentifier);
nodes.push(typescript_1.factory.createTypeAliasDeclaration(undefined, [typescript_1.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.factory.createIdentifier(variablesIdentifier), undefined, (0, getVariablesType_1.getVariablesType)({
requestBodyType,
headersType,
pathParamsType,
queryParamsType,
contextTypeName,
headersOptional,
pathParamsOptional,
queryParamsOptional,
requestBodyOptional,
})));
nodes.push(...declarationNodes);
const operationFetcherFnName = `fetch${c.pascal(operationId)}`;

@@ -168,3 +79,3 @@ const component = operation["x-openapi-codegen-component"] ||

}
nodes.push(...createOperationFetcherFnNodes({
nodes.push(...(0, createOperationFetcherFnNodes_1.createOperationFetcherFnNodes)({
dataType,

@@ -205,4 +116,4 @@ requestBodyType,

createReactQueryImport(),
createNamedImport([contextHookName, contextTypeName], `./${contextFilename}`),
createNamedImport(fetcherFn, `./${fetcherFilename}`),
(0, createNamedImport_1.createNamedImport)([contextHookName, contextTypeName], `./${contextFilename}`),
(0, createNamedImport_1.createNamedImport)(fetcherFn, `./${fetcherFilename}`),
...(0, getUsedImports_1.getUsedImports)(nodes, config.schemasFiles),

@@ -213,37 +124,2 @@ ...nodes,

exports.generateReactQueryComponents = generateReactQueryComponents;
/**
* Create the declaration of the fetcher function.
*
* @returns Array of nodes
*/
const createOperationFetcherFnNodes = ({ dataType, requestBodyType, queryParamsType, pathParamsType, headersType, variablesType, fetcherFn, operation, url, verb, name, }) => {
const nodes = [];
if (operation.description) {
nodes.push(typescript_1.factory.createJSDocComment(operation.description.trim(), []));
}
nodes.push(typescript_1.factory.createVariableStatement([typescript_1.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.factory.createVariableDeclarationList([
typescript_1.factory.createVariableDeclaration(typescript_1.factory.createIdentifier(name), undefined, undefined, typescript_1.factory.createArrowFunction(undefined, undefined, variablesType.kind !== typescript_1.default.SyntaxKind.VoidKeyword
? [
typescript_1.factory.createParameterDeclaration(undefined, undefined, undefined, typescript_1.factory.createIdentifier("variables"), undefined, variablesType, undefined),
]
: [], undefined, typescript_1.factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), typescript_1.factory.createCallExpression(typescript_1.factory.createIdentifier(fetcherFn), [
dataType,
requestBodyType,
headersType,
queryParamsType,
pathParamsType,
], [
typescript_1.factory.createObjectLiteralExpression([
typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier("url"), typescript_1.factory.createStringLiteral(camelizedPathParams(url))),
typescript_1.factory.createPropertyAssignment(typescript_1.factory.createIdentifier("method"), typescript_1.factory.createStringLiteral(verb)),
...(variablesType.kind !== typescript_1.default.SyntaxKind.VoidKeyword
? [
typescript_1.factory.createSpreadAssignment(typescript_1.factory.createIdentifier("variables")),
]
: []),
], false),
]))),
], typescript_1.default.NodeFlags.Const)));
return nodes;
};
const createMutationHook = ({ operationFetcherFnName, contextHookName, dataType, errorType, variablesType, name, operation, }) => {

@@ -324,19 +200,2 @@ const nodes = [];

const createReactQueryImport = () => typescript_1.factory.createImportDeclaration(undefined, undefined, typescript_1.factory.createImportClause(false, undefined, typescript_1.factory.createNamespaceImport(typescript_1.factory.createIdentifier("reactQuery"))), typescript_1.factory.createStringLiteral("react-query"), undefined);
const createNamedImport = (fnName, filename) => {
const fnNames = Array.isArray(fnName) ? fnName : [fnName];
return typescript_1.factory.createImportDeclaration(undefined, undefined, typescript_1.factory.createImportClause(false, undefined, typescript_1.factory.createNamedImports(fnNames.map((name) => typescript_1.factory.createImportSpecifier(false, undefined, typescript_1.factory.createIdentifier(name))))), typescript_1.factory.createStringLiteral(filename), undefined);
};
/**
* Define if the type should be extracted.
*/
const shouldExtractNode = (node) => typescript_1.default.isIntersectionTypeNode(node) ||
(typescript_1.default.isTypeLiteralNode(node) && node.members.length > 0) ||
typescript_1.default.isArrayTypeNode(node);
/**
* Transform url params case to camel.
*
* @example
* `pet/{pet_id}` -> `pet/{petId}`
*/
const camelizedPathParams = (url) => url.replace(/\{\w*\}/g, (match) => `{${c.camel(match)}}`);
//# sourceMappingURL=generateReactQueryComponents.js.map
export { generateSchemaTypes } from "./generators/generateSchemaTypes";
export { generateReactQueryComponents } from "./generators/generateReactQueryComponents";
export { generateFetchers } from "./generators/generateFetchers";
export { renameComponent } from "./utils/renameComponent";
export { forceReactQueryComponent } from "./utils/forceReactQueryComponent";
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.forceReactQueryComponent = exports.renameComponent = exports.generateReactQueryComponents = exports.generateSchemaTypes = void 0;
exports.forceReactQueryComponent = exports.renameComponent = exports.generateFetchers = exports.generateReactQueryComponents = exports.generateSchemaTypes = void 0;
// Generators

@@ -9,2 +9,4 @@ var generateSchemaTypes_1 = require("./generators/generateSchemaTypes");

Object.defineProperty(exports, "generateReactQueryComponents", { enumerable: true, get: function () { return generateReactQueryComponents_1.generateReactQueryComponents; } });
var generateFetchers_1 = require("./generators/generateFetchers");
Object.defineProperty(exports, "generateFetchers", { enumerable: true, get: function () { return generateFetchers_1.generateFetchers; } });
// Utils

@@ -11,0 +13,0 @@ var renameComponent_1 = require("./utils/renameComponent");

/**
* Get fetcher template
*/
export declare const getFetcher: (prefix: string, contextPath: string) => string;
export declare const getFetcher: (prefix: string, contextPath?: string | undefined) => string;

@@ -9,3 +9,5 @@ "use strict";

const getFetcher = (prefix, contextPath) => `import qs from "qs";
import { ${(0, case_1.pascal)(prefix)}Context } from "./${contextPath}";
${contextPath
? `import { ${(0, case_1.pascal)(prefix)}Context } from "./${contextPath}";`
: ""}

@@ -19,3 +21,3 @@ export type ${(0, case_1.pascal)(prefix)}FetcherOptions<TBody, THeaders, TQueryParams, TPathParams> = {

pathParams?: TPathParams;
} & ${(0, case_1.pascal)(prefix)}Context["fetcherOptions"];
}${contextPath ? ` & ${(0, case_1.pascal)(prefix)}Context["fetcherOptions"];` : ""}

@@ -22,0 +24,0 @@ export async function ${(0, case_1.camel)(prefix)}Fetch<

{
"name": "@openapi-codegen/typescript",
"version": "1.0.0",
"version": "1.1.0",
"description": "OpenAPI Codegen typescript generators",

@@ -44,3 +44,3 @@ "main": "lib/index.js",

},
"gitHead": "a1eaff80e3f59d02816e1bbfa3c601eaad3d2388"
"gitHead": "894978115e2235dc5b57665459e3896f82667d69"
}

@@ -103,2 +103,8 @@ # OpenAPI Codegen typescript

### generateFetchers
Generate some generic fetchers, `{filenamePrefix}Fetcher.ts` can be customized to fit your needs.
`{filenamePrefix}Components.ts` will use this fetcher with the OpenAPI types passed as generic.
## Utils

@@ -105,0 +111,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc