@things-factory/ops-master 10.1.247 → 10.1.248

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 (429) hide show
  1. package/package.json +3 -3
  2. package/dist-client/bootstrap.d.ts +0 -19
  3. package/dist-client/bootstrap.js +0 -66
  4. package/dist-client/bootstrap.js.map +0 -1
  5. package/dist-client/index.d.ts +0 -17
  6. package/dist-client/index.js +0 -21
  7. package/dist-client/index.js.map +0 -1
  8. package/dist-client/master-change-approval.d.ts +0 -14
  9. package/dist-client/master-change-approval.js +0 -36
  10. package/dist-client/master-change-approval.js.map +0 -1
  11. package/dist-client/master-change-policy-axes.d.ts +0 -37
  12. package/dist-client/master-change-policy-axes.js +0 -29
  13. package/dist-client/master-change-policy-axes.js.map +0 -1
  14. package/dist-client/master-change-policy-panel.d.ts +0 -59
  15. package/dist-client/master-change-policy-panel.js +0 -454
  16. package/dist-client/master-change-policy-panel.js.map +0 -1
  17. package/dist-client/master-change-providers.d.ts +0 -4
  18. package/dist-client/master-change-providers.js +0 -91
  19. package/dist-client/master-change-providers.js.map +0 -1
  20. package/dist-client/pages/master/applied-when-dialog.d.ts +0 -48
  21. package/dist-client/pages/master/applied-when-dialog.js +0 -137
  22. package/dist-client/pages/master/applied-when-dialog.js.map +0 -1
  23. package/dist-client/pages/master/assignment-fields.d.ts +0 -27
  24. package/dist-client/pages/master/assignment-fields.js +0 -62
  25. package/dist-client/pages/master/assignment-fields.js.map +0 -1
  26. package/dist-client/pages/master/equipment-class.d.ts +0 -12
  27. package/dist-client/pages/master/equipment-class.js +0 -42
  28. package/dist-client/pages/master/equipment-class.js.map +0 -1
  29. package/dist-client/pages/master/equipment.d.ts +0 -12
  30. package/dist-client/pages/master/equipment.js +0 -58
  31. package/dist-client/pages/master/equipment.js.map +0 -1
  32. package/dist-client/pages/master/grist-iso-duration.d.ts +0 -20
  33. package/dist-client/pages/master/grist-iso-duration.js +0 -70
  34. package/dist-client/pages/master/grist-iso-duration.js.map +0 -1
  35. package/dist-client/pages/master/grist-reference.d.ts +0 -91
  36. package/dist-client/pages/master/grist-reference.js +0 -419
  37. package/dist-client/pages/master/grist-reference.js.map +0 -1
  38. package/dist-client/pages/master/import-rows.d.ts +0 -35
  39. package/dist-client/pages/master/import-rows.js +0 -66
  40. package/dist-client/pages/master/import-rows.js.map +0 -1
  41. package/dist-client/pages/master/iso-duration.d.ts +0 -34
  42. package/dist-client/pages/master/iso-duration.js +0 -76
  43. package/dist-client/pages/master/iso-duration.js.map +0 -1
  44. package/dist-client/pages/master/master-options.d.ts +0 -40
  45. package/dist-client/pages/master/master-options.js +0 -54
  46. package/dist-client/pages/master/master-options.js.map +0 -1
  47. package/dist-client/pages/master/master-page-base.d.ts +0 -369
  48. package/dist-client/pages/master/master-page-base.js +0 -657
  49. package/dist-client/pages/master/master-page-base.js.map +0 -1
  50. package/dist-client/pages/master/material-class.d.ts +0 -12
  51. package/dist-client/pages/master/material-class.js +0 -42
  52. package/dist-client/pages/master/material-class.js.map +0 -1
  53. package/dist-client/pages/master/material-definition.d.ts +0 -5
  54. package/dist-client/pages/master/material-definition.js +0 -14
  55. package/dist-client/pages/master/material-definition.js.map +0 -1
  56. package/dist-client/pages/master/material-revision-fields.d.ts +0 -2
  57. package/dist-client/pages/master/material-revision-fields.js +0 -43
  58. package/dist-client/pages/master/material-revision-fields.js.map +0 -1
  59. package/dist-client/pages/master/operation-definition.d.ts +0 -12
  60. package/dist-client/pages/master/operation-definition.js +0 -49
  61. package/dist-client/pages/master/operation-definition.js.map +0 -1
  62. package/dist-client/pages/master/operational-location.d.ts +0 -84
  63. package/dist-client/pages/master/operational-location.js +0 -432
  64. package/dist-client/pages/master/operational-location.js.map +0 -1
  65. package/dist-client/pages/master/person.d.ts +0 -12
  66. package/dist-client/pages/master/person.js +0 -41
  67. package/dist-client/pages/master/person.js.map +0 -1
  68. package/dist-client/pages/master/personnel-class.d.ts +0 -12
  69. package/dist-client/pages/master/personnel-class.js +0 -43
  70. package/dist-client/pages/master/personnel-class.js.map +0 -1
  71. package/dist-client/pages/master/physical-asset-class.d.ts +0 -12
  72. package/dist-client/pages/master/physical-asset-class.js +0 -40
  73. package/dist-client/pages/master/physical-asset-class.js.map +0 -1
  74. package/dist-client/pages/master/physical-asset.d.ts +0 -12
  75. package/dist-client/pages/master/physical-asset.js +0 -41
  76. package/dist-client/pages/master/physical-asset.js.map +0 -1
  77. package/dist-client/pages/master/recipe-definition.d.ts +0 -5
  78. package/dist-client/pages/master/recipe-definition.js +0 -14
  79. package/dist-client/pages/master/recipe-definition.js.map +0 -1
  80. package/dist-client/pages/master/reference-targets.d.ts +0 -42
  81. package/dist-client/pages/master/reference-targets.js +0 -82
  82. package/dist-client/pages/master/reference-targets.js.map +0 -1
  83. package/dist-client/pages/master/revision-comparison.d.ts +0 -49
  84. package/dist-client/pages/master/revision-comparison.js +0 -560
  85. package/dist-client/pages/master/revision-comparison.js.map +0 -1
  86. package/dist-client/pages/master/revision-view.d.ts +0 -34
  87. package/dist-client/pages/master/revision-view.js +0 -145
  88. package/dist-client/pages/master/revision-view.js.map +0 -1
  89. package/dist-client/pages/master/revision-workspace.d.ts +0 -50
  90. package/dist-client/pages/master/revision-workspace.js +0 -763
  91. package/dist-client/pages/master/revision-workspace.js.map +0 -1
  92. package/dist-client/pages/master/route-definition.d.ts +0 -19
  93. package/dist-client/pages/master/route-definition.js +0 -40
  94. package/dist-client/pages/master/route-definition.js.map +0 -1
  95. package/dist-client/pages/master/stop-reason.d.ts +0 -12
  96. package/dist-client/pages/master/stop-reason.js +0 -48
  97. package/dist-client/pages/master/stop-reason.js.map +0 -1
  98. package/dist-client/pages/master/test-specification.d.ts +0 -5
  99. package/dist-client/pages/master/test-specification.js +0 -14
  100. package/dist-client/pages/master/test-specification.js.map +0 -1
  101. package/dist-client/pages/master-axes.d.ts +0 -24
  102. package/dist-client/pages/master-axes.js +0 -39
  103. package/dist-client/pages/master-axes.js.map +0 -1
  104. package/dist-client/route.d.ts +0 -1
  105. package/dist-client/route.js +0 -81
  106. package/dist-client/route.js.map +0 -1
  107. package/dist-client/tsconfig.tsbuildinfo +0 -1
  108. package/dist-server/index.d.ts +0 -1
  109. package/dist-server/index.js +0 -19
  110. package/dist-server/index.js.map +0 -1
  111. package/dist-server/service/ai-entry/master-entry-rules.d.ts +0 -175
  112. package/dist-server/service/ai-entry/master-entry-rules.js +0 -302
  113. package/dist-server/service/ai-entry/master-entry-rules.js.map +0 -1
  114. package/dist-server/service/ai-entry/master-entry-targets.d.ts +0 -23
  115. package/dist-server/service/ai-entry/master-entry-targets.js +0 -293
  116. package/dist-server/service/ai-entry/master-entry-targets.js.map +0 -1
  117. package/dist-server/service/approval-route.d.ts +0 -37
  118. package/dist-server/service/approval-route.js +0 -34
  119. package/dist-server/service/approval-route.js.map +0 -1
  120. package/dist-server/service/asset/asset-lifecycle.d.ts +0 -106
  121. package/dist-server/service/asset/asset-lifecycle.js +0 -126
  122. package/dist-server/service/asset/asset-lifecycle.js.map +0 -1
  123. package/dist-server/service/asset/asset-master-resolver.d.ts +0 -53
  124. package/dist-server/service/asset/asset-master-resolver.js +0 -185
  125. package/dist-server/service/asset/asset-master-resolver.js.map +0 -1
  126. package/dist-server/service/asset/asset-master.d.ts +0 -21
  127. package/dist-server/service/asset/asset-master.js +0 -25
  128. package/dist-server/service/asset/asset-master.js.map +0 -1
  129. package/dist-server/service/asset/asset-query.d.ts +0 -16
  130. package/dist-server/service/asset/asset-query.js +0 -72
  131. package/dist-server/service/asset/asset-query.js.map +0 -1
  132. package/dist-server/service/asset/index.d.ts +0 -6
  133. package/dist-server/service/asset/index.js +0 -10
  134. package/dist-server/service/asset/index.js.map +0 -1
  135. package/dist-server/service/asset/physical-asset-class.d.ts +0 -34
  136. package/dist-server/service/asset/physical-asset-class.js +0 -104
  137. package/dist-server/service/asset/physical-asset-class.js.map +0 -1
  138. package/dist-server/service/asset/physical-asset.d.ts +0 -66
  139. package/dist-server/service/asset/physical-asset.js +0 -123
  140. package/dist-server/service/asset/physical-asset.js.map +0 -1
  141. package/dist-server/service/assignment/applied-when.d.ts +0 -24
  142. package/dist-server/service/assignment/applied-when.js +0 -16
  143. package/dist-server/service/assignment/applied-when.js.map +0 -1
  144. package/dist-server/service/assignment/assignment-history.d.ts +0 -92
  145. package/dist-server/service/assignment/assignment-history.js +0 -289
  146. package/dist-server/service/assignment/assignment-history.js.map +0 -1
  147. package/dist-server/service/assignment/assignment-write.d.ts +0 -42
  148. package/dist-server/service/assignment/assignment-write.js +0 -101
  149. package/dist-server/service/assignment/assignment-write.js.map +0 -1
  150. package/dist-server/service/assignment/master-value-claim.d.ts +0 -135
  151. package/dist-server/service/assignment/master-value-claim.js +0 -174
  152. package/dist-server/service/assignment/master-value-claim.js.map +0 -1
  153. package/dist-server/service/equipment/equipment-class.d.ts +0 -34
  154. package/dist-server/service/equipment/equipment-class.js +0 -104
  155. package/dist-server/service/equipment/equipment-class.js.map +0 -1
  156. package/dist-server/service/equipment/equipment-master-resolver.d.ts +0 -77
  157. package/dist-server/service/equipment/equipment-master-resolver.js +0 -266
  158. package/dist-server/service/equipment/equipment-master-resolver.js.map +0 -1
  159. package/dist-server/service/equipment/equipment-master.d.ts +0 -30
  160. package/dist-server/service/equipment/equipment-master.js +0 -53
  161. package/dist-server/service/equipment/equipment-master.js.map +0 -1
  162. package/dist-server/service/equipment/equipment-query.d.ts +0 -16
  163. package/dist-server/service/equipment/equipment-query.js +0 -72
  164. package/dist-server/service/equipment/equipment-query.js.map +0 -1
  165. package/dist-server/service/equipment/equipment.d.ts +0 -71
  166. package/dist-server/service/equipment/equipment.js +0 -138
  167. package/dist-server/service/equipment/equipment.js.map +0 -1
  168. package/dist-server/service/equipment/index.d.ts +0 -8
  169. package/dist-server/service/equipment/index.js +0 -12
  170. package/dist-server/service/equipment/index.js.map +0 -1
  171. package/dist-server/service/equipment/state-period-rules.d.ts +0 -95
  172. package/dist-server/service/equipment/state-period-rules.js +0 -122
  173. package/dist-server/service/equipment/state-period-rules.js.map +0 -1
  174. package/dist-server/service/equipment/stop-reason-query.d.ts +0 -11
  175. package/dist-server/service/equipment/stop-reason-query.js +0 -39
  176. package/dist-server/service/equipment/stop-reason-query.js.map +0 -1
  177. package/dist-server/service/equipment/stop-reason.d.ts +0 -58
  178. package/dist-server/service/equipment/stop-reason.js +0 -114
  179. package/dist-server/service/equipment/stop-reason.js.map +0 -1
  180. package/dist-server/service/index.d.ts +0 -82
  181. package/dist-server/service/index.js +0 -145
  182. package/dist-server/service/index.js.map +0 -1
  183. package/dist-server/service/location/index.d.ts +0 -5
  184. package/dist-server/service/location/index.js +0 -9
  185. package/dist-server/service/location/index.js.map +0 -1
  186. package/dist-server/service/location/location-master-resolver.d.ts +0 -60
  187. package/dist-server/service/location/location-master-resolver.js +0 -313
  188. package/dist-server/service/location/location-master-resolver.js.map +0 -1
  189. package/dist-server/service/location/location-master.d.ts +0 -26
  190. package/dist-server/service/location/location-master.js +0 -28
  191. package/dist-server/service/location/location-master.js.map +0 -1
  192. package/dist-server/service/location/location-query.d.ts +0 -15
  193. package/dist-server/service/location/location-query.js +0 -56
  194. package/dist-server/service/location/location-query.js.map +0 -1
  195. package/dist-server/service/location/operational-location.d.ts +0 -116
  196. package/dist-server/service/location/operational-location.js +0 -157
  197. package/dist-server/service/location/operational-location.js.map +0 -1
  198. package/dist-server/service/master-axis.d.ts +0 -40
  199. package/dist-server/service/master-axis.js +0 -57
  200. package/dist-server/service/master-axis.js.map +0 -1
  201. package/dist-server/service/master-change-approval/approval-input.d.ts +0 -17
  202. package/dist-server/service/master-change-approval/approval-input.js +0 -35
  203. package/dist-server/service/master-change-approval/approval-input.js.map +0 -1
  204. package/dist-server/service/master-change-approval/builtin-axes.d.ts +0 -4
  205. package/dist-server/service/master-change-approval/builtin-axes.js +0 -96
  206. package/dist-server/service/master-change-approval/builtin-axes.js.map +0 -1
  207. package/dist-server/service/master-change-approval/index.d.ts +0 -14
  208. package/dist-server/service/master-change-approval/index.js +0 -37
  209. package/dist-server/service/master-change-approval/index.js.map +0 -1
  210. package/dist-server/service/master-change-approval/master-change-axis.d.ts +0 -54
  211. package/dist-server/service/master-change-approval/master-change-axis.js +0 -17
  212. package/dist-server/service/master-change-approval/master-change-axis.js.map +0 -1
  213. package/dist-server/service/master-change-approval/master-change-flow.d.ts +0 -65
  214. package/dist-server/service/master-change-approval/master-change-flow.js +0 -125
  215. package/dist-server/service/master-change-approval/master-change-flow.js.map +0 -1
  216. package/dist-server/service/master-change-approval/master-change-resolver.d.ts +0 -18
  217. package/dist-server/service/master-change-approval/master-change-resolver.js +0 -58
  218. package/dist-server/service/master-change-approval/master-change-resolver.js.map +0 -1
  219. package/dist-server/service/master-change-policy.d.ts +0 -122
  220. package/dist-server/service/master-change-policy.js +0 -304
  221. package/dist-server/service/master-change-policy.js.map +0 -1
  222. package/dist-server/service/master-conformance-resolver.d.ts +0 -34
  223. package/dist-server/service/master-conformance-resolver.js +0 -153
  224. package/dist-server/service/master-conformance-resolver.js.map +0 -1
  225. package/dist-server/service/master-conformance.d.ts +0 -80
  226. package/dist-server/service/master-conformance.js +0 -266
  227. package/dist-server/service/master-conformance.js.map +0 -1
  228. package/dist-server/service/master-crud.d.ts +0 -55
  229. package/dist-server/service/master-crud.js +0 -93
  230. package/dist-server/service/master-crud.js.map +0 -1
  231. package/dist-server/service/master-list.d.ts +0 -12
  232. package/dist-server/service/master-list.js +0 -30
  233. package/dist-server/service/master-list.js.map +0 -1
  234. package/dist-server/service/master-page-query.d.ts +0 -33
  235. package/dist-server/service/master-page-query.js +0 -55
  236. package/dist-server/service/master-page-query.js.map +0 -1
  237. package/dist-server/service/master-page.d.ts +0 -85
  238. package/dist-server/service/master-page.js +0 -104
  239. package/dist-server/service/master-page.js.map +0 -1
  240. package/dist-server/service/material/index.d.ts +0 -7
  241. package/dist-server/service/material/index.js +0 -12
  242. package/dist-server/service/material/index.js.map +0 -1
  243. package/dist-server/service/material/material-axis-status.d.ts +0 -8
  244. package/dist-server/service/material/material-axis-status.js +0 -19
  245. package/dist-server/service/material/material-axis-status.js.map +0 -1
  246. package/dist-server/service/material/material-class.d.ts +0 -34
  247. package/dist-server/service/material/material-class.js +0 -104
  248. package/dist-server/service/material/material-class.js.map +0 -1
  249. package/dist-server/service/material/material-definition.d.ts +0 -45
  250. package/dist-server/service/material/material-definition.js +0 -125
  251. package/dist-server/service/material/material-definition.js.map +0 -1
  252. package/dist-server/service/material/material-effective-list.d.ts +0 -39
  253. package/dist-server/service/material/material-effective-list.js +0 -54
  254. package/dist-server/service/material/material-effective-list.js.map +0 -1
  255. package/dist-server/service/material/material-master-resolver.d.ts +0 -106
  256. package/dist-server/service/material/material-master-resolver.js +0 -351
  257. package/dist-server/service/material/material-master-resolver.js.map +0 -1
  258. package/dist-server/service/material/material-master.d.ts +0 -9
  259. package/dist-server/service/material/material-master.js +0 -24
  260. package/dist-server/service/material/material-master.js.map +0 -1
  261. package/dist-server/service/material/material-query.d.ts +0 -16
  262. package/dist-server/service/material/material-query.js +0 -79
  263. package/dist-server/service/material/material-query.js.map +0 -1
  264. package/dist-server/service/material/material-revision-content.d.ts +0 -10
  265. package/dist-server/service/material/material-revision-content.js +0 -92
  266. package/dist-server/service/material/material-revision-content.js.map +0 -1
  267. package/dist-server/service/material/material-revision-resolver.d.ts +0 -60
  268. package/dist-server/service/material/material-revision-resolver.js +0 -96
  269. package/dist-server/service/material/material-revision-resolver.js.map +0 -1
  270. package/dist-server/service/material/material-revision-service.d.ts +0 -179
  271. package/dist-server/service/material/material-revision-service.js +0 -687
  272. package/dist-server/service/material/material-revision-service.js.map +0 -1
  273. package/dist-server/service/material/material-revision.d.ts +0 -86
  274. package/dist-server/service/material/material-revision.js +0 -339
  275. package/dist-server/service/material/material-revision.js.map +0 -1
  276. package/dist-server/service/material/recipe-index.d.ts +0 -23
  277. package/dist-server/service/material/recipe-index.js +0 -44
  278. package/dist-server/service/material/recipe-index.js.map +0 -1
  279. package/dist-server/service/operation/index.d.ts +0 -6
  280. package/dist-server/service/operation/index.js +0 -10
  281. package/dist-server/service/operation/index.js.map +0 -1
  282. package/dist-server/service/operation/operation-definition.d.ts +0 -52
  283. package/dist-server/service/operation/operation-definition.js +0 -143
  284. package/dist-server/service/operation/operation-definition.js.map +0 -1
  285. package/dist-server/service/operation/operation-master-resolver.d.ts +0 -52
  286. package/dist-server/service/operation/operation-master-resolver.js +0 -187
  287. package/dist-server/service/operation/operation-master-resolver.js.map +0 -1
  288. package/dist-server/service/operation/operation-master.d.ts +0 -21
  289. package/dist-server/service/operation/operation-master.js +0 -28
  290. package/dist-server/service/operation/operation-master.js.map +0 -1
  291. package/dist-server/service/operation/operation-query.d.ts +0 -15
  292. package/dist-server/service/operation/operation-query.js +0 -56
  293. package/dist-server/service/operation/operation-query.js.map +0 -1
  294. package/dist-server/service/operation/operation-readiness-resolver.d.ts +0 -39
  295. package/dist-server/service/operation/operation-readiness-resolver.js +0 -111
  296. package/dist-server/service/operation/operation-readiness-resolver.js.map +0 -1
  297. package/dist-server/service/operation/operation-readiness.d.ts +0 -34
  298. package/dist-server/service/operation/operation-readiness.js +0 -133
  299. package/dist-server/service/operation/operation-readiness.js.map +0 -1
  300. package/dist-server/service/personnel/index.d.ts +0 -6
  301. package/dist-server/service/personnel/index.js +0 -10
  302. package/dist-server/service/personnel/index.js.map +0 -1
  303. package/dist-server/service/personnel/person.d.ts +0 -51
  304. package/dist-server/service/personnel/person.js +0 -119
  305. package/dist-server/service/personnel/person.js.map +0 -1
  306. package/dist-server/service/personnel/personnel-class-readiness.d.ts +0 -22
  307. package/dist-server/service/personnel/personnel-class-readiness.js +0 -98
  308. package/dist-server/service/personnel/personnel-class-readiness.js.map +0 -1
  309. package/dist-server/service/personnel/personnel-class.d.ts +0 -54
  310. package/dist-server/service/personnel/personnel-class.js +0 -114
  311. package/dist-server/service/personnel/personnel-class.js.map +0 -1
  312. package/dist-server/service/personnel/personnel-master-resolver.d.ts +0 -53
  313. package/dist-server/service/personnel/personnel-master-resolver.js +0 -187
  314. package/dist-server/service/personnel/personnel-master-resolver.js.map +0 -1
  315. package/dist-server/service/personnel/personnel-master.d.ts +0 -39
  316. package/dist-server/service/personnel/personnel-master.js +0 -34
  317. package/dist-server/service/personnel/personnel-master.js.map +0 -1
  318. package/dist-server/service/personnel/personnel-query.d.ts +0 -29
  319. package/dist-server/service/personnel/personnel-query.js +0 -79
  320. package/dist-server/service/personnel/personnel-query.js.map +0 -1
  321. package/dist-server/service/personnel/qualification.d.ts +0 -104
  322. package/dist-server/service/personnel/qualification.js +0 -147
  323. package/dist-server/service/personnel/qualification.js.map +0 -1
  324. package/dist-server/service/quality/index.d.ts +0 -4
  325. package/dist-server/service/quality/index.js +0 -8
  326. package/dist-server/service/quality/index.js.map +0 -1
  327. package/dist-server/service/quality/nonconformance-cause-resolver.d.ts +0 -12
  328. package/dist-server/service/quality/nonconformance-cause-resolver.js +0 -60
  329. package/dist-server/service/quality/nonconformance-cause-resolver.js.map +0 -1
  330. package/dist-server/service/quality/nonconformance-cause.d.ts +0 -20
  331. package/dist-server/service/quality/nonconformance-cause.js +0 -90
  332. package/dist-server/service/quality/nonconformance-cause.js.map +0 -1
  333. package/dist-server/service/recipe/index.d.ts +0 -10
  334. package/dist-server/service/recipe/index.js +0 -16
  335. package/dist-server/service/recipe/index.js.map +0 -1
  336. package/dist-server/service/recipe/recipe-definition.d.ts +0 -75
  337. package/dist-server/service/recipe/recipe-definition.js +0 -143
  338. package/dist-server/service/recipe/recipe-definition.js.map +0 -1
  339. package/dist-server/service/recipe/recipe-effective-list.d.ts +0 -49
  340. package/dist-server/service/recipe/recipe-effective-list.js +0 -96
  341. package/dist-server/service/recipe/recipe-effective-list.js.map +0 -1
  342. package/dist-server/service/recipe/recipe-master-resolver.d.ts +0 -28
  343. package/dist-server/service/recipe/recipe-master-resolver.js +0 -128
  344. package/dist-server/service/recipe/recipe-master-resolver.js.map +0 -1
  345. package/dist-server/service/recipe/recipe-master.d.ts +0 -37
  346. package/dist-server/service/recipe/recipe-master.js +0 -47
  347. package/dist-server/service/recipe/recipe-master.js.map +0 -1
  348. package/dist-server/service/recipe/recipe-query.d.ts +0 -21
  349. package/dist-server/service/recipe/recipe-query.js +0 -82
  350. package/dist-server/service/recipe/recipe-query.js.map +0 -1
  351. package/dist-server/service/recipe/recipe-revision-content.d.ts +0 -32
  352. package/dist-server/service/recipe/recipe-revision-content.js +0 -70
  353. package/dist-server/service/recipe/recipe-revision-content.js.map +0 -1
  354. package/dist-server/service/recipe/recipe-revision-line.d.ts +0 -30
  355. package/dist-server/service/recipe/recipe-revision-line.js +0 -95
  356. package/dist-server/service/recipe/recipe-revision-line.js.map +0 -1
  357. package/dist-server/service/recipe/recipe-revision-resolver.d.ts +0 -65
  358. package/dist-server/service/recipe/recipe-revision-resolver.js +0 -96
  359. package/dist-server/service/recipe/recipe-revision-resolver.js.map +0 -1
  360. package/dist-server/service/recipe/recipe-revision-service.d.ts +0 -183
  361. package/dist-server/service/recipe/recipe-revision-service.js +0 -754
  362. package/dist-server/service/recipe/recipe-revision-service.js.map +0 -1
  363. package/dist-server/service/recipe/recipe-revision.d.ts +0 -102
  364. package/dist-server/service/recipe/recipe-revision.js +0 -373
  365. package/dist-server/service/recipe/recipe-revision.js.map +0 -1
  366. package/dist-server/service/recipe/route-definition.d.ts +0 -51
  367. package/dist-server/service/recipe/route-definition.js +0 -114
  368. package/dist-server/service/recipe/route-definition.js.map +0 -1
  369. package/dist-server/service/resource/class-lineage.d.ts +0 -46
  370. package/dist-server/service/resource/class-lineage.js +0 -80
  371. package/dist-server/service/resource/class-lineage.js.map +0 -1
  372. package/dist-server/service/resource/class-members.d.ts +0 -36
  373. package/dist-server/service/resource/class-members.js +0 -59
  374. package/dist-server/service/resource/class-members.js.map +0 -1
  375. package/dist-server/service/resource/referrers.d.ts +0 -54
  376. package/dist-server/service/resource/referrers.js +0 -99
  377. package/dist-server/service/resource/referrers.js.map +0 -1
  378. package/dist-server/service/resource/resource-class.d.ts +0 -25
  379. package/dist-server/service/resource/resource-class.js +0 -29
  380. package/dist-server/service/resource/resource-class.js.map +0 -1
  381. package/dist-server/service/revision-baseline.d.ts +0 -71
  382. package/dist-server/service/revision-baseline.js +0 -87
  383. package/dist-server/service/revision-baseline.js.map +0 -1
  384. package/dist-server/service/row-lock.d.ts +0 -22
  385. package/dist-server/service/row-lock.js +0 -31
  386. package/dist-server/service/row-lock.js.map +0 -1
  387. package/dist-server/service/status/axis-stamp.d.ts +0 -16
  388. package/dist-server/service/status/axis-stamp.js +0 -22
  389. package/dist-server/service/status/axis-stamp.js.map +0 -1
  390. package/dist-server/service/status/index.d.ts +0 -3
  391. package/dist-server/service/status/index.js +0 -7
  392. package/dist-server/service/status/index.js.map +0 -1
  393. package/dist-server/service/status/master-status.d.ts +0 -38
  394. package/dist-server/service/status/master-status.js +0 -129
  395. package/dist-server/service/status/master-status.js.map +0 -1
  396. package/dist-server/service/test-spec/criteria-check.d.ts +0 -53
  397. package/dist-server/service/test-spec/criteria-check.js +0 -142
  398. package/dist-server/service/test-spec/criteria-check.js.map +0 -1
  399. package/dist-server/service/test-spec/criteria-rows.d.ts +0 -89
  400. package/dist-server/service/test-spec/criteria-rows.js +0 -139
  401. package/dist-server/service/test-spec/criteria-rows.js.map +0 -1
  402. package/dist-server/service/test-spec/index.d.ts +0 -6
  403. package/dist-server/service/test-spec/index.js +0 -11
  404. package/dist-server/service/test-spec/index.js.map +0 -1
  405. package/dist-server/service/test-spec/test-spec-effective-list.d.ts +0 -34
  406. package/dist-server/service/test-spec/test-spec-effective-list.js +0 -42
  407. package/dist-server/service/test-spec/test-spec-effective-list.js.map +0 -1
  408. package/dist-server/service/test-spec/test-spec-master-resolver.d.ts +0 -44
  409. package/dist-server/service/test-spec/test-spec-master-resolver.js +0 -144
  410. package/dist-server/service/test-spec/test-spec-master-resolver.js.map +0 -1
  411. package/dist-server/service/test-spec/test-spec-master.d.ts +0 -6
  412. package/dist-server/service/test-spec/test-spec-master.js +0 -18
  413. package/dist-server/service/test-spec/test-spec-master.js.map +0 -1
  414. package/dist-server/service/test-spec/test-spec-query.d.ts +0 -15
  415. package/dist-server/service/test-spec/test-spec-query.js +0 -61
  416. package/dist-server/service/test-spec/test-spec-query.js.map +0 -1
  417. package/dist-server/service/test-spec/test-spec-revision-resolver.d.ts +0 -59
  418. package/dist-server/service/test-spec/test-spec-revision-resolver.js +0 -96
  419. package/dist-server/service/test-spec/test-spec-revision-resolver.js.map +0 -1
  420. package/dist-server/service/test-spec/test-spec-revision-service.d.ts +0 -178
  421. package/dist-server/service/test-spec/test-spec-revision-service.js +0 -685
  422. package/dist-server/service/test-spec/test-spec-revision-service.js.map +0 -1
  423. package/dist-server/service/test-spec/test-spec-revision.d.ts +0 -86
  424. package/dist-server/service/test-spec/test-spec-revision.js +0 -334
  425. package/dist-server/service/test-spec/test-spec-revision.js.map +0 -1
  426. package/dist-server/service/test-spec/test-specification.d.ts +0 -47
  427. package/dist-server/service/test-spec/test-specification.js +0 -119
  428. package/dist-server/service/test-spec/test-specification.js.map +0 -1
  429. package/dist-server/tsconfig.tsbuildinfo +0 -1
@@ -1,46 +0,0 @@
1
- import type { ResourceClassFields } from './resource-class';
2
- /**
3
- * 등급 상속을 걷는다 — **`baseIds` 는 네 등급 표에 다 선언되어 있는데 아무도 걷지 않았다.**
4
- *
5
- * 표준 `MaterialClassBaseID` · `PersonnelClassBaseID` 는 등급이 등급을 상속한다고 말한다. 우리 표에도
6
- * 칸이 있고 화면에서 편집도 되고 트윈에도 나간다. 그런데 그 값을 **읽어서 무엇을 답하는 곳이 한 군데도
7
- * 없었다.** 그래서 「이 품목이 완제품인가」를 물으면 등급 이름 `MC-ECU-FG` 가 나왔다 — 사람은 읽지만
8
- * 화면은 못 읽는다.
9
- *
10
- * ISA-95 에는 「완제품/반제품/원재료」를 담는 전용 요소가 없다. `MaterialDefinitionType` 을 전수로 보면
11
- * `ID` · `Version` · `Description*` · `PublishedDate` · `EffectiveStartDate`/`EndDate` · `HierarchyScope` ·
12
- * `SpatialDefinition` · `MaterialDefinitionProperty*` · `MaterialClassID*` · `MaterialLotSourceID*` ·
13
- * `TestSpecificationID*` · `AssemblyDefinition*` 뿐이다. 표준이 그 구분을 두는 자리는 **등급**이고,
14
- * 등급 표의 주석도 「원자재·완제품처럼 품목을 묶는 상위 개념」이라고 적고 있다.
15
- *
16
- * 그러니 새 축을 만들지 않는다. 이미 있는 상속을 걷는다.
17
- */
18
- /** 등급 이름 → 등급. 이름이 등급의 식별자다(표준 `MaterialClassID`). */
19
- export type ClassIndex = ReadonlyMap<string, ResourceClassFields>;
20
- /**
21
- * 한 등급에서 위로 걸어 **뿌리 등급**들을 낸다.
22
- *
23
- * 뿌리는 `baseIds` 가 없는 등급이다. 「완제품」·「반제품」·「원재료」처럼 더 위가 없는 것.
24
- *
25
- * 답이 여럿일 수 있다 — 한 등급이 두 갈래를 상속하면 뿌리가 둘이다. **하나로 줄이지 않는다.**
26
- * 줄이면 화면이 「완제품」이라고 단정하는데 실제로는 「완제품이면서 반제품」인 모순을 감춘다. 여럿이면
27
- * 여럿으로 내고, 그것을 본 사람이 등급을 고치게 한다.
28
- */
29
- export declare function rootClassesOf(className: string, index: ClassIndex): string[];
30
- /**
31
- * 한 등급에서 뿌리까지의 **경로**를 낸다 — 뿌리가 앞, 자기가 뒤.
32
- *
33
- * `['원재료', 'ECU 기구부품']` 처럼 읽는다. 화면이 이것을 그대로 보이면 「이 품목이 무엇인가」를
34
- * 사람이 한 번에 읽는다.
35
- *
36
- * 갈래가 여럿이면 **첫 갈래만** 낸다. 경로는 보여 주기 위한 것이고, 판정은 `rootClassesOf` 로 한다.
37
- * 여기서 여러 경로를 다 내면 화면 한 칸에 못 담는다.
38
- */
39
- export declare function classPathOf(className: string, index: ClassIndex): string[];
40
- /**
41
- * 품목 하나가 어느 뿌리 등급들에 드는가 — 등급이 여럿이니 뿌리도 여럿일 수 있다.
42
- *
43
- * **등급이 하나도 없으면 빈 배열이다.** 「원재료」로 넘겨짚지 않는다 — 등급을 안 붙인 품목과 원재료를
44
- * 섞으면, 붙이는 것을 잊었다는 사실이 화면에서 사라진다.
45
- */
46
- export declare function rootClassesOfMaterial(classNames: string[] | undefined, index: ClassIndex): string[];
@@ -1,80 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rootClassesOf = rootClassesOf;
4
- exports.classPathOf = classPathOf;
5
- exports.rootClassesOfMaterial = rootClassesOfMaterial;
6
- /**
7
- * 한 등급에서 위로 걸어 **뿌리 등급**들을 낸다.
8
- *
9
- * 뿌리는 `baseIds` 가 없는 등급이다. 「완제품」·「반제품」·「원재료」처럼 더 위가 없는 것.
10
- *
11
- * 답이 여럿일 수 있다 — 한 등급이 두 갈래를 상속하면 뿌리가 둘이다. **하나로 줄이지 않는다.**
12
- * 줄이면 화면이 「완제품」이라고 단정하는데 실제로는 「완제품이면서 반제품」인 모순을 감춘다. 여럿이면
13
- * 여럿으로 내고, 그것을 본 사람이 등급을 고치게 한다.
14
- */
15
- function rootClassesOf(className, index) {
16
- const roots = [];
17
- const seen = new Set();
18
- const walk = (name) => {
19
- /*
20
- * **고리를 밟으면 멈춘다.** 화면에서 `baseIds` 를 손으로 넣을 수 있으니 A→B→A 가 만들어질 수
21
- * 있다. 그때 이 함수가 안 돌아오면 목록 한 줄이 서버를 세운다.
22
- */
23
- if (seen.has(name)) {
24
- return;
25
- }
26
- seen.add(name);
27
- const klass = index.get(name);
28
- /*
29
- * **모르는 등급은 그 자체를 뿌리로 낸다.** 등급 표에 없는 이름이 `baseIds` 에 적혀 있을 수 있다
30
- * (지워졌거나 오타). 조용히 버리면 계보가 짧아진 채 그럴듯해 보인다 — 이름을 그대로 내서 이상한
31
- * 것이 화면에 보이게 한다.
32
- */
33
- if (!klass) {
34
- roots.push(name);
35
- return;
36
- }
37
- const bases = (klass.baseIds ?? []).filter(one => one);
38
- if (bases.length === 0) {
39
- roots.push(name);
40
- return;
41
- }
42
- for (const base of bases) {
43
- walk(base);
44
- }
45
- };
46
- walk(className);
47
- return [...new Set(roots)];
48
- }
49
- /**
50
- * 한 등급에서 뿌리까지의 **경로**를 낸다 — 뿌리가 앞, 자기가 뒤.
51
- *
52
- * `['원재료', 'ECU 기구부품']` 처럼 읽는다. 화면이 이것을 그대로 보이면 「이 품목이 무엇인가」를
53
- * 사람이 한 번에 읽는다.
54
- *
55
- * 갈래가 여럿이면 **첫 갈래만** 낸다. 경로는 보여 주기 위한 것이고, 판정은 `rootClassesOf` 로 한다.
56
- * 여기서 여러 경로를 다 내면 화면 한 칸에 못 담는다.
57
- */
58
- function classPathOf(className, index) {
59
- const path = [];
60
- const seen = new Set();
61
- let current = className;
62
- while (current && !seen.has(current)) {
63
- seen.add(current);
64
- path.unshift(current);
65
- const bases = (index.get(current)?.baseIds ?? []).filter(one => one);
66
- current = bases[0];
67
- }
68
- return path;
69
- }
70
- /**
71
- * 품목 하나가 어느 뿌리 등급들에 드는가 — 등급이 여럿이니 뿌리도 여럿일 수 있다.
72
- *
73
- * **등급이 하나도 없으면 빈 배열이다.** 「원재료」로 넘겨짚지 않는다 — 등급을 안 붙인 품목과 원재료를
74
- * 섞으면, 붙이는 것을 잊었다는 사실이 화면에서 사라진다.
75
- */
76
- function rootClassesOfMaterial(classNames, index) {
77
- const roots = (classNames ?? []).flatMap(one => rootClassesOf(one, index));
78
- return [...new Set(roots)];
79
- }
80
- //# sourceMappingURL=class-lineage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"class-lineage.js","sourceRoot":"","sources":["../../../server/service/resource/class-lineage.ts"],"names":[],"mappings":";;AA+BA,sCAyCC;AAWD,kCAeC;AAQD,sDAIC;AAxFD;;;;;;;;GAQG;AACH,SAAgB,aAAa,CAAC,SAAiB,EAAE,KAAiB;IAChE,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAE9B,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE;QAC5B;;;WAGG;QACH,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,OAAM;QACR,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAEd,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAE7B;;;;WAIG;QACH,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAChB,OAAM;QACR,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;QAEtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAChB,OAAM;QACR,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,CAAA;QACZ,CAAC;IACH,CAAC,CAAA;IAED,IAAI,CAAC,SAAS,CAAC,CAAA;IAEf,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;AAC5B,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,WAAW,CAAC,SAAiB,EAAE,KAAiB;IAC9D,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAE9B,IAAI,OAAO,GAAuB,SAAS,CAAA;IAE3C,OAAO,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACjB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAErB,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;QACpE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,UAAgC,EAAE,KAAiB;IACvF,MAAM,KAAK,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;IAE1E,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;AAC5B,CAAC","sourcesContent":["import type { ResourceClassFields } from './resource-class'\n\n/**\n * 등급 상속을 걷는다 — **`baseIds` 는 네 등급 표에 다 선언되어 있는데 아무도 걷지 않았다.**\n *\n * 표준 `MaterialClassBaseID` · `PersonnelClassBaseID` 는 등급이 등급을 상속한다고 말한다. 우리 표에도\n * 칸이 있고 화면에서 편집도 되고 트윈에도 나간다. 그런데 그 값을 **읽어서 무엇을 답하는 곳이 한 군데도\n * 없었다.** 그래서 「이 품목이 완제품인가」를 물으면 등급 이름 `MC-ECU-FG` 가 나왔다 — 사람은 읽지만\n * 화면은 못 읽는다.\n *\n * ISA-95 에는 「완제품/반제품/원재료」를 담는 전용 요소가 없다. `MaterialDefinitionType` 을 전수로 보면\n * `ID` · `Version` · `Description*` · `PublishedDate` · `EffectiveStartDate`/`EndDate` · `HierarchyScope` ·\n * `SpatialDefinition` · `MaterialDefinitionProperty*` · `MaterialClassID*` · `MaterialLotSourceID*` ·\n * `TestSpecificationID*` · `AssemblyDefinition*` 뿐이다. 표준이 그 구분을 두는 자리는 **등급**이고,\n * 등급 표의 주석도 「원자재·완제품처럼 품목을 묶는 상위 개념」이라고 적고 있다.\n *\n * 그러니 새 축을 만들지 않는다. 이미 있는 상속을 걷는다.\n */\n\n/** 등급 이름 → 등급. 이름이 등급의 식별자다(표준 `MaterialClassID`). */\nexport type ClassIndex = ReadonlyMap<string, ResourceClassFields>\n\n/**\n * 한 등급에서 위로 걸어 **뿌리 등급**들을 낸다.\n *\n * 뿌리는 `baseIds` 가 없는 등급이다. 「완제품」·「반제품」·「원재료」처럼 더 위가 없는 것.\n *\n * 답이 여럿일 수 있다 — 한 등급이 두 갈래를 상속하면 뿌리가 둘이다. **하나로 줄이지 않는다.**\n * 줄이면 화면이 「완제품」이라고 단정하는데 실제로는 「완제품이면서 반제품」인 모순을 감춘다. 여럿이면\n * 여럿으로 내고, 그것을 본 사람이 등급을 고치게 한다.\n */\nexport function rootClassesOf(className: string, index: ClassIndex): string[] {\n const roots: string[] = []\n const seen = new Set<string>()\n\n const walk = (name: string) => {\n /*\n * **고리를 밟으면 멈춘다.** 화면에서 `baseIds` 를 손으로 넣을 수 있으니 A→B→A 가 만들어질 수\n * 있다. 그때 이 함수가 안 돌아오면 목록 한 줄이 서버를 세운다.\n */\n if (seen.has(name)) {\n return\n }\n seen.add(name)\n\n const klass = index.get(name)\n\n /*\n * **모르는 등급은 그 자체를 뿌리로 낸다.** 등급 표에 없는 이름이 `baseIds` 에 적혀 있을 수 있다\n * (지워졌거나 오타). 조용히 버리면 계보가 짧아진 채 그럴듯해 보인다 — 이름을 그대로 내서 이상한\n * 것이 화면에 보이게 한다.\n */\n if (!klass) {\n roots.push(name)\n return\n }\n\n const bases = (klass.baseIds ?? []).filter(one => one)\n\n if (bases.length === 0) {\n roots.push(name)\n return\n }\n\n for (const base of bases) {\n walk(base)\n }\n }\n\n walk(className)\n\n return [...new Set(roots)]\n}\n\n/**\n * 한 등급에서 뿌리까지의 **경로**를 낸다 — 뿌리가 앞, 자기가 뒤.\n *\n * `['원재료', 'ECU 기구부품']` 처럼 읽는다. 화면이 이것을 그대로 보이면 「이 품목이 무엇인가」를\n * 사람이 한 번에 읽는다.\n *\n * 갈래가 여럿이면 **첫 갈래만** 낸다. 경로는 보여 주기 위한 것이고, 판정은 `rootClassesOf` 로 한다.\n * 여기서 여러 경로를 다 내면 화면 한 칸에 못 담는다.\n */\nexport function classPathOf(className: string, index: ClassIndex): string[] {\n const path: string[] = []\n const seen = new Set<string>()\n\n let current: string | undefined = className\n\n while (current && !seen.has(current)) {\n seen.add(current)\n path.unshift(current)\n\n const bases = (index.get(current)?.baseIds ?? []).filter(one => one)\n current = bases[0]\n }\n\n return path\n}\n\n/**\n * 품목 하나가 어느 뿌리 등급들에 드는가 — 등급이 여럿이니 뿌리도 여럿일 수 있다.\n *\n * **등급이 하나도 없으면 빈 배열이다.** 「원재료」로 넘겨짚지 않는다 — 등급을 안 붙인 품목과 원재료를\n * 섞으면, 붙이는 것을 잊었다는 사실이 화면에서 사라진다.\n */\nexport function rootClassesOfMaterial(classNames: string[] | undefined, index: ClassIndex): string[] {\n const roots = (classNames ?? []).flatMap(one => rootClassesOf(one, index))\n\n return [...new Set(roots)]\n}\n"]}
@@ -1,36 +0,0 @@
1
- import { Domain } from '@things-factory/shell';
2
- /**
3
- * **이 등급에 무엇이 드나** — 등급 넷이 나눠 쓰는 한 벌.
4
- *
5
- * ── 왜 필요한가 ────────────────────────────────────────────────────────────
6
- * 등급을 만들어 놓고 거기 아무도 안 들어 있는 일이 실제로 있었다. 그러면 「자격이 맞는 사람만 그
7
- * 공정에 선다」는 규칙이 한 번도 걸린 적이 없다는 뜻인데, 화면에는 등급 이름만 있어서 그 사실이
8
- * 안 보였다.
9
- *
10
- * 등급을 없앨 때도 마찬가지다. 무엇이 딸려 자격을 잃는지 알 수 없었다.
11
- *
12
- * ── 넷이 구조가 같다 ───────────────────────────────────────────────────────
13
- * 표준이 `PersonnelClass` · `EquipmentClass` · `PhysicalAssetClass` · `MaterialClass` 를 따로
14
- * 정의하지만 「소속을 배열로 든다」는 모양은 같다. 그래서 세는 함수도 하나다 — 넷으로 나누면
15
- * 한쪽만 고쳐지는 날이 온다.
16
- *
17
- * ── 배열 칸이라 훑는다 ─────────────────────────────────────────────────────
18
- * `personnelClassIds` 는 `simple-json` 이다. 데이터베이스가 그 안을 못 보므로 `IN` 으로 못 좁힌다.
19
- *
20
- * **그래서 상한이 있고, 상한에 걸리면 말한다.** 조용히 자르면 「이 등급에 아무도 없다」와 「너무
21
- * 많아 다 못 봤다」가 같아 보인다. 앞엣것은 고쳐야 할 선언이고 뒤엣것은 멀쩡한 등급이다.
22
- */
23
- /** 한 번에 훑을 소속 행 수. 품목의 제조법 훑기와 같은 값을 쓴다. */
24
- export declare const MEMBER_SCAN_LIMIT = 2000;
25
- export interface ClassMembers {
26
- /** 등급 이름 → 그 등급에 든 것들의 이름. */
27
- members: Map<string, string[]>;
28
- /** 상한에 걸려 다 보지 못했나. */
29
- capped: boolean;
30
- }
31
- /**
32
- * 소속 표를 훑어 등급별로 뒤집는다.
33
- *
34
- * `Entity` 는 소속을 가진 쪽(사람 · 설비 · 자산 · 품목)이고, `field` 는 그 소속을 담은 칸 이름이다.
35
- */
36
- export declare function scanClassMembers(Entity: any, field: string, domain: Domain): Promise<ClassMembers>;
@@ -1,59 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MEMBER_SCAN_LIMIT = void 0;
4
- exports.scanClassMembers = scanClassMembers;
5
- const shell_1 = require("@things-factory/shell");
6
- const referrers_1 = require("./referrers");
7
- const material_definition_1 = require("../material/material-definition");
8
- const material_effective_list_1 = require("../material/material-effective-list");
9
- /**
10
- * **이 등급에 무엇이 드나** — 등급 넷이 나눠 쓰는 한 벌.
11
- *
12
- * ── 왜 필요한가 ────────────────────────────────────────────────────────────
13
- * 등급을 만들어 놓고 거기 아무도 안 들어 있는 일이 실제로 있었다. 그러면 「자격이 맞는 사람만 그
14
- * 공정에 선다」는 규칙이 한 번도 걸린 적이 없다는 뜻인데, 화면에는 등급 이름만 있어서 그 사실이
15
- * 안 보였다.
16
- *
17
- * 등급을 없앨 때도 마찬가지다. 무엇이 딸려 자격을 잃는지 알 수 없었다.
18
- *
19
- * ── 넷이 구조가 같다 ───────────────────────────────────────────────────────
20
- * 표준이 `PersonnelClass` · `EquipmentClass` · `PhysicalAssetClass` · `MaterialClass` 를 따로
21
- * 정의하지만 「소속을 배열로 든다」는 모양은 같다. 그래서 세는 함수도 하나다 — 넷으로 나누면
22
- * 한쪽만 고쳐지는 날이 온다.
23
- *
24
- * ── 배열 칸이라 훑는다 ─────────────────────────────────────────────────────
25
- * `personnelClassIds` 는 `simple-json` 이다. 데이터베이스가 그 안을 못 보므로 `IN` 으로 못 좁힌다.
26
- *
27
- * **그래서 상한이 있고, 상한에 걸리면 말한다.** 조용히 자르면 「이 등급에 아무도 없다」와 「너무
28
- * 많아 다 못 봤다」가 같아 보인다. 앞엣것은 고쳐야 할 선언이고 뒤엣것은 멀쩡한 등급이다.
29
- */
30
- /** 한 번에 훑을 소속 행 수. 품목의 제조법 훑기와 같은 값을 쓴다. */
31
- exports.MEMBER_SCAN_LIMIT = 2000;
32
- /**
33
- * 소속 표를 훑어 등급별로 뒤집는다.
34
- *
35
- * `Entity` 는 소속을 가진 쪽(사람 · 설비 · 자산 · 품목)이고, `field` 는 그 소속을 담은 칸 이름이다.
36
- */
37
- async function scanClassMembers(Entity, field, domain) {
38
- const repo = (0, shell_1.getRepository)(Entity);
39
- if (Entity === material_definition_1.MaterialDefinition) {
40
- const { items, total } = await (0, material_effective_list_1.listEffectiveMaterialDefinitions)(repo.manager, domain, {
41
- filters: [{ name: 'revisionNumber', operator: 'is_not_null', value: true }],
42
- pagination: { page: 1, limit: exports.MEMBER_SCAN_LIMIT }
43
- });
44
- return { members: (0, referrers_1.indexMultiReferrers)(items, one => one.materialClassIds ?? [], one => one.name), capped: total > items.length };
45
- }
46
- const total = await repo.count({ where: { domain: { id: domain.id } } });
47
- /*
48
- * `id` 를 함께 뽑는다. 빼면 TypeORM 이 「no such column: distinctAlias.…_id」로 터진다 — `take` 를
49
- * 쓰면 중복 제거를 위해 기본 키로 한 번 더 감싸는데, 그 키를 안 뽑으면 감쌀 것이 없다.
50
- */
51
- const rows = await repo.find({
52
- where: { domain: { id: domain.id } },
53
- select: ['id', 'name', field],
54
- take: exports.MEMBER_SCAN_LIMIT
55
- });
56
- const members = (0, referrers_1.indexMultiReferrers)(rows, one => one[field] ?? [], one => one.name);
57
- return { members, capped: total > rows.length };
58
- }
59
- //# sourceMappingURL=class-members.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"class-members.js","sourceRoot":"","sources":["../../../server/service/resource/class-members.ts"],"names":[],"mappings":";;;AA2CA,4CA4BC;AAvED,iDAA6D;AAE7D,2CAAiD;AACjD,yEAAoE;AACpE,iFAAsF;AAEtF;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,4CAA4C;AAC/B,QAAA,iBAAiB,GAAG,IAAI,CAAA;AASrC;;;;GAIG;AACI,KAAK,UAAU,gBAAgB,CAAC,MAAW,EAAE,KAAa,EAAE,MAAc;IAC/E,MAAM,IAAI,GAAG,IAAA,qBAAa,EAAC,MAAM,CAAC,CAAA;IAClC,IAAI,MAAM,KAAK,wCAAkB,EAAE,CAAC;QAClC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,IAAA,0DAAgC,EAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;YACpF,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC3E,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,yBAAiB,EAAE;SAC3C,CAAC,CAAA;QACT,OAAO,EAAE,OAAO,EAAE,IAAA,+BAAmB,EAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAA;IAClI,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAS,EAAE,CAAC,CAAA;IAE/E;;;OAGG;IACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;QAC3B,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAS;QAC3C,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAQ;QACpC,IAAI,EAAE,yBAAiB;KACxB,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,IAAA,+BAAmB,EACjC,IAAa,EACb,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EACvB,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAChB,CAAA;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,GAAI,IAAc,CAAC,MAAM,EAAE,CAAA;AAC5D,CAAC","sourcesContent":["import { Domain, getRepository } from '@things-factory/shell'\n\nimport { indexMultiReferrers } from './referrers'\nimport { MaterialDefinition } from '../material/material-definition'\nimport { listEffectiveMaterialDefinitions } from '../material/material-effective-list'\n\n/**\n * **이 등급에 무엇이 드나** — 등급 넷이 나눠 쓰는 한 벌.\n *\n * ── 왜 필요한가 ────────────────────────────────────────────────────────────\n * 등급을 만들어 놓고 거기 아무도 안 들어 있는 일이 실제로 있었다. 그러면 「자격이 맞는 사람만 그\n * 공정에 선다」는 규칙이 한 번도 걸린 적이 없다는 뜻인데, 화면에는 등급 이름만 있어서 그 사실이\n * 안 보였다.\n *\n * 등급을 없앨 때도 마찬가지다. 무엇이 딸려 자격을 잃는지 알 수 없었다.\n *\n * ── 넷이 구조가 같다 ───────────────────────────────────────────────────────\n * 표준이 `PersonnelClass` · `EquipmentClass` · `PhysicalAssetClass` · `MaterialClass` 를 따로\n * 정의하지만 「소속을 배열로 든다」는 모양은 같다. 그래서 세는 함수도 하나다 — 넷으로 나누면\n * 한쪽만 고쳐지는 날이 온다.\n *\n * ── 배열 칸이라 훑는다 ─────────────────────────────────────────────────────\n * `personnelClassIds` 는 `simple-json` 이다. 데이터베이스가 그 안을 못 보므로 `IN` 으로 못 좁힌다.\n *\n * **그래서 상한이 있고, 상한에 걸리면 말한다.** 조용히 자르면 「이 등급에 아무도 없다」와 「너무\n * 많아 다 못 봤다」가 같아 보인다. 앞엣것은 고쳐야 할 선언이고 뒤엣것은 멀쩡한 등급이다.\n */\n\n/** 한 번에 훑을 소속 행 수. 품목의 제조법 훑기와 같은 값을 쓴다. */\nexport const MEMBER_SCAN_LIMIT = 2000\n\nexport interface ClassMembers {\n /** 등급 이름 → 그 등급에 든 것들의 이름. */\n members: Map<string, string[]>\n /** 상한에 걸려 다 보지 못했나. */\n capped: boolean\n}\n\n/**\n * 소속 표를 훑어 등급별로 뒤집는다.\n *\n * `Entity` 는 소속을 가진 쪽(사람 · 설비 · 자산 · 품목)이고, `field` 는 그 소속을 담은 칸 이름이다.\n */\nexport async function scanClassMembers(Entity: any, field: string, domain: Domain): Promise<ClassMembers> {\n const repo = getRepository(Entity)\n if (Entity === MaterialDefinition) {\n const { items, total } = await listEffectiveMaterialDefinitions(repo.manager, domain, {\n filters: [{ name: 'revisionNumber', operator: 'is_not_null', value: true }],\n pagination: { page: 1, limit: MEMBER_SCAN_LIMIT }\n } as any)\n return { members: indexMultiReferrers(items, one => one.materialClassIds ?? [], one => one.name), capped: total > items.length }\n }\n const total = await repo.count({ where: { domain: { id: domain.id } } as any })\n\n /*\n * `id` 를 함께 뽑는다. 빼면 TypeORM 이 「no such column: distinctAlias.…_id」로 터진다 — `take` 를\n * 쓰면 중복 제거를 위해 기본 키로 한 번 더 감싸는데, 그 키를 안 뽑으면 감쌀 것이 없다.\n */\n const rows = await repo.find({\n where: { domain: { id: domain.id } } as any,\n select: ['id', 'name', field] as any,\n take: MEMBER_SCAN_LIMIT\n })\n\n const members = indexMultiReferrers(\n rows as any[],\n one => one[field] ?? [],\n one => one.name\n )\n\n return { members, capped: total > (rows as any[]).length }\n}\n"]}
@@ -1,54 +0,0 @@
1
- /**
2
- * **나를 가리키는 것들** — 들어오는 관계를 세는 공통 부분.
3
- *
4
- * ── 왜 필요한가 ────────────────────────────────────────────────────────────
5
- * 마스터의 관계는 전부 「남의 표 칸에 든 이름」 한 가지 모양이다. 커널이 이름으로 주소를 잡기
6
- * 때문이다. 그래서 나가는 쪽은 그 칸을 그대로 보이면 되는데, **들어오는 쪽은 아무도 안 세었다.**
7
- *
8
- * 자리 하나를 열어도 「여기서 누가 일하나 · 무슨 설비가 있나」를 알 수 없었다. 사람 화면을 열어
9
- * 근무 자리로 거르는 수밖에 없었고, 설비는 또 설비 화면에서 같은 일을 해야 했다.
10
- *
11
- * ── 줄마다 세지 않는다 ─────────────────────────────────────────────────────
12
- * 필드 리졸버는 줄마다 불린다. 거기서 그때그때 세면 `limit 20` 에 질의 20회다 — N+1 이다.
13
- * 그래서 **페이지의 이름들을 한 번에** 묻고 그 답을 요청 안에 담는다. 담는 것은 결과가 아니라
14
- * **약속**이다 — 줄들이 거의 동시에 묻기 때문에, 결과를 담으면 스무 개가 각자 질의를 띄운다.
15
- *
16
- * `childCount` 가 같은 방식을 쓴다(`location-master-resolver.ts`). 여기서는 그 방식을 축 여럿이
17
- * 나눠 쓸 수 있게 뽑아 두었다.
18
- */
19
- /** 한 줄이 무엇을 가리키나 — 가리키는 이름과, 그 줄 자신의 이름. */
20
- export interface Referrer {
21
- /** 이 줄이 가리키는 대상의 이름. 비었으면 아무도 안 가리킨다. */
22
- points?: string | null;
23
- /** 이 줄의 이름. 사람이 목록에서 알아보는 값이다. */
24
- name?: string | null;
25
- }
26
- /**
27
- * 대상 이름 → 그것을 가리키는 줄들의 이름.
28
- *
29
- * **빈 값은 버린다.** 가리키는 곳이 없는 줄과 이름 없는 줄은 관계가 아니다. 그것을 빈 문자열
30
- * 키로 모으면 「아무 데도 안 놓인 것들」이 한 자리에 뭉쳐 그럴듯한 관계처럼 보인다.
31
- */
32
- export declare function indexReferrers(rows: Referrer[]): Map<string, string[]>;
33
- /**
34
- * 화면에 보일 만큼만 자르고 **몇이 남았는지 함께 낸다.**
35
- *
36
- * 조용히 자르면 「여기 셋이 있다」와 「여기 서른이 있는데 셋만 보인다」가 같아 보인다. 자른 수를
37
- * 말하지 않으면 그 칸을 보고 사람이 판단을 내린다.
38
- */
39
- export declare function cappedList(names: string[] | undefined, limit: number): {
40
- shown: string[];
41
- hidden: number;
42
- };
43
- /**
44
- * **배열 칸을 가리키는 것들.**
45
- *
46
- * `steps` 나 `materialClassIds` 처럼 한 줄이 여럿을 가리키는 칸이 있다. 이런 칸은 `IN` 으로 못
47
- * 좁힌다 — 저장이 `simple-json` 이라 데이터베이스가 그 안을 못 본다. 그래서 표를 훑어 여기서
48
- * 뒤집는다.
49
- *
50
- * **훑는 데는 반드시 상한이 있어야 하고, 상한에 걸렸으면 말해야 한다.** 조용히 자르면 「이 공정을
51
- * 아무도 안 쓴다」와 「너무 많아 다 못 봤다」가 같아 보인다. 앞엣것은 지워도 되는 공정이고
52
- * 뒤엣것은 지우면 라인이 선다.
53
- */
54
- export declare function indexMultiReferrers<T>(rows: T[], pointsOf: (row: T) => (string | null | undefined)[], nameOf: (row: T) => string | null | undefined): Map<string, string[]>;
@@ -1,99 +0,0 @@
1
- "use strict";
2
- /**
3
- * **나를 가리키는 것들** — 들어오는 관계를 세는 공통 부분.
4
- *
5
- * ── 왜 필요한가 ────────────────────────────────────────────────────────────
6
- * 마스터의 관계는 전부 「남의 표 칸에 든 이름」 한 가지 모양이다. 커널이 이름으로 주소를 잡기
7
- * 때문이다. 그래서 나가는 쪽은 그 칸을 그대로 보이면 되는데, **들어오는 쪽은 아무도 안 세었다.**
8
- *
9
- * 자리 하나를 열어도 「여기서 누가 일하나 · 무슨 설비가 있나」를 알 수 없었다. 사람 화면을 열어
10
- * 근무 자리로 거르는 수밖에 없었고, 설비는 또 설비 화면에서 같은 일을 해야 했다.
11
- *
12
- * ── 줄마다 세지 않는다 ─────────────────────────────────────────────────────
13
- * 필드 리졸버는 줄마다 불린다. 거기서 그때그때 세면 `limit 20` 에 질의 20회다 — N+1 이다.
14
- * 그래서 **페이지의 이름들을 한 번에** 묻고 그 답을 요청 안에 담는다. 담는 것은 결과가 아니라
15
- * **약속**이다 — 줄들이 거의 동시에 묻기 때문에, 결과를 담으면 스무 개가 각자 질의를 띄운다.
16
- *
17
- * `childCount` 가 같은 방식을 쓴다(`location-master-resolver.ts`). 여기서는 그 방식을 축 여럿이
18
- * 나눠 쓸 수 있게 뽑아 두었다.
19
- */
20
- Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.indexReferrers = indexReferrers;
22
- exports.cappedList = cappedList;
23
- exports.indexMultiReferrers = indexMultiReferrers;
24
- /**
25
- * 대상 이름 → 그것을 가리키는 줄들의 이름.
26
- *
27
- * **빈 값은 버린다.** 가리키는 곳이 없는 줄과 이름 없는 줄은 관계가 아니다. 그것을 빈 문자열
28
- * 키로 모으면 「아무 데도 안 놓인 것들」이 한 자리에 뭉쳐 그럴듯한 관계처럼 보인다.
29
- */
30
- function indexReferrers(rows) {
31
- const index = new Map();
32
- for (const row of rows) {
33
- const target = (row.points ?? '').trim();
34
- const who = (row.name ?? '').trim();
35
- if (!target || !who) {
36
- continue;
37
- }
38
- const list = index.get(target) ?? [];
39
- /*
40
- * 같은 줄이 두 번 들어오면 한 번만 센다. 한 줄이 같은 대상을 두 칸에서 가리키는 축이 생길 수
41
- * 있고(자리와 예비 자리처럼), 그때 개수가 부풀면 화면이 「둘이 있다」고 말한다.
42
- */
43
- if (!list.includes(who)) {
44
- list.push(who);
45
- }
46
- index.set(target, list);
47
- }
48
- /* 목록의 순서를 정한다 — 같은 자료에 같은 화면이 나와야 한다. */
49
- for (const list of index.values()) {
50
- list.sort();
51
- }
52
- return index;
53
- }
54
- /**
55
- * 화면에 보일 만큼만 자르고 **몇이 남았는지 함께 낸다.**
56
- *
57
- * 조용히 자르면 「여기 셋이 있다」와 「여기 서른이 있는데 셋만 보인다」가 같아 보인다. 자른 수를
58
- * 말하지 않으면 그 칸을 보고 사람이 판단을 내린다.
59
- */
60
- function cappedList(names, limit) {
61
- const all = names ?? [];
62
- return { shown: all.slice(0, limit), hidden: Math.max(0, all.length - limit) };
63
- }
64
- /**
65
- * **배열 칸을 가리키는 것들.**
66
- *
67
- * `steps` 나 `materialClassIds` 처럼 한 줄이 여럿을 가리키는 칸이 있다. 이런 칸은 `IN` 으로 못
68
- * 좁힌다 — 저장이 `simple-json` 이라 데이터베이스가 그 안을 못 본다. 그래서 표를 훑어 여기서
69
- * 뒤집는다.
70
- *
71
- * **훑는 데는 반드시 상한이 있어야 하고, 상한에 걸렸으면 말해야 한다.** 조용히 자르면 「이 공정을
72
- * 아무도 안 쓴다」와 「너무 많아 다 못 봤다」가 같아 보인다. 앞엣것은 지워도 되는 공정이고
73
- * 뒤엣것은 지우면 라인이 선다.
74
- */
75
- function indexMultiReferrers(rows, pointsOf, nameOf) {
76
- const index = new Map();
77
- for (const row of rows) {
78
- const who = (nameOf(row) ?? '').trim();
79
- if (!who) {
80
- continue;
81
- }
82
- for (const raw of pointsOf(row) ?? []) {
83
- const target = (raw ?? '').trim();
84
- if (!target) {
85
- continue;
86
- }
87
- const list = index.get(target) ?? [];
88
- if (!list.includes(who)) {
89
- list.push(who);
90
- }
91
- index.set(target, list);
92
- }
93
- }
94
- for (const list of index.values()) {
95
- list.sort();
96
- }
97
- return index;
98
- }
99
- //# sourceMappingURL=referrers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"referrers.js","sourceRoot":"","sources":["../../../server/service/resource/referrers.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;AAgBH,wCA8BC;AAQD,gCAIC;AAaD,kDAoCC;AAjGD;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,IAAgB;IAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAA;IAEzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QACxC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QAEnC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;YACpB,SAAQ;QACV,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;QAEpC;;;WAGG;QACH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAChB,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,yCAAyC;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAA;IACb,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,KAA2B,EAAE,KAAa;IACnE,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE,CAAA;IAEvB,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAA;AAChF,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,mBAAmB,CACjC,IAAS,EACT,QAAmD,EACnD,MAA6C;IAE7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAA;IAEzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QAEtC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,SAAQ;QACV,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;YAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,SAAQ;YACV,CAAC;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;YAEpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAChB,CAAC;YAED,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAA;IACb,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC","sourcesContent":["/**\n * **나를 가리키는 것들** — 들어오는 관계를 세는 공통 부분.\n *\n * ── 왜 필요한가 ────────────────────────────────────────────────────────────\n * 마스터의 관계는 전부 「남의 표 칸에 든 이름」 한 가지 모양이다. 커널이 이름으로 주소를 잡기\n * 때문이다. 그래서 나가는 쪽은 그 칸을 그대로 보이면 되는데, **들어오는 쪽은 아무도 안 세었다.**\n *\n * 자리 하나를 열어도 「여기서 누가 일하나 · 무슨 설비가 있나」를 알 수 없었다. 사람 화면을 열어\n * 근무 자리로 거르는 수밖에 없었고, 설비는 또 설비 화면에서 같은 일을 해야 했다.\n *\n * ── 줄마다 세지 않는다 ─────────────────────────────────────────────────────\n * 필드 리졸버는 줄마다 불린다. 거기서 그때그때 세면 `limit 20` 에 질의 20회다 — N+1 이다.\n * 그래서 **페이지의 이름들을 한 번에** 묻고 그 답을 요청 안에 담는다. 담는 것은 결과가 아니라\n * **약속**이다 — 줄들이 거의 동시에 묻기 때문에, 결과를 담으면 스무 개가 각자 질의를 띄운다.\n *\n * `childCount` 가 같은 방식을 쓴다(`location-master-resolver.ts`). 여기서는 그 방식을 축 여럿이\n * 나눠 쓸 수 있게 뽑아 두었다.\n */\n\n/** 한 줄이 무엇을 가리키나 — 가리키는 이름과, 그 줄 자신의 이름. */\nexport interface Referrer {\n /** 이 줄이 가리키는 대상의 이름. 비었으면 아무도 안 가리킨다. */\n points?: string | null\n /** 이 줄의 이름. 사람이 목록에서 알아보는 값이다. */\n name?: string | null\n}\n\n/**\n * 대상 이름 → 그것을 가리키는 줄들의 이름.\n *\n * **빈 값은 버린다.** 가리키는 곳이 없는 줄과 이름 없는 줄은 관계가 아니다. 그것을 빈 문자열\n * 키로 모으면 「아무 데도 안 놓인 것들」이 한 자리에 뭉쳐 그럴듯한 관계처럼 보인다.\n */\nexport function indexReferrers(rows: Referrer[]): Map<string, string[]> {\n const index = new Map<string, string[]>()\n\n for (const row of rows) {\n const target = (row.points ?? '').trim()\n const who = (row.name ?? '').trim()\n\n if (!target || !who) {\n continue\n }\n\n const list = index.get(target) ?? []\n\n /*\n * 같은 줄이 두 번 들어오면 한 번만 센다. 한 줄이 같은 대상을 두 칸에서 가리키는 축이 생길 수\n * 있고(자리와 예비 자리처럼), 그때 개수가 부풀면 화면이 「둘이 있다」고 말한다.\n */\n if (!list.includes(who)) {\n list.push(who)\n }\n\n index.set(target, list)\n }\n\n /* 목록의 순서를 정한다 — 같은 자료에 같은 화면이 나와야 한다. */\n for (const list of index.values()) {\n list.sort()\n }\n\n return index\n}\n\n/**\n * 화면에 보일 만큼만 자르고 **몇이 남았는지 함께 낸다.**\n *\n * 조용히 자르면 「여기 셋이 있다」와 「여기 서른이 있는데 셋만 보인다」가 같아 보인다. 자른 수를\n * 말하지 않으면 그 칸을 보고 사람이 판단을 내린다.\n */\nexport function cappedList(names: string[] | undefined, limit: number): { shown: string[]; hidden: number } {\n const all = names ?? []\n\n return { shown: all.slice(0, limit), hidden: Math.max(0, all.length - limit) }\n}\n\n/**\n * **배열 칸을 가리키는 것들.**\n *\n * `steps` 나 `materialClassIds` 처럼 한 줄이 여럿을 가리키는 칸이 있다. 이런 칸은 `IN` 으로 못\n * 좁힌다 — 저장이 `simple-json` 이라 데이터베이스가 그 안을 못 본다. 그래서 표를 훑어 여기서\n * 뒤집는다.\n *\n * **훑는 데는 반드시 상한이 있어야 하고, 상한에 걸렸으면 말해야 한다.** 조용히 자르면 「이 공정을\n * 아무도 안 쓴다」와 「너무 많아 다 못 봤다」가 같아 보인다. 앞엣것은 지워도 되는 공정이고\n * 뒤엣것은 지우면 라인이 선다.\n */\nexport function indexMultiReferrers<T>(\n rows: T[],\n pointsOf: (row: T) => (string | null | undefined)[],\n nameOf: (row: T) => string | null | undefined\n): Map<string, string[]> {\n const index = new Map<string, string[]>()\n\n for (const row of rows) {\n const who = (nameOf(row) ?? '').trim()\n\n if (!who) {\n continue\n }\n\n for (const raw of pointsOf(row) ?? []) {\n const target = (raw ?? '').trim()\n\n if (!target) {\n continue\n }\n\n const list = index.get(target) ?? []\n\n if (!list.includes(who)) {\n list.push(who)\n }\n\n index.set(target, list)\n }\n }\n\n for (const list of index.values()) {\n list.sort()\n }\n\n return index\n}\n"]}
@@ -1,25 +0,0 @@
1
- import type { ResourceClassDef } from '@operato/ops-contract';
2
- /**
3
- * 등급을 트윈이 받는 모양으로 옮긴다 — **자원 셋이 같은 함수를 쓴다.**
4
- *
5
- * ISA-95 는 `PersonnelClass` · `EquipmentClass` · `PhysicalAssetClass` 를 따로 정의하지만 구조는 같다.
6
- * 계약 층도 그것을 `ResourceClassDef` 하나로 갖는다. 그래서 옮기는 함수도 하나다 — 셋으로 나누면 한쪽만
7
- * 고쳐지는 날이 온다.
8
- *
9
- * 표(엔티티)는 셋으로 나눈다. 등급은 자원 하나에만 속하고, 한 표에 담으면 인원 등급을 설비에 붙이는
10
- * 일을 막을 방법이 없다.
11
- */
12
- /** 등급 엔티티가 공통으로 갖는 칸. 세 표가 같은 모양이다. */
13
- export interface ResourceClassFields {
14
- name: string;
15
- description?: string;
16
- baseIds?: string[];
17
- testSpecificationIds?: string[];
18
- properties?: Record<string, unknown>[];
19
- effectiveStart?: Date;
20
- effectiveEnd?: Date;
21
- }
22
- /** 빈 값은 칸을 만들지 않는다 — 빈 칸은 「비어 있다」와 「그런 것이 없다」를 섞는다. */
23
- export declare function put<T>(target: Record<string, unknown>, key: string, value: T | undefined | null): void;
24
- export declare function iso(at: Date | undefined): string | undefined;
25
- export declare function toResourceClassDef(klass: ResourceClassFields): ResourceClassDef;
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.put = put;
4
- exports.iso = iso;
5
- exports.toResourceClassDef = toResourceClassDef;
6
- /** 빈 값은 칸을 만들지 않는다 — 빈 칸은 「비어 있다」와 「그런 것이 없다」를 섞는다. */
7
- function put(target, key, value) {
8
- if (value === undefined || value === null) {
9
- return;
10
- }
11
- if (Array.isArray(value) && value.length === 0) {
12
- return;
13
- }
14
- target[key] = value;
15
- }
16
- function iso(at) {
17
- return at ? new Date(at).toISOString() : undefined;
18
- }
19
- function toResourceClassDef(klass) {
20
- const out = { id: klass.name };
21
- put(out, 'description', klass.description);
22
- put(out, 'baseIds', klass.baseIds);
23
- put(out, 'testSpecificationIds', klass.testSpecificationIds);
24
- put(out, 'properties', klass.properties);
25
- put(out, 'effectiveStart', iso(klass.effectiveStart));
26
- put(out, 'effectiveEnd', iso(klass.effectiveEnd));
27
- return out;
28
- }
29
- //# sourceMappingURL=resource-class.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resource-class.js","sourceRoot":"","sources":["../../../server/service/resource/resource-class.ts"],"names":[],"mappings":";;AAyBA,kBAQC;AAED,kBAEC;AAED,gDAWC;AA1BD,uDAAuD;AACvD,SAAgB,GAAG,CAAI,MAA+B,EAAE,GAAW,EAAE,KAA2B;IAC9F,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAM;IACR,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAM;IACR,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AACrB,CAAC;AAED,SAAgB,GAAG,CAAC,EAAoB;IACtC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACpD,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAA0B;IAC3D,MAAM,GAAG,GAA4B,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;IAEvD,GAAG,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,CAAA;IAC1C,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAClC,GAAG,CAAC,GAAG,EAAE,sBAAsB,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAC5D,GAAG,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;IACxC,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAA;IACrD,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAA;IAEjD,OAAO,GAAkC,CAAA;AAC3C,CAAC","sourcesContent":["import type { ResourceClassDef } from '@operato/ops-contract'\n\n/**\n * 등급을 트윈이 받는 모양으로 옮긴다 — **자원 셋이 같은 함수를 쓴다.**\n *\n * ISA-95 는 `PersonnelClass` · `EquipmentClass` · `PhysicalAssetClass` 를 따로 정의하지만 구조는 같다.\n * 계약 층도 그것을 `ResourceClassDef` 하나로 갖는다. 그래서 옮기는 함수도 하나다 — 셋으로 나누면 한쪽만\n * 고쳐지는 날이 온다.\n *\n * 표(엔티티)는 셋으로 나눈다. 등급은 자원 하나에만 속하고, 한 표에 담으면 인원 등급을 설비에 붙이는\n * 일을 막을 방법이 없다.\n */\n\n/** 등급 엔티티가 공통으로 갖는 칸. 세 표가 같은 모양이다. */\nexport interface ResourceClassFields {\n name: string\n description?: string\n baseIds?: string[]\n testSpecificationIds?: string[]\n properties?: Record<string, unknown>[]\n effectiveStart?: Date\n effectiveEnd?: Date\n}\n\n/** 빈 값은 칸을 만들지 않는다 — 빈 칸은 「비어 있다」와 「그런 것이 없다」를 섞는다. */\nexport function put<T>(target: Record<string, unknown>, key: string, value: T | undefined | null): void {\n if (value === undefined || value === null) {\n return\n }\n if (Array.isArray(value) && value.length === 0) {\n return\n }\n target[key] = value\n}\n\nexport function iso(at: Date | undefined): string | undefined {\n return at ? new Date(at).toISOString() : undefined\n}\n\nexport function toResourceClassDef(klass: ResourceClassFields): ResourceClassDef {\n const out: Record<string, unknown> = { id: klass.name }\n\n put(out, 'description', klass.description)\n put(out, 'baseIds', klass.baseIds)\n put(out, 'testSpecificationIds', klass.testSpecificationIds)\n put(out, 'properties', klass.properties)\n put(out, 'effectiveStart', iso(klass.effectiveStart))\n put(out, 'effectiveEnd', iso(klass.effectiveEnd))\n\n return out as unknown as ResourceClassDef\n}\n"]}
@@ -1,71 +0,0 @@
1
- import { DataSource, EntityManager } from 'typeorm';
2
- import { Domain } from '@things-factory/shell';
3
- /**
4
- * **버전을 올린 설치본의 기준정보에 첫 개정본을 세운다** — 기준선(2026-09-24, 수석 아키텍트 판정).
5
- *
6
- * ── 왜 필요한가 ────────────────────────────────────────────────────────────
7
- * 개정 체계(10.1.35)는 새로 만드는 기준정보만 개정본으로 받았고, **그 전부터 있던 행을 들이는 길이
8
- * 없었다.** 그래서 버전을 올린 설치본은 레시피 · 품목 · 검사 명세의 개정본이 0 이고, 새 지시가 레시피를
9
- * 못 고르고 품목 근거를 못 찍어 **새 생산이 한 건도 안 섰다.**
10
- *
11
- * ── 왜 결재 없이, 왜 기동 때인가 ───────────────────────────────────────────
12
- * 첫 개정본이 단정하는 것은 「지금 이 값으로 돌고 있다」뿐이고, 시스템이 이미 그렇게 돌고 있다. 누를
13
- * 사람이 판단할 것이 없다. 그리고 **유효 시작이 이를수록 「모른다」 구간이 좁다** — 처음 쓰일 때 세우면
14
- * 버전 올린 뒤부터 첫 사용까지가 모르는 구간이 된다. 규제 축도 같다 — 통제하는 것은 **바꾸는 일**이고
15
- * 기준선은 아무것도 안 바꾼다. 대신 자기 성격을 이름으로 댄다(발행 종류 `baseline`, 결재자 없음).
16
- *
17
- * ── 지키는 것 ──────────────────────────────────────────────────────────────
18
- * - 개정본이 0 인 루트만. 찾는 것은 축마다 질의 하나다.
19
- * - 두 번 돌아도, 서버 둘이 동시에 떠도 하나만 선다 — 개정 번호 유니크와 루트의 세대 조건부 갱신이 막는다.
20
- * - **도메인 × 축마다 트랜잭션 하나.** 하나가 실패해도 나머지는 선다. 실패한 도메인과 축을 크게 말한다.
21
- * - 세운 시각은 서버가 정한다 — 도메인마다 한 순간.
22
- * - 읽는 길에서 쓰지 않는다. 이 자리 하나만 세운다.
23
- */
24
- export type BaselineAxis = 'testSpecification' | 'materialDefinition' | 'recipeDefinition';
25
- type Stand = (manager: EntityManager, domainId: string, at: Date, edition: string) => Promise<{
26
- stood: number;
27
- unreadable: {
28
- name: string;
29
- problem: string;
30
- }[];
31
- }>;
32
- /** 차례가 있다 — 품목이 검사 명세를, 제조법이 품목을 이름으로 가리킨다(이름은 기준선과 무관하게 있다). */
33
- export declare const BASELINE_AXES: readonly {
34
- axis: BaselineAxis;
35
- stand: Stand;
36
- }[];
37
- export interface BaselineReport {
38
- domain: string;
39
- axis: BaselineAxis;
40
- stood: number;
41
- unreadable: {
42
- name: string;
43
- problem: string;
44
- }[];
45
- /** 이 축의 트랜잭션이 통째로 실패했다 — 그 도메인의 그 축은 아무것도 안 섰다. */
46
- failed?: string;
47
- }
48
- /** 이 버전의 이름 — 기준선의 사유에 남는다. */
49
- export declare function baselineEdition(): string;
50
- /**
51
- * 기준선이 실패한 까닭을 **사람이 읽을 수 있게** — 코드만이 아니라 본문을 싣는다.
52
- *
53
- * 앞서는 `error.code` 가 있으면 그것만 적었다. SQLite 의 실패는 코드가 늘 `SQLITE_ERROR` 라 기동 로그에
54
- * 「MIRATEK · SYSTEM: SQLITE_ERROR」만 남았고, 무엇이 실패했는지(「transaction within a transaction」)는 어디에도
55
- * 없었다(2026-09-24). 교대 기준선도 이 함수로 적는다.
56
- */
57
- export declare function baselineFailureText(error: any): string;
58
- export declare function standMasterBaselines(dataSource: DataSource, options?: {
59
- edition?: string;
60
- domains?: Domain[];
61
- axes?: readonly {
62
- axis: BaselineAxis;
63
- stand: Stand;
64
- }[];
65
- }): Promise<BaselineReport[]>;
66
- /**
67
- * 기동 때 부른다. **서버를 반쯤 뜬 채로 두지 않는다** — 여기서 무엇이 실패해도 던지지 않고 말한다.
68
- * 한 도메인의 실패는 그 도메인만의 것이다.
69
- */
70
- export declare function standMasterBaselinesAtBoot(dataSource: DataSource): Promise<BaselineReport[]>;
71
- export {};