@geenius/tools 0.1.0 → 0.3.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.
Files changed (177) hide show
  1. package/package.json +62 -3
  2. package/packages/convex/shared/README.md +1 -1
  3. package/packages/devtools/dist/index.d.ts +204 -0
  4. package/packages/devtools/dist/index.js +186 -0
  5. package/packages/devtools/dist/index.js.map +1 -0
  6. package/packages/devtools/react/README.md +1 -1
  7. package/packages/devtools/solidjs/README.md +1 -1
  8. package/packages/devtools/solidjs/dist/index.js +1830 -0
  9. package/packages/devtools/solidjs/dist/index.js.map +1 -0
  10. package/packages/env/dist/index.d.ts +151 -0
  11. package/packages/env/dist/index.js +93 -0
  12. package/packages/env/dist/index.js.map +1 -0
  13. package/packages/errors/dist/index.d.ts +177 -0
  14. package/packages/errors/dist/index.js +187 -0
  15. package/packages/errors/dist/index.js.map +1 -0
  16. package/packages/errors/react/README.md +1 -1
  17. package/packages/errors/solidjs/README.md +1 -1
  18. package/packages/logger/dist/index.d.ts +171 -0
  19. package/packages/logger/dist/index.js +216 -0
  20. package/packages/logger/dist/index.js.map +1 -0
  21. package/packages/logger/react/README.md +1 -1
  22. package/packages/logger/solidjs/README.md +1 -1
  23. package/packages/perf/dist/index.d.ts +168 -0
  24. package/packages/perf/dist/index.js +265 -0
  25. package/packages/perf/dist/index.js.map +1 -0
  26. package/packages/perf/react/README.md +1 -1
  27. package/packages/perf/solidjs/README.md +1 -1
  28. package/packages/shared/dist/index.d.ts +253 -0
  29. package/packages/shared/dist/index.js +278 -0
  30. package/packages/shared/dist/index.js.map +1 -0
  31. package/.changeset/config.json +0 -11
  32. package/.env.example +0 -2
  33. package/.github/CODEOWNERS +0 -1
  34. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -16
  35. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -11
  36. package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
  37. package/.github/dependabot.yml +0 -11
  38. package/.github/workflows/ci.yml +0 -23
  39. package/.github/workflows/release.yml +0 -29
  40. package/.node-version +0 -1
  41. package/.nvmrc +0 -1
  42. package/.prettierrc +0 -7
  43. package/.project/ACCOUNT.yaml +0 -4
  44. package/.project/IDEAS.yaml +0 -7
  45. package/.project/PROJECT.yaml +0 -11
  46. package/.project/ROADMAP.yaml +0 -15
  47. package/CODE_OF_CONDUCT.md +0 -26
  48. package/CONTRIBUTING.md +0 -69
  49. package/SECURITY.md +0 -18
  50. package/SUPPORT.md +0 -14
  51. package/packages/convex/shared/package.json +0 -42
  52. package/packages/convex/shared/src/audit/index.ts +0 -5
  53. package/packages/convex/shared/src/audit/presets.ts +0 -165
  54. package/packages/convex/shared/src/audit/schema.ts +0 -85
  55. package/packages/convex/shared/src/audit/write.ts +0 -102
  56. package/packages/convex/shared/src/extract.ts +0 -75
  57. package/packages/convex/shared/src/index.ts +0 -41
  58. package/packages/convex/shared/src/messages.ts +0 -45
  59. package/packages/convex/shared/src/security.ts +0 -112
  60. package/packages/convex/shared/src/throw.ts +0 -184
  61. package/packages/convex/shared/src/types.ts +0 -57
  62. package/packages/convex/shared/src/utils.ts +0 -58
  63. package/packages/convex/shared/tsconfig.json +0 -28
  64. package/packages/convex/shared/tsup.config.ts +0 -12
  65. package/packages/devtools/package.json +0 -27
  66. package/packages/devtools/react/package.json +0 -53
  67. package/packages/devtools/react/src/components/DesignPreview.tsx +0 -59
  68. package/packages/devtools/react/src/components/DesignSwitcherDropdown.tsx +0 -99
  69. package/packages/devtools/react/src/components/DevSidebar.tsx +0 -247
  70. package/packages/devtools/react/src/components/DevToolbar.tsx +0 -242
  71. package/packages/devtools/react/src/components/GitHubIssueDialog.tsx +0 -402
  72. package/packages/devtools/react/src/components/InspectorOverlay.tsx +0 -312
  73. package/packages/devtools/react/src/components/PageLoadWaterfall.tsx +0 -144
  74. package/packages/devtools/react/src/components/PerformancePanel.tsx +0 -330
  75. package/packages/devtools/react/src/context/DevModeContext.tsx +0 -226
  76. package/packages/devtools/react/src/context/PerformanceContext.tsx +0 -143
  77. package/packages/devtools/react/src/data/designs.ts +0 -13
  78. package/packages/devtools/react/src/hooks/useGitHubLabels.ts +0 -47
  79. package/packages/devtools/react/src/hooks/useVirtualList.ts +0 -124
  80. package/packages/devtools/react/src/index.ts +0 -77
  81. package/packages/devtools/react/src/panels/ConvexSpy.tsx +0 -130
  82. package/packages/devtools/react/src/panels/DatabaseSeeder.tsx +0 -116
  83. package/packages/devtools/react/src/panels/DevModePhase2.tsx +0 -191
  84. package/packages/devtools/react/src/panels/DevModePhase3.tsx +0 -234
  85. package/packages/devtools/react/src/panels/FeatureFlagsToggle.tsx +0 -104
  86. package/packages/devtools/react/src/panels/QuickRouteJump.tsx +0 -152
  87. package/packages/devtools/react/src/services/github-service.ts +0 -247
  88. package/packages/devtools/react/tsconfig.json +0 -31
  89. package/packages/devtools/react/tsup.config.ts +0 -18
  90. package/packages/devtools/solidjs/package.json +0 -49
  91. package/packages/devtools/solidjs/src/components/DesignPreview.tsx +0 -51
  92. package/packages/devtools/solidjs/src/components/DesignSwitcherDropdown.tsx +0 -95
  93. package/packages/devtools/solidjs/src/components/DevSidebar.tsx +0 -247
  94. package/packages/devtools/solidjs/src/components/DevToolbar.tsx +0 -242
  95. package/packages/devtools/solidjs/src/components/GitHubIssueDialog.tsx +0 -400
  96. package/packages/devtools/solidjs/src/components/InspectorOverlay.tsx +0 -311
  97. package/packages/devtools/solidjs/src/components/PageLoadWaterfall.tsx +0 -144
  98. package/packages/devtools/solidjs/src/components/PerformancePanel.tsx +0 -330
  99. package/packages/devtools/solidjs/src/context/DevModeContext.tsx +0 -216
  100. package/packages/devtools/solidjs/src/context/PerformanceContext.tsx +0 -135
  101. package/packages/devtools/solidjs/src/data/designs.ts +0 -13
  102. package/packages/devtools/solidjs/src/hooks/createGitHubLabels.ts +0 -47
  103. package/packages/devtools/solidjs/src/index.ts +0 -64
  104. package/packages/devtools/solidjs/src/services/github-service.ts +0 -247
  105. package/packages/devtools/solidjs/tsconfig.json +0 -21
  106. package/packages/devtools/src/index.ts +0 -377
  107. package/packages/devtools/tsup.config.ts +0 -12
  108. package/packages/env/package.json +0 -30
  109. package/packages/env/src/index.ts +0 -264
  110. package/packages/env/tsup.config.ts +0 -12
  111. package/packages/errors/package.json +0 -27
  112. package/packages/errors/react/package.json +0 -72
  113. package/packages/errors/react/src/analytics.ts +0 -16
  114. package/packages/errors/react/src/components/ErrorBoundary.tsx +0 -248
  115. package/packages/errors/react/src/components/ErrorDisplay.tsx +0 -328
  116. package/packages/errors/react/src/components/ValidationErrors.tsx +0 -102
  117. package/packages/errors/react/src/config.ts +0 -199
  118. package/packages/errors/react/src/constants.ts +0 -74
  119. package/packages/errors/react/src/hooks/useErrorBoundary.ts +0 -92
  120. package/packages/errors/react/src/hooks/useErrorHandler.ts +0 -87
  121. package/packages/errors/react/src/index.ts +0 -96
  122. package/packages/errors/react/src/types.ts +0 -102
  123. package/packages/errors/react/src/utils/errorMessages.ts +0 -35
  124. package/packages/errors/react/src/utils/errorPolicy.ts +0 -139
  125. package/packages/errors/react/src/utils/extractAppError.ts +0 -174
  126. package/packages/errors/react/src/utils/formatError.ts +0 -112
  127. package/packages/errors/react/tsconfig.json +0 -25
  128. package/packages/errors/react/tsup.config.ts +0 -24
  129. package/packages/errors/solidjs/package.json +0 -46
  130. package/packages/errors/solidjs/src/components/ErrorDisplay.tsx +0 -179
  131. package/packages/errors/solidjs/src/config.ts +0 -98
  132. package/packages/errors/solidjs/src/hooks/createErrorHandler.ts +0 -107
  133. package/packages/errors/solidjs/src/index.ts +0 -61
  134. package/packages/errors/solidjs/src/types.ts +0 -34
  135. package/packages/errors/solidjs/src/utils/errorPolicy.ts +0 -56
  136. package/packages/errors/solidjs/src/utils/extractAppError.ts +0 -94
  137. package/packages/errors/solidjs/src/utils/formatError.ts +0 -33
  138. package/packages/errors/solidjs/tsconfig.json +0 -26
  139. package/packages/errors/solidjs/tsup.config.ts +0 -21
  140. package/packages/errors/src/index.ts +0 -320
  141. package/packages/errors/tsup.config.ts +0 -12
  142. package/packages/logger/package.json +0 -27
  143. package/packages/logger/react/package.json +0 -46
  144. package/packages/logger/react/src/index.ts +0 -4
  145. package/packages/logger/react/src/useMetrics.ts +0 -42
  146. package/packages/logger/react/src/usePerformanceLog.ts +0 -61
  147. package/packages/logger/react/tsconfig.json +0 -31
  148. package/packages/logger/react/tsup.config.ts +0 -12
  149. package/packages/logger/solidjs/package.json +0 -45
  150. package/packages/logger/solidjs/src/createMetrics.ts +0 -37
  151. package/packages/logger/solidjs/src/createPerformanceLog.ts +0 -58
  152. package/packages/logger/solidjs/src/index.ts +0 -4
  153. package/packages/logger/solidjs/tsconfig.json +0 -32
  154. package/packages/logger/solidjs/tsup.config.ts +0 -12
  155. package/packages/logger/src/index.ts +0 -363
  156. package/packages/logger/tsup.config.ts +0 -12
  157. package/packages/perf/package.json +0 -27
  158. package/packages/perf/react/package.json +0 -59
  159. package/packages/perf/react/src/components/PerformanceDashboard.tsx +0 -257
  160. package/packages/perf/react/src/hooks/useMonitoredQuery.ts +0 -89
  161. package/packages/perf/react/src/hooks/usePerformanceMetrics.ts +0 -78
  162. package/packages/perf/react/src/index.ts +0 -33
  163. package/packages/perf/react/src/services/PerformanceMonitor.ts +0 -313
  164. package/packages/perf/react/src/types.ts +0 -77
  165. package/packages/perf/react/tsconfig.json +0 -25
  166. package/packages/perf/react/tsup.config.ts +0 -19
  167. package/packages/perf/solidjs/package.json +0 -41
  168. package/packages/perf/solidjs/src/components/PerformanceDashboard.tsx +0 -207
  169. package/packages/perf/solidjs/src/hooks/createPerformanceMetrics.ts +0 -73
  170. package/packages/perf/solidjs/src/index.ts +0 -31
  171. package/packages/perf/solidjs/src/services/PerformanceMonitor.ts +0 -134
  172. package/packages/perf/solidjs/src/types.ts +0 -78
  173. package/packages/perf/solidjs/tsconfig.json +0 -26
  174. package/packages/perf/solidjs/tsup.config.ts +0 -14
  175. package/packages/perf/src/index.ts +0 -410
  176. package/packages/perf/tsup.config.ts +0 -12
  177. package/pnpm-workspace.yaml +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @geenius/tools-env — Environment variable validation and management\n *\n * Provides schema-based environment variable validation using Zod.\n * Validates at runtime and provides type-safe access to env vars.\n */\n\nimport { z, ZodSchema } from 'zod/v4'\n\n/**\n * Environment variable schema definition\n */\nexport type EnvSchema = Record<string, ZodSchema>\n\n/**\n * Configuration for environment validation\n */\nexport interface EnvConfig {\n /** Whether to throw on validation error (default: true) */\n throw?: boolean\n /** Prefix to add to all env var names (e.g., 'REACT_APP_') */\n prefix?: string\n /** Default values for optional variables */\n defaults?: Record<string, unknown>\n}\n\n/**\n * Validates environment variables against a Zod schema\n *\n * @param schema Zod schema defining expected environment variables\n * @param config Validation configuration options\n * @returns Validated environment variables as typed object\n * @throws Error if validation fails and throw option is true\n *\n * @example\n * ```ts\n * const envSchema = {\n * DATABASE_URL: z.string().url(),\n * API_KEY: z.string(),\n * DEBUG: z.enum(['true', 'false']).optional(),\n * }\n *\n * const env = validateEnv(envSchema, { throw: true })\n * // env is now { DATABASE_URL: string, API_KEY: string, DEBUG?: string }\n * ```\n */\nexport function validateEnv<T extends EnvSchema>(\n schema: T,\n config: EnvConfig = {}\n): Partial<{ [K in keyof T]: unknown }> {\n const { prefix = '', defaults = {}, throw: shouldThrow = true } = config\n\n const envVars: Record<string, unknown> = {}\n\n // Collect env variables with prefix\n for (const key of Object.keys(schema)) {\n const prefixedKey = prefix ? `${prefix}${key}` : key\n const value = process.env[prefixedKey] ?? defaults[key]\n\n if (value !== undefined) {\n envVars[key] = value\n }\n }\n\n // Validate using zod\n const schemaObj = z.object(schema as Record<string, ZodSchema>)\n const result = schemaObj.safeParse(envVars)\n\n if (!result.success) {\n const errors = result.error.issues\n .map((e) => `${e.path.join('.')}: ${e.message}`)\n .join(', ')\n\n const message = `Environment validation failed: ${errors}`\n\n if (shouldThrow) {\n throw new Error(message)\n }\n\n console.error(message)\n return {}\n }\n\n return result.data as Partial<{ [K in keyof T]: unknown }>\n}\n\n/**\n * Creates a reusable environment validator\n *\n * @param schema Zod schema\n * @param config Default configuration\n * @returns Validator function\n *\n * @example\n * ```ts\n * const validator = createEnvValidator(\n * { DATABASE_URL: z.string().url() },\n * { throw: true }\n * )\n * const env = validator()\n * ```\n */\nexport function createEnvValidator<T extends EnvSchema>(\n schema: T,\n config: EnvConfig = {}\n) {\n return () => validateEnv(schema, config)\n}\n\n/**\n * Gets a single environment variable with optional validation\n *\n * @param key Environment variable key\n * @param schema Optional Zod schema for validation\n * @param defaultValue Default value if not found\n * @returns Environment variable value or default\n *\n * @example\n * ```ts\n * const apiKey = getEnv('API_KEY', z.string().min(1))\n * ```\n */\nexport function getEnv<T = string>(\n key: string,\n schema?: ZodSchema,\n defaultValue?: T\n): T | undefined {\n const value = process.env[key] ?? defaultValue\n\n if (!value) return undefined\n\n if (schema) {\n const result = schema.safeParse(value)\n if (!result.success) {\n throw new Error(`Invalid env var ${key}: ${result.error.message}`)\n }\n return result.data as T\n }\n\n return value as T\n}\n\n/**\n * Checks if environment variable exists and is set\n *\n * @param key Variable name\n * @returns True if variable exists\n */\nexport function hasEnv(key: string): boolean {\n return key in process.env\n}\n\n/**\n * Gets multiple environment variables at once\n *\n * @param keys List of environment variable keys\n * @returns Object with available values\n *\n * @example\n * ```ts\n * const { API_KEY, DEBUG } = getEnvs(['API_KEY', 'DEBUG'])\n * ```\n */\nexport function getEnvs(keys: string[]): Record<string, string | undefined> {\n return keys.reduce(\n (acc, key) => {\n acc[key] = process.env[key]\n return acc\n },\n {} as Record<string, string | undefined>\n )\n}\n\n/**\n * Asserts that all required environment variables are set\n *\n * @param requiredKeys List of required variable names\n * @throws Error if any required variable is missing\n *\n * @example\n * ```ts\n * requireEnv(['DATABASE_URL', 'API_KEY'])\n * ```\n */\nexport function requireEnv(requiredKeys: string[]): void {\n const missing = requiredKeys.filter((key) => !(key in process.env))\n\n if (missing.length > 0) {\n throw new Error(\n `Missing required environment variables: ${missing.join(', ')}`\n )\n }\n}\n\n/**\n * Parses environment variable as JSON\n *\n * @param key Environment variable key\n * @param defaultValue Default object if parsing fails\n * @returns Parsed JSON object\n *\n * @example\n * ```ts\n * const config = parseEnvJson('APP_CONFIG', { theme: 'light' })\n * ```\n */\nexport function parseEnvJson<T = unknown>(\n key: string,\n defaultValue?: T\n): T | undefined {\n const value = process.env[key]\n\n if (!value) return defaultValue\n\n try {\n return JSON.parse(value) as T\n } catch {\n console.warn(`Failed to parse ${key} as JSON`)\n return defaultValue\n }\n}\n\n/**\n * Parses environment variable as boolean\n *\n * @param key Environment variable key\n * @param defaultValue Default value\n * @returns Boolean value\n *\n * @example\n * ```ts\n * const debug = parseEnvBool('DEBUG', false)\n * ```\n */\nexport function parseEnvBool(key: string, defaultValue = false): boolean {\n const value = process.env[key]\n\n if (!value) return defaultValue\n\n return ['true', '1', 'yes', 'on'].includes(value.toLowerCase())\n}\n\n/**\n * Parses environment variable as number\n *\n * @param key Environment variable key\n * @param defaultValue Default value\n * @returns Numeric value\n *\n * @example\n * ```ts\n * const port = parseEnvNumber('PORT', 3000)\n * ```\n */\nexport function parseEnvNumber(key: string, defaultValue = 0): number {\n const value = process.env[key]\n\n if (!value) return defaultValue\n\n const num = Number(value)\n return isNaN(num) ? defaultValue : num\n}\n\nexport type { ZodSchema } from 'zod/v4'\n"],"mappings":";AAOA,SAAS,SAAoB;AAuCtB,SAAS,YACd,QACA,SAAoB,CAAC,GACiB;AACtC,QAAM,EAAE,SAAS,IAAI,WAAW,CAAC,GAAG,OAAO,cAAc,KAAK,IAAI;AAElE,QAAM,UAAmC,CAAC;AAG1C,aAAW,OAAO,OAAO,KAAK,MAAM,GAAG;AACrC,UAAM,cAAc,SAAS,GAAG,MAAM,GAAG,GAAG,KAAK;AACjD,UAAM,QAAQ,QAAQ,IAAI,WAAW,KAAK,SAAS,GAAG;AAEtD,QAAI,UAAU,QAAW;AACvB,cAAQ,GAAG,IAAI;AAAA,IACjB;AAAA,EACF;AAGA,QAAM,YAAY,EAAE,OAAO,MAAmC;AAC9D,QAAM,SAAS,UAAU,UAAU,OAAO;AAE1C,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,SAAS,OAAO,MAAM,OACzB,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAC9C,KAAK,IAAI;AAEZ,UAAM,UAAU,kCAAkC,MAAM;AAExD,QAAI,aAAa;AACf,YAAM,IAAI,MAAM,OAAO;AAAA,IACzB;AAEA,YAAQ,MAAM,OAAO;AACrB,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,OAAO;AAChB;AAkBO,SAAS,mBACd,QACA,SAAoB,CAAC,GACrB;AACA,SAAO,MAAM,YAAY,QAAQ,MAAM;AACzC;AAeO,SAAS,OACd,KACA,QACA,cACe;AACf,QAAM,QAAQ,QAAQ,IAAI,GAAG,KAAK;AAElC,MAAI,CAAC,MAAO,QAAO;AAEnB,MAAI,QAAQ;AACV,UAAM,SAAS,OAAO,UAAU,KAAK;AACrC,QAAI,CAAC,OAAO,SAAS;AACnB,YAAM,IAAI,MAAM,mBAAmB,GAAG,KAAK,OAAO,MAAM,OAAO,EAAE;AAAA,IACnE;AACA,WAAO,OAAO;AAAA,EAChB;AAEA,SAAO;AACT;AAQO,SAAS,OAAO,KAAsB;AAC3C,SAAO,OAAO,QAAQ;AACxB;AAaO,SAAS,QAAQ,MAAoD;AAC1E,SAAO,KAAK;AAAA,IACV,CAAC,KAAK,QAAQ;AACZ,UAAI,GAAG,IAAI,QAAQ,IAAI,GAAG;AAC1B,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAaO,SAAS,WAAW,cAA8B;AACvD,QAAM,UAAU,aAAa,OAAO,CAAC,QAAQ,EAAE,OAAO,QAAQ,IAAI;AAElE,MAAI,QAAQ,SAAS,GAAG;AACtB,UAAM,IAAI;AAAA,MACR,2CAA2C,QAAQ,KAAK,IAAI,CAAC;AAAA,IAC/D;AAAA,EACF;AACF;AAcO,SAAS,aACd,KACA,cACe;AACf,QAAM,QAAQ,QAAQ,IAAI,GAAG;AAE7B,MAAI,CAAC,MAAO,QAAO;AAEnB,MAAI;AACF,WAAO,KAAK,MAAM,KAAK;AAAA,EACzB,QAAQ;AACN,YAAQ,KAAK,mBAAmB,GAAG,UAAU;AAC7C,WAAO;AAAA,EACT;AACF;AAcO,SAAS,aAAa,KAAa,eAAe,OAAgB;AACvE,QAAM,QAAQ,QAAQ,IAAI,GAAG;AAE7B,MAAI,CAAC,MAAO,QAAO;AAEnB,SAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,EAAE,SAAS,MAAM,YAAY,CAAC;AAChE;AAcO,SAAS,eAAe,KAAa,eAAe,GAAW;AACpE,QAAM,QAAQ,QAAQ,IAAI,GAAG;AAE7B,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,MAAM,OAAO,KAAK;AACxB,SAAO,MAAM,GAAG,IAAI,eAAe;AACrC;","names":[]}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * @geenius/tools-errors — Structured error handling
3
+ *
4
+ * Provides a hierarchy of typed errors for different error scenarios.
5
+ * Enables consistent error handling and formatting across the Geenius ecosystem.
6
+ */
7
+ /**
8
+ * Error codes for different error types
9
+ */
10
+ declare enum ErrorCode {
11
+ UNKNOWN = "UNKNOWN",
12
+ VALIDATION = "VALIDATION",
13
+ NOT_FOUND = "NOT_FOUND",
14
+ UNAUTHORIZED = "UNAUTHORIZED",
15
+ FORBIDDEN = "FORBIDDEN",
16
+ CONFLICT = "CONFLICT",
17
+ INTERNAL = "INTERNAL",
18
+ INVALID_CREDENTIALS = "INVALID_CREDENTIALS",
19
+ SESSION_EXPIRED = "SESSION_EXPIRED",
20
+ MFA_REQUIRED = "MFA_REQUIRED",
21
+ INVALID_TOKEN = "INVALID_TOKEN",
22
+ DATABASE_ERROR = "DATABASE_ERROR",
23
+ CONSTRAINT_VIOLATION = "CONSTRAINT_VIOLATION",
24
+ NETWORK_ERROR = "NETWORK_ERROR",
25
+ TIMEOUT = "TIMEOUT",
26
+ INVALID_CONFIG = "INVALID_CONFIG",
27
+ MISSING_CONFIG = "MISSING_CONFIG"
28
+ }
29
+ /**
30
+ * Base Geenius error with structured information
31
+ */
32
+ interface GeeniusErrorOptions {
33
+ /** Error code for classification */
34
+ code?: ErrorCode;
35
+ /** User-friendly message */
36
+ message: string;
37
+ /** Technical details */
38
+ cause?: Error | unknown;
39
+ /** HTTP status code equivalent */
40
+ statusCode?: number;
41
+ /** Contextual data */
42
+ context?: Record<string, unknown>;
43
+ /** Whether error should be logged */
44
+ log?: boolean;
45
+ }
46
+ /**
47
+ * Structured error class for Geenius packages
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * throw new GeeniusError({
52
+ * code: ErrorCode.VALIDATION,
53
+ * message: 'Invalid email format',
54
+ * statusCode: 400,
55
+ * context: { field: 'email' }
56
+ * })
57
+ * ```
58
+ */
59
+ declare class GeeniusError extends Error {
60
+ readonly code: ErrorCode;
61
+ readonly statusCode: number;
62
+ readonly context: Record<string, unknown>;
63
+ readonly cause?: Error | unknown;
64
+ readonly log: boolean;
65
+ constructor(options: GeeniusErrorOptions);
66
+ /**
67
+ * Gets HTTP status code for error code
68
+ */
69
+ private getDefaultStatusCode;
70
+ /**
71
+ * Converts error to JSON for serialization
72
+ */
73
+ toJSON(): {
74
+ cause?: Record<string, unknown> | undefined;
75
+ name: string;
76
+ code: ErrorCode;
77
+ message: string;
78
+ statusCode: number;
79
+ context: Record<string, unknown>;
80
+ };
81
+ /**
82
+ * Converts error to string representation
83
+ */
84
+ toString(): string;
85
+ }
86
+ /**
87
+ * Validation error for form/input validation failures
88
+ *
89
+ * @example
90
+ * ```ts
91
+ * throw new ValidationError({
92
+ * message: 'Invalid input',
93
+ * context: { errors: { email: 'Invalid format' } }
94
+ * })
95
+ * ```
96
+ */
97
+ declare class ValidationError extends GeeniusError {
98
+ constructor(options: Omit<GeeniusErrorOptions, 'code' | 'statusCode'>);
99
+ }
100
+ /**
101
+ * Authentication error
102
+ */
103
+ declare class AuthError extends GeeniusError {
104
+ constructor(options: Omit<GeeniusErrorOptions, 'statusCode'>);
105
+ }
106
+ /**
107
+ * Not found error
108
+ */
109
+ declare class NotFoundError extends GeeniusError {
110
+ constructor(options: Omit<GeeniusErrorOptions, 'code' | 'statusCode'>);
111
+ }
112
+ /**
113
+ * Conflict error (e.g., duplicate key)
114
+ */
115
+ declare class ConflictError extends GeeniusError {
116
+ constructor(options: Omit<GeeniusErrorOptions, 'code' | 'statusCode'>);
117
+ }
118
+ /**
119
+ * Formats any error into structured format
120
+ *
121
+ * @param error Error to format
122
+ * @returns Formatted error object
123
+ */
124
+ declare function formatError(error: unknown): Record<string, unknown>;
125
+ /**
126
+ * Type guard to check if error is GeeniusError
127
+ *
128
+ * @param error Error to check
129
+ * @returns True if error is GeeniusError
130
+ */
131
+ declare function isGeeniusError(error: unknown): error is GeeniusError;
132
+ /**
133
+ * Type guard to check if error is a specific error code
134
+ *
135
+ * @param error Error to check
136
+ * @param code Error code to match
137
+ * @returns True if error has specified code
138
+ */
139
+ declare function isErrorCode(error: unknown, code: ErrorCode): boolean;
140
+ /**
141
+ * Wraps a promise to catch and transform errors
142
+ *
143
+ * @param promise Promise to wrap
144
+ * @param handler Error transformation function
145
+ * @returns Promise with transformed errors
146
+ *
147
+ * @example
148
+ * ```ts
149
+ * const result = await catchError(
150
+ * fetchApi(),
151
+ * (err) => new GeeniusError({
152
+ * code: ErrorCode.NETWORK_ERROR,
153
+ * message: 'API request failed',
154
+ * cause: err
155
+ * })
156
+ * )
157
+ * ```
158
+ */
159
+ declare function catchError<T>(promise: Promise<T>, handler: (error: unknown) => Error): Promise<T>;
160
+ /**
161
+ * Creates a safe function that handles errors
162
+ *
163
+ * @param fn Function to wrap
164
+ * @param handler Error transformation
165
+ * @returns Safe version of function
166
+ *
167
+ * @example
168
+ * ```ts
169
+ * const safeOp = makeSafe(
170
+ * (id: string) => db.user.find(id),
171
+ * (err) => new NotFoundError({ message: 'User not found', cause: err })
172
+ * )
173
+ * ```
174
+ */
175
+ declare function makeSafe<T extends (...args: any[]) => any>(fn: T, handler: (error: unknown) => Error): T;
176
+
177
+ export { AuthError, ConflictError, ErrorCode, GeeniusError, type GeeniusErrorOptions, NotFoundError, ValidationError, catchError, formatError, isErrorCode, isGeeniusError, makeSafe };
@@ -0,0 +1,187 @@
1
+ // src/index.ts
2
+ var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => {
3
+ ErrorCode2["UNKNOWN"] = "UNKNOWN";
4
+ ErrorCode2["VALIDATION"] = "VALIDATION";
5
+ ErrorCode2["NOT_FOUND"] = "NOT_FOUND";
6
+ ErrorCode2["UNAUTHORIZED"] = "UNAUTHORIZED";
7
+ ErrorCode2["FORBIDDEN"] = "FORBIDDEN";
8
+ ErrorCode2["CONFLICT"] = "CONFLICT";
9
+ ErrorCode2["INTERNAL"] = "INTERNAL";
10
+ ErrorCode2["INVALID_CREDENTIALS"] = "INVALID_CREDENTIALS";
11
+ ErrorCode2["SESSION_EXPIRED"] = "SESSION_EXPIRED";
12
+ ErrorCode2["MFA_REQUIRED"] = "MFA_REQUIRED";
13
+ ErrorCode2["INVALID_TOKEN"] = "INVALID_TOKEN";
14
+ ErrorCode2["DATABASE_ERROR"] = "DATABASE_ERROR";
15
+ ErrorCode2["CONSTRAINT_VIOLATION"] = "CONSTRAINT_VIOLATION";
16
+ ErrorCode2["NETWORK_ERROR"] = "NETWORK_ERROR";
17
+ ErrorCode2["TIMEOUT"] = "TIMEOUT";
18
+ ErrorCode2["INVALID_CONFIG"] = "INVALID_CONFIG";
19
+ ErrorCode2["MISSING_CONFIG"] = "MISSING_CONFIG";
20
+ return ErrorCode2;
21
+ })(ErrorCode || {});
22
+ var GeeniusError = class _GeeniusError extends Error {
23
+ code;
24
+ statusCode;
25
+ context;
26
+ cause;
27
+ log;
28
+ constructor(options) {
29
+ super(options.message);
30
+ this.name = "GeeniusError";
31
+ this.code = options.code ?? "UNKNOWN" /* UNKNOWN */;
32
+ this.statusCode = options.statusCode ?? this.getDefaultStatusCode(this.code);
33
+ this.context = options.context ?? {};
34
+ this.cause = options.cause;
35
+ this.log = options.log !== false;
36
+ Object.setPrototypeOf(this, _GeeniusError.prototype);
37
+ }
38
+ /**
39
+ * Gets HTTP status code for error code
40
+ */
41
+ getDefaultStatusCode(code) {
42
+ const statusMap = {
43
+ ["UNKNOWN" /* UNKNOWN */]: 500,
44
+ ["VALIDATION" /* VALIDATION */]: 400,
45
+ ["NOT_FOUND" /* NOT_FOUND */]: 404,
46
+ ["UNAUTHORIZED" /* UNAUTHORIZED */]: 401,
47
+ ["FORBIDDEN" /* FORBIDDEN */]: 403,
48
+ ["CONFLICT" /* CONFLICT */]: 409,
49
+ ["INTERNAL" /* INTERNAL */]: 500,
50
+ ["INVALID_CREDENTIALS" /* INVALID_CREDENTIALS */]: 401,
51
+ ["SESSION_EXPIRED" /* SESSION_EXPIRED */]: 401,
52
+ ["MFA_REQUIRED" /* MFA_REQUIRED */]: 403,
53
+ ["INVALID_TOKEN" /* INVALID_TOKEN */]: 401,
54
+ ["DATABASE_ERROR" /* DATABASE_ERROR */]: 500,
55
+ ["CONSTRAINT_VIOLATION" /* CONSTRAINT_VIOLATION */]: 409,
56
+ ["NETWORK_ERROR" /* NETWORK_ERROR */]: 502,
57
+ ["TIMEOUT" /* TIMEOUT */]: 504,
58
+ ["INVALID_CONFIG" /* INVALID_CONFIG */]: 500,
59
+ ["MISSING_CONFIG" /* MISSING_CONFIG */]: 500
60
+ };
61
+ return statusMap[code];
62
+ }
63
+ /**
64
+ * Converts error to JSON for serialization
65
+ */
66
+ toJSON() {
67
+ return {
68
+ name: this.name,
69
+ code: this.code,
70
+ message: this.message,
71
+ statusCode: this.statusCode,
72
+ context: this.context,
73
+ ...this.cause ? { cause: formatError(this.cause) } : {}
74
+ };
75
+ }
76
+ /**
77
+ * Converts error to string representation
78
+ */
79
+ toString() {
80
+ return `${this.name} [${this.code}]: ${this.message}`;
81
+ }
82
+ };
83
+ var ValidationError = class _ValidationError extends GeeniusError {
84
+ constructor(options) {
85
+ super({
86
+ ...options,
87
+ code: "VALIDATION" /* VALIDATION */,
88
+ statusCode: 400
89
+ });
90
+ this.name = "ValidationError";
91
+ Object.setPrototypeOf(this, _ValidationError.prototype);
92
+ }
93
+ };
94
+ var AuthError = class _AuthError extends GeeniusError {
95
+ constructor(options) {
96
+ super({
97
+ ...options,
98
+ code: options.code ?? "INVALID_CREDENTIALS" /* INVALID_CREDENTIALS */,
99
+ statusCode: 401
100
+ });
101
+ this.name = "AuthError";
102
+ Object.setPrototypeOf(this, _AuthError.prototype);
103
+ }
104
+ };
105
+ var NotFoundError = class _NotFoundError extends GeeniusError {
106
+ constructor(options) {
107
+ super({
108
+ ...options,
109
+ code: "NOT_FOUND" /* NOT_FOUND */,
110
+ statusCode: 404
111
+ });
112
+ this.name = "NotFoundError";
113
+ Object.setPrototypeOf(this, _NotFoundError.prototype);
114
+ }
115
+ };
116
+ var ConflictError = class _ConflictError extends GeeniusError {
117
+ constructor(options) {
118
+ super({
119
+ ...options,
120
+ code: "CONFLICT" /* CONFLICT */,
121
+ statusCode: 409
122
+ });
123
+ this.name = "ConflictError";
124
+ Object.setPrototypeOf(this, _ConflictError.prototype);
125
+ }
126
+ };
127
+ function formatError(error) {
128
+ if (error instanceof GeeniusError) {
129
+ return error.toJSON();
130
+ }
131
+ if (error instanceof Error) {
132
+ return {
133
+ name: error.name,
134
+ message: error.message,
135
+ stack: error.stack
136
+ };
137
+ }
138
+ if (typeof error === "string") {
139
+ return { message: error };
140
+ }
141
+ if (typeof error === "object" && error !== null) {
142
+ return error;
143
+ }
144
+ return { message: String(error) };
145
+ }
146
+ function isGeeniusError(error) {
147
+ return error instanceof GeeniusError;
148
+ }
149
+ function isErrorCode(error, code) {
150
+ return isGeeniusError(error) && error.code === code;
151
+ }
152
+ async function catchError(promise, handler) {
153
+ try {
154
+ return await promise;
155
+ } catch (error) {
156
+ throw handler(error);
157
+ }
158
+ }
159
+ function makeSafe(fn, handler) {
160
+ return ((...args) => {
161
+ try {
162
+ const result = fn(...args);
163
+ if (result instanceof Promise) {
164
+ return result.catch((err) => {
165
+ throw handler(err);
166
+ });
167
+ }
168
+ return result;
169
+ } catch (error) {
170
+ throw handler(error);
171
+ }
172
+ });
173
+ }
174
+ export {
175
+ AuthError,
176
+ ConflictError,
177
+ ErrorCode,
178
+ GeeniusError,
179
+ NotFoundError,
180
+ ValidationError,
181
+ catchError,
182
+ formatError,
183
+ isErrorCode,
184
+ isGeeniusError,
185
+ makeSafe
186
+ };
187
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @geenius/tools-errors — Structured error handling\n *\n * Provides a hierarchy of typed errors for different error scenarios.\n * Enables consistent error handling and formatting across the Geenius ecosystem.\n */\n\n/**\n * Error codes for different error types\n */\nexport enum ErrorCode {\n // Generic\n UNKNOWN = 'UNKNOWN',\n VALIDATION = 'VALIDATION',\n NOT_FOUND = 'NOT_FOUND',\n UNAUTHORIZED = 'UNAUTHORIZED',\n FORBIDDEN = 'FORBIDDEN',\n CONFLICT = 'CONFLICT',\n INTERNAL = 'INTERNAL',\n\n // Auth-specific\n INVALID_CREDENTIALS = 'INVALID_CREDENTIALS',\n SESSION_EXPIRED = 'SESSION_EXPIRED',\n MFA_REQUIRED = 'MFA_REQUIRED',\n INVALID_TOKEN = 'INVALID_TOKEN',\n\n // Database\n DATABASE_ERROR = 'DATABASE_ERROR',\n CONSTRAINT_VIOLATION = 'CONSTRAINT_VIOLATION',\n\n // Network\n NETWORK_ERROR = 'NETWORK_ERROR',\n TIMEOUT = 'TIMEOUT',\n\n // Configuration\n INVALID_CONFIG = 'INVALID_CONFIG',\n MISSING_CONFIG = 'MISSING_CONFIG',\n}\n\n/**\n * Base Geenius error with structured information\n */\nexport interface GeeniusErrorOptions {\n /** Error code for classification */\n code?: ErrorCode\n /** User-friendly message */\n message: string\n /** Technical details */\n cause?: Error | unknown\n /** HTTP status code equivalent */\n statusCode?: number\n /** Contextual data */\n context?: Record<string, unknown>\n /** Whether error should be logged */\n log?: boolean\n}\n\n/**\n * Structured error class for Geenius packages\n *\n * @example\n * ```ts\n * throw new GeeniusError({\n * code: ErrorCode.VALIDATION,\n * message: 'Invalid email format',\n * statusCode: 400,\n * context: { field: 'email' }\n * })\n * ```\n */\nexport class GeeniusError extends Error {\n readonly code: ErrorCode\n readonly statusCode: number\n readonly context: Record<string, unknown>\n readonly cause?: Error | unknown\n readonly log: boolean\n\n constructor(options: GeeniusErrorOptions) {\n super(options.message)\n this.name = 'GeeniusError'\n this.code = options.code ?? ErrorCode.UNKNOWN\n this.statusCode = options.statusCode ?? this.getDefaultStatusCode(this.code)\n this.context = options.context ?? {}\n this.cause = options.cause\n this.log = options.log !== false\n\n // Maintain proper prototype chain\n Object.setPrototypeOf(this, GeeniusError.prototype)\n }\n\n /**\n * Gets HTTP status code for error code\n */\n private getDefaultStatusCode(code: ErrorCode): number {\n const statusMap: Record<ErrorCode, number> = {\n [ErrorCode.UNKNOWN]: 500,\n [ErrorCode.VALIDATION]: 400,\n [ErrorCode.NOT_FOUND]: 404,\n [ErrorCode.UNAUTHORIZED]: 401,\n [ErrorCode.FORBIDDEN]: 403,\n [ErrorCode.CONFLICT]: 409,\n [ErrorCode.INTERNAL]: 500,\n [ErrorCode.INVALID_CREDENTIALS]: 401,\n [ErrorCode.SESSION_EXPIRED]: 401,\n [ErrorCode.MFA_REQUIRED]: 403,\n [ErrorCode.INVALID_TOKEN]: 401,\n [ErrorCode.DATABASE_ERROR]: 500,\n [ErrorCode.CONSTRAINT_VIOLATION]: 409,\n [ErrorCode.NETWORK_ERROR]: 502,\n [ErrorCode.TIMEOUT]: 504,\n [ErrorCode.INVALID_CONFIG]: 500,\n [ErrorCode.MISSING_CONFIG]: 500,\n }\n return statusMap[code]\n }\n\n /**\n * Converts error to JSON for serialization\n */\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n statusCode: this.statusCode,\n context: this.context,\n ...(this.cause ? { cause: formatError(this.cause) } : {}),\n }\n }\n\n /**\n * Converts error to string representation\n */\n toString(): string {\n return `${this.name} [${this.code}]: ${this.message}`\n }\n}\n\n/**\n * Validation error for form/input validation failures\n *\n * @example\n * ```ts\n * throw new ValidationError({\n * message: 'Invalid input',\n * context: { errors: { email: 'Invalid format' } }\n * })\n * ```\n */\nexport class ValidationError extends GeeniusError {\n constructor(options: Omit<GeeniusErrorOptions, 'code' | 'statusCode'>) {\n super({\n ...options,\n code: ErrorCode.VALIDATION,\n statusCode: 400,\n })\n this.name = 'ValidationError'\n Object.setPrototypeOf(this, ValidationError.prototype)\n }\n}\n\n/**\n * Authentication error\n */\nexport class AuthError extends GeeniusError {\n constructor(options: Omit<GeeniusErrorOptions, 'statusCode'>) {\n super({\n ...options,\n code: options.code ?? ErrorCode.INVALID_CREDENTIALS,\n statusCode: 401,\n })\n this.name = 'AuthError'\n Object.setPrototypeOf(this, AuthError.prototype)\n }\n}\n\n/**\n * Not found error\n */\nexport class NotFoundError extends GeeniusError {\n constructor(options: Omit<GeeniusErrorOptions, 'code' | 'statusCode'>) {\n super({\n ...options,\n code: ErrorCode.NOT_FOUND,\n statusCode: 404,\n })\n this.name = 'NotFoundError'\n Object.setPrototypeOf(this, NotFoundError.prototype)\n }\n}\n\n/**\n * Conflict error (e.g., duplicate key)\n */\nexport class ConflictError extends GeeniusError {\n constructor(options: Omit<GeeniusErrorOptions, 'code' | 'statusCode'>) {\n super({\n ...options,\n code: ErrorCode.CONFLICT,\n statusCode: 409,\n })\n this.name = 'ConflictError'\n Object.setPrototypeOf(this, ConflictError.prototype)\n }\n}\n\n/**\n * Formats any error into structured format\n *\n * @param error Error to format\n * @returns Formatted error object\n */\nexport function formatError(error: unknown): Record<string, unknown> {\n if (error instanceof GeeniusError) {\n return error.toJSON()\n }\n\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n }\n }\n\n if (typeof error === 'string') {\n return { message: error }\n }\n\n if (typeof error === 'object' && error !== null) {\n return error as Record<string, unknown>\n }\n\n return { message: String(error) }\n}\n\n/**\n * Type guard to check if error is GeeniusError\n *\n * @param error Error to check\n * @returns True if error is GeeniusError\n */\nexport function isGeeniusError(error: unknown): error is GeeniusError {\n return error instanceof GeeniusError\n}\n\n/**\n * Type guard to check if error is a specific error code\n *\n * @param error Error to check\n * @param code Error code to match\n * @returns True if error has specified code\n */\nexport function isErrorCode(error: unknown, code: ErrorCode): boolean {\n return isGeeniusError(error) && error.code === code\n}\n\n/**\n * Wraps a promise to catch and transform errors\n *\n * @param promise Promise to wrap\n * @param handler Error transformation function\n * @returns Promise with transformed errors\n *\n * @example\n * ```ts\n * const result = await catchError(\n * fetchApi(),\n * (err) => new GeeniusError({\n * code: ErrorCode.NETWORK_ERROR,\n * message: 'API request failed',\n * cause: err\n * })\n * )\n * ```\n */\nexport async function catchError<T>(\n promise: Promise<T>,\n handler: (error: unknown) => Error\n): Promise<T> {\n try {\n return await promise\n } catch (error) {\n throw handler(error)\n }\n}\n\n/**\n * Creates a safe function that handles errors\n *\n * @param fn Function to wrap\n * @param handler Error transformation\n * @returns Safe version of function\n *\n * @example\n * ```ts\n * const safeOp = makeSafe(\n * (id: string) => db.user.find(id),\n * (err) => new NotFoundError({ message: 'User not found', cause: err })\n * )\n * ```\n */\nexport function makeSafe<T extends (...args: any[]) => any>(\n fn: T,\n handler: (error: unknown) => Error\n): T {\n return ((...args: any[]) => {\n try {\n const result = fn(...args)\n if (result instanceof Promise) {\n return result.catch((err: unknown) => {\n throw handler(err)\n })\n }\n return result\n } catch (error) {\n throw handler(error)\n }\n }) as T\n}\n"],"mappings":"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","names":["ErrorCode"]}
@@ -1 +1 @@
1
- # ✦ @geenius-tools/errors-react\n\n> React error handling UI — boundaries, displays, analytics dashboard, hooks & utilities\n\n---\n\n## Overview\nBuilt with Steve Jobs-level minimalism and Jony Ive-level craftsmanship, this package is designed to deliver unparalleled developer experience (DX) and rock-solid performance.\n\n## Installation\n\n```bash\npnpm add @geenius-tools/errors-react\n```\n\n## Usage\n\n```typescript\nimport { init } from '@geenius-tools/errors-react';\n\n// Initialize the module with absolute precision\ninit({\n mode: 'premium',\n});\n```\n\n## Architecture\n- **Zero-config**: It just works.\n- **Strictly Typed**: Fully written in TypeScript for flawless IntelliSense.\n- **Framework Agnostic**: seamlessly integrates into the Geenius ecosystem.\n\n---\n\n*Designed by Antigravity HQ*\n
1
+ # ✦ @geenius/tools-errors-react\n\n> React error handling UI — boundaries, displays, analytics dashboard, hooks & utilities\n\n---\n\n## Overview\nBuilt with Steve Jobs-level minimalism and Jony Ive-level craftsmanship, this package is designed to deliver unparalleled developer experience (DX) and rock-solid performance.\n\n## Installation\n\n```bash\npnpm add @geenius/tools-errors-react\n```\n\n## Usage\n\n```typescript\nimport { init } from '@geenius/tools-errors-react';\n\n// Initialize the module with absolute precision\ninit({\n mode: 'premium',\n});\n```\n\n## Architecture\n- **Zero-config**: It just works.\n- **Strictly Typed**: Fully written in TypeScript for flawless IntelliSense.\n- **Framework Agnostic**: seamlessly integrates into the Geenius ecosystem.\n\n---\n\n*Designed by Antigravity HQ*\n
@@ -1 +1 @@
1
- # ✦ @geenius-tools/errors-solidjs\n\n> SolidJS error handling UI — boundaries, displays, hooks & utilities\n\n---\n\n## Overview\nBuilt with Steve Jobs-level minimalism and Jony Ive-level craftsmanship, this package is designed to deliver unparalleled developer experience (DX) and rock-solid performance.\n\n## Installation\n\n```bash\npnpm add @geenius-tools/errors-solidjs\n```\n\n## Usage\n\n```typescript\nimport { init } from '@geenius-tools/errors-solidjs';\n\n// Initialize the module with absolute precision\ninit({\n mode: 'premium',\n});\n```\n\n## Architecture\n- **Zero-config**: It just works.\n- **Strictly Typed**: Fully written in TypeScript for flawless IntelliSense.\n- **Framework Agnostic**: seamlessly integrates into the Geenius ecosystem.\n\n---\n\n*Designed by Antigravity HQ*\n
1
+ # ✦ @geenius/tools-errors-solidjs\n\n> SolidJS error handling UI — boundaries, displays, hooks & utilities\n\n---\n\n## Overview\nBuilt with Steve Jobs-level minimalism and Jony Ive-level craftsmanship, this package is designed to deliver unparalleled developer experience (DX) and rock-solid performance.\n\n## Installation\n\n```bash\npnpm add @geenius/tools-errors-solidjs\n```\n\n## Usage\n\n```typescript\nimport { init } from '@geenius/tools-errors-solidjs';\n\n// Initialize the module with absolute precision\ninit({\n mode: 'premium',\n});\n```\n\n## Architecture\n- **Zero-config**: It just works.\n- **Strictly Typed**: Fully written in TypeScript for flawless IntelliSense.\n- **Framework Agnostic**: seamlessly integrates into the Geenius ecosystem.\n\n---\n\n*Designed by Antigravity HQ*\n
@@ -0,0 +1,171 @@
1
+ /**
2
+ * @geenius/tools-logger — Structured logging
3
+ *
4
+ * Provides structured logging with levels, formatting, and contextual data.
5
+ * Suitable for both client and server environments.
6
+ */
7
+ /**
8
+ * Log levels in order of severity
9
+ */
10
+ declare enum LogLevel {
11
+ DEBUG = 0,
12
+ INFO = 1,
13
+ WARN = 2,
14
+ ERROR = 3,
15
+ FATAL = 4
16
+ }
17
+ /**
18
+ * Log entry structure
19
+ */
20
+ interface LogEntry {
21
+ /** Log level */
22
+ level: LogLevel;
23
+ /** Log message */
24
+ message: string;
25
+ /** Contextual data */
26
+ context?: Record<string, unknown>;
27
+ /** Error object if applicable */
28
+ error?: Error | unknown;
29
+ /** Timestamp */
30
+ timestamp: Date;
31
+ /** Additional metadata */
32
+ metadata?: Record<string, unknown>;
33
+ }
34
+ /**
35
+ * Log formatter function
36
+ */
37
+ type LogFormatter = (entry: LogEntry) => string;
38
+ /**
39
+ * Logger transport (where logs go)
40
+ */
41
+ interface LogTransport {
42
+ /** Log handler function */
43
+ log(entry: LogEntry): void | Promise<void>;
44
+ }
45
+ /**
46
+ * Logger configuration
47
+ */
48
+ interface LoggerConfig {
49
+ /** Minimum log level to output (default: INFO) */
50
+ level?: LogLevel;
51
+ /** Custom formatter (default: pretty print) */
52
+ formatter?: LogFormatter;
53
+ /** Log transports */
54
+ transports?: LogTransport[];
55
+ /** Whether to include timestamps (default: true) */
56
+ timestamps?: boolean;
57
+ /** Whether to include source location (default: false) */
58
+ sourceLocation?: boolean;
59
+ }
60
+ /**
61
+ * Structured logger with context and levels
62
+ *
63
+ * @example
64
+ * ```ts
65
+ * const logger = createLogger({ level: LogLevel.DEBUG })
66
+ *
67
+ * logger.info('User signed in', { userId: '123' })
68
+ * logger.error('Database error', { error })
69
+ * logger.debug('Cache hit', { key: 'user:123' })
70
+ * ```
71
+ */
72
+ declare class Logger {
73
+ private level;
74
+ private formatter;
75
+ private transports;
76
+ private timestamps;
77
+ private sourceLocation;
78
+ private context;
79
+ constructor(config?: LoggerConfig);
80
+ /**
81
+ * Logs with debug level
82
+ */
83
+ debug(message: string, context?: Record<string, unknown>): void;
84
+ /**
85
+ * Logs with info level
86
+ */
87
+ info(message: string, context?: Record<string, unknown>): void;
88
+ /**
89
+ * Logs with warn level
90
+ */
91
+ warn(message: string, context?: Record<string, unknown>): void;
92
+ /**
93
+ * Logs with error level
94
+ */
95
+ error(message: string, error?: Error | unknown, context?: Record<string, unknown>): void;
96
+ /**
97
+ * Logs with fatal level
98
+ */
99
+ fatal(message: string, error?: Error | unknown, context?: Record<string, unknown>): void;
100
+ /**
101
+ * Core logging method
102
+ */
103
+ private log;
104
+ /**
105
+ * Sets context for all subsequent logs
106
+ */
107
+ setContext(key: string, value: unknown): this;
108
+ /**
109
+ * Gets current context
110
+ */
111
+ getContext(): Record<string, unknown>;
112
+ /**
113
+ * Clears context
114
+ */
115
+ clearContext(): this;
116
+ /**
117
+ * Creates a child logger with inherited context
118
+ */
119
+ child(context: Record<string, unknown>): Logger;
120
+ /**
121
+ * Gets source location from stack trace
122
+ */
123
+ private getSourceLocation;
124
+ }
125
+ /**
126
+ * Console transport for logging to stdout/stderr
127
+ */
128
+ declare const consoleTransport: LogTransport;
129
+ /**
130
+ * Creates a new logger instance
131
+ *
132
+ * @param config Logger configuration
133
+ * @returns Configured logger
134
+ *
135
+ * @example
136
+ * ```ts
137
+ * const logger = createLogger({
138
+ * level: LogLevel.DEBUG,
139
+ * timestamps: true
140
+ * })
141
+ * ```
142
+ */
143
+ declare function createLogger(config?: LoggerConfig): Logger;
144
+ /**
145
+ * Gets or creates global logger
146
+ *
147
+ * @param config Configuration for initial creation
148
+ * @returns Global logger instance
149
+ */
150
+ declare function getGlobalLogger(config?: LoggerConfig): Logger;
151
+ /**
152
+ * Resets global logger (for testing)
153
+ */
154
+ declare function resetGlobalLogger(): void;
155
+ /**
156
+ * Memory transport for testing and analysis
157
+ */
158
+ declare class MemoryTransport implements LogTransport {
159
+ private entries;
160
+ log(entry: LogEntry): void;
161
+ /** Gets all logged entries */
162
+ getEntries(): LogEntry[];
163
+ /** Gets entries by level */
164
+ getByLevel(level: LogLevel): LogEntry[];
165
+ /** Clears all entries */
166
+ clear(): void;
167
+ /** Gets count of entries */
168
+ size(): number;
169
+ }
170
+
171
+ export { type LogEntry, type LogFormatter, LogLevel, type LogTransport, Logger, type LoggerConfig, MemoryTransport, consoleTransport, createLogger, getGlobalLogger, resetGlobalLogger };