@fulmenhq/tsfulmen 0.3.2 → 0.4.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 (128) hide show
  1. package/CHANGELOG.md +65 -1
  2. package/README.md +30 -1
  3. package/config/crucible-ts/taxonomy/metrics.yaml +1 -1
  4. package/dist/appidentity/index.d.ts +15 -5
  5. package/dist/appidentity/index.js +9 -2204
  6. package/dist/appidentity/index.js.map +1 -1
  7. package/dist/assets/index.d.ts +179 -0
  8. package/dist/assets/index.js +4 -0
  9. package/dist/assets/index.js.map +1 -0
  10. package/dist/bin/prometheus-cli.js +15 -9134
  11. package/dist/bin/prometheus-cli.js.map +1 -1
  12. package/dist/bin/schema-cli.js +4 -6098
  13. package/dist/bin/schema-cli.js.map +1 -1
  14. package/dist/bin/signals-cli.js +15 -1910
  15. package/dist/bin/signals-cli.js.map +1 -1
  16. package/dist/chunk-3HISR2XI.js +36 -0
  17. package/dist/chunk-3HISR2XI.js.map +1 -0
  18. package/dist/chunk-5HZEJGZ5.js +725 -0
  19. package/dist/chunk-5HZEJGZ5.js.map +1 -0
  20. package/dist/chunk-7SVYOPJ3.js +9412 -0
  21. package/dist/chunk-7SVYOPJ3.js.map +1 -0
  22. package/dist/chunk-BCO3FUUO.js +682 -0
  23. package/dist/chunk-BCO3FUUO.js.map +1 -0
  24. package/dist/chunk-BJDL6JEX.js +208 -0
  25. package/dist/chunk-BJDL6JEX.js.map +1 -0
  26. package/dist/chunk-BTUS6PZZ.js +302 -0
  27. package/dist/chunk-BTUS6PZZ.js.map +1 -0
  28. package/dist/chunk-CW4CSNVF.js +410 -0
  29. package/dist/chunk-CW4CSNVF.js.map +1 -0
  30. package/dist/chunk-HIBZ2AY7.js +194 -0
  31. package/dist/chunk-HIBZ2AY7.js.map +1 -0
  32. package/dist/chunk-HS4F3BRR.js +985 -0
  33. package/dist/chunk-HS4F3BRR.js.map +1 -0
  34. package/dist/chunk-HY6JQOFN.js +32 -0
  35. package/dist/chunk-HY6JQOFN.js.map +1 -0
  36. package/dist/chunk-K2FYT43R.js +837 -0
  37. package/dist/chunk-K2FYT43R.js.map +1 -0
  38. package/dist/chunk-K7BMFGQP.js +43 -0
  39. package/dist/chunk-K7BMFGQP.js.map +1 -0
  40. package/dist/chunk-LWAH2UG7.js +103 -0
  41. package/dist/chunk-LWAH2UG7.js.map +1 -0
  42. package/dist/chunk-OHE2AOH4.js +273 -0
  43. package/dist/chunk-OHE2AOH4.js.map +1 -0
  44. package/dist/chunk-P3DNOZOG.js +1488 -0
  45. package/dist/chunk-P3DNOZOG.js.map +1 -0
  46. package/dist/chunk-PQ6TKPUN.js +27 -0
  47. package/dist/chunk-PQ6TKPUN.js.map +1 -0
  48. package/dist/chunk-QCCN6POA.js +211 -0
  49. package/dist/chunk-QCCN6POA.js.map +1 -0
  50. package/dist/chunk-RSLFR4TO.js +631 -0
  51. package/dist/chunk-RSLFR4TO.js.map +1 -0
  52. package/dist/chunk-UP2VWCW5.js +33 -0
  53. package/dist/chunk-UP2VWCW5.js.map +1 -0
  54. package/dist/chunk-W6TQFTTY.js +130 -0
  55. package/dist/chunk-W6TQFTTY.js.map +1 -0
  56. package/dist/chunk-WSMVLWLB.js +269 -0
  57. package/dist/chunk-WSMVLWLB.js.map +1 -0
  58. package/dist/config/index.d.ts +69 -11
  59. package/dist/config/index.js +24 -1227
  60. package/dist/config/index.js.map +1 -1
  61. package/dist/crucible/fulpack/index.js +2 -25
  62. package/dist/crucible/fulpack/index.js.map +1 -1
  63. package/dist/crucible/index.js +13 -1129
  64. package/dist/crucible/index.js.map +1 -1
  65. package/dist/docscribe/index.js +2 -680
  66. package/dist/docscribe/index.js.map +1 -1
  67. package/dist/errors/index.js +5 -1831
  68. package/dist/errors/index.js.map +1 -1
  69. package/dist/errors-D7KXV3QW.js +4 -0
  70. package/dist/errors-D7KXV3QW.js.map +1 -0
  71. package/dist/errors-RBJX6ETJ.js +8 -0
  72. package/dist/errors-RBJX6ETJ.js.map +1 -0
  73. package/dist/export-BWRETGYS.js +6 -0
  74. package/dist/export-BWRETGYS.js.map +1 -0
  75. package/dist/foundry/index.d.ts +1 -1
  76. package/dist/foundry/index.js +340 -3949
  77. package/dist/foundry/index.js.map +1 -1
  78. package/dist/foundry/similarity/index.js +3 -134
  79. package/dist/foundry/similarity/index.js.map +1 -1
  80. package/dist/fulencode/index.js +3 -319
  81. package/dist/fulencode/index.js.map +1 -1
  82. package/dist/fulhash/index.js +3 -611
  83. package/dist/fulhash/index.js.map +1 -1
  84. package/dist/fulpack/index.js +3 -1515
  85. package/dist/fulpack/index.js.map +1 -1
  86. package/dist/hash-YOJYVOWH.js +4 -0
  87. package/dist/hash-YOJYVOWH.js.map +1 -0
  88. package/dist/index.d.ts +2 -2
  89. package/dist/index.js +14 -4390
  90. package/dist/index.js.map +1 -1
  91. package/dist/loader-H5K7HSO5.js +9 -0
  92. package/dist/loader-H5K7HSO5.js.map +1 -0
  93. package/dist/logging/index.js +2 -723
  94. package/dist/logging/index.js.map +1 -1
  95. package/dist/pathfinder/index.js +18 -2341
  96. package/dist/pathfinder/index.js.map +1 -1
  97. package/dist/prom-client-PNEBGD3G.js +4801 -0
  98. package/dist/prom-client-PNEBGD3G.js.map +1 -0
  99. package/dist/reports/license-inventory.csv +1 -1
  100. package/dist/schema/index.d.ts +19 -6
  101. package/dist/schema/index.js +4 -6148
  102. package/dist/schema/index.js.map +1 -1
  103. package/dist/signals/index.d.ts +1 -1
  104. package/dist/signals/index.js +8 -2767
  105. package/dist/signals/index.js.map +1 -1
  106. package/dist/similarity/index.js +3 -134
  107. package/dist/similarity/index.js.map +1 -1
  108. package/dist/telemetry/http/index.js +9 -930
  109. package/dist/telemetry/http/index.js.map +1 -1
  110. package/dist/telemetry/index.js +4 -1561
  111. package/dist/telemetry/index.js.map +1 -1
  112. package/dist/telemetry/prometheus/index.js +7 -8417
  113. package/dist/telemetry/prometheus/index.js.map +1 -1
  114. package/dist/{types-Dv5TERCM.d.ts → types-CHDvDRCf.d.ts} +17 -1
  115. package/dist/validator-U4CKD2Y3.js +6 -0
  116. package/dist/validator-U4CKD2Y3.js.map +1 -0
  117. package/package.json +5 -1
  118. package/schemas/crucible-ts/library/module-manifest/v1.0.0/module-manifest.schema.json +1 -1
  119. package/schemas/crucible-ts/observability/logging/v1.0.0/definitions.schema.json +1 -1
  120. package/schemas/crucible-ts/observability/logging/v1.0.0/log-event.schema.json +13 -13
  121. package/schemas/crucible-ts/observability/logging/v1.0.0/logger-config.schema.json +2 -2
  122. package/schemas/crucible-ts/observability/logging/v1.0.0/logging-policy.schema.json +1 -1
  123. package/schemas/crucible-ts/observability/logging/v1.0.0/middleware-config.schema.json +2 -2
  124. package/schemas/crucible-ts/observability/logging/v1.0.0/severity-filter.schema.json +3 -3
  125. package/schemas/crucible-ts/upstream/3leaps/crucible/PROVENANCE.md +3 -3
  126. package/schemas/crucible-ts/upstream/3leaps/crucible/docs/catalog/classifiers/README.md +1 -1
  127. package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/classifiers-framework.md +1 -1
  128. package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/data-sensitivity-classification.md +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/logging/types.ts","../../src/logging/policy.ts","../../src/logging/sinks.ts","../../src/logging/logger.ts","../../src/logging/middleware.ts","../../src/logging/create-logger.ts","../../src/logging/index.ts"],"names":["LoggingProfile","parseYaml"],"mappings":";;;;;;;;AAOO,IAAK,cAAA,qBAAAA,eAAAA,KAAL;AAUL,EAAAA,gBAAA,QAAA,CAAA,GAAS,QAAA;AAYT,EAAAA,gBAAA,YAAA,CAAA,GAAa,YAAA;AAab,EAAAA,gBAAA,YAAA,CAAA,GAAa,YAAA;AAUb,EAAAA,gBAAA,QAAA,CAAA,GAAS,QAAA;AA7CC,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;AAiML,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA,EACrC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AAAA,EACd;AACF;;;AC1LO,IAAM,iBAAN,MAAqB;AAAA,EACT,MAAA;AAAA,EACA,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQjB,YAAY,UAAA,EAAoB;AAC9B,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,eAAA,CAAgB,SAAyB,OAAA,EAA4C;AAEnF,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,eAAA,CAAgB,QAAA,CAAS,OAAO,CAAA,EAAG;AAClD,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,IAAI,OAAA,EAAS,WAAA,IAAe,IAAA,CAAK,MAAA,CAAO,gBAAA,EAAkB;AACxD,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,QAAQ,WAAW,CAAA;AACjE,MAAA,IAAI,QAAA,IAAY,CAAC,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,EAAG;AAC3C,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,EAAS,OAAA,IAAW,IAAA,CAAK,MAAA,CAAO,gBAAA,EAAkB;AACpD,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,QAAQ,OAAO,CAAA;AACjE,MAAA,IAAI,YAAA,IAAgB,CAAC,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA,EAAG;AACnD,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,kBAAA,CAAmB,SAAiB,WAAA,EAAqC;AAEvE,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,gBAAA,GAAmB,OAAO,CAAA,EAAG;AAC3C,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,OAAO,CAAA;AAGrD,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,gBAAA,GAAmB,WAAW,CAAA,EAAG;AAC/C,QAAA,MAAM,WAAA,GAAc,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,WAAW,CAAA;AAC5D,QAAA,MAAM,aAAA,GAAgB,SAAS,MAAA,CAAO,CAAC,MAAM,WAAA,CAAY,QAAA,CAAS,CAAC,CAAC,CAAA;AAEpE,QAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAE5B,UAAA,OAAO,IAAA,CAAK,0BAA0B,aAAa,CAAA;AAAA,QACrD;AAAA,MACF;AAGA,MAAA,OAAO,IAAA,CAAK,0BAA0B,QAAQ,CAAA;AAAA,IAChD;AAEA,IAAA,MAAM,IAAI,WAAA;AAAA,MACR,CAAA,wCAAA,EAA2C,OAAO,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,CAAA;AAAA,KAClF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,yBAAA,CAA0B,SAAyB,OAAA,EAA2C;AAC5F,IAAA,MAAM,QAAkB,CAAC,CAAA,SAAA,EAAY,OAAO,CAAA,yBAAA,EAA4B,IAAA,CAAK,UAAU,CAAA,EAAA,CAAI,CAAA;AAE3F,IAAA,IAAI,SAAS,WAAA,EAAa;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,OAAA,CAAQ,WAAW,CAAA,CAAE,CAAA;AAAA,IAClD;AAEA,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AAAA,IAC3C;AAEA,IAAA,KAAA,CAAM,IAAA,CAAK,qBAAqB,IAAA,CAAK,MAAA,CAAO,gBAAgB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAExE,IAAA,IAAI,SAAS,WAAA,IAAe,IAAA,CAAK,OAAO,gBAAA,GAAmB,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC/E,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,QAAQ,WAAW,CAAA;AACpE,MAAA,KAAA,CAAM,IAAA,CAAK,gBAAgB,OAAA,CAAQ,WAAW,aAAa,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACrF;AAEA,IAAA,IAAI,SAAS,OAAA,IAAW,IAAA,CAAK,OAAO,gBAAA,GAAmB,OAAA,CAAQ,OAAO,CAAA,EAAG;AACvE,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,QAAQ,OAAO,CAAA;AAChE,MAAA,KAAA,CAAM,IAAA,CAAK,aAAa,OAAA,CAAQ,OAAO,eAAe,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IAChF;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,WAAW,UAAA,EAAmC;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,YAAA,CAAa,UAAA,EAAY,OAAO,CAAA;AAChD,MAAA,MAAM,MAAA,GAASC,MAAU,OAAO,CAAA;AAGhC,MAAA,IAAI,CAAC,OAAO,eAAA,IAAmB,CAAC,MAAM,OAAA,CAAQ,MAAA,CAAO,eAAe,CAAA,EAAG;AACrE,QAAA,MAAM,IAAI,WAAA;AAAA,UACR,uBAAuB,UAAU,CAAA,4CAAA;AAAA,SACnC;AAAA,MACF;AAGA,MAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,cAAc,CAAA;AAClD,MAAA,KAAA,MAAW,OAAA,IAAW,OAAO,eAAA,EAAiB;AAC5C,QAAA,IAAI,CAAC,aAAA,CAAc,QAAA,CAAS,OAAO,CAAA,EAAG;AACpC,UAAA,MAAM,IAAI,WAAA,CAAY,CAAA,oBAAA,EAAuB,UAAU,CAAA,mBAAA,EAAsB,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,QACzF;AAAA,MACF;AAGA,MAAA,IAAI,OAAO,gBAAA,EAAkB;AAC3B,QAAA,IAAI,OAAO,MAAA,CAAO,gBAAA,KAAqB,QAAA,EAAU;AAC/C,UAAA,MAAM,IAAI,WAAA;AAAA,YACR,uBAAuB,UAAU,CAAA,sCAAA;AAAA,WACnC;AAAA,QACF;AAEA,QAAA,KAAA,MAAW,CAAC,SAAS,QAAQ,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,gBAAgB,CAAA,EAAG;AACzE,UAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC5B,YAAA,MAAM,IAAI,WAAA;AAAA,cACR,uBAAuB,UAAU,CAAA,oBAAA,EAAuB,OAAO,CAAA,yBAAA,EAA4B,OAAO,QAAQ,CAAA,6EAAA;AAAA,aAE5G;AAAA,UACF;AAEA,UAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,YAAA,IAAI,CAAC,aAAA,CAAc,QAAA,CAAS,OAAO,CAAA,EAAG;AACpC,cAAA,MAAM,IAAI,WAAA;AAAA,gBACR,CAAA,oBAAA,EAAuB,UAAU,CAAA,oBAAA,EAAuB,OAAO,gCAAgC,OAAO,CAAA,CAAA;AAAA,eACxG;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAGA,MAAA,IAAI,OAAO,gBAAA,EAAkB;AAC3B,QAAA,IAAI,OAAO,MAAA,CAAO,gBAAA,KAAqB,QAAA,EAAU;AAC/C,UAAA,MAAM,IAAI,WAAA;AAAA,YACR,uBAAuB,UAAU,CAAA,sCAAA;AAAA,WACnC;AAAA,QACF;AAEA,QAAA,KAAA,MAAW,CAAC,aAAa,QAAQ,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,gBAAgB,CAAA,EAAG;AAC7E,UAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC5B,YAAA,MAAM,IAAI,WAAA;AAAA,cACR,uBAAuB,UAAU,CAAA,oBAAA,EAAuB,WAAW,CAAA,yBAAA,EAA4B,OAAO,QAAQ,CAAA,6EAAA;AAAA,aAEhH;AAAA,UACF;AAEA,UAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,YAAA,IAAI,CAAC,aAAA,CAAc,QAAA,CAAS,OAAO,CAAA,EAAG;AACpC,cAAA,MAAM,IAAI,WAAA;AAAA,gBACR,CAAA,oBAAA,EAAuB,UAAU,CAAA,oBAAA,EAAuB,WAAW,gCAAgC,OAAO,CAAA,CAAA;AAAA,eAC5G;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,WAAA,EAAa;AAChC,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,IAAK,KAAA,CAAgC,SAAS,QAAA,EAAU;AACtD,QAAA,MAAM,IAAI,WAAA,CAAY,CAAA,uBAAA,EAA0B,UAAU,CAAA,CAAE,CAAA;AAAA,MAC9D;AAEA,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,CAAA,2BAAA,EAA8B,UAAU,CAAA,EAAA,EAAM,KAAA,CAAgB,OAAO,CAAA;AAAA,OACvE;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,0BAA0B,QAAA,EAA4C;AAC5E,IAAA,MAAM,KAAA,GAAQ;AAAA,MAAA,QAAA;AAAA,MAAA,YAAA;AAAA,MAAA,YAAA;AAAA,MAAA,QAAA;AAAA,KAKd;AAEA,IAAA,KAAA,MAAW,WAAW,KAAA,EAAO;AAC3B,MAAA,IAAI,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,EAAG;AAC9B,QAAA,OAAO,OAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,OAAO,SAAS,CAAC,CAAA;AAAA,EACnB;AACF;AC5PO,IAAM,cAAN,MAAkC;AAAA,EACvC,MAAM,KAAA,EAAuB;AAC3B,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EACnC;AACF;AAKO,IAAM,WAAN,MAA+B;AAAA,EACpC,YAA6B,QAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAAmB;AAAA,EAEhD,MAAM,KAAA,EAAuB;AAC3B,IAAA,IAAI;AACF,MAAA,cAAA,CAAe,KAAK,QAAA,EAAU,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC;AAAA,CAAI,CAAA;AAAA,IAC5D,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,MAAM,CAAA,6BAAA,EAAgC,IAAA,CAAK,QAAQ,CAAA,CAAA,CAAA,EAAM,MAAgB,OAAO,CAAA;AAExF,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,IACnC;AAAA,EACF;AACF;AAKO,IAAM,WAAN,MAA+B;AAAA,EACpC,MAAM,MAAA,EAAwB;AAAA,EAE9B;AACF;;;ACnBO,IAAM,SAAN,MAAa;AAAA,EACD,OAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EAEjB,YAAY,MAAA,EAAsB;AAChC,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,OAAA;AACtB,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,OAAA;AAGtB,IAAA,IAAI,OAAO,UAAA,EAAY;AACrB,MAAA,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,OAAA,EAAS,MAAA,CAAO,UAAU,CAAA;AAAA,IACvD;AAGA,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,oBAAA,CAAqB,MAAM,CAAA;AAAA,EAC9C;AAAA,EAEA,KAAA,CAAM,SAAiB,OAAA,EAA4B;AACjD,IAAA,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,OAAO,CAAA;AAAA,EAClC;AAAA,EAEA,IAAA,CAAK,SAAiB,OAAA,EAA4B;AAChD,IAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AAAA,EACjC;AAAA,EAEA,IAAA,CAAK,SAAiB,OAAA,EAA4B;AAChD,IAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AAAA,EACjC;AAAA,EAEA,KAAA,CAAM,OAAA,EAAiB,KAAA,EAAe,OAAA,EAA4B;AAChE,IAAA,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,KAAA,EAAO,OAAO,CAAA;AAAA,EACzC;AAAA,EAEA,MAAM,QAAA,EAA2C;AAC/C,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AACtC,IAAA,WAAA,CAAY,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AAC3C,IAAA,OAAO,WAAA;AAAA,EACT;AAAA,EAEQ,cAAA,CAAe,SAAyB,UAAA,EAA0B;AACxE,IAAA,MAAM,QAAA,GAAW,IAAI,cAAA,CAAe,UAAU,CAAA;AAC9C,IAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,QAAA;AAC5B,IAAA,MAAM,WAAA,GAAc,QAAQ,GAAA,CAAI,QAAA;AAEhC,IAAA,IAAI,CAAC,SAAS,eAAA,CAAgB,OAAA,EAAS,EAAE,OAAA,EAAS,WAAA,EAAa,CAAA,EAAG;AAChE,MAAA,MAAM,IAAI,YAAY,QAAA,CAAS,yBAAA,CAA0B,SAAS,EAAE,OAAA,EAAS,WAAA,EAAa,CAAC,CAAA;AAAA,IAC7F;AAAA,EACF;AAAA,EAEQ,qBAAqB,MAAA,EAA4C;AACvE,IAAA,QAAQ,OAAO,OAAA;AAAS,MACtB,KAAA,QAAA;AACE,QAAA,OAAO,IAAI,YAAA,CAAa,MAAA,CAAO,OAAO,CAAA;AAAA,MACxC,KAAA,YAAA,mBAAgC;AAC9B,QAAA,MAAM,gBAAA,GAAmB,MAAA;AAIzB,QAAA,OAAO,IAAI,gBAAA;AAAA,UACT,gBAAA,CAAiB,OAAA;AAAA,UACjB,gBAAA,CAAiB,QAAA;AAAA,UACjB,gBAAA,CAAiB;AAAA,SACnB;AAAA,MACF;AAAA,MACA,KAAA,YAAA;AACE,QAAA,OAAO,IAAI,gBAAA,CAAiB,MAAA,CAAO,OAAA,EAAS;AAAA;AAAA,UAE1C,OAAQ,MAAA,CAAe,KAAA;AAAA;AAAA,UAEvB,YAAa,MAAA,CAAe;AAAA,SAC7B,CAAA;AAAA,MACH,KAAA,QAAA;AAEE,QAAA,OAAO,IAAI,gBAAA,CAAiB,MAAA,CAAO,OAAA,EAAU,OAAe,YAAY,CAAA;AAAA;AAC5E,EACF;AACF;AAKA,IAAM,eAAN,MAAmD;AAAA,EAGjD,YAA6B,OAAA,EAAiB;AAAjB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAC3B,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK;AAAA,MACf,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO,OAAA;AAAA,MACP,UAAA,EAAY,SAAA;AAAA,MACZ,IAAA,EAAM,MAAA;AAAA,MACN,SAAA,EAAW,KAAA;AAAA,MACX,UAAA,EAAY;AAAA,QACV,OAAO,CAAC,KAAA,MAAmB,EAAE,QAAA,EAAU,KAAA,CAAM,aAAY,EAAE,CAAA;AAAA;AAAA,QAE3D,GAAA,EAAK,CAAC,MAAA,KAAgB;AACpB,UAAA,OAAO;AAAA,YACL,SAAS,IAAA,CAAK,OAAA;AAAA,YACd,GAAG;AAAA,WACL;AAAA,QACF;AAAA;AACF,KACD,CAAA;AAAA,EACH;AAAA,EApBiB,IAAA;AAAA,EAsBjB,KAAA,CAAM,SAAiB,OAAA,EAA4B;AACjD,IAAA,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,OAAO,CAAA;AAAA,EAClC;AAAA,EAEA,IAAA,CAAK,SAAiB,OAAA,EAA4B;AAChD,IAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AAAA,EACjC;AAAA,EAEA,IAAA,CAAK,SAAiB,OAAA,EAA4B;AAChD,IAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AAAA,EACjC;AAAA,EAEA,KAAA,CAAM,OAAA,EAAiB,KAAA,EAAe,OAAA,EAA4B;AAChE,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,GAAG,OAAA;AAAA,MACH,GAAI,SAAS,EAAE,KAAA,EAAO,MAAM,OAAA,EAAS,KAAA,EAAO,MAAM,KAAA;AAAM,KAC1D;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,YAAA,EAAc,OAAO,CAAA;AAAA,EACvC;AAAA,EAEA,MAAM,QAAA,EAAyD;AAC7D,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AAC1C,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AACtC,IAAA,WAAA,CAAY,IAAA,GAAO,SAAA;AACnB,IAAA,OAAO,WAAA;AAAA,EACT;AACF,CAAA;AAKA,IAAM,gBAAA,GAAN,MAAM,iBAAA,CAAiD;AAAA,EAKrD,WAAA,CACmB,OAAA,EACR,QAAA,EACT,UAAA,EACA,UACA,YAAA,EACA;AALiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACR,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAKT,IAAA,IAAA,CAAK,UAAA,GAAa,cAAc,EAAC;AACjC,IAAA,IAAA,CAAK,QAAA,GAAW,YAAY,EAAC;AAE7B,IAAA,MAAM,MAAA,GAA6B;AAAA,MACjC,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO,OAAA;AAAA,MACP,UAAA,EAAY,SAAA;AAAA,MACZ,IAAA,EAAM,MAAA;AAAA,MACN,WAAW,MAAM,CAAA,cAAA,EAAA,qBAAqB,IAAA,EAAK,EAAE,aAAa,CAAA,CAAA,CAAA;AAAA,MAC1D,UAAA,EAAY;AAAA,QACV,OAAO,CAAC,KAAA,MAAmB,EAAE,QAAA,EAAU,KAAA,CAAM,aAAY,EAAE,CAAA;AAAA;AAAA,QAE3D,GAAA,EAAK,CAAC,MAAA,KAAgB;AACpB,UAAA,OAAO;AAAA,YACL,SAAS,IAAA,CAAK,OAAA;AAAA,YACd,GAAG;AAAA,WACL;AAAA,QACF;AAAA;AACF,KACF;AAGA,IAAA,IAAA,CAAK,IAAA,GACH,iBACC,QAAA,GACG,IAAA;AAAA,MACE,MAAA;AAAA,MACA,IAAA,CAAK,WAAA,CAAY,CAAC,EAAE,QAAQ,OAAA,CAAQ,MAAA,EAAO,EAAG,EAAE,QAAQ,IAAA,CAAK,WAAA,CAAY,QAAQ,CAAA,EAAG,CAAC;AAAA,KACvF,GACA,KAAK,MAAM,CAAA,CAAA;AAAA,EACnB;AAAA,EAzCiB,IAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EAyCjB,KAAA,CAAM,SAAiB,OAAA,EAA4B;AACjD,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAC9B,MAAA,IAAA,CAAK,iBAAA,CAAkB,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA;AAAA,IAClD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,OAAO,CAAA;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,IAAA,CAAK,SAAiB,OAAA,EAA4B;AAChD,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAC9B,MAAA,IAAA,CAAK,iBAAA,CAAkB,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAA;AAAA,IACjD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,IAAA,CAAK,SAAiB,OAAA,EAA4B;AAChD,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAC9B,MAAA,IAAA,CAAK,iBAAA,CAAkB,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAA;AAAA,IACjD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,KAAA,CAAM,OAAA,EAAiB,KAAA,EAAe,OAAA,EAA4B;AAChE,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,GAAG,OAAA;AAAA,MACH,GAAI,SAAS,EAAE,KAAA,EAAO,MAAM,OAAA,EAAS,KAAA,EAAO,MAAM,KAAA;AAAM,KAC1D;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAC9B,MAAA,IAAA,CAAK,iBAAA,CAAkB,OAAA,EAAS,OAAA,EAAS,YAAY,CAAA;AAAA,IACvD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,YAAA,EAAc,OAAO,CAAA;AAAA,IACvC;AAAA,EACF;AAAA,EAEQ,iBAAA,CAAkB,QAAA,EAAkB,OAAA,EAAiB,OAAA,EAA4B;AAEvF,IAAA,IAAI,KAAA,GAAkB;AAAA,MACpB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MAClC,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,QAAA;AAAA,MACA,OAAA;AAAA,MACA,GAAG,IAAA,CAAK,QAAA;AAAA,MACR,GAAG;AAAA,KACL;AAGA,IAAA,KAAA,MAAW,EAAA,IAAM,KAAK,UAAA,EAAY;AAChC,MAAA,KAAA,GAAQ,EAAA,CAAG,QAAQ,KAAK,CAAA;AAAA,IAC1B;AAGA,IAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAc,UAAU,aAAA,EAAe,GAAG,cAAa,GAAI,KAAA;AAG5E,IAAA,MAAM,KAAA,GAAA,CAAS,aAAA,IAAiB,QAAA,EAAU,WAAA,EAAY;AACtD,IAAA,QAAQ,KAAA;AAAO,MACb,KAAK,OAAA;AACH,QAAA,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,YAAA,EAAc,YAAY,CAAA;AAC1C,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,YAAA,EAAc,YAAY,CAAA;AACzC,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,YAAA,EAAc,YAAY,CAAA;AACzC,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,YAAA,EAAc,YAAY,CAAA;AAC1C,QAAA;AAAA,MACF;AACE,QAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,YAAA,EAAc,YAAY,CAAA;AAAA;AAC7C,EACF;AAAA,EAEA,MAAM,QAAA,EAAyD;AAC7D,IAAA,MAAM,iBAAiB,EAAE,GAAG,IAAA,CAAK,QAAA,EAAU,GAAG,QAAA,EAAS;AACvD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AAC1C,IAAA,OAAO,IAAI,iBAAA;AAAA,MACT,IAAA,CAAK,OAAA;AAAA,MACL,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,UAAA;AAAA,MACL,cAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF,CAAA;AAKA,IAAM,gBAAA,GAAN,MAAM,iBAAA,CAAiD;AAAA,EAKrD,WAAA,CACmB,OAAA,EAEjB,MAAA,EACA,QAAA,EACA;AAJiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAKjB,IAAA,IAAA,CAAK,QAAQ,MAAA,EAAQ,KAAA,IAAS,CAAC,IAAI,aAAa,CAAA;AAChD,IAAA,IAAA,CAAK,UAAA,GAAa,MAAA,EAAQ,UAAA,IAAc,EAAC;AACzC,IAAA,IAAA,CAAK,QAAA,GAAW,YAAY,EAAC;AAAA,EAC/B;AAAA,EAbiB,KAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EAajB,KAAA,CAAM,SAAiB,OAAA,EAA4B;AACjD,IAAA,IAAA,CAAK,eAAA,CAAgB,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA;AAAA,EAChD;AAAA,EAEA,IAAA,CAAK,SAAiB,OAAA,EAA4B;AAChD,IAAA,IAAA,CAAK,eAAA,CAAgB,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAA;AAAA,EAC/C;AAAA,EAEA,IAAA,CAAK,SAAiB,OAAA,EAA4B;AAChD,IAAA,IAAA,CAAK,eAAA,CAAgB,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAA;AAAA,EAC/C;AAAA,EAEA,KAAA,CAAM,OAAA,EAAiB,KAAA,EAAe,OAAA,EAA4B;AAChE,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,GAAG,OAAA;AAAA,MACH,GAAI,KAAA,IAAS;AAAA,QACX,OAAO,KAAA,CAAM,OAAA;AAAA,QACb,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,SAAA,EAAW,MAAM,WAAA,CAAY;AAAA;AAC/B,KACF;AACA,IAAA,IAAA,CAAK,eAAA,CAAgB,OAAA,EAAS,OAAA,EAAS,YAAY,CAAA;AAAA,EACrD;AAAA,EAEQ,eAAA,CAAgB,QAAA,EAAkB,OAAA,EAAiB,OAAA,EAA4B;AAErF,IAAA,IAAI,KAAA,GAAkB;AAAA,MACpB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MAClC,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,QAAA;AAAA,MACA,OAAA;AAAA,MACA,aAAA,EAAe,OAAA,EAAS,aAAA,IAAiB,IAAA,CAAK,qBAAA,EAAsB;AAAA,MACpE,IAAA,EAAM,KAAK,WAAA,EAAY;AAAA,MACvB,KAAK,OAAA,CAAQ,GAAA;AAAA,MACb,GAAG,IAAA,CAAK,QAAA;AAAA,MACR,GAAG;AAAA,KACL;AAGA,IAAA,KAAA,MAAW,EAAA,IAAM,KAAK,UAAA,EAAY;AAChC,MAAA,KAAA,GAAQ,EAAA,CAAG,QAAQ,KAAK,CAAA;AAAA,IAC1B;AAGA,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,KAAA,EAAO;AAC7B,MAAA,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,QAAA,EAAyD;AAC7D,IAAA,MAAM,iBAAiB,EAAE,GAAG,IAAA,CAAK,QAAA,EAAU,GAAG,QAAA,EAAS;AACvD,IAAA,OAAO,IAAI,iBAAA;AAAA,MACT,IAAA,CAAK,OAAA;AAAA,MACL;AAAA,QACE,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,YAAY,IAAA,CAAK;AAAA,OACnB;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEQ,qBAAA,GAAgC;AAEtC,IAAA,OAAO,CAAA,KAAA,EAAQ,IAAA,CAAK,GAAA,EAAK,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,EAC1E;AAAA,EAEQ,WAAA,GAAsB;AAC5B,IAAA,IAAI;AACF,MAAA,OAAO,QAAA,EAAS;AAAA,IAClB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,OAAA,CAAQ,IAAI,QAAA,IAAY,SAAA;AAAA,IACjC;AAAA,EACF;AACF,CAAA;;;ACrXA,IAAM,mBAAA,GAAsB;AAAA,EAC1B,UAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAKA,IAAM,uBAAA,GAA0B;AAAA,EAC9B,oBAAA;AAAA;AAAA,EACA,4BAAA;AAAA;AAAA,EACA,0BAAA;AAAA;AAAA,EACA,2BAAA;AAAA;AAAA,EACA,iDAAA;AAAA;AAAA,EACA;AAAA;AACF,CAAA;AAMA,IAAM,qBAAA,GAAwB,KAAA;AAQvB,IAAM,0BAAN,MAAoD;AAAA,EACxC,UAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA;AAAA,EAEjB,YACE,aAAA,EAOA;AAEA,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,WAAqB,EAAC;AAC1B,IAAA,IAAI,kBAAA,GAAqB,IAAA;AAEzB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,EAAG;AAEhC,MAAA,UAAA,GAAa,aAAA;AACb,MAAA,kBAAA,GAAqB,KAAA;AAAA,IACvB,CAAA,MAAO;AAEL,MAAA,UAAA,GAAa,eAAe,UAAA,IAAc,mBAAA;AAC1C,MAAA,QAAA,GAAW,aAAA,EAAe,YAAY,EAAC;AACvC,MAAA,kBAAA,GAAqB,eAAe,kBAAA,IAAsB,IAAA;AAAA,IAC5D;AAGA,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,kBAAkB,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAG5D,IAAA,IAAA,CAAK,QAAA,GAAW,CAAC,GAAI,kBAAA,GAAqB,0BAA0B,EAAC,EAAI,GAAG,QAAQ,CAAA;AAAA,EACtF;AAAA,EAEA,QAAQ,KAAA,EAA2B;AACjC,IAAA,MAAM,QAAA,GAAW,EAAE,GAAG,KAAA,EAAM;AAG5B,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,EAAG;AACvC,MAAA,IAAI,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA,EAAG;AACzB,QAAA,QAAA,CAAS,GAAG,CAAA,GAAI,YAAA;AAAA,MAClB;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,aAAa,QAAQ,CAAA;AAE1B,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEQ,YAAY,GAAA,EAAsB;AACxC,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,QAAA,CAAS,GAAA,CAAI,aAAa,CAAA;AAAA,EACxD;AAAA,EAEQ,aAAa,GAAA,EAAoC;AACvD,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,MAAA,IAAI,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA,EAAG;AACzB,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,YAAA;AAAA,MACb,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AAEpC,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,IAAA,CAAK,cAAA,CAAe,KAAK,CAAA;AAAA,MACtC,CAAA,MAAA,IAAW,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AAE7C,QAAA,IAAI,IAAA,CAAK,aAAA,CAAc,KAAK,CAAA,EAAG;AAC7B,UAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAExB,YAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,UACxB,CAAA,MAAO;AAEL,YAAA,IAAA,CAAK,aAAa,KAAgC,CAAA;AAAA,UACpD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,YAAY,GAAA,EAAsB;AACxC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,MAAA,MAAM,IAAA,GAAO,IAAI,CAAC,CAAA;AAClB,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAE5B,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA,CAAK,cAAA,CAAe,IAAI,CAAA;AAAA,MACnC,CAAA,MAAA,IAAW,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AAE3C,QAAA,IAAI,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA,EAAG;AAC5B,UAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AAEvB,YAAA,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,UACvB,CAAA,MAAO;AAEL,YAAA,IAAA,CAAK,aAAa,IAA+B,CAAA;AAAA,UACnD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAe,KAAA,EAAuB;AAE5C,IAAA,IAAI,KAAA,CAAM,SAAS,qBAAA,EAAuB;AACxC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,MAAA,GAAS,KAAA;AACb,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;AAEnC,MAAA,OAAA,CAAQ,SAAA,GAAY,CAAA;AACpB,MAAA,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,OAAA,EAAS,YAAY,CAAA;AAAA,IAC/C;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,KAAA,EAAyB;AAC7C,IAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,IACE,KAAA,YAAiB,QACjB,KAAA,YAAiB,KAAA,IACjB,iBAAiB,MAAA,IACjB,WAAA,CAAY,OAAO,KAAK,CAAA;AAAA,IACxB,iBAAiB,WAAA,EACjB;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAKO,IAAM,sBAAN,MAAgD;AAAA,EACrD,YAA6B,MAAA,EAAiC;AAAjC,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAkC;AAAA,EAE/D,QAAQ,KAAA,EAA2B;AACjC,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,GAAG,IAAA,CAAK;AAAA,KACV;AAAA,EACF;AACF;AAKO,IAAM,sBAAN,MAAgD;AAAA,EACrD,YAA6B,WAAA,EAA4C;AAA5C,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AAAA,EAA6C;AAAA,EAE1E,QAAQ,KAAA,EAA2B;AACjC,IAAA,OAAO,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,EAC/B;AACF;;;ACjMO,SAAS,aAAa,MAAA,EAA8B;AACzD,EAAA,OAAO,IAAI,OAAO,MAAM,CAAA;AAC1B;AAQO,SAAS,mBAAmB,OAAA,EAAyB;AAC1D,EAAA,OAAO,IAAI,MAAA,CAAO;AAAA,IAChB,OAAA;AAAA,IACA,OAAA,EAAA,QAAA;AAAA,GACD,CAAA;AACH;AASO,SAAS,sBAAA,CAAuB,SAAiB,QAAA,EAA2B;AACjF,EAAA,OAAO,IAAI,MAAA,CAAO;AAAA,IAChB,OAAA;AAAA,IACA,OAAA,EAAA,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AASO,SAAS,sBAAA,CACd,SACA,OAAA,EAMQ;AACR,EAAA,OAAO,IAAI,MAAA,CAAO;AAAA,IAChB,OAAA;AAAA,IACA,OAAA,EAAA,YAAA;AAAA,IACA,GAAG;AAAA,GACJ,CAAA;AACH;AAkDO,SAAS,mCAAA,CACd,SACA,OAAA,EAMQ;AACR,EAAA,OAAO,IAAI,MAAA,CAAO;AAAA,IAChB,OAAA;AAAA,IACA,OAAA,EAAA,YAAA;AAAA,IACA,UAAU,OAAA,EAAS,QAAA;AAAA,IACnB,UAAA,EAAY;AAAA,MACV,IAAI,uBAAA,CAAwB;AAAA,QAC1B,YAAY,OAAA,EAAS,YAAA;AAAA,QACrB,UAAU,OAAA,EAAS,cAAA;AAAA,QACnB,oBAAoB,OAAA,EAAS;AAAA,OAC9B;AAAA;AACH,GACD,CAAA;AACH;;;ACnJO,IAAM,OAAA,GAAU","file":"index.js","sourcesContent":["/**\n * Core types for progressive logging interface\n */\n\n/**\n * Logging profile enum matching cross-language standard\n */\nexport enum LoggingProfile {\n /**\n * Basic logging for CLI tools and simple applications.\n *\n * Features:\n * - Console output only\n * - Basic severity levels (DEBUG, INFO, WARN, ERROR)\n * - Simple string formatting\n * - No correlation/middleware support\n */\n SIMPLE = \"simple\",\n\n /**\n * Structured logging with basic enterprise features.\n *\n * Features:\n * - JSON output with core envelope fields\n * - Correlation and request IDs\n * - Basic middleware (redaction)\n * - Console and file sinks\n * - No throttling/advanced features\n */\n STRUCTURED = \"structured\",\n\n /**\n * Full enterprise logging with all features.\n *\n * Features:\n * - Complete JSON envelope (20+ fields)\n * - Full correlation/trace support\n * - Complete middleware pipeline\n * - Multiple sink types with rotation\n * - Throttling and backpressure\n * - Performance optimization\n */\n ENTERPRISE = \"enterprise\",\n\n /**\n * User-defined configuration with explicit parameters.\n *\n * Features:\n * - Full parameter control\n * - Custom sink/middleware combinations\n * - Advanced configuration options\n */\n CUSTOM = \"custom\",\n}\n\n/**\n * Base logger configuration\n */\nexport interface BaseLoggerConfig {\n service: string;\n profile: LoggingProfile;\n policyFile?: string;\n}\n\n/**\n * Profile-specific configurations using discriminated unions\n */\nexport type LoggerConfig =\n | ({ profile: LoggingProfile.SIMPLE } & BaseLoggerConfig)\n | ({\n profile: LoggingProfile.STRUCTURED;\n filePath?: string;\n middleware?: Middleware[];\n } & BaseLoggerConfig)\n | ({\n profile: LoggingProfile.ENTERPRISE;\n sinks?: Sink[];\n middleware?: Middleware[];\n } & BaseLoggerConfig)\n | ({\n profile: LoggingProfile.CUSTOM;\n customConfig: CustomLoggerConfig;\n } & BaseLoggerConfig);\n\n/**\n * Custom configuration for CUSTOM profile\n */\nexport interface CustomLoggerConfig {\n sinks: Sink[];\n middleware?: Middleware[];\n throttling?: ThrottlingConfig;\n envelope?: EnvelopeConfig;\n}\n\n/**\n * Log context for structured/enterprise profiles\n */\nexport interface LogContext {\n correlationId?: string;\n requestId?: string;\n userId?: string | number;\n traceId?: string;\n spanId?: string;\n [key: string]: unknown;\n}\n\n/**\n * Sink interface for log output destinations\n */\nexport interface Sink {\n write(event: LogEvent): void;\n}\n\n/**\n * Middleware interface for log processing pipeline\n */\nexport interface Middleware {\n process(event: LogEvent): LogEvent;\n}\n\n/**\n * Base log event interface\n */\nexport interface LogEvent {\n timestamp: string;\n service: string;\n severity: string;\n message: string;\n [key: string]: unknown;\n}\n\n/**\n * Enterprise log event with full envelope\n */\nexport interface EnterpriseLogEvent extends LogEvent {\n correlationId: string;\n requestId?: string;\n traceId?: string;\n spanId?: string;\n userId?: string | number;\n host?: string;\n pid?: number;\n version?: string;\n environment?: string;\n region?: string;\n zone?: string;\n instanceId?: string;\n cluster?: string;\n namespace?: string;\n deployment?: string;\n component?: string;\n module?: string;\n function?: string;\n line?: number;\n stackTrace?: string;\n}\n\n/**\n * Throttling configuration\n */\nexport interface ThrottlingConfig {\n maxPerSecond: number;\n maxPerMinute?: number;\n burstSize?: number;\n}\n\n/**\n * Envelope configuration\n */\nexport interface EnvelopeConfig {\n includeStackTrace?: boolean;\n includeHostInfo?: boolean;\n includeProcessInfo?: boolean;\n customFields?: Record<string, unknown>;\n}\n\n/**\n * Logger implementation interface\n */\nexport interface LoggerImplementation {\n debug(message: string, context?: LogContext): void;\n info(message: string, context?: LogContext): void;\n warn(message: string, context?: LogContext): void;\n error(message: string, error?: Error, context?: LogContext): void;\n child(bindings: Record<string, unknown>): LoggerImplementation;\n}\n\n/**\n * Logging policy definition\n */\nexport interface LoggingPolicy {\n allowedProfiles: LoggingProfile[];\n requiredProfiles?: Record<string, LoggingProfile[]>;\n environmentRules?: Record<string, LoggingProfile[]>;\n customRequirements?: Record<string, unknown>;\n}\n\n/**\n * Policy error thrown when profile not allowed\n */\nexport class PolicyError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"PolicyError\";\n }\n}\n","/**\n * Policy enforcement for progressive logging profiles\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { parse as parseYaml } from \"yaml\";\nimport { type LoggingPolicy, LoggingProfile, PolicyError } from \"./types.js\";\n\n/**\n * Options for profile validation\n */\nexport interface PolicyValidationOptions {\n appType?: string;\n environment?: string;\n}\n\n/**\n * Policy enforcer for validating logging profiles against organizational policies\n */\nexport class PolicyEnforcer {\n private readonly policy: LoggingPolicy;\n private readonly policyFile: string;\n\n /**\n * Create a new policy enforcer\n *\n * @param policyFile - Path to YAML policy file\n * @throws {PolicyError} If policy file cannot be loaded or is invalid\n */\n constructor(policyFile: string) {\n this.policyFile = policyFile;\n this.policy = this.loadPolicy(policyFile);\n }\n\n /**\n * Validate if a profile is allowed under the current policy\n *\n * @param profile - The logging profile to validate\n * @param options - Optional validation context (appType, environment)\n * @returns true if profile is allowed, false otherwise\n *\n * @example\n * const enforcer = new PolicyEnforcer('/org/logging-policy.yaml');\n * if (enforcer.validateProfile(LoggingProfile.ENTERPRISE, { environment: 'production' })) {\n * // Profile is allowed\n * }\n */\n validateProfile(profile: LoggingProfile, options?: PolicyValidationOptions): boolean {\n // Check if profile is in allowed list\n if (!this.policy.allowedProfiles.includes(profile)) {\n return false;\n }\n\n // Check environment-specific rules if environment provided\n if (options?.environment && this.policy.environmentRules) {\n const envRules = this.policy.environmentRules[options.environment];\n if (envRules && !envRules.includes(profile)) {\n return false;\n }\n }\n\n // Check app-type specific requirements if appType provided\n if (options?.appType && this.policy.requiredProfiles) {\n const appTypeRules = this.policy.requiredProfiles[options.appType];\n if (appTypeRules && !appTypeRules.includes(profile)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Get the required profile for a given app type and environment\n *\n * @param appType - The application type\n * @param environment - The deployment environment\n * @returns The required logging profile\n * @throws {PolicyError} If no required profile found for app type\n *\n * @example\n * const enforcer = new PolicyEnforcer('/org/logging-policy.yaml');\n * const profile = enforcer.getRequiredProfile('api-server', 'production');\n * // Returns LoggingProfile.ENTERPRISE\n */\n getRequiredProfile(appType: string, environment: string): LoggingProfile {\n // Check required profiles by app type\n if (this.policy.requiredProfiles?.[appType]) {\n const profiles = this.policy.requiredProfiles[appType];\n\n // If environment rules exist, filter by environment\n if (this.policy.environmentRules?.[environment]) {\n const envProfiles = this.policy.environmentRules[environment];\n const validProfiles = profiles.filter((p) => envProfiles.includes(p));\n\n if (validProfiles.length > 0) {\n // Return most restrictive (highest in enum order)\n return this.getMostRestrictiveProfile(validProfiles);\n }\n }\n\n // Return most restrictive from app type requirements\n return this.getMostRestrictiveProfile(profiles);\n }\n\n throw new PolicyError(\n `No required profile found for app type \"${appType}\" in policy ${this.policyFile}`,\n );\n }\n\n /**\n * Get a helpful error message for policy validation failure\n *\n * @param profile - The profile that failed validation\n * @param options - The validation options used\n * @returns A descriptive error message\n */\n getValidationErrorMessage(profile: LoggingProfile, options?: PolicyValidationOptions): string {\n const parts: string[] = [`Profile \"${profile}\" not allowed by policy \"${this.policyFile}\".`];\n\n if (options?.environment) {\n parts.push(`Environment: ${options.environment}`);\n }\n\n if (options?.appType) {\n parts.push(`App Type: ${options.appType}`);\n }\n\n parts.push(`Allowed profiles: ${this.policy.allowedProfiles.join(\", \")}`);\n\n if (options?.environment && this.policy.environmentRules?.[options.environment]) {\n const envProfiles = this.policy.environmentRules[options.environment];\n parts.push(`Environment \"${options.environment}\" allows: ${envProfiles.join(\", \")}`);\n }\n\n if (options?.appType && this.policy.requiredProfiles?.[options.appType]) {\n const appProfiles = this.policy.requiredProfiles[options.appType];\n parts.push(`App type \"${options.appType}\" requires: ${appProfiles.join(\", \")}`);\n }\n\n return parts.join(\" | \");\n }\n\n /**\n * Load and parse the policy file\n *\n * @param policyFile - Path to YAML policy file\n * @returns Parsed logging policy\n * @throws {PolicyError} If file cannot be read or parsed\n */\n private loadPolicy(policyFile: string): LoggingPolicy {\n try {\n const content = readFileSync(policyFile, \"utf-8\");\n const parsed = parseYaml(content) as LoggingPolicy;\n\n // Validate required fields\n if (!parsed.allowedProfiles || !Array.isArray(parsed.allowedProfiles)) {\n throw new PolicyError(\n `Invalid policy file ${policyFile}: missing or invalid \"allowedProfiles\" field`,\n );\n }\n\n // Ensure all profile values are valid\n const validProfiles = Object.values(LoggingProfile);\n for (const profile of parsed.allowedProfiles) {\n if (!validProfiles.includes(profile)) {\n throw new PolicyError(`Invalid policy file ${policyFile}: unknown profile \"${profile}\"`);\n }\n }\n\n // Validate requiredProfiles structure if present\n if (parsed.requiredProfiles) {\n if (typeof parsed.requiredProfiles !== \"object\") {\n throw new PolicyError(\n `Invalid policy file ${policyFile}: \"requiredProfiles\" must be an object`,\n );\n }\n\n for (const [appType, profiles] of Object.entries(parsed.requiredProfiles)) {\n if (!Array.isArray(profiles)) {\n throw new PolicyError(\n `Invalid policy file ${policyFile}: requiredProfiles[\"${appType}\"] must be an array, got ${typeof profiles}. ` +\n \"Check YAML formatting - each profile should be on a new line with a hyphen.\",\n );\n }\n\n for (const profile of profiles) {\n if (!validProfiles.includes(profile)) {\n throw new PolicyError(\n `Invalid policy file ${policyFile}: requiredProfiles[\"${appType}\"] contains unknown profile \"${profile}\"`,\n );\n }\n }\n }\n }\n\n // Validate environmentRules structure if present\n if (parsed.environmentRules) {\n if (typeof parsed.environmentRules !== \"object\") {\n throw new PolicyError(\n `Invalid policy file ${policyFile}: \"environmentRules\" must be an object`,\n );\n }\n\n for (const [environment, profiles] of Object.entries(parsed.environmentRules)) {\n if (!Array.isArray(profiles)) {\n throw new PolicyError(\n `Invalid policy file ${policyFile}: environmentRules[\"${environment}\"] must be an array, got ${typeof profiles}. ` +\n \"Check YAML formatting - each profile should be on a new line with a hyphen.\",\n );\n }\n\n for (const profile of profiles) {\n if (!validProfiles.includes(profile)) {\n throw new PolicyError(\n `Invalid policy file ${policyFile}: environmentRules[\"${environment}\"] contains unknown profile \"${profile}\"`,\n );\n }\n }\n }\n }\n\n return parsed;\n } catch (error) {\n if (error instanceof PolicyError) {\n throw error;\n }\n\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new PolicyError(`Policy file not found: ${policyFile}`);\n }\n\n throw new PolicyError(\n `Failed to load policy file ${policyFile}: ${(error as Error).message}`,\n );\n }\n }\n\n /**\n * Get the most restrictive profile from a list\n * Order: CUSTOM > ENTERPRISE > STRUCTURED > SIMPLE\n *\n * @param profiles - List of profiles\n * @returns The most restrictive profile\n */\n private getMostRestrictiveProfile(profiles: LoggingProfile[]): LoggingProfile {\n const order = [\n LoggingProfile.CUSTOM,\n LoggingProfile.ENTERPRISE,\n LoggingProfile.STRUCTURED,\n LoggingProfile.SIMPLE,\n ];\n\n for (const profile of order) {\n if (profiles.includes(profile)) {\n return profile;\n }\n }\n\n // Fallback to first in list (shouldn't happen with valid input)\n return profiles[0];\n }\n}\n","/**\n * Sink implementations for log output destinations\n */\n\nimport { appendFileSync } from \"node:fs\";\nimport type { LogEvent, Sink } from \"./types.js\";\n\n/**\n * Console sink - writes log events to stdout as JSON\n */\nexport class ConsoleSink implements Sink {\n write(event: LogEvent): void {\n console.log(JSON.stringify(event));\n }\n}\n\n/**\n * File sink - appends log events to a file as JSON\n */\nexport class FileSink implements Sink {\n constructor(private readonly filePath: string) {}\n\n write(event: LogEvent): void {\n try {\n appendFileSync(this.filePath, `${JSON.stringify(event)}\\n`);\n } catch (error) {\n // Log to stderr if file write fails to avoid losing the log\n console.error(`FileSink: Failed to write to ${this.filePath}:`, (error as Error).message);\n // Fall back to console\n console.log(JSON.stringify(event));\n }\n }\n}\n\n/**\n * Null sink - discards all log events (useful for testing or disabling logging)\n */\nexport class NullSink implements Sink {\n write(_event: LogEvent): void {\n // Intentionally do nothing\n }\n}\n","/**\n * Progressive logging interface with profile-driven configuration\n */\n\nimport { hostname } from \"node:os\";\nimport pino from \"pino\";\nimport { PolicyEnforcer } from \"./policy.js\";\nimport { ConsoleSink } from \"./sinks.js\";\nimport {\n type LogContext,\n type LogEvent,\n type LoggerConfig,\n type LoggerImplementation,\n LoggingProfile,\n type Middleware,\n PolicyError,\n type Sink,\n} from \"./types.js\";\n\n/**\n * Progressive logger with profile-based configuration\n */\nexport class Logger {\n private readonly service: string;\n private readonly profile: LoggingProfile;\n private readonly impl: LoggerImplementation;\n\n constructor(config: LoggerConfig) {\n this.service = config.service;\n this.profile = config.profile;\n\n // Validate against policy if provided\n if (config.policyFile) {\n this.validatePolicy(config.profile, config.policyFile);\n }\n\n // Create appropriate implementation\n this.impl = this.createImplementation(config);\n }\n\n debug(message: string, context?: LogContext): void {\n this.impl.debug(message, context);\n }\n\n info(message: string, context?: LogContext): void {\n this.impl.info(message, context);\n }\n\n warn(message: string, context?: LogContext): void {\n this.impl.warn(message, context);\n }\n\n error(message: string, error?: Error, context?: LogContext): void {\n this.impl.error(message, error, context);\n }\n\n child(bindings: Record<string, unknown>): Logger {\n const childLogger = Object.create(this);\n childLogger.impl = this.impl.child(bindings);\n return childLogger;\n }\n\n private validatePolicy(profile: LoggingProfile, policyFile: string): void {\n const enforcer = new PolicyEnforcer(policyFile);\n const appType = process.env.APP_TYPE;\n const environment = process.env.NODE_ENV;\n\n if (!enforcer.validateProfile(profile, { appType, environment })) {\n throw new PolicyError(enforcer.getValidationErrorMessage(profile, { appType, environment }));\n }\n }\n\n private createImplementation(config: LoggerConfig): LoggerImplementation {\n switch (config.profile) {\n case LoggingProfile.SIMPLE:\n return new SimpleLogger(config.service);\n case LoggingProfile.STRUCTURED: {\n const structuredConfig = config as Extract<\n LoggerConfig,\n { profile: LoggingProfile.STRUCTURED }\n >;\n return new StructuredLogger(\n structuredConfig.service,\n structuredConfig.filePath,\n structuredConfig.middleware,\n );\n }\n case LoggingProfile.ENTERPRISE:\n return new EnterpriseLogger(config.service, {\n // biome-ignore lint/suspicious/noExplicitAny: Phase 1 - proper discriminated union handling in Phase 2\n sinks: (config as any).sinks,\n // biome-ignore lint/suspicious/noExplicitAny: Phase 1 - proper discriminated union handling in Phase 2\n middleware: (config as any).middleware,\n });\n case LoggingProfile.CUSTOM:\n // biome-ignore lint/suspicious/noExplicitAny: Phase 1 - proper discriminated union handling in Phase 2\n return new EnterpriseLogger(config.service, (config as any).customConfig);\n }\n }\n}\n\n/**\n * Simple logger implementation using Pino\n */\nclass SimpleLogger implements LoggerImplementation {\n private readonly pino: pino.Logger;\n\n constructor(private readonly service: string) {\n this.pino = pino({\n name: service,\n level: \"debug\",\n messageKey: \"message\",\n base: undefined,\n timestamp: false,\n formatters: {\n level: (label: string) => ({ severity: label.toUpperCase() }),\n // biome-ignore lint/suspicious/noExplicitAny: Pino formatter requires any type\n log: (object: any) => {\n return {\n service: this.service,\n ...object,\n };\n },\n },\n });\n }\n\n debug(message: string, context?: LogContext): void {\n this.pino.debug(context, message);\n }\n\n info(message: string, context?: LogContext): void {\n this.pino.info(context, message);\n }\n\n warn(message: string, context?: LogContext): void {\n this.pino.warn(context, message);\n }\n\n error(message: string, error?: Error, context?: LogContext): void {\n const errorContext = {\n ...context,\n ...(error && { error: error.message, stack: error.stack }),\n };\n this.pino.error(errorContext, message);\n }\n\n child(bindings: Record<string, unknown>): LoggerImplementation {\n const childPino = this.pino.child(bindings);\n const childLogger = Object.create(this);\n childLogger.pino = childPino;\n return childLogger;\n }\n}\n\n/**\n * Structured logger implementation using Pino with optional middleware\n */\nclass StructuredLogger implements LoggerImplementation {\n private readonly pino: pino.Logger;\n private readonly middleware: Middleware[];\n private readonly bindings: Record<string, unknown>;\n\n constructor(\n private readonly service: string,\n readonly filePath?: string,\n middleware?: Middleware[],\n bindings?: Record<string, unknown>,\n existingPino?: pino.Logger,\n ) {\n this.middleware = middleware ?? [];\n this.bindings = bindings ?? {};\n\n const config: pino.LoggerOptions = {\n name: service,\n level: \"debug\",\n messageKey: \"message\",\n base: undefined,\n timestamp: () => `,\"timestamp\":\"${new Date().toISOString()}\"`,\n formatters: {\n level: (label: string) => ({ severity: label.toUpperCase() }),\n // biome-ignore lint/suspicious/noExplicitAny: Pino formatter requires any type\n log: (object: any) => {\n return {\n service: this.service,\n ...object,\n };\n },\n },\n };\n\n // Configure output streams (console + optional file)\n this.pino =\n existingPino ??\n (filePath\n ? pino(\n config,\n pino.multistream([{ stream: process.stdout }, { stream: pino.destination(filePath) }]),\n )\n : pino(config));\n }\n\n debug(message: string, context?: LogContext): void {\n if (this.middleware.length > 0) {\n this.logWithMiddleware(\"DEBUG\", message, context);\n } else {\n this.pino.debug(context, message);\n }\n }\n\n info(message: string, context?: LogContext): void {\n if (this.middleware.length > 0) {\n this.logWithMiddleware(\"INFO\", message, context);\n } else {\n this.pino.info(context, message);\n }\n }\n\n warn(message: string, context?: LogContext): void {\n if (this.middleware.length > 0) {\n this.logWithMiddleware(\"WARN\", message, context);\n } else {\n this.pino.warn(context, message);\n }\n }\n\n error(message: string, error?: Error, context?: LogContext): void {\n const errorContext = {\n ...context,\n ...(error && { error: error.message, stack: error.stack }),\n };\n if (this.middleware.length > 0) {\n this.logWithMiddleware(\"ERROR\", message, errorContext);\n } else {\n this.pino.error(errorContext, message);\n }\n }\n\n private logWithMiddleware(severity: string, message: string, context?: LogContext): void {\n // Build base log event\n let event: LogEvent = {\n timestamp: new Date().toISOString(),\n service: this.service,\n severity,\n message,\n ...this.bindings,\n ...context,\n };\n\n // Apply middleware pipeline\n for (const mw of this.middleware) {\n event = mw.process(event);\n }\n\n // Extract final message and context for Pino\n const { message: finalMessage, severity: finalSeverity, ...finalContext } = event;\n\n // Log through Pino with appropriate level\n const level = (finalSeverity || severity).toLowerCase();\n switch (level) {\n case \"debug\":\n this.pino.debug(finalContext, finalMessage);\n break;\n case \"info\":\n this.pino.info(finalContext, finalMessage);\n break;\n case \"warn\":\n this.pino.warn(finalContext, finalMessage);\n break;\n case \"error\":\n this.pino.error(finalContext, finalMessage);\n break;\n default:\n this.pino.info(finalContext, finalMessage);\n }\n }\n\n child(bindings: Record<string, unknown>): LoggerImplementation {\n const mergedBindings = { ...this.bindings, ...bindings };\n const childPino = this.pino.child(bindings);\n return new StructuredLogger(\n this.service,\n this.filePath,\n this.middleware,\n mergedBindings,\n childPino,\n );\n }\n}\n\n/**\n * Enterprise logger implementation using Pino\n */\nclass EnterpriseLogger implements LoggerImplementation {\n private readonly sinks: Sink[];\n private readonly middleware: Middleware[];\n private readonly bindings: Record<string, unknown>;\n\n constructor(\n private readonly service: string,\n // biome-ignore lint/suspicious/noExplicitAny: Phase 1 - proper discriminated union handling in Phase 2\n config?: any,\n bindings?: Record<string, unknown>,\n ) {\n this.sinks = config?.sinks ?? [new ConsoleSink()];\n this.middleware = config?.middleware ?? [];\n this.bindings = bindings ?? {};\n }\n\n debug(message: string, context?: LogContext): void {\n this.logWithPipeline(\"DEBUG\", message, context);\n }\n\n info(message: string, context?: LogContext): void {\n this.logWithPipeline(\"INFO\", message, context);\n }\n\n warn(message: string, context?: LogContext): void {\n this.logWithPipeline(\"WARN\", message, context);\n }\n\n error(message: string, error?: Error, context?: LogContext): void {\n const errorContext = {\n ...context,\n ...(error && {\n error: error.message,\n stack: error.stack,\n errorType: error.constructor.name,\n }),\n };\n this.logWithPipeline(\"ERROR\", message, errorContext);\n }\n\n private logWithPipeline(severity: string, message: string, context?: LogContext): void {\n // Create enterprise log event\n let event: LogEvent = {\n timestamp: new Date().toISOString(),\n service: this.service,\n severity,\n message,\n correlationId: context?.correlationId ?? this.generateCorrelationId(),\n host: this.getHostname(),\n pid: process.pid,\n ...this.bindings,\n ...context,\n };\n\n // Apply middleware pipeline\n for (const mw of this.middleware) {\n event = mw.process(event);\n }\n\n // Emit to all sinks\n for (const sink of this.sinks) {\n sink.write(event);\n }\n }\n\n child(bindings: Record<string, unknown>): LoggerImplementation {\n const mergedBindings = { ...this.bindings, ...bindings };\n return new EnterpriseLogger(\n this.service,\n {\n sinks: this.sinks,\n middleware: this.middleware,\n },\n mergedBindings,\n );\n }\n\n private generateCorrelationId(): string {\n // Simple correlation ID generation - will be enhanced in Phase 2\n return `corr-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n }\n\n private getHostname(): string {\n try {\n return hostname();\n } catch {\n return process.env.HOSTNAME || \"unknown\";\n }\n }\n}\n","/**\n * Middleware implementations for log processing pipeline\n */\n\nimport type { LogEvent, Middleware } from \"./types.js\";\n\n/**\n * Default secret field names (case-insensitive) aligned with gofulmen\n */\nconst DEFAULT_SECRET_KEYS = [\n \"password\",\n \"token\",\n \"apikey\",\n \"api_key\",\n \"authorization\",\n \"secret\",\n \"cardnumber\",\n \"card_number\",\n \"cvv\",\n \"ssn\",\n \"accesstoken\",\n \"access_token\",\n \"refreshtoken\",\n \"refresh_token\",\n];\n\n/**\n * Default secret patterns aligned with gofulmen\n */\nconst DEFAULT_SECRET_PATTERNS = [\n /SECRET_[A-Z0-9_]+/g, // Environment variable secrets\n /[A-Z0-9_]*TOKEN[A-Z0-9_]*/g, // Token variants\n /[A-Z0-9_]*KEY[A-Z0-9_]*/g, // Key variants\n /[A-Za-z0-9+/]{40,}={0,2}/g, // Base64 blobs (~40+ chars)\n /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}/g, // Email addresses\n /\\b\\d{13,19}\\b/g, // Credit card numbers (13-19 digits)\n];\n\n/**\n * Size threshold for pattern scanning (bytes)\n * Strings larger than this will skip pattern scanning for performance\n */\nconst MAX_PATTERN_SCAN_SIZE = 10240; // 10KB\n\n/**\n * Redact secrets middleware - removes sensitive data from log events\n *\n * Supports both field-based redaction (case-insensitive) and pattern-based\n * redaction with gofulmen-aligned defaults.\n */\nexport class RedactSecretsMiddleware implements Middleware {\n private readonly secretKeys: string[];\n private readonly secretKeysLower: string[];\n private readonly patterns: RegExp[];\n\n constructor(\n optionsOrKeys?:\n | string[]\n | {\n secretKeys?: string[];\n patterns?: RegExp[];\n useDefaultPatterns?: boolean;\n },\n ) {\n // Backward compatibility: support both old array format and new options format\n let secretKeys: string[];\n let patterns: RegExp[] = [];\n let useDefaultPatterns = true;\n\n if (Array.isArray(optionsOrKeys)) {\n // Old format: array of secret keys\n secretKeys = optionsOrKeys;\n useDefaultPatterns = false; // Old behavior: custom keys disable defaults\n } else {\n // New format: options object\n secretKeys = optionsOrKeys?.secretKeys ?? DEFAULT_SECRET_KEYS;\n patterns = optionsOrKeys?.patterns ?? [];\n useDefaultPatterns = optionsOrKeys?.useDefaultPatterns ?? true;\n }\n\n // Field-based redaction (case-insensitive)\n this.secretKeys = secretKeys;\n this.secretKeysLower = secretKeys.map((k) => k.toLowerCase());\n\n // Pattern-based redaction\n this.patterns = [...(useDefaultPatterns ? DEFAULT_SECRET_PATTERNS : []), ...patterns];\n }\n\n process(event: LogEvent): LogEvent {\n const redacted = { ...event };\n\n // Redact top-level secret fields (case-insensitive)\n for (const key of Object.keys(redacted)) {\n if (this.isSecretKey(key)) {\n redacted[key] = \"[REDACTED]\";\n }\n }\n\n // Recursively redact nested objects\n this.redactNested(redacted);\n\n return redacted;\n }\n\n private isSecretKey(key: string): boolean {\n return this.secretKeysLower.includes(key.toLowerCase());\n }\n\n private redactNested(obj: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(obj)) {\n if (this.isSecretKey(key)) {\n obj[key] = \"[REDACTED]\";\n } else if (typeof value === \"string\") {\n // Apply pattern-based redaction to string values\n obj[key] = this.redactPatterns(value);\n } else if (value && typeof value === \"object\") {\n // Skip non-plain objects (Date, Buffer, Error, etc.)\n if (this.isPlainObject(value)) {\n if (Array.isArray(value)) {\n // Recursively redact array elements\n this.redactArray(value);\n } else {\n // Recursively redact object properties\n this.redactNested(value as Record<string, unknown>);\n }\n }\n }\n }\n }\n\n private redactArray(arr: unknown[]): void {\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n if (typeof item === \"string\") {\n // Apply pattern-based redaction to string values\n arr[i] = this.redactPatterns(item);\n } else if (item && typeof item === \"object\") {\n // Skip non-plain objects\n if (this.isPlainObject(item)) {\n if (Array.isArray(item)) {\n // Handle nested arrays\n this.redactArray(item);\n } else {\n // Handle objects within arrays\n this.redactNested(item as Record<string, unknown>);\n }\n }\n }\n }\n }\n\n /**\n * Apply regex patterns to redact secrets from string values\n * Skips strings larger than MAX_PATTERN_SCAN_SIZE for performance\n */\n private redactPatterns(value: string): string {\n // Skip large strings to avoid performance issues\n if (value.length > MAX_PATTERN_SCAN_SIZE) {\n return value;\n }\n\n let result = value;\n for (const pattern of this.patterns) {\n // Reset regex state for global patterns\n pattern.lastIndex = 0;\n result = result.replace(pattern, \"[REDACTED]\");\n }\n return result;\n }\n\n /**\n * Check if value is a plain object (not Date, Buffer, Error, etc.)\n */\n private isPlainObject(value: unknown): boolean {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n // Skip built-in types that shouldn't be recursed\n if (\n value instanceof Date ||\n value instanceof Error ||\n value instanceof RegExp ||\n ArrayBuffer.isView(value) || // Covers Buffer, TypedArray, DataView\n value instanceof ArrayBuffer\n ) {\n return false;\n }\n\n // Arrays are handled separately\n if (Array.isArray(value)) {\n return true;\n }\n\n // Accept plain objects\n return true;\n }\n}\n\n/**\n * Add fields middleware - enriches log events with additional context\n */\nexport class AddFieldsMiddleware implements Middleware {\n constructor(private readonly fields: Record<string, unknown>) {}\n\n process(event: LogEvent): LogEvent {\n return {\n ...event,\n ...this.fields,\n };\n }\n}\n\n/**\n * Transform middleware - applies a transformation function to log events\n */\nexport class TransformMiddleware implements Middleware {\n constructor(private readonly transformer: (event: LogEvent) => LogEvent) {}\n\n process(event: LogEvent): LogEvent {\n return this.transformer(event);\n }\n}\n","/**\n * Factory function for creating loggers with progressive interface\n */\n\nimport { Logger } from \"./logger.js\";\nimport { RedactSecretsMiddleware } from \"./middleware.js\";\nimport { type LoggerConfig, LoggingProfile } from \"./types.js\";\n\n/**\n * Create a logger with the specified configuration\n *\n * @param config - Logger configuration\n * @returns Configured logger instance\n *\n * @example\n * // Simple logger for CLI\n * const logger = createLogger({\n * service: 'mycli',\n * profile: LoggingProfile.SIMPLE\n * });\n *\n * @example\n * // Structured logger with file output\n * const logger = createLogger({\n * service: 'myapp',\n * profile: LoggingProfile.STRUCTURED,\n * filePath: '/var/log/app.log'\n * });\n */\nexport function createLogger(config: LoggerConfig): Logger {\n return new Logger(config);\n}\n\n/**\n * Create a simple logger for CLI tools\n *\n * @param service - Service name\n * @returns Simple logger instance\n */\nexport function createSimpleLogger(service: string): Logger {\n return new Logger({\n service,\n profile: LoggingProfile.SIMPLE,\n });\n}\n\n/**\n * Create a structured logger with JSON output\n *\n * @param service - Service name\n * @param filePath - Optional file path for log output\n * @returns Structured logger instance\n */\nexport function createStructuredLogger(service: string, filePath?: string): Logger {\n return new Logger({\n service,\n profile: LoggingProfile.STRUCTURED,\n filePath,\n });\n}\n\n/**\n * Create an enterprise logger with full features\n *\n * @param service - Service name\n * @param options - Enterprise options (sinks, middleware, etc.)\n * @returns Enterprise logger instance\n */\nexport function createEnterpriseLogger(\n service: string,\n options?: {\n // biome-ignore lint/suspicious/noExplicitAny: Phase 1 - Sink type to be properly defined in Phase 2\n sinks?: any[];\n // biome-ignore lint/suspicious/noExplicitAny: Phase 1 - Middleware type to be properly defined in Phase 2\n middleware?: any[];\n },\n): Logger {\n return new Logger({\n service,\n profile: LoggingProfile.ENTERPRISE,\n ...options,\n });\n}\n\n/**\n * Create a structured logger with default redaction middleware\n *\n * Enables secure logging with gofulmen-aligned secret redaction patterns.\n * Child loggers inherit both middleware chain and bindings from parent.\n *\n * Default redaction patterns (can be disabled with useDefaultPatterns: false):\n * - SECRET_* environment variables\n * - *TOKEN*, *KEY* variants\n * - Base64 blobs (40+ characters)\n * - Email addresses\n * - Credit card numbers (13-19 digits)\n *\n * Default field names (case-insensitive):\n * - password, token, apiKey, authorization, secret\n * - cardNumber, cvv, ssn\n *\n * Middleware can modify event severity. The finalSeverity from middleware\n * output is honored in Pino logging, allowing middleware to downgrade noisy\n * errors to warnings or upgrade critical info to error.\n *\n * @param service - Service name\n * @param options - Configuration options\n * @returns Structured logger with redaction enabled\n *\n * @example\n * // Basic usage (default patterns)\n * const logger = createStructuredLoggerWithRedaction('api-server');\n *\n * @example\n * // Custom patterns only\n * const logger = createStructuredLoggerWithRedaction('api-server', {\n * useDefaultPatterns: false,\n * customPatterns: [/MY_CUSTOM_SECRET/g]\n * });\n *\n * @example\n * // Custom fields with default patterns\n * const logger = createStructuredLoggerWithRedaction('api-server', {\n * customFields: ['internalId', 'customerKey']\n * });\n *\n * @example\n * // With file output\n * const logger = createStructuredLoggerWithRedaction('api-server', {\n * filePath: '/var/log/app.log'\n * });\n */\nexport function createStructuredLoggerWithRedaction(\n service: string,\n options?: {\n filePath?: string;\n customPatterns?: RegExp[];\n customFields?: string[];\n useDefaultPatterns?: boolean; // default: true\n },\n): Logger {\n return new Logger({\n service,\n profile: LoggingProfile.STRUCTURED,\n filePath: options?.filePath,\n middleware: [\n new RedactSecretsMiddleware({\n secretKeys: options?.customFields,\n patterns: options?.customPatterns,\n useDefaultPatterns: options?.useDefaultPatterns,\n }),\n ],\n });\n}\n","/**\n * Logging module - progressive logging interface with policy enforcement\n *\n * Provides profile-based logging from simple CLI to enterprise-scale applications\n */\n\nexport const VERSION = \"0.1.0\";\n\n// Factory functions\nexport {\n createEnterpriseLogger,\n createLogger,\n createSimpleLogger,\n createStructuredLogger,\n createStructuredLoggerWithRedaction,\n} from \"./create-logger.js\";\n// Core exports\nexport { Logger } from \"./logger.js\";\nexport {\n AddFieldsMiddleware,\n RedactSecretsMiddleware,\n TransformMiddleware,\n} from \"./middleware.js\";\nexport { PolicyEnforcer } from \"./policy.js\";\nexport { ConsoleSink, FileSink, NullSink } from \"./sinks.js\";\nexport {\n type CustomLoggerConfig,\n type LogContext,\n type LogEvent,\n type LoggerConfig,\n type LoggingPolicy,\n LoggingProfile,\n type Middleware,\n PolicyError,\n type Sink,\n} from \"./types.js\";\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}