@xxmachina/components 19.34.0 → 19.36.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 (81) hide show
  1. package/fesm2022/xxmachina-components-extras-flow.mjs +6 -6
  2. package/fesm2022/xxmachina-components-extras-flow.mjs.map +1 -1
  3. package/fesm2022/xxmachina-components-features-command.mjs.map +1 -1
  4. package/fesm2022/xxmachina-components-features-query.mjs +3 -3
  5. package/fesm2022/xxmachina-components-features-query.mjs.map +1 -1
  6. package/fesm2022/xxmachina-components-groups-command-form.mjs.map +1 -1
  7. package/fesm2022/xxmachina-components-groups-query-form.mjs.map +1 -1
  8. package/fesm2022/xxmachina-components-molecules-daily-cell.mjs.map +1 -1
  9. package/fesm2022/xxmachina-components-molecules-weekly-header.mjs +2 -2
  10. package/fesm2022/xxmachina-components-organisms-calendar-section.mjs +2 -2
  11. package/fesm2022/xxmachina-components-organisms-calendar-section.mjs.map +1 -1
  12. package/fesm2022/xxmachina-components-organisms-event-input-section.mjs.map +1 -1
  13. package/fesm2022/xxmachina-components-organisms-video-trimmer-section.mjs.map +1 -1
  14. package/fesm2022/xxmachina-components-pages-command.mjs +2 -2
  15. package/fesm2022/xxmachina-components-pages-command.mjs.map +1 -1
  16. package/fesm2022/xxmachina-components-pages-query-v2.mjs.map +1 -1
  17. package/fesm2022/xxmachina-components-pages-query.mjs +3 -3
  18. package/fesm2022/xxmachina-components-pages-query.mjs.map +1 -1
  19. package/fesm2022/xxmachina-components-pages-thread.mjs +2 -2
  20. package/fesm2022/xxmachina-components-routes-commands.mjs.map +1 -1
  21. package/fesm2022/xxmachina-components-routes-pages.mjs.map +1 -1
  22. package/fesm2022/xxmachina-components-routes-queries.mjs.map +1 -1
  23. package/fesm2022/xxmachina-components-routes-query.mjs.map +1 -1
  24. package/fesm2022/xxmachina-components-routes-resources-resource.routes-CkkmqB2_.mjs.map +1 -1
  25. package/fesm2022/xxmachina-components-routes-resources.mjs.map +1 -1
  26. package/fesm2022/xxmachina-components-routes-transformers.mjs +1 -0
  27. package/fesm2022/xxmachina-components-routes-transformers.mjs.map +1 -1
  28. package/fesm2022/xxmachina-components-services-command.mjs +1 -1
  29. package/fesm2022/xxmachina-components-services-command.mjs.map +1 -1
  30. package/fesm2022/xxmachina-components-services-forms-query.mjs +5 -5
  31. package/fesm2022/xxmachina-components-services-forms-query.mjs.map +1 -1
  32. package/fesm2022/xxmachina-components-services-forms-schedule.mjs.map +1 -1
  33. package/fesm2022/xxmachina-components-services-invoice.mjs.map +1 -1
  34. package/fesm2022/xxmachina-components-services-openai.mjs.map +1 -1
  35. package/fesm2022/xxmachina-components-services-openapi.mjs.map +1 -1
  36. package/fesm2022/xxmachina-components-services-query.mjs +1 -1
  37. package/fesm2022/xxmachina-components-services-query.mjs.map +1 -1
  38. package/fesm2022/xxmachina-components-services-recording.mjs.map +1 -1
  39. package/fesm2022/xxmachina-components-services-thread.mjs +6 -6
  40. package/fesm2022/xxmachina-components-services-thread.mjs.map +1 -1
  41. package/fesm2022/xxmachina-components-services-transformer.mjs +1 -1
  42. package/fesm2022/xxmachina-components-services-transformer.mjs.map +1 -1
  43. package/fesm2022/xxmachina-components-templates-agent.mjs +4 -4
  44. package/fesm2022/xxmachina-components-templates-agent.mjs.map +1 -1
  45. package/fesm2022/xxmachina-components-templates-invoice-iframe.mjs.map +1 -1
  46. package/fesm2022/xxmachina-components-templates-scheduler.mjs +2 -2
  47. package/fesm2022/xxmachina-components-templates-scheduler.mjs.map +1 -1
  48. package/fesm2022/xxmachina-components-validators-query.mjs +2 -2
  49. package/fesm2022/xxmachina-components-validators-query.mjs.map +1 -1
  50. package/fesm2022/xxmachina-components.mjs +5 -4
  51. package/fesm2022/xxmachina-components.mjs.map +1 -1
  52. package/package.json +1 -1
  53. package/types/xxmachina-components-extras-flow.d.ts +70 -70
  54. package/types/xxmachina-components-features-command.d.ts +3 -3
  55. package/types/xxmachina-components-features-query.d.ts +32 -32
  56. package/types/xxmachina-components-groups-command-form.d.ts +2 -2
  57. package/types/xxmachina-components-groups-query-form.d.ts +20 -20
  58. package/types/xxmachina-components-organisms-event-input-section.d.ts +3 -3
  59. package/types/xxmachina-components-organisms-terminal-input-section.d.ts +2 -2
  60. package/types/xxmachina-components-organisms-video-trimmer-section.d.ts +3 -3
  61. package/types/xxmachina-components-organisms-xterm.d.ts +6 -6
  62. package/types/xxmachina-components-organisms-xterm.d.ts.map +1 -1
  63. package/types/xxmachina-components-pages-command.d.ts +6 -6
  64. package/types/xxmachina-components-pages-query.d.ts +11 -11
  65. package/types/xxmachina-components-pages-thread.d.ts +6 -6
  66. package/types/xxmachina-components-services-command.d.ts +3 -3
  67. package/types/xxmachina-components-services-forms-query.d.ts +9 -9
  68. package/types/xxmachina-components-services-forms-schedule.d.ts +12 -12
  69. package/types/xxmachina-components-services-link.d.ts +1 -1
  70. package/types/xxmachina-components-services-message.d.ts +1 -1
  71. package/types/xxmachina-components-services-openai.d.ts +2 -2
  72. package/types/xxmachina-components-services-query.d.ts +1 -2
  73. package/types/xxmachina-components-services-query.d.ts.map +1 -1
  74. package/types/xxmachina-components-services-recording.d.ts +3 -3
  75. package/types/xxmachina-components-templates-agent.d.ts +2 -2
  76. package/types/xxmachina-components-templates-flow-nodes-group.d.ts +1 -1
  77. package/types/xxmachina-components-templates-flow.d.ts +2 -2
  78. package/types/xxmachina-components-templates-invoice-iframe.d.ts +1 -1
  79. package/types/xxmachina-components-templates-video.d.ts +9 -9
  80. package/types/xxmachina-components.d.ts +2 -2
  81. package/types/xxmachina-components.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-routes-resources.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/routes/resources/resources.routes.ts","../../../../../packages/@xxmachina/components/src/lib/routes/resources/xxmachina-components-routes-resources.ts"],"sourcesContent":["import { effect, inject } from '@angular/core';\nimport { Routes } from '@angular/router';\nimport { Resource, ResourceHelper } from '@xxmachina/common/domain/models';\nimport { ResourceHasuraRepository } from '@xxmachina/common/infra/repository/hasura';\nimport { provideDataAccessor } from '@ng-atomic/common/pipes/data-accessor';\nimport { provideLangMap } from '@ng-atomic/common/pipes/domain';\nimport { AppService } from '@ng-atomic/common/services/app';\nimport { injectAll } from '@ng-atomic/common/stores/entities';\nimport { buildColumns, injectIndexForm } from '@ng-atomic/components/organisms/table';\nimport { IndexPage, IndexPageStore } from '@ng-atomic/components/pages/_index';\nimport { applyToInput, provideEffect } from '@ng-atomic/core';\nimport { getLangMap } from '@nx-ddd/common/domain';\nimport { plainToInstanceWithValid } from '@nx-ddd/core';\n\nenum ActionId {\n\tEXPORT_RESOURCES = '[@xxmachina/app] EXPORT_RESOURCES',\n\tIMPORT_RESOURCES = '[@xxmachina/app] IMPORT_RESOURCES',\n}\n\nexport const routes: Routes = [\n\t{\n\t\tpath: '',\n\t\tcomponent: IndexPage,\n\t\tloadChildren: () => import('./pages/pages.routes').then(m => m.routes),\n\t\tproviders: [\n\t\t\tprovideLangMap(() => getLangMap(Resource, {\n\t\t\t\tdescription: '説明',\n\t\t\t\t'graphql.url': 'GraphQL URL',\n\t\t\t\t'openapi.url': 'OpenAPI URL',\n\t\t\t})),\n\t\t\tprovideDataAccessor(() => {\n\t\t\t\treturn (item: Resource, key) => {\n\t\t\t\t\tswitch (key) {\n\t\t\t\t\t\tcase 'description':\n\t\t\t\t\t\t\treturn ResourceHelper.getDescription(item);\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn item[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}),\n\t\t\tIndexPageStore.provideDefault(),\n\t\t\tIndexPageStore.Config.provide(() => {\n\t\t\t\treturn config => ({\n\t\t\t\t\t...config,\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...config.style,\n\t\t\t\t\t\twidth: 'var(--page-width-lv3)',\n\t\t\t\t\t},\n\t\t\t\t\ttitle: 'リソース一覧',\n\t\t\t\t\tnavEndActions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'menu',\n\t\t\t\t\t\t\ticon: 'more_vert',\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: IndexPageStore.ActionId.ADD,\n\t\t\t\t\t\t\t\t\tname: '追加',\n\t\t\t\t\t\t\t\t\ticon: 'add',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: ActionId.EXPORT_RESOURCES,\n\t\t\t\t\t\t\t\t\ticon: 'download',\n\t\t\t\t\t\t\t\t\tname: 'リソースのエクスポート'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: ActionId.IMPORT_RESOURCES,\n\t\t\t\t\t\t\t\t\ticon: 'upload',\n\t\t\t\t\t\t\t\t\tname: 'リソースのインポート'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\titemActions: (item: Resource) => [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: IndexPageStore.ActionId.DETAIL,\n\t\t\t\t\t\t\tname: '詳細',\n\t\t\t\t\t\t\ticon: 'open_in_new',\n\t\t\t\t\t\t\tpayload: item,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t})\n\t\t\t}),\n\t\t\tIndexPageStore.Initializer.provide((store) => {\n\t\t\t\tconst form = injectIndexForm({\n\t\t\t\t\tcolumns: buildColumns([\n\t\t\t\t\t\t'id', 'name', 'type', 'description', '__actions'\n\t\t\t\t\t])\n\t\t\t\t})\n\t\t\t\tapplyToInput(store, 'form', form);\n\t\t\t\tconst resources = injectAll(Resource);\n\t\t\t\teffect(() => {\n\t\t\t\t\tapplyToInput(store, 'items', resources());\n\t\t\t\t});\n\t\t\t}),\n\t\t\tprovideEffect(ActionId.EXPORT_RESOURCES, () => {\n\t\t\t\tconst store = inject(IndexPageStore);\n\t\t\t\tconst app = inject(AppService);\n\t\t\t\treturn () => {\n\t\t\t\t\tapp.clipboard.copy(JSON.stringify(store.items(), null, 2));\n\t\t\t\t\tapp.snackBar.open('JSONをコピーしました');\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprovideEffect(ActionId.IMPORT_RESOURCES, () => {\n\t\t\t\tconst repo = inject(ResourceHasuraRepository);\n\t\t\t\tconst app = inject(AppService);\n\t\t\t\treturn () => {\n\t\t\t\t\tconst json = prompt('JSONを貼り付けてください');\n\t\t\t\t\tif (!json) return;\t\n\t\t\t\t\tconst items = JSON.parse(json) as any[];\n\t\t\t\t\tconst queries = items.map(item => plainToInstanceWithValid(Resource, item));\n\t\t\t\t\tapp.loading.await(() => {\n\t\t\t\t\t\treturn repo.saveMany(queries).then(() => {\n\t\t\t\t\t\t\tapp.snackBar.open('リソースをインポートしました');\n\t\t\t\t\t\t}).catch((error) => {\n\t\t\t\t\t\t\tconsole.error(error);\n\t\t\t\t\t\t\tapp.snackBar.open('リソースのインポートに失敗しました');\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}),\n\t\t]\n\t}\n];","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xxmachina-components-routes-resources.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/routes/resources/resources.routes.ts","../../../../../packages/@xxmachina/components/src/lib/routes/resources/xxmachina-components-routes-resources.ts"],"sourcesContent":["import { effect, inject } from '@angular/core';\nimport { Routes } from '@angular/router';\nimport { Resource, ResourceHelper } from '@xxmachina/common/domain/models';\nimport { ResourceHasuraRepository } from '@xxmachina/common/infra/repository/hasura';\nimport { provideDataAccessor } from '@ng-atomic/common/pipes/data-accessor';\nimport { provideLangMap } from '@ng-atomic/common/pipes/domain';\nimport { AppService } from '@ng-atomic/common/services/app';\nimport { injectAll } from '@ng-atomic/common/stores/entities';\nimport { buildColumns, injectIndexForm } from '@ng-atomic/components/organisms/table';\nimport { IndexPage, IndexPageStore } from '@ng-atomic/components/pages/_index';\nimport { applyToInput, provideEffect } from '@ng-atomic/core';\nimport { getLangMap } from '@nx-ddd/common/domain';\nimport { plainToInstanceWithValid } from '@nx-ddd/core';\n\nenum ActionId {\n\tEXPORT_RESOURCES = '[@xxmachina/app] EXPORT_RESOURCES',\n\tIMPORT_RESOURCES = '[@xxmachina/app] IMPORT_RESOURCES',\n}\n\nexport const routes: Routes = [\n\t{\n\t\tpath: '',\n\t\tcomponent: IndexPage,\n\t\tloadChildren: () => import('./pages/pages.routes').then(m => m.routes),\n\t\tproviders: [\n\t\t\tprovideLangMap(() => getLangMap(Resource, {\n\t\t\t\tdescription: '説明',\n\t\t\t\t'graphql.url': 'GraphQL URL',\n\t\t\t\t'openapi.url': 'OpenAPI URL',\n\t\t\t}) as Record<string, string>),\n\t\t\tprovideDataAccessor(() => {\n\t\t\t\treturn (item: Resource, key) => {\n\t\t\t\t\tswitch (key) {\n\t\t\t\t\t\tcase 'description':\n\t\t\t\t\t\t\treturn ResourceHelper.getDescription(item);\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn (item as unknown as Record<string, unknown>)[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}),\n\t\t\tIndexPageStore.provideDefault(),\n\t\t\tIndexPageStore.Config.provide(() => {\n\t\t\t\treturn config => ({\n\t\t\t\t\t...config,\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...config.style,\n\t\t\t\t\t\twidth: 'var(--page-width-lv3)',\n\t\t\t\t\t},\n\t\t\t\t\ttitle: 'リソース一覧',\n\t\t\t\t\tnavEndActions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'menu',\n\t\t\t\t\t\t\ticon: 'more_vert',\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: IndexPageStore.ActionId.ADD,\n\t\t\t\t\t\t\t\t\tname: '追加',\n\t\t\t\t\t\t\t\t\ticon: 'add',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: ActionId.EXPORT_RESOURCES,\n\t\t\t\t\t\t\t\t\ticon: 'download',\n\t\t\t\t\t\t\t\t\tname: 'リソースのエクスポート'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: ActionId.IMPORT_RESOURCES,\n\t\t\t\t\t\t\t\t\ticon: 'upload',\n\t\t\t\t\t\t\t\t\tname: 'リソースのインポート'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\titemActions: (item: Resource) => [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: IndexPageStore.ActionId.DETAIL,\n\t\t\t\t\t\t\tname: '詳細',\n\t\t\t\t\t\t\ticon: 'open_in_new',\n\t\t\t\t\t\t\tpayload: item,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t})\n\t\t\t}),\n\t\t\tIndexPageStore.Initializer.provide((store) => {\n\t\t\t\tconst form = injectIndexForm({\n\t\t\t\t\tcolumns: buildColumns([\n\t\t\t\t\t\t'id', 'name', 'type', 'description', '__actions'\n\t\t\t\t\t])\n\t\t\t\t})\n\t\t\t\tapplyToInput(store, 'form', form);\n\t\t\t\tconst resources = injectAll(Resource);\n\t\t\t\teffect(() => {\n\t\t\t\t\tapplyToInput(store, 'items', resources() as never[]);\n\t\t\t\t});\n\t\t\t}),\n\t\t\tprovideEffect(ActionId.EXPORT_RESOURCES, () => {\n\t\t\t\tconst store = inject(IndexPageStore);\n\t\t\t\tconst app = inject(AppService);\n\t\t\t\treturn () => {\n\t\t\t\t\tapp.clipboard.copy(JSON.stringify(store.items(), null, 2));\n\t\t\t\t\tapp.snackBar.open('JSONをコピーしました');\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprovideEffect(ActionId.IMPORT_RESOURCES, () => {\n\t\t\t\tconst repo = inject(ResourceHasuraRepository);\n\t\t\t\tconst app = inject(AppService);\n\t\t\t\treturn () => {\n\t\t\t\t\tconst json = prompt('JSONを貼り付けてください');\n\t\t\t\t\tif (!json) return;\t\n\t\t\t\t\tconst items = JSON.parse(json) as any[];\n\t\t\t\t\tconst queries = items.map(item => plainToInstanceWithValid(Resource, item));\n\t\t\t\t\tapp.loading.await(() => {\n\t\t\t\t\t\treturn repo.saveMany(queries).then(() => {\n\t\t\t\t\t\t\tapp.snackBar.open('リソースをインポートしました');\n\t\t\t\t\t\t}).catch((error) => {\n\t\t\t\t\t\t\tconsole.error(error);\n\t\t\t\t\t\t\tapp.snackBar.open('リソースのインポートに失敗しました');\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}),\n\t\t]\n\t}\n];","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -50,6 +50,7 @@ const routes = [
50
50
  ];
51
51
  }
52
52
  }
53
+ return [];
53
54
  };
54
55
  }, ...(ngDevMode ? [{ debugName: "itemActions" }] : []));
55
56
  effect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-routes-transformers.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/routes/transformers/transformers.routes.ts","../../../../../packages/@xxmachina/components/src/lib/routes/transformers/xxmachina-components-routes-transformers.ts"],"sourcesContent":["import { computed, effect, inject } from '@angular/core';\nimport { Routes } from '@angular/router';\nimport { provideDataAccessor } from '@ng-atomic/common/pipes/data-accessor';\nimport { AppService } from '@ng-atomic/common/services/app';\nimport { injectNavigationExtras } from '@ng-atomic/common/utils';\nimport { AppFrameStore } from '@ng-atomic/components/frames/app';\nimport { applyToInput, provideEffect } from '@ng-atomic/core';\nimport { QueryPage, QueryPageStore } from '@xxmachina/components/pages/query';\nimport { get } from 'lodash-es';\n\nexport const routes: Routes = [\n {\n path: '',\n component: QueryPage,\n data: {\n queryId: 'gaaZzqj5ZLn9wEbpvcHH',\n },\n loadChildren: () => import('./pages/pages.routes').then(m => m.routes),\n providers: [\n provideDataAccessor(() => {\n return (item, key) => {\n switch (key) {\n case 'title': return get(item, 'id');\n }\n return get(item, key)\n }; \n }),\n QueryPageStore.provideForCustomPage(),\n QueryPageStore.DI.provideConfig(() => config => ({\n ...config,\n childrenKey: 'children',\n type: 'list',\n style: {\n ...config.style,\n width: `var(--page-width-lv1)`,\n },\n })),\n QueryPageStore.Initializer.provide((store) => {\n const extras = injectNavigationExtras();\n const itemActions = computed(() => {\n return (item) => {\n switch (item.__typename) {\n case 'xxmachina_transformers': {\n return [\n {\n id: AppFrameStore.ActionId.NAVIGATE,\n name: 'スペック一覧を開く',\n icon: 'open_in_new',\n payload: {commands: [item.id], extras: {...extras()}}\n }\n ]\n }\n }\n };\n });\n effect(() => {\n applyToInput(store, 'itemActions', itemActions());\n });\n }),\n provideEffect(QueryPageStore.ActionId.DETAIL, () => {\n const extras = injectNavigationExtras();\n const app = inject(AppService);\n return (item) => {\n app.router.navigate([item.id], extras());\n };\n }),\n ],\n }\n];","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AAUO,MAAM,MAAM,GAAW;AAC5B,IAAA;AACE,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,IAAI,EAAE;AACJ,YAAA,OAAO,EAAE,sBAAsB;AAChC,SAAA;AACD,QAAA,YAAY,EAAE,MAAM,OAAO,sEAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AACtE,QAAA,SAAS,EAAE;YACT,mBAAmB,CAAC,MAAK;AACvB,gBAAA,OAAO,CAAC,IAAI,EAAE,GAAG,KAAI;oBACnB,QAAQ,GAAG;wBACT,KAAK,OAAO,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;;AAEtC,oBAAA,OAAO,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;AACvB,gBAAA,CAAC;AACH,YAAA,CAAC,CAAC;YACF,cAAc,CAAC,oBAAoB,EAAE;AACrC,YAAA,cAAc,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,MAAM,KAAK;AAC/C,gBAAA,GAAG,MAAM;AACT,gBAAA,WAAW,EAAE,UAAU;AACvB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE;oBACL,GAAG,MAAM,CAAC,KAAK;AACf,oBAAA,KAAK,EAAE,CAAA,qBAAA,CAAuB;AAC/B,iBAAA;AACF,aAAA,CAAC,CAAC;YACH,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC3C,gBAAA,MAAM,MAAM,GAAG,sBAAsB,EAAE;AACvC,gBAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAK;oBAChC,OAAO,CAAC,IAAI,KAAI;AACd,wBAAA,QAAQ,IAAI,CAAC,UAAU;4BACrB,KAAK,wBAAwB,EAAE;gCAC7B,OAAO;AACL,oCAAA;AACE,wCAAA,EAAE,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ;AACnC,wCAAA,IAAI,EAAE,WAAW;AACjB,wCAAA,IAAI,EAAE,aAAa;AACnB,wCAAA,OAAO,EAAE,EAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAC,GAAG,MAAM,EAAE,EAAC;AACrD;iCACF;4BACH;;AAEJ,oBAAA,CAAC;AACH,gBAAA,CAAC,uDAAC;gBACF,MAAM,CAAC,MAAK;oBACV,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AACnD,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;YACF,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAK;AACjD,gBAAA,MAAM,MAAM,GAAG,sBAAsB,EAAE;AACvC,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;gBAC9B,OAAO,CAAC,IAAI,KAAI;AACd,oBAAA,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AAC1C,gBAAA,CAAC;AACH,YAAA,CAAC,CAAC;AACH,SAAA;AACF;;;ACnEH;;AAEG;;;;"}
1
+ {"version":3,"file":"xxmachina-components-routes-transformers.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/routes/transformers/transformers.routes.ts","../../../../../packages/@xxmachina/components/src/lib/routes/transformers/xxmachina-components-routes-transformers.ts"],"sourcesContent":["import { computed, effect, inject } from '@angular/core';\nimport { Routes } from '@angular/router';\nimport { provideDataAccessor } from '@ng-atomic/common/pipes/data-accessor';\nimport { AppService } from '@ng-atomic/common/services/app';\nimport { injectNavigationExtras } from '@ng-atomic/common/utils';\nimport { AppFrameStore } from '@ng-atomic/components/frames/app';\nimport { applyToInput, provideEffect } from '@ng-atomic/core';\nimport { QueryPage, QueryPageStore } from '@xxmachina/components/pages/query';\nimport { get } from 'lodash-es';\n\nexport const routes: Routes = [\n {\n path: '',\n component: QueryPage,\n data: {\n queryId: 'gaaZzqj5ZLn9wEbpvcHH',\n },\n loadChildren: () => import('./pages/pages.routes').then(m => m.routes),\n providers: [\n provideDataAccessor(() => {\n return (item, key) => {\n switch (key) {\n case 'title': return get(item, 'id');\n }\n return get(item, key)\n }; \n }),\n QueryPageStore.provideForCustomPage(),\n QueryPageStore.DI.provideConfig(() => config => ({\n ...config,\n childrenKey: 'children',\n type: 'list',\n style: {\n ...config.style,\n width: `var(--page-width-lv1)`,\n },\n })),\n QueryPageStore.Initializer.provide((store) => {\n const extras = injectNavigationExtras();\n const itemActions = computed(() => {\n return (item: any) => {\n switch (item.__typename) {\n case 'xxmachina_transformers': {\n return [\n {\n id: AppFrameStore.ActionId.NAVIGATE,\n name: 'スペック一覧を開く',\n icon: 'open_in_new',\n payload: {commands: [item.id], extras: {...extras()}}\n }\n ]\n }\n }\n return [];\n };\n });\n effect(() => {\n applyToInput(store, 'itemActions', itemActions());\n });\n }),\n provideEffect(QueryPageStore.ActionId.DETAIL, () => {\n const extras = injectNavigationExtras();\n const app = inject(AppService);\n return (item) => {\n app.router.navigate([item.id], extras());\n };\n }),\n ],\n }\n];","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AAUO,MAAM,MAAM,GAAW;AAC5B,IAAA;AACE,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,IAAI,EAAE;AACJ,YAAA,OAAO,EAAE,sBAAsB;AAChC,SAAA;AACD,QAAA,YAAY,EAAE,MAAM,OAAO,sEAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AACtE,QAAA,SAAS,EAAE;YACT,mBAAmB,CAAC,MAAK;AACvB,gBAAA,OAAO,CAAC,IAAI,EAAE,GAAG,KAAI;oBACnB,QAAQ,GAAG;wBACT,KAAK,OAAO,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;;AAEtC,oBAAA,OAAO,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;AACvB,gBAAA,CAAC;AACH,YAAA,CAAC,CAAC;YACF,cAAc,CAAC,oBAAoB,EAAE;AACrC,YAAA,cAAc,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,MAAM,KAAK;AAC/C,gBAAA,GAAG,MAAM;AACT,gBAAA,WAAW,EAAE,UAAU;AACvB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE;oBACL,GAAG,MAAM,CAAC,KAAK;AACf,oBAAA,KAAK,EAAE,CAAA,qBAAA,CAAuB;AAC/B,iBAAA;AACF,aAAA,CAAC,CAAC;YACH,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC3C,gBAAA,MAAM,MAAM,GAAG,sBAAsB,EAAE;AACvC,gBAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAK;oBAChC,OAAO,CAAC,IAAS,KAAI;AACnB,wBAAA,QAAQ,IAAI,CAAC,UAAU;4BACrB,KAAK,wBAAwB,EAAE;gCAC7B,OAAO;AACL,oCAAA;AACE,wCAAA,EAAE,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ;AACnC,wCAAA,IAAI,EAAE,WAAW;AACjB,wCAAA,IAAI,EAAE,aAAa;AACnB,wCAAA,OAAO,EAAE,EAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAC,GAAG,MAAM,EAAE,EAAC;AACrD;iCACF;4BACH;;AAEF,wBAAA,OAAO,EAAE;AACX,oBAAA,CAAC;AACH,gBAAA,CAAC,uDAAC;gBACF,MAAM,CAAC,MAAK;oBACV,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AACnD,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;YACF,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAK;AACjD,gBAAA,MAAM,MAAM,GAAG,sBAAsB,EAAE;AACvC,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;gBAC9B,OAAO,CAAC,IAAI,KAAI;AACd,oBAAA,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AAC1C,gBAAA,CAAC;AACH,YAAA,CAAC,CAAC;AACH,SAAA;AACF;;;ACpEH;;AAEG;;;;"}
@@ -24,7 +24,7 @@ class CommandService {
24
24
  http = inject(HttpClient);
25
25
  resources = injectAll(Resource);
26
26
  resourceUrls = computed(() => {
27
- return this.resources().filter(resource => resource.type === 'openapi').map((resource) => resource.openapi?.url);
27
+ return this.resources().filter(resource => resource.type === 'openapi').map((resource) => resource.openapi?.url).filter((u) => !!u);
28
28
  }, ...(ngDevMode ? [{ debugName: "resourceUrls" }] : []));
29
29
  resourceUrls$ = toObservable(this.resourceUrls);
30
30
  refresh$ = new ReplaySubject(1);
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-services-command.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/command/command.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/command/xxmachina-components-services-command.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { computed, effect, inject, Injectable, InjectionToken } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { catchError, interval, lastValueFrom, map, NEVER, ReplaySubject, shareReplay, switchMap } from 'rxjs';\nimport { Command } from '@xxmachina/common/domain/models';\nimport { Resource } from '@xxmachina/common/domain/models';\nimport { JsonSchemaService } from '@xxmachina/components/services/json-schema';\nimport { AppService } from '@ng-atomic/common/services/app';\nimport { distinctUntilChangedArray, injectAll } from '@ng-atomic/common/stores/entities';\nimport { CommandBuilder } from '@xxmachina/common/domain/builder';\nimport { OpenApiService } from '@xxmachina/components/services/openapi';\nimport { CommandActionsBuilder, ActionId, createCommandNavigateAction, CommandActionFactoryOptions, createCommandExecutionAction } from '@xxmachina/common/domain/builder';\nimport { CommandHelper } from '@xxmachina/common/domain/models';\nimport { NavigationExtras } from '@angular/router';\nimport { Action } from '@ng-atomic/core';\nimport { merge } from 'lodash-es';\n\nexport type CommandActionOptions = CommandActionFactoryOptions & { overwrite?: Partial<Action> };\n\nexport type CommandPermissionResolver = (command: Command) => boolean;\nexport const COMMAND_PERMISSION_RESOLVER = new InjectionToken<CommandPermissionResolver>('[@xxmachina/components] COMMAND_PERMISSION_RESOLVER', {\n providedIn: 'root',\n factory: () => (command: Command) => true,\n});\n\nexport function provideCommandPermissionResolver(useFactory: () => CommandPermissionResolver) {\n return { provide: COMMAND_PERMISSION_RESOLVER, useFactory };\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CommandService {\n static readonly ActionId = ActionId;\n protected readonly app = inject(AppService);\n protected readonly http = inject(HttpClient);\n protected readonly resources = injectAll(Resource);\n protected readonly resourceUrls = computed(() => {\n return this.resources().filter(resource => resource.type === 'openapi').map((resource) => resource.openapi?.url);\n });\n protected readonly resourceUrls$ = toObservable(this.resourceUrls);\n protected readonly refresh$ = new ReplaySubject<void>(1);\n readonly schema = inject(JsonSchemaService);\n readonly openApi = inject(OpenApiService);\n readonly commands$ = this.refresh$.pipe(\n switchMap(() => this.resourceUrls$),\n this.app.loading.switchMap((urls) => {\n return this.openApi.getOpenApiMany(urls).pipe(\n catchError(() => (console.warn('[CommandService] getOpenApiMany failed.'), NEVER)),\n );\n }, 'commands-refresh'),\n map((openApis) => openApis.filter((openApi) => openApi !== null)),\n map((openApis) => openApis.map((openApi) => new CommandBuilder().buildFromOpenApi(openApi)).flat()),\n distinctUntilChangedArray(),\n shareReplay(1),\n );\n readonly commands = toSignal<Command[]>(this.commands$, {initialValue: [] as any});\n protected readonly permissionResolver = inject(COMMAND_PERMISSION_RESOLVER);\n\n constructor() {\n this.refresh();\n interval(1000 * 5).pipe(takeUntilDestroyed()).subscribe(() => this.refresh());\n\n effect(() => {\n console.debug('[CommandService] commands:', this.commands());\n });\n }\n\n getCommand(id: string): Command | null {\n return this.commands().find((command) => command.id === id) ?? null;\n }\n\n getCommands(ids: string[]): Command[] {\n return this.commands().filter((command) => ids.includes(command.id));\n }\n\n getActionBuilder(item?: any): CommandActionsBuilder {\n return new CommandActionsBuilder().setItem(item).setCommands(this.commands());\n }\n\n async execute<D extends object>(commandOrCommandId: Command | string, data: D): Promise<any> {\n const command = this.resolveCommand(commandOrCommandId);\n if (command === null) throw new Error(`Command not found: ${commandOrCommandId}`);\n if (command.type === 'webApiRequest') {\n const endpoint = CommandHelper.resolveEndpoint(command, data as Record<string, any>);\n switch (command.webApiRequest.responseContentType) {\n case 'application/octet-stream': {\n return lastValueFrom(this.http.request(command.webApiRequest.method, endpoint, {\n responseType: 'blob',\n observe: 'response',\n body: data,\n })).then((res) => {\n const contentDisposition = res.headers.get('Content-Disposition');\n const name = contentDisposition?.split('filename=')[1]?.replace(/\"/g, '') ?? 'sample.xlsx';\n const u = URL.createObjectURL(res.body);\n const a = document.createElement('a');\n a.href = u;\n a.download = name;\n a.click();\n });\n }\n default: {\n console.debug('[CommandService] execute:', {command, data});\n return lastValueFrom(this.http.request(command.webApiRequest.method, endpoint, { body: data })).then((data) => {\n return this.resolveResponse(data);\n });\n }\n }\n }\n }\n\n async refresh() {\n this.refresh$.next();\n }\n\n async resolveResponse(data: any) {\n console.debug('[CommandService] response:', data);\n if (data?.['__typename'] === 'action') {\n switch (data['id']) {\n case 'download': return this.download(data['payload'].url);\n }\n }\n return data;\n }\n\n async download(url: string) {\n return lastValueFrom(this.http.get(url, { responseType: 'blob', observe: 'response' })).then((res) => {\n const contentDisposition = res.headers.get('Content-Disposition');\n const name = contentDisposition?.split('filename=')[1]?.replace(/\"/g, '') ?? 'sample.xlsx';\n const u = URL.createObjectURL(res.body);\n const a = document.createElement('a');\n a.href = u;\n a.download = name;\n a.click();\n });\n }\n\n buildNavigationAction(\n commandOrId: Command | string,\n data: any = {},\n navigationExtra: NavigationExtras = {},\n options: CommandActionOptions = {},\n ) {\n const command = this.resolveCommand(commandOrId);\n const overwrite = merge({disabled: !this.permissionResolver(command)}, options?.overwrite ?? {});\n return createCommandNavigateAction(command, navigationExtra, data, options, overwrite);\n }\n\n buildExecutionAction(\n commandOrId: Command | string,\n data: any = {},\n options: CommandActionOptions = {},\n ) {\n const command = this.resolveCommand(commandOrId);\n const overwrite = merge({disabled: !this.hasPermission(command)}, options?.overwrite ?? {});\n return createCommandExecutionAction(command, data, options, overwrite);\n }\n\n hasPermission(commandOrId: Command | string): boolean {\n const command = this.resolveCommand(commandOrId);\n return this.permissionResolver(command);\n }\n\n protected resolveCommand(commandOrId: Command | string): Command | null {\n return typeof commandOrId === 'string' ? this.getCommand(commandOrId) : commandOrId;\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xxmachina-components-services-command.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/command/command.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/command/xxmachina-components-services-command.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { computed, effect, inject, Injectable, InjectionToken } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { catchError, interval, lastValueFrom, map, NEVER, ReplaySubject, shareReplay, switchMap } from 'rxjs';\nimport { Command } from '@xxmachina/common/domain/models';\nimport { Resource } from '@xxmachina/common/domain/models';\nimport { JsonSchemaService } from '@xxmachina/components/services/json-schema';\nimport { AppService } from '@ng-atomic/common/services/app';\nimport { distinctUntilChangedArray, injectAll } from '@ng-atomic/common/stores/entities';\nimport { CommandBuilder } from '@xxmachina/common/domain/builder';\nimport { OpenApiService } from '@xxmachina/components/services/openapi';\nimport { CommandActionsBuilder, ActionId, createCommandNavigateAction, CommandActionFactoryOptions, createCommandExecutionAction } from '@xxmachina/common/domain/builder';\nimport { CommandHelper } from '@xxmachina/common/domain/models';\nimport { NavigationExtras } from '@angular/router';\nimport { Action } from '@ng-atomic/core';\nimport { merge } from 'lodash-es';\n\nexport type CommandActionOptions = CommandActionFactoryOptions & { overwrite?: Partial<Action> };\n\nexport type CommandPermissionResolver = (command: Command) => boolean;\nexport const COMMAND_PERMISSION_RESOLVER = new InjectionToken<CommandPermissionResolver>('[@xxmachina/components] COMMAND_PERMISSION_RESOLVER', {\n providedIn: 'root',\n factory: () => (command: Command) => true,\n});\n\nexport function provideCommandPermissionResolver(useFactory: () => CommandPermissionResolver) {\n return { provide: COMMAND_PERMISSION_RESOLVER, useFactory };\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CommandService {\n static readonly ActionId = ActionId;\n protected readonly app = inject(AppService);\n protected readonly http = inject(HttpClient);\n protected readonly resources = injectAll(Resource);\n protected readonly resourceUrls = computed(() => {\n return this.resources().filter(resource => resource.type === 'openapi').map((resource) => resource.openapi?.url).filter((u): u is string => !!u);\n });\n protected readonly resourceUrls$ = toObservable(this.resourceUrls);\n protected readonly refresh$ = new ReplaySubject<void>(1);\n readonly schema = inject(JsonSchemaService);\n readonly openApi = inject(OpenApiService);\n readonly commands$ = this.refresh$.pipe(\n switchMap(() => this.resourceUrls$),\n this.app.loading.switchMap((urls) => {\n return this.openApi.getOpenApiMany(urls).pipe(\n catchError(() => (console.warn('[CommandService] getOpenApiMany failed.'), NEVER)),\n );\n }, 'commands-refresh'),\n map((openApis) => openApis.filter((openApi) => openApi !== null)),\n map((openApis) => openApis.map((openApi) => new CommandBuilder().buildFromOpenApi(openApi)).flat()),\n distinctUntilChangedArray(),\n shareReplay(1),\n );\n readonly commands = toSignal<Command[]>(this.commands$, {initialValue: [] as any});\n protected readonly permissionResolver = inject(COMMAND_PERMISSION_RESOLVER);\n\n constructor() {\n this.refresh();\n interval(1000 * 5).pipe(takeUntilDestroyed()).subscribe(() => this.refresh());\n\n effect(() => {\n console.debug('[CommandService] commands:', this.commands());\n });\n }\n\n getCommand(id: string): Command | null {\n return this.commands()!.find((command) => command.id === id) ?? null;\n }\n\n getCommands(ids: string[]): Command[] {\n return this.commands()!.filter((command) => ids.includes(command.id));\n }\n\n getActionBuilder(item?: any): CommandActionsBuilder {\n return new CommandActionsBuilder().setItem(item).setCommands(this.commands()!);\n }\n\n async execute<D extends object>(commandOrCommandId: Command | string, data: D): Promise<any> {\n const command = this.resolveCommand(commandOrCommandId);\n if (command === null) throw new Error(`Command not found: ${commandOrCommandId}`);\n if (command.type === 'webApiRequest') {\n const endpoint = CommandHelper.resolveEndpoint(command, data as Record<string, any>);\n switch (command.webApiRequest.responseContentType) {\n case 'application/octet-stream': {\n return lastValueFrom(this.http.request(command.webApiRequest.method, endpoint, {\n responseType: 'blob',\n observe: 'response',\n body: data,\n })).then((res) => {\n const contentDisposition = res.headers.get('Content-Disposition');\n const name = contentDisposition?.split('filename=')[1]?.replace(/\"/g, '') ?? 'sample.xlsx';\n const u = URL.createObjectURL(res.body!);\n const a = document.createElement('a');\n a.href = u;\n a.download = name;\n a.click();\n });\n }\n default: {\n console.debug('[CommandService] execute:', {command, data});\n return lastValueFrom(this.http.request(command.webApiRequest.method, endpoint, { body: data })).then((data) => {\n return this.resolveResponse(data);\n });\n }\n }\n }\n }\n\n async refresh() {\n this.refresh$.next();\n }\n\n async resolveResponse(data: any) {\n console.debug('[CommandService] response:', data);\n if (data?.['__typename'] === 'action') {\n switch (data['id']) {\n case 'download': return this.download(data['payload'].url);\n }\n }\n return data;\n }\n\n async download(url: string) {\n return lastValueFrom(this.http.get(url, { responseType: 'blob', observe: 'response' })).then((res) => {\n const contentDisposition = res.headers.get('Content-Disposition');\n const name = contentDisposition?.split('filename=')[1]?.replace(/\"/g, '') ?? 'sample.xlsx';\n const u = URL.createObjectURL(res.body!);\n const a = document.createElement('a');\n a.href = u;\n a.download = name;\n a.click();\n });\n }\n\n buildNavigationAction(\n commandOrId: Command | string,\n data: any = {},\n navigationExtra: NavigationExtras = {},\n options: CommandActionOptions = {},\n ) {\n const command = this.resolveCommand(commandOrId);\n const overwrite = merge({disabled: !this.permissionResolver(command!)}, options?.overwrite ?? {});\n return createCommandNavigateAction(command!, navigationExtra, data, options, overwrite);\n }\n\n buildExecutionAction(\n commandOrId: Command | string,\n data: any = {},\n options: CommandActionOptions = {},\n ) {\n const command = this.resolveCommand(commandOrId);\n const overwrite = merge({disabled: !this.hasPermission(command!)}, options?.overwrite ?? {});\n return createCommandExecutionAction(command!, data, options, overwrite);\n }\n\n hasPermission(commandOrId: Command | string): boolean {\n const command = this.resolveCommand(commandOrId);\n return this.permissionResolver(command!);\n }\n\n protected resolveCommand(commandOrId: Command | string): Command | null {\n return typeof commandOrId === 'string' ? this.getCommand(commandOrId) : commandOrId;\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -29,12 +29,12 @@ class QueryFormService {
29
29
  return {
30
30
  endpoint: formValue?.endpoint ?? '',
31
31
  query: formValue?.query ?? '',
32
- variablesJson: formValue?.variablesJson,
32
+ variablesJson: formValue?.variablesJson ?? '',
33
33
  variables: QueryHelper.tryParseJson(formValue?.variablesJson || '{}'),
34
- headersJson: formValue?.headersJson,
34
+ headersJson: formValue?.headersJson ?? '',
35
35
  headers: QueryHelper.tryParseJson(formValue?.headersJson || '{}'),
36
- transformerTs: formValue.transformerTs,
37
- transformer: formValue.transformer,
36
+ transformerTs: formValue?.transformerTs ?? '',
37
+ transformer: formValue?.transformer,
38
38
  };
39
39
  }
40
40
  static parse(formValue) {
@@ -44,7 +44,7 @@ class QueryFormService {
44
44
  projectId: '',
45
45
  type: formValue?.type ?? 'graphql',
46
46
  title: formValue?.title ?? '',
47
- graphql: QueryFormService.parseGraphql(formValue?.graphql),
47
+ graphql: QueryFormService.parseGraphql(formValue?.graphql ?? {}),
48
48
  summary: '',
49
49
  createdAt: null,
50
50
  updatedAt: null,
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-services-forms-query.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/forms/query/query.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/forms/query/xxmachina-components-services-forms-query.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { Query, QueryHelper } from '@xxmachina/common/domain/models';\nimport { QueryValidators } from '@xxmachina/components/validators/query';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class QueryFormService {\n protected fb = inject(FormBuilder);\n\n build() {\n return this.fb.group({\n id: [''],\n title: [''],\n type: ['graphql'],\n graphql: this.fb.group({\n endpoint: [''],\n query: [''],\n variablesJson: [JSON.stringify({}, null, 2)],\n headersJson: [JSON.stringify({\n 'content-type': 'application/json',\n }, null, 2)],\n transformerTs: [null],\n transformer: [null],\n }, {\n asyncValidators: QueryValidators.graphql(),\n }),\n });\n }\n\n static parseGraphql(formValue: Partial<{\n endpoint: string;\n query: string;\n variablesJson: string;\n headersJson: string;\n transformerTs: string | null;\n transformer: (data: any) => any | null;\n }>): Query['graphql'] {\n return {\n endpoint: formValue?.endpoint ?? '',\n query: formValue?.query ?? '',\n variablesJson: formValue?.variablesJson,\n variables: QueryHelper.tryParseJson(formValue?.variablesJson || '{}'),\n headersJson: formValue?.headersJson,\n headers: QueryHelper.tryParseJson(formValue?.headersJson || '{}'),\n transformerTs: formValue.transformerTs,\n transformer: formValue.transformer,\n };\n }\n\n static parse(formValue: Partial<{\n id: string,\n title: string,\n type: string,\n graphql: Partial<{\n endpoint: string;\n query: string;\n variablesJson: string;\n headersJson: string;\n transformerTs: string | null;\n transformer: (data: any) => any | null;\n }>,\n }>): Query {\n console.debug('[QueryFormService] parse:', formValue);\n return {\n id: formValue?.id ?? '',\n projectId: '',\n type: formValue?.type as any ?? 'graphql',\n title: formValue?.title ?? '',\n graphql: QueryFormService.parseGraphql(formValue?.graphql),\n summary: '',\n createdAt: null,\n updatedAt: null,\n } as Query;\n }\n\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;MAQa,gBAAgB,CAAA;AACjB,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;IAElC,KAAK,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACnB,EAAE,EAAE,CAAC,EAAE,CAAC;YACR,KAAK,EAAE,CAAC,EAAE,CAAC;YACX,IAAI,EAAE,CAAC,SAAS,CAAC;AACjB,YAAA,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;gBACrB,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACd,KAAK,EAAE,CAAC,EAAE,CAAC;AACX,gBAAA,aAAa,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5C,gBAAA,WAAW,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;AAC3B,wBAAA,cAAc,EAAE,kBAAkB;AACnC,qBAAA,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACZ,aAAa,EAAE,CAAC,IAAI,CAAC;gBACrB,WAAW,EAAE,CAAC,IAAI,CAAC;aACpB,EAAE;AACD,gBAAA,eAAe,EAAE,eAAe,CAAC,OAAO,EAAE;aAC3C,CAAC;AACH,SAAA,CAAC;IACJ;IAEA,OAAO,YAAY,CAAC,SAOlB,EAAA;QACA,OAAO;AACL,YAAA,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI,EAAE;AACnC,YAAA,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;YAC7B,aAAa,EAAE,SAAS,EAAE,aAAa;YACvC,SAAS,EAAE,WAAW,CAAC,YAAY,CAAC,SAAS,EAAE,aAAa,IAAI,IAAI,CAAC;YACrE,WAAW,EAAE,SAAS,EAAE,WAAW;YACnC,OAAO,EAAE,WAAW,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,IAAI,IAAI,CAAC;YACjE,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,WAAW,EAAE,SAAS,CAAC,WAAW;SACnC;IACH;IAEA,OAAO,KAAK,CAAC,SAYX,EAAA;AACA,QAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,SAAS,CAAC;QACrD,OAAO;AACL,YAAA,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE;AACvB,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,IAAI,EAAE,SAAS,EAAE,IAAW,IAAI,SAAS;AACzC,YAAA,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;YAC7B,OAAO,EAAE,gBAAgB,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC;AAC1D,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,SAAS,EAAE,IAAI;SACP;IACZ;uGAnEW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA;;2FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACPD;;AAEG;;;;"}
1
+ {"version":3,"file":"xxmachina-components-services-forms-query.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/forms/query/query.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/forms/query/xxmachina-components-services-forms-query.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { Query, QueryHelper } from '@xxmachina/common/domain/models';\nimport { QueryValidators } from '@xxmachina/components/validators/query';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class QueryFormService {\n protected fb = inject(FormBuilder);\n\n build() {\n return this.fb.group({\n id: [''],\n title: [''],\n type: ['graphql'],\n graphql: this.fb.group({\n endpoint: [''],\n query: [''],\n variablesJson: [JSON.stringify({}, null, 2)],\n headersJson: [JSON.stringify({\n 'content-type': 'application/json',\n }, null, 2)],\n transformerTs: [null],\n transformer: [null],\n }, {\n asyncValidators: QueryValidators.graphql(),\n }),\n });\n }\n\n static parseGraphql(formValue: Partial<{\n endpoint: string;\n query: string;\n variablesJson: string;\n headersJson: string;\n transformerTs: string | null;\n transformer: (data: any) => any | null;\n }>): Query['graphql'] {\n return {\n endpoint: formValue?.endpoint ?? '',\n query: formValue?.query ?? '',\n variablesJson: formValue?.variablesJson ?? '',\n variables: QueryHelper.tryParseJson(formValue?.variablesJson || '{}'),\n headersJson: formValue?.headersJson ?? '',\n headers: QueryHelper.tryParseJson(formValue?.headersJson || '{}'),\n transformerTs: formValue?.transformerTs ?? '',\n transformer: formValue?.transformer,\n } as Query['graphql'];\n }\n\n static parse(formValue: Partial<{\n id: string,\n title: string,\n type: string,\n graphql: Partial<{\n endpoint: string;\n query: string;\n variablesJson: string;\n headersJson: string;\n transformerTs: string | null;\n transformer: (data: any) => any | null;\n }>,\n }>): Query {\n console.debug('[QueryFormService] parse:', formValue);\n return {\n id: formValue?.id ?? '',\n projectId: '',\n type: formValue?.type as any ?? 'graphql',\n title: formValue?.title ?? '',\n graphql: QueryFormService.parseGraphql(formValue?.graphql ?? {}),\n summary: '',\n createdAt: null,\n updatedAt: null,\n } as unknown as Query;\n }\n\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;MAQa,gBAAgB,CAAA;AACjB,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;IAElC,KAAK,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACnB,EAAE,EAAE,CAAC,EAAE,CAAC;YACR,KAAK,EAAE,CAAC,EAAE,CAAC;YACX,IAAI,EAAE,CAAC,SAAS,CAAC;AACjB,YAAA,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;gBACrB,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACd,KAAK,EAAE,CAAC,EAAE,CAAC;AACX,gBAAA,aAAa,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5C,gBAAA,WAAW,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;AAC3B,wBAAA,cAAc,EAAE,kBAAkB;AACnC,qBAAA,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACZ,aAAa,EAAE,CAAC,IAAI,CAAC;gBACrB,WAAW,EAAE,CAAC,IAAI,CAAC;aACpB,EAAE;AACD,gBAAA,eAAe,EAAE,eAAe,CAAC,OAAO,EAAE;aAC3C,CAAC;AACH,SAAA,CAAC;IACJ;IAEA,OAAO,YAAY,CAAC,SAOlB,EAAA;QACA,OAAO;AACL,YAAA,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI,EAAE;AACnC,YAAA,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;AAC7B,YAAA,aAAa,EAAE,SAAS,EAAE,aAAa,IAAI,EAAE;YAC7C,SAAS,EAAE,WAAW,CAAC,YAAY,CAAC,SAAS,EAAE,aAAa,IAAI,IAAI,CAAC;AACrE,YAAA,WAAW,EAAE,SAAS,EAAE,WAAW,IAAI,EAAE;YACzC,OAAO,EAAE,WAAW,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,IAAI,IAAI,CAAC;AACjE,YAAA,aAAa,EAAE,SAAS,EAAE,aAAa,IAAI,EAAE;YAC7C,WAAW,EAAE,SAAS,EAAE,WAAW;SAChB;IACvB;IAEA,OAAO,KAAK,CAAC,SAYX,EAAA;AACA,QAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,SAAS,CAAC;QACrD,OAAO;AACL,YAAA,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE;AACvB,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,IAAI,EAAE,SAAS,EAAE,IAAW,IAAI,SAAS;AACzC,YAAA,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;YAC7B,OAAO,EAAE,gBAAgB,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,IAAI,EAAE,CAAC;AAChE,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,SAAS,EAAE,IAAI;SACI;IACvB;uGAnEW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA;;2FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACPD;;AAEG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-services-forms-schedule.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/forms/schedule/schedule.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/forms/schedule/xxmachina-components-services-forms-schedule.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms';\nimport { Schedule } from '@xxmachina/common/domain/models';\nimport dayjs from 'dayjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ScheduleService {\n protected fb = inject(FormBuilder);\n\n buildScheduleForm({\n id = null,\n calendarId = 'primary',\n name = '',\n startAt = dayjs('2023-12-16'),\n endAt = startAt.add(1, 'hours'),\n url = '',\n }: Partial<Schedule> = {}) {\n return this.fb.group({\n id: [id],\n calendarId: [calendarId],\n name: [name],\n startAt: [startAt],\n endAt: [endAt],\n url: [url],\n });\n }\n\n build() {\n return this.fb.group({\n dateRange: this.fb.group({\n start: [dayjs()],\n end: [dayjs().add(1, 'month')],\n }),\n timeRange: this.fb.group({\n start: ['13:00'],\n end: ['20:00'],\n }),\n title: [''],\n events: this.fb.array<FormGroup<{\n startAt: FormControl<dayjs.Dayjs>,\n endAt: FormControl<dayjs.Dayjs>,\n }>>([]),\n message: [''],\n });\n }\n\n getSchedulesForm(form: ReturnType<typeof this['build']>): FormArray {\n return form.get(['events']) as FormArray;\n }\n\n getSchedules(form: ReturnType<typeof this['build']>): Schedule[] {\n return this.getSchedulesForm(form).value.map((schedule) => Schedule.from({...schedule}));\n }\n\n addSchedule(form: ReturnType<typeof this['build']>, schedule: Schedule) {\n this.rebuildSchedulesForm(form, sortSchedules([...this.getSchedules(form), schedule]));\n }\n\n removeAt(form: ReturnType<typeof this['build']>, index: number) {\n const scheduleForm = this.getSchedulesForm(form);\n scheduleForm.removeAt(index);\n }\n\n removeAllSchedules(form: ReturnType<typeof this['build']>) {\n const scheduleForm = this.getSchedulesForm(form);\n while (scheduleForm.length) scheduleForm.removeAt(0);\n }\n\n rebuildSchedulesForm(form: ReturnType<typeof this['build']>, schedules: Schedule[]) {\n this.removeAllSchedules(form);\n const scheduleForm = this.getSchedulesForm(form);\n for (const schedule of schedules) scheduleForm.push(this.buildScheduleForm(schedule));\n }\n}\n\nfunction sortSchedules(schedules: Schedule[]): Schedule[] {\n return schedules.sort((a, b) => a.startAt.diff(b.startAt));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xxmachina-components-services-forms-schedule.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/forms/schedule/schedule.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/forms/schedule/xxmachina-components-services-forms-schedule.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms';\nimport { Schedule } from '@xxmachina/common/domain/models';\nimport dayjs from 'dayjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ScheduleService {\n protected fb = inject(FormBuilder);\n\n buildScheduleForm({\n id = null as unknown as string,\n calendarId = 'primary',\n name = '',\n startAt = dayjs('2023-12-16'),\n endAt = startAt.add(1, 'hours'),\n url = '',\n }: Partial<Schedule> = {}) {\n return this.fb.group({\n id: [id],\n calendarId: [calendarId],\n name: [name],\n startAt: [startAt],\n endAt: [endAt],\n url: [url],\n });\n }\n\n build() {\n return this.fb.group({\n dateRange: this.fb.group({\n start: [dayjs()],\n end: [dayjs().add(1, 'month')],\n }),\n timeRange: this.fb.group({\n start: ['13:00'],\n end: ['20:00'],\n }),\n title: [''],\n events: this.fb.array<FormGroup<{\n startAt: FormControl<dayjs.Dayjs>,\n endAt: FormControl<dayjs.Dayjs>,\n }>>([]),\n message: [''],\n });\n }\n\n getSchedulesForm(form: ReturnType<typeof this['build']>): FormArray {\n return form.get(['events']) as FormArray;\n }\n\n getSchedules(form: ReturnType<typeof this['build']>): Schedule[] {\n return this.getSchedulesForm(form).value.map((schedule: any) => Schedule.from({...schedule}));\n }\n\n addSchedule(form: ReturnType<typeof this['build']>, schedule: Schedule) {\n this.rebuildSchedulesForm(form, sortSchedules([...this.getSchedules(form), schedule]));\n }\n\n removeAt(form: ReturnType<typeof this['build']>, index: number) {\n const scheduleForm = this.getSchedulesForm(form);\n scheduleForm.removeAt(index);\n }\n\n removeAllSchedules(form: ReturnType<typeof this['build']>) {\n const scheduleForm = this.getSchedulesForm(form);\n while (scheduleForm.length) scheduleForm.removeAt(0);\n }\n\n rebuildSchedulesForm(form: ReturnType<typeof this['build']>, schedules: Schedule[]) {\n this.removeAllSchedules(form);\n const scheduleForm = this.getSchedulesForm(form);\n for (const schedule of schedules) scheduleForm.push(this.buildScheduleForm(schedule));\n }\n}\n\nfunction sortSchedules(schedules: Schedule[]): Schedule[] {\n return schedules.sort((a, b) => a.startAt.diff(b.startAt));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-services-invoice.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/invoice/invoice.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/invoice/xxmachina-components-services-invoice.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { GraphqlService } from '@xxmachina/components/services/graphql';\nimport { Observable, lastValueFrom, map } from 'rxjs';\nimport { Invoice, Order } from '@xxmachina/common/invoice/domain/models';\nimport dayjs from 'dayjs';\nimport { plainToInstance } from 'class-transformer';\nimport { HttpClient } from '@angular/common/http';\n\nconst query = `\nquery {\n invoices{\n id\n no\n title\n subject\n customerId\n vendorId\n amount\n dueDate\n orderIds\n customer {\n id\n name\n type\n address\n postalCode\n email\n billingEmail\n billingContact\n phoneNumber\n contact\n suffix\n bankAccount\n }\n vendor {\n id\n name\n type\n address\n postalCode\n email\n billingEmail\n billingContact\n phoneNumber\n contact\n suffix\n bankAccount\n }\n orders {\n id\n title\n eclId\n customerId\n vendorId\n contractId\n invoiceId\n startDate\n endDate\n unitPrice\n unit\n quantity\n amountInput\n amount\n statusIn\n statusOut\n }\n }\n}\n`;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class InvoiceService {\n readonly graphql = inject(GraphqlService);\n readonly http = inject(HttpClient);\n\n list(): Observable<Invoice[]> {\n return this.graphql.graphql({\n query: `query { invoices{ id no title subject customerId vendorId amount dueDate orderIds } }`,\n }).pipe(\n map((data => data?.data?.invoices ?? [])),\n map((invoices) => invoices.map((invoice: any) => plainToInstance(Invoice, {\n ...invoice,\n no: parseInt(invoice.no, 10),\n }))),\n );\n }\n\n getInvoices(): Observable<Invoice[]> {\n return this.graphql.graphql({query}).pipe(\n map((data => data?.data?.invoices ?? [])),\n map((invoices) => invoices.map((invoice: any) => Invoice.from({\n ...invoice,\n no: parseInt(invoice.no, 10),\n dueDate: dayjs(invoice.dueDate),\n orders: invoice.orders.map((order: any) => Order.from({\n ...order,\n startDate: dayjs(order.startDate),\n endDate: dayjs(order.endDate),\n })),\n }))),\n )\n }\n\n async download(invoice: Invoice): Promise<void> {\n return lastValueFrom(this.http.post('/api-next/invoices/pdf', invoice, {\n responseType: 'blob',\n observe: 'response',\n })).then((res) => {\n const url = URL.createObjectURL(res.body);\n const a = document.createElement('a');\n a.href = url;\n a.download = decodeURIComponent(res.headers.get('content-disposition').split('filename=')[1]);\n a.click();\n URL.revokeObjectURL(url);\n });\n }\n\n async send(invoice: Invoice): Promise<void> {\n return lastValueFrom(this.http.post<void>(`/api-next/invoices/send`, invoice));\n }\n\n async sync(): Promise<void> {\n return lastValueFrom(this.http.post<void>(`/api-next/invoices/sync`, {}));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xxmachina-components-services-invoice.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/invoice/invoice.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/invoice/xxmachina-components-services-invoice.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { GraphqlService } from '@xxmachina/components/services/graphql';\nimport { Observable, lastValueFrom, map } from 'rxjs';\nimport { Invoice, Order } from '@xxmachina/common/invoice/domain/models';\nimport dayjs from 'dayjs';\nimport { plainToInstance } from 'class-transformer';\nimport { HttpClient } from '@angular/common/http';\n\nconst query = `\nquery {\n invoices{\n id\n no\n title\n subject\n customerId\n vendorId\n amount\n dueDate\n orderIds\n customer {\n id\n name\n type\n address\n postalCode\n email\n billingEmail\n billingContact\n phoneNumber\n contact\n suffix\n bankAccount\n }\n vendor {\n id\n name\n type\n address\n postalCode\n email\n billingEmail\n billingContact\n phoneNumber\n contact\n suffix\n bankAccount\n }\n orders {\n id\n title\n eclId\n customerId\n vendorId\n contractId\n invoiceId\n startDate\n endDate\n unitPrice\n unit\n quantity\n amountInput\n amount\n statusIn\n statusOut\n }\n }\n}\n`;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class InvoiceService {\n readonly graphql = inject(GraphqlService);\n readonly http = inject(HttpClient);\n\n list(): Observable<Invoice[]> {\n return this.graphql.graphql({\n query: `query { invoices{ id no title subject customerId vendorId amount dueDate orderIds } }`,\n }).pipe(\n map((data => data?.data?.invoices ?? [])),\n map((invoices) => invoices.map((invoice: any) => plainToInstance(Invoice, {\n ...invoice,\n no: parseInt(invoice.no, 10),\n }))),\n );\n }\n\n getInvoices(): Observable<Invoice[]> {\n return this.graphql.graphql({query}).pipe(\n map((data => data?.data?.invoices ?? [])),\n map((invoices) => invoices.map((invoice: any) => Invoice.from({\n ...invoice,\n no: parseInt(invoice.no, 10),\n dueDate: dayjs(invoice.dueDate),\n orders: invoice.orders.map((order: any) => Order.from({\n ...order,\n startDate: dayjs(order.startDate),\n endDate: dayjs(order.endDate),\n })),\n }))),\n )\n }\n\n async download(invoice: Invoice): Promise<void> {\n return lastValueFrom(this.http.post('/api-next/invoices/pdf', invoice, {\n responseType: 'blob',\n observe: 'response',\n })).then((res) => {\n const url = URL.createObjectURL(res.body!);\n const a = document.createElement('a');\n a.href = url;\n a.download = decodeURIComponent(res.headers.get('content-disposition')!.split('filename=')[1]);\n a.click();\n URL.revokeObjectURL(url);\n });\n }\n\n async send(invoice: Invoice): Promise<void> {\n return lastValueFrom(this.http.post<void>(`/api-next/invoices/send`, invoice));\n }\n\n async sync(): Promise<void> {\n return lastValueFrom(this.http.post<void>(`/api-next/invoices/sync`, {}));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-services-openai.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/openai/openai.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/openai/xxmachina-components-services-openai.ts"],"sourcesContent":["import { computed, inject, Injectable, InjectionToken, Provider, signal } from '@angular/core';\nimport OpenAI, { ClientOptions } from 'openai';\nimport type { ChatCompletionMessageParam } from 'openai/resources/chat/completions';\nimport { Message } from '@ng-atomic/common/models';\nimport { HttpClient } from '@angular/common/http';\nimport { lastValueFrom } from 'rxjs';\n\nasync function imageToBase64(imageFile: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n const base64String = reader.result as string;\n resolve(base64String.split(',')[1]);\n };\n reader.onerror = reject;\n reader.readAsDataURL(imageFile);\n });\n}\n\nclass OpenAiMessageHelper {\n static async buildMessage(message: Message): Promise<ChatCompletionMessageParam> {\n if (message?.attachments?.length) {\n const content = await Promise.all(message.attachments.map(async attachment => ({\n type: 'image_url' as const,\n image_url: { url: `data:image/jpeg;base64,${await imageToBase64(attachment.file)}` },\n })));\n return {\n role: message.role as 'user',\n content: [\n ...content,\n { type: 'text', text: message.content }\n ]\n };\n }\n\n return {\n role: message.role,\n content: message?.content || ''\n }\n }\n}\n\nexport const OPENAI_CONFIG = new InjectionToken<ClientOptions>('[@xxmachina/components/services/openai] OpenAiConfig');\nexport const OPENAI_BACKEND_URL = new InjectionToken<string>('[@xxmachina/components/services/openai] OpenAiBackendUrl');\n\nexport function provideOpenaiConfig(useFactory?: () => ClientOptions) {\n return [\n { provide: OPENAI_CONFIG, useFactory },\n ]\n}\n\nexport function provideOpenaiBackendUrl(url: string) {\n return { provide: OPENAI_BACKEND_URL, useValue: url };\n}\n\n@Injectable({ providedIn: 'root' })\nexport class OpenAIService {\n readonly config = inject(OPENAI_CONFIG);\n readonly apiKey = signal(this.config?.apiKey);\n readonly openai = computed(() => new OpenAI(this.config));\n readonly hasApiKey = computed(() => (this.apiKey() as string)?.trim() !== '');\n\n async complete(_messages: Message[]): Promise<Message[]> {\n const resolvedMessages = await Promise.all(_messages.map(message => OpenAiMessageHelper.buildMessage(message)));\n console.debug('[OpenAIService] resolvedMessages', resolvedMessages);\n const response = await this.openai().chat.completions.create({\n model: 'gpt-4o-mini',\n messages: [...resolvedMessages],\n });\n const assistantMessage = response.choices[0]?.message?.content || 'エラーが発生しました。';\n return [\n ..._messages,\n { role: 'assistant', content: assistantMessage, time: new Date() }\n ];\n }\n}\n\n@Injectable()\nexport class OpenAIViaBackendService extends OpenAIService {\n private readonly http = inject(HttpClient);\n private readonly backendUrl = inject(OPENAI_BACKEND_URL);\n\n async complete(_messages: Message[]): Promise<Message[]> {\n const resolvedMessages = await Promise.all(_messages.map(message => OpenAiMessageHelper.buildMessage(message)));\n console.debug('[OpenAIService] resolvedMessages', resolvedMessages);\n const response = await lastValueFrom(this.http.post<any>(this.backendUrl, {\n model: 'gpt-4o-mini',\n messages: [...resolvedMessages],\n }))\n const assistantMessage = response.choices[0]?.message?.content || 'エラーが発生しました。';\n return [\n ..._messages,\n { role: 'assistant', content: assistantMessage, time: new Date() }\n ];\n }\n}\n\nexport function provideOpenAIViaBackendService(backendUrl: string): Provider[] {\n return [\n { provide: OPENAI_BACKEND_URL, useValue: backendUrl },\n { provide: OpenAIService, useClass: OpenAIViaBackendService },\n ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xxmachina-components-services-openai.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/openai/openai.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/openai/xxmachina-components-services-openai.ts"],"sourcesContent":["import { computed, inject, Injectable, InjectionToken, Provider, signal } from '@angular/core';\nimport OpenAI, { ClientOptions } from 'openai';\nimport type { ChatCompletionMessageParam } from 'openai/resources/chat/completions';\nimport { Message } from '@ng-atomic/common/models';\nimport { HttpClient } from '@angular/common/http';\nimport { lastValueFrom } from 'rxjs';\n\nasync function imageToBase64(imageFile: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n const base64String = reader.result as string;\n resolve(base64String.split(',')[1]);\n };\n reader.onerror = reject;\n reader.readAsDataURL(imageFile);\n });\n}\n\nclass OpenAiMessageHelper {\n static async buildMessage(message: Message): Promise<ChatCompletionMessageParam> {\n if (message?.attachments?.length) {\n const content = await Promise.all(message.attachments.map(async attachment => ({\n type: 'image_url' as const,\n image_url: { url: `data:image/jpeg;base64,${await imageToBase64(attachment.file)}` },\n })));\n return {\n role: message.role as 'user',\n content: [\n ...content,\n { type: 'text', text: message.content }\n ] as never\n };\n }\n\n return {\n role: message.role,\n content: message?.content || ''\n }\n }\n}\n\nexport const OPENAI_CONFIG = new InjectionToken<ClientOptions>('[@xxmachina/components/services/openai] OpenAiConfig');\nexport const OPENAI_BACKEND_URL = new InjectionToken<string>('[@xxmachina/components/services/openai] OpenAiBackendUrl');\n\nexport function provideOpenaiConfig(useFactory?: () => ClientOptions) {\n return [\n { provide: OPENAI_CONFIG, useFactory },\n ]\n}\n\nexport function provideOpenaiBackendUrl(url: string) {\n return { provide: OPENAI_BACKEND_URL, useValue: url };\n}\n\n@Injectable({ providedIn: 'root' })\nexport class OpenAIService {\n readonly config = inject(OPENAI_CONFIG);\n readonly apiKey = signal(this.config?.apiKey);\n readonly openai = computed(() => new OpenAI(this.config));\n readonly hasApiKey = computed(() => (this.apiKey() as string)?.trim() !== '');\n\n async complete(_messages: Message[]): Promise<Message[]> {\n const resolvedMessages = await Promise.all(_messages.map(message => OpenAiMessageHelper.buildMessage(message)));\n console.debug('[OpenAIService] resolvedMessages', resolvedMessages);\n const response = await this.openai().chat.completions.create({\n model: 'gpt-4o-mini',\n messages: [...resolvedMessages],\n });\n const assistantMessage = response.choices[0]?.message?.content || 'エラーが発生しました。';\n return [\n ..._messages,\n { role: 'assistant', content: assistantMessage, time: new Date() }\n ];\n }\n}\n\n@Injectable()\nexport class OpenAIViaBackendService extends OpenAIService {\n private readonly http = inject(HttpClient);\n private readonly backendUrl = inject(OPENAI_BACKEND_URL);\n\n async complete(_messages: Message[]): Promise<Message[]> {\n const resolvedMessages = await Promise.all(_messages.map(message => OpenAiMessageHelper.buildMessage(message)));\n console.debug('[OpenAIService] resolvedMessages', resolvedMessages);\n const response = await lastValueFrom(this.http.post<any>(this.backendUrl, {\n model: 'gpt-4o-mini',\n messages: [...resolvedMessages],\n }))\n const assistantMessage = response.choices[0]?.message?.content || 'エラーが発生しました。';\n return [\n ..._messages,\n { role: 'assistant', content: assistantMessage, time: new Date() }\n ];\n }\n}\n\nexport function provideOpenAIViaBackendService(backendUrl: string): Provider[] {\n return [\n { provide: OPENAI_BACKEND_URL, useValue: backendUrl },\n { provide: OpenAIService, useClass: OpenAIViaBackendService },\n ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAOA,eAAe,aAAa,CAAC,SAAe,EAAA;IAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,QAAA,MAAM,CAAC,MAAM,GAAG,MAAK;AACnB,YAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAgB;YAC5C,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,QAAA,CAAC;AACD,QAAA,MAAM,CAAC,OAAO,GAAG,MAAM;AACvB,QAAA,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC;AACjC,IAAA,CAAC,CAAC;AACJ;AAEA,MAAM,mBAAmB,CAAA;AACvB,IAAA,aAAa,YAAY,CAAC,OAAgB,EAAA;AACxC,QAAA,IAAI,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE;AAChC,YAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,OAAM,UAAU,MAAK;AAC7E,gBAAA,IAAI,EAAE,WAAoB;AAC1B,gBAAA,SAAS,EAAE,EAAE,GAAG,EAAE,CAAA,uBAAA,EAA0B,MAAM,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE;aACrF,CAAC,CAAC,CAAC;YACJ,OAAO;gBACL,IAAI,EAAE,OAAO,CAAC,IAAc;AAC5B,gBAAA,OAAO,EAAE;AACP,oBAAA,GAAG,OAAO;oBACV,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO;AAC7B;aACX;QACH;QAEA,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,YAAA,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI;SAC9B;IACH;AACD;MAEY,aAAa,GAAG,IAAI,cAAc,CAAgB,sDAAsD;MACxG,kBAAkB,GAAG,IAAI,cAAc,CAAS,0DAA0D;AAEjH,SAAU,mBAAmB,CAAC,UAAgC,EAAA;IAClE,OAAO;AACL,QAAA,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE;KACvC;AACH;AAEM,SAAU,uBAAuB,CAAC,GAAW,EAAA;IACjD,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,GAAG,EAAE;AACvD;MAGa,aAAa,CAAA;AACf,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;IAC9B,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACpC,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,kDAAC;AAChD,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAO,IAAI,CAAC,MAAM,EAAa,EAAE,IAAI,EAAE,KAAK,EAAE,qDAAC;IAE7E,MAAM,QAAQ,CAAC,SAAoB,EAAA;QACjC,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,IAAI,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/G,QAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,gBAAgB,CAAC;AACnE,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AAC3D,YAAA,KAAK,EAAE,aAAa;AACpB,YAAA,QAAQ,EAAE,CAAC,GAAG,gBAAgB,CAAC;AAChC,SAAA,CAAC;AACF,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,aAAa;QAC/E,OAAO;AACL,YAAA,GAAG,SAAS;AACZ,YAAA,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE;SACjE;IACH;uGAlBW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA;;2FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AAuB5B,MAAO,uBAAwB,SAAQ,aAAa,CAAA;AACvC,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,UAAU,GAAG,MAAM,CAAC,kBAAkB,CAAC;IAExD,MAAM,QAAQ,CAAC,SAAoB,EAAA;QACjC,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,IAAI,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/G,QAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,gBAAgB,CAAC;AACnE,QAAA,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,IAAI,CAAC,UAAU,EAAE;AACxE,YAAA,KAAK,EAAE,aAAa;AACpB,YAAA,QAAQ,EAAE,CAAC,GAAG,gBAAgB,CAAC;AAChC,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,aAAa;QAC/E,OAAO;AACL,YAAA,GAAG,SAAS;AACZ,YAAA,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE;SACjE;IACH;uGAhBW,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAvB,uBAAuB,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;AAoBK,SAAU,8BAA8B,CAAC,UAAkB,EAAA;IAC/D,OAAO;AACL,QAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE;AACrD,QAAA,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,uBAAuB,EAAE;KAC9D;AACH;;ACtGA;;AAEG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-services-openapi.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/openapi/openapi.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/openapi/xxmachina-components-services-openapi.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { catchError, forkJoin, map, Observable, of, switchMap } from 'rxjs';\nimport { OpenApi, OpenAPISchema } from '@xxmachina/common/domain/models';\nimport { JsonSchemaService } from '@xxmachina/components/services/json-schema';\n\nfunction _forkJoin<T>(sources: Observable<T>[]): Observable<T[]> {\n return sources?.length ? forkJoin(sources) : of([]);\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OpenApiService {\n readonly http = inject(HttpClient);\n readonly schema = inject(JsonSchemaService);\n\n getOpenApiMany(urls: string[]): Observable<OpenApi[]> {\n return _forkJoin(urls.map((url) => this.getOpenApi(url).pipe(\n catchError((error) => (console.error(error), of(null))),\n )));\n }\n\n getOpenApi(url: string): Observable<OpenApi> {\n return this.getOpenApiSchema(url).pipe(\n catchError((error) => (console.warn('[OpenApiService] getOpenApi failed.'), of(null))),\n switchMap((openApi) => this.schema.resolveRef(openApi)),\n map((openApi) => new OpenApi({...openApi, apiJsonUrl: url})),\n );\n }\n\n getOpenApiSchema(url: string): Observable<OpenAPISchema> {\n return this.http.get<OpenAPISchema>(url);\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAMA,SAAS,SAAS,CAAI,OAAwB,EAAA;AAC5C,IAAA,OAAO,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;AACrD;MAKa,cAAc,CAAA;AAChB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE3C,IAAA,cAAc,CAAC,IAAc,EAAA;QAC3B,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAC1D,UAAU,CAAC,CAAC,KAAK,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CACxD,CAAC,CAAC;IACL;AAEA,IAAA,UAAU,CAAC,GAAW,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CACpC,UAAU,CAAC,CAAC,KAAK,MAAM,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EACtF,SAAS,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EACvD,GAAG,CAAC,CAAC,OAAO,KAAK,IAAI,OAAO,CAAC,EAAC,GAAG,OAAO,EAAE,UAAU,EAAE,GAAG,EAAC,CAAC,CAAC,CAC7D;IACH;AAEA,IAAA,gBAAgB,CAAC,GAAW,EAAA;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,GAAG,CAAC;IAC1C;uGApBW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA;;2FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACZD;;AAEG;;;;"}
1
+ {"version":3,"file":"xxmachina-components-services-openapi.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/openapi/openapi.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/openapi/xxmachina-components-services-openapi.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { catchError, forkJoin, map, Observable, of, switchMap } from 'rxjs';\nimport { OpenApi, OpenAPISchema } from '@xxmachina/common/domain/models';\nimport { JsonSchemaService } from '@xxmachina/components/services/json-schema';\n\nfunction _forkJoin<T>(sources: Observable<T>[]): Observable<T[]> {\n return sources?.length ? forkJoin(sources) : of([]);\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OpenApiService {\n readonly http = inject(HttpClient);\n readonly schema = inject(JsonSchemaService);\n\n getOpenApiMany(urls: string[]): Observable<OpenApi[]> {\n return _forkJoin(urls.map((url) => this.getOpenApi(url).pipe(\n catchError((error) => (console.error(error), of(null))),\n ))) as Observable<OpenApi[]>;\n }\n\n getOpenApi(url: string): Observable<OpenApi> {\n return this.getOpenApiSchema(url).pipe(\n catchError((error) => (console.warn('[OpenApiService] getOpenApi failed.'), of(null))),\n switchMap((openApi) => this.schema.resolveRef(openApi)),\n map((openApi) => new OpenApi({...openApi, apiJsonUrl: url})),\n );\n }\n\n getOpenApiSchema(url: string): Observable<OpenAPISchema> {\n return this.http.get<OpenAPISchema>(url);\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAMA,SAAS,SAAS,CAAI,OAAwB,EAAA;AAC5C,IAAA,OAAO,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;AACrD;MAKa,cAAc,CAAA;AAChB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE3C,IAAA,cAAc,CAAC,IAAc,EAAA;QAC3B,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAC1D,UAAU,CAAC,CAAC,KAAK,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CACxD,CAAC,CAA0B;IAC9B;AAEA,IAAA,UAAU,CAAC,GAAW,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CACpC,UAAU,CAAC,CAAC,KAAK,MAAM,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EACtF,SAAS,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EACvD,GAAG,CAAC,CAAC,OAAO,KAAK,IAAI,OAAO,CAAC,EAAC,GAAG,OAAO,EAAE,UAAU,EAAE,GAAG,EAAC,CAAC,CAAC,CAC7D;IACH;AAEA,IAAA,gBAAgB,CAAC,GAAW,EAAA;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,GAAG,CAAC;IAC1C;uGApBW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA;;2FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACZD;;AAEG;;;;"}
@@ -33,7 +33,7 @@ class QueryService {
33
33
  }).pipe(switchMap(({ endpoint }) => {
34
34
  const getHeaders = () => this.config.resolve(options.headers);
35
35
  return this.graphql.getSchema({
36
- endpoint,
36
+ endpoint: endpoint,
37
37
  headers: getHeaders,
38
38
  }).pipe(map((result) => QueryHelper.parseResult(result)));
39
39
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-services-query.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/query/query.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/query/xxmachina-components-services-query.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { map, lastValueFrom, switchMap } from 'rxjs';\nimport { getIntrospectionQuery } from 'graphql';\nimport { Query, QueryHelper } from '@xxmachina/common/domain/models';\nimport { QueryConfigService } from '@xxmachina/common/services/query/config';\nimport { GraphqlService } from '@xxmachina/common/services/graphql';\nimport { Observable } from 'rxjs';\nimport { QueryResolverService } from '@ng-atomic/common/services/query-resolver';\nimport { QueryService as CommonQueryService } from '@xxmachina/common/services/query';\n\n/**\n * @deprecated use `QueryService`('@xxmachina/common/services/query/query.service') instead\n */\n@Injectable({ providedIn: 'root' })\nexport class QueryService {\n protected readonly http = inject(HttpClient);\n protected readonly graphql = inject(GraphqlService);\n protected readonly resolver = inject(QueryResolverService);\n /**\n * @deprecated\n * */\n protected readonly config = inject(QueryConfigService);\n readonly query = inject(CommonQueryService);\n\n getSchema(endpoint: string, options: {\n headers?: Record<string, string>,\n } = { headers: { 'content-type': 'application/json' } }) {\n return this.config.resolve(options).pipe(\n switchMap(({headers}) => this.http.post(endpoint, { query: getIntrospectionQuery() }, { headers }))\n );\n }\n\n subscribeSchema(endpoint: string, options: {\n headers?: Record<string, string>,\n }): Observable<any> {\n return this.config.resolve({\n endpoint,\n headers: options.headers,\n query: getIntrospectionQuery(),\n variables: {}\n }).pipe(\n switchMap(({endpoint}) => {\n const getHeaders = () => this.config.resolve(options.headers);\n return this.graphql.getSchema({\n endpoint,\n headers: getHeaders,\n }).pipe(\n map((result: any) => QueryHelper.parseResult(result)),\n );\n }),\n );\n }\n\n /** @deprecated use `QueryServie#subscribe`('@xxmachina/common/services/query/query.service') instead */\n subscribeQuery(query: {\n type: 'graphql',\n graphql: Omit<Query['graphql'], 'variablesJson' | 'headersJson' | 'transformerTs'> & Partial<Pick<Query['graphql'], 'transformerTs'>>,\n }): Observable<Record<string, any>> {\n return this.query.subscribe(query as Query);\n }\n\n async generate(\n instructions: string,\n options: {\n baseUrl: string\n } = {\n baseUrl: '',\n },\n ) {\n const endpoint = `${options.baseUrl}/generate`;\n return lastValueFrom(this.http.post<{query: string}>(endpoint, { instructions }));\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["CommonQueryService"],"mappings":";;;;;;;;;;;AAWA;;AAEG;MAEU,YAAY,CAAA;AACJ,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC;AAChC,IAAA,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAC1D;;AAEK;AACc,IAAA,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC7C,IAAA,KAAK,GAAG,MAAM,CAACA,cAAkB,CAAC;AAE3C,IAAA,SAAS,CAAC,QAAgB,EAAE,OAAA,GAExB,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,EAAA;AACrD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CACtC,SAAS,CAAC,CAAC,EAAC,OAAO,EAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CACpG;IACH;IAEA,eAAe,CAAC,QAAgB,EAAE,OAEjC,EAAA;AACC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YACzB,QAAQ;YACR,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,qBAAqB,EAAE;AAC9B,YAAA,SAAS,EAAE;SACZ,CAAC,CAAC,IAAI,CACL,SAAS,CAAC,CAAC,EAAC,QAAQ,EAAC,KAAI;AACvB,YAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;AAC7D,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;gBAC5B,QAAQ;AACR,gBAAA,OAAO,EAAE,UAAU;AACpB,aAAA,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,MAAW,KAAK,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CACtD;QACH,CAAC,CAAC,CACH;IACH;;AAGA,IAAA,cAAc,CAAC,KAGd,EAAA;QACC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAc,CAAC;IAC7C;AAEA,IAAA,MAAM,QAAQ,CACZ,YAAoB,EACpB,OAAA,GAEI;AACF,QAAA,OAAO,EAAE,EAAE;AACZ,KAAA,EAAA;AAED,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,OAAO,CAAC,OAAO,WAAW;AAC9C,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAkB,QAAQ,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IACnF;uGAzDW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADC,MAAM,EAAA,CAAA;;2FACnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACdlC;;AAEG;;;;"}
1
+ {"version":3,"file":"xxmachina-components-services-query.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/query/query.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/query/xxmachina-components-services-query.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { map, lastValueFrom, switchMap } from 'rxjs';\nimport { getIntrospectionQuery } from 'graphql';\nimport { Query, QueryHelper } from '@xxmachina/common/domain/models';\nimport { QueryConfigService } from '@xxmachina/common/services/query/config';\nimport { GraphqlService } from '@xxmachina/common/services/graphql';\nimport { Observable } from 'rxjs';\nimport { QueryResolverService } from '@ng-atomic/common/services/query-resolver';\nimport { QueryService as CommonQueryService } from '@xxmachina/common/services/query';\n\n/**\n * @deprecated use `QueryService`('@xxmachina/common/services/query/query.service') instead\n */\n@Injectable({ providedIn: 'root' })\nexport class QueryService {\n protected readonly http = inject(HttpClient);\n protected readonly graphql = inject(GraphqlService);\n protected readonly resolver = inject(QueryResolverService);\n /**\n * @deprecated\n * */\n protected readonly config = inject(QueryConfigService);\n readonly query = inject(CommonQueryService);\n\n getSchema(endpoint: string, options: {\n headers?: Record<string, string>,\n } = { headers: { 'content-type': 'application/json' } }) {\n return this.config.resolve(options).pipe(\n switchMap(({headers}) => this.http.post(endpoint, { query: getIntrospectionQuery() }, { headers }))\n );\n }\n\n subscribeSchema(endpoint: string, options: {\n headers?: Record<string, string>,\n }): Observable<any> {\n return this.config.resolve({\n endpoint,\n headers: options.headers,\n query: getIntrospectionQuery(),\n variables: {}\n }).pipe(\n switchMap(({endpoint}) => {\n const getHeaders = () => this.config.resolve(options.headers as object) as unknown as Observable<Record<string, string>>;\n return this.graphql.getSchema({\n endpoint: endpoint!,\n headers: getHeaders as never,\n }).pipe(\n map((result: any) => QueryHelper.parseResult(result)),\n );\n }),\n );\n }\n\n /** @deprecated use `QueryServie#subscribe`('@xxmachina/common/services/query/query.service') instead */\n subscribeQuery(query: {\n type: 'graphql',\n graphql: any,\n }): Observable<Record<string, any>> {\n return this.query.subscribe(query as Query);\n }\n\n async generate(\n instructions: string,\n options: {\n baseUrl: string\n } = {\n baseUrl: '',\n },\n ) {\n const endpoint = `${options.baseUrl}/generate`;\n return lastValueFrom(this.http.post<{query: string}>(endpoint, { instructions }));\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["CommonQueryService"],"mappings":";;;;;;;;;;;AAWA;;AAEG;MAEU,YAAY,CAAA;AACJ,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC;AAChC,IAAA,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAC1D;;AAEK;AACc,IAAA,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC7C,IAAA,KAAK,GAAG,MAAM,CAACA,cAAkB,CAAC;AAE3C,IAAA,SAAS,CAAC,QAAgB,EAAE,OAAA,GAExB,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,EAAA;AACrD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CACtC,SAAS,CAAC,CAAC,EAAC,OAAO,EAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CACpG;IACH;IAEA,eAAe,CAAC,QAAgB,EAAE,OAEjC,EAAA;AACC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YACzB,QAAQ;YACR,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,qBAAqB,EAAE;AAC9B,YAAA,SAAS,EAAE;SACZ,CAAC,CAAC,IAAI,CACL,SAAS,CAAC,CAAC,EAAC,QAAQ,EAAC,KAAI;AACvB,YAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAiB,CAAkD;AACxH,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;AAC5B,gBAAA,QAAQ,EAAE,QAAS;AACnB,gBAAA,OAAO,EAAE,UAAmB;AAC7B,aAAA,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,MAAW,KAAK,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CACtD;QACH,CAAC,CAAC,CACH;IACH;;AAGA,IAAA,cAAc,CAAC,KAGd,EAAA;QACC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAc,CAAC;IAC7C;AAEA,IAAA,MAAM,QAAQ,CACZ,YAAoB,EACpB,OAAA,GAEI;AACF,QAAA,OAAO,EAAE,EAAE;AACZ,KAAA,EAAA;AAED,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,OAAO,CAAC,OAAO,WAAW;AAC9C,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAkB,QAAQ,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IACnF;uGAzDW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADC,MAAM,EAAA,CAAA;;2FACnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACdlC;;AAEG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-services-recording.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/recording/recording.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/recording/xxmachina-components-services-recording.ts"],"sourcesContent":["import { Injectable, computed, signal } from '@angular/core';\nimport fixWebmDuration from 'fix-webm-duration';\nimport dayjs from 'dayjs';\nimport { filter, interval, map, Observable } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n@Injectable({ providedIn: 'root' })\nexport class RecordingService {\n\n constructor() {\n // this.blobEvent$.pipe(\n // filter((event) => event.data.size > 0),\n // ).subscribe((event) => {\n // this.recordedChunks.update((current) => ([...current, event.data]));\n // });\n }\n\n readonly stream = signal<MediaStream | null>(null);\n readonly recorder = computed(() => this.stream() ? new MediaRecorder(this.stream()) : null);\n // readonly blobEvent = computedAsync(() => {\n // return new Observable<BlobEvent>((subscriber) => {\n // this.recorder().ondataavailable = (event) => subscriber.next(event);\n // this.recorder().onstop = () => subscriber.complete();\n // this.recorder().onerror = (error) => subscriber.error(error);\n // });\n // });\n // readonly blobEvent$ = toObservable(this.blobEvent);\n readonly isRecording$ = interval(500).pipe(map(() => this.recorder()?.state === 'recording'));\n readonly isRecording = toSignal(this.isRecording$);\n readonly recordedChunks = signal<Blob[]>([]);\n readonly startTime = signal<dayjs.Dayjs>(null);\n\n async stopStream() {\n if (this.stream()) {\n this.stream().getTracks().forEach(track => track.stop());\n this.stream.set(null);\n }\n }\n \n async start(stream: MediaStream = this.stream()) {\n this.recordedChunks.set([]);\n this.stream.set(stream);\n\n new Observable<BlobEvent>((subscriber) => {\n this.recorder().ondataavailable = (event) => subscriber.next(event);\n this.recorder().onstop = () => subscriber.complete();\n this.recorder().onerror = (error) => subscriber.error(error);\n }).pipe(\n filter((event) => event.data.size > 0),\n ).subscribe((event) => {\n this.recordedChunks.update((current) => ([...current, event.data]));\n });\n\n this.startTime.set(dayjs());\n this.recorder().start(100);\n }\n\n async stop() {\n if (this.recorder()) this.recorder().stop();\n const blob = new Blob(this.recordedChunks(), { type: 'video/webm' });\n this.recordedChunks.set([]);\n const time = dayjs().diff(this.startTime(), 'millisecond');\n this.startTime.set(null);\n return fixWebmDuration(blob, time);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xxmachina-components-services-recording.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/recording/recording.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/recording/xxmachina-components-services-recording.ts"],"sourcesContent":["import { Injectable, computed, signal } from '@angular/core';\nimport fixWebmDuration from 'fix-webm-duration';\nimport dayjs from 'dayjs';\nimport { filter, interval, map, Observable } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n@Injectable({ providedIn: 'root' })\nexport class RecordingService {\n\n constructor() {\n // this.blobEvent$.pipe(\n // filter((event) => event.data.size > 0),\n // ).subscribe((event) => {\n // this.recordedChunks.update((current) => ([...current, event.data]));\n // });\n }\n\n readonly stream = signal<MediaStream | null>(null);\n readonly recorder = computed(() => this.stream() ? new MediaRecorder(this.stream()!) : null);\n // readonly blobEvent = computedAsync(() => {\n // return new Observable<BlobEvent>((subscriber) => {\n // this.recorder().ondataavailable = (event) => subscriber.next(event);\n // this.recorder().onstop = () => subscriber.complete();\n // this.recorder().onerror = (error) => subscriber.error(error);\n // });\n // });\n // readonly blobEvent$ = toObservable(this.blobEvent);\n readonly isRecording$ = interval(500).pipe(map(() => this.recorder()?.state === 'recording'));\n readonly isRecording = toSignal(this.isRecording$);\n readonly recordedChunks = signal<Blob[]>([]);\n readonly startTime = signal<dayjs.Dayjs>(null as unknown as dayjs.Dayjs);\n\n async stopStream() {\n if (this.stream()) {\n this.stream()!.getTracks().forEach(track => track.stop());\n this.stream.set(null);\n }\n }\n\n async start(stream: MediaStream = this.stream()!) {\n this.recordedChunks.set([]);\n this.stream.set(stream);\n\n new Observable<BlobEvent>((subscriber) => {\n this.recorder()!.ondataavailable = (event) => subscriber.next(event);\n this.recorder()!.onstop = () => subscriber.complete();\n this.recorder()!.onerror = (error) => subscriber.error(error);\n }).pipe(\n filter((event) => event.data.size > 0),\n ).subscribe((event) => {\n this.recordedChunks.update((current) => ([...current, event.data]));\n });\n\n this.startTime.set(dayjs());\n this.recorder()!.start(100);\n }\n\n async stop() {\n if (this.recorder()) this.recorder()!.stop();\n const blob = new Blob(this.recordedChunks(), { type: 'video/webm' });\n this.recordedChunks.set([]);\n const time = dayjs().diff(this.startTime(), 'millisecond');\n this.startTime.set(null as unknown as dayjs.Dayjs);\n return fixWebmDuration(blob, time);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -39,14 +39,14 @@ class ThreadService {
39
39
  observeSteps(threadId, runId) {
40
40
  const stop$ = new ReplaySubject();
41
41
  return interval(1000).pipe(startWith(null), takeUntil(stop$), switchMap(() => this.retrieveRunSteps(threadId, runId).pipe(catchError((error) => (console.error(error), NEVER)))), map(steps => {
42
- if (steps.some(step => step.status === 'in_progress')) {
43
- const inProgress = steps.find(step => step.status === 'in_progress');
42
+ if (steps.some((step) => step.status === 'in_progress')) {
43
+ const inProgress = steps.find((step) => step.status === 'in_progress');
44
44
  switch (inProgress.type) {
45
45
  case 'message_creation': return 'message_creating';
46
46
  default: return 'function_calling';
47
47
  }
48
48
  }
49
- if (steps.find(step => step.type === 'message_creation')?.status === 'completed') {
49
+ if (steps.find((step) => step.type === 'message_creation')?.status === 'completed') {
50
50
  stop$.next();
51
51
  return 'done';
52
52
  }
@@ -57,8 +57,8 @@ class ThreadService {
57
57
  while (true) {
58
58
  const steps = await lastValueFrom(this.retrieveRunSteps(threadId, runId));
59
59
  console.debug('steps:', steps);
60
- if (steps.some(step => step.status === 'in_progress')) {
61
- const inProgress = steps.find(step => step.status === 'in_progress');
60
+ if (steps.some((step) => step.status === 'in_progress')) {
61
+ const inProgress = steps.find((step) => step.status === 'in_progress');
62
62
  switch (inProgress.type) {
63
63
  case 'message_creation': {
64
64
  onStatusChanged('message_creating');
@@ -71,7 +71,7 @@ class ThreadService {
71
71
  }
72
72
  }
73
73
  onStatusChanged('dealing');
74
- if (steps.find(step => step.type === 'message_creation')?.status === 'completed') {
74
+ if (steps.find((step) => step.type === 'message_creation')?.status === 'completed') {
75
75
  onStatusChanged('done');
76
76
  break;
77
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-services-thread.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/thread/thread.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/thread/xxmachina-components-services-thread.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { message } from '@nx-ddd/common';\nimport { NEVER, Observable, ReplaySubject, catchError, interval, lastValueFrom, map, startWith, switchMap, takeUntil } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class ThreadService {\n readonly http = inject(HttpClient);\n\n \n\n getThread(id: string) {\n return this.http.get(`/api/threads/${id}`);\n }\n\n create() {\n return lastValueFrom(this.http.post<{id: string}>('/api/threads', {}));\n }\n\n listMessages(threadId: string) {\n return this.http.get<any[]>(`/api/threads/${threadId}/messages`);\n }\n\n createMessage(message: {threadId: string, role: 'user', content: string}) {\n return lastValueFrom(this.http.post(`/api/threads/${message.threadId}/messages`, message));\n }\n\n run(assistantId: string, threadId: string) {\n return lastValueFrom(this.http.post<{id: string}>(`/api/threads/${threadId}/runs`, {\n assistantId,\n instructions: message``,\n tools: [],\n }));\n }\n\n submitToolOutputs(threadId: string, runId: string, toolOutputs: any[]) {\n return lastValueFrom(this.http.post<any>(`/api/threads/${threadId}/runs/${runId}/submit_tool_outputs`, {\n toolOutputs,\n }));\n }\n\n retrieveRun(threadId: string, runId: string) {\n return lastValueFrom(this.http.get<any>(`/api/threads/${threadId}/runs/${runId}`));\n }\n\n retrieveRunSteps(threadId: string, runId: string) {\n return this.http.get<any>(`/api/threads/${threadId}/runs/${runId}/steps`);\n }\n\n observeSteps(threadId: string, runId: string): Observable<'dealing' | 'message_creating' | 'function_calling' | 'done'> {\n const stop$ = new ReplaySubject<void>();\n return interval(1000).pipe(\n startWith(null),\n takeUntil(stop$),\n switchMap(() => this.retrieveRunSteps(threadId, runId).pipe(\n catchError((error) => (console.error(error), NEVER)),\n )),\n map(steps => {\n if (steps.some(step => step.status === 'in_progress')) {\n const inProgress = steps.find(step => step.status === 'in_progress');\n switch (inProgress.type) {\n case 'message_creation': return 'message_creating';\n default: return 'function_calling'\n }\n }\n \n if (steps.find(step => step.type === 'message_creation')?.status === 'completed') {\n stop$.next();\n return 'done';\n }\n return 'dealing';\n \n })\n );\n }\n\n async watchSteps(\n threadId: string,\n runId: string,\n onStatusChanged: (status: string) => void,\n ) {\n while (true) {\n const steps = await lastValueFrom(this.retrieveRunSteps(threadId, runId));\n console.debug('steps:', steps);\n if (steps.some(step => step.status === 'in_progress')) {\n const inProgress = steps.find(step => step.status === 'in_progress');\n switch (inProgress.type) {\n case 'message_creation': {\n onStatusChanged('message_creating');\n break;\n }\n default: {\n onStatusChanged('function_calling');\n break;\n }\n }\n }\n\n onStatusChanged('dealing');\n\n if (steps.find(step => step.type === 'message_creation')?.status === 'completed') {\n onStatusChanged('done');\n break;\n }\n\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n }\n\n async watch(\n threadId: string,\n runId: string,\n onFunctionCalled: (toolCall: any) => Promise<object> | object,\n onCompleted: () => void,\n onError: (error: any) => void,\n ) {\n while (true) {\n const run = await this.retrieveRun(threadId, runId);\n switch (run.status) {\n case 'requires_action': {\n try {\n const toolCalls = run.required_action.submit_tool_outputs.tool_calls;\n const result = await onFunctionCalled(toolCalls[0]);\n this.submitToolOutputs(threadId, runId, [{ toolCallId: toolCalls[0].id, output: JSON.stringify(result) }]);\n } catch (error) {\n onError(error);\n // this.snackBar.open('エラーが発生しました。更新して再度、お試しください。');\n }\n }\n case 'completed': {\n console.debug(`run ${runId} completed`);\n onCompleted();\n // this$.next();\n return;\n }\n case 'failed': {\n console.debug(`run ${runId} failed`);\n return;\n }\n }\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xxmachina-components-services-thread.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/thread/thread.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/thread/xxmachina-components-services-thread.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { message } from '@nx-ddd/common';\nimport { NEVER, Observable, ReplaySubject, catchError, interval, lastValueFrom, map, startWith, switchMap, takeUntil } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class ThreadService {\n readonly http = inject(HttpClient);\n\n \n\n getThread(id: string) {\n return this.http.get(`/api/threads/${id}`);\n }\n\n create() {\n return lastValueFrom(this.http.post<{id: string}>('/api/threads', {}));\n }\n\n listMessages(threadId: string) {\n return this.http.get<any[]>(`/api/threads/${threadId}/messages`);\n }\n\n createMessage(message: {threadId: string, role: 'user', content: string}) {\n return lastValueFrom(this.http.post(`/api/threads/${message.threadId}/messages`, message));\n }\n\n run(assistantId: string, threadId: string) {\n return lastValueFrom(this.http.post<{id: string}>(`/api/threads/${threadId}/runs`, {\n assistantId,\n instructions: message``,\n tools: [],\n }));\n }\n\n submitToolOutputs(threadId: string, runId: string, toolOutputs: any[]) {\n return lastValueFrom(this.http.post<any>(`/api/threads/${threadId}/runs/${runId}/submit_tool_outputs`, {\n toolOutputs,\n }));\n }\n\n retrieveRun(threadId: string, runId: string) {\n return lastValueFrom(this.http.get<any>(`/api/threads/${threadId}/runs/${runId}`));\n }\n\n retrieveRunSteps(threadId: string, runId: string) {\n return this.http.get<any>(`/api/threads/${threadId}/runs/${runId}/steps`);\n }\n\n observeSteps(threadId: string, runId: string): Observable<'dealing' | 'message_creating' | 'function_calling' | 'done'> {\n const stop$ = new ReplaySubject<void>();\n return interval(1000).pipe(\n startWith(null),\n takeUntil(stop$),\n switchMap(() => this.retrieveRunSteps(threadId, runId).pipe(\n catchError((error) => (console.error(error), NEVER)),\n )),\n map(steps => {\n if (steps.some((step: any) => step.status === 'in_progress')) {\n const inProgress = steps.find((step: any) => step.status === 'in_progress');\n switch (inProgress.type) {\n case 'message_creation': return 'message_creating';\n default: return 'function_calling'\n }\n }\n\n if (steps.find((step: any) => step.type === 'message_creation')?.status === 'completed') {\n stop$.next();\n return 'done';\n }\n return 'dealing';\n \n })\n );\n }\n\n async watchSteps(\n threadId: string,\n runId: string,\n onStatusChanged: (status: string) => void,\n ) {\n while (true) {\n const steps = await lastValueFrom(this.retrieveRunSteps(threadId, runId));\n console.debug('steps:', steps);\n if (steps.some((step: any) => step.status === 'in_progress')) {\n const inProgress = steps.find((step: any) => step.status === 'in_progress');\n switch (inProgress.type) {\n case 'message_creation': {\n onStatusChanged('message_creating');\n break;\n }\n default: {\n onStatusChanged('function_calling');\n break;\n }\n }\n }\n\n onStatusChanged('dealing');\n\n if (steps.find((step: any) => step.type === 'message_creation')?.status === 'completed') {\n onStatusChanged('done');\n break;\n }\n\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n }\n\n async watch(\n threadId: string,\n runId: string,\n onFunctionCalled: (toolCall: any) => Promise<object> | object,\n onCompleted: () => void,\n onError: (error: any) => void,\n ) {\n while (true) {\n const run = await this.retrieveRun(threadId, runId);\n switch (run.status) {\n case 'requires_action': {\n try {\n const toolCalls = run.required_action.submit_tool_outputs.tool_calls;\n const result = await onFunctionCalled(toolCalls[0]);\n this.submitToolOutputs(threadId, runId, [{ toolCallId: toolCalls[0].id, output: JSON.stringify(result) }]);\n } catch (error) {\n onError(error);\n // this.snackBar.open('エラーが発生しました。更新して再度、お試しください。');\n }\n }\n case 'completed': {\n console.debug(`run ${runId} completed`);\n onCompleted();\n // this$.next();\n return;\n }\n case 'failed': {\n console.debug(`run ${runId} failed`);\n return;\n }\n }\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ class TransformerService {
8
8
  quickJs = inject(QuickJsService);
9
9
  async runTest(transformer, spec) {
10
10
  const output = await this.quickJs.apply(transformer.script, 'transformer', [spec.input]);
11
- return { isEqual: isEqual(spec.output, output), diff: diff(output, spec.output) };
11
+ return { isEqual: isEqual(spec.output, output), diff: diff(output, spec.output) ?? '' };
12
12
  }
13
13
  async runTests(transformer, specs) {
14
14
  return Promise.all(specs.map(spec => this.runTest(transformer, spec)));
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-services-transformer.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/transformer/transformer.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/transformer/xxmachina-components-services-transformer.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { Spec, Transformer } from '@xxmachina/common/domain/models';\nimport { QuickJsService } from '@xxmachina/common/infra/external/quick-js';\nimport { isEqual } from 'lodash-es';\nimport { diff } from 'jest-diff'\n\n@Injectable({providedIn: 'root'})\nexport class TransformerService {\n readonly quickJs = inject(QuickJsService);\n\n async runTest(transformer: Transformer, spec: Spec): Promise<{isEqual: boolean, diff: string}> {\n const output = await this.quickJs.apply(transformer.script, 'transformer', [spec.input]) as object;\n return {isEqual: isEqual(spec.output, output), diff: diff(output, spec.output)};\n }\n\n async runTests(transformer: Transformer, specs: Spec[]): Promise<{isEqual: boolean, diff: string}[]> {\n return Promise.all(specs.map(spec => this.runTest(transformer, spec)));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;MAOa,kBAAkB,CAAA;AACpB,IAAA,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC;AAEzC,IAAA,MAAM,OAAO,CAAC,WAAwB,EAAE,IAAU,EAAA;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAW;QAClG,OAAO,EAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAC;IACjF;AAEA,IAAA,MAAM,QAAQ,CAAC,WAAwB,EAAE,KAAa,EAAA;QACpD,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;IACxE;uGAVW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADN,MAAM,EAAA,CAAA;;2FAClB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;ACNhC;;AAEG;;;;"}
1
+ {"version":3,"file":"xxmachina-components-services-transformer.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/transformer/transformer.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/transformer/xxmachina-components-services-transformer.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { Spec, Transformer } from '@xxmachina/common/domain/models';\nimport { QuickJsService } from '@xxmachina/common/infra/external/quick-js';\nimport { isEqual } from 'lodash-es';\nimport { diff } from 'jest-diff'\n\n@Injectable({providedIn: 'root'})\nexport class TransformerService {\n readonly quickJs = inject(QuickJsService);\n\n async runTest(transformer: Transformer, spec: Spec): Promise<{isEqual: boolean, diff: string}> {\n const output = await this.quickJs.apply(transformer.script, 'transformer', [spec.input]) as object;\n return {isEqual: isEqual(spec.output, output), diff: diff(output, spec.output) ?? ''};\n }\n\n async runTests(transformer: Transformer, specs: Spec[]): Promise<{isEqual: boolean, diff: string}[]> {\n return Promise.all(specs.map(spec => this.runTest(transformer, spec)));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;MAOa,kBAAkB,CAAA;AACpB,IAAA,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC;AAEzC,IAAA,MAAM,OAAO,CAAC,WAAwB,EAAE,IAAU,EAAA;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAW;QAClG,OAAO,EAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAC;IACvF;AAEA,IAAA,MAAM,QAAQ,CAAC,WAAwB,EAAE,KAAa,EAAA;QACpD,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;IACxE;uGAVW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADN,MAAM,EAAA,CAAA;;2FAClB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;ACNhC;;AAEG;;;;"}