@microsoft/windows-admin-center-sdk 4.123.0 → 4.232.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (581) hide show
  1. package/angular/assets/strings/cs-CZ/strings.json +1 -1
  2. package/angular/assets/strings/de-DE/strings.json +1 -1
  3. package/angular/assets/strings/es-ES/strings.json +1 -1
  4. package/angular/assets/strings/fr-FR/strings.json +1 -1
  5. package/angular/assets/strings/hu-HU/strings.json +1 -1
  6. package/angular/assets/strings/id-ID/strings.json +1 -1
  7. package/angular/assets/strings/it-IT/strings.json +1 -1
  8. package/angular/assets/strings/ja-JP/strings.json +1 -1
  9. package/angular/assets/strings/ko-KR/strings.json +1 -1
  10. package/angular/assets/strings/nl-NL/strings.json +1 -1
  11. package/angular/assets/strings/pl-PL/strings.json +1 -1
  12. package/angular/assets/strings/pt-BR/strings.json +1 -1
  13. package/angular/assets/strings/pt-PT/strings.json +1 -1
  14. package/angular/assets/strings/ru-RU/strings.json +1 -1
  15. package/angular/assets/strings/strings.json +1 -1
  16. package/angular/assets/strings/sv-SE/strings.json +1 -1
  17. package/angular/assets/strings/tr-TR/strings.json +1 -1
  18. package/angular/assets/strings/zh-CN/strings.json +1 -1
  19. package/angular/assets/strings/zh-TW/strings.json +1 -1
  20. package/angular/esm2020/src/controls/accordion/accordion-panel/accordion-panel.component.mjs +36 -12
  21. package/angular/esm2020/src/controls/actions/containers/action-container.component.mjs +2 -3
  22. package/angular/esm2020/src/controls/alert-bar/alert-bar.component.mjs +2 -2
  23. package/angular/esm2020/src/controls/breadcrumb-header/breadcrumb-header.component.mjs +1 -1
  24. package/angular/esm2020/src/controls/common/base.component.mjs +1 -1
  25. package/angular/esm2020/src/controls/common/spacer-base.component.mjs +25 -1
  26. package/angular/esm2020/src/controls/context-menu/context-menu.component.mjs +2 -3
  27. package/angular/esm2020/src/controls/data-table/data-table.component.mjs +7 -7
  28. package/angular/esm2020/src/controls/dialog/base-dialog.component.mjs +2 -4
  29. package/angular/esm2020/src/controls/dialog/confirmation-list-dialog/confirmation-list-dialog.component.mjs +2 -2
  30. package/angular/esm2020/src/controls/dropdown/dropdown.component.mjs +1 -4
  31. package/angular/esm2020/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.mjs +59 -0
  32. package/angular/esm2020/src/controls/form/form-field/array/array-form-field.component.mjs +24 -35
  33. package/angular/esm2020/src/controls/form/form-field/clock/clock-form-field.component.mjs +10 -7
  34. package/angular/esm2020/src/controls/form/form-field/form-field-accessibility-manager-base.service.mjs +105 -0
  35. package/angular/esm2020/src/controls/form/form-field/form-field.component.mjs +1 -1
  36. package/angular/esm2020/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.mjs +38 -0
  37. package/angular/esm2020/src/controls/form/form-field/list/list-form-field.component.mjs +56 -38
  38. package/angular/esm2020/src/controls/form/form-field/number/number-form-field.component.mjs +22 -4
  39. package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.mjs +54 -0
  40. package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.mjs +67 -67
  41. package/angular/esm2020/src/controls/form/form-field/radio-group/classic/radio-group-form-field.component.mjs +5 -5
  42. package/angular/esm2020/src/controls/form/forms.module.mjs +19 -2
  43. package/angular/esm2020/src/controls/icon/icon-text/icon-text.component.mjs +6 -6
  44. package/angular/esm2020/src/controls/icon/layered-icon/status/status-icon.component.mjs +1 -1
  45. package/angular/esm2020/src/controls/layout/editable-layout.component.mjs +2 -3
  46. package/angular/esm2020/src/controls/node-credentials-form/node-credentials-form.component.mjs +2 -2
  47. package/angular/esm2020/src/controls/page-alert-bar/page-alert-bar.component.mjs +4 -4
  48. package/angular/esm2020/src/controls/property-grid/property-grid.component.mjs +33 -13
  49. package/angular/esm2020/src/controls/schema/tabbed-form-loader.component.mjs +2 -2
  50. package/angular/esm2020/src/controls/settings/common-settings/common-settings.component.mjs +5 -5
  51. package/angular/esm2020/src/controls/settings/settings-form.directive.mjs +3 -7
  52. package/angular/esm2020/src/controls/settings/settings-form.service.mjs +2 -4
  53. package/angular/esm2020/src/controls/snap-in-extension/snap-in-extension.component.mjs +1 -1
  54. package/angular/esm2020/src/controls/split-view/split-view.component.mjs +2 -2
  55. package/angular/esm2020/src/controls/wizard/models/wizard-step-snap-in-output.mjs +1 -1
  56. package/angular/esm2020/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.component.mjs +3 -3
  57. package/angular/esm2020/src/data/extension-broker/snap-in-listener.mjs +80 -0
  58. package/angular/esm2020/src/data/index.mjs +2 -1
  59. package/angular/esm2020/src/directives/router/router-link.directive.mjs +2 -2
  60. package/angular/esm2020/src/directives/svg/svg.directive.mjs +2 -3
  61. package/angular/esm2020/src/generated/strings.mjs +1 -1
  62. package/angular/esm2020/src/service/navigation.service.mjs +3 -8
  63. package/angular/esm2020/src/service/user-alive.service.mjs +2 -4
  64. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs +665 -239
  65. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  66. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs +636 -237
  67. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  68. package/angular/package.json +1 -1
  69. package/angular/src/controls/accordion/accordion-panel/accordion-panel.component.d.ts +13 -4
  70. package/angular/src/controls/common/spacer-base.component.d.ts +11 -2
  71. package/angular/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.d.ts +38 -0
  72. package/angular/src/controls/form/form-field/array/array-form-field.component.d.ts +3 -1
  73. package/angular/src/controls/form/form-field/form-field-accessibility-manager-base.service.d.ts +37 -0
  74. package/angular/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.d.ts +25 -0
  75. package/angular/src/controls/form/form-field/list/list-form-field.component.d.ts +12 -2
  76. package/angular/src/controls/form/form-field/number/number-form-field.component.d.ts +8 -0
  77. package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.d.ts +37 -0
  78. package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.d.ts +12 -8
  79. package/angular/src/controls/icon/icon-text/icon-text.component.d.ts +1 -1
  80. package/angular/src/controls/property-grid/property-grid.component.d.ts +2 -0
  81. package/angular/src/controls/wizard/models/wizard-step-snap-in-output.d.ts +1 -1
  82. package/{core → angular/src}/data/extension-broker/snap-in-listener.d.ts +49 -46
  83. package/angular/src/data/index.d.ts +1 -0
  84. package/angular/src/directives/svg/svg.directive.d.ts +1 -2
  85. package/angular/src/generated/strings.d.ts +12 -0
  86. package/core/async/cancellation.js +312 -0
  87. package/core/async/index.js +312 -0
  88. package/core/async/progress.js +312 -0
  89. package/core/azure/azure-constants.d.ts +2 -2
  90. package/core/azure/azure-constants.d.ts.map +1 -1
  91. package/core/azure/azure-constants.js +322 -3
  92. package/core/azure/azure-constants.js.map +1 -1
  93. package/core/azure/azure-logging.js +312 -0
  94. package/core/azure/azure-manager.js +312 -0
  95. package/core/azure/models/aadAppConfig-data.js +312 -0
  96. package/core/azure/models/azureArcStatusEnum.js +312 -0
  97. package/core/azure/models/azureTokenResult-data.js +312 -0
  98. package/core/azure/resources/deployment-operation-request-body.js +312 -0
  99. package/core/azure/resources/deployment-operation-response.js +312 -0
  100. package/core/azure/resources/location-data.js +315 -0
  101. package/core/azure/resources/resource-group-data.js +312 -0
  102. package/core/azure/resources/subscription-data.js +312 -0
  103. package/core/base/data-store/browser-storage-data-store.js +315 -0
  104. package/core/base/data-store/cached-data-store.js +312 -0
  105. package/core/base/data-store/data-store.js +312 -0
  106. package/core/base/data-store/local-data-store.js +312 -0
  107. package/core/base/data-store/memory-data-store.js +312 -0
  108. package/core/base/data-store/session-data-store.js +312 -0
  109. package/core/base/date/date-like.js +312 -0
  110. package/core/base/date/date-range.js +312 -0
  111. package/core/base/date/date-time.js +312 -0
  112. package/core/base/date/date-type.js +312 -0
  113. package/core/base/date/time-unit.js +312 -0
  114. package/core/base/decorators/base.js +312 -0
  115. package/core/base/decorators/debounce.decorators.js +312 -0
  116. package/core/base/decorators/delay.decorator.js +315 -0
  117. package/core/base/decorators/yield.decorator.js +312 -0
  118. package/core/base/environment.js +312 -0
  119. package/core/base/json.js +312 -0
  120. package/core/base/msft-sme.mock.js +316 -0
  121. package/core/base/polyfills/array.js +315 -0
  122. package/core/base/polyfills/string.js +312 -0
  123. package/core/base/rxjs-lifetime-manager.js +312 -0
  124. package/core/base/utilities.js +312 -0
  125. package/core/base/versioned-object.js +312 -0
  126. package/core/data/accessibility-manager.js +312 -0
  127. package/core/data/active-directory/active-directory.js +312 -0
  128. package/core/data/active-directory/models/account-info.js +312 -0
  129. package/core/data/active-directory/models/active-directory-search-options.js +312 -0
  130. package/core/data/active-directory/models/search-type.js +312 -0
  131. package/core/data/animation.js +312 -0
  132. package/core/data/app-context.js +312 -0
  133. package/core/data/asset-manager.js +315 -0
  134. package/core/data/base64-array-buffer.js +312 -0
  135. package/core/data/batch-connection.js +312 -0
  136. package/core/data/cim-connection.js +312 -0
  137. package/core/data/cim-stream.js +312 -0
  138. package/core/data/cim.js +312 -0
  139. package/core/data/column-picker.js +312 -0
  140. package/core/data/cookie.js +312 -0
  141. package/core/data/core-environment.js +315 -0
  142. package/core/data/crypto.js +312 -0
  143. package/core/data/deployment-share.js +312 -0
  144. package/core/data/disposable.js +312 -0
  145. package/core/data/electron.js +315 -0
  146. package/core/data/error-extended.js +312 -0
  147. package/core/data/extension-broker/dialog-listener.js +312 -0
  148. package/core/data/extension-broker/extension-broker.js +312 -0
  149. package/core/data/extension-broker/extension-listener.js +312 -0
  150. package/core/data/extension-broker/model/extension-broker-request-payload.js +312 -0
  151. package/core/data/extension-broker/model/extension-broker-response-error.js +312 -0
  152. package/core/data/extension-broker/model/extension-broker-response-payload.js +312 -0
  153. package/core/data/extension-broker/model/extension-entries.js +315 -0
  154. package/core/data/extension-broker/model/extension-instance.js +315 -0
  155. package/core/data/extension-broker/model/extension-rect.js +312 -0
  156. package/core/data/extension-broker/model/extension-search-options.js +312 -0
  157. package/core/data/extension-broker/service-listener.js +312 -0
  158. package/core/data/extension-broker/worker-listener.js +312 -0
  159. package/core/data/extension-broker/worker-set.js +312 -0
  160. package/core/data/file-transfer.js +312 -0
  161. package/core/data/gateway-connection.js +312 -0
  162. package/core/data/gateway-status.js +312 -0
  163. package/core/data/gateway-url-builder.js +312 -0
  164. package/core/data/gateway-url-translator.d.ts +1 -0
  165. package/core/data/gateway-url-translator.d.ts.map +1 -1
  166. package/core/data/gateway-url-translator.js +337 -6
  167. package/core/data/gateway-url-translator.js.map +1 -1
  168. package/core/data/gateway-urls.js +312 -0
  169. package/core/data/globalization.js +315 -0
  170. package/core/data/http-constants.js +315 -0
  171. package/core/data/http.js +312 -0
  172. package/core/data/jobs/jobs-manager.js +312 -0
  173. package/core/data/jobs/models/job-credentials.js +312 -0
  174. package/core/data/jobs/models/job-node.js +312 -0
  175. package/core/data/jobs/models/job-paginated-response.js +315 -0
  176. package/core/data/jobs/models/job-pagination-options.js +315 -0
  177. package/core/data/jobs/models/job.js +312 -0
  178. package/core/data/jobs/models/node-job.js +312 -0
  179. package/core/data/jobs/models/powershell-job.js +312 -0
  180. package/core/data/language.js +315 -0
  181. package/core/data/lifetime-data.js +312 -0
  182. package/core/data/localization-manager.js +312 -0
  183. package/core/data/native-q.js +312 -0
  184. package/core/data/net.d.ts.map +1 -1
  185. package/core/data/net.js +313 -1
  186. package/core/data/net.js.map +1 -1
  187. package/core/data/node-connection.d.ts.map +1 -1
  188. package/core/data/node-connection.js +312 -2
  189. package/core/data/node-connection.js.map +1 -1
  190. package/core/data/node-extension-install.js +312 -0
  191. package/core/data/powershell-alternate.js +312 -0
  192. package/core/data/powershell-batch.js +312 -0
  193. package/core/data/powershell-connection.js +312 -0
  194. package/core/data/powershell-crypto.js +312 -0
  195. package/core/data/powershell-stream.js +312 -0
  196. package/core/data/powershell.js +312 -0
  197. package/core/data/query-cache.js +312 -0
  198. package/core/data/resource-cache.js +312 -0
  199. package/core/data/schedule-reboot.js +312 -0
  200. package/core/data/settings-manager.js +312 -0
  201. package/core/data/settings-manger.mock.js +312 -0
  202. package/core/data/sme-extension.js +312 -0
  203. package/core/data/ssh-stream.js +312 -0
  204. package/core/data/units.js +312 -0
  205. package/core/data/uri-builder.js +315 -0
  206. package/core/data/wdac-operations.js +312 -0
  207. package/core/data/websocket-stream.js +312 -0
  208. package/core/diagnostics/error-monitor.js +312 -0
  209. package/core/diagnostics/log-level.js +312 -0
  210. package/core/diagnostics/log-record.js +312 -0
  211. package/core/diagnostics/logging-constants.js +312 -0
  212. package/core/diagnostics/logging.js +312 -0
  213. package/core/diagnostics/logging.mock.js +312 -0
  214. package/core/diagnostics/sme-web-telemetry-models.js +312 -0
  215. package/core/diagnostics/sme-web-telemetry.d.ts +1 -2
  216. package/core/diagnostics/sme-web-telemetry.d.ts.map +1 -1
  217. package/core/diagnostics/sme-web-telemetry.js +336 -15
  218. package/core/diagnostics/sme-web-telemetry.js.map +1 -1
  219. package/core/diagnostics/telemetry-control-type.js +312 -0
  220. package/core/diagnostics/telemetry-options.js +312 -0
  221. package/core/diagnostics/telemetry-record.js +312 -0
  222. package/core/dom/dom.js +312 -0
  223. package/core/frame/frame-connection.js +312 -0
  224. package/core/frame/frame-connection.mock.js +312 -0
  225. package/core/frame/shell-navigation-connection.js +312 -0
  226. package/core/generated/powershell-scripts.d.ts.map +1 -1
  227. package/core/generated/powershell-scripts.js +313 -1
  228. package/core/generated/powershell-scripts.js.map +1 -1
  229. package/core/generated/strings.js +312 -0
  230. package/core/host/host-core-manager.js +312 -0
  231. package/core/host/host-core-message-type.js +312 -0
  232. package/core/host/host-core-messages.js +312 -0
  233. package/core/index.d.ts +0 -1
  234. package/core/index.d.ts.map +1 -1
  235. package/core/index.js +312 -1
  236. package/core/index.js.map +1 -1
  237. package/core/manifest/environment-modules.js +312 -0
  238. package/core/manifest/manifest-loader.js +312 -0
  239. package/core/notification/client-notification-instance.js +312 -0
  240. package/core/notification/client-notification.js +312 -0
  241. package/core/notification/notification-connection.js +312 -0
  242. package/core/notification/notification-link-type.js +312 -0
  243. package/core/notification/notification-manager.js +312 -0
  244. package/core/notification/notification-message.js +312 -0
  245. package/core/notification/notification-state.js +312 -0
  246. package/core/notification/notification.js +312 -0
  247. package/core/notification/powershell-notification.js +312 -0
  248. package/core/notification/socket-signalr.js +312 -0
  249. package/core/notification/work-item-connection.js +312 -0
  250. package/core/notification/work-item-manager.js +312 -0
  251. package/core/notification/work-item-request.js +312 -0
  252. package/core/performance/performance-profile-data-type.js +312 -0
  253. package/core/performance/performance-profile-data.js +312 -0
  254. package/core/performance/performance-profile-database.js +312 -0
  255. package/core/performance/performance-profile-record.js +312 -0
  256. package/core/performance/performance-profile.d.ts.map +1 -1
  257. package/core/performance/performance-profile.js +321 -9
  258. package/core/performance/performance-profile.js.map +1 -1
  259. package/core/performance/performance-tracker.js +312 -0
  260. package/core/polyfills.js +312 -0
  261. package/core/resources/scripts/public/crypto/Get-DecryptedDataFromNode.ps1 +216 -0
  262. package/core/resources/scripts/public/crypto/Get-EncryptionJWKOnNode.ps1 +216 -0
  263. package/core/resources/scripts/public/inventory/Get-CimWin32LogicalDisk.ps1 +218 -0
  264. package/core/resources/scripts/public/inventory/Get-CimWin32NetworkAdapter.ps1 +216 -0
  265. package/core/resources/scripts/public/inventory/Get-CimWin32PhysicalMemory.ps1 +216 -0
  266. package/core/resources/scripts/public/inventory/Get-CimWin32Processor.ps1 +216 -0
  267. package/core/resources/scripts/public/inventory/Get-ClusterInventory.ps1 +216 -0
  268. package/core/resources/scripts/public/inventory/Get-ClusterNodes.ps1 +216 -0
  269. package/core/resources/scripts/public/inventory/Get-ServerInventory.ps1 +246 -8
  270. package/core/rpc/alive/rpc-alive-client.js +312 -0
  271. package/core/rpc/alive/rpc-alive-handler.js +312 -0
  272. package/core/rpc/alive/rpc-alive-model.js +315 -0
  273. package/core/rpc/alive/rpc-alive-subject-server.js +312 -0
  274. package/core/rpc/alive/rpc-observable-alive-client.js +312 -0
  275. package/core/rpc/alive/rpc-observable-alive-model.js +312 -0
  276. package/core/rpc/alive/rpc-observable-alive-server.js +312 -0
  277. package/core/rpc/azure/rpc-azure-model.js +312 -0
  278. package/core/rpc/azure/rpc-azure-request-client.js +312 -0
  279. package/core/rpc/azure/rpc-azure-request-handler.js +312 -0
  280. package/core/rpc/azure/rpc-azure-request-subject-server.js +312 -0
  281. package/core/rpc/azure/rpc-azure-response-client.js +312 -0
  282. package/core/rpc/azure/rpc-azure-response-handler.js +315 -0
  283. package/core/rpc/credssp/rpc-credssp-model.js +312 -0
  284. package/core/rpc/credssp/rpc-credssp-request-client.js +312 -0
  285. package/core/rpc/credssp/rpc-credssp-request-handler.js +315 -0
  286. package/core/rpc/credssp/rpc-credssp-request-subject-server.js +312 -0
  287. package/core/rpc/credssp/rpc-credssp-response-client.js +312 -0
  288. package/core/rpc/credssp/rpc-credssp-response-handler.js +315 -0
  289. package/core/rpc/dialog/rpc-dialog-client.js +312 -0
  290. package/core/rpc/dialog/rpc-dialog-handler.js +312 -0
  291. package/core/rpc/dialog/rpc-dialog-model.js +312 -0
  292. package/core/rpc/dialog/rpc-dialog-subject-server.js +315 -0
  293. package/core/rpc/electron/rpc-electron-model.js +312 -0
  294. package/core/rpc/electron/rpc-electron-request-client.js +312 -0
  295. package/core/rpc/electron/rpc-electron-request-handler.js +312 -0
  296. package/core/rpc/electron/rpc-electron-request-subject-server.js +312 -0
  297. package/core/rpc/electron/rpc-electron-response-client.js +312 -0
  298. package/core/rpc/electron/rpc-electron-response-handler.js +312 -0
  299. package/core/rpc/elevate/rpc-observable-elevate-client.js +312 -0
  300. package/core/rpc/elevate/rpc-observable-elevate-model.js +312 -0
  301. package/core/rpc/elevate/rpc-observable-elevate-server.js +312 -0
  302. package/core/rpc/error-monitor/rpc-observable-error-monitor-client.js +312 -0
  303. package/core/rpc/error-monitor/rpc-observable-error-monitor-model.js +315 -0
  304. package/core/rpc/error-monitor/rpc-observable-error-monitor-server.js +312 -0
  305. package/core/rpc/extension-broker/rpc-extension-broker-model.js +315 -0
  306. package/core/rpc/extension-broker/rpc-extension-broker-module-request-subject-server.js +315 -0
  307. package/core/rpc/extension-broker/rpc-extension-broker-request-client.js +312 -0
  308. package/core/rpc/extension-broker/rpc-extension-broker-request-handler.js +312 -0
  309. package/core/rpc/extension-broker/rpc-extension-broker-request-subject-server.js +312 -0
  310. package/core/rpc/extension-broker/rpc-extension-broker-response-client.js +312 -0
  311. package/core/rpc/extension-broker/rpc-extension-broker-response-handler.js +312 -0
  312. package/core/rpc/extension-data/rpc-observable-extension-data-client.js +312 -0
  313. package/core/rpc/extension-data/rpc-observable-extension-data-model.js +312 -0
  314. package/core/rpc/extension-data/rpc-observable-extension-data-server.js +312 -0
  315. package/core/rpc/forward/rpc-forward-auto-client.js +312 -0
  316. package/core/rpc/forward/rpc-forward-down-client.js +315 -0
  317. package/core/rpc/forward/rpc-forward-down-handler.js +312 -0
  318. package/core/rpc/forward/rpc-forward-model.js +312 -0
  319. package/core/rpc/forward/rpc-forward-up-client.js +312 -0
  320. package/core/rpc/forward/rpc-forward-up-handler.js +312 -0
  321. package/core/rpc/forward/rpc-forward-up-subject-server.js +312 -0
  322. package/core/rpc/log/rpc-log-client.js +312 -0
  323. package/core/rpc/log/rpc-log-handler.js +312 -0
  324. package/core/rpc/log/rpc-log-model.js +312 -0
  325. package/core/rpc/log/rpc-log-subject-server.js +312 -0
  326. package/core/rpc/notification/rpc-notification-client.js +312 -0
  327. package/core/rpc/notification/rpc-notification-handler.js +312 -0
  328. package/core/rpc/notification/rpc-notification-model.js +312 -0
  329. package/core/rpc/notification/rpc-notification-subject-server.js +312 -0
  330. package/core/rpc/overlay/rpc-overlay-close-client.js +312 -0
  331. package/core/rpc/overlay/rpc-overlay-close-handler.js +312 -0
  332. package/core/rpc/overlay/rpc-overlay-model.js +312 -0
  333. package/core/rpc/overlay/rpc-overlay-open-client.js +315 -0
  334. package/core/rpc/overlay/rpc-overlay-open-handler.js +312 -0
  335. package/core/rpc/overlay/rpc-overlay-open-subject-server.js +312 -0
  336. package/core/rpc/performance/rpc-observable-performance-client.js +312 -0
  337. package/core/rpc/performance/rpc-observable-performance-config-client.js +312 -0
  338. package/core/rpc/performance/rpc-observable-performance-config-server.js +312 -0
  339. package/core/rpc/performance/rpc-observable-performance-model.js +312 -0
  340. package/core/rpc/performance/rpc-observable-performance-server.js +312 -0
  341. package/core/rpc/report/rpc-report-client.js +312 -0
  342. package/core/rpc/report/rpc-report-handler.js +312 -0
  343. package/core/rpc/report/rpc-report-model.js +312 -0
  344. package/core/rpc/report/rpc-report-subject-server.js +315 -0
  345. package/core/rpc/rpc-base.js +312 -0
  346. package/core/rpc/rpc-channel.js +312 -0
  347. package/core/rpc/rpc-forwarder.js +312 -0
  348. package/core/rpc/rpc-inbound-client.js +312 -0
  349. package/core/rpc/rpc-inbound.js +312 -0
  350. package/core/rpc/rpc-manager.js +312 -0
  351. package/core/rpc/rpc-module-subject-server.js +315 -0
  352. package/core/rpc/rpc-observable-client.js +312 -0
  353. package/core/rpc/rpc-observable-request.js +312 -0
  354. package/core/rpc/rpc-observable-result.js +312 -0
  355. package/core/rpc/rpc-observable-server.js +312 -0
  356. package/core/rpc/rpc-outbound-client.js +312 -0
  357. package/core/rpc/rpc-outbound.js +312 -0
  358. package/core/rpc/rpc-subject-server.js +312 -0
  359. package/core/rpc/rpc.js +312 -0
  360. package/core/rpc/seek/rpc-seek-client.js +312 -0
  361. package/core/rpc/seek/rpc-seek-handler.js +315 -0
  362. package/core/rpc/seek/rpc-seek-model.js +312 -0
  363. package/core/rpc/settings/rpc-settings-client.js +315 -0
  364. package/core/rpc/settings/rpc-settings-handler.js +312 -0
  365. package/core/rpc/settings/rpc-settings-model.js +312 -0
  366. package/core/rpc/settings/rpc-settings-subject-server.js +312 -0
  367. package/core/rpc/shell-navigate/rpc-shell-navigate-client.js +312 -0
  368. package/core/rpc/shell-navigate/rpc-shell-navigate-handler.js +312 -0
  369. package/core/rpc/shell-navigate/rpc-shell-navigate-model.js +312 -0
  370. package/core/rpc/shell-navigate/rpc-shell-navigate-subject-server.js +312 -0
  371. package/core/rpc/sme-extension/rpc-sme-extension-model.js +315 -0
  372. package/core/rpc/sme-extension/rpc-sme-extension-request-client.js +312 -0
  373. package/core/rpc/sme-extension/rpc-sme-extension-request-handler.js +312 -0
  374. package/core/rpc/sme-extension/rpc-sme-extension-request-subject-server.js +312 -0
  375. package/core/rpc/sme-extension/rpc-sme-extension-response-client.js +312 -0
  376. package/core/rpc/sme-extension/rpc-sme-extension-response-handler.js +312 -0
  377. package/core/rpc/telemetry/rpc-telemetry-client.js +312 -0
  378. package/core/rpc/telemetry/rpc-telemetry-handler.js +315 -0
  379. package/core/rpc/telemetry/rpc-telemetry-model.js +312 -0
  380. package/core/rpc/telemetry/rpc-telemetry-subject-server.js +312 -0
  381. package/core/rpc/update-data/rpc-update-data-client.js +312 -0
  382. package/core/rpc/update-data/rpc-update-data-handler.js +312 -0
  383. package/core/rpc/update-data/rpc-update-data-model.js +312 -0
  384. package/core/rpc/update-data/rpc-update-data-subject-server.js +312 -0
  385. package/core/rpc/update-theme/rpc-observable-update-theme-client.js +312 -0
  386. package/core/rpc/update-theme/rpc-observable-update-theme-model.js +312 -0
  387. package/core/rpc/update-theme/rpc-observable-update-theme-server.js +312 -0
  388. package/core/rpc/work-item/rpc-work-item-client.js +312 -0
  389. package/core/rpc/work-item/rpc-work-item-handler.js +312 -0
  390. package/core/rpc/work-item/rpc-work-item-model.js +312 -0
  391. package/core/rpc/work-item/rpc-work-item-subject-server.js +312 -0
  392. package/core/rpc/work-item-find/rpc-work-item-find-client.js +312 -0
  393. package/core/rpc/work-item-find/rpc-work-item-find-handler.js +312 -0
  394. package/core/rpc/work-item-find/rpc-work-item-find-model.js +312 -0
  395. package/core/rpc/work-item-find/rpc-work-item-find-subject-server.js +312 -0
  396. package/core/security/active-connection.js +312 -0
  397. package/core/security/authorization-manager.js +312 -0
  398. package/core/security/connection-manager-settings/common-connection-settings.js +315 -0
  399. package/core/security/connection-manager-settings/connection-settings.js +312 -0
  400. package/core/security/connection-manager.js +312 -0
  401. package/core/security/connection-stream.js +312 -0
  402. package/core/security/connection.js +312 -0
  403. package/core/security/credssp-manager.js +312 -0
  404. package/core/security/sign-on-manager.js +312 -0
  405. package/core/security/tag-manager.js +312 -0
  406. package/core/security/tool-condition-validator.js +312 -0
  407. package/core/security/tool-connection-query.js +312 -0
  408. package/core/security/user-principal.js +312 -0
  409. package/core/shared/cluster-inventory/cluster-inventory-cache.js +312 -0
  410. package/core/shared/cluster-inventory/cluster-inventory.js +312 -0
  411. package/core/shared/cluster-inventory/cluster-node-inventory.js +312 -0
  412. package/core/shared/gateway-inventory/gateway-inventory-cache.js +312 -0
  413. package/core/shared/gateway-inventory/gateway-inventory-detail-cache.js +312 -0
  414. package/core/shared/gateway-inventory/gateway-inventory-detail.js +312 -0
  415. package/core/shared/gateway-inventory/gateway-inventory.js +312 -0
  416. package/core/shared/inventory-query-caches.js +312 -0
  417. package/core/shared/server-inventory/server-inventory-cache.js +312 -0
  418. package/core/shared/server-inventory/server-inventory-detail-cache.js +312 -0
  419. package/core/shared/server-inventory/server-inventory-detail.js +315 -0
  420. package/core/shared/server-inventory/server-inventory.js +312 -0
  421. package/core/shared/shared-cache.js +312 -0
  422. package/core/shared/tool-inventory/tool-inventory-cache.js +312 -0
  423. package/core/shared/tool-inventory/tool-inventory.js +312 -0
  424. package/core/special.js +315 -0
  425. package/core/test-utilities/accessibility-tester.js +312 -0
  426. package/core/test-utilities/console.mock.js +312 -0
  427. package/core/test-utilities/jasmine-axe-matcher.js +312 -0
  428. package/core/test-utilities/wait-async.js +312 -0
  429. package/core/test.js +312 -0
  430. package/core/testing.js +312 -0
  431. package/core/workflow/persistent-local-storage.js +312 -0
  432. package/core/workflow/persistent-work-item-apply-state.js +316 -0
  433. package/core/workflow/persistent-work-item-state.js +312 -0
  434. package/core/workflow/persistent-work-item.js +315 -0
  435. package/core/workflow/persistent-workflow-builder.js +312 -0
  436. package/core/workflow/persistent-workflow-context.js +312 -0
  437. package/core/workflow/persistent-workflow-runner.js +312 -0
  438. package/core/workflow/persistent-workflow-snapshot.js +312 -0
  439. package/core/workflow/persistent-workflow-store.js +312 -0
  440. package/core/workflow/persistent-workflow.js +312 -0
  441. package/package.json +11 -9
  442. package/styles/css/main-v2.css +1 -1
  443. package/styles/fonts/SegoeUI/Bold/SegoeUIBold-5.27.woff +0 -0
  444. package/styles/fonts/SegoeUI/Light/SegoeUILight-5.27.woff +0 -0
  445. package/styles/fonts/SegoeUI/Normal/SegoeUI-5.27.woff +0 -0
  446. package/styles/fonts/SegoeUI/SemiBold/SegoeUISemiBold-5.27.woff +0 -0
  447. package/styles/fonts/SegoeUI/SemiLight/SegoeUISemiLight-5.27.woff +0 -0
  448. package/styles/fonts/ServMDL2/ServMDL2-4.66.woff +0 -0
  449. package/tools/build/webpack/index-html.transform.js +312 -0
  450. package/tools/build/webpack/shell.index-html.transform.js +312 -0
  451. package/tools/build/webpack/shell.webpack.config.js +312 -0
  452. package/tools/build/webpack/webpack.config.js +312 -0
  453. package/tools/code-formatter/.eslintrc.base.json +3 -1
  454. package/tools/code-formatter/lint.d.ts.map +1 -1
  455. package/tools/code-formatter/lint.js +319 -1
  456. package/tools/code-formatter/lint.js.map +1 -1
  457. package/tools/code-formatter/utilities.d.ts +7 -0
  458. package/tools/code-formatter/utilities.d.ts.map +1 -0
  459. package/tools/code-formatter/utilities.js +395 -0
  460. package/tools/code-formatter/utilities.js.map +1 -0
  461. package/tools/gulp-doc-generator/index.js +312 -0
  462. package/tools/gulp-manifest-resource/index.js +312 -0
  463. package/tools/gulp-manifest-validator/index.js +312 -0
  464. package/tools/gulp-merge-json-in-folders/index.js +312 -0
  465. package/tools/gulp-merge-json-in-folders/json-merge.js +312 -0
  466. package/tools/gulp-ps-cim/index.js +315 -0
  467. package/tools/gulp-ps-code/index.d.ts.map +1 -1
  468. package/tools/gulp-ps-code/index.js +323 -2
  469. package/tools/gulp-ps-code/index.js.map +1 -1
  470. package/tools/gulp-ps-code/ps-code-convert.js +312 -0
  471. package/tools/gulp-ps-manifest/index.js +312 -0
  472. package/tools/gulp-ps-module/index.d.ts.map +1 -1
  473. package/tools/gulp-ps-module/index.js +327 -3
  474. package/tools/gulp-ps-module/index.js.map +1 -1
  475. package/tools/gulp-ps-resjson/index.js +315 -0
  476. package/tools/gulp-resjson/index.js +315 -0
  477. package/tools/gulp-resjson/resjson-convert.js +312 -0
  478. package/tools/gulp-schema-form/index.js +312 -0
  479. package/tools/gulp-svg-code/index.js +312 -0
  480. package/tools/gulp-svg-code/svg-code-convert.js +312 -0
  481. package/tools/gulp-update-notes-resource/index.d.ts.map +1 -1
  482. package/tools/gulp-update-notes-resource/index.js +316 -4
  483. package/tools/gulp-update-notes-resource/index.js.map +1 -1
  484. package/tools/module-template/.eslintrc.json +3 -0
  485. package/tools/module-template/build/increment-package-version.ps1 +216 -0
  486. package/tools/module-template/build/push-incremented-version.ps1 +216 -1
  487. package/tools/module-template/build/update-powershell-code.ps1 +216 -0
  488. package/tools/module-template/gulpfile.ts/common/clean.ts +2 -0
  489. package/tools/module-template/gulpfile.ts/common/pack.ts +17 -5
  490. package/tools/module-template/gulpfile.ts/common/powershell.ts +40 -2
  491. package/tools/module-template/gulpfile.ts/common/utilities.ts +1 -0
  492. package/tools/pack-nuget/index.d.ts.map +1 -1
  493. package/tools/pack-nuget/index.js +321 -3
  494. package/tools/pack-nuget/index.js.map +1 -1
  495. package/tools/scripts/Invoke-PesterTest.ps1 +216 -0
  496. package/tools/scripts/New-ExtensionPackage.ps1 +373 -6
  497. package/tools/scripts/Search-NonAsciiText.ps1 +216 -0
  498. package/tools/scripts/package-information/README.md +3 -0
  499. package/tools/scripts/package-information/ms-logo.png +0 -0
  500. package/tools/test-runner/index.js +312 -0
  501. package/tools/utilities/index.js +312 -0
  502. package/tools/wac-cli/src/angular15/configs/angular-json-config.js +312 -0
  503. package/tools/wac-cli/src/angular15/configs/ci-build-yml-config.js +315 -0
  504. package/tools/wac-cli/src/angular15/configs/config.js +312 -0
  505. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.d.ts +9 -0
  506. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.d.ts.map +1 -0
  507. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js +328 -0
  508. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js.map +1 -0
  509. package/tools/wac-cli/src/angular15/configs/git-ignore-config.js +312 -0
  510. package/tools/wac-cli/src/angular15/configs/jasmine-test-config.js +315 -0
  511. package/tools/wac-cli/src/angular15/configs/package-json-config.js +312 -0
  512. package/tools/wac-cli/src/angular15/configs/replace-config.js +315 -0
  513. package/tools/wac-cli/src/angular15/configs/tsconfig-config.js +312 -0
  514. package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.js +312 -0
  515. package/tools/wac-cli/src/angular15/main.d.ts +19 -3
  516. package/tools/wac-cli/src/angular15/main.d.ts.map +1 -1
  517. package/tools/wac-cli/src/angular15/main.js +353 -7
  518. package/tools/wac-cli/src/angular15/main.js.map +1 -1
  519. package/tools/wac-cli/src/angular15/upgrader/angular-json-upgrader.js +316 -0
  520. package/tools/wac-cli/src/angular15/upgrader/audit/ajax-response-updater.js +312 -0
  521. package/tools/wac-cli/src/angular15/upgrader/audit/css-syntax-error-updater.js +312 -0
  522. package/tools/wac-cli/src/angular15/upgrader/audit/declare-override-updater.js +312 -0
  523. package/tools/wac-cli/src/angular15/upgrader/audit/error-updater-angular15.js +312 -0
  524. package/tools/wac-cli/src/angular15/upgrader/audit/form-control-updater.js +312 -0
  525. package/tools/wac-cli/src/angular15/upgrader/audit/iif-updater-util.js +312 -0
  526. package/tools/wac-cli/src/angular15/upgrader/audit/load-children-callback-updater.js +315 -0
  527. package/tools/wac-cli/src/angular15/upgrader/audit/log-parser.js +312 -0
  528. package/tools/wac-cli/src/angular15/upgrader/audit/observable-throw-updater.js +312 -0
  529. package/tools/wac-cli/src/angular15/upgrader/audit/parameter-count-violation-updater.js +312 -0
  530. package/tools/wac-cli/src/angular15/upgrader/audit/string-replace-updater.js +312 -0
  531. package/tools/wac-cli/src/angular15/upgrader/audit/subjuct-next-updater-util.js +312 -0
  532. package/tools/wac-cli/src/angular15/upgrader/ci-build-yml-upgrader.js +312 -0
  533. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.d.ts +18 -0
  534. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.d.ts.map +1 -0
  535. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js +361 -0
  536. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js.map +1 -0
  537. package/tools/wac-cli/src/angular15/upgrader/file-replacement-upgrader.js +312 -0
  538. package/tools/wac-cli/src/angular15/upgrader/git-ignore-upgrader.js +312 -0
  539. package/tools/wac-cli/src/angular15/upgrader/jasmine-test-upgrader.js +312 -0
  540. package/tools/wac-cli/src/angular15/upgrader/package-json-upgrader.js +312 -0
  541. package/tools/wac-cli/src/angular15/upgrader/remove-upgrader.js +315 -0
  542. package/tools/wac-cli/src/angular15/upgrader/replace-upgrader.js +312 -0
  543. package/tools/wac-cli/src/angular15/upgrader/tsconfig-upgrader.js +312 -0
  544. package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.js +312 -0
  545. package/tools/wac-cli/src/angular15/upgrader/version-json-upgrader.js +312 -0
  546. package/tools/wac-cli/src/angular15/utils/add-item.js +312 -0
  547. package/tools/wac-cli/src/angular15/utils/command-runner.js +312 -0
  548. package/tools/wac-cli/src/angular15/utils/file-comparison.js +315 -0
  549. package/tools/wac-cli/src/angular15/utils/file-replacement.js +312 -0
  550. package/tools/wac-cli/src/angular15/utils/file-writer.js +312 -0
  551. package/tools/wac-cli/src/angular15/utils/logger.js +312 -0
  552. package/tools/wac-cli/src/angular15/utils/main-debugger.js +312 -0
  553. package/tools/wac-cli/src/angular15/utils/relative-path.js +312 -0
  554. package/tools/wac-cli/src/angular15/utils/remove-item.js +312 -0
  555. package/tools/wac-cli/src/angular15/utils/space-generator.js +312 -0
  556. package/tools/wac-cli/src/angular15/utils/update-shell-references.js +316 -0
  557. package/tools/wac-cli/src/common.js +312 -0
  558. package/tools/wac-cli/src/create/main.js +312 -0
  559. package/tools/wac-cli/src/eslint/main.js +312 -0
  560. package/tools/wac-cli/src/index.js +312 -0
  561. package/tools/wac-cli/src/upgrade/error-updater.js +312 -0
  562. package/tools/wac-cli/src/upgrade/error-updaters/component-selector-updater.js +315 -0
  563. package/tools/wac-cli/src/upgrade/error-updaters/only-arrow-functions-updater.js +315 -0
  564. package/tools/wac-cli/src/upgrade/error-updaters/updater-lookup.js +312 -0
  565. package/tools/wac-cli/src/upgrade/file-updater.js +312 -0
  566. package/tools/wac-cli/src/upgrade/get-files.js +312 -0
  567. package/tools/wac-cli/src/upgrade/main.js +312 -0
  568. package/tools/wac-cli/src/upgrade/models/error-result.js +312 -0
  569. package/tools/wac-cli/src/upgrade/models/updater-interface.js +312 -0
  570. package/tools/wac-cli/src/upgrade/package-updater.js +312 -0
  571. package/tools/wac-cli/templates/wac-template/src/favicon.ico +0 -0
  572. package/tools/wac-cli/templates/wac-template/src/karma.conf.js +312 -0
  573. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Error.ps1 +216 -0
  574. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Exception.ps1 +216 -0
  575. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Process.ps1 +216 -1
  576. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Service.ps1 +216 -1
  577. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-WinRmState.ps1 +216 -1
  578. package/core/data/extension-broker/snap-in-listener.d.ts.map +0 -1
  579. package/core/data/extension-broker/snap-in-listener.js +0 -73
  580. package/core/data/extension-broker/snap-in-listener.js.map +0 -1
  581. package/microsoft-windows-admin-center-sdk-4.123.0.tgz +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/tools/gulp-update-notes-resource/index.ts"],"names":[],"mappings":"","file":"index.d.ts","sourcesContent":["'use strict';\r\n\r\nimport { Buffer } from 'buffer';\r\nimport fs from 'fs';\r\nimport log from 'fancy-log';\r\nimport pluginError from 'plugin-error';\r\nimport through2 from 'through2';\r\nimport Vinyl from 'vinyl';\r\nimport * as util from '../utilities';\r\n\r\nconst PLUGIN_NAME = 'gulp-update-notes-resource';\r\n\r\ninterface Options {\r\n /**\r\n * resource name.\r\n */\r\n resourceName: string;\r\n\r\n /**\r\n * path of update notes file.\r\n */\r\n updateNotes: string;\r\n\r\n /**\r\n * depth of folder structure from the locale folder. (default is 1)\r\n */\r\n localeOffset: number;\r\n}\r\n\r\nfunction gulpUpdateNotesResources(options: Options) {\r\n function findResourceKey(node: any, results: string[]): void {\r\n const match = 'resources:strings:';\r\n const keys = Object.keys(node);\r\n if (keys && keys.length > 0) {\r\n keys.forEach(key => {\r\n const target = node[key];\r\n if (target) {\r\n if (typeof target === 'string') {\r\n if (target.indexOf(match) === 0) {\r\n const value = target.substring(match.length);\r\n if (results.indexOf(value) < 0) {\r\n results.push(value);\r\n }\r\n }\r\n } else {\r\n findResourceKey(target, results);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // override options settings if not specified.\r\n options = <Options>Object.assign(\r\n {\r\n updateNotes: 'packages/shell/src/assets/updates/update-notes.json',\r\n localeOffset: 1\r\n },\r\n options || {});\r\n\r\n const resources: any = {};\r\n const keyToResources: any = {};\r\n\r\n return through2.obj(\r\n /**\r\n * Transform\r\n */\r\n function (file, encoding, callback) {\r\n let locale = 'default';\r\n if (resources.default) {\r\n // if default is set already, find current locale from the file path.\r\n const pathSegments = file.history[0].split('\\\\');\r\n locale = pathSegments[pathSegments.length - (2 + options.localeOffset)];\r\n }\r\n\r\n resources[locale] = {};\r\n if (resources.default) {\r\n // if default is set already, pre-fill all resource items from default.\r\n for (const resourceId in resources.default) {\r\n if (resources.default.hasOwnProperty(resourceId)) {\r\n resources[locale][resourceId] = resources.default[resourceId];\r\n }\r\n }\r\n }\r\n\r\n // remove comments, /* multiline comment */ and // one line comment and \"//\": \"JSON element comment\"\r\n const content = file.contents.toString('utf8')\r\n .replace(/(\\/\\*([^*]|[\\n]|(\\*+([^*/]|[\\n])))*\\*\\/+)|( +\\/\\/.*)|( +\\\"\\/\\/\\\".*)/g, '');\r\n const object = JSON.parse(content);\r\n if (object[options.resourceName] && object[options.resourceName]['App']['UpdateNotes']) {\r\n // supports <ResourceName>.Manifest.<KeyName> format.\r\n const items = object[options.resourceName]['App']['UpdateNotes'];\r\n for (const key in items) {\r\n if (items.hasOwnProperty(key)) {\r\n // Each key will have two children, title and description\r\n // no need to separate in JSON form\r\n resources[locale][key] = items[key];\r\n\r\n // Used to keep an alternate mapping we use later\r\n if (!keyToResources.hasOwnProperty(key)) {\r\n keyToResources[key] = {};\r\n }\r\n\r\n if (keyToResources.hasOwnProperty(key) &&\r\n !keyToResources[key].hasOwnProperty(locale)) {\r\n keyToResources[key][locale] = {};\r\n }\r\n keyToResources[key][locale] = items[key];\r\n }\r\n }\r\n } else {\r\n // supports <ResourceName>_App_UpdateNotes format.\r\n const resourceUpdateNotes = options.resourceName + '_App_UpdateNotes_';\r\n for (const name in object) {\r\n if (object.hasOwnProperty(name)) {\r\n const index = name.indexOf(resourceUpdateNotes);\r\n if (index === 0) {\r\n // Check if this resource has the specific substring or not\r\n const value = object[name];\r\n\r\n // If it contains '_' we split it so we keep only the key\r\n const resourceId2 = name.substring(resourceUpdateNotes.length);\r\n\r\n // Split to separate <KeyValue>_<type>\r\n // Possible types are title or description\r\n const splitText = resourceId2.split('_');\r\n\r\n const key = splitText[0];\r\n const type = splitText[1];\r\n if (!resources[locale].hasOwnProperty(key)) {\r\n resources[locale][key] = {};\r\n }\r\n resources[locale][key][type] = value;\r\n\r\n // Used to keep a mapping of keys to resources for faster\r\n // processing later\r\n if (!keyToResources.hasOwnProperty(key)) {\r\n keyToResources[key] = {};\r\n }\r\n\r\n if (keyToResources.hasOwnProperty(key) &&\r\n !keyToResources[key].hasOwnProperty(locale)) {\r\n keyToResources[key][locale] = {};\r\n }\r\n keyToResources[key][locale][type] = value;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return callback();\r\n },\r\n\r\n /**\r\n * Flush\r\n */\r\n function (callback) {\r\n try {\r\n const updateNotesObject = JSON.parse(fs.readFileSync(options.updateNotes, 'utf8'));\r\n\r\n const keys: string[] = [];\r\n findResourceKey(updateNotesObject, keys);\r\n const missingType: string[] = [];\r\n const missing: string[] = [];\r\n const unused: string[] = Object.keys(resources.default);\r\n\r\n keys.forEach(function (key) {\r\n const index = unused.indexOf(key);\r\n if (index >= 0) {\r\n // If the item exists, remove it from the unused set\r\n unused.splice(index, 1);\r\n\r\n // We have to check each item has a title and description\r\n const typeKeys = Object.keys(keyToResources[key].default);\r\n const requiredTypesSet = new Set();\r\n requiredTypesSet.add('title');\r\n requiredTypesSet.add('description');\r\n typeKeys.forEach(item => {\r\n if (requiredTypesSet.has(item)) {\r\n requiredTypesSet.delete(item);\r\n }\r\n });\r\n\r\n // If it did not have we save it throw error later\r\n if (requiredTypesSet.size > 0) {\r\n missingType.push(key);\r\n }\r\n } else {\r\n missing.push(key);\r\n }\r\n });\r\n\r\n if (missing.length > 0) {\r\n missing.forEach(item => {\r\n log.error('Missing resource: ' + item);\r\n });\r\n throw new Error('Missing resource found in manifest.json!');\r\n }\r\n\r\n if (unused.length > 0) {\r\n unused.forEach(item => {\r\n log.error('Unused resource: ' + item);\r\n });\r\n throw new Error('Unused resource found in strings.resjson!');\r\n }\r\n\r\n if (missingType.length > 0) {\r\n missingType.forEach(item => {\r\n log.error('Missing title or description: ' + item);\r\n });\r\n throw new Error('Key without title or description found in strings.resjson!');\r\n }\r\n\r\n updateNotesObject.map((item, index) => {\r\n if (item.hasOwnProperty('stringJsonKey')) {\r\n const key = item.stringJsonKey.replace('resources:strings:', '');\r\n // Key to resource maps key -> all locales\r\n item.resources = keyToResources[key];\r\n }\r\n updateNotesObject[index] = item;\r\n });\r\n\r\n const updateNotesFile = new Vinyl({\r\n cwd: '.',\r\n base: '.',\r\n path: './update-notes.json',\r\n contents: Buffer.from(JSON.stringify(updateNotesObject, null, 2), 'utf8')\r\n });\r\n\r\n this.push(updateNotesFile);\r\n } catch (e) {\r\n const error = (!e.plugin || (e.plugin !== PLUGIN_NAME)) ?\r\n util.extendError(new pluginError({ plugin: PLUGIN_NAME, message: e.message }), e) : e;\r\n log.error(error);\r\n }\r\n\r\n callback();\r\n });\r\n}\r\n\r\nmodule.exports = gulpUpdateNotesResources;\r\n"]}
1
+ {"version":3,"sources":["../../../packages/tools/gulp-update-notes-resource/index.ts"],"names":[],"mappings":"","file":"index.d.ts","sourcesContent":["'use strict';\r\n\r\nimport { Buffer } from 'buffer';\r\nimport fs from 'fs';\r\nimport log from 'fancy-log';\r\nimport pluginError from 'plugin-error';\r\nimport through2 from 'through2';\r\nimport Vinyl from 'vinyl';\r\nimport * as util from '../utilities';\r\n\r\nconst PLUGIN_NAME = 'gulp-update-notes-resource';\r\n\r\ninterface Options {\r\n /**\r\n * resource name.\r\n */\r\n resourceName: string;\r\n\r\n /**\r\n * path of update notes file.\r\n */\r\n updateNotes: string;\r\n\r\n /**\r\n * depth of folder structure from the locale folder. (default is 1)\r\n */\r\n localeOffset: number;\r\n}\r\n\r\nfunction gulpUpdateNotesResources(options: Options) {\r\n function findResourceKey(node: any, results: string[]): void {\r\n const match = 'resources:strings:';\r\n const keys = Object.keys(node);\r\n if (keys && keys.length > 0) {\r\n keys.forEach(key => {\r\n const target = node[key];\r\n if (target) {\r\n if (typeof target === 'string') {\r\n if (target.indexOf(match) === 0) {\r\n const value = target.substring(match.length);\r\n if (results.indexOf(value) < 0) {\r\n results.push(value);\r\n }\r\n }\r\n } else {\r\n findResourceKey(target, results);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // override options settings if not specified.\r\n options = <Options>Object.assign(\r\n {\r\n updateNotes: 'packages/shell/src/assets/updates/update-notes.json',\r\n localeOffset: 1\r\n },\r\n options || {});\r\n\r\n const resources: any = {};\r\n const keyToResources: any = {};\r\n\r\n return through2.obj(\r\n /**\r\n * Transform\r\n */\r\n function (file, encoding, callback) {\r\n let locale = 'default';\r\n if (resources.default) {\r\n // if default is set already, find current locale from the file path.\r\n const pathSegments = file.history[0].split('\\\\');\r\n locale = pathSegments[pathSegments.length - (2 + options.localeOffset)];\r\n }\r\n\r\n resources[locale] = {};\r\n if (resources.default) {\r\n // if default is set already, pre-fill all resource items from default.\r\n for (const resourceId in resources.default) {\r\n if (resources.default.hasOwnProperty(resourceId)) {\r\n resources[locale][resourceId] = resources.default[resourceId];\r\n }\r\n }\r\n }\r\n\r\n // remove comments, /* multiline comment */ and // one line comment and \"//\": \"JSON element comment\"\r\n const content = file.contents.toString('utf8')\r\n .replace(/(\\/\\*([^*]|[\\n]|(\\*+([^*/]|[\\n])))*\\*\\/+)|( +\\/\\/.*)|( +\\\"\\/\\/\\\".*)/g, '');\r\n const object = JSON.parse(content);\r\n if (object[options.resourceName] && object[options.resourceName]['App']['UpdateNotes']) {\r\n // supports <ResourceName>.Manifest.<KeyName> format.\r\n const items = object[options.resourceName]['App']['UpdateNotes'];\r\n for (const key in items) {\r\n if (items.hasOwnProperty(key)) {\r\n // Each key will have two children, title and description\r\n // no need to separate in JSON form\r\n resources[locale][key] = items[key];\r\n\r\n // Used to keep an alternate mapping we use later\r\n if (!keyToResources.hasOwnProperty(key)) {\r\n keyToResources[key] = {};\r\n }\r\n\r\n if (keyToResources.hasOwnProperty(key) &&\r\n !keyToResources[key].hasOwnProperty(locale)) {\r\n keyToResources[key][locale] = {};\r\n }\r\n keyToResources[key][locale] = items[key];\r\n }\r\n }\r\n } else {\r\n // supports <ResourceName>_App_UpdateNotes format.\r\n const resourceUpdateNotes = options.resourceName + '_App_UpdateNotes_';\r\n for (const name in object) {\r\n if (object.hasOwnProperty(name)) {\r\n const index = name.indexOf(resourceUpdateNotes);\r\n if (index === 0) {\r\n // Check if this resource has the specific substring or not\r\n const value = object[name];\r\n\r\n // If it contains '_' we split it so we keep only the key\r\n const resourceId2 = name.substring(resourceUpdateNotes.length);\r\n\r\n // Split to separate <KeyValue>_<type>\r\n // Possible types are title or description\r\n const splitText = resourceId2.split('_');\r\n\r\n const key = splitText[0];\r\n const type = splitText[1];\r\n if (!resources[locale].hasOwnProperty(key)) {\r\n resources[locale][key] = {};\r\n }\r\n resources[locale][key][type] = value;\r\n\r\n // Used to keep a mapping of keys to resources for faster\r\n // processing later\r\n if (!keyToResources.hasOwnProperty(key)) {\r\n keyToResources[key] = {};\r\n }\r\n\r\n if (keyToResources.hasOwnProperty(key) &&\r\n !keyToResources[key].hasOwnProperty(locale)) {\r\n keyToResources[key][locale] = {};\r\n }\r\n keyToResources[key][locale][type] = value;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return callback();\r\n },\r\n\r\n /**\r\n * Flush\r\n */\r\n function (callback) {\r\n try {\r\n const updateNotesObject = JSON.parse(fs.readFileSync(options.updateNotes, 'utf8'));\r\n\r\n const keys: string[] = [];\r\n findResourceKey(updateNotesObject, keys);\r\n const missingType: string[] = [];\r\n const missing: string[] = [];\r\n const unused: string[] = Object.keys(resources.default);\r\n\r\n keys.forEach(function (key) {\r\n const index = unused.indexOf(key);\r\n if (index >= 0) {\r\n // If the item exists, remove it from the unused set\r\n unused.splice(index, 1);\r\n\r\n // We have to check each item has a title and description\r\n const typeKeys = Object.keys(keyToResources[key].default);\r\n const requiredTypesSet = new Set();\r\n requiredTypesSet.add('title');\r\n requiredTypesSet.add('description');\r\n typeKeys.forEach(item => {\r\n if (requiredTypesSet.has(item)) {\r\n requiredTypesSet.delete(item);\r\n }\r\n });\r\n\r\n // If it did not have we save it throw error later\r\n if (requiredTypesSet.size > 0) {\r\n missingType.push(key);\r\n }\r\n } else {\r\n missing.push(key);\r\n }\r\n });\r\n\r\n if (missing.length > 0) {\r\n missing.forEach(item => {\r\n log.error('Missing resource (update-notes.json): ' + item);\r\n });\r\n throw new Error('Missing resource found in manifest.json!');\r\n }\r\n\r\n if (unused.length > 0) {\r\n // allow to use unused resources to share the same strings.json between GWv1 and GWv2.\r\n unused.forEach(item => {\r\n log.warn('Unused resource (update-notes.json): ' + item);\r\n });\r\n }\r\n\r\n if (missingType.length > 0) {\r\n missingType.forEach(item => {\r\n log.error('Missing title or description (update-notes.json): ' + item);\r\n });\r\n throw new Error('Key without title or description found in strings.resjson!');\r\n }\r\n\r\n updateNotesObject.map((item, index) => {\r\n if (item.hasOwnProperty('stringJsonKey')) {\r\n const key = item.stringJsonKey.replace('resources:strings:', '');\r\n // Key to resource maps key -> all locales\r\n item.resources = keyToResources[key];\r\n }\r\n updateNotesObject[index] = item;\r\n });\r\n\r\n const updateNotesFile = new Vinyl({\r\n cwd: '.',\r\n base: '.',\r\n path: './update-notes.json',\r\n contents: Buffer.from(JSON.stringify(updateNotesObject, null, 2), 'utf8')\r\n });\r\n\r\n this.push(updateNotesFile);\r\n } catch (e) {\r\n const error = (!e.plugin || (e.plugin !== PLUGIN_NAME)) ?\r\n util.extendError(new pluginError({ plugin: PLUGIN_NAME, message: e.message }), e) : e;\r\n log.error(error);\r\n }\r\n\r\n callback();\r\n });\r\n}\r\n\r\nmodule.exports = gulpUpdateNotesResources;\r\n"]}
@@ -156,19 +156,19 @@ function gulpUpdateNotesResources(options) {
156
156
  });
157
157
  if (missing.length > 0) {
158
158
  missing.forEach(item => {
159
- fancy_log_1.default.error('Missing resource: ' + item);
159
+ fancy_log_1.default.error('Missing resource (update-notes.json): ' + item);
160
160
  });
161
161
  throw new Error('Missing resource found in manifest.json!');
162
162
  }
163
163
  if (unused.length > 0) {
164
+ // allow to use unused resources to share the same strings.json between GWv1 and GWv2.
164
165
  unused.forEach(item => {
165
- fancy_log_1.default.error('Unused resource: ' + item);
166
+ fancy_log_1.default.warn('Unused resource (update-notes.json): ' + item);
166
167
  });
167
- throw new Error('Unused resource found in strings.resjson!');
168
168
  }
169
169
  if (missingType.length > 0) {
170
170
  missingType.forEach(item => {
171
- fancy_log_1.default.error('Missing title or description: ' + item);
171
+ fancy_log_1.default.error('Missing title or description (update-notes.json): ' + item);
172
172
  });
173
173
  throw new Error('Key without title or description found in strings.resjson!');
174
174
  }
@@ -199,3 +199,315 @@ function gulpUpdateNotesResources(options) {
199
199
  module.exports = gulpUpdateNotesResources;
200
200
 
201
201
  //# sourceMappingURL=index.js.map
202
+
203
+ // SIG // Begin signature block
204
+ // SIG // MIInvQYJKoZIhvcNAQcCoIInrjCCJ6oCAQExDzANBglg
205
+ // SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
206
+ // SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
207
+ // SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
208
+ // SIG // npDCg7aSlNIQswWdeeSbVrjJS42q6q0zFmbatxFXis6g
209
+ // SIG // gg12MIIF9DCCA9ygAwIBAgITMwAAA68wQA5Mo00FQQAA
210
+ // SIG // AAADrzANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV
211
+ // SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
212
+ // SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
213
+ // SIG // cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
214
+ // SIG // aWduaW5nIFBDQSAyMDExMB4XDTIzMTExNjE5MDkwMFoX
215
+ // SIG // DTI0MTExNDE5MDkwMFowdDELMAkGA1UEBhMCVVMxEzAR
216
+ // SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
217
+ // SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
218
+ // SIG // bjEeMBwGA1UEAxMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
219
+ // SIG // MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
220
+ // SIG // zkvLNa2un9GBrYNDoRGkGv7d0PqtTBB4ViYakFbjuWpm
221
+ // SIG // F0KcvDAzzaCWJPhVgIXjz+S8cHEoHuWnp/n+UOljT3eh
222
+ // SIG // A8Rs6Lb1aTYub3tB/e0txewv2sQ3yscjYdtTBtFvEm9L
223
+ // SIG // 8Yv76K3Cxzi/Yvrdg+sr7w8y5RHn1Am0Ff8xggY1xpWC
224
+ // SIG // XFI+kQM18njQDcUqSlwBnexYfqHBhzz6YXA/S0EziYBu
225
+ // SIG // 2O2mM7R6gSyYkEOHgIGTVOGnOvvC5xBgC4KNcnQuQSRL
226
+ // SIG // iUI2CmzU8vefR6ykruyzt1rNMPI8OqWHQtSDKXU5JNqb
227
+ // SIG // k4GNjwzcwbSzOHrxuxWHq91l/vLdVDGDUwIDAQABo4IB
228
+ // SIG // czCCAW8wHwYDVR0lBBgwFgYKKwYBBAGCN0wIAQYIKwYB
229
+ // SIG // BQUHAwMwHQYDVR0OBBYEFEcccTTyBDxkjvJKs/m4AgEF
230
+ // SIG // hl7BMEUGA1UdEQQ+MDykOjA4MR4wHAYDVQQLExVNaWNy
231
+ // SIG // b3NvZnQgQ29ycG9yYXRpb24xFjAUBgNVBAUTDTIzMDAx
232
+ // SIG // Mis1MDE4MjYwHwYDVR0jBBgwFoAUSG5k5VAF04KqFzc3
233
+ // SIG // IrVtqMp1ApUwVAYDVR0fBE0wSzBJoEegRYZDaHR0cDov
234
+ // SIG // L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWlj
235
+ // SIG // Q29kU2lnUENBMjAxMV8yMDExLTA3LTA4LmNybDBhBggr
236
+ // SIG // BgEFBQcBAQRVMFMwUQYIKwYBBQUHMAKGRWh0dHA6Ly93
237
+ // SIG // d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWlj
238
+ // SIG // Q29kU2lnUENBMjAxMV8yMDExLTA3LTA4LmNydDAMBgNV
239
+ // SIG // HRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4ICAQCEsRbf
240
+ // SIG // 80dn60xTweOWHZoWaQdpzSaDqIvqpYHE5ZzuEMJWDdcP
241
+ // SIG // 72MGw8v6BSaJQ+a+hTCXdERnIBDPKvU4ENjgu4EBJocH
242
+ // SIG // lSe8riiZUAR+z+z4OUYqoFd3EqJyfjjOJBR2z94Dy4ss
243
+ // SIG // 7LEkHUbj2NZiFqBoPYu2OGQvEk+1oaUsnNKZ7Nl7FHtV
244
+ // SIG // 7CI2lHBru83e4IPe3glIi0XVZJT5qV6Gx/QhAFmpEVBj
245
+ // SIG // SAmDdgII4UUwuI9yiX6jJFNOEek6MoeP06LMJtbqA3Bq
246
+ // SIG // +ZWmJ033F97uVpyaiS4bj3vFI/ZBgDnMqNDtZjcA2vi4
247
+ // SIG // RRMweggd9vsHyTLpn6+nXoLy03vMeebq0C3k44pgUIEu
248
+ // SIG // PQUlJIRTe6IrN3GcjaZ6zHGuQGWgu6SyO9r7qkrEpS2p
249
+ // SIG // RjnGZjx2RmCamdAWnDdu+DmfNEPAddYjaJJ7PTnd+PGz
250
+ // SIG // G+WeH4ocWgVnm5fJFhItjj70CJjgHqt57e1FiQcyWCwB
251
+ // SIG // hKX2rGgN2UICHBF3Q/rsKOspjMw2OlGphTn2KmFl5J7c
252
+ // SIG // Qxru54A9roClLnHGCiSUYos/iwFHI/dAVXEh0S0KKfTf
253
+ // SIG // M6AC6/9bCbsD61QLcRzRIElvgCgaiMWFjOBL99pemoEl
254
+ // SIG // AHsyzG6uX93fMfas09N9YzA0/rFAKAsNDOcFbQlEHKiD
255
+ // SIG // T7mI20tVoCcmSIhJATCCB3owggVioAMCAQICCmEOkNIA
256
+ // SIG // AAAAAAMwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYT
257
+ // SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
258
+ // SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
259
+ // SIG // cG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290
260
+ // SIG // IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDExMB4XDTEx
261
+ // SIG // MDcwODIwNTkwOVoXDTI2MDcwODIxMDkwOVowfjELMAkG
262
+ // SIG // A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
263
+ // SIG // BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
264
+ // SIG // dCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9zb2Z0
265
+ // SIG // IENvZGUgU2lnbmluZyBQQ0EgMjAxMTCCAiIwDQYJKoZI
266
+ // SIG // hvcNAQEBBQADggIPADCCAgoCggIBAKvw+nIQHC6t2G6q
267
+ // SIG // ghBNNLrytlghn0IbKmvpWlCquAY4GgRJun/DDB7dN2vG
268
+ // SIG // EtgL8DjCmQawyDnVARQxQtOJDXlkh36UYCRsr55JnOlo
269
+ // SIG // XtLfm1OyCizDr9mpK656Ca/XllnKYBoF6WZ26DJSJhIv
270
+ // SIG // 56sIUM+zRLdd2MQuA3WraPPLbfM6XKEW9Ea64DhkrG5k
271
+ // SIG // NXimoGMPLdNAk/jj3gcN1Vx5pUkp5w2+oBN3vpQ97/vj
272
+ // SIG // K1oQH01WKKJ6cuASOrdJXtjt7UORg9l7snuGG9k+sYxd
273
+ // SIG // 6IlPhBryoS9Z5JA7La4zWMW3Pv4y07MDPbGyr5I4ftKd
274
+ // SIG // gCz1TlaRITUlwzluZH9TupwPrRkjhMv0ugOGjfdf8NBS
275
+ // SIG // v4yUh7zAIXQlXxgotswnKDglmDlKNs98sZKuHCOnqWbs
276
+ // SIG // YR9q4ShJnV+I4iVd0yFLPlLEtVc/JAPw0XpbL9Uj43Bd
277
+ // SIG // D1FGd7P4AOG8rAKCX9vAFbO9G9RVS+c5oQ/pI0m8GLhE
278
+ // SIG // fEXkwcNyeuBy5yTfv0aZxe/CHFfbg43sTUkwp6uO3+xb
279
+ // SIG // n6/83bBm4sGXgXvt1u1L50kppxMopqd9Z4DmimJ4X7Iv
280
+ // SIG // hNdXnFy/dygo8e1twyiPLI9AN0/B4YVEicQJTMXUpUMv
281
+ // SIG // dJX3bvh4IFgsE11glZo+TzOE2rCIF96eTvSWsLxGoGyY
282
+ // SIG // 0uDWiIwLAgMBAAGjggHtMIIB6TAQBgkrBgEEAYI3FQEE
283
+ // SIG // AwIBADAdBgNVHQ4EFgQUSG5k5VAF04KqFzc3IrVtqMp1
284
+ // SIG // ApUwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYD
285
+ // SIG // VR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
286
+ // SIG // BBgwFoAUci06AjGQQ7kUBU7h6qfHMdEjiTQwWgYDVR0f
287
+ // SIG // BFMwUTBPoE2gS4ZJaHR0cDovL2NybC5taWNyb3NvZnQu
288
+ // SIG // Y29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0
289
+ // SIG // MjAxMV8yMDExXzAzXzIyLmNybDBeBggrBgEFBQcBAQRS
290
+ // SIG // MFAwTgYIKwYBBQUHMAKGQmh0dHA6Ly93d3cubWljcm9z
291
+ // SIG // b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0MjAx
292
+ // SIG // MV8yMDExXzAzXzIyLmNydDCBnwYDVR0gBIGXMIGUMIGR
293
+ // SIG // BgkrBgEEAYI3LgMwgYMwPwYIKwYBBQUHAgEWM2h0dHA6
294
+ // SIG // Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvZG9jcy9w
295
+ // SIG // cmltYXJ5Y3BzLmh0bTBABggrBgEFBQcCAjA0HjIgHQBM
296
+ // SIG // AGUAZwBhAGwAXwBwAG8AbABpAGMAeQBfAHMAdABhAHQA
297
+ // SIG // ZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEA
298
+ // SIG // Z/KGpZjgVHkaLtPYdGcimwuWEeFjkplCln3SeQyQwWVf
299
+ // SIG // Liw++MNy0W2D/r4/6ArKO79HqaPzadtjvyI1pZddZYSQ
300
+ // SIG // fYtGUFXYDJJ80hpLHPM8QotS0LD9a+M+By4pm+Y9G6XU
301
+ // SIG // tR13lDni6WTJRD14eiPzE32mkHSDjfTLJgJGKsKKELuk
302
+ // SIG // qQUMm+1o+mgulaAqPyprWEljHwlpblqYluSD9MCP80Yr
303
+ // SIG // 3vw70L01724lruWvJ+3Q3fMOr5kol5hNDj0L8giJ1h/D
304
+ // SIG // Mhji8MUtzluetEk5CsYKwsatruWy2dsViFFFWDgycSca
305
+ // SIG // f7H0J/jeLDogaZiyWYlobm+nt3TDQAUGpgEqKD6CPxNN
306
+ // SIG // ZgvAs0314Y9/HG8VfUWnduVAKmWjw11SYobDHWM2l4bf
307
+ // SIG // 2vP48hahmifhzaWX0O5dY0HjWwechz4GdwbRBrF1HxS+
308
+ // SIG // YWG18NzGGwS+30HHDiju3mUv7Jf2oVyW2ADWoUa9WfOX
309
+ // SIG // pQlLSBCZgB/QACnFsZulP0V3HjXG0qKin3p6IvpIlR+r
310
+ // SIG // +0cjgPWe+L9rt0uX4ut1eBrs6jeZeRhL/9azI2h15q/6
311
+ // SIG // /IvrC4DqaTuv/DDtBEyO3991bWORPdGdVk5Pv4BXIqF4
312
+ // SIG // ETIheu9BCrE/+6jMpF3BoYibV3FWTkhFwELJm3ZbCoBI
313
+ // SIG // a/15n8G9bW1qyVJzEw16UM0xghmfMIIZmwIBATCBlTB+
314
+ // SIG // MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
315
+ // SIG // bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
316
+ // SIG // cm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNy
317
+ // SIG // b3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExAhMzAAAD
318
+ // SIG // rzBADkyjTQVBAAAAAAOvMA0GCWCGSAFlAwQCAQUAoIGu
319
+ // SIG // MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
320
+ // SIG // AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3
321
+ // SIG // DQEJBDEiBCCMCP2FmgEKJREsgBE+TZ+sOgId8o8fZV6D
322
+ // SIG // dCCfW2FDLTBCBgorBgEEAYI3AgEMMTQwMqAUgBIATQBp
323
+ // SIG // AGMAcgBvAHMAbwBmAHShGoAYaHR0cDovL3d3dy5taWNy
324
+ // SIG // b3NvZnQuY29tMA0GCSqGSIb3DQEBAQUABIIBALLhra/Q
325
+ // SIG // XBfDPeiEQUGOa+fURbUANR25YYEQOQBWHkT+JP4iMKc9
326
+ // SIG // PL2/MHL6wpaBqaMmC0bT3a9J4tRpFfbEHcJFl9rY4Xid
327
+ // SIG // F1nSLBxzXpmdcMTmIHd19BFtz7X7WUlzmGJ3BSIzdMFN
328
+ // SIG // KyRI/wUyqFlibJChWxh7wLvrxsTR8PqXmMeHdYc9kiE8
329
+ // SIG // tGkA/QJd4OyFEEvdJmFDiMeOmGHfCO9Lgw8p6TiMLXS+
330
+ // SIG // RKxg8F64k5r0UsnQh2XuGMl/u+TY315eI4y3DUkSDQBH
331
+ // SIG // EXcjkYw9zY6168EYZFcLYuzXZWX+JFqKM03Xcsxm1fQz
332
+ // SIG // TVYy4jGM5Zwkf3uF9+Q1SVYidnuhghcpMIIXJQYKKwYB
333
+ // SIG // BAGCNwMDATGCFxUwghcRBgkqhkiG9w0BBwKgghcCMIIW
334
+ // SIG // /gIBAzEPMA0GCWCGSAFlAwQCAQUAMIIBWQYLKoZIhvcN
335
+ // SIG // AQkQAQSgggFIBIIBRDCCAUACAQEGCisGAQQBhFkKAwEw
336
+ // SIG // MTANBglghkgBZQMEAgEFAAQgk0/E28WjFnfrpx3E+QHr
337
+ // SIG // fGhudiXIa+m1GCYVndcwIL4CBmZzEYRF9RgTMjAyNDA2
338
+ // SIG // MjcwNjI0NDIuMTUxWjAEgAIB9KCB2KSB1TCB0jELMAkG
339
+ // SIG // A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
340
+ // SIG // BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
341
+ // SIG // dCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0
342
+ // SIG // IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYD
343
+ // SIG // VQQLEx1UaGFsZXMgVFNTIEVTTjpEMDgyLTRCRkQtRUVC
344
+ // SIG // QTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg
345
+ // SIG // U2VydmljZaCCEXgwggcnMIIFD6ADAgECAhMzAAAB3MHg
346
+ // SIG // jMJfWF6OAAEAAAHcMA0GCSqGSIb3DQEBCwUAMHwxCzAJ
347
+ // SIG // BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
348
+ // SIG // DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
349
+ // SIG // ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m
350
+ // SIG // dCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTIzMTAxMjE5
351
+ // SIG // MDcwNloXDTI1MDExMDE5MDcwNlowgdIxCzAJBgNVBAYT
352
+ // SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
353
+ // SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
354
+ // SIG // cG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVs
355
+ // SIG // YW5kIE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UECxMd
356
+ // SIG // VGhhbGVzIFRTUyBFU046RDA4Mi00QkZELUVFQkExJTAj
357
+ // SIG // BgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZp
358
+ // SIG // Y2UwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
359
+ // SIG // AQCLyLMgNbI4PZEiic3pa1FheUoamFi/N2pp90hOSciF
360
+ // SIG // T1Auxeqk3C6YYR2fYnX9tX9EWhq1PBB8nRfDcTzEdilT
361
+ // SIG // YgLQhjyWvJFdQhr5923hgdptpbZqiWpxu9ZgMsK5CgE2
362
+ // SIG // J4sCiz0CydNBJF8OU0sH5iV23YECxZR8nwOSoPqVLCV8
363
+ // SIG // 6rppCLxK9A1z76bQBqpHRSysKOAU5RIJ783k317pM1/L
364
+ // SIG // 0LUwC31Sbk1IEVO86D/0RVrd1moGoWelJaCNBQvF5QUA
365
+ // SIG // 1Q1+SXjBLMe44CQ3RJyuOGPIB7hFkQ6vkhvV6NBiDo4r
366
+ // SIG // k1g+br975RJiAMkf+60hb3C58AKjHanMv4qkDzJQznHd
367
+ // SIG // AG54j/ImtQUBFJ32U91Mcivaywf0kYij8hw5YPKFsF8o
368
+ // SIG // r9/mxgenZnTOtbq+p1LXw3+dZT3CoSuFaPN6ThNf54lp
369
+ // SIG // VZxB0FfTSefw21Eqltkak1Gtjtirr7MkRjBIIxiQNdv0
370
+ // SIG // qq0apbxNn4jeWZmVbakj1miGrMe2tBgfn3U8PoHkZ+jK
371
+ // SIG // Nkuvv22RMEv9CCeYHChopzW38kNca71lz7V8yjn45Ie+
372
+ // SIG // Ykbl6LqxlT0apJs+VGM/kecmzCVo/pn3Bqs9oV1fImZw
373
+ // SIG // mQwa652Yr5xKwjIeRZX4POPeqU9KYY1Ex9hgoRyLxOEg
374
+ // SIG // 0pNocFj/7hwfYBLPKf/T3v5rfQIDAQABo4IBSTCCAUUw
375
+ // SIG // HQYDVR0OBBYEFOhz0gXdDnxF97jVrHZEq2lBnt3bMB8G
376
+ // SIG // A1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8G
377
+ // SIG // A1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9z
378
+ // SIG // b2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRp
379
+ // SIG // bWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBsBggr
380
+ // SIG // BgEFBQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93
381
+ // SIG // d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWlj
382
+ // SIG // cm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAo
383
+ // SIG // MSkuY3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAww
384
+ // SIG // CgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
385
+ // SIG // SIb3DQEBCwUAA4ICAQDZ62/BMK/Hl/x9bCrd658Ew8eA
386
+ // SIG // KoB25DDUKPpFBsAiDV0t8tRlHHarCv0dYOk3+7TcdatD
387
+ // SIG // aSpNSU7qVCXx3RMSrZLoRwPvNpU+8iEqf2O+HaidN0Qk
388
+ // SIG // +EPvKKEF0zM8YnsHxK1S7fFnn3m53Ek9IusqSr/O6QmJ
389
+ // SIG // MTNuG26mzP1fjOVQaaQlLO0fnBE4s/8xANQG2S/74l7R
390
+ // SIG // 5q8gNAhnfj7fXPmnbGH5u6nuVDJ0tH/2CZhBDJBKhlws
391
+ // SIG // 8iyvnYflLBYtHeJZHXBPmauSTYyB3rF9cM7RlQLb19A2
392
+ // SIG // A2XTdlmdZJPoTjG5VFfy/J9WFs4T/+V0J2JdNwH1xK5/
393
+ // SIG // tRGrcpYn83dwoSdcbhhu+mG1oIkV5w7wosA6r1CXr1UW
394
+ // SIG // NasuMuL5VSmkobW3X4D8hnnif2HEgTjTnNAzU1m4zGy+
395
+ // SIG // dKniBAtJR0qS9q0WDVbt4bB8xvJ+buQkGoz8MfT86bGS
396
+ // SIG // HhUzR8lRepLoyOFaPTbzv8xfDreOCDI+DO1F/WWuEMBn
397
+ // SIG // +Qe9ceezo2l+d4MU+L86B7xAVxfagph0YFwS20aJiXw5
398
+ // SIG // +tGpc7+3aQlUCLkNOtp8iGSp7F8c7ihW9E411sOjhaRt
399
+ // SIG // W7I16TqOQzB5MrK4m8R6K+GM+XWY1chwDciqNG0qwJVX
400
+ // SIG // ooXGhuRe+EmU/BbchwFuiIC3OcP9w/kdaGw4SmdtVjCC
401
+ // SIG // B3EwggVZoAMCAQICEzMAAAAVxedrngKbSZkAAAAAABUw
402
+ // SIG // DQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMw
403
+ // SIG // EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
404
+ // SIG // b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
405
+ // SIG // b24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRp
406
+ // SIG // ZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkzMDE4
407
+ // SIG // MjIyNVoXDTMwMDkzMDE4MzIyNVowfDELMAkGA1UEBhMC
408
+ // SIG // VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
409
+ // SIG // B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
410
+ // SIG // b3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUt
411
+ // SIG // U3RhbXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEBAQUA
412
+ // SIG // A4ICDwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9DtWC
413
+ // SIG // 0/3unAcH0qlsTnXIyjVX9gF/bErg4r25PhdgM/9cT8dm
414
+ // SIG // 95VTcVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjoYH1qUoNE
415
+ // SIG // t6aORmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP2CZT
416
+ // SIG // fDlhAnrEqv1yaa8dq6z2Nr41JmTamDu6GnszrYBbfowQ
417
+ // SIG // HJ1S/rboYiXcag/PXfT+jlPP1uyFVk3v3byNpOORj7I5
418
+ // SIG // LFGc6XBpDco2LXCOMcg1KL3jtIckw+DJj361VI/c+gVV
419
+ // SIG // mG1oO5pGve2krnopN6zL64NF50ZuyjLVwIYwXE8s4mKy
420
+ // SIG // zbnijYjklqwBSru+cakXW2dg3viSkR4dPf0gz3N9QZpG
421
+ // SIG // dc3EXzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+Nuw2
422
+ // SIG // TPYrbqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjtp+iZ
423
+ // SIG // fD9M269ewvPV2HM9Q07BMzlMjgK8QmguEOqEUUbi0b1q
424
+ // SIG // GFphAXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJNmSL
425
+ // SIG // W6CmgyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLU
426
+ // SIG // HMVr9lxSUV0S2yW6r1AFemzFER1y7435UsSFF5PAPBXb
427
+ // SIG // GjfHCBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIurQID
428
+ // SIG // AQABo4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEAATAj
429
+ // SIG // BgkrBgEEAYI3FQIEFgQUKqdS/mTEmr6CkTxGNSnPEP8v
430
+ // SIG // BO4wHQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWnG1M1Gely
431
+ // SIG // MFwGA1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEwPwYI
432
+ // SIG // KwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNv
433
+ // SIG // bS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTATBgNV
434
+ // SIG // HSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4K
435
+ // SIG // AFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
436
+ // SIG // BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2U
437
+ // SIG // kFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8v
438
+ // SIG // Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0
439
+ // SIG // cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYI
440
+ // SIG // KwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8v
441
+ // SIG // d3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jv
442
+ // SIG // b0NlckF1dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG9w0B
443
+ // SIG // AQsFAAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv6lwU
444
+ // SIG // tj5OR2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsPMeTC
445
+ // SIG // j/ts0aGUGCLu6WZnOlNN3Zi6th542DYunKmCVgADsAW+
446
+ // SIG // iehp4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1bSNU5HhT
447
+ // SIG // dSRXud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/GbYS
448
+ // SIG // EhFdPSfgQJY4rPf5KYnDvBewVIVCs/wMnosZiefwC2qB
449
+ // SIG // woEZQhlSdYo2wh3DYXMuLGt7bj8sCXgU6ZGyqVvfSaN0
450
+ // SIG // DLzskYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT99kxy
451
+ // SIG // bxCrdTDFNLB62FD+CljdQDzHVG2dY3RILLFORy3BFARx
452
+ // SIG // v2T5JL5zbcqOCb2zAVdJVGTZc9d/HltEAY5aGZFrDZ+k
453
+ // SIG // KNxnGSgkujhLmm77IVRrakURR6nxt67I6IleT53S0Ex2
454
+ // SIG // tVdUCbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6Tvsv4
455
+ // SIG // O+S3Fb+0zj6lMVGEvL8CwYKiexcdFYmNcP7ntdAoGokL
456
+ // SIG // jzbaukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9JZTm
457
+ // SIG // dHRbatGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/Z
458
+ // SIG // cGNTTY3ugm2lBRDBcQZqELQdVTNYs6FwZvKhggLUMIIC
459
+ // SIG // PQIBATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMw
460
+ // SIG // EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
461
+ // SIG // b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
462
+ // SIG // b24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9w
463
+ // SIG // ZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVz
464
+ // SIG // IFRTUyBFU046RDA4Mi00QkZELUVFQkExJTAjBgNVBAMT
465
+ // SIG // HE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoB
466
+ // SIG // ATAHBgUrDgMCGgMVABw5/3M/t8kZCFAiX0my93Y50BKm
467
+ // SIG // oIGDMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
468
+ // SIG // Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
469
+ // SIG // BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG
470
+ // SIG // A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIw
471
+ // SIG // MTAwDQYJKoZIhvcNAQEFBQACBQDqJ3KFMCIYDzIwMjQw
472
+ // SIG // NjI3MTMwOTI1WhgPMjAyNDA2MjgxMzA5MjVaMHQwOgYK
473
+ // SIG // KwYBBAGEWQoEATEsMCowCgIFAOoncoUCAQAwBwIBAAIC
474
+ // SIG // BY4wBwIBAAICErAwCgIFAOooxAUCAQAwNgYKKwYBBAGE
475
+ // SIG // WQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAweh
476
+ // SIG // IKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQAo
477
+ // SIG // BMOzwcOrRYp6ZGXgIZLQUtxg8deMupSH/D728t1XS2Q1
478
+ // SIG // 4Z3Tjs6knpFQXSBfr9UW8FWKe8h2rc26UsDp6kJ1C4+w
479
+ // SIG // brtKmjLq7aXuZtdHpGShf5LF6n2j1xaZV8hPIaeqTieu
480
+ // SIG // 8iAH4UoCnFvbVtkaWLFLCOlddydXRTQxsfIkSzGCBA0w
481
+ // SIG // ggQJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
482
+ // SIG // EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w
483
+ // SIG // HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAk
484
+ // SIG // BgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAy
485
+ // SIG // MDEwAhMzAAAB3MHgjMJfWF6OAAEAAAHcMA0GCWCGSAFl
486
+ // SIG // AwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcN
487
+ // SIG // AQkQAQQwLwYJKoZIhvcNAQkEMSIEIA/iFEgybfnsL4Vt
488
+ // SIG // xIlhpdMiI4og+0inXLx3j9Vb1KF4MIH6BgsqhkiG9w0B
489
+ // SIG // CRACLzGB6jCB5zCB5DCBvQQgU6cXimrZRD+MvKmc47li
490
+ // SIG // 9DrtCKsRCw4V9ky8pcSCDTcwgZgwgYCkfjB8MQswCQYD
491
+ // SIG // VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
492
+ // SIG // A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
493
+ // SIG // IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg
494
+ // SIG // VGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAdzB4IzCX1he
495
+ // SIG // jgABAAAB3DAiBCB78//sVVmuyOquZ8b6YPr96aC+b6b2
496
+ // SIG // jI6HRoH+35mGHDANBgkqhkiG9w0BAQsFAASCAgA9TTUn
497
+ // SIG // 1dJ593OfJw0sCk3veyMbOtfP7yLWozqdU1ZpY/QnLxkY
498
+ // SIG // ETcD4k+GPP29fwt4ZMHbKQazc9pW50nG1BpLKyL/3u0Z
499
+ // SIG // bWFec1MN/u8WSb7ds94pgB0wqaOsFAMr1ptBpYaXjvut
500
+ // SIG // p5pVHoHUDWvjTd62oHDYxzT14Qxx30D+PHpk6yCrGC7+
501
+ // SIG // zVrXh5+qdx2DaHQDOhqEQJye7VCYpdeu2w4/BVuPvZe2
502
+ // SIG // K2U+cnLcpg64GRbhvVTL0c4ls7LpsWpx3XRDm+y9dwyc
503
+ // SIG // hQ5PRSnGFPmC27g5RdoX0v9nqfND66/VYm9unLnClMWv
504
+ // SIG // BwMVKajRCWCPes+9VP/MPi2NUdbs6S4KrumIN3TfYdyo
505
+ // SIG // PQog94veIcnqD5CYzRM0YzlnnLkfS2Ibvfj941Iug+X7
506
+ // SIG // qzEmQEtpy+6DS1rWVtAebMyZcPGrVcoUzHzPZ686zDai
507
+ // SIG // 6PIj39Chv/tFIJS4armZorl7lWqxHw2MPthxilzUX55S
508
+ // SIG // VluB/keSKs1zbJpAh4JFvZPa7BJ/JghhEFyz0js2LuT8
509
+ // SIG // UE7HASBP5T8iD5p2c5YcwWivp/yxnXS1XT+Sp6Rdo09+
510
+ // SIG // lDyT0r12LKxhcnKSTATpFWkoi8PhA0MqdI1Kp2xw/5g4
511
+ // SIG // NPMDlW52Dcxc5wXAEasX7pRTS7JoKJmkNRi2O/J9JyZQ
512
+ // SIG // PyWy2/TcAAzt34Kwnw==
513
+ // SIG // End signature block
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/tools/gulp-update-notes-resource/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["'use strict';\r\n\r\nimport { Buffer } from 'buffer';\r\nimport fs from 'fs';\r\nimport log from 'fancy-log';\r\nimport pluginError from 'plugin-error';\r\nimport through2 from 'through2';\r\nimport Vinyl from 'vinyl';\r\nimport * as util from '../utilities';\r\n\r\nconst PLUGIN_NAME = 'gulp-update-notes-resource';\r\n\r\ninterface Options {\r\n /**\r\n * resource name.\r\n */\r\n resourceName: string;\r\n\r\n /**\r\n * path of update notes file.\r\n */\r\n updateNotes: string;\r\n\r\n /**\r\n * depth of folder structure from the locale folder. (default is 1)\r\n */\r\n localeOffset: number;\r\n}\r\n\r\nfunction gulpUpdateNotesResources(options: Options) {\r\n function findResourceKey(node: any, results: string[]): void {\r\n const match = 'resources:strings:';\r\n const keys = Object.keys(node);\r\n if (keys && keys.length > 0) {\r\n keys.forEach(key => {\r\n const target = node[key];\r\n if (target) {\r\n if (typeof target === 'string') {\r\n if (target.indexOf(match) === 0) {\r\n const value = target.substring(match.length);\r\n if (results.indexOf(value) < 0) {\r\n results.push(value);\r\n }\r\n }\r\n } else {\r\n findResourceKey(target, results);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // override options settings if not specified.\r\n options = <Options>Object.assign(\r\n {\r\n updateNotes: 'packages/shell/src/assets/updates/update-notes.json',\r\n localeOffset: 1\r\n },\r\n options || {});\r\n\r\n const resources: any = {};\r\n const keyToResources: any = {};\r\n\r\n return through2.obj(\r\n /**\r\n * Transform\r\n */\r\n function (file, encoding, callback) {\r\n let locale = 'default';\r\n if (resources.default) {\r\n // if default is set already, find current locale from the file path.\r\n const pathSegments = file.history[0].split('\\\\');\r\n locale = pathSegments[pathSegments.length - (2 + options.localeOffset)];\r\n }\r\n\r\n resources[locale] = {};\r\n if (resources.default) {\r\n // if default is set already, pre-fill all resource items from default.\r\n for (const resourceId in resources.default) {\r\n if (resources.default.hasOwnProperty(resourceId)) {\r\n resources[locale][resourceId] = resources.default[resourceId];\r\n }\r\n }\r\n }\r\n\r\n // remove comments, /* multiline comment */ and // one line comment and \"//\": \"JSON element comment\"\r\n const content = file.contents.toString('utf8')\r\n .replace(/(\\/\\*([^*]|[\\n]|(\\*+([^*/]|[\\n])))*\\*\\/+)|( +\\/\\/.*)|( +\\\"\\/\\/\\\".*)/g, '');\r\n const object = JSON.parse(content);\r\n if (object[options.resourceName] && object[options.resourceName]['App']['UpdateNotes']) {\r\n // supports <ResourceName>.Manifest.<KeyName> format.\r\n const items = object[options.resourceName]['App']['UpdateNotes'];\r\n for (const key in items) {\r\n if (items.hasOwnProperty(key)) {\r\n // Each key will have two children, title and description\r\n // no need to separate in JSON form\r\n resources[locale][key] = items[key];\r\n\r\n // Used to keep an alternate mapping we use later\r\n if (!keyToResources.hasOwnProperty(key)) {\r\n keyToResources[key] = {};\r\n }\r\n\r\n if (keyToResources.hasOwnProperty(key) &&\r\n !keyToResources[key].hasOwnProperty(locale)) {\r\n keyToResources[key][locale] = {};\r\n }\r\n keyToResources[key][locale] = items[key];\r\n }\r\n }\r\n } else {\r\n // supports <ResourceName>_App_UpdateNotes format.\r\n const resourceUpdateNotes = options.resourceName + '_App_UpdateNotes_';\r\n for (const name in object) {\r\n if (object.hasOwnProperty(name)) {\r\n const index = name.indexOf(resourceUpdateNotes);\r\n if (index === 0) {\r\n // Check if this resource has the specific substring or not\r\n const value = object[name];\r\n\r\n // If it contains '_' we split it so we keep only the key\r\n const resourceId2 = name.substring(resourceUpdateNotes.length);\r\n\r\n // Split to separate <KeyValue>_<type>\r\n // Possible types are title or description\r\n const splitText = resourceId2.split('_');\r\n\r\n const key = splitText[0];\r\n const type = splitText[1];\r\n if (!resources[locale].hasOwnProperty(key)) {\r\n resources[locale][key] = {};\r\n }\r\n resources[locale][key][type] = value;\r\n\r\n // Used to keep a mapping of keys to resources for faster\r\n // processing later\r\n if (!keyToResources.hasOwnProperty(key)) {\r\n keyToResources[key] = {};\r\n }\r\n\r\n if (keyToResources.hasOwnProperty(key) &&\r\n !keyToResources[key].hasOwnProperty(locale)) {\r\n keyToResources[key][locale] = {};\r\n }\r\n keyToResources[key][locale][type] = value;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return callback();\r\n },\r\n\r\n /**\r\n * Flush\r\n */\r\n function (callback) {\r\n try {\r\n const updateNotesObject = JSON.parse(fs.readFileSync(options.updateNotes, 'utf8'));\r\n\r\n const keys: string[] = [];\r\n findResourceKey(updateNotesObject, keys);\r\n const missingType: string[] = [];\r\n const missing: string[] = [];\r\n const unused: string[] = Object.keys(resources.default);\r\n\r\n keys.forEach(function (key) {\r\n const index = unused.indexOf(key);\r\n if (index >= 0) {\r\n // If the item exists, remove it from the unused set\r\n unused.splice(index, 1);\r\n\r\n // We have to check each item has a title and description\r\n const typeKeys = Object.keys(keyToResources[key].default);\r\n const requiredTypesSet = new Set();\r\n requiredTypesSet.add('title');\r\n requiredTypesSet.add('description');\r\n typeKeys.forEach(item => {\r\n if (requiredTypesSet.has(item)) {\r\n requiredTypesSet.delete(item);\r\n }\r\n });\r\n\r\n // If it did not have we save it throw error later\r\n if (requiredTypesSet.size > 0) {\r\n missingType.push(key);\r\n }\r\n } else {\r\n missing.push(key);\r\n }\r\n });\r\n\r\n if (missing.length > 0) {\r\n missing.forEach(item => {\r\n log.error('Missing resource: ' + item);\r\n });\r\n throw new Error('Missing resource found in manifest.json!');\r\n }\r\n\r\n if (unused.length > 0) {\r\n unused.forEach(item => {\r\n log.error('Unused resource: ' + item);\r\n });\r\n throw new Error('Unused resource found in strings.resjson!');\r\n }\r\n\r\n if (missingType.length > 0) {\r\n missingType.forEach(item => {\r\n log.error('Missing title or description: ' + item);\r\n });\r\n throw new Error('Key without title or description found in strings.resjson!');\r\n }\r\n\r\n updateNotesObject.map((item, index) => {\r\n if (item.hasOwnProperty('stringJsonKey')) {\r\n const key = item.stringJsonKey.replace('resources:strings:', '');\r\n // Key to resource maps key -> all locales\r\n item.resources = keyToResources[key];\r\n }\r\n updateNotesObject[index] = item;\r\n });\r\n\r\n const updateNotesFile = new Vinyl({\r\n cwd: '.',\r\n base: '.',\r\n path: './update-notes.json',\r\n contents: Buffer.from(JSON.stringify(updateNotesObject, null, 2), 'utf8')\r\n });\r\n\r\n this.push(updateNotesFile);\r\n } catch (e) {\r\n const error = (!e.plugin || (e.plugin !== PLUGIN_NAME)) ?\r\n util.extendError(new pluginError({ plugin: PLUGIN_NAME, message: e.message }), e) : e;\r\n log.error(error);\r\n }\r\n\r\n callback();\r\n });\r\n}\r\n\r\nmodule.exports = gulpUpdateNotesResources;\r\n"]}
1
+ {"version":3,"sources":["../../../packages/tools/gulp-update-notes-resource/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["'use strict';\r\n\r\nimport { Buffer } from 'buffer';\r\nimport fs from 'fs';\r\nimport log from 'fancy-log';\r\nimport pluginError from 'plugin-error';\r\nimport through2 from 'through2';\r\nimport Vinyl from 'vinyl';\r\nimport * as util from '../utilities';\r\n\r\nconst PLUGIN_NAME = 'gulp-update-notes-resource';\r\n\r\ninterface Options {\r\n /**\r\n * resource name.\r\n */\r\n resourceName: string;\r\n\r\n /**\r\n * path of update notes file.\r\n */\r\n updateNotes: string;\r\n\r\n /**\r\n * depth of folder structure from the locale folder. (default is 1)\r\n */\r\n localeOffset: number;\r\n}\r\n\r\nfunction gulpUpdateNotesResources(options: Options) {\r\n function findResourceKey(node: any, results: string[]): void {\r\n const match = 'resources:strings:';\r\n const keys = Object.keys(node);\r\n if (keys && keys.length > 0) {\r\n keys.forEach(key => {\r\n const target = node[key];\r\n if (target) {\r\n if (typeof target === 'string') {\r\n if (target.indexOf(match) === 0) {\r\n const value = target.substring(match.length);\r\n if (results.indexOf(value) < 0) {\r\n results.push(value);\r\n }\r\n }\r\n } else {\r\n findResourceKey(target, results);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // override options settings if not specified.\r\n options = <Options>Object.assign(\r\n {\r\n updateNotes: 'packages/shell/src/assets/updates/update-notes.json',\r\n localeOffset: 1\r\n },\r\n options || {});\r\n\r\n const resources: any = {};\r\n const keyToResources: any = {};\r\n\r\n return through2.obj(\r\n /**\r\n * Transform\r\n */\r\n function (file, encoding, callback) {\r\n let locale = 'default';\r\n if (resources.default) {\r\n // if default is set already, find current locale from the file path.\r\n const pathSegments = file.history[0].split('\\\\');\r\n locale = pathSegments[pathSegments.length - (2 + options.localeOffset)];\r\n }\r\n\r\n resources[locale] = {};\r\n if (resources.default) {\r\n // if default is set already, pre-fill all resource items from default.\r\n for (const resourceId in resources.default) {\r\n if (resources.default.hasOwnProperty(resourceId)) {\r\n resources[locale][resourceId] = resources.default[resourceId];\r\n }\r\n }\r\n }\r\n\r\n // remove comments, /* multiline comment */ and // one line comment and \"//\": \"JSON element comment\"\r\n const content = file.contents.toString('utf8')\r\n .replace(/(\\/\\*([^*]|[\\n]|(\\*+([^*/]|[\\n])))*\\*\\/+)|( +\\/\\/.*)|( +\\\"\\/\\/\\\".*)/g, '');\r\n const object = JSON.parse(content);\r\n if (object[options.resourceName] && object[options.resourceName]['App']['UpdateNotes']) {\r\n // supports <ResourceName>.Manifest.<KeyName> format.\r\n const items = object[options.resourceName]['App']['UpdateNotes'];\r\n for (const key in items) {\r\n if (items.hasOwnProperty(key)) {\r\n // Each key will have two children, title and description\r\n // no need to separate in JSON form\r\n resources[locale][key] = items[key];\r\n\r\n // Used to keep an alternate mapping we use later\r\n if (!keyToResources.hasOwnProperty(key)) {\r\n keyToResources[key] = {};\r\n }\r\n\r\n if (keyToResources.hasOwnProperty(key) &&\r\n !keyToResources[key].hasOwnProperty(locale)) {\r\n keyToResources[key][locale] = {};\r\n }\r\n keyToResources[key][locale] = items[key];\r\n }\r\n }\r\n } else {\r\n // supports <ResourceName>_App_UpdateNotes format.\r\n const resourceUpdateNotes = options.resourceName + '_App_UpdateNotes_';\r\n for (const name in object) {\r\n if (object.hasOwnProperty(name)) {\r\n const index = name.indexOf(resourceUpdateNotes);\r\n if (index === 0) {\r\n // Check if this resource has the specific substring or not\r\n const value = object[name];\r\n\r\n // If it contains '_' we split it so we keep only the key\r\n const resourceId2 = name.substring(resourceUpdateNotes.length);\r\n\r\n // Split to separate <KeyValue>_<type>\r\n // Possible types are title or description\r\n const splitText = resourceId2.split('_');\r\n\r\n const key = splitText[0];\r\n const type = splitText[1];\r\n if (!resources[locale].hasOwnProperty(key)) {\r\n resources[locale][key] = {};\r\n }\r\n resources[locale][key][type] = value;\r\n\r\n // Used to keep a mapping of keys to resources for faster\r\n // processing later\r\n if (!keyToResources.hasOwnProperty(key)) {\r\n keyToResources[key] = {};\r\n }\r\n\r\n if (keyToResources.hasOwnProperty(key) &&\r\n !keyToResources[key].hasOwnProperty(locale)) {\r\n keyToResources[key][locale] = {};\r\n }\r\n keyToResources[key][locale][type] = value;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return callback();\r\n },\r\n\r\n /**\r\n * Flush\r\n */\r\n function (callback) {\r\n try {\r\n const updateNotesObject = JSON.parse(fs.readFileSync(options.updateNotes, 'utf8'));\r\n\r\n const keys: string[] = [];\r\n findResourceKey(updateNotesObject, keys);\r\n const missingType: string[] = [];\r\n const missing: string[] = [];\r\n const unused: string[] = Object.keys(resources.default);\r\n\r\n keys.forEach(function (key) {\r\n const index = unused.indexOf(key);\r\n if (index >= 0) {\r\n // If the item exists, remove it from the unused set\r\n unused.splice(index, 1);\r\n\r\n // We have to check each item has a title and description\r\n const typeKeys = Object.keys(keyToResources[key].default);\r\n const requiredTypesSet = new Set();\r\n requiredTypesSet.add('title');\r\n requiredTypesSet.add('description');\r\n typeKeys.forEach(item => {\r\n if (requiredTypesSet.has(item)) {\r\n requiredTypesSet.delete(item);\r\n }\r\n });\r\n\r\n // If it did not have we save it throw error later\r\n if (requiredTypesSet.size > 0) {\r\n missingType.push(key);\r\n }\r\n } else {\r\n missing.push(key);\r\n }\r\n });\r\n\r\n if (missing.length > 0) {\r\n missing.forEach(item => {\r\n log.error('Missing resource (update-notes.json): ' + item);\r\n });\r\n throw new Error('Missing resource found in manifest.json!');\r\n }\r\n\r\n if (unused.length > 0) {\r\n // allow to use unused resources to share the same strings.json between GWv1 and GWv2.\r\n unused.forEach(item => {\r\n log.warn('Unused resource (update-notes.json): ' + item);\r\n });\r\n }\r\n\r\n if (missingType.length > 0) {\r\n missingType.forEach(item => {\r\n log.error('Missing title or description (update-notes.json): ' + item);\r\n });\r\n throw new Error('Key without title or description found in strings.resjson!');\r\n }\r\n\r\n updateNotesObject.map((item, index) => {\r\n if (item.hasOwnProperty('stringJsonKey')) {\r\n const key = item.stringJsonKey.replace('resources:strings:', '');\r\n // Key to resource maps key -> all locales\r\n item.resources = keyToResources[key];\r\n }\r\n updateNotesObject[index] = item;\r\n });\r\n\r\n const updateNotesFile = new Vinyl({\r\n cwd: '.',\r\n base: '.',\r\n path: './update-notes.json',\r\n contents: Buffer.from(JSON.stringify(updateNotesObject, null, 2), 'utf8')\r\n });\r\n\r\n this.push(updateNotesFile);\r\n } catch (e) {\r\n const error = (!e.plugin || (e.plugin !== PLUGIN_NAME)) ?\r\n util.extendError(new pluginError({ plugin: PLUGIN_NAME, message: e.message }), e) : e;\r\n log.error(error);\r\n }\r\n\r\n callback();\r\n });\r\n}\r\n\r\nmodule.exports = gulpUpdateNotesResources;\r\n"]}
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "./node_modules/@microsoft/windows-admin-center-sdk/tools/code-formatter/.eslintrc.base.json"
3
+ }