@xxmachina/common 19.21.8 → 19.25.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 (97) hide show
  1. package/_shared/meta/redis/index.d.ts.map +1 -1
  2. package/auth/azure/index.d.ts.map +1 -0
  3. package/auth/core/index.d.ts +17 -0
  4. package/auth/core/index.d.ts.map +1 -0
  5. package/auth/firebase/index.d.ts.map +1 -0
  6. package/auth/index.d.ts.map +1 -1
  7. package/auth/passports/anonymous/index.d.ts.map +1 -0
  8. package/auth/passports/firebase/index.d.ts.map +1 -0
  9. package/auth/passports/index.d.ts +61 -0
  10. package/auth/passports/index.d.ts.map +1 -0
  11. package/auth/passports/internal/index.d.ts.map +1 -0
  12. package/{_shared/auth → auth}/passports/msal/index.d.ts +2 -2
  13. package/auth/passports/msal/index.d.ts.map +1 -0
  14. package/domain/builder/index.d.ts +35 -2
  15. package/domain/builder/index.d.ts.map +1 -1
  16. package/domain/builder/screen-item/index.d.ts +26 -1
  17. package/domain/builder/screen-item/index.d.ts.map +1 -1
  18. package/domain/models/index.d.ts +41 -8
  19. package/domain/models/index.d.ts.map +1 -1
  20. package/domain/models/presenter/index.d.ts +128 -0
  21. package/domain/models/presenter/index.d.ts.map +1 -0
  22. package/fesm2022/{xxmachina-common-azure-auth.mjs → xxmachina-common-auth-azure.mjs} +1 -1
  23. package/fesm2022/xxmachina-common-auth-azure.mjs.map +1 -0
  24. package/fesm2022/xxmachina-common-auth-core.mjs +17 -0
  25. package/fesm2022/xxmachina-common-auth-core.mjs.map +1 -0
  26. package/fesm2022/{xxmachina-common-firebase-auth.mjs → xxmachina-common-auth-firebase.mjs} +1 -1
  27. package/fesm2022/xxmachina-common-auth-firebase.mjs.map +1 -0
  28. package/fesm2022/{xxmachina-common-_shared-auth-passports-anonymous.mjs → xxmachina-common-auth-passports-anonymous.mjs} +1 -1
  29. package/fesm2022/xxmachina-common-auth-passports-anonymous.mjs.map +1 -0
  30. package/fesm2022/{xxmachina-common-_shared-auth-passports-firebase.mjs → xxmachina-common-auth-passports-firebase.mjs} +1 -1
  31. package/fesm2022/xxmachina-common-auth-passports-firebase.mjs.map +1 -0
  32. package/fesm2022/{xxmachina-common-_shared-auth-passports-internal.mjs → xxmachina-common-auth-passports-internal.mjs} +1 -1
  33. package/fesm2022/xxmachina-common-auth-passports-internal.mjs.map +1 -0
  34. package/fesm2022/{xxmachina-common-_shared-auth-passports-msal.mjs → xxmachina-common-auth-passports-msal.mjs} +1 -1
  35. package/fesm2022/xxmachina-common-auth-passports-msal.mjs.map +1 -0
  36. package/fesm2022/xxmachina-common-auth-passports.mjs +113 -0
  37. package/fesm2022/xxmachina-common-auth-passports.mjs.map +1 -0
  38. package/fesm2022/xxmachina-common-auth.mjs.map +1 -1
  39. package/fesm2022/xxmachina-common-domain-builder-screen-item.mjs +58 -179
  40. package/fesm2022/xxmachina-common-domain-builder-screen-item.mjs.map +1 -1
  41. package/fesm2022/xxmachina-common-domain-builder.mjs +83 -219
  42. package/fesm2022/xxmachina-common-domain-builder.mjs.map +1 -1
  43. package/fesm2022/xxmachina-common-domain-models-presenter.mjs +4 -0
  44. package/fesm2022/xxmachina-common-domain-models-presenter.mjs.map +1 -0
  45. package/fesm2022/xxmachina-common-domain-models.mjs +70 -44
  46. package/fesm2022/xxmachina-common-domain-models.mjs.map +1 -1
  47. package/fesm2022/xxmachina-common-infra-external-quick-js.mjs +12 -5
  48. package/fesm2022/xxmachina-common-infra-external-quick-js.mjs.map +1 -1
  49. package/fesm2022/xxmachina-common-infra-external.mjs +2 -5
  50. package/fesm2022/xxmachina-common-infra-external.mjs.map +1 -1
  51. package/fesm2022/xxmachina-common-infra.mjs +105 -109
  52. package/fesm2022/xxmachina-common-infra.mjs.map +1 -1
  53. package/fesm2022/xxmachina-common-invoice-usecase-invoice.mjs +101 -102
  54. package/fesm2022/xxmachina-common-invoice-usecase-invoice.mjs.map +1 -1
  55. package/fesm2022/xxmachina-common-services-graphql.mjs +57 -64
  56. package/fesm2022/xxmachina-common-services-graphql.mjs.map +1 -1
  57. package/fesm2022/xxmachina-common-services-query.mjs +2 -2
  58. package/fesm2022/xxmachina-common-services-query.mjs.map +1 -1
  59. package/fesm2022/xxmachina-common-services-speech.mjs +91 -23
  60. package/fesm2022/xxmachina-common-services-speech.mjs.map +1 -1
  61. package/infra/external/index.d.ts +5 -7
  62. package/infra/external/index.d.ts.map +1 -1
  63. package/infra/external/quick-js/index.d.ts +2 -7
  64. package/infra/external/quick-js/index.d.ts.map +1 -1
  65. package/infra/external/resend/index.d.ts.map +1 -1
  66. package/infra/index.d.ts +49 -77
  67. package/infra/index.d.ts.map +1 -1
  68. package/infra/repository/notion/index.d.ts.map +1 -1
  69. package/invoice/usecase/invoice/index.d.ts +0 -1
  70. package/invoice/usecase/invoice/index.d.ts.map +1 -1
  71. package/package.json +51 -39
  72. package/services/graphql/index.d.ts +0 -16
  73. package/services/graphql/index.d.ts.map +1 -1
  74. package/services/query/config/index.d.ts.map +1 -1
  75. package/services/query/index.d.ts.map +1 -1
  76. package/services/speech/index.d.ts +8 -0
  77. package/services/speech/index.d.ts.map +1 -1
  78. package/stores/firestore/index.d.ts +2 -2
  79. package/stores/inmemory/index.d.ts.map +1 -1
  80. package/usecase/database/index.d.ts.map +1 -1
  81. package/_shared/auth/passports/anonymous/index.d.ts.map +0 -1
  82. package/_shared/auth/passports/firebase/index.d.ts.map +0 -1
  83. package/_shared/auth/passports/internal/index.d.ts.map +0 -1
  84. package/_shared/auth/passports/msal/index.d.ts.map +0 -1
  85. package/azure-auth/index.d.ts.map +0 -1
  86. package/fesm2022/xxmachina-common-_shared-auth-passports-anonymous.mjs.map +0 -1
  87. package/fesm2022/xxmachina-common-_shared-auth-passports-firebase.mjs.map +0 -1
  88. package/fesm2022/xxmachina-common-_shared-auth-passports-internal.mjs.map +0 -1
  89. package/fesm2022/xxmachina-common-_shared-auth-passports-msal.mjs.map +0 -1
  90. package/fesm2022/xxmachina-common-azure-auth.mjs.map +0 -1
  91. package/fesm2022/xxmachina-common-firebase-auth.mjs.map +0 -1
  92. package/firebase-auth/index.d.ts.map +0 -1
  93. /package/{azure-auth → auth/azure}/index.d.ts +0 -0
  94. /package/{firebase-auth → auth/firebase}/index.d.ts +0 -0
  95. /package/{_shared/auth → auth}/passports/anonymous/index.d.ts +0 -0
  96. /package/{_shared/auth → auth}/passports/firebase/index.d.ts +0 -0
  97. /package/{_shared/auth → auth}/passports/internal/index.d.ts +0 -0
@@ -8,6 +8,102 @@ import { Invoice } from '@xxmachina/common/invoice/domain/models';
8
8
  import { getHasuraRepository, HasuraService, deepSnakeToCamelCase } from '@nx-ddd/hasura';
9
9
  import { gql } from '@apollo/client/core';
10
10
 
11
+ /**
12
+ * 請求書関連のGraphQLクエリ
13
+ */
14
+ const GET_INVOICE_WITH_RELATIONS_QUERY = `
15
+ query GetInvoiceWithRelations($id: String!) {
16
+ invoices_by_pk(id: $id) {
17
+ id
18
+ no
19
+ title
20
+ subject
21
+ customer_id
22
+ vendor_id
23
+ amount
24
+ due_date
25
+ orders {
26
+ id
27
+ title
28
+ ecl_id
29
+ customer_id
30
+ vendor_id
31
+ contract_id
32
+ invoice_id
33
+ start_date
34
+ end_date
35
+ unit_price
36
+ unit
37
+ quantity
38
+ amount_input
39
+ amount
40
+ status_in
41
+ status_out
42
+ }
43
+ customer {
44
+ id
45
+ name
46
+ type
47
+ address
48
+ postal_code
49
+ email
50
+ billing_email
51
+ billing_contact
52
+ phone_number
53
+ contact
54
+ suffix
55
+ bank_account
56
+ invoice_number
57
+ }
58
+ vendor {
59
+ id
60
+ name
61
+ type
62
+ address
63
+ postal_code
64
+ email
65
+ billing_email
66
+ billing_contact
67
+ phone_number
68
+ contact
69
+ suffix
70
+ bank_account
71
+ invoice_number
72
+ }
73
+ }
74
+ }
75
+ `;
76
+
77
+ /**
78
+ * 請求書データ変換ユーティリティ
79
+ */
80
+ /**
81
+ * スネークケースをキャメルケースに変換
82
+ */
83
+ const snakeToCamel = (str) => str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
84
+ /**
85
+ * 請求書データをキャメルケースに変換し、__typenameを除外
86
+ */
87
+ function transformInvoiceData(data) {
88
+ const transform = (obj) => {
89
+ if (Array.isArray(obj)) {
90
+ return obj.map(transform);
91
+ }
92
+ else if (obj !== null && typeof obj === 'object') {
93
+ const transformed = {};
94
+ for (const [key, value] of Object.entries(obj)) {
95
+ if (key === '__typename')
96
+ continue;
97
+ const camelKey = snakeToCamel(key);
98
+ transformed[camelKey] = transform(value);
99
+ }
100
+ return transformed;
101
+ }
102
+ return obj;
103
+ };
104
+ return transform(data);
105
+ }
106
+
11
107
  const INVOICE_CONFIG = makeDI('[@xxmachina/invoice] INVOICE_CONFIG', { optional: false });
12
108
  class InvoiceUsecase {
13
109
  notionRepo = inject(InvoiceNotionRepository);
@@ -36,9 +132,7 @@ class InvoiceUsecase {
36
132
  }
37
133
  async makePdf(data) {
38
134
  return this.chromium.start(async (browser) => {
39
- const context = await browser.newContext({
40
- deviceScaleFactor: 2,
41
- });
135
+ const context = await browser.newContext({ deviceScaleFactor: 2 });
42
136
  const page = await context.newPage();
43
137
  page.on('console', msg => console.log('PAGE LOG:', msg.text()));
44
138
  page.on('pageerror', err => console.log('PAGE ERROR:', err.message));
@@ -58,94 +152,20 @@ class InvoiceUsecase {
58
152
  to: mail.to,
59
153
  subject: mail.subject,
60
154
  html: mail.content,
61
- attachments: [
62
- {
63
- filename: pdf.name,
64
- content: pdf.pdf,
65
- contentType: 'application/pdf',
66
- }
67
- ]
155
+ attachments: [{ filename: pdf.name, content: pdf.pdf, contentType: 'application/pdf' }]
68
156
  });
69
157
  }
70
158
  async getLink(invoiceId) {
71
159
  try {
72
- // GraphQLクエリで全ての関連データを一度に取得
73
- const query = `
74
- query GetInvoiceWithRelations($id: String!) {
75
- invoices_by_pk(id: $id) {
76
- id
77
- no
78
- title
79
- subject
80
- customer_id
81
- vendor_id
82
- amount
83
- due_date
84
- orders {
85
- id
86
- title
87
- ecl_id
88
- customer_id
89
- vendor_id
90
- contract_id
91
- invoice_id
92
- start_date
93
- end_date
94
- unit_price
95
- unit
96
- quantity
97
- amount_input
98
- amount
99
- status_in
100
- status_out
101
- }
102
- customer {
103
- id
104
- name
105
- type
106
- address
107
- postal_code
108
- email
109
- billing_email
110
- billing_contact
111
- phone_number
112
- contact
113
- suffix
114
- bank_account
115
- invoice_number
116
- }
117
- vendor {
118
- id
119
- name
120
- type
121
- address
122
- postal_code
123
- email
124
- billing_email
125
- billing_contact
126
- phone_number
127
- contact
128
- suffix
129
- bank_account
130
- invoice_number
131
- }
132
- }
133
- }
134
- `;
135
160
  const result = await this.hasuraService.query({
136
- query: gql `${query}`,
161
+ query: gql `${GET_INVOICE_WITH_RELATIONS_QUERY}`,
137
162
  variables: { id: invoiceId }
138
- }).then(result => {
139
- // camelCaseに変換
140
- return deepSnakeToCamelCase(result);
141
- });
163
+ }).then(result => deepSnakeToCamelCase(result));
142
164
  const invoiceData = result.data?.invoicesByPk;
143
165
  if (!invoiceData) {
144
166
  throw new Error(`Invoice with ID ${invoiceId} not found`);
145
167
  }
146
- // スネークケースからキャメルケースに変換し、__typenameを削除
147
- const transformedData = this.transformInvoiceData(invoiceData);
148
- // テンプレートURLを生成(makePdfと同じロジック)
168
+ const transformedData = transformInvoiceData(invoiceData);
149
169
  const url = `${this.config.templateBaseUrl}?json=${encodeURIComponent(JSON.stringify(transformedData))}`;
150
170
  return url;
151
171
  }
@@ -154,27 +174,6 @@ class InvoiceUsecase {
154
174
  throw error;
155
175
  }
156
176
  }
157
- transformInvoiceData(data) {
158
- const snakeToCamel = (str) => str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
159
- const transform = (obj) => {
160
- if (Array.isArray(obj)) {
161
- return obj.map(transform);
162
- }
163
- else if (obj !== null && typeof obj === 'object') {
164
- const transformed = {};
165
- for (const [key, value] of Object.entries(obj)) {
166
- // __typenameフィールドを除外
167
- if (key === '__typename')
168
- continue;
169
- const camelKey = snakeToCamel(key);
170
- transformed[camelKey] = transform(value);
171
- }
172
- return transformed;
173
- }
174
- return obj;
175
- };
176
- return transform(data);
177
- }
178
177
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: InvoiceUsecase, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
179
178
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: InvoiceUsecase, providedIn: 'root' });
180
179
  }
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-common-invoice-usecase-invoice.mjs","sources":["../tmp-esm2022/invoice/usecase/invoice/invoice.service.js","../tmp-esm2022/invoice/usecase/invoice/xxmachina-common-invoice-usecase-invoice.js"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { InvoiceNotionRepository } from '@xxmachina/common/infra/repository/notion';\nimport { CHROMIUM } from '@nx-ddd/common/infrastructure/externals/chromium';\nimport { makeDI } from '@nx-ddd/core';\nimport { RESEND_SERVICE } from '@xxmachina/common/infra/external/resend';\nimport { Invoice } from '@xxmachina/common/invoice/domain/models';\nimport { deepSnakeToCamelCase, getHasuraRepository, HasuraService } from '@nx-ddd/hasura';\nimport { gql } from '@apollo/client/core';\nimport * as i0 from \"@angular/core\";\nexport const INVOICE_CONFIG = makeDI('[@xxmachina/invoice] INVOICE_CONFIG', { optional: false });\nexport class InvoiceUsecase {\n notionRepo = inject(InvoiceNotionRepository);\n chromium = CHROMIUM.inject();\n config = INVOICE_CONFIG.inject();\n resend = RESEND_SERVICE.inject();\n hasura = getHasuraRepository(Invoice, { hasura: inject(HasuraService) });\n hasuraService = inject(HasuraService);\n async list() {\n return this.notionRepo.list();\n }\n async syncOne(id) {\n const invoice = await this.notionRepo.get({ id });\n await this.hasura.create(invoice);\n }\n async sync() {\n console.log('[InvoiceUsecase] Starting sync from Notion to Hasura...');\n const invoices = await this.notionRepo.list();\n console.log(`[InvoiceUsecase] Retrieved ${invoices.length} invoices from Notion`);\n console.log('[InvoiceUsecase] Deleting existing records in Hasura...');\n await this.hasura.deleteAll();\n console.log('[InvoiceUsecase] Saving invoices to Hasura...');\n await this.hasura.saveMany(invoices);\n console.log('[InvoiceUsecase] Sync completed successfully');\n return { synced: invoices.length };\n }\n async makePdf(data) {\n return this.chromium.start(async (browser) => {\n const context = await browser.newContext({\n deviceScaleFactor: 2,\n });\n const page = await context.newPage();\n page.on('console', msg => console.log('PAGE LOG:', msg.text()));\n page.on('pageerror', err => console.log('PAGE ERROR:', err.message));\n const url = `${this.config.templateBaseUrl}?json=${encodeURIComponent(JSON.stringify(data))}`;\n await page.goto(url, { waitUntil: 'networkidle' });\n await page.evaluate(() => document.fonts.ready);\n await page.waitForSelector('h1');\n const title = await page.title();\n const pdf = await page.pdf({ format: 'A4' });\n return { pdf, title, name: `${title}.pdf` };\n });\n }\n async sendMail(mail) {\n const pdf = await this.makePdf(mail.invoice);\n await this.resend.emails.send({\n from: mail.from,\n to: mail.to,\n subject: mail.subject,\n html: mail.content,\n attachments: [\n {\n filename: pdf.name,\n content: pdf.pdf,\n contentType: 'application/pdf',\n }\n ]\n });\n }\n async getLink(invoiceId) {\n try {\n // GraphQLクエリで全ての関連データを一度に取得\n const query = `\n query GetInvoiceWithRelations($id: String!) {\n invoices_by_pk(id: $id) {\n id\n no\n title\n subject\n customer_id\n vendor_id\n amount\n due_date\n orders {\n id\n title\n ecl_id\n customer_id\n vendor_id\n contract_id\n invoice_id\n start_date\n end_date\n unit_price\n unit\n quantity\n amount_input\n amount\n status_in\n status_out\n }\n customer {\n id\n name\n type\n address\n postal_code\n email\n billing_email\n billing_contact\n phone_number\n contact\n suffix\n bank_account\n invoice_number\n }\n vendor {\n id\n name\n type\n address\n postal_code\n email\n billing_email\n billing_contact\n phone_number\n contact\n suffix\n bank_account\n invoice_number\n }\n }\n }\n `;\n const result = await this.hasuraService.query({\n query: gql `${query}`,\n variables: { id: invoiceId }\n }).then(result => {\n // camelCaseに変換\n return deepSnakeToCamelCase(result);\n });\n const invoiceData = result.data?.invoicesByPk;\n if (!invoiceData) {\n throw new Error(`Invoice with ID ${invoiceId} not found`);\n }\n // スネークケースからキャメルケースに変換し、__typenameを削除\n const transformedData = this.transformInvoiceData(invoiceData);\n // テンプレートURLを生成(makePdfと同じロジック)\n const url = `${this.config.templateBaseUrl}?json=${encodeURIComponent(JSON.stringify(transformedData))}`;\n return url;\n }\n catch (error) {\n console.error(`[InvoiceUsecase] Failed to get link for invoice ${invoiceId}:`, error);\n throw error;\n }\n }\n transformInvoiceData(data) {\n const snakeToCamel = (str) => str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n const transform = (obj) => {\n if (Array.isArray(obj)) {\n return obj.map(transform);\n }\n else if (obj !== null && typeof obj === 'object') {\n const transformed = {};\n for (const [key, value] of Object.entries(obj)) {\n // __typenameフィールドを除外\n if (key === '__typename')\n continue;\n const camelKey = snakeToCamel(key);\n transformed[camelKey] = transform(value);\n }\n return transformed;\n }\n return obj;\n };\n return transform(data);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: InvoiceUsecase, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: InvoiceUsecase, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: InvoiceUsecase, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQHh4bWFjaGluYS9jb21tb24vc3JjL2xpYi9pbnZvaWNlL3VzZWNhc2UvaW52b2ljZS9pbnZvaWNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzVFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQWUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQU0xQyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFnQixxQ0FBcUMsRUFBRSxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO0FBRzlHLE1BQU0sT0FBTyxjQUFjO0lBQ1IsVUFBVSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzdDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0IsTUFBTSxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNqQyxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2pDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUs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QUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQy9DLHFCQUFxQjtvQkFDckIsSUFBSSxHQUFHLEtBQUssWUFBWTt3QkFBRSxTQUFTO29CQUVuQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ25DLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNDLENBQUM7Z0JBQ0QsT0FBTyxXQUFXLENBQUM7WUFDckIsQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDO1FBRUYsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQzt1R0F0TFUsY0FBYzsyR0FBZCxjQUFjLGNBREQsTUFBTTs7MkZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbnZvaWNlTm90aW9uUmVwb3NpdG9yeSB9IGZyb20gJ0B4eG1hY2hpbmEvY29tbW9uL2luZnJhL3JlcG9zaXRvcnkvbm90aW9uJztcbmltcG9ydCB7IENIUk9NSVVNIH0gZnJvbSAnQG54LWRkZC9jb21tb24vaW5mcmFzdHJ1Y3R1cmUvZXh0ZXJuYWxzL2Nocm9taXVtJztcbmltcG9ydCB7IG1ha2VESSB9IGZyb20gJ0BueC1kZGQvY29yZSc7XG5pbXBvcnQgeyBSRVNFTkRfU0VSVklDRSB9IGZyb20gJ0B4eG1hY2hpbmEvY29tbW9uL2luZnJhL2V4dGVybmFsL3Jlc2VuZCc7XG5pbXBvcnQgeyBJbnZvaWNlLCBJbnZvaWNlTWFpbCB9IGZyb20gJ0B4eG1hY2hpbmEvY29tbW9uL2ludm9pY2UvZG9tYWluL21vZGVscyc7XG5pbXBvcnQgeyBkZWVwU25ha2VUb0NhbWVsQ2FzZSwgZ2V0SGFzdXJhUmVwb3NpdG9yeSwgSGFzdXJhU2VydmljZSB9IGZyb20gJ0BueC1kZGQvaGFzdXJhJztcbmltcG9ydCB7IGdxbCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEludm9pY2VDb25maWcge1xuICB0ZW1wbGF0ZUJhc2VVcmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IElOVk9JQ0VfQ09ORklHID0gbWFrZURJPEludm9pY2VDb25maWc+KCdbQHh4bWFjaGluYS9pbnZvaWNlXSBJTlZPSUNFX0NPTkZJRycsIHtvcHRpb25hbDogZmFsc2V9KTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBJbnZvaWNlVXNlY2FzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbm90aW9uUmVwbyA9IGluamVjdChJbnZvaWNlTm90aW9uUmVwb3NpdG9yeSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hyb21pdW0gPSBDSFJPTUlVTS5pbmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWcgPSBJTlZPSUNFX0NPTkZJRy5pbmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNlbmQgPSBSRVNFTkRfU0VSVklDRS5pbmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBoYXN1cmEgPSBnZXRIYXN1cmFSZXBvc2l0b3J5KEludm9pY2UsIHsgaGFzdXJhOiBpbmplY3QoSGFzdXJhU2VydmljZSkgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGFzdXJhU2VydmljZSA9IGluamVjdChIYXN1cmFTZXJ2aWNlKTtcblxuICBhc3luYyBsaXN0KCkge1xuICAgIHJldHVybiB0aGlzLm5vdGlvblJlcG8ubGlzdCgpO1xuICB9XG5cbiAgYXN5bmMgc3luY09uZShpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgaW52b2ljZSA9IGF3YWl0IHRoaXMubm90aW9uUmVwby5nZXQoeyBpZCB9KTtcbiAgICBhd2FpdCB0aGlzLmhhc3VyYS5jcmVhdGUoaW52b2ljZSk7XG4gIH1cblxuICBhc3luYyBzeW5jKCkge1xuICAgIGNvbnNvbGUubG9nKCdbSW52b2ljZVVzZWNhc2VdIFN0YXJ0aW5nIHN5bmMgZnJvbSBOb3Rpb24gdG8gSGFzdXJhLi4uJyk7XG4gICAgXG4gICAgY29uc3QgaW52b2ljZXMgPSBhd2FpdCB0aGlzLm5vdGlvblJlcG8ubGlzdCgpO1xuICAgIGNvbnNvbGUubG9nKGBbSW52b2ljZVVzZWNhc2VdIFJldHJpZXZlZCAke2ludm9pY2VzLmxlbmd0aH0gaW52b2ljZXMgZnJvbSBOb3Rpb25gKTtcbiAgICBcbiAgICBjb25zb2xlLmxvZygnW0ludm9pY2VVc2VjYXNlXSBEZWxldGluZyBleGlzdGluZyByZWNvcmRzIGluIEhhc3VyYS4uLicpO1xuICAgIGF3YWl0IHRoaXMuaGFzdXJhLmRlbGV0ZUFsbCgpO1xuICAgIFxuICAgIGNvbnNvbGUubG9nKCdbSW52b2ljZVVzZWNhc2VdIFNhdmluZyBpbnZvaWNlcyB0byBIYXN1cmEuLi4nKTtcbiAgICBhd2FpdCB0aGlzLmhhc3VyYS5zYXZlTWFueShpbnZvaWNlcyk7XG4gICAgXG4gICAgY29uc29sZS5sb2coJ1tJbnZvaWNlVXNlY2FzZV0gU3luYyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgcmV0dXJuIHsgc3luY2VkOiBpbnZvaWNlcy5sZW5ndGggfTtcbiAgfVxuXG4gIGFzeW5jIG1ha2VQZGYoZGF0YTogb2JqZWN0KTogUHJvbWlzZTx7IHBkZjogQnVmZmVyLCB0aXRsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiB0aGlzLmNocm9taXVtLnN0YXJ0KGFzeW5jIChicm93c2VyKSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gYXdhaXQgYnJvd3Nlci5uZXdDb250ZXh0KHtcbiAgICAgICAgZGV2aWNlU2NhbGVGYWN0b3I6IDIsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBjb250ZXh0Lm5ld1BhZ2UoKTtcbiAgICAgIHBhZ2Uub24oJ2NvbnNvbGUnLCBtc2cgPT4gY29uc29sZS5sb2coJ1BBR0UgTE9HOicsIG1zZy50ZXh0KCkpKTtcbiAgICAgIHBhZ2Uub24oJ3BhZ2VlcnJvcicsIGVyciA9PiBjb25zb2xlLmxvZygnUEFHRSBFUlJPUjonLCBlcnIubWVzc2FnZSkpO1xuICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5jb25maWcudGVtcGxhdGVCYXNlVXJsfT9qc29uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGRhdGEpKX1gO1xuICAgICAgYXdhaXQgcGFnZS5nb3RvKHVybCwgeyB3YWl0VW50aWw6ICduZXR3b3JraWRsZScgfSk7XG4gICAgICBhd2FpdCBwYWdlLmV2YWx1YXRlKCgpID0+IGRvY3VtZW50LmZvbnRzLnJlYWR5KTtcbiAgICAgIGF3YWl0IHBhZ2Uud2FpdEZvclNlbGVjdG9yKCdoMScpO1xuICAgICAgY29uc3QgdGl0bGUgPSBhd2FpdCBwYWdlLnRpdGxlKCk7XG4gICAgICBjb25zdCBwZGYgPSBhd2FpdCBwYWdlLnBkZih7IGZvcm1hdDogJ0E0JyB9KTtcbiAgICAgIHJldHVybiB7IHBkZiwgdGl0bGUsIG5hbWU6IGAke3RpdGxlfS5wZGZgIH07XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzZW5kTWFpbChtYWlsOiBJbnZvaWNlTWFpbCkge1xuICAgIGNvbnN0IHBkZiA9IGF3YWl0IHRoaXMubWFrZVBkZihtYWlsLmludm9pY2UpO1xuICAgIGF3YWl0IHRoaXMucmVzZW5kLmVtYWlscy5zZW5kKHtcbiAgICAgIGZyb206IG1haWwuZnJvbSxcbiAgICAgIHRvOiBtYWlsLnRvLFxuICAgICAgc3ViamVjdDogbWFpbC5zdWJqZWN0LFxuICAgICAgaHRtbDogbWFpbC5jb250ZW50LFxuICAgICAgYXR0YWNobWVudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVuYW1lOiBwZGYubmFtZSxcbiAgICAgICAgICBjb250ZW50OiBwZGYucGRmLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vcGRmJyxcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0TGluayhpbnZvaWNlSWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdyYXBoUUzjgq/jgqjjg6rjgaflhajjgabjga7plqLpgKPjg4fjg7zjgr/jgpLkuIDluqbjgavlj5blvpdcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gYFxuICAgICAgICBxdWVyeSBHZXRJbnZvaWNlV2l0aFJlbGF0aW9ucygkaWQ6IFN0cmluZyEpIHtcbiAgICAgICAgICBpbnZvaWNlc19ieV9wayhpZDogJGlkKSB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgbm9cbiAgICAgICAgICAgIHRpdGxlXG4gICAgICAgICAgICBzdWJqZWN0XG4gICAgICAgICAgICBjdXN0b21lcl9pZFxuICAgICAgICAgICAgdmVuZG9yX2lkXG4gICAgICAgICAgICBhbW91bnRcbiAgICAgICAgICAgIGR1ZV9kYXRlXG4gICAgICAgICAgICBvcmRlcnMge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICB0aXRsZVxuICAgICAgICAgICAgICBlY2xfaWRcbiAgICAgICAgICAgICAgY3VzdG9tZXJfaWRcbiAgICAgICAgICAgICAgdmVuZG9yX2lkXG4gICAgICAgICAgICAgIGNvbnRyYWN0X2lkXG4gICAgICAgICAgICAgIGludm9pY2VfaWRcbiAgICAgICAgICAgICAgc3RhcnRfZGF0ZVxuICAgICAgICAgICAgICBlbmRfZGF0ZVxuICAgICAgICAgICAgICB1bml0X3ByaWNlXG4gICAgICAgICAgICAgIHVuaXRcbiAgICAgICAgICAgICAgcXVhbnRpdHlcbiAgICAgICAgICAgICAgYW1vdW50X2lucHV0XG4gICAgICAgICAgICAgIGFtb3VudFxuICAgICAgICAgICAgICBzdGF0dXNfaW5cbiAgICAgICAgICAgICAgc3RhdHVzX291dFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VzdG9tZXIge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICAgYWRkcmVzc1xuICAgICAgICAgICAgICBwb3N0YWxfY29kZVxuICAgICAgICAgICAgICBlbWFpbFxuICAgICAgICAgICAgICBiaWxsaW5nX2VtYWlsXG4gICAgICAgICAgICAgIGJpbGxpbmdfY29udGFjdFxuICAgICAgICAgICAgICBwaG9uZV9udW1iZXJcbiAgICAgICAgICAgICAgY29udGFjdFxuICAgICAgICAgICAgICBzdWZmaXhcbiAgICAgICAgICAgICAgYmFua19hY2NvdW50XG4gICAgICAgICAgICAgIGludm9pY2VfbnVtYmVyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2ZW5kb3Ige1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICAgYWRkcmVzc1xuICAgICAgICAgICAgICBwb3N0YWxfY29kZVxuICAgICAgICAgICAgICBlbWFpbFxuICAgICAgICAgICAgICBiaWxsaW5nX2VtYWlsXG4gICAgICAgICAgICAgIGJpbGxpbmdfY29udGFjdFxuICAgICAgICAgICAgICBwaG9uZV9udW1iZXJcbiAgICAgICAgICAgICAgY29udGFjdFxuICAgICAgICAgICAgICBzdWZmaXhcbiAgICAgICAgICAgICAgYmFua19hY2NvdW50XG4gICAgICAgICAgICAgIGludm9pY2VfbnVtYmVyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgO1xuICAgICAgXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmhhc3VyYVNlcnZpY2UucXVlcnkoe1xuICAgICAgICBxdWVyeTogZ3FsYCR7cXVlcnl9YCxcbiAgICAgICAgdmFyaWFibGVzOiB7IGlkOiBpbnZvaWNlSWQgfVxuICAgICAgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAvLyBjYW1lbENhc2XjgavlpInmj5tcbiAgICAgICAgcmV0dXJuIGRlZXBTbmFrZVRvQ2FtZWxDYXNlKHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgY29uc3QgaW52b2ljZURhdGEgPSAocmVzdWx0IGFzIGFueSkuZGF0YT8uaW52b2ljZXNCeVBrO1xuICAgICAgaWYgKCFpbnZvaWNlRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludm9pY2Ugd2l0aCBJRCAke2ludm9pY2VJZH0gbm90IGZvdW5kYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIOOCueODjeODvOOCr+OCseODvOOCueOBi+OCieOCreODo+ODoeODq+OCseODvOOCueOBq+WkieaPm+OBl+OAgV9fdHlwZW5hbWXjgpLliYrpmaRcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRoaXMudHJhbnNmb3JtSW52b2ljZURhdGEoaW52b2ljZURhdGEpO1xuXG4gICAgICAvLyDjg4bjg7Pjg5fjg6zjg7zjg4hVUkzjgpLnlJ/miJDvvIhtYWtlUGRm44Go5ZCM44GY44Ot44K444OD44Kv77yJXG4gICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmNvbmZpZy50ZW1wbGF0ZUJhc2VVcmx9P2pzb249JHtlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkodHJhbnNmb3JtZWREYXRhKSl9YDtcblxuICAgICAgcmV0dXJuIHVybDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgW0ludm9pY2VVc2VjYXNlXSBGYWlsZWQgdG8gZ2V0IGxpbmsgZm9yIGludm9pY2UgJHtpbnZvaWNlSWR9OmAsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtSW52b2ljZURhdGEoZGF0YTogYW55KTogYW55IHtcbiAgICBjb25zdCBzbmFrZVRvQ2FtZWwgPSAoc3RyOiBzdHJpbmcpID0+IFxuICAgICAgc3RyLnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBsZXR0ZXIpID0+IGxldHRlci50b1VwcGVyQ2FzZSgpKTtcblxuICAgIGNvbnN0IHRyYW5zZm9ybSA9IChvYmo6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmoubWFwKHRyYW5zZm9ybSk7XG4gICAgICB9IGVsc2UgaWYgKG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZDogYW55ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgICAgICAvLyBfX3R5cGVuYW1l44OV44Kj44O844Or44OJ44KS6Zmk5aSWXG4gICAgICAgICAgaWYgKGtleSA9PT0gJ19fdHlwZW5hbWUnKSBjb250aW51ZTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBjYW1lbEtleSA9IHNuYWtlVG9DYW1lbChrZXkpO1xuICAgICAgICAgIHRyYW5zZm9ybWVkW2NhbWVsS2V5XSA9IHRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRyYW5zZm9ybShkYXRhKTtcbiAgfVxufVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHhtYWNoaW5hLWNvbW1vbi1pbnZvaWNlLXVzZWNhc2UtaW52b2ljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0B4eG1hY2hpbmEvY29tbW9uL3NyYy9saWIvaW52b2ljZS91c2VjYXNlL2ludm9pY2UveHhtYWNoaW5hLWNvbW1vbi1pbnZvaWNlLXVzZWNhc2UtaW52b2ljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xxmachina-common-invoice-usecase-invoice.mjs","sources":["../tmp-esm2022/invoice/usecase/invoice/invoice-queries.js","../tmp-esm2022/invoice/usecase/invoice/invoice-utils.js","../tmp-esm2022/invoice/usecase/invoice/invoice.service.js","../tmp-esm2022/invoice/usecase/invoice/xxmachina-common-invoice-usecase-invoice.js"],"sourcesContent":["/**\n * 請求書関連のGraphQLクエリ\n */\nexport const GET_INVOICE_WITH_RELATIONS_QUERY = `\n query GetInvoiceWithRelations($id: String!) {\n invoices_by_pk(id: $id) {\n id\n no\n title\n subject\n customer_id\n vendor_id\n amount\n due_date\n orders {\n id\n title\n ecl_id\n customer_id\n vendor_id\n contract_id\n invoice_id\n start_date\n end_date\n unit_price\n unit\n quantity\n amount_input\n amount\n status_in\n status_out\n }\n customer {\n id\n name\n type\n address\n postal_code\n email\n billing_email\n billing_contact\n phone_number\n contact\n suffix\n bank_account\n invoice_number\n }\n vendor {\n id\n name\n type\n address\n postal_code\n email\n billing_email\n billing_contact\n phone_number\n contact\n suffix\n bank_account\n invoice_number\n }\n }\n }\n`;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS1xdWVyaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQHh4bWFjaGluYS9jb21tb24vc3JjL2xpYi9pbnZvaWNlL3VzZWNhc2UvaW52b2ljZS9pbnZvaWNlLXF1ZXJpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTZEL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog6KuL5rGC5pu46Zai6YCj44GuR3JhcGhRTOOCr+OCqOODqlxuICovXG5cbmV4cG9ydCBjb25zdCBHRVRfSU5WT0lDRV9XSVRIX1JFTEFUSU9OU19RVUVSWSA9IGBcbiAgcXVlcnkgR2V0SW52b2ljZVdpdGhSZWxhdGlvbnMoJGlkOiBTdHJpbmchKSB7XG4gICAgaW52b2ljZXNfYnlfcGsoaWQ6ICRpZCkge1xuICAgICAgaWRcbiAgICAgIG5vXG4gICAgICB0aXRsZVxuICAgICAgc3ViamVjdFxuICAgICAgY3VzdG9tZXJfaWRcbiAgICAgIHZlbmRvcl9pZFxuICAgICAgYW1vdW50XG4gICAgICBkdWVfZGF0ZVxuICAgICAgb3JkZXJzIHtcbiAgICAgICAgaWRcbiAgICAgICAgdGl0bGVcbiAgICAgICAgZWNsX2lkXG4gICAgICAgIGN1c3RvbWVyX2lkXG4gICAgICAgIHZlbmRvcl9pZFxuICAgICAgICBjb250cmFjdF9pZFxuICAgICAgICBpbnZvaWNlX2lkXG4gICAgICAgIHN0YXJ0X2RhdGVcbiAgICAgICAgZW5kX2RhdGVcbiAgICAgICAgdW5pdF9wcmljZVxuICAgICAgICB1bml0XG4gICAgICAgIHF1YW50aXR5XG4gICAgICAgIGFtb3VudF9pbnB1dFxuICAgICAgICBhbW91bnRcbiAgICAgICAgc3RhdHVzX2luXG4gICAgICAgIHN0YXR1c19vdXRcbiAgICAgIH1cbiAgICAgIGN1c3RvbWVyIHtcbiAgICAgICAgaWRcbiAgICAgICAgbmFtZVxuICAgICAgICB0eXBlXG4gICAgICAgIGFkZHJlc3NcbiAgICAgICAgcG9zdGFsX2NvZGVcbiAgICAgICAgZW1haWxcbiAgICAgICAgYmlsbGluZ19lbWFpbFxuICAgICAgICBiaWxsaW5nX2NvbnRhY3RcbiAgICAgICAgcGhvbmVfbnVtYmVyXG4gICAgICAgIGNvbnRhY3RcbiAgICAgICAgc3VmZml4XG4gICAgICAgIGJhbmtfYWNjb3VudFxuICAgICAgICBpbnZvaWNlX251bWJlclxuICAgICAgfVxuICAgICAgdmVuZG9yIHtcbiAgICAgICAgaWRcbiAgICAgICAgbmFtZVxuICAgICAgICB0eXBlXG4gICAgICAgIGFkZHJlc3NcbiAgICAgICAgcG9zdGFsX2NvZGVcbiAgICAgICAgZW1haWxcbiAgICAgICAgYmlsbGluZ19lbWFpbFxuICAgICAgICBiaWxsaW5nX2NvbnRhY3RcbiAgICAgICAgcGhvbmVfbnVtYmVyXG4gICAgICAgIGNvbnRhY3RcbiAgICAgICAgc3VmZml4XG4gICAgICAgIGJhbmtfYWNjb3VudFxuICAgICAgICBpbnZvaWNlX251bWJlclxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcbiJdfQ==","/**\n * 請求書データ変換ユーティリティ\n */\n/**\n * スネークケースをキャメルケースに変換\n */\nconst snakeToCamel = (str) => str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n/**\n * 請求書データをキャメルケースに変換し、__typenameを除外\n */\nexport function transformInvoiceData(data) {\n const transform = (obj) => {\n if (Array.isArray(obj)) {\n return obj.map(transform);\n }\n else if (obj !== null && typeof obj === 'object') {\n const transformed = {};\n for (const [key, value] of Object.entries(obj)) {\n if (key === '__typename')\n continue;\n const camelKey = snakeToCamel(key);\n transformed[camelKey] = transform(value);\n }\n return transformed;\n }\n return obj;\n };\n return transform(data);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0B4eG1hY2hpbmEvY29tbW9uL3NyYy9saWIvaW52b2ljZS91c2VjYXNlL2ludm9pY2UvaW52b2ljZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVIOztHQUVHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFXLEVBQVUsRUFBRSxDQUMzQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBRWhFOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBQVM7SUFDNUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFRLEVBQU8sRUFBRTtRQUNsQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUIsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNuRCxNQUFNLFdBQVcsR0FBUSxFQUFFLENBQUM7WUFDNUIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxHQUFHLEtBQUssWUFBWTtvQkFBRSxTQUFTO2dCQUNuQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUNELE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQztJQUVGLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIOiri+axguabuOODh+ODvOOCv+WkieaPm+ODpuODvOODhuOCo+ODquODhuOCo1xuICovXG5cbi8qKlxuICog44K544ON44O844Kv44Kx44O844K544KS44Kt44Oj44Oh44Or44Kx44O844K544Gr5aSJ5o+bXG4gKi9cbmNvbnN0IHNuYWtlVG9DYW1lbCA9IChzdHI6IHN0cmluZyk6IHN0cmluZyA9PlxuICBzdHIucmVwbGFjZSgvXyhbYS16XSkvZywgKF8sIGxldHRlcikgPT4gbGV0dGVyLnRvVXBwZXJDYXNlKCkpO1xuXG4vKipcbiAqIOiri+axguabuOODh+ODvOOCv+OCkuOCreODo+ODoeODq+OCseODvOOCueOBq+WkieaPm+OBl+OAgV9fdHlwZW5hbWXjgpLpmaTlpJZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybUludm9pY2VEYXRhKGRhdGE6IGFueSk6IGFueSB7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IChvYmo6IGFueSk6IGFueSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgcmV0dXJuIG9iai5tYXAodHJhbnNmb3JtKTtcbiAgICB9IGVsc2UgaWYgKG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWQ6IGFueSA9IHt9O1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnX190eXBlbmFtZScpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBjYW1lbEtleSA9IHNuYWtlVG9DYW1lbChrZXkpO1xuICAgICAgICB0cmFuc2Zvcm1lZFtjYW1lbEtleV0gPSB0cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIHJldHVybiB0cmFuc2Zvcm0oZGF0YSk7XG59XG4iXX0=","import { inject, Injectable } from '@angular/core';\nimport { InvoiceNotionRepository } from '@xxmachina/common/infra/repository/notion';\nimport { CHROMIUM } from '@nx-ddd/common/infrastructure/externals/chromium';\nimport { makeDI } from '@nx-ddd/core';\nimport { RESEND_SERVICE } from '@xxmachina/common/infra/external/resend';\nimport { Invoice } from '@xxmachina/common/invoice/domain/models';\nimport { deepSnakeToCamelCase, getHasuraRepository, HasuraService } from '@nx-ddd/hasura';\nimport { gql } from '@apollo/client/core';\nimport { GET_INVOICE_WITH_RELATIONS_QUERY } from './invoice-queries';\nimport { transformInvoiceData } from './invoice-utils';\nimport * as i0 from \"@angular/core\";\nexport const INVOICE_CONFIG = makeDI('[@xxmachina/invoice] INVOICE_CONFIG', { optional: false });\nexport class InvoiceUsecase {\n notionRepo = inject(InvoiceNotionRepository);\n chromium = CHROMIUM.inject();\n config = INVOICE_CONFIG.inject();\n resend = RESEND_SERVICE.inject();\n hasura = getHasuraRepository(Invoice, { hasura: inject(HasuraService) });\n hasuraService = inject(HasuraService);\n async list() {\n return this.notionRepo.list();\n }\n async syncOne(id) {\n const invoice = await this.notionRepo.get({ id });\n await this.hasura.create(invoice);\n }\n async sync() {\n console.log('[InvoiceUsecase] Starting sync from Notion to Hasura...');\n const invoices = await this.notionRepo.list();\n console.log(`[InvoiceUsecase] Retrieved ${invoices.length} invoices from Notion`);\n console.log('[InvoiceUsecase] Deleting existing records in Hasura...');\n await this.hasura.deleteAll();\n console.log('[InvoiceUsecase] Saving invoices to Hasura...');\n await this.hasura.saveMany(invoices);\n console.log('[InvoiceUsecase] Sync completed successfully');\n return { synced: invoices.length };\n }\n async makePdf(data) {\n return this.chromium.start(async (browser) => {\n const context = await browser.newContext({ deviceScaleFactor: 2 });\n const page = await context.newPage();\n page.on('console', msg => console.log('PAGE LOG:', msg.text()));\n page.on('pageerror', err => console.log('PAGE ERROR:', err.message));\n const url = `${this.config.templateBaseUrl}?json=${encodeURIComponent(JSON.stringify(data))}`;\n await page.goto(url, { waitUntil: 'networkidle' });\n await page.evaluate(() => document.fonts.ready);\n await page.waitForSelector('h1');\n const title = await page.title();\n const pdf = await page.pdf({ format: 'A4' });\n return { pdf, title, name: `${title}.pdf` };\n });\n }\n async sendMail(mail) {\n const pdf = await this.makePdf(mail.invoice);\n await this.resend.emails.send({\n from: mail.from,\n to: mail.to,\n subject: mail.subject,\n html: mail.content,\n attachments: [{ filename: pdf.name, content: pdf.pdf, contentType: 'application/pdf' }]\n });\n }\n async getLink(invoiceId) {\n try {\n const result = await this.hasuraService.query({\n query: gql `${GET_INVOICE_WITH_RELATIONS_QUERY}`,\n variables: { id: invoiceId }\n }).then(result => deepSnakeToCamelCase(result));\n const invoiceData = result.data?.invoicesByPk;\n if (!invoiceData) {\n throw new Error(`Invoice with ID ${invoiceId} not found`);\n }\n const transformedData = transformInvoiceData(invoiceData);\n const url = `${this.config.templateBaseUrl}?json=${encodeURIComponent(JSON.stringify(transformedData))}`;\n return url;\n }\n catch (error) {\n console.error(`[InvoiceUsecase] Failed to get link for invoice ${invoiceId}:`, error);\n throw error;\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: InvoiceUsecase, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: InvoiceUsecase, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: InvoiceUsecase, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQHh4bWFjaGluYS9jb21tb24vc3JjL2xpYi9pbnZvaWNlL3VzZWNhc2UvaW52b2ljZS9pbnZvaWNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzVFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQWUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQU12RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFnQixxQ0FBcUMsRUFBRSxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO0FBRzlHLE1BQU0sT0FBTyxjQUFjO0lBQ1IsVUFBVSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzdDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0IsTUFBTSxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNq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QUssQ0FBQyxtQkFBbUIsU0FBUyxZQUFZLENBQUMsQ0FBQztZQUM1RCxDQUFDO1lBRUQsTUFBTSxlQUFlLEdBQUcsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsU0FBUyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxtREFBbUQsU0FBUyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEYsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQzt1R0EvRVUsY0FBYzsyR0FBZCxjQUFjLGNBREQsTUFBTTs7MkZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbnZvaWNlTm90aW9uUmVwb3NpdG9yeSB9IGZyb20gJ0B4eG1hY2hpbmEvY29tbW9uL2luZnJhL3JlcG9zaXRvcnkvbm90aW9uJztcbmltcG9ydCB7IENIUk9NSVVNIH0gZnJvbSAnQG54LWRkZC9jb21tb24vaW5mcmFzdHJ1Y3R1cmUvZXh0ZXJuYWxzL2Nocm9taXVtJztcbmltcG9ydCB7IG1ha2VESSB9IGZyb20gJ0BueC1kZGQvY29yZSc7XG5pbXBvcnQgeyBSRVNFTkRfU0VSVklDRSB9IGZyb20gJ0B4eG1hY2hpbmEvY29tbW9uL2luZnJhL2V4dGVybmFsL3Jlc2VuZCc7XG5pbXBvcnQgeyBJbnZvaWNlLCBJbnZvaWNlTWFpbCB9IGZyb20gJ0B4eG1hY2hpbmEvY29tbW9uL2ludm9pY2UvZG9tYWluL21vZGVscyc7XG5pbXBvcnQgeyBkZWVwU25ha2VUb0NhbWVsQ2FzZSwgZ2V0SGFzdXJhUmVwb3NpdG9yeSwgSGFzdXJhU2VydmljZSB9IGZyb20gJ0BueC1kZGQvaGFzdXJhJztcbmltcG9ydCB7IGdxbCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgR0VUX0lOVk9JQ0VfV0lUSF9SRUxBVElPTlNfUVVFUlkgfSBmcm9tICcuL2ludm9pY2UtcXVlcmllcyc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1JbnZvaWNlRGF0YSB9IGZyb20gJy4vaW52b2ljZS11dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW52b2ljZUNvbmZpZyB7XG4gIHRlbXBsYXRlQmFzZVVybDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgSU5WT0lDRV9DT05GSUcgPSBtYWtlREk8SW52b2ljZUNvbmZpZz4oJ1tAeHhtYWNoaW5hL2ludm9pY2VdIElOVk9JQ0VfQ09ORklHJywge29wdGlvbmFsOiBmYWxzZX0pO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEludm9pY2VVc2VjYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBub3Rpb25SZXBvID0gaW5qZWN0KEludm9pY2VOb3Rpb25SZXBvc2l0b3J5KTtcbiAgcHJpdmF0ZSByZWFkb25seSBjaHJvbWl1bSA9IENIUk9NSVVNLmluamVjdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IElOVk9JQ0VfQ09ORklHLmluamVjdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc2VuZCA9IFJFU0VORF9TRVJWSUNFLmluamVjdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGhhc3VyYSA9IGdldEhhc3VyYVJlcG9zaXRvcnkoSW52b2ljZSwgeyBoYXN1cmE6IGluamVjdChIYXN1cmFTZXJ2aWNlKSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBoYXN1cmFTZXJ2aWNlID0gaW5qZWN0KEhhc3VyYVNlcnZpY2UpO1xuXG4gIGFzeW5jIGxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMubm90aW9uUmVwby5saXN0KCk7XG4gIH1cblxuICBhc3luYyBzeW5jT25lKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpbnZvaWNlID0gYXdhaXQgdGhpcy5ub3Rpb25SZXBvLmdldCh7IGlkIH0pO1xuICAgIGF3YWl0IHRoaXMuaGFzdXJhLmNyZWF0ZShpbnZvaWNlKTtcbiAgfVxuXG4gIGFzeW5jIHN5bmMoKSB7XG4gICAgY29uc29sZS5sb2coJ1tJbnZvaWNlVXNlY2FzZV0gU3RhcnRpbmcgc3luYyBmcm9tIE5vdGlvbiB0byBIYXN1cmEuLi4nKTtcblxuICAgIGNvbnN0IGludm9pY2VzID0gYXdhaXQgdGhpcy5ub3Rpb25SZXBvLmxpc3QoKTtcbiAgICBjb25zb2xlLmxvZyhgW0ludm9pY2VVc2VjYXNlXSBSZXRyaWV2ZWQgJHtpbnZvaWNlcy5sZW5ndGh9IGludm9pY2VzIGZyb20gTm90aW9uYCk7XG5cbiAgICBjb25zb2xlLmxvZygnW0ludm9pY2VVc2VjYXNlXSBEZWxldGluZyBleGlzdGluZyByZWNvcmRzIGluIEhhc3VyYS4uLicpO1xuICAgIGF3YWl0IHRoaXMuaGFzdXJhLmRlbGV0ZUFsbCgpO1xuXG4gICAgY29uc29sZS5sb2coJ1tJbnZvaWNlVXNlY2FzZV0gU2F2aW5nIGludm9pY2VzIHRvIEhhc3VyYS4uLicpO1xuICAgIGF3YWl0IHRoaXMuaGFzdXJhLnNhdmVNYW55KGludm9pY2VzKTtcblxuICAgIGNvbnNvbGUubG9nKCdbSW52b2ljZVVzZWNhc2VdIFN5bmMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgIHJldHVybiB7IHN5bmNlZDogaW52b2ljZXMubGVuZ3RoIH07XG4gIH1cblxuICBhc3luYyBtYWtlUGRmKGRhdGE6IG9iamVjdCk6IFByb21pc2U8eyBwZGY6IEJ1ZmZlciwgdGl0bGU6IHN0cmluZywgbmFtZTogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gdGhpcy5jaHJvbWl1bS5zdGFydChhc3luYyAoYnJvd3NlcikgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IGF3YWl0IGJyb3dzZXIubmV3Q29udGV4dCh7IGRldmljZVNjYWxlRmFjdG9yOiAyIH0pO1xuICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IGNvbnRleHQubmV3UGFnZSgpO1xuICAgICAgcGFnZS5vbignY29uc29sZScsIG1zZyA9PiBjb25zb2xlLmxvZygnUEFHRSBMT0c6JywgbXNnLnRleHQoKSkpO1xuICAgICAgcGFnZS5vbigncGFnZWVycm9yJywgZXJyID0+IGNvbnNvbGUubG9nKCdQQUdFIEVSUk9SOicsIGVyci5tZXNzYWdlKSk7XG4gICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmNvbmZpZy50ZW1wbGF0ZUJhc2VVcmx9P2pzb249JHtlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpfWA7XG4gICAgICBhd2FpdCBwYWdlLmdvdG8odXJsLCB7IHdhaXRVbnRpbDogJ25ldHdvcmtpZGxlJyB9KTtcbiAgICAgIGF3YWl0IHBhZ2UuZXZhbHVhdGUoKCkgPT4gZG9jdW1lbnQuZm9udHMucmVhZHkpO1xuICAgICAgYXdhaXQgcGFnZS53YWl0Rm9yU2VsZWN0b3IoJ2gxJyk7XG4gICAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHBhZ2UudGl0bGUoKTtcbiAgICAgIGNvbnN0IHBkZiA9IGF3YWl0IHBhZ2UucGRmKHsgZm9ybWF0OiAnQTQnIH0pO1xuICAgICAgcmV0dXJuIHsgcGRmLCB0aXRsZSwgbmFtZTogYCR7dGl0bGV9LnBkZmAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRNYWlsKG1haWw6IEludm9pY2VNYWlsKSB7XG4gICAgY29uc3QgcGRmID0gYXdhaXQgdGhpcy5tYWtlUGRmKG1haWwuaW52b2ljZSk7XG4gICAgYXdhaXQgdGhpcy5yZXNlbmQuZW1haWxzLnNlbmQoe1xuICAgICAgZnJvbTogbWFpbC5mcm9tLFxuICAgICAgdG86IG1haWwudG8sXG4gICAgICBzdWJqZWN0OiBtYWlsLnN1YmplY3QsXG4gICAgICBodG1sOiBtYWlsLmNvbnRlbnQsXG4gICAgICBhdHRhY2htZW50czogW3sgZmlsZW5hbWU6IHBkZi5uYW1lLCBjb250ZW50OiBwZGYucGRmLCBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfV1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldExpbmsoaW52b2ljZUlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmhhc3VyYVNlcnZpY2UucXVlcnkoe1xuICAgICAgICBxdWVyeTogZ3FsYCR7R0VUX0lOVk9JQ0VfV0lUSF9SRUxBVElPTlNfUVVFUll9YCxcbiAgICAgICAgdmFyaWFibGVzOiB7IGlkOiBpbnZvaWNlSWQgfVxuICAgICAgfSkudGhlbihyZXN1bHQgPT4gZGVlcFNuYWtlVG9DYW1lbENhc2UocmVzdWx0KSk7XG5cbiAgICAgIGNvbnN0IGludm9pY2VEYXRhID0gKHJlc3VsdCBhcyBhbnkpLmRhdGE/Lmludm9pY2VzQnlQaztcbiAgICAgIGlmICghaW52b2ljZURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZvaWNlIHdpdGggSUQgJHtpbnZvaWNlSWR9IG5vdCBmb3VuZGApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0cmFuc2Zvcm1JbnZvaWNlRGF0YShpbnZvaWNlRGF0YSk7XG4gICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmNvbmZpZy50ZW1wbGF0ZUJhc2VVcmx9P2pzb249JHtlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkodHJhbnNmb3JtZWREYXRhKSl9YDtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtJbnZvaWNlVXNlY2FzZV0gRmFpbGVkIHRvIGdldCBsaW5rIGZvciBpbnZvaWNlICR7aW52b2ljZUlkfTpgLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHhtYWNoaW5hLWNvbW1vbi1pbnZvaWNlLXVzZWNhc2UtaW52b2ljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0B4eG1hY2hpbmEvY29tbW9uL3NyYy9saWIvaW52b2ljZS91c2VjYXNlL2ludm9pY2UveHhtYWNoaW5hLWNvbW1vbi1pbnZvaWNlLXVzZWNhc2UtaW52b2ljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable } from '@angular/core';
3
3
  import { ApolloClientManagerService } from '@nx-ddd/hasura';
4
- import { switchMap, of, combineLatest } from 'rxjs';
4
+ import { EMPTY, switchMap, of, combineLatest } from 'rxjs';
5
5
  import { gql } from 'apollo-angular';
6
6
  import { getIntrospectionQuery, parse, visit, OperationTypeNode, Kind, print } from 'graphql';
7
7
  import { map } from 'rxjs/operators';
@@ -16,6 +16,8 @@ class GraphqlService {
16
16
  * Headersが更新されるたびに、ApolloClientを再生成するような処理も必要。
17
17
  */
18
18
  subscribe(graphql) {
19
+ if (!graphql.query)
20
+ return EMPTY;
19
21
  const getHeaders = typeof graphql.headers === 'function'
20
22
  ? graphql.headers
21
23
  : () => Promise.resolve(graphql.headers);
@@ -26,6 +28,8 @@ class GraphqlService {
26
28
  })));
27
29
  }
28
30
  query(graphql) {
31
+ if (!graphql.query)
32
+ return EMPTY;
29
33
  const getHeaders = typeof graphql.headers === 'function'
30
34
  ? graphql.headers
31
35
  : () => Promise.resolve(graphql.headers);
@@ -164,6 +168,53 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImpor
164
168
  args: [{ providedIn: 'root' }]
165
169
  }] });
166
170
 
171
+ /**
172
+ * クエリがsubscriptionかどうかを判定
173
+ */
174
+ function isSubscription(query) {
175
+ const queryStr = typeof query === 'string' ? query : query.loc?.source?.body || '';
176
+ return queryStr.trim().startsWith('subscription');
177
+ }
178
+ /**
179
+ * クエリから使用されている変数を抽出
180
+ */
181
+ function extractUsedVariablesFromQuery(query) {
182
+ const variables = new Set();
183
+ const regex = /\$(\w+)/g;
184
+ let match;
185
+ while ((match = regex.exec(query)) !== null) {
186
+ variables.add(match[1]);
187
+ }
188
+ return variables;
189
+ }
190
+ /**
191
+ * 変数値から使用される変数のみをフィルタリング
192
+ */
193
+ function filterVariableValues(variables, usedVars) {
194
+ const filtered = {};
195
+ for (const [key, value] of Object.entries(variables)) {
196
+ if (usedVars.has(key)) {
197
+ filtered[key] = value;
198
+ }
199
+ }
200
+ return filtered;
201
+ }
202
+ /**
203
+ * GraphQLクエリから未使用の変数を削除
204
+ */
205
+ function removeUnusedVariables(graphql) {
206
+ if (!graphql.variables || Object.keys(graphql.variables).length === 0) {
207
+ return graphql;
208
+ }
209
+ const queryStr = typeof graphql.query === 'string' ? graphql.query : graphql.query.loc?.source?.body || '';
210
+ const usedVars = extractUsedVariablesFromQuery(queryStr);
211
+ const filteredVariables = filterVariableValues(graphql.variables, usedVars);
212
+ return {
213
+ ...graphql,
214
+ variables: filteredVariables
215
+ };
216
+ }
217
+
167
218
  /**
168
219
  * GraphqlServiceを拡張して、subscription分割機能を追加
169
220
  *
@@ -177,43 +228,31 @@ class GraphqlEnhancedService extends GraphqlService {
177
228
  * デフォルトでsubscriptionは自動的に分割される
178
229
  */
179
230
  subscribe(graphql) {
180
- // enableSplittingが明示的にfalseの場合、またはsubscriptionでない場合は通常の処理
181
- const shouldSplit = graphql.enableSplitting !== false && this.isSubscription(graphql.query);
231
+ const shouldSplit = graphql.enableSplitting !== false && isSubscription(graphql.query);
182
232
  if (!shouldSplit) {
183
- // 未使用変数を削除してから実行
184
- const filteredGraphql = this.removeUnusedVariables(graphql);
233
+ const filteredGraphql = removeUnusedVariables(graphql);
185
234
  return super.subscribe(filteredGraphql);
186
235
  }
187
- // subscriptionを分割して実行
188
236
  return this.subscribeSplit(graphql);
189
237
  }
190
238
  /**
191
239
  * subscriptionクエリを分割して並列実行し、結果を結合
192
240
  */
193
241
  subscribeSplit(graphql) {
194
- const queryStr = typeof graphql.query === 'string' ? graphql.query : graphql.query.loc?.source?.body || '';
195
- // クエリを分割
196
242
  const splitQueries = this.splitter.splitSubscription(graphql.query);
197
- // 分割が不要な場合(単一フィールド)
198
243
  if (splitQueries.length <= 1) {
199
244
  return super.subscribe(graphql);
200
245
  }
201
- // 各クエリを並列実行
202
246
  const observables = splitQueries.map((splitQuery) => {
203
- // 使用される変数のみを抽出
204
- const usedVars = this.extractUsedVariablesFromQuery(splitQuery.query);
205
- const filteredVariables = this.filterVariableValues(graphql.variables, usedVars);
247
+ const usedVars = extractUsedVariablesFromQuery(splitQuery.query);
248
+ const filteredVariables = filterVariableValues(graphql.variables, usedVars);
206
249
  const splitGraphql = {
207
250
  ...graphql,
208
251
  query: splitQuery.query,
209
252
  variables: filteredVariables
210
253
  };
211
- return super.subscribe(splitGraphql).pipe(map(result => ({
212
- fieldName: splitQuery.fieldName,
213
- result
214
- })));
254
+ return super.subscribe(splitGraphql).pipe(map(result => ({ fieldName: splitQuery.fieldName, result })));
215
255
  });
216
- // 結果を結合
217
256
  return combineLatest(observables).pipe(map(results => {
218
257
  const combinedData = {};
219
258
  results.forEach(({ fieldName, result }) => {
@@ -229,52 +268,6 @@ class GraphqlEnhancedService extends GraphqlService {
229
268
  };
230
269
  }));
231
270
  }
232
- /**
233
- * クエリがsubscriptionかどうかを判定
234
- */
235
- isSubscription(query) {
236
- const queryStr = typeof query === 'string' ? query : query.loc?.source?.body || '';
237
- return queryStr.trim().startsWith('subscription');
238
- }
239
- /**
240
- * クエリから使用されている変数を抽出
241
- */
242
- extractUsedVariablesFromQuery(query) {
243
- const variables = new Set();
244
- const regex = /\$(\w+)/g;
245
- let match;
246
- while ((match = regex.exec(query)) !== null) {
247
- variables.add(match[1]);
248
- }
249
- return variables;
250
- }
251
- /**
252
- * 変数値から使用される変数のみをフィルタリング
253
- */
254
- filterVariableValues(variables, usedVars) {
255
- const filtered = {};
256
- for (const [key, value] of Object.entries(variables)) {
257
- if (usedVars.has(key)) {
258
- filtered[key] = value;
259
- }
260
- }
261
- return filtered;
262
- }
263
- /**
264
- * GraphQLクエリから未使用の変数を削除
265
- */
266
- removeUnusedVariables(graphql) {
267
- if (!graphql.variables || Object.keys(graphql.variables).length === 0) {
268
- return graphql;
269
- }
270
- const queryStr = typeof graphql.query === 'string' ? graphql.query : graphql.query.loc?.source?.body || '';
271
- const usedVars = this.extractUsedVariablesFromQuery(queryStr);
272
- const filteredVariables = this.filterVariableValues(graphql.variables, usedVars);
273
- return {
274
- ...graphql,
275
- variables: filteredVariables
276
- };
277
- }
278
271
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GraphqlEnhancedService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
279
272
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GraphqlEnhancedService, providedIn: 'root' });
280
273
  }