版博士V2.0程序
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

125 строки
3.9 KiB

  1. // src/@guards/index.ts
  2. function isBrilliantError(error) {
  3. return error instanceof Error && error.kind === "BrilliantError";
  4. }
  5. // src/@types/BaseBrilliance.ts
  6. var BaseBrilliance = class extends Error {
  7. constructor() {
  8. super(...arguments);
  9. this.kind = "BrilliantError";
  10. }
  11. };
  12. // src/configurators/createError.ts
  13. import callsites from "callsites";
  14. // src/shared/prettyStack.ts
  15. function prettyStack(s) {
  16. return s.map((i) => {
  17. const file = (i.getFileName() || "[file unknown]").split("/").slice(-2).join("/");
  18. const func = i.getFunctionName() || i.getMethodName() || "unknown";
  19. const line = i.getLineNumber();
  20. return ` - ${file}, ${func}()${line ? `, at line ${line}` : ""}`;
  21. }).join("\n");
  22. }
  23. // src/configurators/constructors/standard.ts
  24. var standard_default = (ctx, props) => (message, classification, options) => {
  25. ctx.message = `[ ${classification} ]: ${message}
  26. ${prettyStack(ctx.structuredStack)}`;
  27. ctx.classification = classification;
  28. const parts = classification.split("/");
  29. ctx.code = parts[0];
  30. ctx.subType = parts[1];
  31. if (options?.httpStatusCode || props.configOptions.defaultHttpStatus) {
  32. ctx.httpStatus = options?.httpStatusCode || props.configOptions.defaultHttpStatus;
  33. }
  34. };
  35. // src/configurators/constructors/wrapper.ts
  36. var wrapper_default = (ctx, _props) => (underlying, classification, options) => {
  37. ctx.classification = classification;
  38. if (options?.httpErrorCode) {
  39. ctx.httpStatus = options.httpErrorCode;
  40. }
  41. ctx.message = options?.message ? `${options?.message} [ ${classification} ]: ${underlying.message}
  42. ${prettyStack(
  43. ctx.structuredStack
  44. )}` : `${underlying.message} [ ${classification} ]: wrapped error ${underlying.name}
  45. ${prettyStack(ctx.structuredStack)}`;
  46. ctx.structuredStack = [];
  47. };
  48. // src/configurators/constructors/network.ts
  49. var network_default = (ctx, props) => (code, message, options) => {
  50. ctx.httpStatus = code;
  51. const classification = options?.classification || `${props.configOptions.defaultType || props.app}/${props.configOptions.defaultSubType} || "unspecified"`;
  52. ctx.classification = classification;
  53. ctx.message = `${message} [ ${code}, ${classification} ]
  54. ${prettyStack(
  55. ctx.structuredStack
  56. )}`;
  57. };
  58. // src/configurators/constructors/index.ts
  59. var constructors_default = (ctx, props) => ({
  60. standard: standard_default(ctx, props),
  61. wrapper: wrapper_default(ctx, props),
  62. network: network_default(ctx, props)
  63. });
  64. // src/configurators/createError.ts
  65. var createError = (name, app) => (...types) => (...subTypes) => (...httpCodes) => (configOptions) => {
  66. const ErrorClass = class BrilliantError extends Error {
  67. constructor(...params) {
  68. super("");
  69. this.kind = "BrilliantError";
  70. this.constructorType = configOptions?.constructorType || "standard";
  71. this.name = name;
  72. this.app = app;
  73. this.structuredStack = callsites().slice(1) || [];
  74. this.filename = (this.structuredStack[0].getFileName() || "").split("/").slice(-2).join("/");
  75. this.line = this.structuredStack[0].getLineNumber();
  76. this.fn = this.structuredStack[0].getMethodName() || this.structuredStack[0].getFunctionName();
  77. const c = constructors_default(this, {
  78. name,
  79. app,
  80. types,
  81. subTypes,
  82. httpCodes,
  83. configOptions: configOptions || {}
  84. });
  85. const ctor = c[this.constructorType];
  86. ctor(...params);
  87. }
  88. toJSON() {
  89. return {
  90. app: this.app,
  91. name: this.name,
  92. message: this.message,
  93. classification: this.classification,
  94. httpStatus: this.httpStatus,
  95. code: this.code,
  96. subType: this.subType,
  97. fn: this.fn,
  98. line: this.line
  99. };
  100. }
  101. };
  102. const SpecificGuard = (unknown) => {
  103. return isBrilliantError(unknown) && unknown.name === name && unknown.app === app;
  104. };
  105. return [ErrorClass, SpecificGuard, isBrilliantError];
  106. };
  107. export {
  108. BaseBrilliance,
  109. createError,
  110. isBrilliantError,
  111. prettyStack
  112. };