@ms-cloudpack/overlay 0.16.113 → 0.17.1

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 (42) hide show
  1. package/dist/browser-esm/lib/index.js +113 -204
  2. package/dist/browser-esm/lib/index.js.map +4 -4
  3. package/dist/browser-esm/ori-output.json +53 -67
  4. package/dist/browser-esm/result.json +1 -1
  5. package/lib/components/CloudpackProvider/CloudpackProvider.d.ts +3 -2
  6. package/lib/components/CloudpackProvider/CloudpackProvider.d.ts.map +1 -1
  7. package/lib/components/CloudpackProvider/CloudpackProvider.js +2 -4
  8. package/lib/components/CloudpackProvider/CloudpackProvider.js.map +1 -1
  9. package/lib/components/CloudpackProvider/useStatus.d.ts.map +1 -1
  10. package/lib/components/CloudpackProvider/useStatus.js +12 -3
  11. package/lib/components/CloudpackProvider/useStatus.js.map +1 -1
  12. package/lib/components/CloudpackProvider/useStatusDetails.d.ts +52 -16
  13. package/lib/components/CloudpackProvider/useStatusDetails.d.ts.map +1 -1
  14. package/lib/components/CloudpackProvider/useStatusDetails.js +11 -2
  15. package/lib/components/CloudpackProvider/useStatusDetails.js.map +1 -1
  16. package/lib/components/ErrorDialog/ErrorDialog.js +1 -1
  17. package/lib/components/ErrorDialog/ErrorDialog.js.map +1 -1
  18. package/lib/components/ErrorDialog/PathError.js +2 -2
  19. package/lib/components/ErrorDialog/PathError.js.map +1 -1
  20. package/lib/components/ErrorDialog/useErrorEvents.js +1 -1
  21. package/lib/components/ErrorDialog/useErrorEvents.js.map +1 -1
  22. package/lib/components/StatusDialog/StatusDialog.js +1 -1
  23. package/lib/components/StatusDialog/StatusDialog.js.map +1 -1
  24. package/lib/components/StatusDialog/TaskList.d.ts.map +1 -1
  25. package/lib/components/StatusDialog/TaskList.js +10 -1
  26. package/lib/components/StatusDialog/TaskList.js.map +1 -1
  27. package/lib/components/StatusDialog/TaskResultItem.js +2 -2
  28. package/lib/components/StatusDialog/TaskResultItem.js.map +1 -1
  29. package/lib/components/StatusDialog/TaskStatus.d.ts +2 -2
  30. package/lib/components/StatusDialog/TaskStatus.d.ts.map +1 -1
  31. package/lib/components/StatusDialog/TaskStatus.js +39 -28
  32. package/lib/components/StatusDialog/TaskStatus.js.map +1 -1
  33. package/lib/hooks/usePageLoadTimeReporter.js +2 -2
  34. package/lib/hooks/usePageLoadTimeReporter.js.map +1 -1
  35. package/lib/index.js +27 -7
  36. package/lib/index.js.map +1 -1
  37. package/package.json +4 -6
  38. package/lib/components/CloudpackProvider/createCloudpackClient.d.ts +0 -27
  39. package/lib/components/CloudpackProvider/createCloudpackClient.d.ts.map +0 -1
  40. package/lib/components/CloudpackProvider/createCloudpackClient.js +0 -163
  41. package/lib/components/CloudpackProvider/createCloudpackClient.js.map +0 -1
  42. /package/dist/ori/logs/{2g8DL8XvNNiSPBsWRhfIm0Mk1wF-logger.log → 2gF9H33FLWBeGWnbGfi7Fvtkg3i-logger.log} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"StatusDialog.js","sourceRoot":"","sources":["../../../src/components/StatusDialog/StatusDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAMhD,MAAM,UAAU,YAAY,CAAC,EAAE,OAAO,EAAqB;IACzD,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1D,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,KAA0C,EAAE,EAAE;QACpF,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,SAAS,CAAC,eAAe,EAAE,CAAC;IAC9B,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAEhE,OAAO,CACL,oBAAC,MAAM,IACL,KAAK,EAAC,cAAc,EACpB,EAAE,EAAE,UAAU,CAAC,gBAAgB,EAC/B,SAAS,QACT,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE;YACR,oBAAC,MAAM,IAAC,OAAO,QAAC,OAAO,EAAE,eAAe,EAAE,GAAG,EAAC,SAAS,wBAE9C;YACT,oBAAC,MAAM,IAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAC,QAAQ,IAC5C,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,wBAAwB,CAClD;SACV;QAED,oBAAC,SAAS,IAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,kBAAkB,GAAI;QAChE,oBAAC,QAAQ,IAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,GAAI,CACzD,CACV,CAAC;AACJ,CAAC","sourcesContent":["import React, { useCallback } from 'react';\nimport { TaskList } from './TaskList.js';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport { Button } from '../Button/Button.js';\nimport { Dialog } from '../Dialog/Dialog.js';\nimport { Searchbox } from './Searchbox.js';\nimport { elementIds } from '../../constants.js';\n\nexport interface StatusDialogProps {\n onClose: () => void;\n}\n\nexport function StatusDialog({ onClose }: StatusDialogProps) {\n const cloudpack = useCloudpack();\n const [searchFilter, setSearchFilter] = React.useState('');\n const [issuesOnly, setIssuesOnly] = React.useState(false);\n\n const handleSearchChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault();\n setSearchFilter(event.target.value);\n }, []);\n\n const restartAllTasks = () => {\n cloudpack.restartAllTasks();\n };\n\n const toggleIssuesOnly = () => setIssuesOnly((value) => !value);\n\n return (\n <Dialog\n title=\"Task results\"\n id={elementIds.statusDialogRoot}\n draggable\n onClose={onClose}\n commands={[\n <Button primary onClick={restartAllTasks} key=\"restart\">\n Restart all tasks\n </Button>,\n <Button onClick={toggleIssuesOnly} key=\"issues\">\n {issuesOnly ? 'Show all tasks' : 'Show tasks with issues'}\n </Button>,\n ]}\n >\n <Searchbox value={searchFilter} onChange={handleSearchChange} />\n <TaskList searchFilter={searchFilter} issuesOnly={issuesOnly} />\n </Dialog>\n );\n}\n"]}
1
+ {"version":3,"file":"StatusDialog.js","sourceRoot":"","sources":["../../../src/components/StatusDialog/StatusDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAMhD,MAAM,UAAU,YAAY,CAAC,EAAE,OAAO,EAAqB;IACzD,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1D,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,KAA0C,EAAE,EAAE;QACpF,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,KAAK,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAEhE,OAAO,CACL,oBAAC,MAAM,IACL,KAAK,EAAC,cAAc,EACpB,EAAE,EAAE,UAAU,CAAC,gBAAgB,EAC/B,SAAS,QACT,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE;YACR,oBAAC,MAAM,IAAC,OAAO,QAAC,OAAO,EAAE,eAAe,EAAE,GAAG,EAAC,SAAS,wBAE9C;YACT,oBAAC,MAAM,IAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAC,QAAQ,IAC5C,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,wBAAwB,CAClD;SACV;QAED,oBAAC,SAAS,IAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,kBAAkB,GAAI;QAChE,oBAAC,QAAQ,IAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,GAAI,CACzD,CACV,CAAC;AACJ,CAAC","sourcesContent":["import React, { useCallback } from 'react';\nimport { TaskList } from './TaskList.js';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport { Button } from '../Button/Button.js';\nimport { Dialog } from '../Dialog/Dialog.js';\nimport { Searchbox } from './Searchbox.js';\nimport { elementIds } from '../../constants.js';\n\nexport interface StatusDialogProps {\n onClose: () => void;\n}\n\nexport function StatusDialog({ onClose }: StatusDialogProps) {\n const cloudpack = useCloudpack();\n const [searchFilter, setSearchFilter] = React.useState('');\n const [issuesOnly, setIssuesOnly] = React.useState(false);\n\n const handleSearchChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault();\n setSearchFilter(event.target.value);\n }, []);\n\n const restartAllTasks = () => {\n void cloudpack.restartAllTasks.mutate();\n };\n\n const toggleIssuesOnly = () => setIssuesOnly((value) => !value);\n\n return (\n <Dialog\n title=\"Task results\"\n id={elementIds.statusDialogRoot}\n draggable\n onClose={onClose}\n commands={[\n <Button primary onClick={restartAllTasks} key=\"restart\">\n Restart all tasks\n </Button>,\n <Button onClick={toggleIssuesOnly} key=\"issues\">\n {issuesOnly ? 'Show all tasks' : 'Show tasks with issues'}\n </Button>,\n ]}\n >\n <Searchbox value={searchFilter} onChange={handleSearchChange} />\n <TaskList searchFilter={searchFilter} issuesOnly={issuesOnly} />\n </Dialog>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TaskList.d.ts","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,aAAa,qBAoBnE"}
1
+ {"version":3,"file":"TaskList.d.ts","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,aAAa,qBAoBnE"}
@@ -8,7 +8,7 @@ export function TaskList({ searchFilter, issuesOnly }) {
8
8
  let filteredTasks = tasks;
9
9
  if (searchFilter) {
10
10
  searchFilter = searchFilter.toLowerCase();
11
- filteredTasks = filteredTasks.filter(({ name }) => searchFilter && name.toLowerCase().includes(searchFilter));
11
+ filteredTasks = filteredTasks.filter(({ name }) => searchFilter && name?.toLowerCase().includes(searchFilter));
12
12
  }
13
13
  if (issuesOnly) {
14
14
  filteredTasks = filteredTasks.filter(({ errors, warnings }) => errors?.length || warnings?.length);
@@ -29,6 +29,15 @@ function sortTasks(a, b) {
29
29
  if (aErrors !== bErrors) {
30
30
  return aErrors > bErrors ? -1 : 1;
31
31
  }
32
+ if (a.name === undefined && b.name === undefined) {
33
+ return a.id < b.id ? -1 : 1;
34
+ }
35
+ else if (a.name === undefined) {
36
+ return 1;
37
+ }
38
+ else if (b.name === undefined) {
39
+ return -1;
40
+ }
32
41
  return a.name < b.name ? -1 : 1;
33
42
  }
34
43
  //# sourceMappingURL=TaskList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TaskList.js","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAA4B,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AACtG,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAO3C,MAAM,UAAU,QAAQ,CAAC,EAAE,YAAY,EAAE,UAAU,EAAiB;IAClE,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEpD,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAC1C,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAChH,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrG,CAAC;IAED,OAAO,CACL,6BAAK,SAAS,EAAE,MAAM,CAAC,IAAI,IACxB,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC3B,oBAAC,UAAU,IAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAI,CAC3C,CAAC,CACE,CACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,CAAsB,EAAE,CAAsB;IAC/D,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/C,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;IAEtC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC","sourcesContent":["import React from 'react';\nimport { TaskStatus } from './TaskStatus.js';\nimport { type TaskDescriptionType, useStatusDetails } from '../CloudpackProvider/useStatusDetails.js';\nimport styles from './TaskList.module.css';\n\nexport interface TaskListProps {\n searchFilter?: string;\n issuesOnly?: boolean;\n}\n\nexport function TaskList({ searchFilter, issuesOnly }: TaskListProps) {\n const details = useStatusDetails();\n const tasks = (details.tasks || []).sort(sortTasks);\n\n let filteredTasks = tasks;\n if (searchFilter) {\n searchFilter = searchFilter.toLowerCase();\n filteredTasks = filteredTasks.filter(({ name }) => searchFilter && name.toLowerCase().includes(searchFilter));\n }\n if (issuesOnly) {\n filteredTasks = filteredTasks.filter(({ errors, warnings }) => errors?.length || warnings?.length);\n }\n\n return (\n <div className={styles.root}>\n {filteredTasks.map((task) => (\n <TaskStatus key={task.name} task={task} />\n ))}\n </div>\n );\n}\n\n/**\n * Really the server should be sorting. Get stuff out of the browser.\n */\nfunction sortTasks(a: TaskDescriptionType, b: TaskDescriptionType) {\n const aStatus = a.status === 'pending' ? 1 : 0;\n const bStatus = b.status === 'pending' ? 1 : 0;\n\n if (aStatus !== bStatus) {\n return aStatus > bStatus ? -1 : 1;\n }\n\n const aErrors = a.errors?.length || 0;\n const bErrors = b.errors?.length || 0;\n\n if (aErrors !== bErrors) {\n return aErrors > bErrors ? -1 : 1;\n }\n\n return a.name < b.name ? -1 : 1;\n}\n"]}
1
+ {"version":3,"file":"TaskList.js","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAQ3C,MAAM,UAAU,QAAQ,CAAC,EAAE,YAAY,EAAE,UAAU,EAAiB;IAClE,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEpD,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAC1C,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,YAAY,IAAI,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACjH,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrG,CAAC;IAED,OAAO,CACL,6BAAK,SAAS,EAAE,MAAM,CAAC,IAAI,IACxB,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC3B,oBAAC,UAAU,IAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAI,CAC3C,CAAC,CACE,CACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,CAAkB,EAAE,CAAkB;IACvD,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/C,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;IAEtC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACjD,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,CAAC;IACX,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC","sourcesContent":["import React from 'react';\nimport { TaskStatus } from './TaskStatus.js';\nimport { useStatusDetails } from '../CloudpackProvider/useStatusDetails.js';\nimport styles from './TaskList.module.css';\nimport type { TaskDescription } from '@ms-cloudpack/api-server/browser';\n\nexport interface TaskListProps {\n searchFilter?: string;\n issuesOnly?: boolean;\n}\n\nexport function TaskList({ searchFilter, issuesOnly }: TaskListProps) {\n const details = useStatusDetails();\n const tasks = (details.tasks || []).sort(sortTasks);\n\n let filteredTasks = tasks;\n if (searchFilter) {\n searchFilter = searchFilter.toLowerCase();\n filteredTasks = filteredTasks.filter(({ name }) => searchFilter && name?.toLowerCase().includes(searchFilter));\n }\n if (issuesOnly) {\n filteredTasks = filteredTasks.filter(({ errors, warnings }) => errors?.length || warnings?.length);\n }\n\n return (\n <div className={styles.root}>\n {filteredTasks.map((task) => (\n <TaskStatus key={task.name} task={task} />\n ))}\n </div>\n );\n}\n\n/**\n * Really the server should be sorting. Get stuff out of the browser.\n */\nfunction sortTasks(a: TaskDescription, b: TaskDescription) {\n const aStatus = a.status === 'pending' ? 1 : 0;\n const bStatus = b.status === 'pending' ? 1 : 0;\n\n if (aStatus !== bStatus) {\n return aStatus > bStatus ? -1 : 1;\n }\n\n const aErrors = a.errors?.length || 0;\n const bErrors = b.errors?.length || 0;\n\n if (aErrors !== bErrors) {\n return aErrors > bErrors ? -1 : 1;\n }\n\n if (a.name === undefined && b.name === undefined) {\n return a.id < b.id ? -1 : 1;\n } else if (a.name === undefined) {\n return 1;\n } else if (b.name === undefined) {\n return -1;\n }\n\n return a.name < b.name ? -1 : 1;\n}\n"]}
@@ -2,10 +2,10 @@ import React from 'react';
2
2
  import { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';
3
3
  import styles from './TaskResultItem.module.css';
4
4
  export function TaskResultItem({ item, projectPath, index }) {
5
- const service = useCloudpack();
5
+ const cloudpack = useCloudpack();
6
6
  const openSource = (ev) => {
7
7
  if (item.location) {
8
- service.openSource({
8
+ void cloudpack.openCodeEditor.mutate({
9
9
  rootPath: projectPath,
10
10
  relativePath: item.location?.file,
11
11
  line: item.location?.line,
@@ -1 +1 @@
1
- {"version":3,"file":"TaskResultItem.js","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskResultItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,MAAM,MAAM,6BAA6B,CAAC;AAQjD,MAAM,UAAU,cAAc,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAuB;IAC9E,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAE/B,MAAM,UAAU,GAAG,CAAC,EAAoB,EAAE,EAAE;QAC1C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,UAAU,CAAC;gBACjB,QAAQ,EAAE,WAAW;gBACrB,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI;gBACjC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI;gBACzB,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM;aAC9B,CAAC,CAAC;YACH,EAAE,CAAC,cAAc,EAAE,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,oBAAoB,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;SACvG,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,CACL,6BAAK,SAAS,EAAE,MAAM,CAAC,IAAI;QACzB,6BAAK,SAAS,EAAE,MAAM,CAAC,SAAS,GAAQ;QACxC,6BAAK,SAAS,EAAE,MAAM,CAAC,OAAO;YAC5B,6BAAK,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC9B,gCAAQ,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI;oBAChD,KAAK;;oBAAI,QAAQ,CACX,CACL;YACN,6BAAK,SAAS,EAAE,MAAM,CAAC,IAAI;;gBACvB,IAAI,CAAC,MAAM;;gBAAI,IAAI,CAAC,IAAI,CACtB;YACN,6BAAK,SAAS,EAAE,MAAM,CAAC,IAAI,IAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAO,CAC9D,CACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["import type { BundleMessage } from '@ms-cloudpack/common-types';\nimport React from 'react';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport styles from './TaskResultItem.module.css';\n\nexport interface TaskResultItemProps {\n item: BundleMessage;\n projectPath: string;\n index: number;\n}\n\nexport function TaskResultItem({ item, projectPath, index }: TaskResultItemProps) {\n const service = useCloudpack();\n\n const openSource = (ev: React.MouseEvent) => {\n if (item.location) {\n service.openSource({\n rootPath: projectPath,\n relativePath: item.location?.file,\n line: item.location?.line,\n column: item.location?.column,\n });\n ev.preventDefault();\n }\n };\n\n const location = [item.location?.file || '(path unavailable)', item.location?.line, item.location?.column]\n .filter(Boolean)\n .join(':');\n\n return (\n <div className={styles.root}>\n <div className={styles.statusBar}></div>\n <div className={styles.content}>\n <div className={styles.titleArea}>\n <button onClick={openSource} className={styles.file}>\n {index}. {location}\n </button>\n </div>\n <div className={styles.text}>\n [{item.source}] {item.text}\n </div>\n <pre className={styles.text}>{JSON.stringify(item, null, 2)}</pre>\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"TaskResultItem.js","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskResultItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,MAAM,MAAM,6BAA6B,CAAC;AAQjD,MAAM,UAAU,cAAc,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAuB;IAC9E,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEjC,MAAM,UAAU,GAAG,CAAC,EAAoB,EAAE,EAAE;QAC1C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,KAAK,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC;gBACnC,QAAQ,EAAE,WAAW;gBACrB,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI;gBACjC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI;gBACzB,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM;aAC9B,CAAC,CAAC;YACH,EAAE,CAAC,cAAc,EAAE,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,oBAAoB,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;SACvG,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,CACL,6BAAK,SAAS,EAAE,MAAM,CAAC,IAAI;QACzB,6BAAK,SAAS,EAAE,MAAM,CAAC,SAAS,GAAQ;QACxC,6BAAK,SAAS,EAAE,MAAM,CAAC,OAAO;YAC5B,6BAAK,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC9B,gCAAQ,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI;oBAChD,KAAK;;oBAAI,QAAQ,CACX,CACL;YACN,6BAAK,SAAS,EAAE,MAAM,CAAC,IAAI;;gBACvB,IAAI,CAAC,MAAM;;gBAAI,IAAI,CAAC,IAAI,CACtB;YACN,6BAAK,SAAS,EAAE,MAAM,CAAC,IAAI,IAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAO,CAC9D,CACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["import type { BundleMessage } from '@ms-cloudpack/common-types';\nimport React from 'react';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport styles from './TaskResultItem.module.css';\n\nexport interface TaskResultItemProps {\n item: BundleMessage;\n projectPath: string;\n index: number;\n}\n\nexport function TaskResultItem({ item, projectPath, index }: TaskResultItemProps) {\n const cloudpack = useCloudpack();\n\n const openSource = (ev: React.MouseEvent) => {\n if (item.location) {\n void cloudpack.openCodeEditor.mutate({\n rootPath: projectPath,\n relativePath: item.location?.file,\n line: item.location?.line,\n column: item.location?.column,\n });\n ev.preventDefault();\n }\n };\n\n const location = [item.location?.file || '(path unavailable)', item.location?.line, item.location?.column]\n .filter(Boolean)\n .join(':');\n\n return (\n <div className={styles.root}>\n <div className={styles.statusBar}></div>\n <div className={styles.content}>\n <div className={styles.titleArea}>\n <button onClick={openSource} className={styles.file}>\n {index}. {location}\n </button>\n </div>\n <div className={styles.text}>\n [{item.source}] {item.text}\n </div>\n <pre className={styles.text}>{JSON.stringify(item, null, 2)}</pre>\n </div>\n </div>\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
- import type { TaskDescriptionType } from '../CloudpackProvider/useStatusDetails.js';
2
+ import type { TaskDescription } from '@ms-cloudpack/api-server/browser';
3
3
  export interface TaskStatusProps {
4
- task: TaskDescriptionType;
4
+ task: TaskDescription;
5
5
  }
6
6
  export declare function TaskStatus({ task }: TaskStatusProps): React.JSX.Element;
7
7
  //# sourceMappingURL=TaskStatus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TaskStatus.d.ts","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskStatus.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAUpF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAeD,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,eAAe,qBA8FnD"}
1
+ {"version":3,"file":"TaskStatus.d.ts","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskStatus.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAUxE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,eAAe,CAAC;CACvB;AAeD,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,eAAe,qBA2GnD"}
@@ -21,22 +21,31 @@ function getCompletion(task) {
21
21
  }
22
22
  export function TaskStatus({ task }) {
23
23
  const [isOpen, setIsOpen] = React.useState(undefined);
24
- const { name, warnings, errors } = task;
24
+ const { name, warnings = [], errors = [] } = task;
25
25
  const cloudpack = useCloudpack();
26
- const showContent = isOpen === true || (isOpen === undefined && task.errors?.length > 0);
26
+ const showContent = isOpen === true || (isOpen === undefined && errors?.length > 0);
27
+ const inputPath = task.inputPath;
27
28
  const open = (rootPath) => {
28
- cloudpack.open({
29
+ void cloudpack.openFilePath.mutate({
29
30
  rootPath,
30
31
  });
31
32
  };
32
33
  const openPackage = () => {
33
- cloudpack.openSource({
34
- rootPath: task.inputPath,
34
+ if (!inputPath) {
35
+ console.error('No input path for task', task);
36
+ return;
37
+ }
38
+ void cloudpack.openCodeEditor.mutate({
39
+ rootPath: inputPath,
35
40
  relativePath: 'package.json',
36
41
  });
37
42
  };
38
43
  const restartTask = () => {
39
- cloudpack.restartTask({ id: task.id, inputPath: task.inputPath });
44
+ if (!inputPath) {
45
+ console.error('No input path for task', task);
46
+ return;
47
+ }
48
+ void cloudpack.restartTask.mutate({ id: task.id, inputPath });
40
49
  };
41
50
  return (React.createElement("div", { className: styles.root },
42
51
  React.createElement("div", { className: getHeaderClassName(task) },
@@ -46,31 +55,33 @@ export function TaskStatus({ task }) {
46
55
  errors?.length > 0 && React.createElement("img", { className: styles.errorIcon, src: ErrorIcon, alt: "Error icon" }),
47
56
  React.createElement("div", { className: styles.title }, name),
48
57
  React.createElement("div", { className: styles.farArea }, getCompletion(task))),
49
- showContent && (React.createElement(React.Fragment, null,
50
- React.createElement("div", { className: styles.commands },
51
- React.createElement(Button, { onClick: restartTask }, "Restart task")),
52
- React.createElement("div", { className: styles.content },
53
- React.createElement("div", { className: styles.title }, "Details"),
54
- React.createElement("div", { className: styles.nameValueArea },
55
- React.createElement("div", { className: styles.name }, "Input path"),
56
- React.createElement("div", { className: styles.value },
57
- React.createElement("button", { className: styles.linkButton, onClick: () => open(task.inputPath) }, task.inputPath),
58
- React.createElement("button", { className: styles.linkButton, onClick: openPackage }, "(Package.json)"))),
59
- React.createElement("div", { className: styles.nameValueArea },
60
- React.createElement("div", { className: styles.name }, "Output path"),
61
- React.createElement("button", { className: styles.linkButton, onClick: () => open(task.outputPath) }, task.outputPath)),
62
- errors?.length > 0 && (React.createElement(React.Fragment, null,
63
- React.createElement("div", { className: styles.title }, "Errors"),
64
- React.createElement("div", { className: styles.resultItems }, errors.map((error, index) => (React.createElement(TaskResultItem, { key: index, item: error, projectPath: task.inputPath, index: index + 1 })))))),
65
- warnings?.length > 0 && (React.createElement(React.Fragment, null,
66
- React.createElement("div", { className: styles.title }, "Warnings"),
67
- React.createElement("div", { className: styles.resultItems }, warnings.map((warning, index) => (React.createElement(TaskResultItem, { key: index, item: warning, projectPath: task.inputPath, index: index + 1 })))))))))));
58
+ showContent &&
59
+ (inputPath ? (React.createElement(React.Fragment, null,
60
+ React.createElement("div", { className: styles.commands },
61
+ React.createElement(Button, { onClick: restartTask }, "Restart task")),
62
+ React.createElement("div", { className: styles.content },
63
+ React.createElement("div", { className: styles.title }, "Details"),
64
+ React.createElement("div", { className: styles.nameValueArea },
65
+ React.createElement("div", { className: styles.name }, "Input path"),
66
+ React.createElement("div", { className: styles.value },
67
+ React.createElement("button", { className: styles.linkButton, onClick: () => open(inputPath) }, task.inputPath),
68
+ React.createElement("button", { className: styles.linkButton, onClick: openPackage }, "(Package.json)"))),
69
+ React.createElement("div", { className: styles.nameValueArea },
70
+ React.createElement("div", { className: styles.name }, "Output path"),
71
+ React.createElement("button", { className: styles.linkButton, onClick: () => open(inputPath) }, task.outputPath)),
72
+ errors?.length > 0 && (React.createElement(React.Fragment, null,
73
+ React.createElement("div", { className: styles.title }, "Errors"),
74
+ React.createElement("div", { className: styles.resultItems }, errors.map((error, index) => (React.createElement(TaskResultItem, { key: index, item: error, projectPath: inputPath, index: index + 1 })))))),
75
+ warnings?.length > 0 && (React.createElement(React.Fragment, null,
76
+ React.createElement("div", { className: styles.title }, "Warnings"),
77
+ React.createElement("div", { className: styles.resultItems }, warnings.map((warning, index) => (React.createElement(TaskResultItem, { key: index, item: warning, projectPath: inputPath, index: index + 1 }))))))))) : (React.createElement("div", { className: styles.content }, "No input path found for task. This is a Cloudpack bug. Please report it.")))));
68
78
  }
69
79
  function getHeaderClassName(task) {
80
+ const { errors = [], warnings = [] } = task;
70
81
  return cx(styles.header, {
71
- [styles.success]: task.errors?.length === 0 && task.warnings?.length === 0,
72
- [styles.warning]: task.errors?.length === 0 && task.warnings?.length > 0,
73
- [styles.error]: task.errors?.length > 0,
82
+ [styles.success]: errors?.length === 0 && warnings?.length === 0,
83
+ [styles.warning]: errors?.length === 0 && warnings?.length > 0,
84
+ [styles.error]: errors?.length > 0,
74
85
  });
75
86
  }
76
87
  //# sourceMappingURL=TaskStatus.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TaskStatus.js","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskStatus.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport type { TaskDescriptionType } from '../CloudpackProvider/useStatusDetails.js';\nimport { TaskResultItem } from './TaskResultItem.js';\nimport styles from './TaskStatus.module.css';\nimport { default as cx } from 'classnames';\nimport ErrorIcon from '../../images/error-24.inline.svg';\nimport SuccessIcon from '../../images/success-24.inline.svg';\nimport ChevronDownIcon from '../../images/chevrondown-20.inline.svg';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport { Button } from '../Button/Button.js';\n\nexport interface TaskStatusProps {\n task: TaskDescriptionType;\n}\n\nfunction getCompletion(task: TaskDescriptionType) {\n if (task.status === 'pending') {\n return 'Running';\n }\n return [\n `Completed in ${task.durationMilliseconds}ms`,\n task.errors?.length && `${task.errors.length} error${task.errors.length > 1 ? 's' : ''}`,\n task.warnings?.length && `${task.warnings.length} warning${task.warnings.length > 1 ? 's' : ''}`,\n ]\n .filter(Boolean)\n .join(', ');\n}\n\nexport function TaskStatus({ task }: TaskStatusProps) {\n const [isOpen, setIsOpen] = React.useState<boolean | undefined>(undefined);\n const { name, warnings, errors } = task;\n const cloudpack = useCloudpack();\n const showContent = isOpen === true || (isOpen === undefined && task.errors?.length > 0);\n\n const open = (rootPath: string) => {\n cloudpack.open({\n rootPath,\n });\n };\n\n const openPackage = () => {\n cloudpack.openSource({\n rootPath: task.inputPath,\n relativePath: 'package.json',\n });\n };\n\n const restartTask = () => {\n cloudpack.restartTask({ id: task.id, inputPath: task.inputPath });\n };\n\n return (\n <div className={styles.root}>\n <div className={getHeaderClassName(task)}>\n <button\n className={styles.expandButton}\n onClick={() => setIsOpen(!showContent)}\n aria-label={showContent ? `Minimize ${name}` : `Expand ${name}`}\n >\n <img\n className={cx(styles.expandIcon, !showContent && styles.collapsed)}\n src={ChevronDownIcon}\n alt=\"Chevron down icon\"\n />\n </button>\n {errors?.length === 0 && warnings?.length === 0 && (\n <img className={styles.errorIcon} src={SuccessIcon} alt=\"Success icon\" />\n )}\n {errors?.length > 0 && <img className={styles.errorIcon} src={ErrorIcon} alt=\"Error icon\" />}\n <div className={styles.title}>{name}</div>\n <div className={styles.farArea}>{getCompletion(task)}</div>\n </div>\n {showContent && (\n <>\n <div className={styles.commands}>\n <Button onClick={restartTask}>Restart task</Button>\n </div>\n <div className={styles.content}>\n <div className={styles.title}>Details</div>\n <div className={styles.nameValueArea}>\n <div className={styles.name}>Input path</div>\n <div className={styles.value}>\n <button className={styles.linkButton} onClick={() => open(task.inputPath)}>\n {task.inputPath}\n </button>\n\n <button className={styles.linkButton} onClick={openPackage}>\n (Package.json)\n </button>\n </div>\n </div>\n <div className={styles.nameValueArea}>\n <div className={styles.name}>Output path</div>\n <button className={styles.linkButton} onClick={() => open(task.outputPath)}>\n {task.outputPath}\n </button>\n </div>\n {errors?.length > 0 && (\n <>\n <div className={styles.title}>Errors</div>\n <div className={styles.resultItems}>\n {errors.map((error, index) => (\n <TaskResultItem key={index} item={error} projectPath={task.inputPath} index={index + 1} />\n ))}\n </div>\n </>\n )}\n {warnings?.length > 0 && (\n <>\n <div className={styles.title}>Warnings</div>\n <div className={styles.resultItems}>\n {warnings.map((warning, index) => (\n <TaskResultItem key={index} item={warning} projectPath={task.inputPath} index={index + 1} />\n ))}\n </div>\n </>\n )}\n </div>\n </>\n )}\n </div>\n );\n}\n\nfunction getHeaderClassName(task: TaskDescriptionType) {\n return cx(styles.header, {\n [styles.success]: task.errors?.length === 0 && task.warnings?.length === 0,\n [styles.warning]: task.errors?.length === 0 && task.warnings?.length > 0,\n [styles.error]: task.errors?.length > 0,\n });\n}\n"]}
1
+ {"version":3,"file":"TaskStatus.js","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskStatus.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport type { TaskDescription } from '@ms-cloudpack/api-server/browser';\nimport { TaskResultItem } from './TaskResultItem.js';\nimport styles from './TaskStatus.module.css';\nimport { default as cx } from 'classnames';\nimport ErrorIcon from '../../images/error-24.inline.svg';\nimport SuccessIcon from '../../images/success-24.inline.svg';\nimport ChevronDownIcon from '../../images/chevrondown-20.inline.svg';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport { Button } from '../Button/Button.js';\n\nexport interface TaskStatusProps {\n task: TaskDescription;\n}\n\nfunction getCompletion(task: TaskDescription) {\n if (task.status === 'pending') {\n return 'Running';\n }\n return [\n `Completed in ${task.durationMilliseconds}ms`,\n task.errors?.length && `${task.errors.length} error${task.errors.length > 1 ? 's' : ''}`,\n task.warnings?.length && `${task.warnings.length} warning${task.warnings.length > 1 ? 's' : ''}`,\n ]\n .filter(Boolean)\n .join(', ');\n}\n\nexport function TaskStatus({ task }: TaskStatusProps) {\n const [isOpen, setIsOpen] = React.useState<boolean | undefined>(undefined);\n const { name, warnings = [], errors = [] } = task;\n const cloudpack = useCloudpack();\n const showContent = isOpen === true || (isOpen === undefined && errors?.length > 0);\n\n const inputPath = task.inputPath;\n\n const open = (rootPath: string) => {\n void cloudpack.openFilePath.mutate({\n rootPath,\n });\n };\n\n const openPackage = () => {\n if (!inputPath) {\n console.error('No input path for task', task);\n return;\n }\n void cloudpack.openCodeEditor.mutate({\n rootPath: inputPath,\n relativePath: 'package.json',\n });\n };\n\n const restartTask = () => {\n if (!inputPath) {\n console.error('No input path for task', task);\n return;\n }\n void cloudpack.restartTask.mutate({ id: task.id, inputPath });\n };\n\n return (\n <div className={styles.root}>\n <div className={getHeaderClassName(task)}>\n <button\n className={styles.expandButton}\n onClick={() => setIsOpen(!showContent)}\n aria-label={showContent ? `Minimize ${name}` : `Expand ${name}`}\n >\n <img\n className={cx(styles.expandIcon, !showContent && styles.collapsed)}\n src={ChevronDownIcon}\n alt=\"Chevron down icon\"\n />\n </button>\n {errors?.length === 0 && warnings?.length === 0 && (\n <img className={styles.errorIcon} src={SuccessIcon} alt=\"Success icon\" />\n )}\n {errors?.length > 0 && <img className={styles.errorIcon} src={ErrorIcon} alt=\"Error icon\" />}\n <div className={styles.title}>{name}</div>\n <div className={styles.farArea}>{getCompletion(task)}</div>\n </div>\n {showContent &&\n (inputPath ? (\n <>\n <div className={styles.commands}>\n <Button onClick={restartTask}>Restart task</Button>\n </div>\n <div className={styles.content}>\n <div className={styles.title}>Details</div>\n <div className={styles.nameValueArea}>\n <div className={styles.name}>Input path</div>\n <div className={styles.value}>\n <button className={styles.linkButton} onClick={() => open(inputPath)}>\n {task.inputPath}\n </button>\n\n <button className={styles.linkButton} onClick={openPackage}>\n (Package.json)\n </button>\n </div>\n </div>\n <div className={styles.nameValueArea}>\n <div className={styles.name}>Output path</div>\n <button className={styles.linkButton} onClick={() => open(inputPath)}>\n {task.outputPath}\n </button>\n </div>\n {errors?.length > 0 && (\n <>\n <div className={styles.title}>Errors</div>\n <div className={styles.resultItems}>\n {errors.map((error, index) => (\n <TaskResultItem key={index} item={error} projectPath={inputPath} index={index + 1} />\n ))}\n </div>\n </>\n )}\n {warnings?.length > 0 && (\n <>\n <div className={styles.title}>Warnings</div>\n <div className={styles.resultItems}>\n {warnings.map((warning, index) => (\n <TaskResultItem key={index} item={warning} projectPath={inputPath} index={index + 1} />\n ))}\n </div>\n </>\n )}\n </div>\n </>\n ) : (\n <div className={styles.content}>No input path found for task. This is a Cloudpack bug. Please report it.</div>\n ))}\n </div>\n );\n}\n\nfunction getHeaderClassName(task: TaskDescription) {\n const { errors = [], warnings = [] } = task;\n return cx(styles.header, {\n [styles.success]: errors?.length === 0 && warnings?.length === 0,\n [styles.warning]: errors?.length === 0 && warnings?.length > 0,\n [styles.error]: errors?.length > 0,\n });\n}\n"]}
@@ -8,9 +8,9 @@ export function usePageLoadTimeReporter() {
8
8
  const { getPageLoadTime, getBrowserCacheRatio } = window.__cloudpack;
9
9
  const newPageLoadTime = await getPageLoadTime();
10
10
  setPageLoadTime(newPageLoadTime);
11
- cloudpack.reportMetric({ metric: 'PAGE_LOAD_TIME', value: newPageLoadTime });
11
+ await cloudpack.reportMetric.mutate({ metric: 'PAGE_LOAD_TIME', value: newPageLoadTime });
12
12
  // Page is loaded, the browser cache ratio can be reported
13
- cloudpack.reportMetric({ metric: 'BROWSER_CACHE_RATIO', value: getBrowserCacheRatio() });
13
+ await cloudpack.reportMetric.mutate({ metric: 'BROWSER_CACHE_RATIO', value: getBrowserCacheRatio() });
14
14
  }
15
15
  void reportPageLoadTime();
16
16
  }, [cloudpack]);
@@ -1 +1 @@
1
- {"version":3,"file":"usePageLoadTimeReporter.js","sourceRoot":"","sources":["../../src/hooks/usePageLoadTimeReporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,sDAAsD,CAAC;AAEpF,MAAM,UAAU,uBAAuB;IACrC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAU,CAAC;IACjE,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEjC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,KAAK,UAAU,kBAAkB;YAC/B,MAAM,EAAE,eAAe,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;YAErE,MAAM,eAAe,GAAG,MAAM,eAAe,EAAE,CAAC;YAChD,eAAe,CAAC,eAAe,CAAC,CAAC;YACjC,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;YAE7E,0DAA0D;YAC1D,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAC3F,CAAC;QAED,KAAK,kBAAkB,EAAE,CAAC;IAC5B,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["import React from 'react';\nimport { useCloudpack } from '../components/CloudpackProvider/CloudpackProvider.js';\n\nexport function usePageLoadTimeReporter() {\n const [pageLoadTime, setPageLoadTime] = React.useState<number>();\n const cloudpack = useCloudpack();\n\n React.useEffect(() => {\n async function reportPageLoadTime() {\n const { getPageLoadTime, getBrowserCacheRatio } = window.__cloudpack;\n\n const newPageLoadTime = await getPageLoadTime();\n setPageLoadTime(newPageLoadTime);\n cloudpack.reportMetric({ metric: 'PAGE_LOAD_TIME', value: newPageLoadTime });\n\n // Page is loaded, the browser cache ratio can be reported\n cloudpack.reportMetric({ metric: 'BROWSER_CACHE_RATIO', value: getBrowserCacheRatio() });\n }\n\n void reportPageLoadTime();\n }, [cloudpack]);\n\n return pageLoadTime;\n}\n"]}
1
+ {"version":3,"file":"usePageLoadTimeReporter.js","sourceRoot":"","sources":["../../src/hooks/usePageLoadTimeReporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,sDAAsD,CAAC;AAEpF,MAAM,UAAU,uBAAuB;IACrC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAU,CAAC;IACjE,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEjC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,KAAK,UAAU,kBAAkB;YAC/B,MAAM,EAAE,eAAe,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;YAErE,MAAM,eAAe,GAAG,MAAM,eAAe,EAAE,CAAC;YAChD,eAAe,CAAC,eAAe,CAAC,CAAC;YACjC,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;YAE1F,0DAA0D;YAC1D,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAC;QACxG,CAAC;QAED,KAAK,kBAAkB,EAAE,CAAC;IAC5B,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["import React from 'react';\nimport { useCloudpack } from '../components/CloudpackProvider/CloudpackProvider.js';\n\nexport function usePageLoadTimeReporter() {\n const [pageLoadTime, setPageLoadTime] = React.useState<number>();\n const cloudpack = useCloudpack();\n\n React.useEffect(() => {\n async function reportPageLoadTime() {\n const { getPageLoadTime, getBrowserCacheRatio } = window.__cloudpack;\n\n const newPageLoadTime = await getPageLoadTime();\n setPageLoadTime(newPageLoadTime);\n await cloudpack.reportMetric.mutate({ metric: 'PAGE_LOAD_TIME', value: newPageLoadTime });\n\n // Page is loaded, the browser cache ratio can be reported\n await cloudpack.reportMetric.mutate({ metric: 'BROWSER_CACHE_RATIO', value: getBrowserCacheRatio() });\n }\n\n void reportPageLoadTime();\n }, [cloudpack]);\n\n return pageLoadTime;\n}\n"]}
package/lib/index.js CHANGED
@@ -3,11 +3,31 @@ import ReactDOM from 'react-dom';
3
3
  import { CloudpackProvider } from './components/CloudpackProvider/CloudpackProvider.js';
4
4
  import { StatusOverlay } from './components/StatusOverlay/StatusOverlay.js';
5
5
  import { ThemeProvider } from './components/ThemeProvider/ThemeProvider.js';
6
- import { elementIds } from './constants.js';
7
- const rootDiv = document.createElement('div');
8
- rootDiv.id = elementIds.root;
9
- ReactDOM.render(React.createElement(ThemeProvider, null,
10
- React.createElement(CloudpackProvider, null,
11
- React.createElement(StatusOverlay, null))), rootDiv);
12
- document.body.appendChild(rootDiv);
6
+ import { cookieNames, elementIds } from './constants.js';
7
+ import { createCloudpackClient, reloadCountSource } from '@ms-cloudpack/api-server/browser';
8
+ import { getCookies } from './components/CloudpackProvider/getCookies.js';
9
+ async function start() {
10
+ const cookies = getCookies();
11
+ const sessionId = cookies[cookieNames.sessionId];
12
+ const apiUrl = cookies[cookieNames.apiUrl];
13
+ const currentSequence = cookies[cookieNames.sessionSequence];
14
+ const client = await createCloudpackClient({ url: apiUrl });
15
+ if (sessionId === (await client.getSessionId.query())) {
16
+ console.log('[Cloudpack] socket opened');
17
+ }
18
+ client.onDataChanged.subscribe(reloadCountSource, {
19
+ onData: (data) => {
20
+ if (Number(data) > Number(currentSequence)) {
21
+ window.location.reload();
22
+ }
23
+ },
24
+ });
25
+ const rootDiv = document.createElement('div');
26
+ rootDiv.id = elementIds.root;
27
+ ReactDOM.render(React.createElement(ThemeProvider, null,
28
+ React.createElement(CloudpackProvider, { client: client },
29
+ React.createElement(StatusOverlay, null))), rootDiv);
30
+ document.body.appendChild(rootDiv);
31
+ }
32
+ void start();
13
33
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC9C,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC;AAE7B,QAAQ,CAAC,MAAM,CACb,oBAAC,aAAa;IACZ,oBAAC,iBAAiB;QAChB,oBAAC,aAAa,OAAG,CACC,CACN,EAChB,OAAO,CACR,CAAC;AAEF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { CloudpackProvider } from './components/CloudpackProvider/CloudpackProvider.js';\nimport { StatusOverlay } from './components/StatusOverlay/StatusOverlay.js';\nimport { ThemeProvider } from './components/ThemeProvider/ThemeProvider.js';\nimport { elementIds } from './constants.js';\n\nconst rootDiv = document.createElement('div');\nrootDiv.id = elementIds.root;\n\nReactDOM.render(\n <ThemeProvider>\n <CloudpackProvider>\n <StatusOverlay />\n </CloudpackProvider>\n </ThemeProvider>,\n rootDiv,\n);\n\ndocument.body.appendChild(rootDiv);\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAE1E,KAAK,UAAU,KAAK;IAClB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAE5D,IAAI,SAAS,KAAK,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE;QAChD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACf,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC;IAE7B,QAAQ,CAAC,MAAM,CACb,oBAAC,aAAa;QACZ,oBAAC,iBAAiB,IAAC,MAAM,EAAE,MAAM;YAC/B,oBAAC,aAAa,OAAG,CACC,CACN,EAChB,OAAO,CACR,CAAC;IAEF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,KAAK,KAAK,EAAE,CAAC","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { CloudpackProvider } from './components/CloudpackProvider/CloudpackProvider.js';\nimport { StatusOverlay } from './components/StatusOverlay/StatusOverlay.js';\nimport { ThemeProvider } from './components/ThemeProvider/ThemeProvider.js';\nimport { cookieNames, elementIds } from './constants.js';\nimport { createCloudpackClient, reloadCountSource } from '@ms-cloudpack/api-server/browser';\nimport { getCookies } from './components/CloudpackProvider/getCookies.js';\n\nasync function start() {\n const cookies = getCookies();\n const sessionId = cookies[cookieNames.sessionId];\n const apiUrl = cookies[cookieNames.apiUrl];\n const currentSequence = cookies[cookieNames.sessionSequence];\n\n const client = await createCloudpackClient({ url: apiUrl });\n\n if (sessionId === (await client.getSessionId.query())) {\n console.log('[Cloudpack] socket opened');\n }\n\n client.onDataChanged.subscribe(reloadCountSource, {\n onData: (data) => {\n if (Number(data) > Number(currentSequence)) {\n window.location.reload();\n }\n },\n });\n\n const rootDiv = document.createElement('div');\n rootDiv.id = elementIds.root;\n\n ReactDOM.render(\n <ThemeProvider>\n <CloudpackProvider client={client}>\n <StatusOverlay />\n </CloudpackProvider>\n </ThemeProvider>,\n rootDiv,\n );\n\n document.body.appendChild(rootDiv);\n}\n\nvoid start();\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/overlay",
3
- "version": "0.16.113",
3
+ "version": "0.17.1",
4
4
  "description": "The Cloudpack overlay ux.",
5
5
  "license": "MIT",
6
6
  "types": "./lib/index.d.ts",
@@ -28,16 +28,14 @@
28
28
  "lint": "cloudpack-scripts lint"
29
29
  },
30
30
  "dependencies": {
31
- "@ms-cloudpack/api-server": "^0.43.0",
32
- "@ms-cloudpack/data-bus": "^0.4.2",
31
+ "@ms-cloudpack/api-server": "^0.44.1",
33
32
  "@ms-cloudpack/path-string-parsing": "^1.2.2",
34
33
  "classnames": "^2.0.0",
35
34
  "react": "^17.0.0 || ^18.0.0",
36
- "react-dom": "^17.0.0 || ^18.0.0",
37
- "zod": "^3.21.4"
35
+ "react-dom": "^17.0.0 || ^18.0.0"
38
36
  },
39
37
  "devDependencies": {
40
- "@ms-cloudpack/common-types": "^0.5.1",
38
+ "@ms-cloudpack/common-types": "^0.5.2",
41
39
  "@ms-cloudpack/eslint-plugin-internal": "^0.0.1",
42
40
  "@ms-cloudpack/scripts": "^0.0.1",
43
41
  "@types/react": "^17.0.58",
@@ -1,27 +0,0 @@
1
- import { type DataBusPath } from '@ms-cloudpack/data-bus';
2
- import type { AddPackageOverrideInput, OpenCodeEditorInput, OpenFilePathInput, ReportMetricInput, ValidatePackageOverrideInput, ValidatePackageOverrideOutput } from '@ms-cloudpack/api-server/browser';
3
- import type { z } from 'zod';
4
- export interface CloudpackClient {
5
- /**
6
- * Closes the websocket connection.
7
- */
8
- dispose(): void;
9
- getValue<TZodData extends z.ZodType>(path: DataBusPath<TZodData>): z.infer<TZodData>;
10
- /**
11
- * Creates a subscription to the given path.
12
- */
13
- subscribe<TZodData extends z.ZodType>(path: DataBusPath<TZodData>, callback: (newValue: any, oldValue: any) => void): () => void;
14
- openSource(options: OpenCodeEditorInput): void;
15
- open(options: OpenFilePathInput): void;
16
- editConfig(): void;
17
- addOverride(options: AddPackageOverrideInput): void;
18
- validateOverride(options: ValidatePackageOverrideInput): Promise<ValidatePackageOverrideOutput>;
19
- restartAllTasks(): void;
20
- restartTask(options: {
21
- id: string;
22
- inputPath: string;
23
- }): void;
24
- reportMetric(options: ReportMetricInput): void;
25
- }
26
- export declare function createCloudpackClient(): CloudpackClient;
27
- //# sourceMappingURL=createCloudpackClient.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createCloudpackClient.d.ts","sourceRoot":"","sources":["../../../src/components/CloudpackProvider/createCloudpackClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;IAChB,QAAQ,CAAC,QAAQ,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrF;;OAEG;IACH,SAAS,CAAC,QAAQ,SAAS,CAAC,CAAC,OAAO,EAClC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC3B,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,IAAI,GAC/C,MAAM,IAAI,CAAC;IAEd,UAAU,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC/C,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvC,UAAU,IAAI,IAAI,CAAC;IACnB,WAAW,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACpD,gBAAgB,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;IAChG,eAAe,IAAI,IAAI,CAAC;IACxB,WAAW,CAAC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9D,YAAY,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAChD;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CAsLvD"}
@@ -1,163 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { getCookies } from './getCookies.js';
3
- import { createDataBus } from '@ms-cloudpack/data-bus';
4
- import { cookieNames } from '../../constants.js';
5
- export function createCloudpackClient() {
6
- const cookies = getCookies();
7
- const bus = createDataBus();
8
- let subCounter = 0;
9
- const subIds = {};
10
- bus.addProvider({
11
- path: [],
12
- onActivate: ({ path }) => {
13
- const id = subCounter++;
14
- subIds[path.join('/')] = id;
15
- sendMessage({ type: 'subscribe', data: { path, id } });
16
- },
17
- onDeactivate: ({ path }) => {
18
- const pathString = path.join('/');
19
- const id = subIds[pathString];
20
- delete subIds[pathString];
21
- sendMessage({ type: 'unsubscribe', data: { path, id } });
22
- },
23
- });
24
- const enqueuedMessages = [];
25
- const sessionId = cookies[cookieNames.sessionId];
26
- const apiUrl = cookies[cookieNames.apiUrl];
27
- const currentSequence = cookies[cookieNames.sessionSequence];
28
- let socket;
29
- let idCount = 0;
30
- /**
31
- * Attempts to open the websocket connection.
32
- */
33
- function openConnection() {
34
- if (apiUrl && sessionId) {
35
- const newSocket = new WebSocket(apiUrl);
36
- newSocket.onopen = () => {
37
- console.log('socket opened');
38
- socket = newSocket;
39
- socket.onmessage = onMessageReceived;
40
- socket.onclose = () => {
41
- socket = undefined;
42
- };
43
- // Initialize any pending subscriptions.
44
- for (const message of enqueuedMessages) {
45
- socket.send(message);
46
- }
47
- enqueuedMessages.length = 0;
48
- };
49
- }
50
- }
51
- /**
52
- * Sends a message to the websocket.
53
- */
54
- function sendMessage(options) {
55
- const { type, requestId, data } = options;
56
- const message = JSON.stringify({ type, requestId, data });
57
- if (socket) {
58
- socket.send(message);
59
- }
60
- else {
61
- enqueuedMessages.push(message);
62
- }
63
- }
64
- const activeRequests = {};
65
- /**
66
- * Sends a request to the websocket and returns a promise that resolves when the response is received.
67
- */
68
- function sendRequest(options) {
69
- const { type, data } = options;
70
- const requestId = `${idCount++}`;
71
- return new Promise((resolve, reject) => {
72
- const timeoutId = setTimeout(() => {
73
- if (activeRequests[requestId]) {
74
- reject(new Error('Request timed out.'));
75
- }
76
- }, 10000);
77
- activeRequests[requestId] = {
78
- resolve: (resultData) => {
79
- delete activeRequests[requestId];
80
- clearTimeout(timeoutId);
81
- resolve(resultData);
82
- },
83
- reject: (error) => {
84
- delete activeRequests[requestId];
85
- clearTimeout(timeoutId);
86
- reject(error);
87
- },
88
- };
89
- sendMessage({ type, requestId, data });
90
- });
91
- }
92
- /**
93
- * Receives a message from the websocket and calls the appropriate callback.
94
- */
95
- function onMessageReceived(message) {
96
- const response = JSON.parse(message.data);
97
- const requestId = response.requestId;
98
- if (requestId !== undefined) {
99
- activeRequests[requestId].resolve(response.data);
100
- return;
101
- }
102
- switch (response.type) {
103
- case 'notify': {
104
- const { path, data } = response;
105
- bus.publish(path, data);
106
- break;
107
- }
108
- case 'reload': {
109
- window.location.reload();
110
- break;
111
- }
112
- case 'sequence': {
113
- const { sequence } = response;
114
- if (Number(sequence) > Number(currentSequence)) {
115
- window.location.reload();
116
- }
117
- break;
118
- }
119
- }
120
- }
121
- // Start the connection.
122
- openConnection();
123
- // Return the public API.
124
- const client = {
125
- dispose: () => {
126
- socket?.close();
127
- socket = undefined;
128
- },
129
- getValue: (path) => {
130
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
131
- return bus.getData(path);
132
- },
133
- open: (options) => {
134
- sendMessage({ type: 'open', data: options });
135
- },
136
- openSource: (options) => {
137
- sendMessage({ type: 'openSource', data: options });
138
- },
139
- subscribe: (path, callback) => {
140
- return bus.subscribe(path, callback);
141
- },
142
- editConfig: () => {
143
- sendMessage({ type: 'editConfig', data: {} });
144
- },
145
- addOverride: (options) => {
146
- sendMessage({ type: 'addOverride', data: options });
147
- },
148
- restartTask: (options) => {
149
- sendMessage({ type: 'restartTask', data: options });
150
- },
151
- restartAllTasks: () => {
152
- sendMessage({ type: 'restartAllTasks', data: {} });
153
- },
154
- validateOverride: (options) => {
155
- return sendRequest({ type: 'validateOverride', data: options });
156
- },
157
- reportMetric: (options) => {
158
- sendMessage({ type: 'reportMetric', data: options });
159
- },
160
- };
161
- return client;
162
- }
163
- //# sourceMappingURL=createCloudpackClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createCloudpackClient.js","sourceRoot":"","sources":["../../../src/components/CloudpackProvider/createCloudpackClient.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAoB,MAAM,wBAAwB,CAAC;AAUzE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA0BjD,MAAM,UAAU,qBAAqB;IACnC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,GAAG,CAAC,WAAW,CAAC;QACd,IAAI,EAAE,EAAE;QACR,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YACvB,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAC5B,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YAC9B,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;YAC1B,WAAW,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAC7D,IAAI,MAA6B,CAAC;IAClC,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB;;OAEG;IACH,SAAS,cAAc;QACrB,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;YAExC,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE;gBACtB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC7B,MAAM,GAAG,SAAS,CAAC;gBACnB,MAAM,CAAC,SAAS,GAAG,iBAAiB,CAAC;gBACrC,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;oBACpB,MAAM,GAAG,SAAS,CAAC;gBACrB,CAAC,CAAC;gBAEF,wCAAwC;gBACxC,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;oBACvC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,CAAC;gBACD,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9B,CAAC,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,WAAW,CAAC,OAA4D;QAC/E,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAMhB,EAAE,CAAC;IAEP;;OAEG;IACH,SAAS,WAAW,CAAC,OAAwC;QAC3D,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAC/B,MAAM,SAAS,GAAG,GAAG,OAAO,EAAE,EAAE,CAAC;QACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC9B,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC,EAAE,KAAK,CAAC,CAAC;YAEV,cAAc,CAAC,SAAS,CAAC,GAAG;gBAC1B,OAAO,EAAE,CAAC,UAAU,EAAE,EAAE;oBACtB,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;oBACjC,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,OAAO,CAAC,UAAU,CAAC,CAAC;gBACtB,CAAC;gBACD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAChB,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;oBACjC,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;aACF,CAAC;YAEF,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,SAAS,iBAAiB,CAAC,OAAyB;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAA4B,CAAC;QACrE,MAAM,SAAS,GAAG,QAAQ,CAAC,SAA+B,CAAC;QAE3D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,cAAc,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;gBAEhC,GAAG,CAAC,OAAO,CAAC,IAAgB,EAAE,IAAI,CAAC,CAAC;gBACpC,MAAM;YACR,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACzB,MAAM;YACR,CAAC;YAED,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;gBAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;oBAC/C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC3B,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,cAAc,EAAE,CAAC;IAEjB,yBAAyB;IACzB,MAAM,MAAM,GAAoB;QAC9B,OAAO,EAAE,GAAG,EAAE;YACZ,MAAM,EAAE,KAAK,EAAE,CAAC;YAChB,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;QACD,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;YACjB,+DAA+D;YAC/D,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;YAChB,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;YACtB,WAAW,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;YAC5B,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;QACD,UAAU,EAAE,GAAG,EAAE;YACf,WAAW,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE;YACvB,WAAW,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE;YACvB,WAAW,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,eAAe,EAAE,GAAG,EAAE;YACpB,WAAW,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE;YAC5B,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAkC,CAAC;QACnG,CAAC;QACD,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE;YACxB,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { getCookies } from './getCookies.js';\nimport { createDataBus, type DataBusPath } from '@ms-cloudpack/data-bus';\nimport type {\n AddPackageOverrideInput,\n OpenCodeEditorInput,\n OpenFilePathInput,\n ReportMetricInput,\n ValidatePackageOverrideInput,\n ValidatePackageOverrideOutput,\n} from '@ms-cloudpack/api-server/browser';\nimport type { z } from 'zod';\nimport { cookieNames } from '../../constants.js';\n\nexport interface CloudpackClient {\n /**\n * Closes the websocket connection.\n */\n dispose(): void;\n getValue<TZodData extends z.ZodType>(path: DataBusPath<TZodData>): z.infer<TZodData>;\n /**\n * Creates a subscription to the given path.\n */\n subscribe<TZodData extends z.ZodType>(\n path: DataBusPath<TZodData>,\n callback: (newValue: any, oldValue: any) => void,\n ): () => void;\n\n openSource(options: OpenCodeEditorInput): void;\n open(options: OpenFilePathInput): void;\n editConfig(): void;\n addOverride(options: AddPackageOverrideInput): void;\n validateOverride(options: ValidatePackageOverrideInput): Promise<ValidatePackageOverrideOutput>;\n restartAllTasks(): void;\n restartTask(options: { id: string; inputPath: string }): void;\n reportMetric(options: ReportMetricInput): void;\n}\n\nexport function createCloudpackClient(): CloudpackClient {\n const cookies = getCookies();\n const bus = createDataBus();\n let subCounter = 0;\n const subIds: Record<string, number> = {};\n\n bus.addProvider({\n path: [],\n onActivate: ({ path }) => {\n const id = subCounter++;\n subIds[path.join('/')] = id;\n sendMessage({ type: 'subscribe', data: { path, id } });\n },\n\n onDeactivate: ({ path }) => {\n const pathString = path.join('/');\n const id = subIds[pathString];\n delete subIds[pathString];\n sendMessage({ type: 'unsubscribe', data: { path, id } });\n },\n });\n\n const enqueuedMessages: string[] = [];\n const sessionId = cookies[cookieNames.sessionId];\n const apiUrl = cookies[cookieNames.apiUrl];\n const currentSequence = cookies[cookieNames.sessionSequence];\n let socket: WebSocket | undefined;\n let idCount = 0;\n\n /**\n * Attempts to open the websocket connection.\n */\n function openConnection() {\n if (apiUrl && sessionId) {\n const newSocket = new WebSocket(apiUrl);\n\n newSocket.onopen = () => {\n console.log('socket opened');\n socket = newSocket;\n socket.onmessage = onMessageReceived;\n socket.onclose = () => {\n socket = undefined;\n };\n\n // Initialize any pending subscriptions.\n for (const message of enqueuedMessages) {\n socket.send(message);\n }\n enqueuedMessages.length = 0;\n };\n }\n }\n\n /**\n * Sends a message to the websocket.\n */\n function sendMessage(options: { type: string; requestId?: string; data: unknown }) {\n const { type, requestId, data } = options;\n const message = JSON.stringify({ type, requestId, data });\n if (socket) {\n socket.send(message);\n } else {\n enqueuedMessages.push(message);\n }\n }\n\n const activeRequests: Record<\n string,\n {\n resolve: (value: any) => void;\n reject: (reason: any) => void;\n }\n > = {};\n\n /**\n * Sends a request to the websocket and returns a promise that resolves when the response is received.\n */\n function sendRequest(options: { type: string; data: unknown }) {\n const { type, data } = options;\n const requestId = `${idCount++}`;\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n if (activeRequests[requestId]) {\n reject(new Error('Request timed out.'));\n }\n }, 10000);\n\n activeRequests[requestId] = {\n resolve: (resultData) => {\n delete activeRequests[requestId];\n clearTimeout(timeoutId);\n resolve(resultData);\n },\n reject: (error) => {\n delete activeRequests[requestId];\n clearTimeout(timeoutId);\n reject(error);\n },\n };\n\n sendMessage({ type, requestId, data });\n });\n }\n\n /**\n * Receives a message from the websocket and calls the appropriate callback.\n */\n function onMessageReceived(message: { data: string }) {\n const response = JSON.parse(message.data) as Record<string, unknown>;\n const requestId = response.requestId as string | undefined;\n\n if (requestId !== undefined) {\n activeRequests[requestId].resolve(response.data);\n return;\n }\n\n switch (response.type) {\n case 'notify': {\n const { path, data } = response;\n\n bus.publish(path as string[], data);\n break;\n }\n\n case 'reload': {\n window.location.reload();\n break;\n }\n\n case 'sequence': {\n const { sequence } = response;\n if (Number(sequence) > Number(currentSequence)) {\n window.location.reload();\n }\n break;\n }\n }\n }\n\n // Start the connection.\n openConnection();\n\n // Return the public API.\n const client: CloudpackClient = {\n dispose: () => {\n socket?.close();\n socket = undefined;\n },\n getValue: (path) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return bus.getData(path);\n },\n open: (options) => {\n sendMessage({ type: 'open', data: options });\n },\n openSource: (options) => {\n sendMessage({ type: 'openSource', data: options });\n },\n subscribe: (path, callback) => {\n return bus.subscribe(path, callback);\n },\n editConfig: () => {\n sendMessage({ type: 'editConfig', data: {} });\n },\n addOverride: (options) => {\n sendMessage({ type: 'addOverride', data: options });\n },\n restartTask: (options) => {\n sendMessage({ type: 'restartTask', data: options });\n },\n restartAllTasks: () => {\n sendMessage({ type: 'restartAllTasks', data: {} });\n },\n validateOverride: (options) => {\n return sendRequest({ type: 'validateOverride', data: options }) as Promise<{ fixable: boolean }>;\n },\n reportMetric: (options) => {\n sendMessage({ type: 'reportMetric', data: options });\n },\n };\n\n return client;\n}\n"]}