@sdk-it/hono 0.9.0 → 0.10.2

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/dist/index.js CHANGED
@@ -1,6 +1,8 @@
1
1
  // packages/hono/src/lib/response-analyzer.ts
2
2
  import ts from "typescript";
3
- import { $types } from "@sdk-it/core";
3
+ import {
4
+ $types
5
+ } from "@sdk-it/core";
4
6
  var handlerVisitor = (callback, contextVarName) => {
5
7
  return (node) => {
6
8
  if (ts.isReturnStatement(node) && node.expression) {
@@ -76,13 +78,29 @@ function stream(handler, deriver) {
76
78
  }
77
79
  ];
78
80
  }
81
+ var httpException = (handler, deriver, node) => {
82
+ if (ts.isNewExpression(node)) {
83
+ const [status, options] = node.arguments ?? [];
84
+ return [
85
+ {
86
+ contentType: "application/json",
87
+ headers: [],
88
+ statusCode: resolveStatusCode(status),
89
+ response: options ? deriver.serializeNode(options) : void 0
90
+ }
91
+ ];
92
+ }
93
+ return [];
94
+ };
79
95
  var responseAnalyzer = {
80
96
  default: defaultResponseAnalyzer,
81
97
  streamText,
82
- stream
98
+ stream,
99
+ "throw.new.HTTPException": httpException
83
100
  };
84
101
  export {
85
102
  defaultResponseAnalyzer,
103
+ httpException,
86
104
  responseAnalyzer,
87
105
  stream,
88
106
  streamText
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/lib/response-analyzer.ts"],
4
- "sourcesContent": ["import ts from 'typescript';\n\nimport { $types, type ResponseItem, type TypeDeriver } from '@sdk-it/core';\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 toResponses(handler: ts.ArrowFunction, deriver: TypeDeriver) {\n const contextVarName = handler.parameters[0].name.getText();\n const responsesList: ResponseItem[] = [];\n const visit = handlerVisitor((node, statusCode, headers, contentType) => {\n responsesList.push({\n headers: headers ? Object.keys(deriver.serializeNode(headers)) : [],\n contentType,\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\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\nexport function defaultResponseAnalyzer(\n handler: ts.ArrowFunction,\n deriver: TypeDeriver,\n) {\n return toResponses(handler, deriver);\n}\n\nexport function streamText(\n handler: ts.ArrowFunction,\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,\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 const responseAnalyzer = {\n default: defaultResponseAnalyzer,\n streamText,\n stream,\n};\n"],
5
- "mappings": ";AAAA,OAAO,QAAQ;AAEf,SAAS,cAAmD;AAE5D,IAAM,iBAQY,CAAC,UAAU,mBAAmB;AAC9C,SAAO,CAAC,SAAkB;AACxB,QAAI,GAAG,kBAAkB,IAAI,KAAK,KAAK,YAAY;AACjD,UAAI,GAAG,iBAAiB,KAAK,UAAU,GAAG;AACxC,YAAI,GAAG,2BAA2B,KAAK,WAAW,UAAU,GAAG;AAC7D,gBAAM,aAAa,KAAK,WAAW;AACnC,cACE,GAAG,aAAa,WAAW,UAAU,KACrC,WAAW,WAAW,SAAS,gBAC/B;AACA,kBAAM,CAAC,MAAM,YAAY,OAAO,IAAI,KAAK,WAAW;AACpD,gBAAI,cAAc;AAClB,kBAAM,eAAe,WAAW,KAAK;AACrC,gBAAI,iBAAiB,QAAQ;AAC3B,4BAAc;AAAA,YAChB;AACA,gBAAI,CAAC,MAAM;AACT,4BAAc;AAAA,YAChB;AACA,qBAAS,MAAM,YAAY,SAAS,WAAW;AAAA,UACjD;AAAA,QACF;AAAA,MAOF;AAAA,IACF;AACA,WAAO,GAAG,aAAa,MAAM,eAAe,UAAU,cAAc,CAAC;AAAA,EACvE;AACF;AAEA,SAAS,YAAY,SAA2B,SAAsB;AACpE,QAAM,iBAAiB,QAAQ,WAAW,CAAC,EAAE,KAAK,QAAQ;AAC1D,QAAM,gBAAgC,CAAC;AACvC,QAAM,QAAQ,eAAe,CAAC,MAAM,YAAY,SAAS,gBAAgB;AACvE,kBAAc,KAAK;AAAA,MACjB,SAAS,UAAU,OAAO,KAAK,QAAQ,cAAc,OAAO,CAAC,IAAI,CAAC;AAAA,MAClE;AAAA,MACA,YAAY,aAAa,kBAAkB,UAAU,IAAI;AAAA,MACzD,UAAU,OAAO,QAAQ,cAAc,IAAI,IAAI;AAAA,IACjD,CAAC;AAAA,EACH,GAAG,cAAc;AACjB,QAAM,QAAQ,IAAI;AAClB,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAe;AACxC,MAAI,GAAG,iBAAiB,IAAI,GAAG;AAC7B,WAAO,KAAK;AAAA,EACd;AACA,QAAM,IAAI,MAAM,+BAA+B;AACjD;AAEO,SAAS,wBACd,SACA,SACA;AACA,SAAO,YAAY,SAAS,OAAO;AACrC;AAEO,SAAS,WACd,SACA,SACgB;AAChB,SAAO;AAAA,IACL;AAAA,MACE,aAAa;AAAA,MACb,SAAS,CAAC,EAAE,qBAAqB,CAAC,SAAS,EAAE,CAAC;AAAA,MAC9C,YAAY;AAAA,MACZ,UAAU;AAAA,QACR,UAAU;AAAA,QACV,MAAM;AAAA,QACN,CAAC,MAAM,GAAG,CAAC,QAAQ;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,OACd,SACA,SACgB;AAChB,SAAO;AAAA,IACL;AAAA,MACE,aAAa;AAAA,MACb,SAAS,CAAC;AAAA,MACV,YAAY;AAAA,MACZ,UAAU;AAAA,QACR,UAAU;AAAA,QACV,MAAM;AAAA,QACN,CAAC,MAAM,GAAG,CAAC,QAAQ;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,mBAAmB;AAAA,EAC9B,SAAS;AAAA,EACT;AAAA,EACA;AACF;",
4
+ "sourcesContent": ["import ts from 'typescript';\n\nimport {\n $types,\n type NaunceResponseAnalyzerFn,\n type ResponseItem,\n type TypeDeriver,\n} from '@sdk-it/core';\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 toResponses(handler: ts.ArrowFunction, deriver: TypeDeriver) {\n const contextVarName = handler.parameters[0].name.getText();\n const responsesList: ResponseItem[] = [];\n const visit = handlerVisitor((node, statusCode, headers, contentType) => {\n responsesList.push({\n headers: headers ? Object.keys(deriver.serializeNode(headers)) : [],\n contentType,\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\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\nexport function defaultResponseAnalyzer(\n handler: ts.ArrowFunction,\n deriver: TypeDeriver,\n) {\n return toResponses(handler, deriver);\n}\n\nexport function streamText(\n handler: ts.ArrowFunction,\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,\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 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 'throw.new.HTTPException': httpException,\n};\n"],
5
+ "mappings": ";AAAA,OAAO,QAAQ;AAEf;AAAA,EACE;AAAA,OAIK;AAEP,IAAM,iBAQY,CAAC,UAAU,mBAAmB;AAC9C,SAAO,CAAC,SAAkB;AACxB,QAAI,GAAG,kBAAkB,IAAI,KAAK,KAAK,YAAY;AACjD,UAAI,GAAG,iBAAiB,KAAK,UAAU,GAAG;AACxC,YAAI,GAAG,2BAA2B,KAAK,WAAW,UAAU,GAAG;AAC7D,gBAAM,aAAa,KAAK,WAAW;AACnC,cACE,GAAG,aAAa,WAAW,UAAU,KACrC,WAAW,WAAW,SAAS,gBAC/B;AACA,kBAAM,CAAC,MAAM,YAAY,OAAO,IAAI,KAAK,WAAW;AACpD,gBAAI,cAAc;AAClB,kBAAM,eAAe,WAAW,KAAK;AACrC,gBAAI,iBAAiB,QAAQ;AAC3B,4BAAc;AAAA,YAChB;AACA,gBAAI,CAAC,MAAM;AACT,4BAAc;AAAA,YAChB;AACA,qBAAS,MAAM,YAAY,SAAS,WAAW;AAAA,UACjD;AAAA,QACF;AAAA,MAOF;AAAA,IACF;AACA,WAAO,GAAG,aAAa,MAAM,eAAe,UAAU,cAAc,CAAC;AAAA,EACvE;AACF;AAEA,SAAS,YAAY,SAA2B,SAAsB;AACpE,QAAM,iBAAiB,QAAQ,WAAW,CAAC,EAAE,KAAK,QAAQ;AAC1D,QAAM,gBAAgC,CAAC;AACvC,QAAM,QAAQ,eAAe,CAAC,MAAM,YAAY,SAAS,gBAAgB;AACvE,kBAAc,KAAK;AAAA,MACjB,SAAS,UAAU,OAAO,KAAK,QAAQ,cAAc,OAAO,CAAC,IAAI,CAAC;AAAA,MAClE;AAAA,MACA,YAAY,aAAa,kBAAkB,UAAU,IAAI;AAAA,MACzD,UAAU,OAAO,QAAQ,cAAc,IAAI,IAAI;AAAA,IACjD,CAAC;AAAA,EACH,GAAG,cAAc;AACjB,QAAM,QAAQ,IAAI;AAClB,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAe;AACxC,MAAI,GAAG,iBAAiB,IAAI,GAAG;AAC7B,WAAO,KAAK;AAAA,EACd;AACA,QAAM,IAAI,MAAM,+BAA+B;AACjD;AAEO,SAAS,wBACd,SACA,SACA;AACA,SAAO,YAAY,SAAS,OAAO;AACrC;AAEO,SAAS,WACd,SACA,SACgB;AAChB,SAAO;AAAA,IACL;AAAA,MACE,aAAa;AAAA,MACb,SAAS,CAAC,EAAE,qBAAqB,CAAC,SAAS,EAAE,CAAC;AAAA,MAC9C,YAAY;AAAA,MACZ,UAAU;AAAA,QACR,UAAU;AAAA,QACV,MAAM;AAAA,QACN,CAAC,MAAM,GAAG,CAAC,QAAQ;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,OACd,SACA,SACgB;AAChB,SAAO;AAAA,IACL;AAAA,MACE,aAAa;AAAA,MACb,SAAS,CAAC;AAAA,MACV,YAAY;AAAA,MACZ,UAAU;AAAA,QACR,UAAU;AAAA,QACV,MAAM;AAAA,QACN,CAAC,MAAM,GAAG,CAAC,QAAQ;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,gBAA0C,CACrD,SACA,SACA,SACG;AACH,MAAI,GAAG,gBAAgB,IAAI,GAAG;AAC5B,UAAM,CAAC,QAAQ,OAAO,IAAI,KAAK,aAAa,CAAC;AAkB7C,WAAO;AAAA,MACL;AAAA,QACE,aAAa;AAAA,QACb,SAAS,CAAC;AAAA,QACV,YAAY,kBAAkB,MAAM;AAAA,QACpC,UAAU,UAAU,QAAQ,cAAc,OAAO,IAAI;AAAA,MACvD;AAAA,IACF;AAAA,EACF;AACA,SAAO,CAAC;AACV;AAEO,IAAM,mBAAmB;AAAA,EAC9B,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA,2BAA2B;AAC7B;",
6
6
  "names": []
7
7
  }
@@ -1,11 +1,13 @@
1
1
  import ts from 'typescript';
2
- import { type ResponseItem, type TypeDeriver } from '@sdk-it/core';
2
+ import { type NaunceResponseAnalyzerFn, type ResponseItem, type TypeDeriver } from '@sdk-it/core';
3
3
  export declare function defaultResponseAnalyzer(handler: ts.ArrowFunction, deriver: TypeDeriver): ResponseItem[];
4
4
  export declare function streamText(handler: ts.ArrowFunction, deriver: TypeDeriver): ResponseItem[];
5
5
  export declare function stream(handler: ts.ArrowFunction, deriver: TypeDeriver): ResponseItem[];
6
+ export declare const httpException: NaunceResponseAnalyzerFn;
6
7
  export declare const responseAnalyzer: {
7
8
  default: typeof defaultResponseAnalyzer;
8
9
  streamText: typeof streamText;
9
10
  stream: typeof stream;
11
+ 'throw.new.HTTPException': NaunceResponseAnalyzerFn;
10
12
  };
11
13
  //# sourceMappingURL=response-analyzer.d.ts.map
@@ -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,EAAU,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAkE3E,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,EAAE,CAAC,aAAa,EACzB,OAAO,EAAE,WAAW,kBAGrB;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,EAAE,CAAC,aAAa,EACzB,OAAO,EAAE,WAAW,GACnB,YAAY,EAAE,CAahB;AAED,wBAAgB,MAAM,CACpB,OAAO,EAAE,EAAE,CAAC,aAAa,EACzB,OAAO,EAAE,WAAW,GACnB,YAAY,EAAE,CAahB;AAED,eAAO,MAAM,gBAAgB;;;;CAI5B,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;AAkEtB,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,EAAE,CAAC,aAAa,EACzB,OAAO,EAAE,WAAW,kBAGrB;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,EAAE,CAAC,aAAa,EACzB,OAAO,EAAE,WAAW,GACnB,YAAY,EAAE,CAahB;AAED,wBAAgB,MAAM,CACpB,OAAO,EAAE,EAAE,CAAC,aAAa,EACzB,OAAO,EAAE,WAAW,GACnB,YAAY,EAAE,CAahB;AAED,eAAO,MAAM,aAAa,EAAE,wBAkC3B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;CAK5B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sdk-it/hono",
3
- "version": "0.9.0",
3
+ "version": "0.10.2",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -26,7 +26,7 @@
26
26
  "!**/*.tsbuildinfo"
27
27
  ],
28
28
  "dependencies": {
29
- "@sdk-it/core": "0.9.0",
29
+ "@sdk-it/core": "0.10.2",
30
30
  "hono": "^4.7.4",
31
31
  "typescript": "^5.7.2",
32
32
  "zod": "^3.24.2"