@ojiepermana/angular 21.3.4 → 22.0.27

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 (387) hide show
  1. package/README.md +16 -298
  2. package/fesm2022/ojiepermana-angular-chart.mjs +11 -0
  3. package/fesm2022/ojiepermana-angular-chart.mjs.map +1 -0
  4. package/fesm2022/ojiepermana-angular-component.mjs +11 -0
  5. package/fesm2022/ojiepermana-angular-component.mjs.map +1 -0
  6. package/fesm2022/ojiepermana-angular-navigation.mjs +11 -0
  7. package/fesm2022/ojiepermana-angular-navigation.mjs.map +1 -0
  8. package/fesm2022/ojiepermana-angular-sdk.mjs +11 -0
  9. package/fesm2022/ojiepermana-angular-sdk.mjs.map +1 -0
  10. package/fesm2022/ojiepermana-angular-theme.mjs +3 -374
  11. package/fesm2022/ojiepermana-angular-theme.mjs.map +1 -1
  12. package/fesm2022/ojiepermana-angular.mjs +14 -14
  13. package/fesm2022/ojiepermana-angular.mjs.map +1 -1
  14. package/package.json +25 -361
  15. package/types/ojiepermana-angular-chart.d.ts +1 -0
  16. package/types/ojiepermana-angular-component.d.ts +1 -0
  17. package/types/ojiepermana-angular-navigation.d.ts +1 -0
  18. package/types/ojiepermana-angular-sdk.d.ts +1 -0
  19. package/types/ojiepermana-angular-theme.d.ts +1 -116
  20. package/types/ojiepermana-angular.d.ts +5 -3
  21. package/.npmignore +0 -2
  22. package/collection.json +0 -30
  23. package/component/accordion/package.json +0 -4
  24. package/component/alert/package.json +0 -4
  25. package/component/alert-dialog/package.json +0 -4
  26. package/component/aspect-ratio/package.json +0 -4
  27. package/component/avatar/package.json +0 -4
  28. package/component/badge/package.json +0 -4
  29. package/component/breadcrumb/package.json +0 -4
  30. package/component/button/package.json +0 -4
  31. package/component/button-group/package.json +0 -4
  32. package/component/calendar/package.json +0 -4
  33. package/component/card/package.json +0 -4
  34. package/component/carousel/package.json +0 -4
  35. package/component/chart/README.md +0 -249
  36. package/component/chart/area/package.json +0 -4
  37. package/component/chart/bar/package.json +0 -4
  38. package/component/chart/line/package.json +0 -4
  39. package/component/chart/package.json +0 -4
  40. package/component/chart/pie/package.json +0 -4
  41. package/component/chart/radar/package.json +0 -4
  42. package/component/chart/radial/package.json +0 -4
  43. package/component/chart/scatter/package.json +0 -4
  44. package/component/checkbox/package.json +0 -4
  45. package/component/collapsible/package.json +0 -4
  46. package/component/combobox/package.json +0 -4
  47. package/component/command/package.json +0 -4
  48. package/component/context-menu/package.json +0 -4
  49. package/component/date-picker/package.json +0 -4
  50. package/component/dialog/package.json +0 -4
  51. package/component/drawer/package.json +0 -4
  52. package/component/dropdown-menu/package.json +0 -4
  53. package/component/form/package.json +0 -4
  54. package/component/input/package.json +0 -4
  55. package/component/input-group/package.json +0 -4
  56. package/component/item/package.json +0 -4
  57. package/component/label/package.json +0 -4
  58. package/component/pagination/package.json +0 -4
  59. package/component/popover/package.json +0 -4
  60. package/component/progress/package.json +0 -4
  61. package/component/radio/package.json +0 -4
  62. package/component/scroll-area/package.json +0 -4
  63. package/component/select/package.json +0 -4
  64. package/component/separator/package.json +0 -4
  65. package/component/sheet/package.json +0 -4
  66. package/component/skeleton/package.json +0 -4
  67. package/component/slider/package.json +0 -4
  68. package/component/switch/package.json +0 -4
  69. package/component/table/package.json +0 -4
  70. package/component/tabs/package.json +0 -4
  71. package/component/textarea/package.json +0 -4
  72. package/component/toast/package.json +0 -4
  73. package/component/tooltip/package.json +0 -4
  74. package/component/utils/package.json +0 -4
  75. package/fesm2022/ojiepermana-angular-component-accordion.mjs +0 -174
  76. package/fesm2022/ojiepermana-angular-component-accordion.mjs.map +0 -1
  77. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +0 -242
  78. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs.map +0 -1
  79. package/fesm2022/ojiepermana-angular-component-alert.mjs +0 -90
  80. package/fesm2022/ojiepermana-angular-component-alert.mjs.map +0 -1
  81. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +0 -33
  82. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs.map +0 -1
  83. package/fesm2022/ojiepermana-angular-component-avatar.mjs +0 -123
  84. package/fesm2022/ojiepermana-angular-component-avatar.mjs.map +0 -1
  85. package/fesm2022/ojiepermana-angular-component-badge.mjs +0 -47
  86. package/fesm2022/ojiepermana-angular-component-badge.mjs.map +0 -1
  87. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +0 -186
  88. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs.map +0 -1
  89. package/fesm2022/ojiepermana-angular-component-button-group.mjs +0 -95
  90. package/fesm2022/ojiepermana-angular-component-button-group.mjs.map +0 -1
  91. package/fesm2022/ojiepermana-angular-component-button.mjs +0 -64
  92. package/fesm2022/ojiepermana-angular-component-button.mjs.map +0 -1
  93. package/fesm2022/ojiepermana-angular-component-calendar.mjs +0 -78
  94. package/fesm2022/ojiepermana-angular-component-calendar.mjs.map +0 -1
  95. package/fesm2022/ojiepermana-angular-component-card.mjs +0 -137
  96. package/fesm2022/ojiepermana-angular-component-card.mjs.map +0 -1
  97. package/fesm2022/ojiepermana-angular-component-carousel.mjs +0 -310
  98. package/fesm2022/ojiepermana-angular-component-carousel.mjs.map +0 -1
  99. package/fesm2022/ojiepermana-angular-component-chart-area.mjs +0 -6
  100. package/fesm2022/ojiepermana-angular-component-chart-area.mjs.map +0 -1
  101. package/fesm2022/ojiepermana-angular-component-chart-bar.mjs +0 -6
  102. package/fesm2022/ojiepermana-angular-component-chart-bar.mjs.map +0 -1
  103. package/fesm2022/ojiepermana-angular-component-chart-line.mjs +0 -6
  104. package/fesm2022/ojiepermana-angular-component-chart-line.mjs.map +0 -1
  105. package/fesm2022/ojiepermana-angular-component-chart-pie.mjs +0 -6
  106. package/fesm2022/ojiepermana-angular-component-chart-pie.mjs.map +0 -1
  107. package/fesm2022/ojiepermana-angular-component-chart-radar.mjs +0 -6
  108. package/fesm2022/ojiepermana-angular-component-chart-radar.mjs.map +0 -1
  109. package/fesm2022/ojiepermana-angular-component-chart-radial.mjs +0 -6
  110. package/fesm2022/ojiepermana-angular-component-chart-radial.mjs.map +0 -1
  111. package/fesm2022/ojiepermana-angular-component-chart-scatter.mjs +0 -6
  112. package/fesm2022/ojiepermana-angular-component-chart-scatter.mjs.map +0 -1
  113. package/fesm2022/ojiepermana-angular-component-chart.mjs +0 -3714
  114. package/fesm2022/ojiepermana-angular-component-chart.mjs.map +0 -1
  115. package/fesm2022/ojiepermana-angular-component-checkbox.mjs +0 -104
  116. package/fesm2022/ojiepermana-angular-component-checkbox.mjs.map +0 -1
  117. package/fesm2022/ojiepermana-angular-component-collapsible.mjs +0 -116
  118. package/fesm2022/ojiepermana-angular-component-collapsible.mjs.map +0 -1
  119. package/fesm2022/ojiepermana-angular-component-combobox.mjs +0 -263
  120. package/fesm2022/ojiepermana-angular-component-combobox.mjs.map +0 -1
  121. package/fesm2022/ojiepermana-angular-component-command.mjs +0 -268
  122. package/fesm2022/ojiepermana-angular-component-command.mjs.map +0 -1
  123. package/fesm2022/ojiepermana-angular-component-context-menu.mjs +0 -100
  124. package/fesm2022/ojiepermana-angular-component-context-menu.mjs.map +0 -1
  125. package/fesm2022/ojiepermana-angular-component-date-picker.mjs +0 -155
  126. package/fesm2022/ojiepermana-angular-component-date-picker.mjs.map +0 -1
  127. package/fesm2022/ojiepermana-angular-component-dialog.mjs +0 -262
  128. package/fesm2022/ojiepermana-angular-component-dialog.mjs.map +0 -1
  129. package/fesm2022/ojiepermana-angular-component-drawer.mjs +0 -6
  130. package/fesm2022/ojiepermana-angular-component-drawer.mjs.map +0 -1
  131. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +0 -458
  132. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs.map +0 -1
  133. package/fesm2022/ojiepermana-angular-component-form.mjs +0 -208
  134. package/fesm2022/ojiepermana-angular-component-form.mjs.map +0 -1
  135. package/fesm2022/ojiepermana-angular-component-input-group.mjs +0 -164
  136. package/fesm2022/ojiepermana-angular-component-input-group.mjs.map +0 -1
  137. package/fesm2022/ojiepermana-angular-component-input.mjs +0 -43
  138. package/fesm2022/ojiepermana-angular-component-input.mjs.map +0 -1
  139. package/fesm2022/ojiepermana-angular-component-item.mjs +0 -241
  140. package/fesm2022/ojiepermana-angular-component-item.mjs.map +0 -1
  141. package/fesm2022/ojiepermana-angular-component-label.mjs +0 -30
  142. package/fesm2022/ojiepermana-angular-component-label.mjs.map +0 -1
  143. package/fesm2022/ojiepermana-angular-component-pagination.mjs +0 -192
  144. package/fesm2022/ojiepermana-angular-component-pagination.mjs.map +0 -1
  145. package/fesm2022/ojiepermana-angular-component-popover.mjs +0 -163
  146. package/fesm2022/ojiepermana-angular-component-popover.mjs.map +0 -1
  147. package/fesm2022/ojiepermana-angular-component-progress.mjs +0 -53
  148. package/fesm2022/ojiepermana-angular-component-progress.mjs.map +0 -1
  149. package/fesm2022/ojiepermana-angular-component-radio.mjs +0 -92
  150. package/fesm2022/ojiepermana-angular-component-radio.mjs.map +0 -1
  151. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +0 -48
  152. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs.map +0 -1
  153. package/fesm2022/ojiepermana-angular-component-select.mjs +0 -131
  154. package/fesm2022/ojiepermana-angular-component-select.mjs.map +0 -1
  155. package/fesm2022/ojiepermana-angular-component-separator.mjs +0 -33
  156. package/fesm2022/ojiepermana-angular-component-separator.mjs.map +0 -1
  157. package/fesm2022/ojiepermana-angular-component-sheet.mjs +0 -235
  158. package/fesm2022/ojiepermana-angular-component-sheet.mjs.map +0 -1
  159. package/fesm2022/ojiepermana-angular-component-skeleton.mjs +0 -29
  160. package/fesm2022/ojiepermana-angular-component-skeleton.mjs.map +0 -1
  161. package/fesm2022/ojiepermana-angular-component-slider.mjs +0 -29
  162. package/fesm2022/ojiepermana-angular-component-slider.mjs.map +0 -1
  163. package/fesm2022/ojiepermana-angular-component-switch.mjs +0 -84
  164. package/fesm2022/ojiepermana-angular-component-switch.mjs.map +0 -1
  165. package/fesm2022/ojiepermana-angular-component-table.mjs +0 -139
  166. package/fesm2022/ojiepermana-angular-component-table.mjs.map +0 -1
  167. package/fesm2022/ojiepermana-angular-component-tabs.mjs +0 -252
  168. package/fesm2022/ojiepermana-angular-component-tabs.mjs.map +0 -1
  169. package/fesm2022/ojiepermana-angular-component-textarea.mjs +0 -37
  170. package/fesm2022/ojiepermana-angular-component-textarea.mjs.map +0 -1
  171. package/fesm2022/ojiepermana-angular-component-toast.mjs +0 -47
  172. package/fesm2022/ojiepermana-angular-component-toast.mjs.map +0 -1
  173. package/fesm2022/ojiepermana-angular-component-tooltip.mjs +0 -56
  174. package/fesm2022/ojiepermana-angular-component-tooltip.mjs.map +0 -1
  175. package/fesm2022/ojiepermana-angular-component-utils.mjs +0 -13
  176. package/fesm2022/ojiepermana-angular-component-utils.mjs.map +0 -1
  177. package/fesm2022/ojiepermana-angular-generator-api.mjs +0 -68
  178. package/fesm2022/ojiepermana-angular-generator-api.mjs.map +0 -1
  179. package/fesm2022/ojiepermana-angular-layout-component.mjs +0 -581
  180. package/fesm2022/ojiepermana-angular-layout-component.mjs.map +0 -1
  181. package/fesm2022/ojiepermana-angular-layout-empty.mjs +0 -49
  182. package/fesm2022/ojiepermana-angular-layout-empty.mjs.map +0 -1
  183. package/fesm2022/ojiepermana-angular-layout-horizontal.mjs +0 -119
  184. package/fesm2022/ojiepermana-angular-layout-horizontal.mjs.map +0 -1
  185. package/fesm2022/ojiepermana-angular-layout-provider.mjs +0 -21
  186. package/fesm2022/ojiepermana-angular-layout-provider.mjs.map +0 -1
  187. package/fesm2022/ojiepermana-angular-layout-services.mjs +0 -114
  188. package/fesm2022/ojiepermana-angular-layout-services.mjs.map +0 -1
  189. package/fesm2022/ojiepermana-angular-layout-shell.mjs +0 -48
  190. package/fesm2022/ojiepermana-angular-layout-shell.mjs.map +0 -1
  191. package/fesm2022/ojiepermana-angular-layout-token-directive.mjs +0 -27
  192. package/fesm2022/ojiepermana-angular-layout-token-directive.mjs.map +0 -1
  193. package/fesm2022/ojiepermana-angular-layout-token.mjs +0 -33
  194. package/fesm2022/ojiepermana-angular-layout-token.mjs.map +0 -1
  195. package/fesm2022/ojiepermana-angular-layout-vertical.mjs +0 -113
  196. package/fesm2022/ojiepermana-angular-layout-vertical.mjs.map +0 -1
  197. package/fesm2022/ojiepermana-angular-layout.mjs +0 -461
  198. package/fesm2022/ojiepermana-angular-layout.mjs.map +0 -1
  199. package/fesm2022/ojiepermana-angular-navigation-demo-data.mjs +0 -334
  200. package/fesm2022/ojiepermana-angular-navigation-demo-data.mjs.map +0 -1
  201. package/fesm2022/ojiepermana-angular-navigation-icon.mjs +0 -59
  202. package/fesm2022/ojiepermana-angular-navigation-icon.mjs.map +0 -1
  203. package/fesm2022/ojiepermana-angular-navigation-item.mjs +0 -548
  204. package/fesm2022/ojiepermana-angular-navigation-item.mjs.map +0 -1
  205. package/fesm2022/ojiepermana-angular-navigation-service.mjs +0 -204
  206. package/fesm2022/ojiepermana-angular-navigation-service.mjs.map +0 -1
  207. package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs +0 -373
  208. package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs.map +0 -1
  209. package/fesm2022/ojiepermana-angular-navigation-topbar.mjs +0 -433
  210. package/fesm2022/ojiepermana-angular-navigation-topbar.mjs.map +0 -1
  211. package/fesm2022/ojiepermana-angular-navigation-types.mjs +0 -4
  212. package/fesm2022/ojiepermana-angular-navigation-types.mjs.map +0 -1
  213. package/fesm2022/ojiepermana-angular-theme-provider.mjs +0 -35
  214. package/fesm2022/ojiepermana-angular-theme-provider.mjs.map +0 -1
  215. package/fesm2022/ojiepermana-angular-theme-services.mjs +0 -286
  216. package/fesm2022/ojiepermana-angular-theme-services.mjs.map +0 -1
  217. package/fesm2022/ojiepermana-angular-theme-token.mjs +0 -56
  218. package/fesm2022/ojiepermana-angular-theme-token.mjs.map +0 -1
  219. package/generator/api/README.md +0 -252
  220. package/generator/api/bin/package.json +0 -3
  221. package/generator/api/bin/schematics/init/index.js +0 -90
  222. package/generator/api/bin/schematics/ng-add/index.js +0 -131
  223. package/generator/api/bin/schematics/sdk/index.js +0 -76
  224. package/generator/api/bin/src/config/loader.js +0 -41
  225. package/generator/api/bin/src/config/schema.js +0 -57
  226. package/generator/api/bin/src/emit/client.js +0 -246
  227. package/generator/api/bin/src/emit/metadata.js +0 -295
  228. package/generator/api/bin/src/emit/models.js +0 -106
  229. package/generator/api/bin/src/emit/navigation.js +0 -56
  230. package/generator/api/bin/src/emit/operations.js +0 -122
  231. package/generator/api/bin/src/emit/public-api.js +0 -54
  232. package/generator/api/bin/src/emit/services.js +0 -87
  233. package/generator/api/bin/src/engine.js +0 -65
  234. package/generator/api/bin/src/layout/per-domain.js +0 -359
  235. package/generator/api/bin/src/parser/bundle.js +0 -25
  236. package/generator/api/bin/src/parser/ir.js +0 -320
  237. package/generator/api/bin/src/parser/types.js +0 -7
  238. package/generator/api/bin/src/render/template.js +0 -58
  239. package/generator/api/bin/src/writer/index.js +0 -278
  240. package/generator/api/package.json +0 -4
  241. package/generator/api/schematics/init/schema.json +0 -19
  242. package/generator/api/schematics/ng-add/schema.json +0 -14
  243. package/generator/api/schematics/sdk/schema.json +0 -19
  244. package/generator/api/sdk.config.example.json +0 -24
  245. package/generator/guide/README.md +0 -84
  246. package/generator/guide/bin/package.json +0 -3
  247. package/generator/guide/bin/schematics/build/index.js +0 -35
  248. package/generator/guide/bin/schematics/init/index.js +0 -70
  249. package/generator/guide/bin/src/config/loader.js +0 -50
  250. package/generator/guide/bin/src/config/schema.js +0 -12
  251. package/generator/guide/bin/src/engine/component.js +0 -74
  252. package/generator/guide/bin/src/engine/frontmatter.js +0 -42
  253. package/generator/guide/bin/src/engine/index.js +0 -42
  254. package/generator/guide/bin/src/engine/naming.js +0 -39
  255. package/generator/guide/bin/src/engine/render.js +0 -31
  256. package/generator/guide/bin/src/engine/routes.js +0 -106
  257. package/generator/guide/bin/src/engine/walk.js +0 -35
  258. package/generator/guide/guide.config.example.json +0 -9
  259. package/generator/guide/schematics/build/schema.json +0 -14
  260. package/generator/guide/schematics/init/schema.json +0 -19
  261. package/layout/component/package.json +0 -4
  262. package/layout/empty/package.json +0 -4
  263. package/layout/horizontal/package.json +0 -4
  264. package/layout/package.json +0 -4
  265. package/layout/provider/package.json +0 -4
  266. package/layout/services/package.json +0 -4
  267. package/layout/shell/package.json +0 -4
  268. package/layout/token/directive/package.json +0 -4
  269. package/layout/token/package.json +0 -4
  270. package/layout/vertical/package.json +0 -4
  271. package/navigation/demo-data/package.json +0 -4
  272. package/navigation/icon/package.json +0 -4
  273. package/navigation/item/package.json +0 -4
  274. package/navigation/service/package.json +0 -4
  275. package/navigation/sidebar/package.json +0 -4
  276. package/navigation/topbar/package.json +0 -4
  277. package/navigation/types/package.json +0 -4
  278. package/theme/README.md +0 -67
  279. package/theme/package.json +0 -4
  280. package/theme/provider/package.json +0 -4
  281. package/theme/services/package.json +0 -4
  282. package/theme/styles/foundation/components.css +0 -81
  283. package/theme/styles/foundation/layers.css +0 -15
  284. package/theme/styles/foundation/tokens.css +0 -55
  285. package/theme/styles/index.css +0 -37
  286. package/theme/styles/integrations/material.css +0 -254
  287. package/theme/styles/integrations/tailwind.css +0 -114
  288. package/theme/styles/variants/color/amber.css +0 -31
  289. package/theme/styles/variants/color/base.css +0 -36
  290. package/theme/styles/variants/color/blue.css +0 -31
  291. package/theme/styles/variants/color/cyan.css +0 -31
  292. package/theme/styles/variants/color/emerald.css +0 -31
  293. package/theme/styles/variants/color/fuchsia.css +0 -31
  294. package/theme/styles/variants/color/green.css +0 -31
  295. package/theme/styles/variants/color/index.css +0 -22
  296. package/theme/styles/variants/color/indigo.css +0 -31
  297. package/theme/styles/variants/color/lime.css +0 -31
  298. package/theme/styles/variants/color/orange.css +0 -31
  299. package/theme/styles/variants/color/pink.css +0 -31
  300. package/theme/styles/variants/color/purple.css +0 -31
  301. package/theme/styles/variants/color/red.css +0 -31
  302. package/theme/styles/variants/color/rose.css +0 -31
  303. package/theme/styles/variants/color/sky.css +0 -31
  304. package/theme/styles/variants/color/teal.css +0 -31
  305. package/theme/styles/variants/color/violet.css +0 -31
  306. package/theme/styles/variants/color/yellow.css +0 -31
  307. package/theme/styles/variants/mode/dark.css +0 -20
  308. package/theme/styles/variants/mode/index.css +0 -6
  309. package/theme/styles/variants/mode/light.css +0 -24
  310. package/theme/styles/variants/style/brutal.css +0 -50
  311. package/theme/styles/variants/style/default.css +0 -54
  312. package/theme/styles/variants/style/index.css +0 -8
  313. package/theme/styles/variants/style/sharp.css +0 -50
  314. package/theme/styles/variants/style/soft.css +0 -50
  315. package/theme/token/package.json +0 -4
  316. package/types/ojiepermana-angular-component-accordion.d.ts +0 -51
  317. package/types/ojiepermana-angular-component-alert-dialog.d.ts +0 -93
  318. package/types/ojiepermana-angular-component-alert.d.ts +0 -37
  319. package/types/ojiepermana-angular-component-aspect-ratio.d.ts +0 -12
  320. package/types/ojiepermana-angular-component-avatar.d.ts +0 -51
  321. package/types/ojiepermana-angular-component-badge.d.ts +0 -19
  322. package/types/ojiepermana-angular-component-breadcrumb.d.ts +0 -46
  323. package/types/ojiepermana-angular-component-button-group.d.ts +0 -26
  324. package/types/ojiepermana-angular-component-button.d.ts +0 -22
  325. package/types/ojiepermana-angular-component-calendar.d.ts +0 -33
  326. package/types/ojiepermana-angular-component-card.d.ts +0 -60
  327. package/types/ojiepermana-angular-component-carousel.d.ts +0 -86
  328. package/types/ojiepermana-angular-component-chart-area.d.ts +0 -1
  329. package/types/ojiepermana-angular-component-chart-bar.d.ts +0 -1
  330. package/types/ojiepermana-angular-component-chart-line.d.ts +0 -1
  331. package/types/ojiepermana-angular-component-chart-pie.d.ts +0 -1
  332. package/types/ojiepermana-angular-component-chart-radar.d.ts +0 -1
  333. package/types/ojiepermana-angular-component-chart-radial.d.ts +0 -1
  334. package/types/ojiepermana-angular-component-chart-scatter.d.ts +0 -1
  335. package/types/ojiepermana-angular-component-chart.d.ts +0 -1094
  336. package/types/ojiepermana-angular-component-checkbox.d.ts +0 -35
  337. package/types/ojiepermana-angular-component-collapsible.d.ts +0 -42
  338. package/types/ojiepermana-angular-component-combobox.d.ts +0 -51
  339. package/types/ojiepermana-angular-component-command.d.ts +0 -99
  340. package/types/ojiepermana-angular-component-context-menu.d.ts +0 -35
  341. package/types/ojiepermana-angular-component-date-picker.d.ts +0 -41
  342. package/types/ojiepermana-angular-component-dialog.d.ts +0 -87
  343. package/types/ojiepermana-angular-component-drawer.d.ts +0 -1
  344. package/types/ojiepermana-angular-component-dropdown-menu.d.ts +0 -135
  345. package/types/ojiepermana-angular-component-form.d.ts +0 -92
  346. package/types/ojiepermana-angular-component-input-group.d.ts +0 -51
  347. package/types/ojiepermana-angular-component-input.d.ts +0 -16
  348. package/types/ojiepermana-angular-component-item.d.ts +0 -88
  349. package/types/ojiepermana-angular-component-label.d.ts +0 -11
  350. package/types/ojiepermana-angular-component-pagination.d.ts +0 -27
  351. package/types/ojiepermana-angular-component-popover.d.ts +0 -43
  352. package/types/ojiepermana-angular-component-progress.d.ts +0 -17
  353. package/types/ojiepermana-angular-component-radio.d.ts +0 -34
  354. package/types/ojiepermana-angular-component-scroll-area.d.ts +0 -19
  355. package/types/ojiepermana-angular-component-select.d.ts +0 -45
  356. package/types/ojiepermana-angular-component-separator.d.ts +0 -14
  357. package/types/ojiepermana-angular-component-sheet.d.ts +0 -74
  358. package/types/ojiepermana-angular-component-skeleton.d.ts +0 -10
  359. package/types/ojiepermana-angular-component-slider.d.ts +0 -16
  360. package/types/ojiepermana-angular-component-switch.d.ts +0 -30
  361. package/types/ojiepermana-angular-component-table.d.ts +0 -52
  362. package/types/ojiepermana-angular-component-tabs.d.ts +0 -92
  363. package/types/ojiepermana-angular-component-textarea.d.ts +0 -12
  364. package/types/ojiepermana-angular-component-toast.d.ts +0 -29
  365. package/types/ojiepermana-angular-component-tooltip.d.ts +0 -22
  366. package/types/ojiepermana-angular-component-utils.d.ts +0 -5
  367. package/types/ojiepermana-angular-generator-api.d.ts +0 -86
  368. package/types/ojiepermana-angular-layout-component.d.ts +0 -205
  369. package/types/ojiepermana-angular-layout-empty.d.ts +0 -22
  370. package/types/ojiepermana-angular-layout-horizontal.d.ts +0 -36
  371. package/types/ojiepermana-angular-layout-provider.d.ts +0 -6
  372. package/types/ojiepermana-angular-layout-services.d.ts +0 -25
  373. package/types/ojiepermana-angular-layout-shell.d.ts +0 -8
  374. package/types/ojiepermana-angular-layout-token-directive.d.ts +0 -13
  375. package/types/ojiepermana-angular-layout-token.d.ts +0 -36
  376. package/types/ojiepermana-angular-layout-vertical.d.ts +0 -38
  377. package/types/ojiepermana-angular-layout.d.ts +0 -164
  378. package/types/ojiepermana-angular-navigation-demo-data.d.ts +0 -5
  379. package/types/ojiepermana-angular-navigation-icon.d.ts +0 -17
  380. package/types/ojiepermana-angular-navigation-item.d.ts +0 -54
  381. package/types/ojiepermana-angular-navigation-service.d.ts +0 -77
  382. package/types/ojiepermana-angular-navigation-sidebar.d.ts +0 -75
  383. package/types/ojiepermana-angular-navigation-topbar.d.ts +0 -54
  384. package/types/ojiepermana-angular-navigation-types.d.ts +0 -129
  385. package/types/ojiepermana-angular-theme-provider.d.ts +0 -11
  386. package/types/ojiepermana-angular-theme-services.d.ts +0 -55
  387. package/types/ojiepermana-angular-theme-token.d.ts +0 -57
@@ -1,90 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.init = init;
4
- const node_fs_1 = require("node:fs");
5
- const node_path_1 = require("node:path");
6
- /**
7
- * Default config template. The published package also ships a concrete
8
- * `sdk.config.example.json`; this fallback only exists so `init` still works if
9
- * the file is missing in unusual local/dev states.
10
- */
11
- const FALLBACK_TEMPLATE = {
12
- $schema: './node_modules/@ojiepermana/angular/generator/api/schematics/sdk/schema.json',
13
- targets: [
14
- {
15
- input: './openapi.yaml',
16
- output: './sdk',
17
- mode: 'library',
18
- clientName: 'Api',
19
- packageName: '@my-scope/sdk',
20
- packageVersion: '0.0.1',
21
- rootUrl: '',
22
- splitByDomain: true,
23
- splitDepth: 'service',
24
- features: {
25
- models: true,
26
- operations: true,
27
- services: true,
28
- client: true,
29
- metadata: true,
30
- navigation: true,
31
- },
32
- },
33
- ],
34
- };
35
- function init(options = {}) {
36
- return (tree, context) => {
37
- const workspaceRoot = process.cwd();
38
- const destRelative = options.path ?? 'config/sdk.config.json';
39
- const treePath = destRelative.startsWith('/') ? destRelative : `/${destRelative}`;
40
- if (tree.exists(treePath) && !options.force) {
41
- throw new Error(`${destRelative} already exists. Re-run with --force to overwrite.`);
42
- }
43
- const content = loadTemplate(workspaceRoot, destRelative);
44
- const buffer = Buffer.from(content, 'utf8');
45
- if (tree.exists(treePath)) {
46
- tree.overwrite(treePath, buffer);
47
- context.logger.info(`[sdk:init] overwrote ${destRelative}`);
48
- }
49
- else {
50
- tree.create(treePath, buffer);
51
- context.logger.info(`[sdk:init] created ${destRelative}`);
52
- }
53
- context.logger.info(`[sdk:init] edit targets[].input and targets[].output, then run \`${getNextCommand(workspaceRoot)}\`.`);
54
- };
55
- }
56
- function loadTemplate(workspaceRoot, destRelative) {
57
- const candidates = [
58
- (0, node_path_1.resolve)(workspaceRoot, 'sdk.config.example.json'),
59
- (0, node_path_1.resolve)(__dirname, '../../../sdk.config.example.json'),
60
- (0, node_path_1.resolve)(workspaceRoot, 'projects/angular/generator/api/sdk.config.example.json'),
61
- ];
62
- for (const candidate of candidates) {
63
- try {
64
- const parsed = JSON.parse((0, node_fs_1.readFileSync)(candidate, 'utf8'));
65
- parsed.$schema = resolveSchemaPath(workspaceRoot, destRelative);
66
- return `${JSON.stringify(parsed, null, 2)}\n`;
67
- }
68
- catch {
69
- // try next
70
- }
71
- }
72
- return `${JSON.stringify({ ...FALLBACK_TEMPLATE, $schema: resolveSchemaPath(workspaceRoot, destRelative) }, null, 2)}\n`;
73
- }
74
- function resolveSchemaPath(workspaceRoot, destRelative) {
75
- const prefix = relativePrefix(destRelative);
76
- if ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(workspaceRoot, 'projects/angular/generator/api/schematics/sdk/schema.json'))) {
77
- return `${prefix}projects/angular/generator/api/schematics/sdk/schema.json`;
78
- }
79
- return `${prefix}node_modules/@ojiepermana/angular/generator/api/schematics/sdk/schema.json`;
80
- }
81
- function relativePrefix(destRelative) {
82
- const depth = destRelative.replace(/^\/+/, '').split('/').length - 1;
83
- return depth <= 0 ? './' : '../'.repeat(depth);
84
- }
85
- function getNextCommand(workspaceRoot) {
86
- if ((0, node_fs_1.existsSync)((0, node_path_1.resolve)(workspaceRoot, 'projects/angular/collection.json'))) {
87
- return 'bun run gen:sdk';
88
- }
89
- return 'ng generate @ojiepermana/angular:sdk';
90
- }
@@ -1,131 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ngAdd = ngAdd;
4
- const node_fs_1 = require("node:fs");
5
- const node_path_1 = require("node:path");
6
- const tasks_1 = require("@angular-devkit/schematics/tasks");
7
- const semver_1 = require("semver");
8
- function ngAdd(options = {}) {
9
- return (tree, context) => {
10
- const manifest = loadLibraryManifest();
11
- const requiredDependencies = collectRequiredDependencies(manifest);
12
- if (requiredDependencies.length === 0) {
13
- context.logger.warn('[ng-add] No peer dependencies were declared by @ojiepermana/angular.');
14
- return;
15
- }
16
- const workspacePackageJson = readWorkspacePackageJson(tree);
17
- workspacePackageJson.dependencies ??= {};
18
- let changed = false;
19
- for (const dependency of requiredDependencies) {
20
- const existingDependency = findExistingDependency(workspacePackageJson, dependency.name);
21
- if (existingDependency) {
22
- if (shouldUpdateDependency(existingDependency.version, dependency.version)) {
23
- const section = workspacePackageJson[existingDependency.section] ?? {};
24
- section[dependency.name] = dependency.version;
25
- workspacePackageJson[existingDependency.section] = section;
26
- changed = true;
27
- context.logger.info(`[ng-add] updated ${dependency.name} from ${existingDependency.version} to ${dependency.version} in ${existingDependency.section}.`);
28
- }
29
- else {
30
- context.logger.info(`[ng-add] keeping existing ${dependency.name}@${existingDependency.version} from ${existingDependency.section}.`);
31
- }
32
- continue;
33
- }
34
- workspacePackageJson.dependencies[dependency.name] = dependency.version;
35
- changed = true;
36
- context.logger.info(`[ng-add] added ${dependency.name}@${dependency.version}.`);
37
- }
38
- if (!changed) {
39
- context.logger.info('[ng-add] Required dependencies are already present.');
40
- return;
41
- }
42
- workspacePackageJson.dependencies = sortSection(workspacePackageJson.dependencies);
43
- writeWorkspacePackageJson(tree, workspacePackageJson);
44
- if (!options.skipInstall) {
45
- context.addTask(new tasks_1.NodePackageInstallTask());
46
- }
47
- };
48
- }
49
- /**
50
- * Use the package manifest as the source of truth so ng-add stays aligned with
51
- * the published peerDependencies and ng-update packageGroup metadata.
52
- */
53
- function loadLibraryManifest() {
54
- const candidates = [
55
- (0, node_path_1.resolve)(__dirname, '../../../../../package.json'),
56
- (0, node_path_1.resolve)(process.cwd(), 'node_modules/@ojiepermana/angular/package.json'),
57
- (0, node_path_1.resolve)(process.cwd(), 'projects/angular/package.json'),
58
- ];
59
- for (const candidate of candidates) {
60
- if (!(0, node_fs_1.existsSync)(candidate))
61
- continue;
62
- return JSON.parse((0, node_fs_1.readFileSync)(candidate, 'utf8'));
63
- }
64
- throw new Error('Could not locate the @ojiepermana/angular package manifest for ng-add.');
65
- }
66
- function collectRequiredDependencies(manifest) {
67
- const peerDependencies = manifest.peerDependencies ?? {};
68
- const packageGroup = normalizePackageGroup(manifest['ng-update']?.packageGroup);
69
- return Object.keys(peerDependencies)
70
- .sort((left, right) => left.localeCompare(right))
71
- .map((name) => ({
72
- name,
73
- version: packageGroup[name] ?? peerDependencies[name],
74
- }));
75
- }
76
- function normalizePackageGroup(packageGroup) {
77
- if (!packageGroup) {
78
- return {};
79
- }
80
- if (Array.isArray(packageGroup)) {
81
- return {};
82
- }
83
- return packageGroup;
84
- }
85
- function readWorkspacePackageJson(tree) {
86
- const buffer = tree.read('/package.json');
87
- if (!buffer) {
88
- throw new Error('No package.json found at the workspace root.');
89
- }
90
- return JSON.parse(buffer.toString('utf8'));
91
- }
92
- function writeWorkspacePackageJson(tree, packageJson) {
93
- const content = `${JSON.stringify(packageJson, null, 2)}\n`;
94
- if (tree.exists('/package.json')) {
95
- tree.overwrite('/package.json', content);
96
- }
97
- else {
98
- tree.create('/package.json', content);
99
- }
100
- }
101
- function findExistingDependency(packageJson, dependencyName) {
102
- const sections = [
103
- 'dependencies',
104
- 'devDependencies',
105
- 'peerDependencies',
106
- 'optionalDependencies',
107
- ];
108
- for (const section of sections) {
109
- const version = packageJson[section]?.[dependencyName];
110
- if (version) {
111
- return { section, version };
112
- }
113
- }
114
- return null;
115
- }
116
- function shouldUpdateDependency(existingVersion, requiredVersion) {
117
- const existing = (0, semver_1.validRange)(existingVersion);
118
- const required = (0, semver_1.validRange)(requiredVersion);
119
- if (!existing || !required) {
120
- return false;
121
- }
122
- const existingMinimum = (0, semver_1.minVersion)(existing);
123
- const requiredMinimum = (0, semver_1.minVersion)(required);
124
- if (!existingMinimum || !requiredMinimum) {
125
- return false;
126
- }
127
- return existingMinimum.compare(requiredMinimum) < 0;
128
- }
129
- function sortSection(section) {
130
- return Object.fromEntries(Object.entries(section).sort(([left], [right]) => left.localeCompare(right)));
131
- }
@@ -1,76 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sdk = sdk;
4
- exports.writeResult = writeResult;
5
- const node_path_1 = require("node:path");
6
- const loader_1 = require("../../src/config/loader");
7
- const engine_1 = require("../../src/engine");
8
- /**
9
- * Schematic factory. Reads `sdk.config.json` at the workspace root, runs the
10
- * pure generator, and writes each emitted file into the Tree so
11
- * `--dry-run` / `--force` behave as expected.
12
- */
13
- function sdk(options = {}) {
14
- return async (tree, context) => {
15
- const workspaceRoot = process.cwd();
16
- const configPath = options.config ?? 'config/sdk.config.json';
17
- const targets = (0, loader_1.loadConfig)(configPath, workspaceRoot);
18
- const selected = selectTargets(targets, options.target);
19
- if (selected.length === 0) {
20
- throw new Error(`No SDK targets matched "${options.target}"`);
21
- }
22
- for (const target of selected) {
23
- const result = await (0, engine_1.generate)(target, workspaceRoot);
24
- writeResult(tree, workspaceRoot, result, context);
25
- }
26
- };
27
- }
28
- function selectTargets(targets, selector) {
29
- if (!selector)
30
- return [...targets];
31
- const idx = Number.parseInt(selector, 10);
32
- if (!Number.isNaN(idx) && idx > 0 && idx <= targets.length) {
33
- return [targets[idx - 1]];
34
- }
35
- const lc = selector.toLowerCase();
36
- return targets.filter((t) => t.clientName.toLowerCase() === lc || t.output.toLowerCase().includes(lc) || t.packageName.toLowerCase() === lc);
37
- }
38
- function writeResult(tree, workspaceRoot, result, context) {
39
- const relOutput = (0, node_path_1.relative)(workspaceRoot, result.outputDir) || '.';
40
- context.logger.info(`[sdk] ${result.target.mode} → ${relOutput} ` +
41
- `(schemas=${result.stats.schemas}, operations=${result.stats.operations}, ` +
42
- `tags=${result.stats.tags}, files=${result.stats.files})`);
43
- removeStaleFiles(tree, workspaceRoot, result);
44
- for (const file of result.files) {
45
- const absolute = (0, node_path_1.resolve)(result.outputDir, file.path);
46
- const treePath = normalizeTreePath(workspaceRoot, absolute);
47
- const buffer = Buffer.from(file.content, 'utf8');
48
- if (tree.exists(treePath)) {
49
- tree.overwrite(treePath, buffer);
50
- }
51
- else {
52
- tree.create(treePath, buffer);
53
- }
54
- }
55
- }
56
- function removeStaleFiles(tree, workspaceRoot, result) {
57
- const outputRoot = normalizeTreePath(workspaceRoot, result.outputDir);
58
- if (outputRoot === '/') {
59
- return;
60
- }
61
- const nextFiles = new Set(result.files.map((file) => normalizeTreePath(workspaceRoot, (0, node_path_1.resolve)(result.outputDir, file.path))));
62
- const staleFiles = [];
63
- tree.getDir(outputRoot).visit((path) => {
64
- if (!nextFiles.has(path)) {
65
- staleFiles.push(path);
66
- }
67
- });
68
- for (const staleFile of staleFiles) {
69
- tree.delete(staleFile);
70
- }
71
- }
72
- function normalizeTreePath(workspaceRoot, absolute) {
73
- const rel = (0, node_path_1.relative)(workspaceRoot, absolute);
74
- const posix = rel.split(/\\+/).join('/');
75
- return posix.startsWith('/') ? posix : `/${posix}`;
76
- }
@@ -1,41 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loadConfig = loadConfig;
4
- const node_fs_1 = require("node:fs");
5
- const node_path_1 = require("node:path");
6
- const schema_1 = require("./schema");
7
- /**
8
- * Loads an SDK generator config from disk. Supports `.json` and `.js`/`.cjs`
9
- * (require-based). `.ts` is intentionally not supported in the first iteration
10
- * to avoid pulling an extra compile step — use `.json` or `.js` instead.
11
- */
12
- function loadConfig(configPath, workspaceRoot) {
13
- const absolute = (0, node_path_1.isAbsolute)(configPath) ? configPath : (0, node_path_1.resolve)(workspaceRoot, configPath);
14
- if (!(0, node_fs_1.existsSync)(absolute)) {
15
- throw new Error(`SDK config not found at ${absolute}`);
16
- }
17
- const ext = (0, node_path_1.extname)(absolute).toLowerCase();
18
- let raw;
19
- if (ext === '.json' || ext === '') {
20
- const text = (0, node_fs_1.readFileSync)(absolute, 'utf8');
21
- raw = JSON.parse(stripJsonComments(text));
22
- }
23
- else if (ext === '.js' || ext === '.cjs') {
24
- const mod = require(absolute);
25
- raw = extractDefaultExport(mod);
26
- }
27
- else {
28
- throw new Error(`Unsupported SDK config extension: ${ext} (use .json or .js)`);
29
- }
30
- return (0, schema_1.resolveConfig)(raw);
31
- }
32
- function extractDefaultExport(mod) {
33
- if (mod && typeof mod === 'object' && 'default' in mod) {
34
- return mod.default;
35
- }
36
- return mod;
37
- }
38
- function stripJsonComments(text) {
39
- // Minimal JSONC support: strip // line comments and /* */ block comments.
40
- return text.replace(/\/\*[\s\S]*?\*\//g, '').replace(/(^|[^:])\/\/.*$/gm, '$1');
41
- }
@@ -1,57 +0,0 @@
1
- "use strict";
2
- /**
3
- * Public config shape for the SDK generator.
4
- *
5
- * Users place an `sdk.config.json` at the workspace root describing one or more
6
- * generation targets. All paths are resolved relative to the workspace root
7
- * (i.e. the directory containing the config file).
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.resolveTarget = resolveTarget;
11
- exports.resolveConfig = resolveConfig;
12
- const DEFAULT_BANNER = '/* eslint-disable */\n/* Auto-generated by @ojiepermana/angular/generator/api. DO NOT EDIT. */';
13
- const DEFAULT_FEATURES = {
14
- models: true,
15
- operations: true,
16
- services: true,
17
- client: true,
18
- metadata: true,
19
- navigation: true,
20
- };
21
- function resolveTarget(raw) {
22
- if (!raw || typeof raw !== 'object') {
23
- throw new Error('Invalid target: expected object');
24
- }
25
- if (!raw.input)
26
- throw new Error('Target is missing required "input"');
27
- if (!raw.output)
28
- throw new Error('Target is missing required "output"');
29
- const mode = raw.mode ?? 'standalone';
30
- if (!['standalone', 'library', 'secondary-entrypoint'].includes(mode)) {
31
- throw new Error(`Invalid target mode: ${mode}`);
32
- }
33
- const splitByDomain = raw.splitByDomain ?? mode === 'library';
34
- return {
35
- input: raw.input,
36
- output: raw.output,
37
- mode,
38
- clientName: raw.clientName ?? 'Api',
39
- packageName: raw.packageName ?? '@local/sdk',
40
- packageVersion: raw.packageVersion ?? '0.0.1',
41
- rootUrl: raw.rootUrl,
42
- features: { ...DEFAULT_FEATURES, ...(raw.features ?? {}) },
43
- splitByDomain,
44
- splitDepth: raw.splitDepth === 'tag' ? 'tag' : 'service',
45
- banner: raw.banner ?? DEFAULT_BANNER,
46
- };
47
- }
48
- function resolveConfig(raw) {
49
- if (!raw || typeof raw !== 'object') {
50
- throw new Error('Invalid SDK config: root must be an object');
51
- }
52
- const cfg = raw;
53
- if (!Array.isArray(cfg.targets) || cfg.targets.length === 0) {
54
- throw new Error('Invalid SDK config: "targets" must be a non-empty array');
55
- }
56
- return cfg.targets.map(resolveTarget);
57
- }
@@ -1,246 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.emitClient = emitClient;
4
- const template_1 = require("../render/template");
5
- /**
6
- * Emit the tiny runtime client primitives:
7
- * - `api-configuration.ts` — root-url config + provider
8
- * - `base-service.ts` — per-service rootUrl override
9
- * - `strict-http-response.ts`— HttpResponse alias
10
- * - `request-builder.ts` — minimal (path / query / header / body / build)
11
- * - `api.ts` — `Api` helper with invoke() / invoke$Response()
12
- *
13
- * These files are **static** — identical across specs — so we embed them as
14
- * template literals rather than parsing the IR. The only dynamic bits are the
15
- * banner comment and the configured default `rootUrl`.
16
- */
17
- function emitClient(target) {
18
- const defaultRootUrl = target.rootUrl ?? '';
19
- return [
20
- { path: 'api-configuration.ts', content: (0, template_1.finalize)(apiConfigurationFile(target, defaultRootUrl)) },
21
- { path: 'base-service.ts', content: (0, template_1.finalize)(baseServiceFile(target)) },
22
- { path: 'strict-http-response.ts', content: (0, template_1.finalize)(strictResponseFile(target)) },
23
- { path: 'request-builder.ts', content: (0, template_1.finalize)(requestBuilderFile(target)) },
24
- { path: 'api.ts', content: (0, template_1.finalize)(apiFile(target)) },
25
- ];
26
- }
27
- function apiConfigurationFile(target, rootUrl) {
28
- return `${target.banner}
29
-
30
- import { Injectable, makeEnvironmentProviders, type EnvironmentProviders } from '@angular/core';
31
-
32
- @Injectable({ providedIn: 'root' })
33
- export class ApiConfiguration {
34
- rootUrl: string = ${JSON.stringify(rootUrl)};
35
- }
36
-
37
- export function provideApiConfiguration(rootUrl: string): EnvironmentProviders {
38
- return makeEnvironmentProviders([
39
- {
40
- provide: ApiConfiguration,
41
- useFactory: () => {
42
- const c = new ApiConfiguration();
43
- c.rootUrl = rootUrl;
44
- return c;
45
- },
46
- },
47
- ]);
48
- }
49
- `;
50
- }
51
- function baseServiceFile(target) {
52
- return `${target.banner}
53
-
54
- import { HttpClient } from '@angular/common/http';
55
- import { Injectable, inject } from '@angular/core';
56
-
57
- import { ApiConfiguration } from './api-configuration';
58
-
59
- @Injectable()
60
- export class BaseService {
61
- protected readonly config = inject(ApiConfiguration);
62
- protected readonly http = inject(HttpClient);
63
-
64
- private _rootUrl?: string;
65
-
66
- get rootUrl(): string {
67
- return this._rootUrl ?? this.config.rootUrl;
68
- }
69
- set rootUrl(url: string) {
70
- this._rootUrl = url;
71
- }
72
- }
73
- `;
74
- }
75
- function strictResponseFile(target) {
76
- return `${target.banner}
77
-
78
- import { HttpResponse } from '@angular/common/http';
79
-
80
- export type StrictHttpResponse<T> = HttpResponse<T> & { readonly body: T };
81
- `;
82
- }
83
- /**
84
- * Minimal request builder — intentionally drops the style/explode serializer
85
- * from ng-openapi-gen's output. Covers the 99% case: path templating, simple
86
- * query params (with array → repeated key), JSON body, and header params.
87
- */
88
- function requestBuilderFile(target) {
89
- return `${target.banner}
90
-
91
- import {
92
- HttpContext,
93
- HttpHeaders,
94
- HttpParams,
95
- HttpRequest,
96
- } from '@angular/common/http';
97
-
98
- export interface BuildOptions {
99
- accept?: string;
100
- responseType?: 'json' | 'text' | 'blob' | 'arraybuffer';
101
- reportProgress?: boolean;
102
- context?: HttpContext;
103
- }
104
-
105
- export class RequestBuilder {
106
- private readonly _pathParams = new Map<string, unknown>();
107
- private readonly _queryParams = new Map<string, unknown>();
108
- private readonly _headerParams = new Map<string, unknown>();
109
- private _body: unknown = undefined;
110
- private _bodyContentType: string | undefined;
111
-
112
- constructor(
113
- public readonly rootUrl: string,
114
- public readonly operationPath: string,
115
- public readonly method: string,
116
- ) {}
117
-
118
- path(name: string, value: unknown): void {
119
- this._pathParams.set(name, value);
120
- }
121
-
122
- query(name: string, value: unknown): void {
123
- this._queryParams.set(name, value);
124
- }
125
-
126
- header(name: string, value: unknown): void {
127
- this._headerParams.set(name, value);
128
- }
129
-
130
- body(value: unknown, contentType = 'application/json'): void {
131
- if (value instanceof Blob) {
132
- this._bodyContentType = value.type;
133
- } else if (value instanceof FormData) {
134
- // FormData sets its own Content-Type (with boundary) — leave it alone.
135
- this._bodyContentType = undefined;
136
- } else {
137
- this._bodyContentType = contentType;
138
- }
139
- this._body = value;
140
- }
141
-
142
- build<T = unknown>(options: BuildOptions = {}): HttpRequest<T> {
143
- let path = this.operationPath;
144
- for (const [name, value] of this._pathParams) {
145
- path = path.replace(
146
- '{' + name + '}',
147
- encodeURIComponent(value == null ? '' : String(value)),
148
- );
149
- }
150
-
151
- let params = new HttpParams();
152
- for (const [name, value] of this._queryParams) {
153
- if (value === undefined || value === null) continue;
154
- if (Array.isArray(value)) {
155
- for (const v of value) {
156
- if (v !== undefined && v !== null) params = params.append(name, String(v));
157
- }
158
- } else {
159
- params = params.append(name, String(value));
160
- }
161
- }
162
-
163
- let headers = new HttpHeaders();
164
- if (options.accept) headers = headers.set('Accept', options.accept);
165
- for (const [name, value] of this._headerParams) {
166
- if (value === undefined || value === null) continue;
167
- if (Array.isArray(value)) {
168
- for (const v of value) headers = headers.append(name, String(v));
169
- } else {
170
- headers = headers.set(name, String(value));
171
- }
172
- }
173
- if (this._bodyContentType) {
174
- headers = headers.set('Content-Type', this._bodyContentType);
175
- }
176
-
177
- return new HttpRequest<T>(
178
- this.method.toUpperCase(),
179
- this.rootUrl + path,
180
- this._body as T,
181
- {
182
- params,
183
- headers,
184
- responseType: options.responseType,
185
- reportProgress: options.reportProgress,
186
- context: options.context,
187
- },
188
- );
189
- }
190
- }
191
- `;
192
- }
193
- function apiFile(target) {
194
- return `${target.banner}
195
-
196
- import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http';
197
- import { Injectable, inject } from '@angular/core';
198
- import { Observable } from 'rxjs';
199
- import { filter, map } from 'rxjs/operators';
200
-
201
- import { ApiConfiguration } from './api-configuration';
202
- import { StrictHttpResponse } from './strict-http-response';
203
-
204
- export type ApiFn<P, R> = (
205
- http: HttpClient,
206
- rootUrl: string,
207
- params: P,
208
- context?: HttpContext,
209
- ) => Observable<StrictHttpResponse<R>>;
210
-
211
- /**
212
- * Helper to invoke any tree-shakeable operation function directly.
213
- */
214
- @Injectable({ providedIn: 'root' })
215
- export class ${target.clientName} {
216
- private readonly config = inject(ApiConfiguration);
217
- private readonly http = inject(HttpClient);
218
-
219
- private _rootUrl?: string;
220
-
221
- get rootUrl(): string {
222
- return this._rootUrl ?? this.config.rootUrl;
223
- }
224
- set rootUrl(url: string) {
225
- this._rootUrl = url;
226
- }
227
-
228
- /** Invoke an operation function and stream the response body. */
229
- invoke<P, R>(fn: ApiFn<P, R>, params: P, context?: HttpContext): Observable<R> {
230
- return this.invoke$Response(fn, params, context).pipe(map((r) => r.body));
231
- }
232
-
233
- /** Invoke an operation function and stream the full HTTP response. */
234
- invoke$Response<P, R>(
235
- fn: ApiFn<P, R>,
236
- params: P,
237
- context?: HttpContext,
238
- ): Observable<StrictHttpResponse<R>> {
239
- return fn(this.http, this.rootUrl, params, context).pipe(
240
- filter((r: unknown): r is HttpResponse<unknown> => r instanceof HttpResponse),
241
- map((r) => r as StrictHttpResponse<R>),
242
- );
243
- }
244
- }
245
- `;
246
- }