@unispechq/unispec-core 0.3.2 → 0.3.4

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 (440) hide show
  1. package/dist/cache/cache-factory.d.ts +2 -2
  2. package/dist/cache/cache-factory.js +1 -1
  3. package/dist/cache/cache-manager.d.ts +2 -2
  4. package/dist/cache/cache-manager.js +9 -7
  5. package/dist/cache/hash-utils.d.ts +1 -11
  6. package/dist/cache/hash-utils.js +1 -21
  7. package/dist/cache/hashing.d.ts +15 -6
  8. package/dist/cache/hashing.js +8 -12
  9. package/dist/cache/index.d.ts +6 -6
  10. package/dist/cache/index.js +5 -5
  11. package/dist/cache/lru-cache.d.ts +1 -13
  12. package/dist/cache/lru-cache.js +3 -24
  13. package/dist/cjs/cache/cache-factory.js +1 -1
  14. package/dist/cjs/cache/cache-manager.js +9 -7
  15. package/dist/cjs/cache/hash-utils.js +1 -23
  16. package/dist/cjs/cache/hashing.js +7 -13
  17. package/dist/cjs/cache/index.js +6 -8
  18. package/dist/cjs/cache/lru-cache.js +3 -24
  19. package/dist/cjs/diff/annotators.js +3 -2
  20. package/dist/cjs/diff/core.js +2 -2
  21. package/dist/cjs/diff/enhanced-diff.js +7 -21
  22. package/dist/cjs/diff/index.js +8 -8
  23. package/dist/cjs/errors/config-error.js +1 -1
  24. package/dist/cjs/errors/error-factory.js +7 -7
  25. package/dist/cjs/errors/index.js +8 -8
  26. package/dist/cjs/errors/loader-error.js +1 -1
  27. package/dist/cjs/errors/reference-error.js +1 -1
  28. package/dist/cjs/errors/schema-error.js +1 -1
  29. package/dist/cjs/errors/security-error.js +1 -1
  30. package/dist/cjs/errors/semantic-error.js +1 -1
  31. package/dist/cjs/index.js +13 -13
  32. package/dist/cjs/loader/index.js +4 -4
  33. package/dist/cjs/loader/security-validator.js +1 -1
  34. package/dist/cjs/loader/unispec-loader.js +3 -3
  35. package/dist/cjs/loader/yaml-loader.js +1 -1
  36. package/dist/cjs/normalizer/core.js +11 -6
  37. package/dist/cjs/normalizer/index.js +1 -1
  38. package/dist/cjs/normalizer/utils.js +23 -7
  39. package/dist/cjs/optimizer/core.js +35 -10
  40. package/dist/cjs/optimizer/index.js +3 -3
  41. package/dist/cjs/optimizer/optimization-functions.js +2 -2
  42. package/dist/cjs/schemas/dedupe.js +27 -14
  43. package/dist/cjs/schemas/index.js +3 -3
  44. package/dist/cjs/schemas/resolver.js +3 -2
  45. package/dist/cjs/validator/ajv-validator.js +1 -1
  46. package/dist/cjs/validator/config-validator-main.js +4 -4
  47. package/dist/cjs/validator/config-validator.js +1 -1
  48. package/dist/cjs/validator/index.js +7 -7
  49. package/dist/cjs/validator/reference-validator.js +1 -1
  50. package/dist/cjs/validator/tests-validator.js +2 -2
  51. package/dist/cjs/validator/unispec-validator.js +7 -11
  52. package/dist/cjs/validator/validator-factory.js +1 -1
  53. package/dist/diff/annotators.d.ts +1 -1
  54. package/dist/diff/annotators.js +3 -2
  55. package/dist/diff/change-reports.d.ts +1 -1
  56. package/dist/diff/core.d.ts +2 -2
  57. package/dist/diff/core.js +2 -2
  58. package/dist/diff/enhanced-diff.d.ts +3 -3
  59. package/dist/diff/enhanced-diff.js +7 -21
  60. package/dist/diff/impact-strategies-refactored.d.ts +2 -2
  61. package/dist/diff/impact-strategies.d.ts +2 -2
  62. package/dist/diff/index.d.ts +8 -8
  63. package/dist/diff/index.js +8 -8
  64. package/dist/diff/metrics-calculator.d.ts +1 -1
  65. package/dist/diff/risk-calculator.d.ts +1 -1
  66. package/dist/diff/suggestion-generator.d.ts +2 -2
  67. package/dist/errors/config-error.d.ts +1 -1
  68. package/dist/errors/config-error.js +1 -1
  69. package/dist/errors/error-factory.d.ts +7 -7
  70. package/dist/errors/error-factory.js +7 -7
  71. package/dist/errors/index.d.ts +8 -8
  72. package/dist/errors/index.js +8 -8
  73. package/dist/errors/loader-error.d.ts +1 -1
  74. package/dist/errors/loader-error.js +1 -1
  75. package/dist/errors/reference-error.d.ts +1 -1
  76. package/dist/errors/reference-error.js +1 -1
  77. package/dist/errors/schema-error.d.ts +1 -1
  78. package/dist/errors/schema-error.js +1 -1
  79. package/dist/errors/security-error.d.ts +1 -1
  80. package/dist/errors/security-error.js +1 -1
  81. package/dist/errors/semantic-error.d.ts +1 -1
  82. package/dist/errors/semantic-error.js +1 -1
  83. package/dist/index.cjs +13 -13
  84. package/dist/index.d.ts +13 -13
  85. package/dist/index.js +13 -13
  86. package/dist/loader/index.d.ts +5 -5
  87. package/dist/loader/index.js +4 -4
  88. package/dist/loader/security-validator.d.ts +1 -1
  89. package/dist/loader/security-validator.js +1 -1
  90. package/dist/loader/unispec-loader.d.ts +2 -2
  91. package/dist/loader/unispec-loader.js +3 -3
  92. package/dist/loader/yaml-loader.d.ts +1 -1
  93. package/dist/loader/yaml-loader.js +1 -1
  94. package/dist/normalizer/core.d.ts +2 -2
  95. package/dist/normalizer/core.js +11 -6
  96. package/dist/normalizer/graphql-normalizer.d.ts +1 -1
  97. package/dist/normalizer/index.d.ts +2 -2
  98. package/dist/normalizer/index.js +1 -1
  99. package/dist/normalizer/rest-normalizer.d.ts +1 -1
  100. package/dist/normalizer/types.d.ts +1 -1
  101. package/dist/normalizer/utils.d.ts +6 -3
  102. package/dist/normalizer/utils.js +23 -7
  103. package/dist/normalizer/websocket-normalizer.d.ts +1 -1
  104. package/dist/optimizer/core.d.ts +2 -2
  105. package/dist/optimizer/core.js +35 -10
  106. package/dist/optimizer/index.d.ts +4 -4
  107. package/dist/optimizer/index.js +3 -3
  108. package/dist/optimizer/optimization-functions.d.ts +2 -2
  109. package/dist/optimizer/optimization-functions.js +2 -2
  110. package/dist/optimizer/types.d.ts +1 -1
  111. package/dist/schemas/dedupe.d.ts +1 -1
  112. package/dist/schemas/dedupe.js +27 -14
  113. package/dist/schemas/index.d.ts +3 -3
  114. package/dist/schemas/index.js +3 -3
  115. package/dist/schemas/resolver.d.ts +1 -1
  116. package/dist/schemas/resolver.js +3 -2
  117. package/dist/types/index.d.ts +2 -1
  118. package/dist/validator/ajv-validator.d.ts +1 -1
  119. package/dist/validator/ajv-validator.js +1 -1
  120. package/dist/validator/config-validator-main.d.ts +2 -2
  121. package/dist/validator/config-validator-main.js +4 -4
  122. package/dist/validator/config-validator.d.ts +1 -1
  123. package/dist/validator/config-validator.js +1 -1
  124. package/dist/validator/index.d.ts +10 -10
  125. package/dist/validator/index.js +7 -7
  126. package/dist/validator/reference-validator.d.ts +1 -1
  127. package/dist/validator/reference-validator.js +1 -1
  128. package/dist/validator/schema-references.d.ts +1 -1
  129. package/dist/validator/semantic-validator.d.ts +1 -1
  130. package/dist/validator/tests-validator.d.ts +2 -2
  131. package/dist/validator/tests-validator.js +2 -2
  132. package/dist/validator/types.d.ts +3 -3
  133. package/dist/validator/unispec-validator.d.ts +2 -2
  134. package/dist/validator/unispec-validator.js +7 -11
  135. package/dist/validator/validator-factory.d.ts +3 -3
  136. package/dist/validator/validator-factory.js +1 -1
  137. package/package.json +3 -3
  138. package/dist/cjs/src/cache/cache-factory.js +0 -72
  139. package/dist/cjs/src/cache/cache-manager.js +0 -128
  140. package/dist/cjs/src/cache/constants.js +0 -25
  141. package/dist/cjs/src/cache/hash-utils.js +0 -19
  142. package/dist/cjs/src/cache/hashing.js +0 -230
  143. package/dist/cjs/src/cache/index.js +0 -24
  144. package/dist/cjs/src/cache/lru-cache.js +0 -144
  145. package/dist/cjs/src/cache/types.js +0 -5
  146. package/dist/cjs/src/diff/annotators.js +0 -160
  147. package/dist/cjs/src/diff/change-reports.js +0 -369
  148. package/dist/cjs/src/diff/core.js +0 -158
  149. package/dist/cjs/src/diff/enhanced-diff.js +0 -65
  150. package/dist/cjs/src/diff/impact-strategies-refactored.js +0 -230
  151. package/dist/cjs/src/diff/impact-strategies.js +0 -219
  152. package/dist/cjs/src/diff/index.js +0 -27
  153. package/dist/cjs/src/diff/metrics-calculator.js +0 -69
  154. package/dist/cjs/src/diff/risk-calculator.js +0 -58
  155. package/dist/cjs/src/diff/suggestion-generator.js +0 -78
  156. package/dist/cjs/src/diff/types.js +0 -11
  157. package/dist/cjs/src/errors/base-error.js +0 -33
  158. package/dist/cjs/src/errors/config-error.js +0 -11
  159. package/dist/cjs/src/errors/error-factory.js +0 -48
  160. package/dist/cjs/src/errors/index.js +0 -19
  161. package/dist/cjs/src/errors/loader-error.js +0 -11
  162. package/dist/cjs/src/errors/reference-error.js +0 -11
  163. package/dist/cjs/src/errors/schema-error.js +0 -11
  164. package/dist/cjs/src/errors/security-error.js +0 -11
  165. package/dist/cjs/src/errors/semantic-error.js +0 -11
  166. package/dist/cjs/src/generated-schemas.js +0 -2100
  167. package/dist/cjs/src/index.js +0 -59
  168. package/dist/cjs/src/loader/index.js +0 -13
  169. package/dist/cjs/src/loader/security-validator.js +0 -53
  170. package/dist/cjs/src/loader/types.js +0 -11
  171. package/dist/cjs/src/loader/unispec-loader.js +0 -84
  172. package/dist/cjs/src/loader/yaml-loader.js +0 -76
  173. package/dist/cjs/src/normalizer/core.js +0 -37
  174. package/dist/cjs/src/normalizer/graphql-normalizer.js +0 -67
  175. package/dist/cjs/src/normalizer/index.js +0 -7
  176. package/dist/cjs/src/normalizer/rest-normalizer.js +0 -51
  177. package/dist/cjs/src/normalizer/types.js +0 -2
  178. package/dist/cjs/src/normalizer/utils.js +0 -49
  179. package/dist/cjs/src/normalizer/websocket-normalizer.js +0 -81
  180. package/dist/cjs/src/optimizer/core.js +0 -140
  181. package/dist/cjs/src/optimizer/index.js +0 -17
  182. package/dist/cjs/src/optimizer/optimization-functions.js +0 -185
  183. package/dist/cjs/src/optimizer/types.js +0 -2
  184. package/dist/cjs/src/optimizer/utils.js +0 -32
  185. package/dist/cjs/src/schemas/dedupe.js +0 -113
  186. package/dist/cjs/src/schemas/index.js +0 -14
  187. package/dist/cjs/src/schemas/resolver.js +0 -42
  188. package/dist/cjs/src/schemas/utils.js +0 -53
  189. package/dist/cjs/src/types/index.js +0 -2
  190. package/dist/cjs/src/validator/ajv-validator.js +0 -82
  191. package/dist/cjs/src/validator/config-validator-main.js +0 -34
  192. package/dist/cjs/src/validator/config-validator.js +0 -17
  193. package/dist/cjs/src/validator/index.js +0 -23
  194. package/dist/cjs/src/validator/object-traversal.js +0 -112
  195. package/dist/cjs/src/validator/reference-validator.js +0 -233
  196. package/dist/cjs/src/validator/schema-references.js +0 -116
  197. package/dist/cjs/src/validator/semantic-validator.js +0 -328
  198. package/dist/cjs/src/validator/tests-validator.js +0 -16
  199. package/dist/cjs/src/validator/types.js +0 -2
  200. package/dist/cjs/src/validator/unispec-validator.js +0 -80
  201. package/dist/cjs/src/validator/validator-factory.js +0 -77
  202. package/dist/cjs/src/versions.js +0 -147
  203. package/dist/cjs/tests/cache/cache.test.js +0 -274
  204. package/dist/cjs/tests/cache/utils.js +0 -32
  205. package/dist/cjs/tests/concurrency-normalizer-optimizer.test.js +0 -1
  206. package/dist/cjs/tests/diff/diff-annotators.test.js +0 -280
  207. package/dist/cjs/tests/diff/diff-comprehensive.test.js +0 -262
  208. package/dist/cjs/tests/diff/diff-extended.test.js +0 -235
  209. package/dist/cjs/tests/diff/diff.test.js +0 -189
  210. package/dist/cjs/tests/diff/utils.js +0 -8
  211. package/dist/cjs/tests/errors/errors-integration.test.js +0 -173
  212. package/dist/cjs/tests/errors/errors.test.js +0 -280
  213. package/dist/cjs/tests/errors/utils.js +0 -7
  214. package/dist/cjs/tests/loader/integration.test.js +0 -216
  215. package/dist/cjs/tests/loader/loader.test.js +0 -341
  216. package/dist/cjs/tests/normalizer/normalizer-comprehensive.test.js +0 -648
  217. package/dist/cjs/tests/normalizer/normalizer-invalid.test.js +0 -258
  218. package/dist/cjs/tests/normalizer/normalizer-valid.test.js +0 -238
  219. package/dist/cjs/tests/normalizer/utils.js +0 -47
  220. package/dist/cjs/tests/optimizer/compress-references.test.js +0 -304
  221. package/dist/cjs/tests/optimizer/deduplication.test.js +0 -132
  222. package/dist/cjs/tests/optimizer/integration.test.js +0 -131
  223. package/dist/cjs/tests/optimizer/optimization-report.test.js +0 -222
  224. package/dist/cjs/tests/optimizer/optimize-document.test.js +0 -187
  225. package/dist/cjs/tests/optimizer/orphaned-schemas.test.js +0 -194
  226. package/dist/cjs/tests/optimizer/sort-schemas.test.js +0 -131
  227. package/dist/cjs/tests/optimizer/utils.js +0 -209
  228. package/dist/cjs/tests/schemas/schemas-edge-cases.test.js +0 -223
  229. package/dist/cjs/tests/schemas/schemas.test.js +0 -400
  230. package/dist/cjs/tests/schemas/utils.js +0 -7
  231. package/dist/cjs/tests/utils.js +0 -131
  232. package/dist/cjs/tests/validator/config-validator.test.js +0 -78
  233. package/dist/cjs/tests/validator/debug-config.js +0 -1
  234. package/dist/cjs/tests/validator/debug-missing-service.js +0 -1
  235. package/dist/cjs/tests/validator/debug-other-configs.js +0 -1
  236. package/dist/cjs/tests/validator/debug-references.js +0 -1
  237. package/dist/cjs/tests/validator/unispec-validator.test.js +0 -103
  238. package/dist/cjs/tests/validator/utils.js +0 -25
  239. package/dist/src/cache/cache-factory.d.ts +0 -31
  240. package/dist/src/cache/cache-factory.js +0 -65
  241. package/dist/src/cache/cache-manager.d.ts +0 -62
  242. package/dist/src/cache/cache-manager.js +0 -124
  243. package/dist/src/cache/constants.d.ts +0 -21
  244. package/dist/src/cache/constants.js +0 -22
  245. package/dist/src/cache/hash-utils.d.ts +0 -11
  246. package/dist/src/cache/hash-utils.js +0 -15
  247. package/dist/src/cache/hashing.d.ts +0 -28
  248. package/dist/src/cache/hashing.js +0 -193
  249. package/dist/src/cache/index.d.ts +0 -6
  250. package/dist/src/cache/index.js +0 -10
  251. package/dist/src/cache/lru-cache.d.ts +0 -44
  252. package/dist/src/cache/lru-cache.js +0 -140
  253. package/dist/src/cache/types.d.ts +0 -24
  254. package/dist/src/cache/types.js +0 -4
  255. package/dist/src/diff/annotators.d.ts +0 -4
  256. package/dist/src/diff/annotators.js +0 -155
  257. package/dist/src/diff/change-reports.d.ts +0 -37
  258. package/dist/src/diff/change-reports.js +0 -366
  259. package/dist/src/diff/core.d.ts +0 -26
  260. package/dist/src/diff/core.js +0 -155
  261. package/dist/src/diff/enhanced-diff.d.ts +0 -51
  262. package/dist/src/diff/enhanced-diff.js +0 -62
  263. package/dist/src/diff/impact-strategies-refactored.d.ts +0 -69
  264. package/dist/src/diff/impact-strategies-refactored.js +0 -223
  265. package/dist/src/diff/impact-strategies.d.ts +0 -41
  266. package/dist/src/diff/impact-strategies.js +0 -212
  267. package/dist/src/diff/index.d.ts +0 -8
  268. package/dist/src/diff/index.js +0 -11
  269. package/dist/src/diff/metrics-calculator.d.ts +0 -23
  270. package/dist/src/diff/metrics-calculator.js +0 -65
  271. package/dist/src/diff/risk-calculator.d.ts +0 -23
  272. package/dist/src/diff/risk-calculator.js +0 -55
  273. package/dist/src/diff/suggestion-generator.d.ts +0 -18
  274. package/dist/src/diff/suggestion-generator.js +0 -74
  275. package/dist/src/diff/types.d.ts +0 -24
  276. package/dist/src/diff/types.js +0 -8
  277. package/dist/src/errors/base-error.d.ts +0 -20
  278. package/dist/src/errors/base-error.js +0 -29
  279. package/dist/src/errors/config-error.d.ts +0 -4
  280. package/dist/src/errors/config-error.js +0 -7
  281. package/dist/src/errors/error-factory.d.ts +0 -22
  282. package/dist/src/errors/error-factory.js +0 -45
  283. package/dist/src/errors/index.d.ts +0 -8
  284. package/dist/src/errors/index.js +0 -8
  285. package/dist/src/errors/loader-error.d.ts +0 -4
  286. package/dist/src/errors/loader-error.js +0 -7
  287. package/dist/src/errors/reference-error.d.ts +0 -4
  288. package/dist/src/errors/reference-error.js +0 -7
  289. package/dist/src/errors/schema-error.d.ts +0 -4
  290. package/dist/src/errors/schema-error.js +0 -7
  291. package/dist/src/errors/security-error.d.ts +0 -4
  292. package/dist/src/errors/security-error.js +0 -7
  293. package/dist/src/errors/semantic-error.d.ts +0 -4
  294. package/dist/src/errors/semantic-error.js +0 -7
  295. package/dist/src/generated-schemas.d.ts +0 -2073
  296. package/dist/src/generated-schemas.js +0 -2097
  297. package/dist/src/index.d.ts +0 -13
  298. package/dist/src/index.js +0 -43
  299. package/dist/src/loader/index.d.ts +0 -5
  300. package/dist/src/loader/index.js +0 -5
  301. package/dist/src/loader/security-validator.d.ts +0 -5
  302. package/dist/src/loader/security-validator.js +0 -50
  303. package/dist/src/loader/types.d.ts +0 -30
  304. package/dist/src/loader/types.js +0 -8
  305. package/dist/src/loader/unispec-loader.d.ts +0 -10
  306. package/dist/src/loader/unispec-loader.js +0 -81
  307. package/dist/src/loader/yaml-loader.d.ts +0 -10
  308. package/dist/src/loader/yaml-loader.js +0 -39
  309. package/dist/src/normalizer/core.d.ts +0 -24
  310. package/dist/src/normalizer/core.js +0 -34
  311. package/dist/src/normalizer/graphql-normalizer.d.ts +0 -8
  312. package/dist/src/normalizer/graphql-normalizer.js +0 -64
  313. package/dist/src/normalizer/index.d.ts +0 -2
  314. package/dist/src/normalizer/index.js +0 -3
  315. package/dist/src/normalizer/rest-normalizer.d.ts +0 -8
  316. package/dist/src/normalizer/rest-normalizer.js +0 -48
  317. package/dist/src/normalizer/types.d.ts +0 -7
  318. package/dist/src/normalizer/types.js +0 -1
  319. package/dist/src/normalizer/utils.d.ts +0 -17
  320. package/dist/src/normalizer/utils.js +0 -45
  321. package/dist/src/normalizer/websocket-normalizer.d.ts +0 -8
  322. package/dist/src/normalizer/websocket-normalizer.js +0 -78
  323. package/dist/src/optimizer/core.d.ts +0 -17
  324. package/dist/src/optimizer/core.js +0 -136
  325. package/dist/src/optimizer/index.d.ts +0 -4
  326. package/dist/src/optimizer/index.js +0 -7
  327. package/dist/src/optimizer/optimization-functions.d.ts +0 -32
  328. package/dist/src/optimizer/optimization-functions.js +0 -179
  329. package/dist/src/optimizer/types.d.ts +0 -28
  330. package/dist/src/optimizer/types.js +0 -1
  331. package/dist/src/optimizer/utils.d.ts +0 -7
  332. package/dist/src/optimizer/utils.js +0 -29
  333. package/dist/src/schemas/dedupe.d.ts +0 -9
  334. package/dist/src/schemas/dedupe.js +0 -110
  335. package/dist/src/schemas/index.d.ts +0 -3
  336. package/dist/src/schemas/index.js +0 -6
  337. package/dist/src/schemas/resolver.d.ts +0 -19
  338. package/dist/src/schemas/resolver.js +0 -38
  339. package/dist/src/schemas/utils.d.ts +0 -20
  340. package/dist/src/schemas/utils.js +0 -49
  341. package/dist/src/types/index.d.ts +0 -434
  342. package/dist/src/types/index.js +0 -1
  343. package/dist/src/validator/ajv-validator.d.ts +0 -15
  344. package/dist/src/validator/ajv-validator.js +0 -75
  345. package/dist/src/validator/config-validator-main.d.ts +0 -10
  346. package/dist/src/validator/config-validator-main.js +0 -31
  347. package/dist/src/validator/config-validator.d.ts +0 -5
  348. package/dist/src/validator/config-validator.js +0 -14
  349. package/dist/src/validator/index.d.ts +0 -10
  350. package/dist/src/validator/index.js +0 -11
  351. package/dist/src/validator/object-traversal.d.ts +0 -52
  352. package/dist/src/validator/object-traversal.js +0 -104
  353. package/dist/src/validator/reference-validator.d.ts +0 -31
  354. package/dist/src/validator/reference-validator.js +0 -230
  355. package/dist/src/validator/schema-references.d.ts +0 -23
  356. package/dist/src/validator/schema-references.js +0 -111
  357. package/dist/src/validator/semantic-validator.d.ts +0 -26
  358. package/dist/src/validator/semantic-validator.js +0 -325
  359. package/dist/src/validator/tests-validator.d.ts +0 -9
  360. package/dist/src/validator/tests-validator.js +0 -13
  361. package/dist/src/validator/types.d.ts +0 -29
  362. package/dist/src/validator/types.js +0 -1
  363. package/dist/src/validator/unispec-validator.d.ts +0 -15
  364. package/dist/src/validator/unispec-validator.js +0 -77
  365. package/dist/src/validator/validator-factory.d.ts +0 -10
  366. package/dist/src/validator/validator-factory.js +0 -73
  367. package/dist/src/versions.d.ts +0 -10
  368. package/dist/src/versions.js +0 -143
  369. package/dist/tests/cache/cache.test.d.ts +0 -1
  370. package/dist/tests/cache/cache.test.js +0 -269
  371. package/dist/tests/cache/utils.d.ts +0 -4
  372. package/dist/tests/cache/utils.js +0 -24
  373. package/dist/tests/concurrency-normalizer-optimizer.test.d.ts +0 -0
  374. package/dist/tests/concurrency-normalizer-optimizer.test.js +0 -1
  375. package/dist/tests/diff/diff-annotators.test.d.ts +0 -1
  376. package/dist/tests/diff/diff-annotators.test.js +0 -275
  377. package/dist/tests/diff/diff-comprehensive.test.d.ts +0 -1
  378. package/dist/tests/diff/diff-comprehensive.test.js +0 -257
  379. package/dist/tests/diff/diff-extended.test.d.ts +0 -1
  380. package/dist/tests/diff/diff-extended.test.js +0 -230
  381. package/dist/tests/diff/diff.test.d.ts +0 -1
  382. package/dist/tests/diff/diff.test.js +0 -184
  383. package/dist/tests/diff/utils.d.ts +0 -2
  384. package/dist/tests/diff/utils.js +0 -3
  385. package/dist/tests/errors/errors-integration.test.d.ts +0 -1
  386. package/dist/tests/errors/errors-integration.test.js +0 -168
  387. package/dist/tests/errors/errors.test.d.ts +0 -1
  388. package/dist/tests/errors/errors.test.js +0 -275
  389. package/dist/tests/errors/utils.d.ts +0 -2
  390. package/dist/tests/errors/utils.js +0 -3
  391. package/dist/tests/loader/integration.test.d.ts +0 -1
  392. package/dist/tests/loader/integration.test.js +0 -211
  393. package/dist/tests/loader/loader.test.d.ts +0 -1
  394. package/dist/tests/loader/loader.test.js +0 -336
  395. package/dist/tests/normalizer/normalizer-comprehensive.test.d.ts +0 -1
  396. package/dist/tests/normalizer/normalizer-comprehensive.test.js +0 -643
  397. package/dist/tests/normalizer/normalizer-invalid.test.d.ts +0 -1
  398. package/dist/tests/normalizer/normalizer-invalid.test.js +0 -253
  399. package/dist/tests/normalizer/normalizer-valid.test.d.ts +0 -1
  400. package/dist/tests/normalizer/normalizer-valid.test.js +0 -233
  401. package/dist/tests/normalizer/utils.d.ts +0 -18
  402. package/dist/tests/normalizer/utils.js +0 -36
  403. package/dist/tests/optimizer/compress-references.test.d.ts +0 -1
  404. package/dist/tests/optimizer/compress-references.test.js +0 -299
  405. package/dist/tests/optimizer/deduplication.test.d.ts +0 -1
  406. package/dist/tests/optimizer/deduplication.test.js +0 -127
  407. package/dist/tests/optimizer/integration.test.d.ts +0 -1
  408. package/dist/tests/optimizer/integration.test.js +0 -126
  409. package/dist/tests/optimizer/optimization-report.test.d.ts +0 -1
  410. package/dist/tests/optimizer/optimization-report.test.js +0 -217
  411. package/dist/tests/optimizer/optimize-document.test.d.ts +0 -1
  412. package/dist/tests/optimizer/optimize-document.test.js +0 -182
  413. package/dist/tests/optimizer/orphaned-schemas.test.d.ts +0 -1
  414. package/dist/tests/optimizer/orphaned-schemas.test.js +0 -189
  415. package/dist/tests/optimizer/sort-schemas.test.d.ts +0 -1
  416. package/dist/tests/optimizer/sort-schemas.test.js +0 -126
  417. package/dist/tests/optimizer/utils.d.ts +0 -8
  418. package/dist/tests/optimizer/utils.js +0 -199
  419. package/dist/tests/schemas/schemas-edge-cases.test.d.ts +0 -1
  420. package/dist/tests/schemas/schemas-edge-cases.test.js +0 -218
  421. package/dist/tests/schemas/schemas.test.d.ts +0 -1
  422. package/dist/tests/schemas/schemas.test.js +0 -395
  423. package/dist/tests/schemas/utils.d.ts +0 -2
  424. package/dist/tests/schemas/utils.js +0 -3
  425. package/dist/tests/utils.d.ts +0 -10
  426. package/dist/tests/utils.js +0 -118
  427. package/dist/tests/validator/config-validator.test.d.ts +0 -1
  428. package/dist/tests/validator/config-validator.test.js +0 -73
  429. package/dist/tests/validator/debug-config.d.ts +0 -0
  430. package/dist/tests/validator/debug-config.js +0 -1
  431. package/dist/tests/validator/debug-missing-service.d.ts +0 -0
  432. package/dist/tests/validator/debug-missing-service.js +0 -1
  433. package/dist/tests/validator/debug-other-configs.d.ts +0 -0
  434. package/dist/tests/validator/debug-other-configs.js +0 -1
  435. package/dist/tests/validator/debug-references.d.ts +0 -0
  436. package/dist/tests/validator/debug-references.js +0 -1
  437. package/dist/tests/validator/unispec-validator.test.d.ts +0 -1
  438. package/dist/tests/validator/unispec-validator.test.js +0 -98
  439. package/dist/tests/validator/utils.d.ts +0 -6
  440. package/dist/tests/validator/utils.js +0 -20
@@ -1,59 +0,0 @@
1
- "use strict";
2
- // ============================================================================
3
- // CORE TYPES AND INTERFACES
4
- // ============================================================================
5
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- var desc = Object.getOwnPropertyDescriptor(m, k);
8
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
- desc = { enumerable: true, get: function() { return m[k]; } };
10
- }
11
- Object.defineProperty(o, k2, desc);
12
- }) : (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- o[k2] = m[k];
15
- }));
16
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
- };
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- // ============================================================================
21
- // CACHING SYSTEM
22
- // ============================================================================
23
- __exportStar(require("./cache/index.js"), exports);
24
- // ============================================================================
25
- // DIFF AND CHANGE ANALYSIS
26
- // ============================================================================
27
- __exportStar(require("./diff/index.js"), exports);
28
- // ============================================================================
29
- // DOCUMENT LOADING AND PARSING
30
- // ============================================================================
31
- __exportStar(require("./loader/index.js"), exports);
32
- // ============================================================================
33
- // DOCUMENT NORMALIZATION
34
- // ============================================================================
35
- __exportStar(require("./normalizer/index.js"), exports);
36
- // ============================================================================
37
- // DOCUMENT OPTIMIZATION
38
- // ============================================================================
39
- __exportStar(require("./optimizer/index.js"), exports);
40
- // ============================================================================
41
- // SCHEMA MANAGEMENT
42
- // ============================================================================
43
- __exportStar(require("./schemas/index.js"), exports);
44
- __exportStar(require("./types/index.js"), exports);
45
- // ============================================================================
46
- // VALIDATION SYSTEM
47
- // ============================================================================
48
- __exportStar(require("./validator/index.js"), exports);
49
- // ============================================================================
50
- // UTILITY FUNCTIONS
51
- // ============================================================================
52
- __exportStar(require("./validator/object-traversal.js"), exports);
53
- __exportStar(require("./validator/reference-validator.js"), exports);
54
- __exportStar(require("./validator/schema-references.js"), exports);
55
- __exportStar(require("./validator/semantic-validator.js"), exports);
56
- // ============================================================================
57
- // VERSION INFORMATION
58
- // ============================================================================
59
- __exportStar(require("./versions.js"), exports);
@@ -1,13 +0,0 @@
1
- "use strict";
2
- // Export all loader functionality
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.validateYamlModule = exports.getYamlModule = exports.loadUniSpec = exports.ALLOWED_YAML_MODULES = exports.validateDocumentSecurity = void 0;
5
- var security_validator_1 = require("./security-validator.js");
6
- Object.defineProperty(exports, "validateDocumentSecurity", { enumerable: true, get: function () { return security_validator_1.validateDocumentSecurity; } });
7
- var types_1 = require("./types.js");
8
- Object.defineProperty(exports, "ALLOWED_YAML_MODULES", { enumerable: true, get: function () { return types_1.ALLOWED_YAML_MODULES; } });
9
- var unispec_loader_1 = require("./unispec-loader.js");
10
- Object.defineProperty(exports, "loadUniSpec", { enumerable: true, get: function () { return unispec_loader_1.loadUniSpec; } });
11
- var yaml_loader_1 = require("./yaml-loader.js");
12
- Object.defineProperty(exports, "getYamlModule", { enumerable: true, get: function () { return yaml_loader_1.getYamlModule; } });
13
- Object.defineProperty(exports, "validateYamlModule", { enumerable: true, get: function () { return yaml_loader_1.validateYamlModule; } });
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateDocumentSecurity = validateDocumentSecurity;
4
- const errors_1 = require("../errors/index.js");
5
- /**
6
- * Validate document security constraints using iterative approach to prevent stack overflow.
7
- */
8
- function validateDocumentSecurity(doc, options) {
9
- let keyCount = 0;
10
- let maxDepth = 0;
11
- // Use stack-based iteration instead of recursion
12
- const stack = [
13
- { obj: doc, depth: 0, path: "" },
14
- ];
15
- while (stack.length > 0) {
16
- const item = stack.pop();
17
- if (!item)
18
- break;
19
- const { obj, depth, path } = item;
20
- // Check depth limit
21
- if (depth > options.maxDepth) {
22
- throw errors_1.ErrorFactory.createSecurityError(`Document depth (${depth}) exceeds maximum allowed depth (${options.maxDepth}) at path: ${path}`, path, { currentDepth: depth, maxDepth: options.maxDepth });
23
- }
24
- maxDepth = Math.max(maxDepth, depth);
25
- if (Array.isArray(obj)) {
26
- // Process array elements
27
- for (let i = obj.length - 1; i >= 0; i--) {
28
- stack.push({
29
- obj: obj[i],
30
- depth: depth + 1,
31
- path: `${path}[${i}]`,
32
- });
33
- }
34
- }
35
- else if (obj && typeof obj === "object") {
36
- // Process object properties
37
- const objRecord = obj;
38
- const keys = Object.keys(objRecord);
39
- for (let i = keys.length - 1; i >= 0; i--) {
40
- const key = keys[i];
41
- keyCount++;
42
- if (keyCount > options.maxKeys) {
43
- throw errors_1.ErrorFactory.createSecurityError(`Document key count (${keyCount}) exceeds maximum allowed keys (${options.maxKeys}) at path: ${path}`, path, { keyCount, maxKeys: options.maxKeys });
44
- }
45
- stack.push({
46
- obj: objRecord[key],
47
- depth: depth + 1,
48
- path: path ? `${path}.${key}` : key,
49
- });
50
- }
51
- }
52
- }
53
- }
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ALLOWED_YAML_MODULES = void 0;
4
- /**
5
- * Allowed YAML module patterns for security validation.
6
- */
7
- exports.ALLOWED_YAML_MODULES = [
8
- "js-yaml",
9
- "@js-yaml/fork",
10
- "yaml",
11
- ];
@@ -1,84 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loadUniSpec = loadUniSpec;
4
- const index_1 = require("../errors/index.js");
5
- const security_validator_1 = require("./security-validator.js");
6
- const yaml_loader_1 = require("./yaml-loader.js");
7
- /**
8
- * Load a UniSpec document from a raw input value.
9
- * Supports:
10
- * - JavaScript objects (treated as already parsed UniSpec)
11
- * - JSON strings
12
- * - YAML strings
13
- */
14
- async function loadUniSpec(input, options = {}) {
15
- // Set default security limits
16
- const secureOptions = {
17
- maxDepth: options.maxDepth ?? 100,
18
- maxKeys: options.maxKeys ?? 10000,
19
- allowedTags: options.allowedTags ?? [
20
- "str",
21
- "int",
22
- "float",
23
- "bool",
24
- "null",
25
- "seq",
26
- "map",
27
- "binary",
28
- "timestamp",
29
- "merge",
30
- "omap",
31
- "pairs",
32
- "set",
33
- ],
34
- maxDocumentSize: options.maxDocumentSize ?? 10 * 1024 * 1024,
35
- strictYamlTags: options.strictYamlTags ?? false,
36
- };
37
- if (typeof input === "string") {
38
- const trimmed = input.trim();
39
- if (!trimmed) {
40
- throw index_1.ErrorFactory.createLoaderError("Cannot load UniSpec: input string is empty", "");
41
- }
42
- // Check document size limit
43
- if (trimmed.length > secureOptions.maxDocumentSize) {
44
- throw index_1.ErrorFactory.createSecurityError(`Document size (${trimmed.length} bytes) exceeds maximum allowed size (${secureOptions.maxDocumentSize} bytes)`, "", {
45
- documentSize: trimmed.length,
46
- maxSize: secureOptions.maxDocumentSize,
47
- });
48
- }
49
- // Try JSON first (faster and more common)
50
- try {
51
- const parsed = JSON.parse(trimmed);
52
- (0, security_validator_1.validateDocumentSecurity)(parsed, secureOptions);
53
- return parsed;
54
- }
55
- catch (jsonError) {
56
- // If JSON fails, try YAML with security validation
57
- try {
58
- // Get validated YAML module
59
- const yaml = await (0, yaml_loader_1.getYamlModule)();
60
- const doc = yaml.load(trimmed, {
61
- filename: options.filename,
62
- // Enhanced security options
63
- schema: yaml.FAILSAFE_SCHEMA,
64
- // Additional security constraints would go here if the library supports them
65
- });
66
- (0, security_validator_1.validateDocumentSecurity)(doc, secureOptions);
67
- return doc;
68
- }
69
- catch (yamlError) {
70
- const jsonMsg = jsonError instanceof Error ? jsonError.message : String(jsonError);
71
- const yamlMsg = yamlError instanceof Error ? yamlError.message : String(yamlError);
72
- // Create specific error based on what failed
73
- if (yamlMsg.includes("not in the allowed list") ||
74
- yamlMsg.includes("security")) {
75
- const securityError = index_1.ErrorFactory.fromError(yamlError, "yaml_security_error");
76
- throw securityError;
77
- }
78
- throw index_1.ErrorFactory.createLoaderError(`Failed to parse input as JSON or YAML. JSON error: ${jsonMsg}. YAML error: ${yamlMsg}`, "", { jsonError: jsonMsg, yamlError: yamlMsg });
79
- }
80
- }
81
- }
82
- (0, security_validator_1.validateDocumentSecurity)(input, secureOptions);
83
- return input;
84
- }
@@ -1,76 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.getYamlModule = getYamlModule;
37
- exports.validateYamlModule = validateYamlModule;
38
- const index_1 = require("../errors/index.js");
39
- // Static import with security validation
40
- let yamlModule = null;
41
- /**
42
- * Securely load YAML module with validation.
43
- * Uses static import path and validates the module structure.
44
- */
45
- async function getYamlModule() {
46
- if (yamlModule) {
47
- return yamlModule;
48
- }
49
- try {
50
- // Use static import path for security
51
- const importedModule = (await Promise.resolve().then(() => __importStar(require("js-yaml"))));
52
- validateYamlModule(importedModule);
53
- yamlModule = importedModule;
54
- return yamlModule;
55
- }
56
- catch (error) {
57
- throw index_1.ErrorFactory.createSecurityError("Failed to load and validate YAML module", "", { error: error instanceof Error ? error.message : String(error) });
58
- }
59
- }
60
- /**
61
- * Validate YAML module for security.
62
- */
63
- function validateYamlModule(yamlModule) {
64
- if (!yamlModule || typeof yamlModule !== "object") {
65
- throw index_1.ErrorFactory.createLoaderError("Invalid YAML module: module must be an object", "", { moduleType: typeof yamlModule });
66
- }
67
- const module = yamlModule;
68
- // Check for required functions
69
- if (!module.load || typeof module.load !== "function") {
70
- throw index_1.ErrorFactory.createLoaderError("Invalid YAML module: missing load function", "", { hasLoad: !!module.load, loadType: typeof module.load });
71
- }
72
- // Check for FAILSAFE_SCHEMA
73
- if (!module.FAILSAFE_SCHEMA) {
74
- throw index_1.ErrorFactory.createSecurityError("YAML module must support FAILSAFE_SCHEMA for security", "", { hasFailsafeSchema: !!module.FAILSAFE_SCHEMA });
75
- }
76
- }
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalizeUniSpec = normalizeUniSpec;
4
- const graphql_normalizer_1 = require("./graphql-normalizer.js");
5
- const rest_normalizer_1 = require("./rest-normalizer.js");
6
- const utils_1 = require("./utils.js");
7
- const websocket_normalizer_1 = require("./websocket-normalizer.js");
8
- /**
9
- * Normalize a UniSpec document into a canonical, deterministic form.
10
- *
11
- * This function ensures consistent representation of UniSpec documents
12
- * by sorting object keys and protocol-specific structures in a predictable order.
13
- * Useful for:
14
- * - Generating stable diffs between documents
15
- * - Creating consistent output for caching
16
- * - Ensuring reproducible builds
17
- *
18
- * Current behavior:
19
- * - Recursively sorts object keys lexicographically
20
- * - Sorts REST routes by name or path+method
21
- * - Sorts GraphQL operations by name within each operation type
22
- * - Sorts WebSocket channels and messages by name
23
- * - Preserves all values as-is
24
- *
25
- * @param doc - The UniSpec document to normalize
26
- * @param options - Normalization options (currently unused, reserved for future)
27
- * @returns The normalized UniSpec document
28
- */
29
- function normalizeUniSpec(doc, _options = {}) {
30
- // Apply protocol-specific normalizations first
31
- const restNormalized = (0, rest_normalizer_1.normalizeRestRoutes)(doc);
32
- const graphqlNormalized = (0, graphql_normalizer_1.normalizeGraphqlOperations)(restNormalized);
33
- const finalNormalized = (0, websocket_normalizer_1.normalizeWebSocket)(graphqlNormalized);
34
- // Always apply structural normalization to ensure immutability
35
- // and consistent key sorting, even if no protocol changes were made
36
- return (0, utils_1.normalizeValue)(finalNormalized);
37
- }
@@ -1,67 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalizeGraphqlOperations = normalizeGraphqlOperations;
4
- /**
5
- * Normalize GraphQL operations by sorting them lexicographically by name within each operation type.
6
- *
7
- * @param doc - The UniSpec document to normalize
8
- * @returns The document with normalized GraphQL operations
9
- */
10
- function normalizeGraphqlOperations(doc) {
11
- if (!doc || !doc.service?.protocols) {
12
- return doc;
13
- }
14
- const protocols = doc.service.protocols;
15
- const graphql = protocols.graphql;
16
- if (!graphql) {
17
- return doc;
18
- }
19
- const kinds = ["queries", "mutations", "subscriptions"];
20
- // Sort operations within each kind only if needed
21
- const normalizedOperations = {};
22
- let hasChanges = false;
23
- for (const kind of kinds) {
24
- const ops = graphql[kind];
25
- if (!Array.isArray(ops)) {
26
- normalizedOperations[kind] = ops;
27
- continue;
28
- }
29
- // Check if operations are already sorted
30
- const areOpsSorted = ops.every((op, index, arr) => {
31
- if (index === 0)
32
- return true;
33
- const prevName = arr[index - 1]?.name ?? "";
34
- const currentName = op?.name ?? "";
35
- return prevName.localeCompare(currentName) <= 0;
36
- });
37
- if (areOpsSorted) {
38
- normalizedOperations[kind] = ops; // No changes needed
39
- }
40
- else {
41
- const sortedOps = [...ops].sort((a, b) => {
42
- const aName = a?.name ?? "";
43
- const bName = b?.name ?? "";
44
- return aName.localeCompare(bName);
45
- });
46
- normalizedOperations[kind] = sortedOps;
47
- hasChanges = true;
48
- }
49
- }
50
- if (!hasChanges) {
51
- return doc; // No changes needed
52
- }
53
- // Return new document with sorted operations (immutable)
54
- return {
55
- ...doc,
56
- service: {
57
- ...doc.service,
58
- protocols: {
59
- ...protocols,
60
- graphql: {
61
- ...graphql,
62
- ...normalizedOperations,
63
- },
64
- },
65
- },
66
- };
67
- }
@@ -1,7 +0,0 @@
1
- "use strict";
2
- // Re-export types
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.normalizeUniSpec = void 0;
5
- // Re-export core function
6
- var core_1 = require("./core.js");
7
- Object.defineProperty(exports, "normalizeUniSpec", { enumerable: true, get: function () { return core_1.normalizeUniSpec; } });
@@ -1,51 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalizeRestRoutes = normalizeRestRoutes;
4
- /**
5
- * Normalize REST routes by sorting them lexicographically by name or path+method.
6
- *
7
- * @param doc - The UniSpec document to normalize
8
- * @returns The document with normalized REST routes
9
- */
10
- function normalizeRestRoutes(doc) {
11
- if (!doc || !doc.service?.protocols) {
12
- return doc;
13
- }
14
- const protocols = doc.service.protocols;
15
- const rest = protocols.rest;
16
- if (!rest || !Array.isArray(rest.routes)) {
17
- return doc;
18
- }
19
- // Check if routes are already sorted to avoid unnecessary cloning
20
- const isSorted = rest.routes.every((route, index, arr) => {
21
- if (index === 0)
22
- return true;
23
- const prevKey = arr[index - 1].name ||
24
- `${arr[index - 1].path} ${arr[index - 1].method}`;
25
- const currentKey = route.name || `${route.path} ${route.method}`;
26
- return prevKey.localeCompare(currentKey) <= 0;
27
- });
28
- if (isSorted) {
29
- return doc; // No changes needed
30
- }
31
- // Create immutable copy with sorted routes
32
- const sortedRoutes = [...rest.routes].sort((a, b) => {
33
- const keyA = a.name || `${a.path} ${a.method}`;
34
- const keyB = b.name || `${b.path} ${b.method}`;
35
- return keyA.localeCompare(keyB);
36
- });
37
- // Return new document with sorted routes (immutable)
38
- return {
39
- ...doc,
40
- service: {
41
- ...doc.service,
42
- protocols: {
43
- ...protocols,
44
- rest: {
45
- ...rest,
46
- routes: sortedRoutes,
47
- },
48
- },
49
- },
50
- };
51
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,49 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isPlainObject = isPlainObject;
4
- exports.normalizeValue = normalizeValue;
5
- /**
6
- * Check if a value is a plain object (not array, null, or other object types).
7
- *
8
- * @param value - The value to check
9
- * @returns true if the value is a plain object, false otherwise
10
- */
11
- function isPlainObject(value) {
12
- return Object.prototype.toString.call(value) === "[object Object]";
13
- }
14
- /**
15
- * Normalize a value by sorting object keys lexicographically (recursive).
16
- * Always creates new objects to ensure immutability.
17
- * Handles circular references gracefully.
18
- *
19
- * @param value - The value to normalize
20
- * @param seen - WeakSet of already seen objects for circular reference detection
21
- * @returns The normalized value (always a new object for objects/arrays)
22
- */
23
- function normalizeValue(value, seen = new WeakSet()) {
24
- // Handle primitives and null/undefined
25
- if (value === null || typeof value !== "object") {
26
- return value;
27
- }
28
- if (Array.isArray(value)) {
29
- // Always create new array with recursively normalized items
30
- return value.map((item) => normalizeValue(item, seen));
31
- }
32
- if (isPlainObject(value)) {
33
- // Check for circular references
34
- if (seen.has(value)) {
35
- // Return a placeholder for circular references to avoid infinite recursion
36
- return "[Circular]";
37
- }
38
- seen.add(value);
39
- const entries = Object.entries(value);
40
- // Always create new object with sorted keys and recursively normalized values
41
- const sortedEntries = entries.sort(([a], [b]) => a.localeCompare(b));
42
- const normalized = {};
43
- for (const [key, val] of sortedEntries) {
44
- normalized[key] = normalizeValue(val, seen);
45
- }
46
- return normalized;
47
- }
48
- return value;
49
- }
@@ -1,81 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalizeWebSocket = normalizeWebSocket;
4
- /**
5
- * Normalize WebSocket channels and messages by sorting them lexicographically by name.
6
- *
7
- * @param doc - The UniSpec document to normalize
8
- * @returns The document with normalized WebSocket channels and messages
9
- */
10
- function normalizeWebSocket(doc) {
11
- if (!doc || !doc.service?.protocols) {
12
- return doc;
13
- }
14
- const protocols = doc.service.protocols;
15
- const websocket = protocols.websocket;
16
- if (!websocket || !Array.isArray(websocket.channels)) {
17
- return doc;
18
- }
19
- // Check if channels are already sorted
20
- const areChannelsSorted = websocket.channels.every((channel, index, arr) => {
21
- if (index === 0)
22
- return true;
23
- const prevName = arr[index - 1]?.name ?? "";
24
- const currentName = channel?.name ?? "";
25
- return prevName.localeCompare(currentName) <= 0;
26
- });
27
- // Sort messages within each channel only if needed
28
- const normalizedChannels = websocket.channels.map((channel) => {
29
- if (!channel || !Array.isArray(channel.messages)) {
30
- return channel;
31
- }
32
- // Check if messages are already sorted
33
- const areMessagesSorted = channel.messages.every((message, index, arr) => {
34
- if (index === 0)
35
- return true;
36
- const prevName = arr[index - 1]?.name ?? "";
37
- const currentName = message?.name ?? "";
38
- return prevName.localeCompare(currentName) <= 0;
39
- });
40
- if (areMessagesSorted) {
41
- return channel; // No changes needed
42
- }
43
- const sortedMessages = [...channel.messages].sort((a, b) => {
44
- const aName = a?.name ?? "";
45
- const bName = b?.name ?? "";
46
- return aName.localeCompare(bName);
47
- });
48
- // Return new channel with sorted messages (immutable)
49
- return {
50
- ...channel,
51
- messages: sortedMessages,
52
- };
53
- });
54
- if (areChannelsSorted) {
55
- // Check if any channels were modified
56
- const channelsModified = normalizedChannels.some((channel, index) => channel !== websocket.channels?.[index]);
57
- if (!channelsModified) {
58
- return doc; // No changes needed
59
- }
60
- }
61
- // Sort channels
62
- const sortedChannels = normalizedChannels.sort((a, b) => {
63
- const aName = a?.name ?? "";
64
- const bName = b?.name ?? "";
65
- return aName.localeCompare(bName);
66
- });
67
- // Return new document with sorted channels (immutable)
68
- return {
69
- ...doc,
70
- service: {
71
- ...doc.service,
72
- protocols: {
73
- ...protocols,
74
- websocket: {
75
- ...websocket,
76
- channels: sortedChannels,
77
- },
78
- },
79
- },
80
- };
81
- }