@sdk-it/hono 0.40.0 → 0.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -12,11 +12,11 @@ npm install @sdk-it/{hono,generic}
12
12
 
13
13
  ## Runtime Primitives
14
14
 
15
- You can use these functions without the SDK-IT code generation tools, they're completely separate and functional on their own.
15
+ You can use these functions without the SDK-IT code generation tools -- they're completely separate and functional on their own.
16
16
 
17
17
  ### Validator Middleware
18
18
 
19
- The validator middleware offers type-safe request validation using [Zod](https://github.com/colinhacks/zod) schemas. It automatically validates incoming requests against your defined schemas and provides typed inputs to your handlers.
19
+ The validator middleware validates requests against [Zod](https://github.com/colinhacks/zod) schemas and provides typed inputs to your handlers.
20
20
 
21
21
  > [!IMPORTANT]
22
22
  > For openapi generation to work correctly, you must use the `validate` middleware for each route.
@@ -90,7 +90,7 @@ app.post(
90
90
 
91
91
  **Enforcing Content Type:**
92
92
 
93
- The `validate` function can optionally enforce a specific content type before validation.
93
+ Pass a content type as the first argument to enforce it before validation:
94
94
 
95
95
  ```typescript
96
96
  import { z } from 'zod';
@@ -189,7 +189,7 @@ app.post(
189
189
 
190
190
  ### Response Helper
191
191
 
192
- The output function provides a clean API for sending HTTP responses with proper status codes and content types.
192
+ The output function sends HTTP responses with typed status codes and content types.
193
193
 
194
194
  The `output` utility builds on hono's `context.body`.
195
195
 
package/dist/index.js CHANGED
@@ -277,7 +277,7 @@ function getHeaderKeys(headersNode, deriver) {
277
277
  (name) => name.includes("-") ? [`'${name}'`, name] : [name]
278
278
  );
279
279
  }
280
- var newResponse = (handler, deriver, node) => {
280
+ var newResponse = (_handler, deriver, node) => {
281
281
  if (!ts2.isNewExpression(node)) {
282
282
  return [];
283
283
  }
@@ -350,7 +350,7 @@ function defaultResponseAnalyzer(handler, deriver) {
350
350
  visit(handler.body);
351
351
  return responsesList;
352
352
  }
353
- function streamText(handler, deriver) {
353
+ function streamText(_handler, _deriver) {
354
354
  return [
355
355
  {
356
356
  contentType: "text/plain",
@@ -364,7 +364,7 @@ function streamText(handler, deriver) {
364
364
  }
365
365
  ];
366
366
  }
367
- function stream(handler, deriver) {
367
+ function stream(_handler, _deriver) {
368
368
  return [
369
369
  {
370
370
  contentType: "application/octet-stream",
@@ -378,7 +378,7 @@ function stream(handler, deriver) {
378
378
  }
379
379
  ];
380
380
  }
381
- function streamSSE(handler, deriver) {
381
+ function streamSSE(_handler, _deriver) {
382
382
  return [
383
383
  {
384
384
  contentType: "text/event-stream",
@@ -392,7 +392,7 @@ function streamSSE(handler, deriver) {
392
392
  }
393
393
  ];
394
394
  }
395
- var httpException = (handler, deriver, node) => {
395
+ var httpException = (_handler, deriver, node) => {
396
396
  if (ts2.isNewExpression(node)) {
397
397
  const [status, options] = node.arguments ?? [];
398
398
  return [
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/lib/response-analyzer.ts", "../src/lib/constant-value.ts"],
4
- "sourcesContent": ["import ts from 'typescript';\n\nimport {\n $types,\n type NaunceResponseAnalyzerFn,\n type ResponseItem,\n type TypeDeriver,\n} from '@sdk-it/core';\nimport { getConstantValue } from './constant-value.js';\n\nconst handlerVisitor: (\n on: (\n node: ts.Node | undefined,\n statusCode: ts.Node | undefined,\n headers: ts.Node | undefined,\n contentType: string,\n ) => void,\n contextVarName: string,\n) => ts.Visitor = (callback, contextVarName) => {\n return (node: ts.Node) => {\n if (ts.isReturnStatement(node) && node.expression) {\n if (ts.isCallExpression(node.expression)) {\n if (ts.isPropertyAccessExpression(node.expression.expression)) {\n const propAccess = node.expression.expression;\n if (\n ts.isIdentifier(propAccess.expression) &&\n propAccess.expression.text === contextVarName\n ) {\n const [body, statusCode, headers] = node.expression.arguments;\n let contentType = 'application/json';\n const callerMethod = propAccess.name.text;\n if (callerMethod === 'body') {\n contentType = 'application/octet-stream';\n }\n if (!body) {\n contentType = 'empty';\n }\n callback(body, statusCode, headers, contentType);\n }\n }\n // if (ts.isIdentifier(node.expression.expression)) {\n // console.log('streamText');\n // if (node.expression.expression.text === 'streamText') {\n // callback(undefined, undefined, undefined, 'text/plain');\n // }\n // }\n }\n }\n return ts.forEachChild(node, handlerVisitor(callback, contextVarName));\n };\n};\n\nfunction resolveStatusCode(node: ts.Node) {\n if (ts.isNumericLiteral(node)) {\n return node.text;\n }\n throw new Error(`Could not resolve status code`);\n}\n\nfunction normalizeContentType(value: string | undefined) {\n if (!value) {\n return undefined;\n }\n return value.split(';')[0]?.trim();\n}\n\nfunction getPropertyNameText(\n name: ts.PropertyName,\n checker: ts.TypeChecker,\n): string | undefined {\n if (ts.isIdentifier(name)) {\n return name.text;\n }\n if (ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {\n return name.text;\n }\n if (ts.isComputedPropertyName(name)) {\n const expression = name.expression;\n if (ts.isStringLiteral(expression) || ts.isNumericLiteral(expression)) {\n return expression.text;\n }\n const value = getConstantValue(checker, expression);\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value);\n }\n }\n return undefined;\n}\n\nfunction resolveHeadersObject(\n headersNode: ts.Node | undefined,\n checker: ts.TypeChecker,\n): ts.ObjectLiteralExpression | undefined {\n if (!headersNode) {\n return undefined;\n }\n const unwrapObjectLiteral = (\n expression: ts.Expression,\n ): ts.ObjectLiteralExpression | undefined => {\n if (ts.isObjectLiteralExpression(expression)) {\n return expression;\n }\n if (\n ts.isParenthesizedExpression(expression) &&\n ts.isObjectLiteralExpression(expression.expression)\n ) {\n return expression.expression;\n }\n return undefined;\n };\n if (ts.isObjectLiteralExpression(headersNode)) {\n return headersNode;\n }\n if (ts.isAsExpression(headersNode)) {\n return resolveHeadersObject(headersNode.expression, checker);\n }\n if (ts.isTypeAssertionExpression(headersNode)) {\n return resolveHeadersObject(headersNode.expression, checker);\n }\n if (ts.isParenthesizedExpression(headersNode)) {\n return resolveHeadersObject(headersNode.expression, checker);\n }\n if (ts.isNewExpression(headersNode)) {\n const exprName = headersNode.expression.getText();\n if (exprName === 'Headers') {\n const [init] = headersNode.arguments ?? [];\n return init ? resolveHeadersObject(init, checker) : undefined;\n }\n }\n if (ts.isCallExpression(headersNode)) {\n let callee: ts.Expression = headersNode.expression;\n if (ts.isParenthesizedExpression(callee)) {\n callee = callee.expression;\n }\n if (ts.isArrowFunction(callee) || ts.isFunctionExpression(callee)) {\n if (ts.isExpression(callee.body)) {\n const bodyLiteral = unwrapObjectLiteral(callee.body);\n if (bodyLiteral) {\n return bodyLiteral;\n }\n }\n if (ts.isBlock(callee.body)) {\n for (const statement of callee.body.statements) {\n if (\n ts.isReturnStatement(statement) &&\n statement.expression &&\n unwrapObjectLiteral(statement.expression)\n ) {\n return unwrapObjectLiteral(statement.expression);\n }\n }\n }\n }\n }\n if (ts.isShorthandPropertyAssignment(headersNode)) {\n const symbol = checker.getShorthandAssignmentValueSymbol(headersNode);\n const decl = symbol?.valueDeclaration ?? symbol?.declarations?.[0];\n if (decl && ts.isVariableDeclaration(decl) && decl.initializer) {\n return resolveHeadersObject(decl.initializer, checker);\n }\n }\n if (ts.isIdentifier(headersNode)) {\n const symbol = checker.getSymbolAtLocation(headersNode);\n const decl = symbol?.valueDeclaration ?? symbol?.declarations?.[0];\n if (decl && ts.isVariableDeclaration(decl) && decl.initializer) {\n return resolveHeadersObject(decl.initializer, checker);\n }\n }\n return undefined;\n}\n\nfunction getHeaderValue(\n headersNode: ts.Node | undefined,\n headerName: string,\n checker: ts.TypeChecker,\n) {\n const headersObject = resolveHeadersObject(headersNode, checker);\n if (!headersObject) {\n return undefined;\n }\n for (const prop of headersObject.properties) {\n if (!ts.isPropertyAssignment(prop)) {\n continue;\n }\n const key = getPropertyNameText(prop.name, checker);\n if (!key || key.toLowerCase() !== headerName.toLowerCase()) {\n continue;\n }\n const value = getConstantValue(checker, prop.initializer);\n return typeof value === 'string' ? value : undefined;\n }\n return undefined;\n}\n\nfunction hasHeaderKey(\n headersNode: ts.Node | undefined,\n headerName: string,\n checker: ts.TypeChecker,\n) {\n const headersObject = resolveHeadersObject(headersNode, checker);\n if (!headersObject) {\n return false;\n }\n for (const prop of headersObject.properties) {\n if (!ts.isPropertyAssignment(prop)) {\n continue;\n }\n const key = getPropertyNameText(prop.name, checker);\n if (key && key.toLowerCase() === headerName.toLowerCase()) {\n return true;\n }\n }\n return false;\n}\n\nfunction isJsonContentType(contentType: string) {\n return contentType.endsWith('/json') || contentType.endsWith('+json');\n}\n\nfunction isTextContentTypeValue(contentType: string) {\n return contentType.startsWith('text/');\n}\n\nfunction inferContentType(\n body: ts.Node | undefined,\n headers: ts.Node | undefined,\n defaultContentType: string,\n checker: ts.TypeChecker,\n) {\n if (!body) {\n return 'empty';\n }\n const headerContentType = normalizeContentType(\n getHeaderValue(headers, 'Content-Type', checker),\n );\n if (headerContentType) {\n return headerContentType;\n }\n if (hasHeaderKey(headers, 'Content-Disposition', checker)) {\n return 'application/octet-stream';\n }\n return defaultContentType;\n}\n\nfunction getHeaderKeys(headersNode: ts.Node | undefined, deriver: TypeDeriver) {\n if (!headersNode) {\n return [];\n }\n const resolved = resolveHeadersObject(headersNode, deriver.checker);\n if (resolved) {\n return Object.keys(deriver.serializeNode(resolved));\n }\n const type = deriver.checker.getTypeAtLocation(headersNode);\n const names = deriver.checker\n .getPropertiesOfType(type)\n .map((prop) => prop.name);\n if (!names.length) {\n return [];\n }\n const sorted = [...names].sort((a, b) => a.localeCompare(b));\n return sorted.flatMap((name) =>\n name.includes('-') ? [`'${name}'`, name] : [name],\n );\n}\n\nexport const newResponse: NaunceResponseAnalyzerFn = (\n handler,\n deriver,\n node,\n) => {\n if (!ts.isNewExpression(node)) {\n return [];\n }\n const exprName = node.expression.getText();\n if (exprName !== 'Response') {\n return [];\n }\n const [body, init] = node.arguments ?? [];\n let statusNode: ts.Node | undefined;\n let headersNode: ts.Node | undefined;\n if (init && ts.isObjectLiteralExpression(init)) {\n for (const prop of init.properties) {\n if (!ts.isPropertyAssignment(prop)) {\n if (ts.isShorthandPropertyAssignment(prop)) {\n const key = prop.name.text;\n if (key === 'headers') {\n headersNode = prop;\n }\n }\n continue;\n }\n const key = getPropertyNameText(prop.name, deriver.checker);\n if (!key) {\n continue;\n }\n if (key === 'status') {\n statusNode = prop.initializer;\n } else if (key === 'headers') {\n headersNode = prop.initializer;\n }\n }\n }\n\n const contentType = inferContentType(\n body,\n headersNode,\n 'application/octet-stream',\n deriver.checker,\n );\n\n const normalized = contentType.toLowerCase();\n const shouldSerialize =\n !!body &&\n (isJsonContentType(normalized) || isTextContentTypeValue(normalized));\n\n return [\n {\n headers: getHeaderKeys(headersNode, deriver),\n contentType,\n statusCode: statusNode ? resolveStatusCode(statusNode) : '200',\n response: shouldSerialize ? deriver.serializeNode(body) : undefined,\n },\n ];\n};\n\nexport function defaultResponseAnalyzer(\n handler: ts.ArrowFunction | ts.FunctionExpression,\n deriver: TypeDeriver,\n) {\n const responsesList: ResponseItem[] = [];\n if (!handler.parameters.length) {\n return responsesList;\n }\n const contextVarName = handler.parameters[0].name.getText();\n const visit = handlerVisitor((node, statusCode, headers, contentType) => {\n const resolvedContentType = inferContentType(\n node,\n headers,\n contentType,\n deriver.checker,\n );\n responsesList.push({\n headers: getHeaderKeys(headers, deriver),\n contentType: resolvedContentType,\n statusCode: statusCode ? resolveStatusCode(statusCode) : '200',\n response: node ? deriver.serializeNode(node) : undefined,\n });\n }, contextVarName);\n visit(handler.body);\n return responsesList;\n}\n\nexport function streamText(\n handler: ts.ArrowFunction | ts.FunctionExpression,\n deriver: TypeDeriver,\n): ResponseItem[] {\n return [\n {\n contentType: 'text/plain',\n headers: [{ 'Transfer-Encoding': ['chunked'] }],\n statusCode: '200',\n response: {\n optional: false,\n kind: 'primitive',\n [$types]: ['string'],\n },\n },\n ];\n}\n\nexport function stream(\n handler: ts.ArrowFunction | ts.FunctionExpression,\n deriver: TypeDeriver,\n): ResponseItem[] {\n return [\n {\n contentType: 'application/octet-stream',\n headers: [],\n statusCode: '200',\n response: {\n optional: false,\n kind: 'primitive',\n [$types]: ['string'],\n },\n },\n ];\n}\n\nexport function streamSSE(\n handler: ts.ArrowFunction | ts.FunctionExpression,\n deriver: TypeDeriver,\n): ResponseItem[] {\n return [\n {\n contentType: 'text/event-stream',\n headers: [],\n statusCode: '200',\n response: {\n optional: false,\n kind: 'primitive',\n [$types]: ['string'],\n },\n },\n ];\n}\n\nexport const httpException: NaunceResponseAnalyzerFn = (\n handler,\n deriver,\n node,\n) => {\n if (ts.isNewExpression(node)) {\n const [status, options] = node.arguments ?? [];\n // if (!ts.isObjectLiteralExpression(options)) {\n // return [];\n // }\n // const properties = options.properties.reduce<Record<string, string>>(\n // (acc, prop) => {\n // if (ts.isPropertyAssignment(prop)) {\n // const key = prop.name.getText();\n // if (ts.isLiteralExpression(prop.initializer)) {\n // acc[key] = prop.initializer.text;\n // } else {\n // acc[key] = prop.initializer.getText();\n // }\n // }\n // return acc;\n // },\n // {},\n // );\n return [\n {\n contentType: 'application/json',\n headers: [],\n statusCode: resolveStatusCode(status),\n response: options ? deriver.serializeNode(options) : undefined,\n },\n ];\n }\n return [];\n};\n\nexport const responseAnalyzer = {\n default: defaultResponseAnalyzer,\n streamText,\n stream,\n streamSSE,\n 'new.Response': newResponse,\n 'throw.new.HTTPException': httpException,\n};\n\nexport default responseAnalyzer;\n", "import ts from 'typescript';\n\nfunction unwrapExpression(node: ts.Expression): ts.Expression {\n let current = node;\n while (true) {\n if (ts.isAsExpression(current)) {\n current = current.expression;\n continue;\n }\n if (ts.isTypeAssertionExpression(current)) {\n current = current.expression;\n continue;\n }\n if (ts.isParenthesizedExpression(current)) {\n current = current.expression;\n continue;\n }\n return current;\n }\n}\n\nfunction literalValueFromType(\n type: ts.Type,\n checker: ts.TypeChecker,\n): string | number | boolean | undefined {\n if (type.isStringLiteral()) {\n return type.value;\n }\n if (type.isNumberLiteral()) {\n return type.value;\n }\n if (type.flags & ts.TypeFlags.BooleanLiteral) {\n return checker.typeToString(type) === 'true';\n }\n return undefined;\n}\n\nexport function getConstantValue(\n checker: ts.TypeChecker,\n expression: ts.Expression,\n): string | number | boolean | undefined {\n const unwrapped = unwrapExpression(expression);\n\n const constant = checker.getConstantValue(\n unwrapped as\n | ts.EnumMember\n | ts.PropertyAccessExpression\n | ts.ElementAccessExpression,\n );\n if (constant !== undefined) {\n return constant;\n }\n\n if (\n ts.isStringLiteral(unwrapped) ||\n ts.isNoSubstitutionTemplateLiteral(unwrapped)\n ) {\n return unwrapped.text;\n }\n if (ts.isNumericLiteral(unwrapped)) {\n return Number(unwrapped.text);\n }\n if (unwrapped.kind === ts.SyntaxKind.TrueKeyword) {\n return true;\n }\n if (unwrapped.kind === ts.SyntaxKind.FalseKeyword) {\n return false;\n }\n\n const type = checker.getTypeAtLocation(unwrapped);\n const literal = literalValueFromType(type, checker);\n if (literal !== undefined) {\n return literal;\n }\n if (type.isUnion()) {\n let resolved: string | number | boolean | undefined = undefined;\n for (const entry of type.types) {\n const value = literalValueFromType(entry, checker);\n if (value === undefined) {\n return undefined;\n }\n if (resolved === undefined) {\n resolved = value;\n } else if (resolved !== value) {\n return undefined;\n }\n }\n return resolved;\n }\n return undefined;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import ts from 'typescript';\n\nimport {\n $types,\n type NaunceResponseAnalyzerFn,\n type ResponseItem,\n type TypeDeriver,\n} from '@sdk-it/core';\nimport { getConstantValue } from './constant-value.js';\n\nconst handlerVisitor: (\n on: (\n node: ts.Node | undefined,\n statusCode: ts.Node | undefined,\n headers: ts.Node | undefined,\n contentType: string,\n ) => void,\n contextVarName: string,\n) => ts.Visitor = (callback, contextVarName) => {\n return (node: ts.Node) => {\n if (ts.isReturnStatement(node) && node.expression) {\n if (ts.isCallExpression(node.expression)) {\n if (ts.isPropertyAccessExpression(node.expression.expression)) {\n const propAccess = node.expression.expression;\n if (\n ts.isIdentifier(propAccess.expression) &&\n propAccess.expression.text === contextVarName\n ) {\n const [body, statusCode, headers] = node.expression.arguments;\n let contentType = 'application/json';\n const callerMethod = propAccess.name.text;\n if (callerMethod === 'body') {\n contentType = 'application/octet-stream';\n }\n if (!body) {\n contentType = 'empty';\n }\n callback(body, statusCode, headers, contentType);\n }\n }\n // if (ts.isIdentifier(node.expression.expression)) {\n // console.log('streamText');\n // if (node.expression.expression.text === 'streamText') {\n // callback(undefined, undefined, undefined, 'text/plain');\n // }\n // }\n }\n }\n return ts.forEachChild(node, handlerVisitor(callback, contextVarName));\n };\n};\n\nfunction resolveStatusCode(node: ts.Node) {\n if (ts.isNumericLiteral(node)) {\n return node.text;\n }\n throw new Error(`Could not resolve status code`);\n}\n\nfunction normalizeContentType(value: string | undefined) {\n if (!value) {\n return undefined;\n }\n return value.split(';')[0]?.trim();\n}\n\nfunction getPropertyNameText(\n name: ts.PropertyName,\n checker: ts.TypeChecker,\n): string | undefined {\n if (ts.isIdentifier(name)) {\n return name.text;\n }\n if (ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {\n return name.text;\n }\n if (ts.isComputedPropertyName(name)) {\n const expression = name.expression;\n if (ts.isStringLiteral(expression) || ts.isNumericLiteral(expression)) {\n return expression.text;\n }\n const value = getConstantValue(checker, expression);\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value);\n }\n }\n return undefined;\n}\n\nfunction resolveHeadersObject(\n headersNode: ts.Node | undefined,\n checker: ts.TypeChecker,\n): ts.ObjectLiteralExpression | undefined {\n if (!headersNode) {\n return undefined;\n }\n const unwrapObjectLiteral = (\n expression: ts.Expression,\n ): ts.ObjectLiteralExpression | undefined => {\n if (ts.isObjectLiteralExpression(expression)) {\n return expression;\n }\n if (\n ts.isParenthesizedExpression(expression) &&\n ts.isObjectLiteralExpression(expression.expression)\n ) {\n return expression.expression;\n }\n return undefined;\n };\n if (ts.isObjectLiteralExpression(headersNode)) {\n return headersNode;\n }\n if (ts.isAsExpression(headersNode)) {\n return resolveHeadersObject(headersNode.expression, checker);\n }\n if (ts.isTypeAssertionExpression(headersNode)) {\n return resolveHeadersObject(headersNode.expression, checker);\n }\n if (ts.isParenthesizedExpression(headersNode)) {\n return resolveHeadersObject(headersNode.expression, checker);\n }\n if (ts.isNewExpression(headersNode)) {\n const exprName = headersNode.expression.getText();\n if (exprName === 'Headers') {\n const [init] = headersNode.arguments ?? [];\n return init ? resolveHeadersObject(init, checker) : undefined;\n }\n }\n if (ts.isCallExpression(headersNode)) {\n let callee: ts.Expression = headersNode.expression;\n if (ts.isParenthesizedExpression(callee)) {\n callee = callee.expression;\n }\n if (ts.isArrowFunction(callee) || ts.isFunctionExpression(callee)) {\n if (ts.isExpression(callee.body)) {\n const bodyLiteral = unwrapObjectLiteral(callee.body);\n if (bodyLiteral) {\n return bodyLiteral;\n }\n }\n if (ts.isBlock(callee.body)) {\n for (const statement of callee.body.statements) {\n if (\n ts.isReturnStatement(statement) &&\n statement.expression &&\n unwrapObjectLiteral(statement.expression)\n ) {\n return unwrapObjectLiteral(statement.expression);\n }\n }\n }\n }\n }\n if (ts.isShorthandPropertyAssignment(headersNode)) {\n const symbol = checker.getShorthandAssignmentValueSymbol(headersNode);\n const decl = symbol?.valueDeclaration ?? symbol?.declarations?.[0];\n if (decl && ts.isVariableDeclaration(decl) && decl.initializer) {\n return resolveHeadersObject(decl.initializer, checker);\n }\n }\n if (ts.isIdentifier(headersNode)) {\n const symbol = checker.getSymbolAtLocation(headersNode);\n const decl = symbol?.valueDeclaration ?? symbol?.declarations?.[0];\n if (decl && ts.isVariableDeclaration(decl) && decl.initializer) {\n return resolveHeadersObject(decl.initializer, checker);\n }\n }\n return undefined;\n}\n\nfunction getHeaderValue(\n headersNode: ts.Node | undefined,\n headerName: string,\n checker: ts.TypeChecker,\n) {\n const headersObject = resolveHeadersObject(headersNode, checker);\n if (!headersObject) {\n return undefined;\n }\n for (const prop of headersObject.properties) {\n if (!ts.isPropertyAssignment(prop)) {\n continue;\n }\n const key = getPropertyNameText(prop.name, checker);\n if (!key || key.toLowerCase() !== headerName.toLowerCase()) {\n continue;\n }\n const value = getConstantValue(checker, prop.initializer);\n return typeof value === 'string' ? value : undefined;\n }\n return undefined;\n}\n\nfunction hasHeaderKey(\n headersNode: ts.Node | undefined,\n headerName: string,\n checker: ts.TypeChecker,\n) {\n const headersObject = resolveHeadersObject(headersNode, checker);\n if (!headersObject) {\n return false;\n }\n for (const prop of headersObject.properties) {\n if (!ts.isPropertyAssignment(prop)) {\n continue;\n }\n const key = getPropertyNameText(prop.name, checker);\n if (key && key.toLowerCase() === headerName.toLowerCase()) {\n return true;\n }\n }\n return false;\n}\n\nfunction isJsonContentType(contentType: string) {\n return contentType.endsWith('/json') || contentType.endsWith('+json');\n}\n\nfunction isTextContentTypeValue(contentType: string) {\n return contentType.startsWith('text/');\n}\n\nfunction inferContentType(\n body: ts.Node | undefined,\n headers: ts.Node | undefined,\n defaultContentType: string,\n checker: ts.TypeChecker,\n) {\n if (!body) {\n return 'empty';\n }\n const headerContentType = normalizeContentType(\n getHeaderValue(headers, 'Content-Type', checker),\n );\n if (headerContentType) {\n return headerContentType;\n }\n if (hasHeaderKey(headers, 'Content-Disposition', checker)) {\n return 'application/octet-stream';\n }\n return defaultContentType;\n}\n\nfunction getHeaderKeys(headersNode: ts.Node | undefined, deriver: TypeDeriver) {\n if (!headersNode) {\n return [];\n }\n const resolved = resolveHeadersObject(headersNode, deriver.checker);\n if (resolved) {\n return Object.keys(deriver.serializeNode(resolved));\n }\n const type = deriver.checker.getTypeAtLocation(headersNode);\n const names = deriver.checker\n .getPropertiesOfType(type)\n .map((prop) => prop.name);\n if (!names.length) {\n return [];\n }\n const sorted = [...names].sort((a, b) => a.localeCompare(b));\n return sorted.flatMap((name) =>\n name.includes('-') ? [`'${name}'`, name] : [name],\n );\n}\n\nexport const newResponse: NaunceResponseAnalyzerFn = (\n _handler,\n deriver,\n node,\n) => {\n if (!ts.isNewExpression(node)) {\n return [];\n }\n const exprName = node.expression.getText();\n if (exprName !== 'Response') {\n return [];\n }\n const [body, init] = node.arguments ?? [];\n let statusNode: ts.Node | undefined;\n let headersNode: ts.Node | undefined;\n if (init && ts.isObjectLiteralExpression(init)) {\n for (const prop of init.properties) {\n if (!ts.isPropertyAssignment(prop)) {\n if (ts.isShorthandPropertyAssignment(prop)) {\n const key = prop.name.text;\n if (key === 'headers') {\n headersNode = prop;\n }\n }\n continue;\n }\n const key = getPropertyNameText(prop.name, deriver.checker);\n if (!key) {\n continue;\n }\n if (key === 'status') {\n statusNode = prop.initializer;\n } else if (key === 'headers') {\n headersNode = prop.initializer;\n }\n }\n }\n\n const contentType = inferContentType(\n body,\n headersNode,\n 'application/octet-stream',\n deriver.checker,\n );\n\n const normalized = contentType.toLowerCase();\n const shouldSerialize =\n !!body &&\n (isJsonContentType(normalized) || isTextContentTypeValue(normalized));\n\n return [\n {\n headers: getHeaderKeys(headersNode, deriver),\n contentType,\n statusCode: statusNode ? resolveStatusCode(statusNode) : '200',\n response: shouldSerialize ? deriver.serializeNode(body) : undefined,\n },\n ];\n};\n\nexport function defaultResponseAnalyzer(\n handler: ts.ArrowFunction | ts.FunctionExpression,\n deriver: TypeDeriver,\n) {\n const responsesList: ResponseItem[] = [];\n if (!handler.parameters.length) {\n return responsesList;\n }\n const contextVarName = handler.parameters[0].name.getText();\n const visit = handlerVisitor((node, statusCode, headers, contentType) => {\n const resolvedContentType = inferContentType(\n node,\n headers,\n contentType,\n deriver.checker,\n );\n responsesList.push({\n headers: getHeaderKeys(headers, deriver),\n contentType: resolvedContentType,\n statusCode: statusCode ? resolveStatusCode(statusCode) : '200',\n response: node ? deriver.serializeNode(node) : undefined,\n });\n }, contextVarName);\n visit(handler.body);\n return responsesList;\n}\n\nexport function streamText(\n _handler: ts.ArrowFunction | ts.FunctionExpression,\n _deriver: TypeDeriver,\n): ResponseItem[] {\n return [\n {\n contentType: 'text/plain',\n headers: [{ 'Transfer-Encoding': ['chunked'] }],\n statusCode: '200',\n response: {\n optional: false,\n kind: 'primitive',\n [$types]: ['string'],\n },\n },\n ];\n}\n\nexport function stream(\n _handler: ts.ArrowFunction | ts.FunctionExpression,\n _deriver: TypeDeriver,\n): ResponseItem[] {\n return [\n {\n contentType: 'application/octet-stream',\n headers: [],\n statusCode: '200',\n response: {\n optional: false,\n kind: 'primitive',\n [$types]: ['string'],\n },\n },\n ];\n}\n\nexport function streamSSE(\n _handler: ts.ArrowFunction | ts.FunctionExpression,\n _deriver: TypeDeriver,\n): ResponseItem[] {\n return [\n {\n contentType: 'text/event-stream',\n headers: [],\n statusCode: '200',\n response: {\n optional: false,\n kind: 'primitive',\n [$types]: ['string'],\n },\n },\n ];\n}\n\nexport const httpException: NaunceResponseAnalyzerFn = (\n _handler,\n deriver,\n node,\n) => {\n if (ts.isNewExpression(node)) {\n const [status, options] = node.arguments ?? [];\n // if (!ts.isObjectLiteralExpression(options)) {\n // return [];\n // }\n // const properties = options.properties.reduce<Record<string, string>>(\n // (acc, prop) => {\n // if (ts.isPropertyAssignment(prop)) {\n // const key = prop.name.getText();\n // if (ts.isLiteralExpression(prop.initializer)) {\n // acc[key] = prop.initializer.text;\n // } else {\n // acc[key] = prop.initializer.getText();\n // }\n // }\n // return acc;\n // },\n // {},\n // );\n return [\n {\n contentType: 'application/json',\n headers: [],\n statusCode: resolveStatusCode(status),\n response: options ? deriver.serializeNode(options) : undefined,\n },\n ];\n }\n return [];\n};\n\nexport const responseAnalyzer = {\n default: defaultResponseAnalyzer,\n streamText,\n stream,\n streamSSE,\n 'new.Response': newResponse,\n 'throw.new.HTTPException': httpException,\n};\n\nexport default responseAnalyzer;\n", "import ts from 'typescript';\n\nfunction unwrapExpression(node: ts.Expression): ts.Expression {\n let current = node;\n while (true) {\n if (ts.isAsExpression(current)) {\n current = current.expression;\n continue;\n }\n if (ts.isTypeAssertionExpression(current)) {\n current = current.expression;\n continue;\n }\n if (ts.isParenthesizedExpression(current)) {\n current = current.expression;\n continue;\n }\n return current;\n }\n}\n\nfunction literalValueFromType(\n type: ts.Type,\n checker: ts.TypeChecker,\n): string | number | boolean | undefined {\n if (type.isStringLiteral()) {\n return type.value;\n }\n if (type.isNumberLiteral()) {\n return type.value;\n }\n if (type.flags & ts.TypeFlags.BooleanLiteral) {\n return checker.typeToString(type) === 'true';\n }\n return undefined;\n}\n\nexport function getConstantValue(\n checker: ts.TypeChecker,\n expression: ts.Expression,\n): string | number | boolean | undefined {\n const unwrapped = unwrapExpression(expression);\n\n const constant = checker.getConstantValue(\n unwrapped as\n | ts.EnumMember\n | ts.PropertyAccessExpression\n | ts.ElementAccessExpression,\n );\n if (constant !== undefined) {\n return constant;\n }\n\n if (\n ts.isStringLiteral(unwrapped) ||\n ts.isNoSubstitutionTemplateLiteral(unwrapped)\n ) {\n return unwrapped.text;\n }\n if (ts.isNumericLiteral(unwrapped)) {\n return Number(unwrapped.text);\n }\n if (unwrapped.kind === ts.SyntaxKind.TrueKeyword) {\n return true;\n }\n if (unwrapped.kind === ts.SyntaxKind.FalseKeyword) {\n return false;\n }\n\n const type = checker.getTypeAtLocation(unwrapped);\n const literal = literalValueFromType(type, checker);\n if (literal !== undefined) {\n return literal;\n }\n if (type.isUnion()) {\n let resolved: string | number | boolean | undefined = undefined;\n for (const entry of type.types) {\n const value = literalValueFromType(entry, checker);\n if (value === undefined) {\n return undefined;\n }\n if (resolved === undefined) {\n resolved = value;\n } else if (resolved !== value) {\n return undefined;\n }\n }\n return resolved;\n }\n return undefined;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["ts", "ts", "key"]
7
7
  }
@@ -2,9 +2,9 @@ import ts from 'typescript';
2
2
  import { type NaunceResponseAnalyzerFn, type ResponseItem, type TypeDeriver } from '@sdk-it/core';
3
3
  export declare const newResponse: NaunceResponseAnalyzerFn;
4
4
  export declare function defaultResponseAnalyzer(handler: ts.ArrowFunction | ts.FunctionExpression, deriver: TypeDeriver): ResponseItem[];
5
- export declare function streamText(handler: ts.ArrowFunction | ts.FunctionExpression, deriver: TypeDeriver): ResponseItem[];
6
- export declare function stream(handler: ts.ArrowFunction | ts.FunctionExpression, deriver: TypeDeriver): ResponseItem[];
7
- export declare function streamSSE(handler: ts.ArrowFunction | ts.FunctionExpression, deriver: TypeDeriver): ResponseItem[];
5
+ export declare function streamText(_handler: ts.ArrowFunction | ts.FunctionExpression, _deriver: TypeDeriver): ResponseItem[];
6
+ export declare function stream(_handler: ts.ArrowFunction | ts.FunctionExpression, _deriver: TypeDeriver): ResponseItem[];
7
+ export declare function streamSSE(_handler: ts.ArrowFunction | ts.FunctionExpression, _deriver: TypeDeriver): ResponseItem[];
8
8
  export declare const httpException: NaunceResponseAnalyzerFn;
9
9
  export declare const responseAnalyzer: {
10
10
  default: typeof defaultResponseAnalyzer;
@@ -1 +1 @@
1
- {"version":3,"file":"response-analyzer.d.ts","sourceRoot":"","sources":["../../src/lib/response-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAkQtB,eAAO,MAAM,WAAW,EAAE,wBA0DzB,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,EACjD,OAAO,EAAE,WAAW,kBAuBrB;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,EACjD,OAAO,EAAE,WAAW,GACnB,YAAY,EAAE,CAahB;AAED,wBAAgB,MAAM,CACpB,OAAO,EAAE,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,EACjD,OAAO,EAAE,WAAW,GACnB,YAAY,EAAE,CAahB;AAED,wBAAgB,SAAS,CACvB,OAAO,EAAE,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,EACjD,OAAO,EAAE,WAAW,GACnB,YAAY,EAAE,CAahB;AAED,eAAO,MAAM,aAAa,EAAE,wBAkC3B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;CAO5B,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"response-analyzer.d.ts","sourceRoot":"","sources":["../../src/lib/response-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAkQtB,eAAO,MAAM,WAAW,EAAE,wBA0DzB,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,EACjD,OAAO,EAAE,WAAW,kBAuBrB;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,EAClD,QAAQ,EAAE,WAAW,GACpB,YAAY,EAAE,CAahB;AAED,wBAAgB,MAAM,CACpB,QAAQ,EAAE,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,EAClD,QAAQ,EAAE,WAAW,GACpB,YAAY,EAAE,CAahB;AAED,wBAAgB,SAAS,CACvB,QAAQ,EAAE,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,EAClD,QAAQ,EAAE,WAAW,GACpB,YAAY,EAAE,CAahB;AAED,eAAO,MAAM,aAAa,EAAE,wBAkC3B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;CAO5B,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sdk-it/hono",
3
- "version": "0.40.0",
3
+ "version": "0.42.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -27,7 +27,7 @@
27
27
  "!**/*.test.*"
28
28
  ],
29
29
  "dependencies": {
30
- "@sdk-it/core": "0.40.0",
30
+ "@sdk-it/core": "0.42.0",
31
31
  "hono": "^4.7.4",
32
32
  "zod": "^3.25.76 || ^4.0.0",
33
33
  "fast-content-type-parse": "^3.0.0"