flexily 0.0.1 → 0.2.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 (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +200 -0
  3. package/dist/classic/layout.d.ts +57 -0
  4. package/dist/classic/layout.d.ts.map +1 -0
  5. package/dist/classic/layout.js +1558 -0
  6. package/dist/classic/layout.js.map +1 -0
  7. package/dist/classic/node.d.ts +648 -0
  8. package/dist/classic/node.d.ts.map +1 -0
  9. package/dist/classic/node.js +1002 -0
  10. package/dist/classic/node.js.map +1 -0
  11. package/dist/constants.d.ts +58 -0
  12. package/dist/constants.d.ts.map +1 -0
  13. package/dist/constants.js +70 -0
  14. package/dist/constants.js.map +1 -0
  15. package/dist/index-classic.d.ts +30 -0
  16. package/dist/index-classic.d.ts.map +1 -0
  17. package/dist/index-classic.js +57 -0
  18. package/dist/index-classic.js.map +1 -0
  19. package/dist/index.d.ts +30 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +57 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/layout-flex-lines.d.ts +77 -0
  24. package/dist/layout-flex-lines.d.ts.map +1 -0
  25. package/dist/layout-flex-lines.js +317 -0
  26. package/dist/layout-flex-lines.js.map +1 -0
  27. package/dist/layout-helpers.d.ts +48 -0
  28. package/dist/layout-helpers.d.ts.map +1 -0
  29. package/dist/layout-helpers.js +108 -0
  30. package/dist/layout-helpers.js.map +1 -0
  31. package/dist/layout-measure.d.ts +25 -0
  32. package/dist/layout-measure.d.ts.map +1 -0
  33. package/dist/layout-measure.js +231 -0
  34. package/dist/layout-measure.js.map +1 -0
  35. package/dist/layout-stats.d.ts +19 -0
  36. package/dist/layout-stats.d.ts.map +1 -0
  37. package/dist/layout-stats.js +37 -0
  38. package/dist/layout-stats.js.map +1 -0
  39. package/dist/layout-traversal.d.ts +28 -0
  40. package/dist/layout-traversal.d.ts.map +1 -0
  41. package/dist/layout-traversal.js +65 -0
  42. package/dist/layout-traversal.js.map +1 -0
  43. package/dist/layout-zero.d.ts +26 -0
  44. package/dist/layout-zero.d.ts.map +1 -0
  45. package/dist/layout-zero.js +1601 -0
  46. package/dist/layout-zero.js.map +1 -0
  47. package/dist/logger.d.ts +14 -0
  48. package/dist/logger.d.ts.map +1 -0
  49. package/dist/logger.js +61 -0
  50. package/dist/logger.js.map +1 -0
  51. package/dist/node-zero.d.ts +702 -0
  52. package/dist/node-zero.d.ts.map +1 -0
  53. package/dist/node-zero.js +1268 -0
  54. package/dist/node-zero.js.map +1 -0
  55. package/dist/testing.d.ts +69 -0
  56. package/dist/testing.d.ts.map +1 -0
  57. package/dist/testing.js +179 -0
  58. package/dist/testing.js.map +1 -0
  59. package/dist/trace.d.ts +74 -0
  60. package/dist/trace.d.ts.map +1 -0
  61. package/dist/trace.js +191 -0
  62. package/dist/trace.js.map +1 -0
  63. package/dist/types.d.ts +170 -0
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +43 -0
  66. package/dist/types.js.map +1 -0
  67. package/dist/utils.d.ts +41 -0
  68. package/dist/utils.d.ts.map +1 -0
  69. package/dist/utils.js +197 -0
  70. package/dist/utils.js.map +1 -0
  71. package/package.json +58 -3
  72. package/src/CLAUDE.md +512 -0
  73. package/src/beorn-logger.d.ts +10 -0
  74. package/src/classic/layout.ts +1783 -0
  75. package/src/classic/node.ts +1121 -0
  76. package/src/constants.ts +81 -0
  77. package/src/index-classic.ts +110 -0
  78. package/src/index.ts +110 -0
  79. package/src/layout-flex-lines.ts +346 -0
  80. package/src/layout-helpers.ts +140 -0
  81. package/src/layout-measure.ts +259 -0
  82. package/src/layout-stats.ts +43 -0
  83. package/src/layout-traversal.ts +70 -0
  84. package/src/layout-zero.ts +1792 -0
  85. package/src/logger.ts +67 -0
  86. package/src/node-zero.ts +1412 -0
  87. package/src/testing.ts +209 -0
  88. package/src/trace.ts +252 -0
  89. package/src/types.ts +229 -0
  90. package/src/utils.ts +217 -0
package/src/logger.ts ADDED
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Logger with auto-detection
3
+ *
4
+ * Uses @beorn/logger if available (when used in km), falls back to debug library.
5
+ * Supports the conditional `?.` pattern for zero-cost when disabled.
6
+ */
7
+
8
+ // Debug library style: (msg, ...args) - printf-style formatting
9
+ type DebugFn = (msg: string, ...args: unknown[]) => void
10
+
11
+ interface ConditionalLogger {
12
+ debug?: DebugFn
13
+ }
14
+
15
+ let _logger: ConditionalLogger | null = null
16
+
17
+ function createFallbackLogger(namespace: string): ConditionalLogger {
18
+ // Dynamic require to avoid bundling debug if not needed
19
+ try {
20
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
21
+ const createDebug = require("debug") as (ns: string) => DebugFn & { enabled: boolean }
22
+ const debug = createDebug(namespace)
23
+ return { debug: debug.enabled ? debug : undefined }
24
+ } catch {
25
+ // debug not installed either
26
+ return { debug: undefined }
27
+ }
28
+ }
29
+
30
+ async function detectLogger(namespace: string): Promise<ConditionalLogger> {
31
+ try {
32
+ const { createLogger } = await import("loggily")
33
+ const logger = createLogger(namespace)
34
+ // Wrap @beorn/logger to accept printf-style args
35
+ if (logger.debug) {
36
+ const originalDebug = logger.debug
37
+ return {
38
+ debug: (msg: string, ...args: unknown[]) => {
39
+ // Format printf-style placeholders
40
+ let i = 0
41
+ const formatted = msg.replace(/%[sdOo]/g, () => {
42
+ const arg = args[i++]
43
+ if (arg === undefined) return ""
44
+ if (arg === null) return "null"
45
+ if (typeof arg === "object") return JSON.stringify(arg)
46
+ return String(arg)
47
+ })
48
+ originalDebug(formatted)
49
+ },
50
+ }
51
+ }
52
+ return { debug: undefined }
53
+ } catch {
54
+ return createFallbackLogger(namespace)
55
+ }
56
+ }
57
+
58
+ // Eagerly initialize (top-level await)
59
+ // This runs once at module load time
60
+ _logger = await detectLogger("flexily:layout")
61
+
62
+ /** Logger instance - use with optional chaining: `log.debug?.('message')` */
63
+ export const log: ConditionalLogger = {
64
+ get debug() {
65
+ return _logger?.debug
66
+ },
67
+ }